From 7d020d22f8ace49abf84d1bae2d5f358120f2e29 Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 17:57:13 +0530 Subject: [PATCH 1/6] Introduced a new plugin - contentstack/cli-external-migrate --- .talismanrc | 70 +- package-lock.json | 20041 ++++++++++++++++ .../src/util/common-utils.ts | 4 +- .../.eslintrc.js | 18 + .../contentstack-external-migrate/.gitignore | 27 + .../contentstack-external-migrate/AGENTS.md | 43 + .../CHANGELOG.md | 21 + .../CONTRIBUTING.md | 56 + .../contentstack-external-migrate/LICENSE | 21 + .../contentstack-external-migrate/README.md | 859 + .../docs/README.md | 61 + .../docs/architecture.md | 289 + .../docs/expert-workflow.md | 147 + .../docs/getting-started.md | 96 + .../docs/implementation-principles.md | 62 + .../docs/limitations-and-scope.md | 58 + .../docs/manifest-schema.md | 89 + .../docs/phases/README.md | 19 + .../docs/phases/phase-0-foundation.md | 203 + .../docs/phases/phase-1-convert.md | 220 + .../docs/phases/phase-2-audit.md | 143 + .../docs/phases/phase-3-import.md | 135 + .../docs/phases/phase-4-export.md | 175 + .../phases/phase-5-manifest-and-review.md | 176 + .../docs/phases/phase-6-ai-companion.md | 90 + .../docs/repository-layout.md | 59 + .../package.json | 79 + .../scripts/copy-assets.js | 28 + .../contentful/contentful-schema.json | 34 + .../src/adapters/contentful/convert.ts | 327 + .../src/adapters/contentful/export.ts | 432 + .../src/adapters/contentful/index.ts | 9 + .../src/adapters/contentful/validator.ts | 34 + .../src/adapters/registry.ts | 16 + .../src/adapters/types.ts | 42 + .../src/commands/migrate/audit.ts | 86 + .../src/commands/migrate/convert.ts | 97 + .../src/commands/migrate/create.ts | 740 + .../src/commands/migrate/export.ts | 102 + .../src/commands/migrate/import.ts | 314 + .../src/commands/migrate/status.ts | 31 + .../src/index.ts | 2 + .../src/lib/bundle.ts | 17 + .../src/lib/clear-import-state.ts | 38 + .../src/lib/contentful-cli-spawn.ts | 90 + .../src/lib/conversion-summary.ts | 380 + .../src/lib/create-stack.ts | 942 + .../src/lib/csdx-spawn.ts | 28 + .../src/lib/local-date.ts | 11 + .../src/lib/log.ts | 33 + .../src/lib/manifest.ts | 268 + .../src/lib/parse-json-loose.ts | 29 + .../src/services/contentful/.gitkeep | 0 .../src/services/contentful/app/index.json | 3668 +++ .../src/services/contentful/config.ts | 23 + .../src/services/contentful/constants.ts | 339 + .../contentful/content-type-creator.ts | 1646 ++ .../contentful/contentful-schema.json | 34 + .../services/contentful/contentful.service.ts | 1981 ++ .../services/contentful/contentful/jsonRTE.ts | 475 + .../contentful/contentful/markdown.ts | 42 + .../services/contentful/contentful/roles.ts | 217 + .../contentful/contentful/taxonomy.service.ts | 241 + .../services/contentful/extension.service.ts | 210 + .../src/services/contentful/locale-names.json | 272 + .../src/services/contentful/mapper/write.ts | 22 + .../services/contentful/market-app.utils.ts | 100 + .../contentful/marketplace.service.ts | 210 + .../migration-contentful/config/index.json | 7 + .../contentful/migration-contentful/index.js | 13 + .../libs/contentTypeMapper.js | 523 + .../libs/createInitialMapper.js | 193 + .../libs/extractContentTypes.js | 122 + .../libs/extractLocale.js | 37 + .../libs/extractTaxonomy.js | 62 + .../utils/apps/appDetails.json | 11293 +++++++++ .../migration-contentful/utils/helper.js | 79 + .../utils/restrictedKeyWords/index.json | 75 + .../contentful/prompts/master-locale.ts | 59 + .../services/contentful/region-config.json | 65 + .../src/services/contentful/releases.ts | 192 + .../src/services/contentful/scheduled.ts | 116 + .../src/services/contentful/tasks.ts | 128 + .../src/services/contentful/types.ts | 56 + .../src/services/contentful/users.ts | 131 + .../contentful/utils/custom-logger.utils.ts | 33 + .../src/services/contentful/utils/index.ts | 48 + .../src/services/contentful/workflows.ts | 116 + .../test/adapters/contentful/convert.test.ts | 68 + .../test/adapters/contentful/export.test.ts | 106 + .../test/adapters/registry.test.ts | 12 + .../test/commands/migrate/audit.test.ts | 36 + .../test/commands/migrate/import.test.ts | 42 + .../test/fixtures/contentful-export.json | 82 + .../test/lib/bundle.test.ts | 48 + .../test/lib/contentful-cli-spawn.test.ts | 67 + .../test/lib/csdx-spawn.test.ts | 32 + .../test/lib/manifest.test.ts | 110 + .../test/services/contentful/releases.test.ts | 64 + .../services/contentful/scheduled.test.ts | 38 + .../test/services/contentful/tasks.test.ts | 36 + .../tsconfig.json | 18 + .../tsconfig.tsbuildinfo | 1 + .../vitest.config.ts | 9 + 104 files changed, 50982 insertions(+), 6 deletions(-) create mode 100644 package-lock.json create mode 100644 packages/contentstack-external-migrate/.eslintrc.js create mode 100644 packages/contentstack-external-migrate/.gitignore create mode 100644 packages/contentstack-external-migrate/AGENTS.md create mode 100644 packages/contentstack-external-migrate/CHANGELOG.md create mode 100644 packages/contentstack-external-migrate/CONTRIBUTING.md create mode 100644 packages/contentstack-external-migrate/LICENSE create mode 100644 packages/contentstack-external-migrate/README.md create mode 100644 packages/contentstack-external-migrate/docs/README.md create mode 100644 packages/contentstack-external-migrate/docs/architecture.md create mode 100644 packages/contentstack-external-migrate/docs/expert-workflow.md create mode 100644 packages/contentstack-external-migrate/docs/getting-started.md create mode 100644 packages/contentstack-external-migrate/docs/implementation-principles.md create mode 100644 packages/contentstack-external-migrate/docs/limitations-and-scope.md create mode 100644 packages/contentstack-external-migrate/docs/manifest-schema.md create mode 100644 packages/contentstack-external-migrate/docs/phases/README.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-0-foundation.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-1-convert.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-2-audit.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-3-import.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-4-export.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md create mode 100644 packages/contentstack-external-migrate/docs/phases/phase-6-ai-companion.md create mode 100644 packages/contentstack-external-migrate/docs/repository-layout.md create mode 100644 packages/contentstack-external-migrate/package.json create mode 100644 packages/contentstack-external-migrate/scripts/copy-assets.js create mode 100644 packages/contentstack-external-migrate/src/adapters/contentful/contentful-schema.json create mode 100644 packages/contentstack-external-migrate/src/adapters/contentful/convert.ts create mode 100644 packages/contentstack-external-migrate/src/adapters/contentful/export.ts create mode 100644 packages/contentstack-external-migrate/src/adapters/contentful/index.ts create mode 100644 packages/contentstack-external-migrate/src/adapters/contentful/validator.ts create mode 100644 packages/contentstack-external-migrate/src/adapters/registry.ts create mode 100644 packages/contentstack-external-migrate/src/adapters/types.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/audit.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/convert.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/create.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/export.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/import.ts create mode 100644 packages/contentstack-external-migrate/src/commands/migrate/status.ts create mode 100644 packages/contentstack-external-migrate/src/index.ts create mode 100644 packages/contentstack-external-migrate/src/lib/bundle.ts create mode 100644 packages/contentstack-external-migrate/src/lib/clear-import-state.ts create mode 100644 packages/contentstack-external-migrate/src/lib/contentful-cli-spawn.ts create mode 100644 packages/contentstack-external-migrate/src/lib/conversion-summary.ts create mode 100644 packages/contentstack-external-migrate/src/lib/create-stack.ts create mode 100644 packages/contentstack-external-migrate/src/lib/csdx-spawn.ts create mode 100644 packages/contentstack-external-migrate/src/lib/local-date.ts create mode 100644 packages/contentstack-external-migrate/src/lib/log.ts create mode 100644 packages/contentstack-external-migrate/src/lib/manifest.ts create mode 100644 packages/contentstack-external-migrate/src/lib/parse-json-loose.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/.gitkeep create mode 100644 packages/contentstack-external-migrate/src/services/contentful/app/index.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/config.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/constants.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/contentful-schema.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts create mode 100755 packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/contentful/markdown.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/extension.service.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/locale-names.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/mapper/write.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/market-app.utils.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/config/index.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/index.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractContentTypes.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractLocale.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractTaxonomy.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json create mode 100755 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/helper.js create mode 100644 packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/restrictedKeyWords/index.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/prompts/master-locale.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/region-config.json create mode 100644 packages/contentstack-external-migrate/src/services/contentful/releases.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/scheduled.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/tasks.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/types.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/users.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/utils/custom-logger.utils.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/utils/index.ts create mode 100644 packages/contentstack-external-migrate/src/services/contentful/workflows.ts create mode 100644 packages/contentstack-external-migrate/test/adapters/contentful/convert.test.ts create mode 100644 packages/contentstack-external-migrate/test/adapters/contentful/export.test.ts create mode 100644 packages/contentstack-external-migrate/test/adapters/registry.test.ts create mode 100644 packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts create mode 100644 packages/contentstack-external-migrate/test/commands/migrate/import.test.ts create mode 100644 packages/contentstack-external-migrate/test/fixtures/contentful-export.json create mode 100644 packages/contentstack-external-migrate/test/lib/bundle.test.ts create mode 100644 packages/contentstack-external-migrate/test/lib/contentful-cli-spawn.test.ts create mode 100644 packages/contentstack-external-migrate/test/lib/csdx-spawn.test.ts create mode 100644 packages/contentstack-external-migrate/test/lib/manifest.test.ts create mode 100644 packages/contentstack-external-migrate/test/services/contentful/releases.test.ts create mode 100644 packages/contentstack-external-migrate/test/services/contentful/scheduled.test.ts create mode 100644 packages/contentstack-external-migrate/test/services/contentful/tasks.test.ts create mode 100644 packages/contentstack-external-migrate/tsconfig.json create mode 100644 packages/contentstack-external-migrate/tsconfig.tsbuildinfo create mode 100644 packages/contentstack-external-migrate/vitest.config.ts diff --git a/.talismanrc b/.talismanrc index d4bce5008..ba1a909df 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,68 @@ fileignoreconfig: - - filename: packages/contentstack-import/src/import/modules/webhooks.ts - checksum: 8c9527f966fe24debfb36d96a280ac3b2dd6494a58128380c69d7475e595436d - - filename: packages/contentstack-import/test/unit/import/modules/webhooks.test.ts - checksum: 3924a3e38211b8554f25365fe3100cb83361d03370fdaa77e5c7f9e74abafcee + - filename: packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts + checksum: e710b7fbad0a413403de9b937bcc98a9cc84a2d6a920a836ddfa78706b959822 + - filename: package-lock.json + checksum: 8a837168a197b3ddd9aa965a4312327c14f583de9449c8a3c93afbc44c56ac7b + - filename: packages/contentstack-external-migrate/src/services/contentful/extension.service.ts + checksum: 1c0c95059828ccecc2e2f6bc5a377eb37a6e879a2bc2605943857a0bbfd37aad + - filename: packages/contentstack-external-migrate/src/services/contentful/app/index.json + checksum: 508b3ef2dfcabcba03bb85b2716c1690a2a693254cf7605978d909006dd52028 + - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json + checksum: a80c6dfcb90b6a964e604b47699dee694b1dd93630e69859c04bdd41a0f4a7c0 + - filename: packages/contentstack-external-migrate/src/adapters/contentful/validator.ts + checksum: c42584ad1a31a2cc085871eb62cd29c41c350b4f5ec51153e95f1279097f9b59 + - filename: packages/contentstack-external-migrate/src/commands/migrate/status.ts + checksum: 316f723f0ec85b99f4b631f35e0acbbc1c80baec0cece8fc930243c4bb9ccbfd + - filename: packages/contentstack-external-migrate/docs/phases/phase-2-audit.md + checksum: 8aa4d20af2def7b9afec9f3be7cfa269095dd92be015c6dd16774a27b13f4a65 + - filename: packages/contentstack-external-migrate/docs/manifest-schema.md + checksum: 96e188eb1cbb29d1ee3206634ac6a8cd4243c72cf42019cbb848e0e6e83c2b5f + - filename: packages/contentstack-external-migrate/docs/implementation-principles.md + checksum: 2a96dfbe9270fd50c42f781a40cbdf674d12d7f00784d4bd8640f3064b0d319f + - filename: packages/contentstack-external-migrate/src/adapters/contentful/convert.ts + checksum: 0c7cd556f5a7104bfac80f5933f3ce8f61349648462aa80e456db0390cd8491d + - filename: packages/contentstack-external-migrate/src/lib/conversion-summary.ts + checksum: 05303adaed06435152ff69f022b2282faec63b53b36c404555c806cc808d5efa + - filename: packages/contentstack-external-migrate/docs/phases/phase-3-import.md + checksum: 188c1a2b310f15b53608e97f4273e42296a87a20e3e03c0030c2140b873cc809 + - filename: packages/contentstack-external-migrate/docs/architecture.md + checksum: 0c157fef081918197a1213c8dbb1f07fd0d1313eaf90d18ddee335c0685db7b1 + - filename: packages/contentstack-external-migrate/docs/phases/phase-4-export.md + checksum: afb2edadd487e28d2ecc4ff837703dd654394c0469bc70a848e98b07bb934141 + - filename: packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md + checksum: e7ea9d0095b38ed4722456d20560256eb9b7362e452929ba30925c5c66212415 + - filename: packages/contentstack-external-migrate/test/commands/migrate/import.test.ts + checksum: e931a9cb89e9cb6ce384e0ae0218b5e9df3d8631caea5997cdab4e007b6d9d9a + - filename: packages/contentstack-external-migrate/src/commands/migrate/import.ts + checksum: b1749716d8555d8a5af23c32a1b8ee8b39fa2b3dd0c51aff77f814e9766f8a92 + - filename: packages/contentstack-external-migrate/src/services/contentful/users.ts + checksum: 86dce671e996019419256dbb5ebd8d927392715cdecda3a44e2d2315ac13adbe + - filename: packages/contentstack-external-migrate/src/services/contentful/utils/index.ts + checksum: cbc04052ad999e5a2ec6fbcbcd4e1df388d8c3575ffbd8370764934892477b0f + - filename: packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts + checksum: 0f6b8c3bd68093b0e42bf2bf4345321f99e9dda7eafc233a79c296257641950a + - filename: packages/contentstack-external-migrate/test/lib/manifest.test.ts + checksum: 1e80e263e06653dfd967779696b243582fe2aefc89084a2d05499807fec49e37 + - filename: packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts + checksum: 0daa06c38f5b5879cf9e5854c96f5ee4976524b2de5ff3e62c64b0e28239e508 + - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts + checksum: 149d43d9348bf970339297b73bf66ead41efafc51ef1881b147845b4893976ad + - filename: packages/contentstack-external-migrate/src/lib/create-stack.ts + checksum: e38b3286c9091a40d3f6ce24e2b0215c9c26457591d269f886a6a27cfbeca402 + - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts + checksum: 6bc4638c31b5e4a87f26033b5bbea7404594e4fabc25447c8e76ec3b8b7602bb + - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js + checksum: 7431b4ea396ca3ad670c380108b4bf2061f45526fd36161096dd4dd46b4b6f8b + - filename: packages/contentstack-external-migrate/src/commands/migrate/create.ts + checksum: 8268fb6b0cef49574ed16715e8817e4459d29eeaa68e24bf15f1bc83f4e5bc38 + - filename: packages/contentstack-external-migrate/src/lib/manifest.ts + checksum: 6674d08800ae8b3a657f7506cf7e6906b8b952ea90b50240d0314b7cb82d7d47 + - filename: packages/contentstack-external-migrate/README.md + checksum: 46565cc92ff29a8b5adae465f5268585ed1a505e004e80d0843fd5c522dd6b83 + - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js + checksum: 02e0f6cce67b4e070134b3908ce44c063e12133e88c373785bb414eb93e1a9ea + - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts + checksum: f19ae1132a29a93bb2e027366ab495ada1928afc9e7acd21fc7dc0cb774bc46e + - filename: packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts + checksum: 653a7e0443f6b9712ed91ad45aa4189864bee710ea4bd3ac40031225da4da5a5 version: '1.0' diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 000000000..72c1fe321 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20041 @@ +{ + "name": "csdx", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "csdx", + "version": "1.0.0", + "license": "MIT", + "workspaces": [ + "packages/*" + ], + "devDependencies": { + "husky": "^9.1.7", + "pnpm": "^10.28.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../cli/packages/contentstack-auth": { + "name": "@contentstack/cli-auth", + "version": "1.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "otplib": "^12.0.1" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "chai": "^4.5.0", + "dotenv": "^16.4.7", + "eslint": "^9.26.0", + "eslint-config-oclif": "^5.2.2", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "10.8.2", + "nock": "^13.5.6", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../cli/packages/contentstack-auth/node_modules/@contentstack/cli-command": { + "resolved": "../cli/packages/contentstack-command", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@contentstack/cli-utilities": { + "resolved": "../cli/packages/contentstack-utilities", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/nock": { + "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/otplib": { + "resolved": "../node_modules/.pnpm/otplib@12.0.1/node_modules/otplib", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "../cli/packages/contentstack-auth/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "../cli/packages/contentstack-command": { + "name": "@contentstack/cli-command", + "version": "1.8.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../cli/packages/contentstack-command/node_modules/@contentstack/cli-utilities": { + "resolved": "../cli/packages/contentstack-utilities", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/contentstack": { + "resolved": "../node_modules/.pnpm/contentstack@3.27.0/node_modules/contentstack", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "../cli/packages/contentstack-command/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "../cli/packages/contentstack-config": { + "name": "@contentstack/cli-config", + "version": "1.20.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/utils": "~1.9.1", + "@oclif/core": "^4.11.4" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../cli/packages/contentstack-config/node_modules/@contentstack/cli-command": { + "resolved": "../cli/packages/contentstack-command", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@contentstack/cli-utilities": { + "resolved": "../cli/packages/contentstack-utilities", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@contentstack/utils": { + "resolved": "../node_modules/.pnpm/@contentstack+utils@1.9.1/node_modules/@contentstack/utils", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "../cli/packages/contentstack-config/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "../cli/packages/contentstack-utilities": { + "name": "@contentstack/cli-utilities", + "version": "1.18.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "minimatch": "^10.2.5", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../cli/packages/contentstack-utilities/node_modules/@contentstack/management": { + "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.1/node_modules/@contentstack/management", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@contentstack/marketplace-sdk": { + "resolved": "../node_modules/.pnpm/@contentstack+marketplace-sdk@1.5.1_debug@4.4.3/node_modules/@contentstack/marketplace-sdk", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/inquirer": { + "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@21.0.0/node_modules/@types/sinon", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/@types/traverse": { + "resolved": "../node_modules/.pnpm/@types+traverse@0.6.37/node_modules/@types/traverse", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/axios": { + "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/cli-cursor": { + "resolved": "../node_modules/.pnpm/cli-cursor@3.1.0/node_modules/cli-cursor", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/cli-progress": { + "resolved": "../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/cli-table": { + "resolved": "../node_modules/.pnpm/cli-table@0.3.11/node_modules/cli-table", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/conf": { + "resolved": "../node_modules/.pnpm/conf@10.2.0/node_modules/conf", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/fancy-test": { + "resolved": "../node_modules/.pnpm/fancy-test@2.0.42/node_modules/fancy-test", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/figures": { + "resolved": "../node_modules/.pnpm/figures@3.2.0/node_modules/figures", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/inquirer-search-checkbox": { + "resolved": "../node_modules/.pnpm/inquirer-search-checkbox@1.0.0/node_modules/inquirer-search-checkbox", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/inquirer-search-list": { + "resolved": "../node_modules/.pnpm/inquirer-search-list@1.2.6/node_modules/inquirer-search-list", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/js-yaml": { + "resolved": "../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/klona": { + "resolved": "../node_modules/.pnpm/klona@2.0.6/node_modules/klona", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/minimatch": { + "resolved": "../node_modules/.pnpm/minimatch@10.2.5/node_modules/minimatch", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/open": { + "resolved": "../node_modules/.pnpm/open@8.4.2/node_modules/open", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/ora": { + "resolved": "../node_modules/.pnpm/ora@5.4.1/node_modules/ora", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/papaparse": { + "resolved": "../node_modules/.pnpm/papaparse@5.5.3/node_modules/papaparse", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/recheck": { + "resolved": "../node_modules/.pnpm/recheck@4.4.5/node_modules/recheck", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/rxjs": { + "resolved": "../node_modules/.pnpm/rxjs@6.6.7/node_modules/rxjs", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/short-uuid": { + "resolved": "../node_modules/.pnpm/short-uuid@6.0.3/node_modules/short-uuid", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/traverse": { + "resolved": "../node_modules/.pnpm/traverse@0.6.11/node_modules/traverse", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/tty-table": { + "resolved": "../node_modules/.pnpm/tty-table@4.2.3/node_modules/tty-table", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/unique-string": { + "resolved": "../node_modules/.pnpm/unique-string@2.0.0/node_modules/unique-string", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/uuid": { + "resolved": "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "../cli/packages/contentstack-utilities/node_modules/xdg-basedir": { + "resolved": "../node_modules/.pnpm/xdg-basedir@4.0.0/node_modules/xdg-basedir", + "link": true + }, + "../node_modules/.pnpm/@apollo+client@3.14.1_graphql@16.13.0/node_modules/@apollo/client": { + "version": "3.14.1", + "license": "MIT", + "dependencies": { + "@graphql-typed-document-node/core": "^3.1.1", + "@wry/caches": "^1.0.0", + "@wry/equality": "^0.5.6", + "@wry/trie": "^0.5.0", + "graphql-tag": "^2.12.6", + "hoist-non-react-statics": "^3.3.2", + "optimism": "^0.18.0", + "prop-types": "^15.7.2", + "rehackt": "^0.1.0", + "symbol-observable": "^4.0.0", + "ts-invariant": "^0.10.3", + "tslib": "^2.3.0", + "zen-observable-ts": "^1.2.5" + }, + "devDependencies": { + "@actions/github-script": "github:actions/github-script#v7.0.1", + "@arethetypeswrong/cli": "0.15.3", + "@ark/attest": "0.28.0", + "@babel/parser": "7.25.0", + "@changesets/changelog-github": "0.5.0", + "@changesets/cli": "2.27.7", + "@eslint/compat": "1.2.5", + "@eslint/eslintrc": "3.2.0", + "@eslint/js": "9.18.0", + "@graphql-tools/merge": "9.0.4", + "@graphql-tools/schema": "10.0.4", + "@graphql-tools/utils": "10.5.0", + "@microsoft/api-extractor": "7.49.1", + "@rollup/plugin-node-resolve": "11.2.1", + "@size-limit/esbuild-why": "11.1.4", + "@size-limit/preset-small-lib": "11.1.4", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.6.3", + "@testing-library/react": "16.1.0", + "@testing-library/react-render-stream": "2.0.0", + "@testing-library/user-event": "14.5.2", + "@tsconfig/node20": "20.1.4", + "@types/bytes": "3.1.4", + "@types/fetch-mock": "7.3.8", + "@types/glob": "8.1.0", + "@types/hoist-non-react-statics": "3.3.5", + "@types/jest": "29.5.12", + "@types/lodash": "4.17.7", + "@types/node": "22.10.7", + "@types/node-fetch": "2.6.11", + "@types/prop-types": "15.7.14", + "@types/react": "19.0.0", + "@types/react-dom": "19.0.0", + "@types/relay-runtime": "14.1.24", + "@types/use-sync-external-store": "0.0.6", + "@typescript-eslint/eslint-plugin": "8.21.0", + "@typescript-eslint/parser": "8.21.0", + "@typescript-eslint/rule-tester": "8.21.0", + "@typescript-eslint/types": "8.21.0", + "@typescript-eslint/utils": "8.21.0", + "acorn": "8.12.1", + "ajv": "8.17.1", + "blob-polyfill": "7.0.20220408", + "bytes": "3.1.2", + "cross-fetch": "4.0.0", + "eslint": "9.18.0", + "eslint-import-resolver-typescript": "3.7.0", + "eslint-plugin-import": "npm:@phryneas/eslint-plugin-import@2.27.5-pr.2813.2817.199971c", + "eslint-plugin-local-rules": "3.0.2", + "eslint-plugin-react-compiler": "19.0.0-beta-decd7b8-20250118", + "eslint-plugin-react-hooks": "5.1.0", + "eslint-plugin-testing-library": "7.1.1", + "expect-type": "1.1.0", + "fetch-mock": "9.11.0", + "glob": "8.1.0", + "globals": "15.14.0", + "graphql": "16.9.0", + "graphql-17-alpha2": "npm:graphql@17.0.0-alpha.2", + "graphql-ws": "6.0.3", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "jest-junit": "16.0.0", + "lodash": "4.17.21", + "patch-package": "8.0.0", + "pkg-pr-new": "0.0.24", + "prettier": "3.1.1", + "react": "19.0.0", + "react-17": "npm:react@^17", + "react-18": "npm:react@^18", + "react-dom": "19.0.0", + "react-dom-17": "npm:react-dom@^17", + "react-dom-18": "npm:react-dom@^18", + "react-error-boundary": "4.0.13", + "recast": "0.23.9", + "resolve": "1.22.8", + "rimraf": "5.0.9", + "rollup": "2.79.2", + "rollup-plugin-cleanup": "3.2.1", + "rollup-plugin-terser": "7.0.2", + "rxjs": "7.8.1", + "size-limit": "11.1.4", + "subscriptions-transport-ws": "0.11.0", + "terser": "5.31.3", + "ts-api-utils": "2.0.0", + "ts-jest": "29.2.3", + "ts-jest-resolver": "2.0.1", + "ts-morph": "25.0.0", + "ts-node": "10.9.2", + "tsx": "4.19.2", + "typedoc": "0.25.0", + "typescript": "5.7.3", + "web-streams-polyfill": "4.0.0", + "whatwg-fetch": "3.6.20" + }, + "peerDependencies": { + "graphql": "^15.0.0 || ^16.0.0", + "graphql-ws": "^5.5.5 || ^6.0.3", + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", + "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" + }, + "peerDependenciesMeta": { + "graphql-ws": { + "optional": true + }, + "react": { + "optional": true + }, + "react-dom": { + "optional": true + }, + "subscriptions-transport-ws": { + "optional": true + } + } + }, + "../node_modules/.pnpm/@babel+preset-env@7.29.7_@babel+core@7.29.0/node_modules/@babel/preset-env": { + "version": "7.29.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/compat-data": "^7.29.7", + "@babel/helper-compilation-targets": "^7.29.7", + "@babel/helper-plugin-utils": "^7.29.7", + "@babel/helper-validator-option": "^7.29.7", + "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", + "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", + "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", + "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", + "@babel/plugin-syntax-import-assertions": "^7.29.7", + "@babel/plugin-syntax-import-attributes": "^7.29.7", + "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", + "@babel/plugin-transform-arrow-functions": "^7.29.7", + "@babel/plugin-transform-async-generator-functions": "^7.29.7", + "@babel/plugin-transform-async-to-generator": "^7.29.7", + "@babel/plugin-transform-block-scoped-functions": "^7.29.7", + "@babel/plugin-transform-block-scoping": "^7.29.7", + "@babel/plugin-transform-class-properties": "^7.29.7", + "@babel/plugin-transform-class-static-block": "^7.29.7", + "@babel/plugin-transform-classes": "^7.29.7", + "@babel/plugin-transform-computed-properties": "^7.29.7", + "@babel/plugin-transform-destructuring": "^7.29.7", + "@babel/plugin-transform-dotall-regex": "^7.29.7", + "@babel/plugin-transform-duplicate-keys": "^7.29.7", + "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-dynamic-import": "^7.29.7", + "@babel/plugin-transform-explicit-resource-management": "^7.29.7", + "@babel/plugin-transform-exponentiation-operator": "^7.29.7", + "@babel/plugin-transform-export-namespace-from": "^7.29.7", + "@babel/plugin-transform-for-of": "^7.29.7", + "@babel/plugin-transform-function-name": "^7.29.7", + "@babel/plugin-transform-json-strings": "^7.29.7", + "@babel/plugin-transform-literals": "^7.29.7", + "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", + "@babel/plugin-transform-member-expression-literals": "^7.29.7", + "@babel/plugin-transform-modules-amd": "^7.29.7", + "@babel/plugin-transform-modules-commonjs": "^7.29.7", + "@babel/plugin-transform-modules-systemjs": "^7.29.7", + "@babel/plugin-transform-modules-umd": "^7.29.7", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", + "@babel/plugin-transform-new-target": "^7.29.7", + "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", + "@babel/plugin-transform-numeric-separator": "^7.29.7", + "@babel/plugin-transform-object-rest-spread": "^7.29.7", + "@babel/plugin-transform-object-super": "^7.29.7", + "@babel/plugin-transform-optional-catch-binding": "^7.29.7", + "@babel/plugin-transform-optional-chaining": "^7.29.7", + "@babel/plugin-transform-parameters": "^7.29.7", + "@babel/plugin-transform-private-methods": "^7.29.7", + "@babel/plugin-transform-private-property-in-object": "^7.29.7", + "@babel/plugin-transform-property-literals": "^7.29.7", + "@babel/plugin-transform-regenerator": "^7.29.7", + "@babel/plugin-transform-regexp-modifiers": "^7.29.7", + "@babel/plugin-transform-reserved-words": "^7.29.7", + "@babel/plugin-transform-shorthand-properties": "^7.29.7", + "@babel/plugin-transform-spread": "^7.29.7", + "@babel/plugin-transform-sticky-regex": "^7.29.7", + "@babel/plugin-transform-template-literals": "^7.29.7", + "@babel/plugin-transform-typeof-symbol": "^7.29.7", + "@babel/plugin-transform-unicode-escapes": "^7.29.7", + "@babel/plugin-transform-unicode-property-regex": "^7.29.7", + "@babel/plugin-transform-unicode-regex": "^7.29.7", + "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", + "@babel/preset-modules": "0.1.6-no-external-plugins", + "babel-plugin-polyfill-corejs2": "^0.4.15", + "babel-plugin-polyfill-corejs3": "^0.14.0", + "babel-plugin-polyfill-regenerator": "^0.6.6", + "core-js-compat": "^3.48.0", + "semver": "^6.3.1" + }, + "devDependencies": { + "@babel/core": "^7.29.7", + "@babel/core-7.12": "npm:@babel/core@7.12.9", + "@babel/helper-plugin-test-runner": "^7.29.7", + "@babel/traverse": "^7.29.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "../node_modules/.pnpm/@colors+colors@1.6.0/node_modules/@colors/colors": { + "version": "1.6.0", + "license": "MIT", + "devDependencies": { + "eslint": "^8.9.0", + "eslint-config-google": "^0.14.0" + }, + "engines": { + "node": ">=0.1.90" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@18.19.130/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.39/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.15", + "eslint-config-oclif-typescript": "^3.1.13", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@14.18.63/node_modules/@contentstack/cli-config": { + "version": "1.20.4", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/utils": "~1.9.1", + "@oclif/core": "^4.11.4" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@22.19.20/node_modules/@contentstack/cli-config": { + "version": "1.20.4", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/utils": "~1.9.1", + "@oclif/core": "^4.11.4" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies": { + "version": "1.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4.3.0", + "@oclif/test": "^4.1.13", + "fancy-test": "^2.0.42", + "lodash": "^4.17.21" + }, + "devDependencies": { + "@types/node": "^14.18.63", + "eslint": "^7.32.0", + "mocha": "10.8.2", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-launch@1.10.1_@types+node@20.19.42_tslib@2.8.1_typescript@5.9.3/node_modules/@contentstack/cli-launch": { + "version": "1.10.1", + "license": "MIT", + "dependencies": { + "@apollo/client": "^3.14.0", + "@contentstack/cli-command": "^1.8.2", + "@contentstack/cli-utilities": "^1.18.3", + "@oclif/core": "^4.2.7", + "@oclif/plugin-help": "^6.2.25", + "@rollup/plugin-commonjs": "^28.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-typescript": "^12.1.2", + "@types/express": "^4.17.21", + "@types/express-serve-static-core": "^4.17.34", + "adm-zip": "^0.5.16", + "chalk": "^4.1.2", + "cross-fetch": "^4.1.0", + "dotenv": "^16.4.7", + "express": "^4.22.0", + "form-data": "4.0.4", + "graphql": "^16.9.0", + "ini": "^3.0.1", + "lodash": "^4.18.1", + "open": "^8.4.2", + "rollup": "^4.59.0", + "winston": "^3.17.0" + }, + "bin": { + "launch": "bin/run.js" + }, + "devDependencies": { + "@oclif/test": "^4.1.3", + "@types/adm-zip": "^0.5.7", + "@types/chai": "^4.3.20", + "@types/ini": "^1.3.34", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.13", + "@types/mocha": "^10.0.10", + "@types/node": "^22.0.0", + "@types/sinon": "^17.0.3", + "chai": "^4.5.0", + "eslint": "^9.24.0", + "eslint-config-oclif": "^6.0.42", + "husky": "^9.1.7", + "jest": "^29.7.0", + "lint-staged": "^15.5.0", + "mocha": "^11.0.1", + "nyc": "^17.1.0", + "oclif": "^4.17.30", + "shx": "^0.3.4", + "sinon": "^19.0.2", + "ts-jest": "^29.3.1", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=22.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@18.19.130/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + }, + "devDependencies": { + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.9", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^14.18.63", + "@types/sinon": "^21.0.0", + "@types/traverse": "^0.6.37", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "fancy-test": "^2.0.42", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "sinon": "^21.1.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@contentstack+delivery-sdk@5.2.1/node_modules/@contentstack/delivery-sdk": { + "version": "5.2.1", + "license": "MIT", + "dependencies": { + "@contentstack/core": "^1.4.0", + "@contentstack/utils": "^1.8.0", + "axios": "^1.16.1", + "humps": "^2.0.1" + }, + "devDependencies": { + "@playwright/test": "^1.58.2", + "@rollup/plugin-commonjs": "^27.0.0", + "@rollup/plugin-node-resolve": "^15.3.1", + "@rollup/plugin-replace": "^5.0.7", + "@slack/bolt": "^4.6.0", + "@types/humps": "^2.0.6", + "@types/jest": "^29.5.14", + "@types/node-localstorage": "^1.3.3", + "axios-mock-adapter": "^1.22.0", + "babel-jest": "^29.7.0", + "dotenv": "^16.6.1", + "http-server": "^14.1.1", + "husky": "^9.1.7", + "jest": "^29.7.0", + "jest-environment-jsdom": "^29.7.0", + "jest-html-reporter": "^3.10.2", + "jest-html-reporters": "^3.1.7", + "jest-junit": "^16.0.0", + "rollup": "^3.30.0", + "rollup-plugin-esbuild": "^5.0.0", + "ts-jest": "^29.4.6", + "ts-node": "^10.9.2", + "typescript": "~5.7.3" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/@contentstack+json-rte-serializer@2.1.0/node_modules/@contentstack/json-rte-serializer": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "array-flat-polyfill": "^1.0.1", + "lodash": "^4.17.21", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "slate": "^0.103.0", + "uuid": "^8.3.2" + }, + "devDependencies": { + "@types/jest": "^27.0.3", + "@types/jsdom": "^16.2.12", + "@types/lodash.clonedeep": "^4.5.9", + "@types/lodash.flatten": "^4.4.9", + "@types/lodash.isempty": "^4.4.9", + "@types/lodash.isequal": "^4.5.8", + "@types/lodash.isobject": "^3.0.9", + "@types/lodash.isplainobject": "^4.0.9", + "@types/lodash.isundefined": "^3.0.9", + "@types/lodash.kebabcase": "^4.1.9", + "@types/omit-deep-lodash": "^1.1.1", + "@types/uuid": "^8.3.0", + "esbuild": "0.19.11", + "jest": "^27.5.1", + "jest-html-reporter": "^3.7.0", + "jsdom": "^16.6.0", + "omit-deep-lodash": "^1.1.5", + "ts-jest": "^27.0.3", + "typescript": "^4.4.2" + } + }, + "../node_modules/.pnpm/@contentstack+management@1.30.1/node_modules/@contentstack/management": { + "version": "1.30.1", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.9.1", + "assert": "^2.1.0", + "axios": "^1.15.0", + "buffer": "^6.0.3", + "form-data": "^4.0.5", + "husky": "^9.1.7", + "lodash": "^4.18.1", + "otplib": "^12.0.1", + "qs": "^6.15.1", + "stream-browserify": "^3.0.0" + }, + "devDependencies": { + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.2", + "@babel/register": "^7.28.6", + "@babel/runtime": "^7.29.2", + "@slack/bolt": "^4.7.0", + "@types/chai": "^5.2.3", + "@types/jest": "^30.0.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "axios-mock-adapter": "^2.1.0", + "babel-loader": "^10.1.1", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-rewire": "^1.2.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-polyfill": "^6.26.0", + "chai": "^6.2.2", + "clean-webpack-plugin": "^4.0.0", + "docdash": "^2.0.2", + "dotenv": "^17.4.2", + "eslint": "^8.57.1", + "eslint-config-standard": "^13.0.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^7.2.1", + "eslint-plugin-standard": "^5.0.0", + "jest": "^30.3.0", + "jsdoc": "^4.0.5", + "mocha": "^11.7.5", + "mocha-html-reporter": "^0.0.1", + "mochawesome": "^7.1.4", + "multiparty": "^4.2.3", + "nock": "^14.0.12", + "nyc": "^17.1.0", + "os-browserify": "^0.3.0", + "rimraf": "^6.1.3", + "sinon": "^21.1.2", + "string-replace-loader": "^3.3.0", + "ts-jest": "^29.4.9", + "typescript": "^5.9.3", + "webpack": "^5.106.1", + "webpack-cli": "^6.0.1", + "webpack-merge": "6.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management": { + "version": "1.30.3", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.9.1", + "assert": "^2.1.0", + "axios": "^1.16.1", + "buffer": "^6.0.3", + "form-data": "^4.0.5", + "husky": "^9.1.7", + "lodash": "^4.18.1", + "otplib": "^12.0.1", + "qs": "^6.15.2", + "stream-browserify": "^3.0.0" + }, + "devDependencies": { + "@babel/cli": "^7.28.6", + "@babel/core": "^7.29.0", + "@babel/eslint-parser": "^7.28.6", + "@babel/plugin-transform-runtime": "^7.29.0", + "@babel/preset-env": "^7.29.5", + "@babel/register": "^7.29.3", + "@babel/runtime": "^7.29.2", + "@slack/bolt": "^4.7.2", + "@types/chai": "^5.2.3", + "@types/jest": "^30.0.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "axios-mock-adapter": "^2.1.0", + "babel-loader": "^10.1.1", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-rewire": "^1.2.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-polyfill": "^6.26.0", + "chai": "^6.2.2", + "clean-webpack-plugin": "^4.0.0", + "docdash": "^2.0.2", + "dotenv": "^17.4.2", + "eslint": "^8.57.1", + "eslint-config-standard": "^13.0.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^7.3.0", + "eslint-plugin-standard": "^5.0.0", + "jest": "^30.4.2", + "jsdoc": "^4.0.5", + "mocha": "^11.7.5", + "mocha-html-reporter": "^0.0.1", + "mochawesome": "^7.1.4", + "multiparty": "^4.3.0", + "nock": "^14.0.15", + "nyc": "^17.1.0", + "os-browserify": "^0.3.0", + "rimraf": "^6.1.3", + "sinon": "^21.1.2", + "string-replace-loader": "^3.3.0", + "ts-jest": "^29.4.10", + "typescript": "^5.9.3", + "webpack": "^5.106.2", + "webpack-cli": "^6.0.1", + "webpack-merge": "6.0.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../node_modules/.pnpm/@contentstack+marketplace-sdk@1.5.1_debug@4.4.3/node_modules/@contentstack/marketplace-sdk": { + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.9.1", + "axios": "^1.15.0" + }, + "devDependencies": { + "@babel/cli": "^7.28.0", + "@babel/core": "^7.28.0", + "@babel/plugin-transform-runtime": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@babel/register": "^7.27.1", + "@babel/runtime": "^7.28.2", + "@slack/bolt": "^4.6.0", + "@types/jest": "^28.1.8", + "@types/mocha": "^7.0.2", + "axios-mock-adapter": "^1.22.0", + "babel-loader": "^8.4.1", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-rewire": "^1.2.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-polyfill": "^6.26.0", + "chai": "^4.5.0", + "clean-webpack-plugin": "^4.0.0", + "docdash": "^2.0.2", + "dotenv": "^8.6.0", + "eslint": "^8.57.1", + "eslint-config-standard": "^13.0.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-node": "^9.2.0", + "eslint-plugin-promise": "^4.3.1", + "eslint-plugin-standard": "^4.1.0", + "jest": "^28.1.3", + "jsdoc": "^4.0.4", + "mocha": "^11.7.1", + "mochawesome": "^7.1.3", + "multiparty": "^4.2.3", + "nock": "^10.0.6", + "nyc": "^15.1.0", + "os-browserify": "^0.3.0", + "rimraf": "^2.7.1", + "sinon": "^7.5.0", + "string-replace-loader": "^3.2.0", + "ts-jest": "^28.0.8", + "typescript": "^4.9.5", + "webpack": "^5.105.4", + "webpack-cli": "^4.10.0", + "webpack-merge": "4.2.2" + } + }, + "../node_modules/.pnpm/@contentstack+types-generator@3.10.1_graphql@16.13.0/node_modules/@contentstack/types-generator": { + "version": "3.10.1", + "license": "MIT", + "dependencies": { + "@contentstack/delivery-sdk": "^5.2.1", + "@gql2ts/from-schema": "^2.0.0-4", + "async": "^3.2.6", + "axios": "1.16.1", + "lodash": "^4.18.1", + "prettier": "^3.8.3" + }, + "devDependencies": { + "@types/async": "^3.2.25", + "@types/jest": "^29.5.14", + "@types/lodash": "^4.17.24", + "@types/node": "^20.19.39", + "axios-mock-adapter": "^1.22.0", + "cross-env": "^7.0.3", + "dotenv": "^16.6.1", + "husky": "^9.1.7", + "jest": "^29.7.0", + "jest-json-reporter": "^1.2.2", + "nock": "^13.5.6", + "rollup": "^4.60.3", + "ts-jest": "^29.4.9", + "tsup": "^8.5.1", + "typescript": "^5.9.3" + } + }, + "../node_modules/.pnpm/@contentstack+utils@1.9.1/node_modules/@contentstack/utils": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "devDependencies": { + "@commitlint/cli": "^17.8.1", + "@commitlint/config-conventional": "^17.8.1", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "@types/jest": "^26.0.24", + "@types/node": "^20.0.0", + "@typescript-eslint/eslint-plugin": "^8.6.0", + "@typescript-eslint/parser": "^8.6.0", + "commitizen": "^4.3.1", + "eslint": "^9.11.1", + "husky": "^8.0.3", + "jest": "^29.7.0", + "jest-coverage-badges": "^1.0.0", + "jest-environment-jsdom": "^29.7.0", + "jest-html-reporters": "^2.1.7", + "jest-junit": "^15.0.0", + "jsdom": "^25.0.0", + "jsdom-global": "^3.0.2", + "prettier": "^3.3.3", + "rimraf": "^6.0.1", + "rollup": "^4.60.1", + "rollup-plugin-typescript2": "^0.37.0", + "snyk": "^1.1304.0", + "ts-jest": "^29.4.9", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + } + }, + "../node_modules/.pnpm/@eslint+eslintrc@3.3.5/node_modules/@eslint/eslintrc": { + "version": "3.3.5", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.14.0", + "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.1", + "minimatch": "^3.1.5", + "strip-json-comments": "^3.1.1" + }, + "devDependencies": { + "c8": "^7.7.3", + "chai": "^4.3.4", + "eslint": "^9.20.1", + "eslint-config-eslint": "^11.0.0", + "fs-teardown": "^0.1.3", + "mocha": "^9.0.3", + "rollup": "^2.70.1", + "shelljs": "^0.8.5", + "sinon": "^11.1.2", + "temp-dir": "^2.0.0", + "typescript": "^5.7.3" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core": { + "version": "4.11.4", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.3", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^10.2.5", + "semver": "^7.8.1", + "string-width": "^4.2.3", + "supports-color": "^8", + "tinyglobby": "^0.2.16", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-help": "^6", + "@oclif/plugin-plugins": "^5", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/benchmark": "^2.1.5", + "@types/chai": "^4.3.16", + "@types/chai-as-promised": "^7.1.8", + "@types/clean-stack": "^2.1.1", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/indent-string": "^4.0.1", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/picomatch": "^4.0.3", + "@types/pnpapi": "^0.0.5", + "@types/sinon": "^17.0.3", + "@types/supports-color": "^8.1.3", + "@types/wordwrap": "^1.0.3", + "@types/wrap-ansi": "^3.0.0", + "benchmark": "^2.1.4", + "chai": "^4.5.0", + "chai-as-promised": "^7.1.2", + "commitlint": "^19", + "cross-env": "^7.0.3", + "eslint": "^9", + "eslint-config-oclif": "^6", + "eslint-config-prettier": "^10", + "husky": "^9.1.7", + "lint-staged": "^15", + "madge": "^6.1.0", + "mocha": "^11.7.5", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shx": "^0.4.0", + "sinon": "^18", + "ts-node": "^10.9.2", + "tsd": "^0.33.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/@oclif+plugin-help@6.2.37/node_modules/@oclif/plugin-help": { + "version": "6.2.37", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/chai": "^4.3.16", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9.39.2", + "eslint-config-oclif": "^6.0.130", + "eslint-config-prettier": "^10.1.8", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^10.8.2", + "oclif": "^4.22.65", + "prettier": "^3.8.0", + "shx": "^0.4.0", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/@oclif+plugin-help@6.2.44/node_modules/@oclif/plugin-help": { + "version": "6.2.44", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/chai": "^4.3.16", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9.39.4", + "eslint-config-oclif": "^6.0.154", + "eslint-config-prettier": "^10.1.8", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^11", + "oclif": "^4.22.96", + "prettier": "^3.8.1", + "shx": "^0.4.0", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help": { + "version": "6.2.50", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/chai": "^4.3.16", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9.39.4", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10.1.8", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^11", + "oclif": "^4.23.8", + "prettier": "^3.8.3", + "shx": "^0.4.0", + "ts-node": "^10.9.2", + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/@oclif+test@3.2.15/node_modules/@oclif/test": { + "version": "3.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^3.26.6", + "chai": "^4.4.1", + "fancy-test": "^3.0.15" + }, + "devDependencies": { + "@commitlint/config-conventional": "^18.6.3", + "@oclif/prettier-config": "^0.2.1", + "@types/cli-progress": "^3.11.5", + "@types/mocha": "^10", + "@types/node": "^18", + "commitlint": "^18.6.1", + "eslint": "^8.57.0", + "eslint-config-oclif": "^5.2.0", + "eslint-config-oclif-typescript": "^3.1.7", + "eslint-config-prettier": "^9.1.0", + "husky": "^9.0.3", + "lint-staged": "^15.2.2", + "mocha": "^10", + "nock": "^13.5.4", + "prettier": "^3.2.5", + "shx": "^0.3.3", + "ts-node": "^10.9.2", + "typescript": "^5.4.5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test": { + "version": "4.1.18", + "dev": true, + "license": "MIT", + "dependencies": { + "ansis": "^3.17.0", + "debug": "^4.4.3" + }, + "devDependencies": { + "@commitlint/config-conventional": "^18.6.3", + "@eslint/compat": "^1.4.1", + "@oclif/core": "^4.10.3", + "@oclif/prettier-config": "^0.2.1", + "@types/chai": "^5.2.2", + "@types/debug": "^4.1.13", + "@types/mocha": "^10", + "@types/node": "^18", + "chai": "^5.3.3", + "commitlint": "^18.6.1", + "eslint": "^9.39.4", + "eslint-config-oclif": "^6.0.154", + "eslint-config-prettier": "^10.1.8", + "husky": "^9.1.7", + "lint-staged": "^15.5.2", + "mocha": "^10", + "prettier": "^3.8.1", + "shx": "^0.4.0", + "tsx": "^4.21.0", + "typescript": "^5.7.3" + }, + "engines": { + "node": ">=18.0.0" + }, + "peerDependencies": { + "@oclif/core": ">= 3.0.0" + } + }, + "../node_modules/.pnpm/@types+adm-zip@0.5.8/node_modules/@types/adm-zip": { + "version": "0.5.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json": { + "version": "3.2.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+bluebird@3.5.42/node_modules/@types/bluebird": { + "version": "3.5.42", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai": { + "version": "4.3.20", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai": { + "version": "5.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "../node_modules/.pnpm/@types+diff2html@3.0.3/node_modules/@types/diff2html": { + "version": "3.0.3", + "deprecated": "This is a stub types definition. diff2html provides its own type definitions, so you do not need this installed.", + "license": "MIT", + "dependencies": { + "diff2html": "*" + } + }, + "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra": { + "version": "11.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/jsonfile": "*", + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+git-diff@2.0.7/node_modules/@types/git-diff": { + "version": "2.0.7", + "license": "MIT" + }, + "../node_modules/.pnpm/@types+hogan.js@3.0.5/node_modules/@types/hogan.js": { + "version": "3.0.5", + "license": "MIT" + }, + "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer": { + "version": "9.0.9", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/through": "*", + "rxjs": "^7.2.0" + } + }, + "../node_modules/.pnpm/@types+jest@26.0.24/node_modules/@types/jest": { + "version": "26.0.24", + "dev": true, + "license": "MIT", + "dependencies": { + "jest-diff": "^26.0.0", + "pretty-format": "^26.0.0" + } + }, + "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest": { + "version": "29.5.14", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^29.0.0", + "pretty-format": "^29.0.0" + } + }, + "../node_modules/.pnpm/@types+jest@30.0.0/node_modules/@types/jest": { + "version": "30.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "expect": "^30.0.0", + "pretty-format": "^30.0.0" + } + }, + "../node_modules/.pnpm/@types+jsonexport@3.0.5/node_modules/@types/jsonexport": { + "version": "3.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash": { + "version": "4.17.24", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha": { + "version": "10.0.10", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha": { + "version": "8.2.3", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node": { + "version": "14.18.63", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+node@18.19.130/node_modules/@types/node": { + "version": "18.19.130", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node": { + "version": "20.19.35", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node": { + "version": "20.19.39", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node": { + "version": "20.19.42", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node": { + "version": "22.19.20", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "../node_modules/.pnpm/@types+safe-regex@1.1.6/node_modules/@types/safe-regex": { + "version": "1.1.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+shelljs@0.10.0/node_modules/@types/shelljs": { + "version": "0.10.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "fast-glob": "^3.3.2" + } + }, + "../node_modules/.pnpm/@types+sinon@10.0.20/node_modules/@types/sinon": { + "version": "10.0.20", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon": { + "version": "17.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "../node_modules/.pnpm/@types+sinon@21.0.0/node_modules/@types/sinon": { + "version": "21.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon": { + "version": "21.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "../node_modules/.pnpm/@types+table@6.3.2/node_modules/@types/table": { + "version": "6.3.2", + "license": "MIT", + "dependencies": { + "table": "*" + } + }, + "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar": { + "version": "6.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "minipass": "^4.0.0" + } + }, + "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp": { + "version": "0.2.6", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@types+traverse@0.6.37/node_modules/@types/traverse": { + "version": "0.6.37", + "dev": true, + "license": "MIT" + }, + "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" + }, + "devDependencies": { + "@types/debug": "*", + "@types/json-schema": "*", + "@types/marked": "*", + "@types/natural-compare-lite": "^1.4.0", + "@types/prettier": "*", + "chalk": "^5.0.1", + "cross-fetch": "^3.1.5", + "json-schema": "*", + "markdown-table": "^3.0.2", + "marked": "^4.0.15", + "prettier": "*", + "title-case": "^3.0.3", + "typescript": "*" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@10.4.1__e3ba3d274f8f3b210d1198e9e5c2531c/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.61.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/type-utils": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "devDependencies": { + "@types/json-schema": "^7.0.15", + "@types/mdast": "^4.0.4", + "@types/natural-compare": "^1.4.3", + "@types/react": "^18.3.21", + "@typescript-eslint/rule-schema-to-typescript-types": "8.61.0", + "@typescript-eslint/rule-tester": "8.61.0", + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "@vitest/coverage-v8": "^4.0.18", + "ajv": "^6.12.6", + "eslint": "^10.0.0", + "json-schema": "^0.4.0", + "markdown-table": "^3.0.4", + "marked": "^15.0.12", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0", + "prettier": "3.8.0", + "rimraf": "^5.0.10", + "title-case": "^4.3.2", + "tsx": "^4.7.2", + "typescript": ">=4.8.4 <6.1.0", + "unist-util-visit": "^5.0.0", + "vitest": "^4.0.18" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.61.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin": { + "version": "8.61.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.12.2", + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/type-utils": "8.61.0", + "@typescript-eslint/utils": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "ignore": "^7.0.5", + "natural-compare": "^1.4.0", + "ts-api-utils": "^2.5.0" + }, + "devDependencies": { + "@types/json-schema": "^7.0.15", + "@types/mdast": "^4.0.4", + "@types/natural-compare": "^1.4.3", + "@types/react": "^18.3.21", + "@typescript-eslint/rule-schema-to-typescript-types": "8.61.0", + "@typescript-eslint/rule-tester": "8.61.0", + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "@vitest/coverage-v8": "^4.0.18", + "ajv": "^6.12.6", + "eslint": "^10.0.0", + "json-schema": "^0.4.0", + "markdown-table": "^3.0.4", + "marked": "^15.0.12", + "mdast-util-from-markdown": "^2.0.2", + "mdast-util-mdx": "^3.0.0", + "micromark-extension-mdxjs": "^3.0.0", + "prettier": "3.8.0", + "rimraf": "^5.0.10", + "title-case": "^4.3.2", + "tsx": "^4.7.2", + "typescript": ">=4.8.4 <6.1.0", + "unist-util-visit": "^5.0.0", + "vitest": "^4.0.18" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^8.61.0", + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@10.4.1_typescript@6.0.3/node_modules/@typescript-eslint/parser": { + "version": "8.61.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3" + }, + "devDependencies": { + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "@vitest/coverage-v8": "^4.0.18", + "eslint": "^10.0.0", + "glob": "^11.1.0", + "rimraf": "^5.0.10", + "typescript": ">=4.8.4 <6.1.0", + "vitest": "^4.0.18" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser": { + "version": "8.61.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/scope-manager": "8.61.0", + "@typescript-eslint/types": "8.61.0", + "@typescript-eslint/typescript-estree": "8.61.0", + "@typescript-eslint/visitor-keys": "8.61.0", + "debug": "^4.4.3" + }, + "devDependencies": { + "@typescript/native-preview": "7.0.0-dev.20260518.1", + "@vitest/coverage-v8": "^4.0.18", + "eslint": "^10.0.0", + "glob": "^11.1.0", + "rimraf": "^5.0.10", + "typescript": ">=4.8.4 <6.1.0", + "vitest": "^4.0.18" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", + "typescript": ">=4.8.4 <6.1.0" + } + }, + "../node_modules/.pnpm/adm-zip@0.5.17/node_modules/adm-zip": { + "version": "0.5.17", + "license": "MIT", + "devDependencies": { + "chai": "^6.2.2", + "iconv-lite": "^0.7.2", + "mocha": "12.0.0-beta-10", + "prettier": "^3.8.1", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=12.0" + } + }, + "../node_modules/.pnpm/async@3.2.6/node_modules/async": { + "version": "3.2.6", + "license": "MIT", + "devDependencies": { + "@babel/core": "7.25.2", + "@babel/eslint-parser": "^7.16.5", + "babel-minify": "^0.5.0", + "babel-plugin-add-module-exports": "^1.0.4", + "babel-plugin-istanbul": "^7.0.0", + "babel-plugin-syntax-async-generators": "^6.13.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "babel-preset-es2015": "^6.3.13", + "babel-preset-es2017": "^6.22.0", + "babel-register": "^6.26.0", + "babelify": "^10.0.0", + "benchmark": "^2.1.1", + "bluebird": "^3.4.6", + "browserify": "^17.0.0", + "chai": "^4.2.0", + "cheerio": "^0.22.0", + "es6-promise": "^4.2.8", + "eslint": "^8.6.0", + "eslint-plugin-prefer-arrow": "^1.2.3", + "fs-extra": "^11.1.1", + "jsdoc": "^4.0.3", + "karma": "^6.3.12", + "karma-browserify": "^8.1.0", + "karma-firefox-launcher": "^2.1.2", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.0", + "karma-safari-launcher": "^1.0.0", + "mocha": "^6.1.4", + "native-promise-only": "^0.8.0-a", + "nyc": "^17.0.0", + "rollup": "^4.2.0", + "rollup-plugin-node-resolve": "^5.2.0", + "rollup-plugin-npm": "^2.0.0", + "rsvp": "^4.8.5", + "semver": "^7.3.5", + "yargs": "^17.3.1" + } + }, + "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios": { + "version": "1.17.0", + "dev": true, + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + }, + "devDependencies": { + "@babel/core": "^7.29.0", + "@babel/preset-env": "^7.29.5", + "@commitlint/cli": "^21.0.1", + "@commitlint/config-conventional": "^21.0.1", + "@eslint/js": "^10.0.1", + "@rollup/plugin-alias": "^6.0.0", + "@rollup/plugin-babel": "^7.0.0", + "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@rollup/plugin-terser": "^1.0.0", + "@vitest/browser": "^4.1.7", + "@vitest/browser-playwright": "^4.1.7", + "abortcontroller-polyfill": "^1.7.8", + "acorn": "^8.16.0", + "body-parser": "^2.2.2", + "chalk": "^5.6.2", + "cross-env": "^10.1.0", + "dev-null": "^0.1.1", + "eslint": "^10.4.0", + "express": "^5.2.1", + "formdata-node": "^6.0.3", + "formidable": "^3.5.4", + "fs-extra": "^11.3.4", + "get-stream": "^9.0.1", + "globals": "^17.6.0", + "gulp": "^5.0.1", + "husky": "^9.1.7", + "lint-staged": "^17.0.5", + "minimist": "^1.2.8", + "multer": "^2.1.1", + "playwright": "^1.60.0", + "prettier": "^3.8.3", + "rollup": "^4.60.4", + "rollup-plugin-bundle-size": "^1.0.3", + "selfsigned": "^5.5.0", + "stream-throttle": "^0.1.3", + "typescript": "^5.9.3", + "vitest": "^4.1.7" + } + }, + "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "assert-plus": "^1.0.0", + "into-stream": "^5.1.0", + "json-stream-stringify": "^2.0.1", + "JSONStream": "^1.3.1", + "once": "^1.4.0", + "through2": "^3.0.1" + }, + "devDependencies": { + "chai": "^4.2.0", + "conventional-changelog-angular": "^5.0.3", + "conventional-recommended-bump": "^6.0.0", + "coveralls": "^3.0.6", + "documentation": "^12.0.0", + "eslint": "^6.1.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-prettier": "^3.1.0", + "mocha": "^6.2.0", + "nyc": "^14.1.1", + "prettier": "^1.18.2", + "unleash": "^2.0.1" + } + }, + "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird": { + "version": "3.7.2", + "license": "MIT", + "devDependencies": { + "acorn": "^6.0.2", + "acorn-walk": "^6.1.0", + "baconjs": "^0.7.43", + "bluebird": "^2.9.2", + "body-parser": "^1.10.2", + "browserify": "^8.1.1", + "cli-table": "~0.3.1", + "co": "^4.2.0", + "cross-spawn": "^0.2.3", + "glob": "^4.3.2", + "grunt-saucelabs": "~8.4.1", + "highland": "^2.3.0", + "istanbul": "^0.3.5", + "jshint": "^2.6.0", + "jshint-stylish": "~0.2.0", + "kefir": "^2.4.1", + "mkdirp": "~0.5.0", + "mocha": "~2.1", + "open": "~0.0.5", + "optimist": "~0.6.1", + "rimraf": "~2.2.6", + "rx": "^2.3.25", + "serve-static": "^1.7.1", + "sinon": "~1.7.3", + "uglify-js": "~2.4.16" + } + }, + "../node_modules/.pnpm/callsites@3.1.0/node_modules/callsites": { + "version": "3.1.0", + "license": "MIT", + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/.pnpm/cardinal@2.1.1/node_modules/cardinal": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + }, + "devDependencies": { + "readdirp": "~2.1.0", + "standart": "~6.1.0", + "tape": "~4.9.0" + } + }, + "../node_modules/.pnpm/chai@4.5.0/node_modules/chai": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "devDependencies": { + "browserify": "^16.5.2", + "bump-cli": "^2.7.1", + "codecov": "^3.8.3", + "istanbul": "^0.4.5", + "karma": "^6.4.2", + "karma-chrome-launcher": "^2.2.0", + "karma-firefox-launcher": "^1.3.0", + "karma-mocha": "^2.0.1", + "karma-sauce-launcher": "^4.1.4", + "mocha": "^10.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "../node_modules/.pnpm/chai@6.2.2/node_modules/chai": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "devDependencies": { + "@eslint/js": "^9.17.0", + "@rollup/plugin-commonjs": "^29.0.0", + "@web/dev-server-rollup": "^0.6.1", + "@web/test-runner": "^0.20.0", + "@web/test-runner-playwright": "^0.11.0", + "assertion-error": "^2.0.1", + "c8": "^10.1.3", + "check-error": "^2.1.1", + "deep-eql": "^5.0.1", + "esbuild": "^0.27.0", + "eslint": "^9.0.0", + "eslint-plugin-jsdoc": "^61.0.0", + "globals": "^16.3.0", + "loupe": "^3.1.0", + "mocha": "^11.0.0", + "pathval": "^2.0.0", + "prettier": "^3.4.2", + "typescript": "~5.9.0" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "devDependencies": { + "ava": "^2.4.0", + "coveralls": "^3.0.7", + "execa": "^4.0.0", + "import-fresh": "^3.1.0", + "matcha": "^0.7.0", + "nyc": "^15.0.0", + "resolve-from": "^5.0.0", + "tsd": "^0.7.4", + "xo": "^0.28.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "../node_modules/.pnpm/cli-cursor@3.1.0/node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "devDependencies": { + "@types/node": "^12.0.7", + "ava": "^2.1.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "devDependencies": { + "eslint": "^8.14.0", + "eslint-config-aenondynamics": "^0.2.0", + "mocha": "^9.2.2" + }, + "engines": { + "node": ">=4" + } + }, + "../node_modules/.pnpm/cli-table@0.3.11/node_modules/cli-table": { + "version": "0.3.11", + "dependencies": { + "colors": "1.0.3" + }, + "devDependencies": { + "expresso": "~0.9", + "should": "~0.6" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3": { + "version": "0.6.5", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.0" + }, + "devDependencies": { + "cli-table": "^0.3.1", + "eslint": "^6.0.0", + "eslint-config-prettier": "^6.0.0", + "eslint-plugin-prettier": "^3.0.0", + "jest": "^25.2.4", + "jest-runner-eslint": "^0.7.0", + "lerna-changelog": "^1.0.1", + "prettier": "2.3.2" + }, + "engines": { + "node": "10.* || >= 12.*" + }, + "optionalDependencies": { + "@colors/colors": "1.5.0" + } + }, + "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux": { + "version": "6.0.9", + "license": "MIT", + "dependencies": { + "@oclif/core": "^1.1.1", + "@oclif/linewrap": "^1.0.0", + "@oclif/screen": "^1.0.4 ", + "ansi-escapes": "^4.3.0", + "ansi-styles": "^4.2.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.0", + "clean-stack": "^3.0.0", + "cli-progress": "^3.10.0", + "extract-stack": "^2.0.0", + "fs-extra": "^8.1", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.13.1", + "lodash": "^4.17.21", + "natural-orderby": "^2.0.1", + "object-treeify": "^1.1.4", + "password-prompt": "^1.1.2", + "semver": "^7.3.2", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "supports-color": "^8.1.0", + "supports-hyperlinks": "^2.1.0", + "tslib": "^2.0.0" + }, + "devDependencies": { + "@types/ansi-styles": "^3.2.1", + "@types/chai": "^4.1.7", + "@types/chai-as-promised": "^7.1.0", + "@types/clean-stack": "^2.1.1", + "@types/extract-stack": "^2.0.0", + "@types/fs-extra": "^8.1", + "@types/js-yaml": "^3.12.1", + "@types/lodash": "^4.14.117", + "@types/mocha": "^8.0.0", + "@types/node": "^11.11.2", + "@types/semver": "^7.3.1", + "@types/strip-ansi": "^5.2.1", + "@types/supports-color": "^8.1.1", + "axios": "^0.24.0", + "chai": "^4.2.0", + "chai-as-promised": "^7.1.1", + "eslint": "^7.32.0", + "eslint-config-oclif": "^4.0.0", + "eslint-config-oclif-typescript": "^1.0.2", + "fancy-test": "^1.4.10", + "mocha": "^9.1.3", + "ts-node": "^9.0.0", + "typescript": "4.5.4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/collapse-whitespace@1.1.7/node_modules/collapse-whitespace": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "block-elements": "^1.0.0", + "void-elements": "^2.0.1" + }, + "devDependencies": { + "babel": "^5.6.14", + "browserify": "^10.2.6", + "standard": "^4.5.3", + "uglify-js": "^2.4.23" + } + }, + "../node_modules/.pnpm/concat-stream@2.0.0/node_modules/concat-stream": { + "version": "2.0.0", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + }, + "devDependencies": { + "tape": "^4.6.3" + } + }, + "../node_modules/.pnpm/conf@10.2.0/node_modules/conf": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "devDependencies": { + "@ava/typescript": "^1.1.1", + "@sindresorhus/tsconfig": "^0.7.0", + "@types/node": "^14.14.41", + "@types/semver": "^7.3.4", + "@types/write-file-atomic": "^3.0.1", + "ava": "^3.15.0", + "clear-module": "^4.1.1", + "del": "^6.0.0", + "del-cli": "^3.0.1", + "delay": "^5.0.0", + "nyc": "^15.1.0", + "p-event": "^4.2.0", + "tempy": "^1.0.1", + "tsd": "^0.14.0", + "typescript": "^4.4.3", + "xo": "^0.38.2" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/.pnpm/contentstack@3.27.0/node_modules/contentstack": { + "version": "3.27.0", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.4.1", + "es6-promise": "^4.2.8", + "husky": "^9.1.7", + "localStorage": "1.0.4" + }, + "devDependencies": { + "@babel/core": "^7.28.0", + "@babel/eslint-parser": "^7.28.0", + "@babel/preset-env": "^7.28.0", + "@slack/bolt": "^4.4.0", + "@types/jest": "^30.0.0", + "babel-loader": "^10.0.0", + "clean-webpack-plugin": "^4.0.0", + "dotenv": "^17.2.1", + "eslint": "^8.57.1", + "eslint-config-standard": "^17.1.0", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-promise": "^6.6.0", + "eslint-plugin-standard": "^4.1.0", + "jest": "^30.0.5", + "jest-html-reporters": "^3.1.7", + "jsdoc": "^4.0.4", + "jsdom": "^26.1.0", + "minami": "^1.2.3", + "node-request-interceptor": "^0.6.3", + "string-replace-loader": "^3.2.0", + "tap-html": "^1.1.0", + "tap-json": "1.0.0", + "ts-jest": "^29.4.0", + "typescript": "^5.9.2", + "webpack": "^5.101.0", + "webpack-cli": "^6.0.1", + "webpack-merge": "6.0.1", + "webpack-node-externals": "^3.0.0" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "../node_modules/.pnpm/conventional-changelog-cli@5.0.0_conventional-commits-filter@5.0.0/node_modules/conventional-changelog-cli": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog": "^6.0.0", + "meow": "^13.0.0", + "tempfile": "^5.0.0" + }, + "bin": { + "conventional-changelog": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "devDependencies": { + "brfs": "^2.0.1", + "browserify": "^16.2.3", + "coveralls": "^3.0.2", + "karma": "^3.1.4", + "karma-browserify": "^6.0.0", + "karma-chrome-launcher": "^2.2.0", + "karma-mocha": "^1.3.0", + "mocha": "^5.2.0", + "mocha-lcov-reporter": "^1.2.0", + "sinon": "^14.0.0", + "xo": "^0.23.0" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "../node_modules/.pnpm/diff2html@3.4.56/node_modules/diff2html": { + "version": "3.4.56", + "license": "MIT", + "dependencies": { + "@profoundlogic/hogan": "^3.0.4", + "diff": "^8.0.3" + }, + "devDependencies": { + "@eslint/js": "^9.39.2", + "@eslint/json": "^1.0.0", + "@types/hogan.js": "3.0.5", + "@types/jest": "^30.0.0", + "@types/node": "^25.1.0", + "@types/nopt": "3.0.32", + "all-contributors-cli": "^6.26.1", + "autoprefixer": "^10.4.24", + "bulma": "^1.0.4", + "clipboard": "2.0.11", + "copy-webpack-plugin": "^13.0.1", + "css-loader": "^7.1.3", + "cssnano": "^7.1.2", + "eslint": "^9.39.2", + "eslint-plugin-jest": "29.12.1", + "eslint-plugin-promise": "^7.2.1", + "file-loader": "6.2.0", + "globals": "^17.2.0", + "handlebars": "4.7.8", + "handlebars-loader": "1.7.3", + "html-webpack-plugin": "^5.6.6", + "husky": "^9.1.7", + "image-webpack-loader": "8.1.0", + "is-ci-cli": "2.2.0", + "jest": "30.2.0", + "lint-staged": "^16.2.7", + "markdown-toc": "^1.2.0", + "mini-css-extract-plugin": "^2.10.0", + "mkdirp": "3.0.1", + "nopt": "^9.0.0", + "postcss": "^8.5.6", + "postcss-cli": "11.0.1", + "postcss-import": "^16.1.1", + "postcss-loader": "^8.2.0", + "postcss-preset-env": "^11.1.2", + "prettier": "^3.8.1", + "prettier-2": "npm:prettier@^3", + "ts-jest": "^29.4.6", + "ts-loader": "9.5.4", + "ts-node": "10.9.2", + "typescript": "^5.9.3", + "typescript-eslint": "^8.54.0", + "url-loader": "4.1.1", + "webpack": "^5.104.1", + "webpack-cli": "^6.0.1", + "webpack-dev-server": "^5.2.3", + "whatwg-fetch": "3.6.20" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "highlight.js": "11.11.1" + } + }, + "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand": { + "version": "9.0.0", + "dev": true, + "license": "BSD-2-Clause", + "devDependencies": { + "@types/node": "^17.0.8", + "dotenv": "16.0.2", + "lab": "^14.3.4", + "should": "^11.2.1", + "standard": "^16.0.4", + "typescript": "^4.5.4" + }, + "engines": { + "node": ">=12" + } + }, + "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv": { + "version": "16.6.1", + "dev": true, + "license": "BSD-2-Clause", + "devDependencies": { + "@types/node": "^18.11.3", + "decache": "^4.6.2", + "sinon": "^14.0.1", + "standard": "^17.0.0", + "standard-version": "^9.5.0", + "tap": "^19.2.0", + "typescript": "^4.8.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "../node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv": { + "version": "17.4.2", + "dev": true, + "license": "BSD-2-Clause", + "devDependencies": { + "@types/node": "^18.11.3", + "decache": "^4.6.2", + "sinon": "^14.0.1", + "standard": "^17.0.0", + "standard-version": "^9.5.0", + "tap": "^19.2.0", + "typescript": "^4.8.4" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@1.0.3_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^4.31.2", + "@typescript-eslint/parser": "^4.31.2", + "eslint-config-xo-space": "^0.29.0", + "eslint-plugin-mocha": "^9.0.0", + "eslint-plugin-node": "^11.1.0" + }, + "devDependencies": { + "eslint": "^7.32.0", + "typescript": "^4" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif-typescript": { + "version": "3.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15", + "eslint-plugin-perfectionist": "^2.11.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^8.57.1", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif-typescript": { + "version": "3.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15", + "eslint-plugin-perfectionist": "^2.11.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^8.57.1", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { + "version": "3.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15", + "eslint-plugin-perfectionist": "^2.11.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^8.57.1", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript": { + "version": "3.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15", + "eslint-plugin-perfectionist": "^2.11.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^8.57.1", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { + "version": "3.1.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "^6.21.0", + "@typescript-eslint/parser": "^6.21.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.7.0", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15", + "eslint-plugin-perfectionist": "^2.11.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^8.57.1", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@4.0.0_eslint@8.57.1/node_modules/eslint-config-oclif": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-xo-space": "^0.27.0", + "eslint-plugin-mocha": "^9.0.0", + "eslint-plugin-node": "^11.1.0", + "eslint-plugin-unicorn": "^36.0.0" + }, + "devDependencies": { + "eslint": "^7.32.0" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@10.4.1/node_modules/eslint-config-oclif": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-xo-space": "^0.35.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15.1.0", + "eslint-plugin-unicorn": "^48.0.1" + }, + "devDependencies": { + "eslint": "^8.57.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-xo-space": "^0.35.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15.1.0", + "eslint-plugin-unicorn": "^48.0.1" + }, + "devDependencies": { + "eslint": "^8.57.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif": { + "version": "5.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-config-xo-space": "^0.35.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^15.1.0", + "eslint-plugin-unicorn": "^48.0.1" + }, + "devDependencies": { + "eslint": "^8.57.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif": { + "version": "6.0.144", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.3", + "@eslint/js": "^9.38.0", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.56.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif": { + "version": "6.0.144", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.3", + "@eslint/js": "^9.38.0", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.56.0" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif": { + "version": "6.0.162", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.59.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif": { + "version": "6.0.162", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.59.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif": { + "version": "6.0.168", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.60.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@10.4.1/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif": { + "version": "6.0.168", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.60.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif": { + "version": "6.0.168", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.60.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif": { + "version": "6.0.168", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@stylistic/eslint-plugin": "^3.1.0", + "@typescript-eslint/eslint-plugin": "^8", + "@typescript-eslint/parser": "^8", + "eslint-config-oclif": "^5.2.2", + "eslint-config-xo": "^0.49.0", + "eslint-config-xo-space": "^0.35.0", + "eslint-import-resolver-typescript": "^3.10.1", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-mocha": "^10.5.0", + "eslint-plugin-n": "^17.24.0", + "eslint-plugin-perfectionist": "^4", + "eslint-plugin-unicorn": "^56.0.1", + "typescript-eslint": "^8.60.1" + }, + "devDependencies": { + "@oclif/prettier-config": "^0.2.1", + "eslint": "^9", + "typescript": "^5" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", + "link": true + }, + "../node_modules/.pnpm/eslint-config-prettier@10.1.8_eslint@10.4.1/node_modules/eslint-config-prettier": { + "version": "10.1.8", + "dev": true, + "license": "MIT", + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "funding": { + "url": "https://opencollective.com/eslint-config-prettier" + }, + "peerDependencies": { + "eslint": ">=7.0.0" + } + }, + "../node_modules/.pnpm/eslint-plugin-prettier@5.5.6_eslint-config-prettier@10.1.8_eslint@10.4.1__eslint@10.4.1_prettier@3.8.3/node_modules/eslint-plugin-prettier": { + "version": "5.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "prettier-linter-helpers": "^1.0.1", + "synckit": "^0.11.13" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint-plugin-prettier" + }, + "peerDependencies": { + "@types/eslint": ">=8.0.0", + "eslint": ">=8.0.0", + "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", + "prettier": ">=3.0.0" + }, + "peerDependenciesMeta": { + "@types/eslint": { + "optional": true + }, + "eslint-config-prettier": { + "optional": true + } + } + }, + "../node_modules/.pnpm/eslint-plugin-unicorn@48.0.1_eslint@8.57.1/node_modules/eslint-plugin-unicorn": { + "version": "48.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@babel/helper-validator-identifier": "^7.22.5", + "@eslint-community/eslint-utils": "^4.4.0", + "ci-info": "^3.8.0", + "clean-regexp": "^1.0.0", + "esquery": "^1.5.0", + "indent-string": "^4.0.0", + "is-builtin-module": "^3.2.1", + "jsesc": "^3.0.2", + "lodash": "^4.17.21", + "pluralize": "^8.0.0", + "read-pkg-up": "^7.0.1", + "regexp-tree": "^0.1.27", + "regjsparser": "^0.10.0", + "semver": "^7.5.4", + "strip-indent": "^3.0.0" + }, + "devDependencies": { + "@babel/code-frame": "^7.22.5", + "@babel/core": "^7.22.8", + "@babel/eslint-parser": "^7.22.7", + "@lubien/fixture-beta-package": "^1.0.0-beta.1", + "@typescript-eslint/parser": "^6.2.0", + "ava": "^3.15.0", + "c8": "^8.0.0", + "chalk": "^5.3.0", + "enquirer": "^2.3.6", + "eslint": "^8.44.0", + "eslint-ava-rule-tester": "^4.0.0", + "eslint-doc-generator": "^1.4.3", + "eslint-plugin-eslint-plugin": "^5.1.0", + "eslint-plugin-internal-rules": "file:./scripts/internal-rules/", + "eslint-remote-tester": "^3.0.0", + "eslint-remote-tester-repositories": "^1.0.1", + "execa": "^7.1.1", + "listr": "^0.14.3", + "lodash-es": "^4.17.21", + "markdownlint-cli": "^0.35.0", + "mem": "^9.0.2", + "npm-package-json-lint": "^7.0.0", + "npm-run-all": "^4.1.5", + "outdent": "^0.8.0", + "typescript": "^5.1.6", + "vue-eslint-parser": "^9.3.1", + "xo": "^0.54.2", + "yaml": "^2.3.1" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" + }, + "peerDependencies": { + "eslint": ">=8.44.0" + } + }, + "../node_modules/.pnpm/eslint@10.4.1/node_modules/eslint": { + "version": "10.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.8.0", + "@eslint-community/regexpp": "^4.12.2", + "@eslint/config-array": "^0.23.5", + "@eslint/config-helpers": "^0.6.0", + "@eslint/core": "^1.2.1", + "@eslint/plugin-kit": "^0.7.2", + "@humanfs/node": "^0.16.6", + "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "ajv": "^6.14.0", + "cross-spawn": "^7.0.6", + "debug": "^4.3.2", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^9.1.2", + "eslint-visitor-keys": "^5.0.1", + "espree": "^11.2.0", + "esquery": "^1.7.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", + "minimatch": "^10.2.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.18.0", + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@cypress/webpack-preprocessor": "^6.0.2", + "@eslint/eslintrc": "^3.3.5", + "@eslint/json": "^1.2.0", + "@types/esquery": "^1.5.4", + "@types/node": "^22.13.14", + "@typescript-eslint/parser": "^8.58.2", + "babel-loader": "^8.0.5", + "c8": "^11.0.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "cypress": "^14.1.0", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-plugin": "^7.3.2", + "eslint-plugin-expect-type": "^0.6.0", + "eslint-plugin-yml": "^1.14.0", + "eslint-release": "^3.3.0", + "eslint-rule-extender": "^0.0.1", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fs-teardown": "^0.1.3", + "glob": "^10.0.0", + "globals": "^16.2.0", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "jiti": "^2.6.1", + "knip": "^6.13.1", + "lint-staged": "^11.0.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "markdownlint-cli2": "^0.22.0", + "marked": "^4.0.8", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^11.7.1", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "prettier": "3.8.3", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "regenerator-runtime": "^0.14.0", + "semver": "^7.5.3", + "shelljs": "^0.10.0", + "sinon": "^11.0.0", + "typescript": "^6.0.3", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^20.19.0 || ^22.13.0 || >=24" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@sinonjs/fake-timers": "11.2.2", + "@wdio/browser-runner": "^8.14.6", + "@wdio/cli": "^8.14.6", + "@wdio/concise-reporter": "^8.14.0", + "@wdio/globals": "^8.14.6", + "@wdio/mocha-framework": "^8.14.0", + "babel-loader": "^8.0.5", + "c8": "^7.12.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-comments": "^3.2.0", + "eslint-plugin-eslint-plugin": "^5.2.1", + "eslint-plugin-internal-rules": "file:tools/internal-rules", + "eslint-plugin-jsdoc": "^46.2.5", + "eslint-plugin-n": "^16.6.0", + "eslint-plugin-unicorn": "^49.0.0", + "eslint-release": "^3.3.0", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fast-glob": "^3.2.11", + "fs-teardown": "^0.1.3", + "glob": "^7.1.6", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "lint-staged": "^11.0.0", + "load-perf": "^0.2.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "markdownlint": "^0.32.0", + "markdownlint-cli": "^0.37.0", + "marked": "^4.0.8", + "memfs": "^3.0.1", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^8.3.2", + "mocha-junit-reporter": "^2.0.0", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "pirates": "^4.0.5", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "recast": "^0.23.0", + "regenerator-runtime": "^0.14.0", + "rollup-plugin-node-polyfills": "^0.2.1", + "semver": "^7.5.3", + "shelljs": "^0.8.2", + "sinon": "^11.0.0", + "vite-plugin-commonjs": "0.10.1", + "webdriverio": "^8.14.6", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint": { + "version": "9.39.3", + "dev": true, + "license": "MIT", + "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.3", + "@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" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.18.0", + "@babel/core": "^7.4.3", + "@babel/preset-env": "^7.4.3", + "@cypress/webpack-preprocessor": "^6.0.2", + "@eslint/json": "^0.13.2", + "@trunkio/launcher": "^1.3.4", + "@types/esquery": "^1.5.4", + "@types/node": "^22.13.14", + "@typescript-eslint/parser": "^8.4.0", + "babel-loader": "^8.0.5", + "c8": "^7.12.0", + "chai": "^4.0.1", + "cheerio": "^0.22.0", + "common-tags": "^1.8.0", + "core-js": "^3.1.3", + "cypress": "^14.1.0", + "ejs": "^3.0.2", + "eslint": "file:.", + "eslint-config-eslint": "file:packages/eslint-config-eslint", + "eslint-plugin-eslint-plugin": "^6.0.0", + "eslint-plugin-expect-type": "^0.6.0", + "eslint-plugin-yml": "^1.14.0", + "eslint-release": "^3.3.0", + "eslint-rule-composer": "^0.3.0", + "eslump": "^3.0.0", + "esprima": "^4.0.1", + "fast-glob": "^3.2.11", + "fs-teardown": "^0.1.3", + "glob": "^10.0.0", + "globals": "^16.2.0", + "got": "^11.8.3", + "gray-matter": "^4.0.3", + "jiti": "^2.6.1", + "jiti-v2.0": "npm:jiti@2.0.x", + "jiti-v2.1": "npm:jiti@2.1.x", + "knip": "^5.60.2", + "lint-staged": "^11.0.0", + "markdown-it": "^12.2.0", + "markdown-it-container": "^3.0.0", + "marked": "^4.0.8", + "metascraper": "^5.25.7", + "metascraper-description": "^5.25.7", + "metascraper-image": "^5.29.3", + "metascraper-logo": "^5.25.7", + "metascraper-logo-favicon": "^5.25.7", + "metascraper-title": "^5.25.7", + "mocha": "^11.7.1", + "node-polyfill-webpack-plugin": "^1.0.3", + "npm-license": "^0.3.3", + "pirates": "^4.0.5", + "progress": "^2.0.3", + "proxyquire": "^2.0.1", + "recast": "^0.23.0", + "regenerator-runtime": "^0.14.0", + "semver": "^7.5.3", + "shelljs": "^0.10.0", + "sinon": "^11.0.0", + "typescript": "^5.3.3", + "webpack": "^5.23.0", + "webpack-cli": "^4.5.0", + "yorkie": "^2.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } + } + }, + "../node_modules/.pnpm/fancy-test@2.0.42/node_modules/fancy-test": { + "version": "2.0.42", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/lodash": "*", + "@types/node": "*", + "@types/sinon": "*", + "lodash": "^4.17.13", + "mock-stdin": "^1.0.0", + "nock": "^13.3.3", + "stdout-stderr": "^0.1.9" + }, + "devDependencies": { + "@types/mocha": "*", + "chai": "^4.3.8", + "chalk": "^4.1.0", + "eslint": "^7.3.1", + "eslint-config-oclif": "^3.1.0", + "eslint-config-oclif-typescript": "^0.2.0", + "http-call": "^5.2.3", + "markdown-toc": "^1.2.0", + "mocha": "^5.2.0", + "sinon": "^9.0.2", + "ts-node": "^9.0.0", + "tslib": "^2.6.2", + "typescript": "4.4.3" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv": { + "version": "4.3.6", + "license": "MIT", + "dependencies": { + "@fast-csv/format": "4.3.5", + "@fast-csv/parse": "4.3.6" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../node_modules/.pnpm/figures@3.2.0/node_modules/figures": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "devDependencies": { + "ava": "^1.4.1", + "markdown-table": "^1.1.2", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra": { + "version": "11.3.3", + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "devDependencies": { + "klaw": "^2.1.1", + "klaw-sync": "^3.0.2", + "minimist": "^1.1.1", + "mocha": "^10.1.0", + "nyc": "^15.0.0", + "proxyquire": "^2.0.1", + "read-dir-files": "^0.1.1", + "standard": "^17.0.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "../node_modules/.pnpm/git-diff@2.0.6/node_modules/git-diff": { + "version": "2.0.6", + "license": "ISC", + "dependencies": { + "chalk": "^2.3.2", + "diff": "^3.5.0", + "loglevel": "^1.6.1", + "shelljs": "^0.8.1", + "shelljs.exec": "^1.1.7" + }, + "devDependencies": { + "chai": "^4.1.2", + "chai-string": "^1.4.0", + "coveralls": "2.11.16", + "data-driven": "^1.4.0", + "eslint": "^4.18.2", + "husky": "^0.14.3", + "istanbul": "^0.4.5", + "mocha": "^5.0.4", + "npm-run-all": "^4.1.2", + "readfile-go": "^1.0.5", + "sinon": "^4.4.2", + "sinon-chai": "^3.0.0" + }, + "engines": { + "node": ">= 4.8.0" + } + }, + "../node_modules/.pnpm/globby@11.1.0/node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "devDependencies": { + "ava": "^3.13.0", + "get-stream": "^6.0.0", + "glob-stream": "^6.1.0", + "globby": "sindresorhus/globby#main", + "matcha": "^0.7.0", + "rimraf": "^3.0.2", + "tsd": "^0.13.1", + "xo": "^0.33.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/.pnpm/husky@9.1.7/node_modules/husky": { + "version": "9.1.7", + "dev": true, + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "../node_modules/.pnpm/inquirer-checkbox-plus-prompt@1.4.2_inquirer@8.2.7_@types+node@20.19.35_/node_modules/inquirer-checkbox-plus-prompt": { + "version": "1.4.2", + "license": "MIT", + "dependencies": { + "chalk": "4.1.2", + "cli-cursor": "^3.1.0", + "figures": "^3.0.0", + "lodash": "^4.17.5", + "rxjs": "^6.6.7" + }, + "devDependencies": { + "fuzzy": "^0.1.3" + }, + "peerDependencies": { + "inquirer": "< 9.x" + } + }, + "../node_modules/.pnpm/inquirer-search-checkbox@1.0.0/node_modules/inquirer-search-checkbox": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "chalk": "^2.3.0", + "figures": "^2.0.0", + "fuzzy": "^0.1.3", + "inquirer": "^3.3.0" + }, + "devDependencies": { + "@types/figures": "^2.0.0", + "@types/inquirer": "^0.0.35", + "@types/node": "^8.0.47", + "typescript": "^2.5.3" + } + }, + "../node_modules/.pnpm/inquirer-search-list@1.2.6/node_modules/inquirer-search-list": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "chalk": "^2.3.0", + "figures": "^2.0.0", + "fuzzy": "^0.1.3", + "inquirer": "^3.3.0" + }, + "devDependencies": { + "@types/figures": "^2.0.0", + "@types/inquirer": "^0.0.35", + "@types/node": "^8.0.47", + "typescript": "^2.5.3" + } + }, + "../node_modules/.pnpm/inquirer@12.11.1_@types+node@18.19.130/node_modules/inquirer": { + "version": "12.11.1", + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/prompts": "^7.10.1", + "@inquirer/type": "^3.0.10", + "mute-stream": "^2.0.0", + "run-async": "^4.0.6", + "rxjs": "^7.8.2" + }, + "devDependencies": { + "@arethetypeswrong/cli": "^0.18.2", + "@repo/tsconfig": "0.0.0", + "@types/mute-stream": "^0.0.4", + "tshy": "^3.0.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer": { + "version": "8.2.7", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "devDependencies": { + "chai": "^4.3.6", + "chai-string": "^1.5.0", + "chalk-pipe": "^5.1.1", + "cmdify": "^0.0.4", + "mocha": "^9.2.2", + "mockery": "^2.1.0", + "nyc": "^15.0.0", + "sinon": "^13.0.2", + "terminal-link": "^2.1.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/inquirer@8.2.7_@types+node@20.19.35/node_modules/inquirer": { + "version": "8.2.7", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "devDependencies": { + "chai": "^4.3.6", + "chai-string": "^1.5.0", + "chalk-pipe": "^5.1.1", + "cmdify": "^0.0.4", + "mocha": "^9.2.2", + "mockery": "^2.1.0", + "nyc": "^15.0.0", + "sinon": "^13.0.2", + "terminal-link": "^2.1.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/inquirer@8.2.7_@types+node@22.19.20/node_modules/inquirer": { + "version": "8.2.7", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "devDependencies": { + "chai": "^4.3.6", + "chai-string": "^1.5.0", + "chalk-pipe": "^5.1.1", + "cmdify": "^0.0.4", + "mocha": "^9.2.2", + "mockery": "^2.1.0", + "nyc": "^15.0.0", + "sinon": "^13.0.2", + "terminal-link": "^2.1.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "../node_modules/.pnpm/jest@29.7.0_@types+node@14.18.63_ts-node@8.10.2_typescript@4.9.5_/node_modules/jest": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5_/node_modules/jest": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@5.9.3_/node_modules/jest": { + "version": "29.7.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@jest/core": "^29.7.0", + "@jest/types": "^29.6.3", + "import-local": "^3.0.2", + "jest-cli": "^29.7.0" + }, + "bin": { + "jest": "bin/jest.js" + }, + "devDependencies": { + "@tsd/typescript": "^5.0.4", + "tsd-lite": "^0.7.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../node_modules/.pnpm/jest@30.4.2_@types+node@18.19.130_ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3_/node_modules/jest": { + "version": "30.4.2", + "license": "MIT", + "dependencies": { + "@jest/core": "30.4.2", + "@jest/types": "30.4.1", + "import-local": "^3.2.0", + "jest-cli": "30.4.2" + }, + "bin": { + "jest": "bin/jest.js" + }, + "engines": { + "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "peerDependencies": { + "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" + }, + "peerDependenciesMeta": { + "node-notifier": { + "optional": true + } + } + }, + "../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml": { + "version": "4.1.1", + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^17.0.0", + "@rollup/plugin-node-resolve": "^11.0.0", + "ansi": "^0.3.1", + "benchmark": "^2.1.4", + "codemirror": "^5.13.4", + "eslint": "^7.0.0", + "fast-check": "^2.8.0", + "gh-pages": "^3.1.0", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "rollup": "^2.34.1", + "rollup-plugin-node-polyfills": "^0.2.1", + "rollup-plugin-terser": "^7.0.2", + "shelljs": "^0.8.4" + } + }, + "../node_modules/.pnpm/jsdoc-to-markdown@8.0.3/node_modules/jsdoc-to-markdown": { + "version": "8.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "array-back": "^6.2.2", + "command-line-tool": "^0.8.0", + "config-master": "^3.1.0", + "dmd": "^6.2.3", + "jsdoc-api": "^8.1.1", + "jsdoc-parse": "^6.2.1", + "walk-back": "^5.1.0" + }, + "bin": { + "jsdoc2md": "bin/cli.js" + }, + "devDependencies": { + "test-runner": "^0.10.1" + }, + "engines": { + "node": ">=12.17" + } + }, + "../node_modules/.pnpm/jsdom@23.2.0/node_modules/jsdom": { + "version": "23.2.0", + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "devDependencies": { + "@domenic/eslint-config": "^3.0.0", + "benchmark": "^2.1.4", + "eslint": "^8.56.0", + "eslint-plugin-html": "^7.1.0", + "eslint-plugin-jsdom-internal": "file:./scripts/eslint-plugin", + "js-yaml": "^4.1.0", + "minimatch": "^9.0.3", + "mocha": "^10.2.0", + "mocha-sugar-free": "^1.4.0", + "pngjs": "^7.0.0", + "server-destroy": "^1.0.1", + "webidl2js": "^17.1.0", + "yargs": "^17.7.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "../node_modules/.pnpm/jsonexport@3.2.0/node_modules/jsonexport": { + "version": "3.2.0", + "license": "Apache-2.0", + "bin": { + "jsonexport": "bin/jsonexport.js" + }, + "devDependencies": { + "babel-cli": "^6.26.0", + "babel-preset-env": "^1.7.0", + "benchmark": "^2.1.4", + "chai": "^4.1.2", + "jshint": "^2.11.1", + "mocha": "^7.1.2", + "npm-run-all": "^4.1.3", + "pre-commit": "^1.2.2" + } + }, + "../node_modules/.pnpm/jsonschema@1.5.0/node_modules/jsonschema": { + "version": "1.5.0", + "license": "MIT", + "devDependencies": { + "@stryker-mutator/core": "^4.0.0", + "@stryker-mutator/mocha-runner": "^4.0.0", + "chai": "~4.2.0", + "eslint": "^7.7.0", + "json-metaschema": "^1.2.0", + "mocha": "~8.1.1" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff": { + "version": "6.0.2", + "license": "MIT" + }, + "../node_modules/.pnpm/klona@2.0.6/node_modules/klona": { + "version": "2.0.6", + "license": "MIT", + "devDependencies": { + "bundt": "1.0.2", + "esm": "3.2.25", + "uvu": "0.5.2" + }, + "engines": { + "node": ">= 8" + } + }, + "../node_modules/.pnpm/lint-staged@17.0.7/node_modules/lint-staged": { + "version": "17.0.7", + "dev": true, + "license": "MIT", + "dependencies": { + "listr2": "^10.2.1", + "picomatch": "^4.0.4", + "string-argv": "^0.3.2", + "tinyexec": "^1.2.4" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, + "devDependencies": { + "@changesets/changelog-github": "0.7.0", + "@changesets/cli": "2.31.0", + "@commitlint/cli": "21.0.2", + "@commitlint/config-conventional": "21.0.2", + "@eslint/js": "10.0.1", + "@vitest/coverage-istanbul": "4.1.7", + "@vitest/eslint-plugin": "1.6.18", + "consolemock": "1.1.0", + "cross-env": "10.1.0", + "eslint": "10.4.1", + "eslint-config-prettier": "10.1.8", + "eslint-plugin-n": "18.0.1", + "eslint-plugin-prettier": "5.5.6", + "eslint-plugin-simple-import-sort": "13.0.0", + "husky": "9.1.7", + "mock-stdin": "1.0.0", + "prettier": "3.8.3", + "semver": "7.8.1", + "vitest": "4.1.7" + }, + "engines": { + "node": ">=22.22.1" + }, + "funding": { + "url": "https://opencollective.com/lint-staged" + }, + "optionalDependencies": { + "yaml": "^2.9.0" + } + }, + "../node_modules/.pnpm/listr@0.14.3/node_modules/listr": { + "version": "0.14.3", + "license": "MIT", + "dependencies": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "devDependencies": { + "ava": "*", + "clinton": "*", + "codecov": "^3.1.0", + "delay": "^4.1.0", + "hook-std": "^1.1.0", + "lint-staged": "^8.0.5", + "log-symbols": "^2.2.0", + "nyc": "^13.1.0", + "pre-commit": "^1.2.2", + "split": "^1.0.1", + "xo": "*", + "zen-observable": "^0.8.11" + }, + "engines": { + "node": ">=6" + } + }, + "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash": { + "version": "4.18.1", + "license": "MIT" + }, + "../node_modules/.pnpm/marked@4.3.0/node_modules/marked": { + "version": "4.3.0", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "devDependencies": { + "@babel/core": "^7.21.3", + "@babel/preset-env": "^7.20.2", + "@markedjs/html-differ": "^4.0.2", + "@rollup/plugin-babel": "^6.0.3", + "@semantic-release/commit-analyzer": "^9.0.2", + "@semantic-release/git": "^10.0.1", + "@semantic-release/github": "^8.0.7", + "@semantic-release/npm": "^9.0.2", + "@semantic-release/release-notes-generator": "^10.0.3", + "cheerio": "^1.0.0-rc.12", + "commonmark": "0.30.0", + "eslint": "^8.36.0", + "eslint-config-standard": "^17.0.0", + "eslint-plugin-import": "^2.27.5", + "eslint-plugin-n": "^15.6.1", + "eslint-plugin-promise": "^6.1.1", + "front-matter": "^4.0.2", + "highlight.js": "^11.7.0", + "jasmine": "^4.6.0", + "markdown-it": "13.0.1", + "node-fetch": "^3.3.1", + "rollup": "^3.20.0", + "semantic-release": "^20.1.3", + "titleize": "^3.0.0", + "uglify-js": "^3.17.4", + "vuln-regex-detector": "^1.3.0" + }, + "engines": { + "node": ">= 12" + } + }, + "../node_modules/.pnpm/merge@2.1.1/node_modules/merge": { + "version": "2.1.1", + "license": "MIT", + "devDependencies": { + "@types/chai": "^4.2.14", + "@types/mocha": "^8.0.4", + "@types/node": "^14.14.7", + "chai": "^4.2.0", + "concurrently": "^5.3.0", + "mocha": "^8.2.1", + "typescript": "^4.0.5", + "webpack": "^5.4.0", + "webpack-cli": "^4.2.0" + } + }, + "../node_modules/.pnpm/minimatch@10.2.5/node_modules/minimatch": { + "version": "10.2.5", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "devDependencies": { + "@types/node": "^25.5.0", + "mkdirp": "^3.0.1", + "oxlint": "^1.57.0", + "oxlint-tsgolint": "^0.18.1", + "prettier": "^3.8.1", + "tap": "^21.6.2", + "tshy": "^4.0.0", + "typedoc": "^0.28.18" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "devDependencies": { + "require-inject": "^1.4.4", + "tap": "^14.10.7" + }, + "engines": { + "node": ">=10" + } + }, + "../node_modules/.pnpm/mkdirp@2.1.6/node_modules/mkdirp": { + "version": "2.1.6", + "license": "MIT", + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "devDependencies": { + "@types/brace-expansion": "^1.1.0", + "@types/node": "^18.11.9", + "@types/tap": "^15.0.7", + "c8": "^7.12.0", + "eslint-config-prettier": "^8.6.0", + "prettier": "^2.8.2", + "tap": "^16.3.3", + "ts-node": "^10.9.1", + "typedoc": "^0.23.21", + "typescript": "^4.9.3" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha": { + "version": "10.8.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-colors": "^4.1.3", + "browser-stdout": "^1.3.1", + "chokidar": "^3.5.3", + "debug": "^4.3.5", + "diff": "^5.2.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^8.1.0", + "he": "^1.2.0", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^5.1.6", + "ms": "^2.1.3", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^6.5.1", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "devDependencies": { + "@11ty/eleventy": "^1.0.0", + "@11ty/eleventy-plugin-inclusive-language": "^1.0.3", + "@eslint/js": "^8.56.0", + "@mocha/docdash": "^4.0.1", + "@rollup/plugin-commonjs": "^21.0.2", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "chai": "^4.3.4", + "coffeescript": "^2.6.1", + "cross-env": "^7.0.2", + "eslint": "^8.56.0", + "fail-on-errors-webpack-plugin": "^3.0.0", + "fs-extra": "^10.0.0", + "globals": "^13.24.0", + "jsdoc": "^3.6.7", + "jsdoc-ts-utils": "^2.0.1", + "karma": "^6.4.2", + "karma-chrome-launcher": "^3.2.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-sauce-launcher": "^4.3.6", + "knip": "^5.27.0", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "markdown-it-attrs": "^4.1.3", + "markdown-it-emoji": "^2.0.0", + "markdown-it-prism": "^2.2.2", + "markdown-toc": "^1.2.0", + "markdownlint-cli": "^0.30.0", + "needle": "^2.5.0", + "npm-run-all2": "^6.2.0", + "nyc": "^15.1.0", + "pidtree": "^0.5.0", + "prettier": "^2.4.1", + "remark": "^14.0.2", + "remark-github": "^11.2.2", + "remark-inline-links": "^6.0.1", + "rewiremock": "^3.14.3", + "rimraf": "^3.0.2", + "rollup": "^2.70.1", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-polyfill-node": "^0.8.0", + "rollup-plugin-visualizer": "^5.6.0", + "sinon": "^9.0.3", + "strip-ansi": "^6.0.0", + "unexpected": "^11.14.0", + "unexpected-eventemitter": "^2.2.0", + "unexpected-map": "^2.0.0", + "unexpected-set": "^3.0.0", + "unexpected-sinon": "^10.11.2", + "uslug": "^1.0.4", + "webpack": "^5.67.0", + "webpack-cli": "^4.9.1" + }, + "engines": { + "node": ">= 14.0.0" + } + }, + "../node_modules/.pnpm/mocha@11.7.6/node_modules/mocha": { + "version": "11.7.6", + "dev": true, + "license": "MIT", + "dependencies": { + "browser-stdout": "^1.3.1", + "chokidar": "^4.0.1", + "debug": "^4.3.5", + "diff": "^7.0.0", + "escape-string-regexp": "^4.0.0", + "find-up": "^5.0.0", + "glob": "^10.4.5", + "he": "^1.2.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "log-symbols": "^4.1.0", + "minimatch": "^9.0.5", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "serialize-javascript": "^6.0.2", + "strip-json-comments": "^3.1.1", + "supports-color": "^8.1.1", + "workerpool": "^9.2.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1", + "yargs-unparser": "^2.0.0" + }, + "bin": { + "_mocha": "bin/_mocha", + "mocha": "bin/mocha.js" + }, + "devDependencies": { + "@11ty/eleventy": "^1.0.0", + "@11ty/eleventy-plugin-inclusive-language": "^1.0.3", + "@eslint/js": "^8.56.0", + "@mocha/docdash": "^4.0.1", + "@rollup/plugin-alias": "^5.1.1", + "@rollup/plugin-commonjs": "^21.0.2", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-multi-entry": "^4.0.1", + "@rollup/plugin-node-resolve": "^13.1.3", + "@test/esm-only-loader": "./test/compiler-fixtures/esm-only-loader", + "@types/node": "^22.15.3", + "@types/yargs": "^17.0.33", + "@vscode/windows-process-tree": "^0.6.3", + "chai": "^4.3.4", + "coffeescript": "^2.6.1", + "cross-env": "^7.0.2", + "eslint": "^8.56.0", + "eslint-plugin-n": "^17.15.1", + "fail-on-errors-webpack-plugin": "^3.0.0", + "globals": "^13.24.0", + "http-server": "^14.1.1", + "installed-check": "^9.3.0", + "jsdoc": "^3.6.7", + "jsdoc-ts-utils": "^2.0.1", + "karma": "^6.4.2", + "karma-chrome-launcher": "^3.2.0", + "karma-mocha": "^2.0.1", + "karma-mocha-reporter": "^2.2.5", + "karma-sauce-launcher": "^4.3.6", + "knip": "^5.61.3", + "markdown-it": "^12.3.2", + "markdown-it-anchor": "^8.4.1", + "markdown-it-attrs": "^4.1.3", + "markdown-it-emoji": "^2.0.0", + "markdown-it-prism": "^2.2.2", + "markdown-toc": "^1.2.0", + "markdownlint-cli": "^0.30.0", + "needle": "^2.5.0", + "npm-run-all2": "^6.2.0", + "nyc": "^15.1.0", + "pidtree": "^0.5.0", + "prettier": "3.6.2", + "remark": "^14.0.2", + "remark-github": "^11.2.2", + "remark-inline-links": "^6.0.1", + "rewiremock": "^3.14.3", + "rimraf": "^3.0.2", + "rollup": "^2.70.1", + "rollup-plugin-node-globals": "^1.4.0", + "rollup-plugin-polyfill-node": "^0.8.0", + "rollup-plugin-visualizer": "^5.6.0", + "semver": "^7.7.2", + "sinon": "^9.0.3", + "typescript": "^5.8.3", + "unexpected": "^11.14.0", + "unexpected-eventemitter": "^2.2.0", + "unexpected-map": "^2.0.0", + "unexpected-set": "^3.0.0", + "unexpected-sinon": "^10.11.2", + "uslug": "^1.0.4", + "webpack": "^5.67.0", + "webpack-cli": "^4.9.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "../node_modules/.pnpm/moment@2.30.1/node_modules/moment": { + "version": "2.30.1", + "license": "MIT", + "devDependencies": { + "@types/node": "17.0.21", + "benchmark": "latest", + "coveralls": "latest", + "cross-env": "^6.0.3", + "es6-promise": "latest", + "eslint": "latest", + "grunt": "latest", + "grunt-benchmark": "latest", + "grunt-cli": "latest", + "grunt-contrib-clean": "latest", + "grunt-contrib-concat": "latest", + "grunt-contrib-copy": "latest", + "grunt-contrib-uglify": "latest", + "grunt-contrib-watch": "latest", + "grunt-env": "latest", + "grunt-exec": "latest", + "grunt-karma": "latest", + "grunt-nuget": "latest", + "grunt-string-replace": "latest", + "karma": "latest", + "karma-chrome-launcher": "latest", + "karma-firefox-launcher": "latest", + "karma-qunit": "latest", + "karma-sauce-launcher": "4.1.4", + "load-grunt-tasks": "latest", + "lodash": ">=4.17.19", + "node-qunit": "latest", + "nyc": "latest", + "prettier": "latest", + "qunit": "^2.10.0", + "rollup": "2.17.1", + "typescript": "^1.8.10", + "typescript3": "npm:typescript@^3.1.6", + "uglify-js": "latest" + }, + "engines": { + "node": "*" + } + }, + "../node_modules/.pnpm/nock@13.5.6/node_modules/nock": { + "version": "13.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "devDependencies": { + "@definitelytyped/dtslint": "^0.0.163", + "@sinonjs/fake-timers": "^11.2.2", + "assert-rejects": "^1.0.0", + "chai": "^4.1.2", + "dirty-chai": "^2.0.1", + "eslint": "^8.8.0", + "eslint-config-prettier": "^9.0.0", + "eslint-config-standard": "^17.0.0-0", + "eslint-plugin-import": "^2.16.0", + "eslint-plugin-mocha": "^10.0.3", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^6.0.0", + "form-data": "^4.0.0", + "got": "^11.3.0", + "jest": "^29.7.0", + "mocha": "^9.1.3", + "npm-run-all": "^4.1.5", + "nyc": "^15.0.0", + "prettier": "3.2.5", + "proxyquire": "^2.1.0", + "rimraf": "^3.0.0", + "semantic-release": "^24.1.0", + "sinon": "^15.0.1", + "sinon-chai": "^3.7.0", + "typescript": "^5.0.4" + }, + "engines": { + "node": ">= 10.13" + } + }, + "../node_modules/.pnpm/node-graphviz@0.1.1/node_modules/node-graphviz": { + "version": "0.1.1", + "license": "MIT", + "devDependencies": { + "uvu": "^0.3.0" + } + }, + "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc": { + "version": "15.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^2.0.0", + "get-package-type": "^0.1.0", + "glob": "^7.1.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^4.0.0", + "istanbul-lib-processinfo": "^2.0.2", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^3.0.0", + "signal-exit": "^3.0.2", + "spawn-wrap": "^2.0.0", + "test-exclude": "^6.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "devDependencies": { + "any-path": "^1.3.0", + "coveralls": "^3.0.9", + "is-windows": "^1.0.2", + "requirejs": "^2.3.6", + "source-map-support": "^0.5.16", + "standard": "^14.3.1", + "standard-version": "^8.0.0", + "tap": "^14.10.5", + "which": "^2.0.2" + }, + "engines": { + "node": ">=8.9" + } + }, + "../node_modules/.pnpm/nyc@18.0.0/node_modules/nyc": { + "version": "18.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/load-nyc-config": "^1.0.0", + "@istanbuljs/schema": "^0.1.2", + "caching-transform": "^4.0.0", + "convert-source-map": "^1.7.0", + "decamelize": "^1.2.0", + "find-cache-dir": "^3.2.0", + "find-up": "^4.1.0", + "foreground-child": "^3.3.0", + "get-package-type": "^0.1.0", + "glob": "^13.0.6", + "istanbul-lib-coverage": "^3.0.0", + "istanbul-lib-hook": "^3.0.0", + "istanbul-lib-instrument": "^6.0.2", + "istanbul-lib-processinfo": "^3.0.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-lib-source-maps": "^4.0.0", + "istanbul-reports": "^3.0.2", + "make-dir": "^3.0.0", + "node-preload": "^0.2.1", + "p-map": "^3.0.0", + "process-on-spawn": "^1.0.0", + "resolve-from": "^5.0.0", + "rimraf": "^6.1.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^3.0.0", + "test-exclude": "^8.0.0", + "yargs": "^15.0.2" + }, + "bin": { + "nyc": "bin/nyc.js" + }, + "devDependencies": { + "any-path": "^1.3.0", + "is-windows": "^1.0.2", + "requirejs": "^2.3.6", + "source-map-support": "^0.5.16", + "standard": "^14.3.1", + "standard-version": "^9.0.0", + "tap": "^18.7.2", + "uuid": "^3.4.0", + "which": "^2.0.2" + }, + "engines": { + "node": "20 || >=22" + } + }, + "../node_modules/.pnpm/oclif@4.22.81_@types+node@14.18.63/node_modules/oclif": { + "version": "4.22.81", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.995.0", + "@aws-sdk/client-s3": "^3.995.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.8.0", + "@oclif/plugin-help": "^6.2.37", + "@oclif/plugin-not-found": "^3.2.74", + "@oclif/plugin-warn-if-update-available": "^3.1.55", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "lodash": "^4.17.23", + "normalize-package-data": "^6", + "semver": "^7.7.4", + "sort-package-json": "^2.15.1", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.28", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.12", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.23", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.1", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.22.81_@types+node@20.19.35/node_modules/oclif": { + "version": "4.22.81", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.995.0", + "@aws-sdk/client-s3": "^3.995.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.8.0", + "@oclif/plugin-help": "^6.2.37", + "@oclif/plugin-not-found": "^3.2.74", + "@oclif/plugin-warn-if-update-available": "^3.1.55", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "lodash": "^4.17.23", + "normalize-package-data": "^6", + "semver": "^7.7.4", + "sort-package-json": "^2.15.1", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.28", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.12", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.23", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.1", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.22.81_@types+node@22.19.20/node_modules/oclif": { + "version": "4.22.81", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.995.0", + "@aws-sdk/client-s3": "^3.995.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.8.0", + "@oclif/plugin-help": "^6.2.37", + "@oclif/plugin-not-found": "^3.2.74", + "@oclif/plugin-warn-if-update-available": "^3.1.55", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "lodash": "^4.17.23", + "normalize-package-data": "^6", + "semver": "^7.7.4", + "sort-package-json": "^2.15.1", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.28", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.12", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.23", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.1", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@18.19.130/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.35/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.39/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "devDependencies": { + "@commitlint/config-conventional": "^19", + "@eslint/compat": "^1.4.1", + "@oclif/plugin-legacy": "^2.0.33", + "@oclif/prettier-config": "^0.2.1", + "@oclif/test": "^4", + "@types/async-retry": "^1.4.5", + "@types/chai": "^4.3.17", + "@types/cli-progress": "^3.11.6", + "@types/debug": "^4.1.13", + "@types/ejs": "^3.1.5", + "@types/fs-extra": "^9.0", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^18", + "@types/semver": "^7.7.1", + "@types/shelljs": "^0.10.0", + "@types/sinon": "^17.0.3", + "@types/validate-npm-package-name": "^4.0.2", + "chai": "^4.5.0", + "commitlint": "^19", + "eslint": "^9", + "eslint-config-oclif": "^6.0.165", + "eslint-config-prettier": "^10", + "eslint-plugin-perfectionist": "^4", + "husky": "^9.1.7", + "lint-staged": "^15", + "lodash": "^4.18.1", + "mocha": "^11", + "nyc": "^15.1.0", + "prettier": "^3.8.3", + "shelljs": "^0.10.0", + "shx": "^0.4.0", + "sinon": "^18.0.1", + "ts-node": "^10.7.0", + "typescript": "^5" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "../node_modules/.pnpm/omit-deep-lodash@1.1.7/node_modules/omit-deep-lodash": { + "version": "1.1.7", + "license": "MIT", + "dependencies": { + "lodash": "~4.17.21" + }, + "devDependencies": { + "babel-cli": "~6.26.0", + "babel-core": "~6.26.3", + "babel-eslint": "~10.1.0", + "babel-preset-es2015": "~6.24.1", + "babel-preset-stage-1": "~6.24.1", + "chai": "~4.3.4", + "del": "~6.0.0", + "eslint": "~8.6.0", + "gulp": "~4.0.2", + "gulp-babel": "~7.0.1", + "mocha": "~9.1.3", + "mocha-cakes-2": "~3.3.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "../node_modules/.pnpm/open@8.4.2/node_modules/open": { + "version": "8.4.2", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "devDependencies": { + "@types/node": "^15.0.0", + "ava": "^3.15.0", + "tsd": "^0.14.0", + "xo": "^0.39.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/.pnpm/ora@5.4.1/node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "devDependencies": { + "@types/node": "^14.14.35", + "ava": "^2.4.0", + "get-stream": "^6.0.0", + "tsd": "^0.14.0", + "xo": "^0.38.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "../node_modules/.pnpm/otplib@12.0.1/node_modules/otplib": { + "version": "12.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1", + "@otplib/preset-default": "^12.0.1", + "@otplib/preset-v11": "^12.0.1" + } + }, + "../node_modules/.pnpm/papaparse@5.5.3/node_modules/papaparse": { + "version": "5.5.3", + "license": "MIT", + "devDependencies": { + "chai": "^4.2.0", + "connect": "^3.3.3", + "eslint": "^4.19.1", + "grunt": "^1.5.2", + "grunt-contrib-uglify": "^5.2.0", + "mocha": "^5.2.0", + "mocha-headless-chrome": "^4.0.0", + "open": "7.0.0", + "serve-static": "^1.7.1" + } + }, + "../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier": { + "version": "3.8.3", + "dev": true, + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream": { + "version": "2.0.0", + "license": "BSD-2-Clause", + "dependencies": { + "speedometer": "~1.0.0", + "through2": "~2.0.3" + }, + "devDependencies": { + "numeral": "~1.5.2", + "request": "~2.29.0", + "single-line-log": "~1.0.0" + } + }, + "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit": { + "version": "2.7.0", + "license": "ISC", + "devDependencies": { + "chai": "4.1.2", + "chai-as-promised": "7.1.1", + "eslint": "*", + "eslint-config-standard": "11.0.0", + "eslint-plugin-es5": "1.3.1", + "eslint-plugin-import": "*", + "eslint-plugin-node": "7.0.1", + "eslint-plugin-promise": "3.8.0", + "eslint-plugin-standard": "3.1.0", + "fs-promise": "2.0.3", + "lowscore": "1.17.0", + "mocha": "*" + } + }, + "../node_modules/.pnpm/prompt@1.3.0/node_modules/prompt": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.5.0", + "async": "3.2.3", + "read": "1.0.x", + "revalidator": "0.1.x", + "winston": "2.x" + }, + "devDependencies": { + "eslint": "^7.32.0", + "vows": "^0.7.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "../node_modules/.pnpm/querystring@0.2.1/node_modules/querystring": { + "version": "0.2.1", + "dev": true, + "license": "MIT", + "devDependencies": { + "retape": "~0.x.0", + "tape": "~0.1.5", + "test": "~0.x.0" + }, + "engines": { + "node": ">=0.4.x" + } + }, + "../node_modules/.pnpm/recheck@4.4.5/node_modules/recheck": { + "version": "4.4.5", + "license": "MIT", + "devDependencies": { + "@types/jest": "29.4.0", + "@types/node": "18.13.0", + "esbuild": "0.17.8", + "esbuild-jest": "0.5.0", + "esbuild-register": "3.4.2", + "jest": "29.4.2", + "prettier": "2.8.4", + "rimraf": "4.1.2", + "typescript": "4.9.5" + }, + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "recheck-jar": "4.4.5", + "recheck-linux-x64": "4.4.5", + "recheck-macos-x64": "4.4.5", + "recheck-windows-x64": "4.4.5" + } + }, + "../node_modules/.pnpm/rimraf@6.1.3/node_modules/rimraf": { + "version": "6.1.3", + "license": "BlueOak-1.0.0", + "dependencies": { + "glob": "^13.0.3", + "package-json-from-dist": "^1.0.1" + }, + "bin": { + "rimraf": "dist/esm/bin.mjs" + }, + "devDependencies": { + "@types/node": "^25.2.0", + "mkdirp": "^3.0.1", + "prettier": "^3.6.2", + "tap": "^21.1.1", + "tshy": "^3.0.3", + "typedoc": "^0.28.14" + }, + "engines": { + "node": "20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "../node_modules/.pnpm/rxjs@6.6.7/node_modules/rxjs": { + "version": "6.6.7", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "devDependencies": { + "@angular-devkit/build-optimizer": "0.4.6", + "@angular-devkit/schematics": "^0.5.4", + "@types/chai": "4.1.2", + "@types/lodash": "4.14.102", + "@types/mocha": "2.2.48", + "@types/node": "9.4.5", + "@types/sinon": "4.1.3", + "@types/sinon-chai": "2.7.29", + "@types/source-map": "^0.5.2", + "babel-polyfill": "6.26.0", + "benchmark": "2.1.0", + "benchpress": "2.0.0-beta.1", + "chai": "4.1.2", + "check-side-effects": "0.0.20", + "color": "3.0.0", + "colors": "1.1.2", + "commitizen": "2.9.6", + "coveralls": "3.0.0", + "cross-env": "5.1.3", + "cz-conventional-changelog": "1.2.0", + "danger": "1.1.0", + "dependency-cruiser": "2.13.0", + "doctoc": "1.3.0", + "dtslint": "0.6.1", + "escape-string-regexp": "1.0.5", + "esdoc": "0.4.7", + "eslint": "4.17.0", + "eslint-plugin-jasmine": "^2.10.1", + "fs-extra": "5.0.0", + "get-folder-size": "1.0.1", + "glob": "7.1.2", + "gm": "1.23.1", + "google-closure-compiler-js": "20170218.0.0", + "gzip-size": "4.1.0", + "http-server": "0.11.1", + "husky": "0.14.3", + "klaw-sync": "3.0.2", + "lint-staged": "7.1.1", + "lodash": "4.17.5", + "markdown-doctest": "0.9.1", + "minimist": "1.2.0", + "mkdirp": "^1.0.4", + "mocha": "5.0.0", + "mocha-in-sauce": "0.0.1", + "npm-run-all": "4.1.2", + "nyc": "11.4.1", + "opn-cli": "3.1.0", + "platform": "1.3.5", + "promise": "8.0.1", + "protractor": "3.1.1", + "rollup": "0.66.6", + "rollup-plugin-alias": "1.4.0", + "rollup-plugin-inject": "2.0.0", + "rollup-plugin-node-resolve": "2.0.0", + "rx": "latest", + "rxjs": "^5.5.7", + "shx": "^0.3.2", + "sinon": "4.3.0", + "sinon-chai": "2.14.0", + "source-map-support": "0.5.3", + "symbol-observable": "1.0.1", + "systemjs": "^0.21.0", + "ts-api-guardian": "^0.5.0", + "ts-node": "6.1.0", + "tsconfig-paths": "3.2.0", + "tslint": "5.9.1", + "tslint-etc": "1.2.6", + "tslint-no-toplevel-property-access": "0.0.2", + "tslint-no-unused-expression-chai": "0.0.3", + "typescript": "^3.0.1", + "validate-commit-msg": "2.14.0", + "webpack": "1.13.1", + "xmlhttprequest": "1.8.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "regexp-tree": "~0.1.1" + }, + "devDependencies": { + "jest": "^24.9.0" + } + }, + "../node_modules/.pnpm/shelljs@0.10.0/node_modules/shelljs": { + "version": "0.10.0", + "license": "BSD-3-Clause", + "dependencies": { + "execa": "^5.1.1", + "fast-glob": "^3.3.2" + }, + "devDependencies": { + "ava": "^6.2.0", + "chalk": "^4.1.2", + "coffee-script": "^1.12.7", + "eslint": "^8.2.0", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-plugin-import": "^2.31.0", + "js-yaml": "^4.1.0", + "nyc": "^17.1.0", + "shelljs-changelog": "^0.2.6", + "shelljs-release": "^0.5.3", + "shx": "^0.4.0", + "travis-check-changes": "^0.5.1" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/short-uuid@6.0.3/node_modules/short-uuid": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "any-base": "^1.1.0" + }, + "devDependencies": { + "@tsconfig/node20": "^20.1.8", + "@types/any-base": "^1.1.3", + "@types/node": "^22.13.10", + "nyc": "^15.1.0", + "oxlint": "^0.16.0", + "tape": "^5.2.2", + "typescript": "^5.8.2", + "uuid25": "^0.1.5", + "uuidv7": "^1.0.2" + }, + "engines": { + "node": ">=14.17.0" + } + }, + "../node_modules/.pnpm/shx@0.4.0/node_modules/shx": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "minimist": "^1.2.8", + "shelljs": "^0.9.2" + }, + "bin": { + "shx": "lib/cli.js" + }, + "devDependencies": { + "babel-cli": "^6.6.5", + "babel-preset-env": "^1.7.0", + "babel-register": "^6.7.2", + "eslint": "^8.57.1", + "eslint-config-airbnb-base": "^15.0.0", + "eslint-import-resolver-node": "0.3.7", + "eslint-plugin-import": "^2.31.0", + "js-yaml": "^4.1.0", + "mocha": "^11.1.0", + "nyc": "^17.1.0", + "rimraf": "^5.0.10", + "shelljs-changelog": "^0.2.6", + "shelljs-plugin-open": "^0.3.0", + "shelljs-release": "^0.5.3", + "should": "^13.2.3" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon": { + "version": "17.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.2.0", + "nise": "^5.1.9", + "supports-color": "^7" + }, + "devDependencies": { + "@babel/core": "^7.24.4", + "@sinonjs/eslint-config": "^5.0.3", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^11.0.1", + "@studio/changes": "^3.0.0", + "babel-plugin-istanbul": "^6.1.1", + "babelify": "^10.0.0", + "browserify": "^16.5.2", + "debug": "^4.3.4", + "dependency-check": "^4.1.0", + "lint-staged": "^15.2.2", + "mocha": "^10.4.0", + "mochify": "^9.2.0", + "nyc": "^15.1.0", + "prettier": "^3.2.5", + "puppeteer": "^22.7.1", + "rimraf": "^5.0.5", + "semver": "^7.6.0", + "shelljs": "^0.8.5", + "unimported": "^1.31.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon": { + "version": "19.0.5", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^13.0.5", + "@sinonjs/samsam": "^8.0.1", + "diff": "^7.0.0", + "nise": "^6.1.1", + "supports-color": "^7.2.0" + }, + "devDependencies": { + "@babel/core": "^7.25.2", + "@mochify/cli": "^0.4.1", + "@mochify/driver-puppeteer": "^0.4.0", + "@mochify/driver-webdriver": "^0.2.1", + "@sinonjs/eslint-config": "^5.0.3", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^11.0.1", + "@studio/changes": "^3.0.0", + "babel-plugin-istanbul": "^7.0.0", + "babelify": "^10.0.0", + "browserify": "^16.5.2", + "debug": "^4.3.7", + "dependency-check": "^4.1.0", + "esbuild": "^0.23.1", + "esbuild-plugin-istanbul": "^0.3.0", + "get-stdin": "^9.0.0", + "lint-staged": "^15.2.10", + "mocha": "^10.7.3", + "nyc": "^17.0.0", + "prettier": "^3.3.3", + "puppeteer": "^23.3.0", + "rimraf": "^6.0.1", + "semver": "^7.6.3", + "shelljs": "^0.8.5" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon": { + "version": "21.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.1.0", + "@sinonjs/samsam": "^8.0.3", + "diff": "^8.0.2", + "supports-color": "^7.2.0" + }, + "devDependencies": { + "@babel/core": "^7.28.5", + "@mochify/cli": "^1.0.0", + "@mochify/driver-puppeteer": "^1.0.1", + "@mochify/driver-webdriver": "^1.0.0", + "@sinonjs/eslint-config": "^5.0.4", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^11.0.1", + "@studio/changes": "^3.0.0", + "babel-plugin-istanbul": "^7.0.1", + "debug": "^4.4.3", + "dependency-check": "^4.1.0", + "esbuild": "^0.27.2", + "esbuild-plugin-istanbul": "^0.3.0", + "esbuild-plugin-umd-wrapper": "^3.0.0", + "get-stdin": "^9.0.0", + "lint-staged": "^16.2.7", + "mocha": "^11.7.5", + "nyc": "^17.1.0", + "prettier": "^3.7.4", + "puppeteer": "^24.34.0", + "rimraf": "^6.1.2", + "semver": "^7.7.3", + "shelljs": "^0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon": { + "version": "21.1.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.3.2", + "@sinonjs/samsam": "^10.0.2", + "diff": "^8.0.4" + }, + "devDependencies": { + "@mochify/cli": "^1.0.0", + "@mochify/driver-puppeteer": "^1.0.1", + "@mochify/driver-webdriver": "^1.0.0", + "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@sinonjs/eslint-config": "^7.0.3", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^11.0.2", + "@studio/changes": "^3.0.0", + "debug": "^4.4.3", + "esbuild": "^0.28.0", + "esbuild-plugin-istanbul": "^0.3.0", + "esbuild-plugin-umd-wrapper": "^3.0.0", + "eslint": "^10.2.0", + "get-stdin": "^10.0.0", + "js-yaml": "^4.1.1", + "knip": "^6.4.0", + "lint-staged": "^16.4.0", + "mocha": "^11.7.5", + "npm-run-all": "^4.1.5", + "nyc": "^18.0.0", + "prettier": "^3.8.2", + "puppeteer": "^24.40.0", + "rimraf": "^6.1.3", + "rollup": "^4.60.1", + "semver": "^7.7.4", + "shelljs": "^0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "../node_modules/.pnpm/sinon@22.0.0/node_modules/sinon": { + "version": "22.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "@sinonjs/fake-timers": "^15.4.0", + "@sinonjs/samsam": "^10.0.2", + "diff": "^9.0.0" + }, + "devDependencies": { + "@mochify/cli": "^1.0.0", + "@mochify/driver-puppeteer": "^1.0.1", + "@mochify/driver-webdriver": "^1.0.0", + "@rollup/plugin-commonjs": "^29.0.2", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^16.0.3", + "@sinonjs/eslint-config": "^7.0.3", + "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", + "@sinonjs/referee": "^11.0.2", + "@studio/changes": "^3.0.0", + "debug": "^4.4.3", + "esbuild": "^0.28.0", + "esbuild-plugin-istanbul": "^0.3.0", + "esbuild-plugin-umd-wrapper": "^3.0.0", + "eslint": "^10.3.0", + "get-stdin": "^10.0.0", + "js-yaml": "^4.1.1", + "knip": "^6.11.0", + "lint-staged": "^16.4.0", + "mocha": "^11.7.5", + "npm-run-all2": "^8.0.4", + "nyc": "^18.0.0", + "prettier": "^3.8.3", + "puppeteer": "^24.42.0", + "rimraf": "^6.1.3", + "rollup": "^4.60.3", + "semver": "^7.7.4", + "shelljs": "^0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "devDependencies": { + "browserify": "^4.2.3", + "coffeescript": "^1.12.7", + "http-server": "^0.11.1", + "mocha": "^3.5.3", + "webpack": "^1.15.0" + } + }, + "../node_modules/.pnpm/table@6.9.0/node_modules/table": { + "version": "6.9.0", + "license": "BSD-3-Clause", + "dependencies": { + "ajv": "^8.0.1", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "devDependencies": { + "@types/chai": "^4.2.16", + "@types/lodash.mapvalues": "^4.6.6", + "@types/lodash.truncate": "^4.4.6", + "@types/mocha": "^9.0.0", + "@types/node": "^14.14.37", + "@types/sinon": "^10.0.0", + "@types/slice-ansi": "^4.0.0", + "ajv-cli": "^5.0.0", + "ajv-keywords": "^5.0.0", + "chai": "^4.2.0", + "chalk": "^4.1.0", + "coveralls": "^3.1.0", + "eslint": "^7.32.0", + "eslint-config-canonical": "^25.0.0", + "gitdown": "^3.1.4", + "husky": "^4.3.6", + "js-beautify": "^1.14.0", + "lodash.mapvalues": "^4.6.0", + "mkdirp": "^1.0.4", + "mocha": "^8.2.1", + "nyc": "^15.1.0", + "semantic-release": "^17.3.1", + "sinon": "^12.0.1", + "ts-node": "^9.1.1", + "typescript": "4.5.2" + }, + "engines": { + "node": ">=10.0.0" + } + }, + "../node_modules/.pnpm/tar@7.5.11/node_modules/tar": { + "version": "7.5.11", + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.1.0", + "yallist": "^5.0.0" + }, + "devDependencies": { + "@types/node": "^25.3.3", + "chmodr": "^2.0.2", + "end-of-stream": "^1.4.3", + "esbuild": "^0.27.3", + "events-to-array": "^2.0.3", + "mutate-fs": "^2.1.1", + "nock": "^13.5.4", + "prettier": "^3.8.1", + "rimraf": "^6.1.2", + "tap": "^21.6.2", + "tshy": "^3.3.2", + "typedoc": "^0.28.17" + }, + "engines": { + "node": ">=18" + } + }, + "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp": { + "version": "0.2.7", + "license": "MIT", + "devDependencies": { + "eslint": "^6.3.0", + "eslint-plugin-mocha": "^6.1.1", + "istanbul": "^0.4.5", + "lerna-changelog": "^1.0.1", + "mocha": "^10.2.0" + }, + "engines": { + "node": ">=14.14" + } + }, + "../node_modules/.pnpm/traverse@0.6.11/node_modules/traverse": { + "version": "0.6.11", + "license": "MIT", + "dependencies": { + "gopd": "^1.2.0", + "typedarray.prototype.slice": "^1.0.5", + "which-typed-array": "^1.1.18" + }, + "devDependencies": { + "@ljharb/eslint-config": "^21.1.1", + "auto-changelog": "^2.5.0", + "encoding": "^0.1.13", + "es-value-fixtures": "^1.7.0", + "eslint": "=8.8.0", + "in-publish": "^2.0.1", + "npmignore": "^0.3.1", + "safe-publish-latest": "^2.0.0", + "tape": "^5.9.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_91e8a29d7054379dc014cfca91cefdc3/node_modules/ts-jest": { + "version": "29.4.11", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-angular": "^19.8.1", + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@jest/globals": "^30.4.1", + "@jest/transform": "^30.4.1", + "@jest/types": "^30.4.1", + "@types/babel__core": "^7.20.5", + "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", + "@types/js-yaml": "^4.0.9", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.memoize": "^4.1.9", + "@types/lodash.set": "^4.3.9", + "@types/micromatch": "^4.0.10", + "@types/node": "20.19.41", + "@types/semver": "^7.7.1", + "@types/yargs": "^17.0.35", + "@types/yargs-parser": "21.0.3", + "@typescript-eslint/eslint-plugin": "^8.59.3", + "@typescript-eslint/parser": "^8.59.3", + "babel-jest": "^30.4.1", + "conventional-changelog": "^7.2.0", + "conventional-changelog-angular": "^8.3.1", + "esbuild": "~0.28.0", + "eslint": "^9.39.4", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-prettier": "^4.2.5", + "execa": "5.1.1", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.5", + "globals": "^16.5.0", + "husky": "^9.1.7", + "jest": "^30.4.2", + "js-yaml": "^4.1.1", + "lint-staged": "^15.5.2", + "memfs": "^4.57.2", + "prettier": "^2.8.8", + "rimraf": "^5.0.10", + "ts-node": "^10.9.2", + "typescript": "~5.9.3", + "typescript-eslint": "^8.59.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "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 <7" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_c6f142628921a6aa1de38c975c7e1f3d/node_modules/ts-jest": { + "version": "29.4.11", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-angular": "^19.8.1", + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@jest/globals": "^30.4.1", + "@jest/transform": "^30.4.1", + "@jest/types": "^30.4.1", + "@types/babel__core": "^7.20.5", + "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", + "@types/js-yaml": "^4.0.9", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.memoize": "^4.1.9", + "@types/lodash.set": "^4.3.9", + "@types/micromatch": "^4.0.10", + "@types/node": "20.19.41", + "@types/semver": "^7.7.1", + "@types/yargs": "^17.0.35", + "@types/yargs-parser": "21.0.3", + "@typescript-eslint/eslint-plugin": "^8.59.3", + "@typescript-eslint/parser": "^8.59.3", + "babel-jest": "^30.4.1", + "conventional-changelog": "^7.2.0", + "conventional-changelog-angular": "^8.3.1", + "esbuild": "~0.28.0", + "eslint": "^9.39.4", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-prettier": "^4.2.5", + "execa": "5.1.1", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.5", + "globals": "^16.5.0", + "husky": "^9.1.7", + "jest": "^30.4.2", + "js-yaml": "^4.1.1", + "lint-staged": "^15.5.2", + "memfs": "^4.57.2", + "prettier": "^2.8.8", + "rimraf": "^5.0.10", + "ts-node": "^10.9.2", + "typescript": "~5.9.3", + "typescript-eslint": "^8.59.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "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 <7" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_cb540a799e3e2e0732d753edc26b671a/node_modules/ts-jest": { + "version": "29.4.11", + "dev": true, + "license": "MIT", + "dependencies": { + "bs-logger": "^0.2.6", + "fast-json-stable-stringify": "^2.1.0", + "handlebars": "^4.7.9", + "json5": "^2.2.3", + "lodash.memoize": "^4.1.2", + "make-error": "^1.3.6", + "semver": "^7.8.0", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-angular": "^19.8.1", + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.5", + "@eslint/js": "^9.39.4", + "@jest/globals": "^30.4.1", + "@jest/transform": "^30.4.1", + "@jest/types": "^30.4.1", + "@types/babel__core": "^7.20.5", + "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", + "@types/js-yaml": "^4.0.9", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.memoize": "^4.1.9", + "@types/lodash.set": "^4.3.9", + "@types/micromatch": "^4.0.10", + "@types/node": "20.19.41", + "@types/semver": "^7.7.1", + "@types/yargs": "^17.0.35", + "@types/yargs-parser": "21.0.3", + "@typescript-eslint/eslint-plugin": "^8.59.3", + "@typescript-eslint/parser": "^8.59.3", + "babel-jest": "^30.4.1", + "conventional-changelog": "^7.2.0", + "conventional-changelog-angular": "^8.3.1", + "esbuild": "~0.28.0", + "eslint": "^9.39.4", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-prettier": "^4.2.5", + "execa": "5.1.1", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.5", + "globals": "^16.5.0", + "husky": "^9.1.7", + "jest": "^30.4.2", + "js-yaml": "^4.1.1", + "lint-staged": "^15.5.2", + "memfs": "^4.57.2", + "prettier": "^2.8.8", + "rimraf": "^5.0.10", + "ts-node": "^10.9.2", + "typescript": "~5.9.3", + "typescript-eslint": "^8.59.3" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "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 <7" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-jest@29.4.6_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest@_91abf64bf25366afcb92b2a0c11b02db/node_modules/ts-jest": { + "version": "29.4.6", + "dev": true, + "license": "MIT", + "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.3", + "type-fest": "^4.41.0", + "yargs-parser": "^21.1.1" + }, + "bin": { + "ts-jest": "cli.js" + }, + "devDependencies": { + "@commitlint/cli": "^19.8.1", + "@commitlint/config-angular": "^19.8.1", + "@eslint/compat": "^1.4.1", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "^9.39.1", + "@jest/globals": "^30.2.0", + "@jest/transform": "^30.2.0", + "@jest/types": "^30.2.0", + "@types/babel__core": "^7.20.5", + "@types/fs-extra": "^11.0.4", + "@types/jest": "^29.5.14", + "@types/js-yaml": "^4.0.9", + "@types/lodash.camelcase": "^4.3.9", + "@types/lodash.memoize": "^4.1.9", + "@types/lodash.set": "^4.3.9", + "@types/micromatch": "^4.0.10", + "@types/node": "20.19.25", + "@types/semver": "^7.7.1", + "@types/yargs": "^17.0.35", + "@types/yargs-parser": "21.0.3", + "@typescript-eslint/eslint-plugin": "^8.48.0", + "@typescript-eslint/parser": "^8.48.0", + "babel-jest": "^30.2.0", + "conventional-changelog": "^7.1.1", + "conventional-changelog-angular": "^8.1.0", + "esbuild": "~0.27.0", + "eslint": "^9.39.1", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-import": "^2.32.0", + "eslint-plugin-jest": "^28.14.0", + "eslint-plugin-jsdoc": "^50.8.0", + "eslint-plugin-prettier": "^4.2.5", + "execa": "5.1.1", + "fast-glob": "^3.3.3", + "fs-extra": "^11.3.2", + "globals": "^16.5.0", + "husky": "^9.1.7", + "jest": "^30.2.0", + "js-yaml": "^4.1.1", + "lint-staged": "^15.5.2", + "memfs": "^4.51.0", + "prettier": "^2.8.8", + "rimraf": "^5.0.10", + "ts-node": "^10.9.2", + "typescript": "~5.9.3", + "typescript-eslint": "^8.48.0" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" + }, + "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" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "@jest/transform": { + "optional": true + }, + "@jest/types": { + "optional": true + }, + "babel-jest": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jest-util": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@4.9.5/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@5.9.3/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@5.9.3/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@6.0.3/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node": { + "version": "10.9.2", + "dev": true, + "license": "MIT", + "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" + }, + "bin": { + "ts-node": "dist/bin.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", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@microsoft/api-extractor": "^7.19.4", + "@swc/core": "^1.3.100", + "@swc/wasm": "^1.3.100", + "@types/diff": "^4.0.2", + "@types/lodash": "^4.14.151", + "@types/node": "13.13.5", + "@types/proper-lockfile": "^4.1.2", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.14.19", + "@types/rimraf": "^3.0.0", + "@types/semver": "^7.1.0", + "@yarnpkg/fslib": "^2.4.0", + "ava": "^3.15.0", + "axios": "^0.21.1", + "dprint": "^0.25.0", + "expect": "^27.0.2", + "get-stream": "^6.0.0", + "lodash": "^4.17.15", + "ntypescript": "^1.201507091536.1", + "nyc": "^15.0.1", + "outdent": "^0.8.0", + "proper-lockfile": "^4.1.2", + "proxyquire": "^2.0.0", + "react": "^16.14.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "throat": "^6.0.1", + "typedoc": "^0.22.10", + "typescript": "4.7.4", + "typescript-json-schema": "^0.53.0", + "util.promisify": "^1.0.1" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } + } + }, + "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node": { + "version": "8.10.2", + "dev": true, + "license": "MIT", + "dependencies": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + }, + "bin": { + "ts-node": "dist/bin.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "devDependencies": { + "@types/chai": "^4.0.4", + "@types/diff": "^4.0.2", + "@types/mocha": "^5.2.7", + "@types/node": "13.13.5", + "@types/proxyquire": "^1.3.28", + "@types/react": "^16.0.2", + "@types/semver": "^7.1.0", + "@types/source-map-support": "^0.5.0", + "axios": "^0.19.0", + "chai": "^4.0.1", + "istanbul": "^0.4.0", + "mocha": "^6.2.2", + "ntypescript": "^1.201507091536.1", + "proxyquire": "^2.0.0", + "react": "^16.0.0", + "rimraf": "^3.0.0", + "semver": "^7.1.3", + "tslint": "^6.1.0", + "tslint-config-standard": "^9.0.0", + "typescript": "3.8.3", + "typescript-json-schema": "^0.42.0", + "util.promisify": "^1.0.1" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "typescript": ">=2.7" + } + }, + "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib": { + "version": "2.8.1", + "dev": true, + "license": "0BSD" + }, + "../node_modules/.pnpm/tty-table@4.2.3/node_modules/tty-table": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "csv": "^5.5.3", + "kleur": "^4.1.5", + "smartwrap": "^2.0.2", + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.1", + "yargs": "^17.7.1" + }, + "bin": { + "tty-table": "adapters/terminal-adapter.js" + }, + "devDependencies": { + "@rollup/plugin-commonjs": "^11.0.2", + "@rollup/plugin-node-resolve": "^7.1.1", + "@rollup/plugin-replace": "^2.3.1", + "axios-error": "^1.0.4", + "babel-core": "^6.26.3", + "babel-preset-babili": "0.1.4", + "babel-preset-es2015": "^6.24.1", + "babelify": "^8.0.0", + "browserify": "^16.5.0", + "chai": "^4.2.0", + "codecov": "^3.6.5", + "commander": "^4.1.1", + "coveralls": "^3.0.9", + "eslint": "^6.8.0", + "eslint-config-standard": "^14.1.0", + "eslint-plugin-import": "^2.20.1", + "eslint-plugin-node": "^11.0.0", + "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-standard": "^4.0.1", + "glob": "^7.1.6", + "grunt": "^1.1.0", + "grunt-cli": "^1.3.2", + "grunt-contrib-watch": "^1.1.0", + "grunt-shell": "^3.0.1", + "husky": "^4.2.5", + "mocha": "^6.1.4", + "mocha-lcov-reporter": "^1.3.0", + "nyc": "^15.0.0", + "rollup": "^1.31.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript": { + "version": "4.9.5", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@octokit/rest": "latest", + "@types/chai": "latest", + "@types/fancy-log": "^2.0.0", + "@types/fs-extra": "^9.0.13", + "@types/glob": "latest", + "@types/gulp": "^4.0.9", + "@types/gulp-concat": "latest", + "@types/gulp-newer": "latest", + "@types/gulp-rename": "latest", + "@types/gulp-sourcemaps": "latest", + "@types/merge2": "latest", + "@types/microsoft__typescript-etw": "latest", + "@types/minimist": "latest", + "@types/mkdirp": "latest", + "@types/mocha": "latest", + "@types/ms": "latest", + "@types/node": "latest", + "@types/source-map-support": "latest", + "@types/which": "^2.0.1", + "@types/xml2js": "^0.4.11", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@typescript-eslint/utils": "^5.33.1", + "azure-devops-node-api": "^11.2.0", + "chai": "latest", + "chalk": "^4.1.2", + "del": "^6.1.1", + "diff": "^5.1.0", + "eslint": "^8.22.0", + "eslint-formatter-autolinkable-stylish": "^1.2.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-jsdoc": "^39.3.6", + "eslint-plugin-local": "^1.0.0", + "eslint-plugin-no-null": "^1.0.2", + "fancy-log": "latest", + "fs-extra": "^9.1.0", + "glob": "latest", + "gulp": "^4.0.2", + "gulp-concat": "latest", + "gulp-insert": "latest", + "gulp-newer": "latest", + "gulp-rename": "latest", + "gulp-sourcemaps": "latest", + "merge2": "latest", + "minimist": "latest", + "mkdirp": "latest", + "mocha": "latest", + "mocha-fivemat-progress-reporter": "latest", + "ms": "^2.1.3", + "node-fetch": "^3.2.10", + "source-map-support": "latest", + "typescript": "^4.8.4", + "vinyl": "latest", + "which": "^2.0.2", + "xml2js": "^0.4.23" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.93.4", + "@esfx/canceltoken": "^1.0.0", + "@eslint/js": "^9.20.0", + "@octokit/rest": "^21.1.1", + "@types/chai": "^4.3.20", + "@types/diff": "^7.0.1", + "@types/minimist": "^1.2.5", + "@types/mocha": "^10.0.10", + "@types/ms": "^0.7.34", + "@types/node": "latest", + "@types/source-map-support": "^0.5.10", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.24.1", + "@typescript-eslint/type-utils": "^8.24.1", + "@typescript-eslint/utils": "^8.24.1", + "azure-devops-node-api": "^14.1.0", + "c8": "^10.1.3", + "chai": "^4.5.0", + "chokidar": "^4.0.3", + "diff": "^7.0.0", + "dprint": "^0.49.0", + "esbuild": "^0.25.0", + "eslint": "^9.20.1", + "eslint-formatter-autolinkable-stylish": "^1.4.0", + "eslint-plugin-regexp": "^2.7.0", + "fast-xml-parser": "^4.5.2", + "glob": "^10.4.5", + "globals": "^15.15.0", + "hereby": "^1.10.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.44.4", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.12.1", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "playwright": "^1.50.1", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1", + "typescript": "^5.7.3", + "typescript-eslint": "^8.24.1", + "which": "^3.0.1" + }, + "engines": { + "node": ">=14.17" + } + }, + "../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript": { + "version": "6.0.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "devDependencies": { + "@dprint/formatter": "^0.4.1", + "@dprint/typescript": "0.93.4", + "@esfx/canceltoken": "^1.0.0", + "@eslint/js": "^10.0.1", + "@octokit/rest": "^22.0.1", + "@types/chai": "^4.3.20", + "@types/minimist": "^1.2.5", + "@types/mocha": "^10.0.10", + "@types/ms": "^2.1.0", + "@types/node": "latest", + "@types/source-map-support": "^0.5.10", + "@types/which": "^3.0.4", + "@typescript-eslint/rule-tester": "^8.56.1", + "@typescript-eslint/type-utils": "^8.56.1", + "@typescript-eslint/utils": "^8.56.1", + "azure-devops-node-api": "^15.1.3", + "c8": "^10.1.3", + "chai": "^4.5.0", + "chokidar": "^4.0.3", + "diff": "^8.0.3", + "dprint": "^0.49.1", + "esbuild": "^0.27.3", + "eslint": "^10.0.2", + "eslint-plugin-regexp": "^3.0.0", + "fast-xml-parser": "^5.4.1", + "glob": "^10.5.0", + "globals": "^17.4.0", + "hereby": "^1.12.0", + "jsonc-parser": "^3.3.1", + "knip": "^5.85.0", + "minimist": "^1.2.8", + "mocha": "^10.8.2", + "mocha-fivemat-progress-reporter": "^0.1.0", + "monocart-coverage-reports": "^2.12.9", + "ms": "^2.1.3", + "picocolors": "^1.1.1", + "playwright": "^1.58.2", + "source-map-support": "^0.5.21", + "tslib": "^2.8.1", + "typescript": "^5.9.3", + "typescript-eslint": "^8.56.1", + "which": "^3.0.1" + }, + "engines": { + "node": ">=14.17" + } + }, + "../node_modules/.pnpm/unique-string@2.0.0/node_modules/unique-string": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "devDependencies": { + "ava": "^1.4.1", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + } + }, + "../node_modules/.pnpm/url-join@4.0.1/node_modules/url-join": { + "version": "4.0.1", + "license": "MIT", + "devDependencies": { + "conventional-changelog": "^1.1.10", + "mocha": "^3.2.0", + "should": "~1.2.1" + } + }, + "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid": { + "version": "14.0.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + }, + "devDependencies": { + "@biomejs/biome": "2.4.10", + "@commitlint/cli": "20.5.0", + "@commitlint/config-conventional": "20.5.0", + "bundlewatch": "0.4.1", + "commander": "14.0.3", + "globals": "17.4.0", + "husky": "9.1.7", + "jest": "30.3.0", + "lint-staged": "16.4.0", + "neostandard": "0.13.0", + "npm-run-all2": "8.0.4", + "release-please": "17.3.0", + "runmd": "1.4.1", + "standard-version": "9.5.0", + "typescript": "5.4.3" + } + }, + "../node_modules/.pnpm/winston@3.19.0/node_modules/winston": { + "version": "3.19.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "devDependencies": { + "@babel/cli": "^7.23.9", + "@babel/core": "^7.24.0", + "@babel/preset-env": "^7.24.0", + "@dabh/eslint-config-populist": "^4.4.0", + "@types/node": "^20.11.24", + "abstract-winston-transport": "^0.5.1", + "assume": "^2.2.0", + "cross-spawn-async": "^2.2.5", + "eslint": "^8.57.0", + "hock": "^1.4.1", + "jest": "^29.7.0", + "rimraf": "5.0.10", + "split2": "^4.1.0", + "std-mocks": "^2.0.0", + "through2": "^4.0.2", + "winston-compat": "^0.1.5" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "../node_modules/.pnpm/xdg-basedir@4.0.0/node_modules/xdg-basedir": { + "version": "4.0.0", + "license": "MIT", + "devDependencies": { + "ava": "^1.4.1", + "import-fresh": "^3.0.0", + "tsd": "^0.7.2", + "xo": "^0.24.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.2.0", + "license": "MIT", + "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" + } + }, + "node_modules/@asamuzakjp/dom-selector": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "bidi-js": "^1.0.3", + "css-tree": "^2.3.1", + "is-potential-custom-element-name": "^1.0.1" + } + }, + "node_modules/@aws-crypto/crc32": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/crc32c": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha1-browser": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-browser": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-js": "^5.2.0", + "@aws-crypto/supports-web-crypto": "^5.2.0", + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "@aws-sdk/util-locate-window": "^3.0.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/sha256-js": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/util": "^5.2.0", + "@aws-sdk/types": "^3.222.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@aws-crypto/supports-web-crypto": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-crypto/util": { + "version": "5.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.222.0", + "@smithy/util-utf8": "^2.0.0", + "tslib": "^2.6.2" + } + }, + "node_modules/@aws-sdk/checksums": { + "version": "3.1000.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@aws-crypto/crc32c": "5.2.0", + "@aws-crypto/util": "5.2.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-cloudfront": { + "version": "3.1065.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.54", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/client-s3": { + "version": "3.1065.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha1-browser": "5.2.0", + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-node": "^3.972.54", + "@aws-sdk/middleware-flexible-checksums": "^3.974.29", + "@aws-sdk/middleware-sdk-s3": "^3.972.50", + "@aws-sdk/signature-v4-multi-region": "^3.996.33", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/core": { + "version": "3.974.20", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.12", + "@aws-sdk/xml-builder": "^3.972.29", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/core": "^3.24.6", + "@smithy/signature-v4": "^5.4.6", + "@smithy/types": "^4.14.3", + "bowser": "^2.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-env": { + "version": "3.972.46", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-http": { + "version": "3.972.48", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-ini": { + "version": "3.972.52", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/credential-provider-env": "^3.972.46", + "@aws-sdk/credential-provider-http": "^3.972.48", + "@aws-sdk/credential-provider-login": "^3.972.51", + "@aws-sdk/credential-provider-process": "^3.972.46", + "@aws-sdk/credential-provider-sso": "^3.972.51", + "@aws-sdk/credential-provider-web-identity": "^3.972.51", + "@aws-sdk/nested-clients": "^3.997.19", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/credential-provider-imds": "^4.3.7", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.972.51", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/nested-clients": "^3.997.19", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-node": { + "version": "3.972.54", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/credential-provider-env": "^3.972.46", + "@aws-sdk/credential-provider-http": "^3.972.48", + "@aws-sdk/credential-provider-ini": "^3.972.52", + "@aws-sdk/credential-provider-process": "^3.972.46", + "@aws-sdk/credential-provider-sso": "^3.972.51", + "@aws-sdk/credential-provider-web-identity": "^3.972.51", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/credential-provider-imds": "^4.3.7", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-process": { + "version": "3.972.46", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-sso": { + "version": "3.972.51", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/nested-clients": "^3.997.19", + "@aws-sdk/token-providers": "3.1065.0", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-web-identity": { + "version": "3.972.51", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/nested-clients": "^3.997.19", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-flexible-checksums": { + "version": "3.974.29", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/checksums": "^3.1000.4", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/middleware-sdk-s3": { + "version": "3.972.50", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/signature-v4-multi-region": "^3.996.33", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/nested-clients": { + "version": "3.997.19", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/sha256-browser": "5.2.0", + "@aws-crypto/sha256-js": "5.2.0", + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/signature-v4-multi-region": "^3.996.33", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/fetch-http-handler": "^5.4.6", + "@smithy/node-http-handler": "^4.7.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/signature-v4-multi-region": { + "version": "3.996.33", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/types": "^3.973.12", + "@smithy/signature-v4": "^5.4.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/token-providers": { + "version": "3.1065.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "^3.974.20", + "@aws-sdk/nested-clients": "^3.997.19", + "@aws-sdk/types": "^3.973.12", + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/types": { + "version": "3.973.12", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/util-locate-window": { + "version": "3.965.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws-sdk/xml-builder": { + "version": "3.972.29", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/types": "^4.14.3", + "fast-xml-parser": "5.7.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "node_modules/@aws/lambda-invoke-store": { + "version": "0.2.4", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@colors/colors": { + "version": "1.6.0", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/@contentstack/apps-cli": { + "resolved": "packages/contentstack-apps-cli", + "link": true + }, + "node_modules/@contentstack/cli-audit": { + "resolved": "packages/contentstack-audit", + "link": true + }, + "node_modules/@contentstack/cli-bulk-operations": { + "resolved": "packages/contentstack-bulk-operations", + "link": true + }, + "node_modules/@contentstack/cli-cm-bootstrap": { + "resolved": "packages/contentstack-bootstrap", + "link": true + }, + "node_modules/@contentstack/cli-cm-branches": { + "resolved": "packages/contentstack-branches", + "link": true + }, + "node_modules/@contentstack/cli-cm-bulk-publish": { + "resolved": "packages/contentstack-bulk-publish", + "link": true + }, + "node_modules/@contentstack/cli-cm-clone": { + "resolved": "packages/contentstack-clone", + "link": true + }, + "node_modules/@contentstack/cli-cm-export": { + "resolved": "packages/contentstack-export", + "link": true + }, + "node_modules/@contentstack/cli-cm-export-query": { + "resolved": "packages/contentstack-query-export", + "link": true + }, + "node_modules/@contentstack/cli-cm-export-to-csv": { + "resolved": "packages/contentstack-export-to-csv", + "link": true + }, + "node_modules/@contentstack/cli-cm-import": { + "resolved": "packages/contentstack-import", + "link": true + }, + "node_modules/@contentstack/cli-cm-import-setup": { + "resolved": "packages/contentstack-import-setup", + "link": true + }, + "node_modules/@contentstack/cli-cm-migrate-rte": { + "resolved": "packages/contentstack-migrate-rte", + "link": true + }, + "node_modules/@contentstack/cli-cm-regex-validate": { + "resolved": "packages/contentstack-cli-cm-regex-validate", + "link": true + }, + "node_modules/@contentstack/cli-cm-seed": { + "resolved": "packages/contentstack-seed", + "link": true + }, + "node_modules/@contentstack/cli-command": { + "version": "1.8.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "contentstack": "^3.27.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@contentstack/cli-external-migrate": { + "resolved": "packages/contentstack-external-migrate", + "link": true + }, + "node_modules/@contentstack/cli-migration": { + "resolved": "packages/contentstack-migration", + "link": true + }, + "node_modules/@contentstack/cli-utilities": { + "version": "1.18.4", + "license": "MIT", + "dependencies": { + "@contentstack/management": "~1.30.1", + "@contentstack/marketplace-sdk": "^1.5.1", + "@oclif/core": "^4.11.4", + "axios": "^1.16.1", + "chalk": "^4.1.2", + "cli-cursor": "^3.1.0", + "cli-progress": "^3.12.0", + "cli-table": "^0.3.11", + "conf": "^10.2.0", + "dotenv": "^16.6.1", + "figures": "^3.2.0", + "inquirer": "8.2.7", + "inquirer-search-checkbox": "^1.0.0", + "inquirer-search-list": "^1.2.6", + "js-yaml": "^4.1.1", + "klona": "^2.0.6", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "open": "^8.4.2", + "ora": "^5.4.1", + "papaparse": "^5.5.3", + "recheck": "~4.4.5", + "rxjs": "^6.6.7", + "short-uuid": "^6.0.0", + "traverse": "^0.6.11", + "tty-table": "^4.2.3", + "unique-string": "^2.0.0", + "uuid": "^14.0.0", + "winston": "^3.19.0", + "xdg-basedir": "^4.0.0" + } + }, + "node_modules/@contentstack/cli-variants": { + "resolved": "packages/contentstack-variants", + "link": true + }, + "node_modules/@contentstack/json-rte-serializer": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "array-flat-polyfill": "^1.0.1", + "lodash": "^4.17.21", + "lodash.clonedeep": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isempty": "^4.4.0", + "lodash.isequal": "^4.5.0", + "lodash.isobject": "^3.0.2", + "lodash.isplainobject": "^4.0.6", + "lodash.isundefined": "^3.0.1", + "lodash.kebabcase": "^4.1.1", + "slate": "^0.103.0", + "uuid": "^8.3.2" + } + }, + "node_modules/@contentstack/json-rte-serializer/node_modules/uuid": { + "version": "8.3.2", + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/@contentstack/management": { + "version": "1.30.3", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.9.1", + "assert": "^2.1.0", + "axios": "^1.16.1", + "buffer": "^6.0.3", + "form-data": "^4.0.5", + "husky": "^9.1.7", + "lodash": "^4.18.1", + "otplib": "^12.0.1", + "qs": "^6.15.2", + "stream-browserify": "^3.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@contentstack/marketplace-sdk": { + "version": "1.5.3", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.9.1", + "axios": "^1.17.0" + } + }, + "node_modules/@contentstack/utils": { + "version": "1.9.1", + "license": "MIT" + }, + "node_modules/@csstools/color-helpers": { + "version": "5.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.1.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.1.0", + "@csstools/css-calc": "^2.1.4" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.5", + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.5", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.4" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.4", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@dabh/diagnostics": { + "version": "2.0.8", + "license": "MIT", + "dependencies": { + "@so-ric/colorspace": "^1.1.6", + "enabled": "2.0.x", + "kuler": "^2.0.0" + } + }, + "node_modules/@eslint-community/eslint-utils": { + "version": "4.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "eslint-visitor-keys": "^3.4.3" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" + } + }, + "node_modules/@eslint-community/regexpp": { + "version": "4.12.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + } + }, + "node_modules/@eslint/eslintrc": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^9.6.0", + "globals": "^13.19.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@eslint/eslintrc/node_modules/ajv": { + "version": "6.15.0", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/@eslint/eslintrc/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "version": "3.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/js": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/@humanwhocodes/config-array": { + "version": "0.13.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanwhocodes/object-schema": "^2.0.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" + }, + "engines": { + "node": ">=10.10.0" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "version": "3.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, + "node_modules/@humanwhocodes/object-schema": { + "version": "2.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/@inquirer/ansi": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/checkbox": { + "version": "4.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/checkbox/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/checkbox/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/checkbox/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/checkbox/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/confirm": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core": { + "version": "9.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/figures": "^1.0.6", + "@inquirer/type": "^2.0.0", + "@types/mute-stream": "^0.0.4", + "@types/node": "^22.5.5", + "@types/wrap-ansi": "^3.0.0", + "ansi-escapes": "^4.3.2", + "cli-width": "^4.1.0", + "mute-stream": "^1.0.0", + "signal-exit": "^4.1.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^6.2.0", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@inquirer/type": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/core/node_modules/@types/node": { + "version": "22.19.20", + "dev": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@inquirer/core/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/core/node_modules/mute-stream": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@inquirer/core/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/editor": { + "version": "4.2.23", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/external-editor": "^1.0.3", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/editor/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/editor/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/editor/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/expand": { + "version": "4.0.23", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/expand/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/expand/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/expand/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/external-editor": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "chardet": "^2.1.1", + "iconv-lite": "^0.7.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/figures": { + "version": "1.0.15", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/input": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/type": "^1.5.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/number": { + "version": "3.0.23", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/number/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/number/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/number/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/password": { + "version": "4.0.23", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/ansi": "^1.0.2", + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/password/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/password/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/password/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/prompts": { + "version": "7.10.1", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/confirm": { + "version": "5.1.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/input": { + "version": "4.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/select": { + "version": "4.4.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/prompts/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/prompts/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/prompts/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/rawlist": { + "version": "4.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/rawlist/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/rawlist/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/rawlist/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/search": { + "version": "3.2.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^10.3.2", + "@inquirer/figures": "^1.0.15", + "@inquirer/type": "^3.0.10", + "yoctocolors-cjs": "^2.1.3" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/core": { + "version": "10.3.2", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search/node_modules/@inquirer/type": { + "version": "3.0.10", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } + } + }, + "node_modules/@inquirer/search/node_modules/cli-width": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">= 12" + } + }, + "node_modules/@inquirer/search/node_modules/mute-stream": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^18.17.0 || >=20.5.0" + } + }, + "node_modules/@inquirer/search/node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@inquirer/select": { + "version": "2.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/core": "^9.1.0", + "@inquirer/figures": "^1.0.5", + "@inquirer/type": "^1.5.3", + "ansi-escapes": "^4.3.2", + "yoctocolors-cjs": "^2.1.2" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type": { + "version": "1.5.5", + "dev": true, + "license": "MIT", + "dependencies": { + "mute-stream": "^1.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/@inquirer/type/node_modules/mute-stream": { + "version": "1.0.0", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@nodable/entities": { + "version": "2.1.1", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/nodable" + } + ], + "license": "MIT" + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oclif/core": { + "version": "4.11.4", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.3.2", + "ansis": "^3.17.0", + "clean-stack": "^3.0.1", + "cli-spinners": "^2.9.2", + "debug": "^4.4.3", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "lilconfig": "^3.1.3", + "minimatch": "^10.2.5", + "semver": "^7.8.1", + "string-width": "^4.2.3", + "supports-color": "^8", + "tinyglobby": "^0.2.16", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-help": { + "version": "6.2.50", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-not-found": { + "version": "3.2.87", + "dev": true, + "license": "MIT", + "dependencies": { + "@inquirer/prompts": "^7.10.1", + "@oclif/core": "^4.11.4", + "ansis": "^3.17.0", + "fast-levenshtein": "^3.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/plugin-warn-if-update-available": { + "version": "3.1.65", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^4", + "ansis": "^3.17.0", + "debug": "^4.4.3", + "http-call": "^5.2.2", + "lodash": "^4.18.1", + "registry-auth-token": "^5.1.1" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/test": { + "version": "3.2.15", + "dev": true, + "license": "MIT", + "dependencies": { + "@oclif/core": "^3.26.6", + "chai": "^4.4.1", + "fancy-test": "^3.0.15" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/test/node_modules/@oclif/core": { + "version": "3.27.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/cli-progress": "^3.11.5", + "ansi-escapes": "^4.3.2", + "ansi-styles": "^4.3.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.2", + "clean-stack": "^3.0.1", + "cli-progress": "^3.12.0", + "color": "^4.2.3", + "debug": "^4.3.5", + "ejs": "^3.1.10", + "get-package-type": "^0.1.0", + "globby": "^11.1.0", + "hyperlinker": "^1.0.0", + "indent-string": "^4.0.0", + "is-wsl": "^2.2.0", + "js-yaml": "^3.14.1", + "minimatch": "^9.0.4", + "natural-orderby": "^2.0.3", + "object-treeify": "^1.1.33", + "password-prompt": "^1.1.3", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "supports-color": "^8.1.1", + "supports-hyperlinks": "^2.2.0", + "widest-line": "^3.1.0", + "wordwrap": "^1.0.0", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@oclif/test/node_modules/argparse": { + "version": "1.0.10", + "dev": true, + "license": "MIT", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/@oclif/test/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@oclif/test/node_modules/brace-expansion": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@oclif/test/node_modules/color": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1", + "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" + } + }, + "node_modules/@oclif/test/node_modules/color-string": { + "version": "1.9.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/@oclif/test/node_modules/js-yaml": { + "version": "3.14.2", + "dev": true, + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/@oclif/test/node_modules/minimatch": { + "version": "9.0.9", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.2" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@otplib/core": { + "version": "12.0.1", + "license": "MIT" + }, + "node_modules/@otplib/plugin-crypto": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1" + } + }, + "node_modules/@otplib/plugin-thirty-two": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1", + "thirty-two": "^1.0.2" + } + }, + "node_modules/@otplib/preset-default": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1", + "@otplib/plugin-crypto": "^12.0.1", + "@otplib/plugin-thirty-two": "^12.0.1" + } + }, + "node_modules/@otplib/preset-v11": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1", + "@otplib/plugin-crypto": "^12.0.1", + "@otplib/plugin-thirty-two": "^12.0.1" + } + }, + "node_modules/@oxc-project/types": { + "version": "0.133.0", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/Boshen" + } + }, + "node_modules/@pnpm/config.env-replace": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "4.2.10" + }, + "engines": { + "node": ">=12.22.0" + } + }, + "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { + "version": "4.2.10", + "dev": true, + "license": "ISC" + }, + "node_modules/@pnpm/npm-conf": { + "version": "3.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/config.env-replace": "^1.1.0", + "@pnpm/network.ca-file": "^1.0.1", + "config-chain": "^1.1.11" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@rolldown/binding-darwin-arm64": { + "version": "1.0.3", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^20.19.0 || >=22.12.0" + } + }, + "node_modules/@rolldown/pluginutils": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" + } + }, + "node_modules/@sinonjs/commons": { + "version": "3.0.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/@sinonjs/commons/node_modules/type-detect": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } + }, + "node_modules/@sinonjs/samsam": { + "version": "8.0.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1", + "type-detect": "^4.1.0" + } + }, + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.3", + "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@smithy/core": { + "version": "3.24.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-crypto/crc32": "5.2.0", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/credential-provider-imds": { + "version": "4.3.8", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/fetch-http-handler": { + "version": "5.4.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/is-array-buffer": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/node-http-handler": { + "version": "4.7.7", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/signature-v4": { + "version": "5.4.6", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/core": "^3.24.6", + "@smithy/types": "^4.14.3", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/types": { + "version": "4.14.3", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@smithy/util-buffer-from": { + "version": "2.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/is-array-buffer": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@smithy/util-utf8": { + "version": "2.3.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@smithy/util-buffer-from": "^2.2.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@so-ric/colorspace": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "color": "^5.0.2", + "text-hex": "1.0.x" + } + }, + "node_modules/@standard-schema/spec": { + "version": "1.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "defer-to-connect": "^2.0.1" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/@types/chai": { + "version": "5.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/deep-eql": "*", + "assertion-error": "^2.0.1" + } + }, + "node_modules/@types/chai/node_modules/assertion-error": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/@types/cli-progress": { + "version": "3.11.6", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/deep-eql": { + "version": "4.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.9", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/jsdom": { + "version": "21.1.7", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*", + "@types/tough-cookie": "*", + "parse5": "^7.0.0" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/lodash": { + "version": "4.17.24", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/mkdirp": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/mute-stream": { + "version": "0.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.19.42", + "devOptional": true, + "license": "MIT", + "dependencies": { + "undici-types": "~6.21.0" + } + }, + "node_modules/@types/semver": { + "version": "7.7.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/sinon": { + "version": "21.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/sinonjs__fake-timers": "*" + } + }, + "node_modules/@types/sinonjs__fake-timers": { + "version": "15.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/tough-cookie": { + "version": "4.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/triple-beam": { + "version": "1.3.5", + "license": "MIT" + }, + "node_modules/@types/uuid": { + "version": "10.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/wrap-ansi": { + "version": "3.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/regexpp": "^4.5.1", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/type-utils": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.4", + "natural-compare": "^1.4.0", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/parser": { + "version": "6.21.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/scope-manager": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/type-utils": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "6.21.0", + "@typescript-eslint/utils": "6.21.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/types": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@typescript-eslint/typescript-estree": { + "version": "6.21.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/visitor-keys": "6.21.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "minimatch": "9.0.3", + "semver": "^7.5.4", + "ts-api-utils": "^1.0.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.3", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/utils": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@types/json-schema": "^7.0.12", + "@types/semver": "^7.5.0", + "@typescript-eslint/scope-manager": "6.21.0", + "@typescript-eslint/types": "6.21.0", + "@typescript-eslint/typescript-estree": "6.21.0", + "semver": "^7.5.4" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^7.0.0 || ^8.0.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "6.21.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "6.21.0", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^16.0.0 || >=18.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + } + }, + "node_modules/@ungap/structured-clone": { + "version": "1.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitest/expect": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@standard-schema/spec": "^1.1.0", + "@types/chai": "^5.2.2", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "chai": "^6.2.2", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/expect/node_modules/chai": { + "version": "6.2.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@vitest/mocker": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/spy": "4.1.8", + "estree-walker": "^3.0.3", + "magic-string": "^0.30.21" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "msw": "^2.4.9", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "msw": { + "optional": true + }, + "vite": { + "optional": true + } + } + }, + "node_modules/@vitest/pretty-format": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/utils": "4.1.8", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.8", + "@vitest/utils": "4.1.8", + "magic-string": "^0.30.21", + "pathe": "^2.0.3" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/spy": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/pretty-format": "4.1.8", + "convert-source-map": "^2.0.0", + "tinyrainbow": "^3.1.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/acorn": { + "version": "8.16.0", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/ajv": { + "version": "8.20.0", + "license": "MIT", + "dependencies": { + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/ajv-formats": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "ajv": "^8.0.0" + }, + "peerDependencies": { + "ajv": "^8.0.0" + }, + "peerDependenciesMeta": { + "ajv": { + "optional": true + } + } + }, + "node_modules/ansi-escapes": { + "version": "4.3.2", + "license": "MIT", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/ansicolors": { + "version": "0.3.2", + "dev": true, + "license": "MIT" + }, + "node_modules/ansis": { + "version": "3.17.0", + "license": "ISC", + "engines": { + "node": ">=14" + } + }, + "node_modules/any-base": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/anynum": { + "version": "1.0.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-buffer-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "is-array-buffer": "^3.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/array-flat-polyfill": { + "version": "1.0.1", + "license": "CC0-1.0", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.3", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.4", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/assert": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "is-nan": "^1.3.2", + "object-is": "^1.1.5", + "object.assign": "^4.1.4", + "util": "^0.12.5" + } + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/astral-regex": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/async": { + "version": "3.2.6", + "license": "MIT" + }, + "node_modules/async-function": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/async-retry": { + "version": "1.3.3", + "dev": true, + "license": "MIT", + "dependencies": { + "retry": "0.13.1" + } + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/atomically": { + "version": "1.7.0", + "license": "MIT", + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/available-typed-arrays": { + "version": "1.0.7", + "license": "MIT", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/axios": { + "version": "1.17.0", + "license": "MIT", + "dependencies": { + "follow-redirects": "^1.16.0", + "form-data": "^4.0.5", + "https-proxy-agent": "^5.0.1", + "proxy-from-env": "^2.1.0" + } + }, + "node_modules/balanced-match": { + "version": "4.0.4", + "license": "MIT", + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/bidi-js": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "require-from-string": "^2.0.2" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bowser": { + "version": "2.14.1", + "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "5.0.6", + "license": "MIT", + "dependencies": { + "balanced-match": "^4.0.2" + }, + "engines": { + "node": "18 || 20 || >=22" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/breakword": { + "version": "1.0.6", + "license": "MIT", + "dependencies": { + "wcwidth": "^1.0.1" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + } + }, + "node_modules/cacheable-request": { + "version": "10.2.14", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=14.16" + } + }, + "node_modules/call-bind": { + "version": "1.0.9", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", + "get-intrinsic": "^1.3.0", + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camel-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "pascal-case": "^3.1.2", + "tslib": "^2.0.3" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/capital-case": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/cardinal": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansicolors": "~0.3.2", + "redeyed": "~2.1.0" + }, + "bin": { + "cdl": "bin/cdl.js" + } + }, + "node_modules/chai": { + "version": "4.5.0", + "dev": true, + "license": "MIT", + "dependencies": { + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "4.1.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/change-case": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "camel-case": "^4.1.2", + "capital-case": "^1.0.4", + "constant-case": "^3.0.4", + "dot-case": "^3.0.4", + "header-case": "^2.0.4", + "no-case": "^3.0.4", + "param-case": "^3.0.4", + "pascal-case": "^3.1.2", + "path-case": "^3.0.4", + "sentence-case": "^3.0.4", + "snake-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/chardet": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/clean-stack": { + "version": "3.0.1", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-progress": { + "version": "3.12.0", + "license": "MIT", + "dependencies": { + "string-width": "^4.2.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-spinners": { + "version": "2.9.2", + "license": "MIT", + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/cli-table": { + "version": "0.3.11", + "dependencies": { + "colors": "1.0.3" + }, + "engines": { + "node": ">= 0.2.0" + } + }, + "node_modules/cli-width": { + "version": "3.0.0", + "license": "ISC", + "engines": { + "node": ">= 10" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/color": { + "version": "5.0.3", + "license": "MIT", + "dependencies": { + "color-convert": "^3.1.3", + "color-string": "^2.1.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, + "node_modules/color-string": { + "version": "2.1.4", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/color-string/node_modules/color-name": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/color/node_modules/color-convert": { + "version": "3.1.3", + "license": "MIT", + "dependencies": { + "color-name": "^2.0.0" + }, + "engines": { + "node": ">=14.6" + } + }, + "node_modules/color/node_modules/color-name": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/colors": { + "version": "1.0.3", + "license": "MIT", + "engines": { + "node": ">=0.1.90" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/conf": { + "version": "10.2.0", + "license": "MIT", + "dependencies": { + "ajv": "^8.6.3", + "ajv-formats": "^2.1.1", + "atomically": "^1.7.0", + "debounce-fn": "^4.0.0", + "dot-prop": "^6.0.1", + "env-paths": "^2.2.1", + "json-schema-typed": "^7.0.3", + "onetime": "^5.1.2", + "pkg-up": "^3.1.0", + "semver": "^7.3.5" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/constant-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case": "^2.0.2" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/contentstack": { + "version": "3.27.0", + "license": "MIT", + "dependencies": { + "@contentstack/utils": "^1.4.1", + "es6-promise": "^4.2.8", + "husky": "^9.1.7", + "localStorage": "1.0.4" + }, + "engines": { + "node": ">= 10.14.2" + } + }, + "node_modules/contentstack-cli-content-type": { + "resolved": "packages/contentstack-content-type", + "link": true + }, + "node_modules/contentstack-cli-tsgen": { + "resolved": "packages/contentstack-cli-tsgen", + "link": true + }, + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "dev": true, + "license": "MIT", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/crypto-random-string": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssstyle": { + "version": "4.6.0", + "license": "MIT", + "dependencies": { + "@asamuzakjp/css-color": "^3.2.0", + "rrweb-cssom": "^0.8.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/cssstyle/node_modules/rrweb-cssom": { + "version": "0.8.0", + "license": "MIT" + }, + "node_modules/csv": { + "version": "5.5.3", + "license": "MIT", + "dependencies": { + "csv-generate": "^3.4.3", + "csv-parse": "^4.16.3", + "csv-stringify": "^5.6.5", + "stream-transform": "^2.1.3" + }, + "engines": { + "node": ">= 0.1.90" + } + }, + "node_modules/csv-generate": { + "version": "3.4.3", + "license": "MIT" + }, + "node_modules/csv-parse": { + "version": "4.16.3", + "license": "MIT" + }, + "node_modules/csv-stringify": { + "version": "5.6.5", + "license": "MIT" + }, + "node_modules/data-urls": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/inspect-js" + } + }, + "node_modules/data-view-byte-offset": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/debounce-fn": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "mimic-fn": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decimal.js": { + "version": "10.6.0", + "license": "MIT" + }, + "node_modules/decompress-response": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "mimic-response": "^3.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/deep-eql": { + "version": "4.1.4", + "dev": true, + "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "dev": true, + "license": "MIT" + }, + "node_modules/defaults": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/defer-to-connect": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/define-lazy-prop": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/define-properties": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/detect-libc": { + "version": "2.1.2", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/diff": { + "version": "5.2.2", + "dev": true, + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dir-glob": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/doctrine": { + "version": "3.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/dot-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/dot-prop": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/dotenv": { + "version": "16.6.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://dotenvx.com" + } + }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/ejs": { + "version": "3.1.10", + "license": "Apache-2.0", + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/enabled": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/entities": { + "version": "6.0.1", + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/env-paths": { + "version": "2.2.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/error-ex": { + "version": "1.3.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/es-abstract": { + "version": "1.24.2", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es-define-property": { + "version": "1.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-module-lexer": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/es-object-atoms": { + "version": "1.1.2", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-to-primitive": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/es6-promise": { + "version": "4.2.8", + "license": "MIT" + }, + "node_modules/escalade": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-string-regexp": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/eslint": { + "version": "8.57.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.57.1", + "@humanwhocodes/config-array": "^0.13.0", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-scope": { + "version": "7.2.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/ajv": { + "version": "6.15.0", + "dev": true, + "license": "MIT", + "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" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" + } + }, + "node_modules/eslint/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.7.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estree-walker": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expect-type": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/external-editor": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/external-editor/node_modules/chardet": { + "version": "0.4.2", + "license": "MIT" + }, + "node_modules/external-editor/node_modules/iconv-lite": { + "version": "0.4.24", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fancy-test": { + "version": "3.0.16", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/chai": "*", + "@types/lodash": "*", + "@types/node": "*", + "@types/sinon": "*", + "lodash": "^4.17.13", + "mock-stdin": "^1.0.0", + "nock": "^13.5.4", + "sinon": "^16.1.3", + "stdout-stderr": "^0.1.9" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.3", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "fastest-levenshtein": "^1.0.7" + } + }, + "node_modules/fast-uri": { + "version": "3.1.2", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fastify" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fastify" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/fast-xml-builder": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "path-expression-matcher": "^1.5.0", + "xml-naming": "^0.1.0" + } + }, + "node_modules/fast-xml-parser": { + "version": "5.7.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "@nodable/entities": "^2.1.0", + "fast-xml-builder": "^1.1.7", + "path-expression-matcher": "^1.5.0", + "strnum": "^2.2.3" + }, + "bin": { + "fxparser": "src/cli/cli.js" + } + }, + "node_modules/fastest-levenshtein": { + "version": "1.0.16", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.9.1" + } + }, + "node_modules/fastq": { + "version": "1.20.1", + "dev": true, + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "license": "MIT" + }, + "node_modules/figures": { + "version": "3.2.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/figures/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/file-entry-cache": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "flat-cache": "^3.0.4" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/filelist": { + "version": "1.0.6", + "license": "Apache-2.0", + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.9", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/find-up": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "2.0.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "micromatch": "^4.0.2" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" + }, + "engines": { + "node": "^10.12.0 || >=12.0.0" + } + }, + "node_modules/flatted": { + "version": "3.4.2", + "dev": true, + "license": "ISC" + }, + "node_modules/fn.name": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/follow-redirects": { + "version": "1.16.0", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-each": { + "version": "0.3.5", + "license": "MIT", + "dependencies": { + "is-callable": "^1.2.7" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/form-data": { + "version": "4.0.5", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/form-data-encoder": { + "version": "2.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 14.17" + } + }, + "node_modules/fs-extra": { + "version": "8.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/function.prototype.name": { + "version": "1.1.8", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/fuzzy": { + "version": "0.1.3", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/generator-function": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-func-name": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.3.0", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-package-type": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/get-proto": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-symbol-description": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/github-slugger": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/glob": { + "version": "7.2.3", + "dev": true, + "license": "ISC", + "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" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/balanced-match": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.15", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globals": { + "version": "13.24.0", + "dev": true, + "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", + "dev": true, + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/globalthis": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "define-properties": "^1.2.1", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/globby": { + "version": "11.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/gopd": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/got": { + "version": "13.0.0", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "dev": true, + "license": "ISC" + }, + "node_modules/grapheme-splitter": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/graphemer": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/has-bigints": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/header-case": { + "version": "2.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "capital-case": "^1.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/hosted-git-info": { + "version": "7.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^10.0.1" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/html-encoding-sniffer": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "whatwg-encoding": "^3.1.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.2.0", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/http-call": { + "version": "5.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "content-type": "^1.0.4", + "debug": "^4.1.1", + "is-retry-allowed": "^1.1.0", + "is-stream": "^2.0.0", + "parse-json": "^4.0.0", + "tunnel-agent": "^0.6.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "7.0.2", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.0", + "debug": "^4.3.4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/http-proxy-agent/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/http2-wrapper": { + "version": "2.2.1", + "dev": true, + "license": "MIT", + "dependencies": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" + }, + "engines": { + "node": ">=10.19.0" + } + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/husky": { + "version": "9.1.7", + "license": "MIT", + "bin": { + "husky": "bin.js" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" + } + }, + "node_modules/hyperlinker": { + "version": "1.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/iconv-lite": { + "version": "0.7.2", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/immer": { + "version": "10.2.0", + "license": "MIT", + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/immer" + } + }, + "node_modules/import-fresh": { + "version": "3.3.1", + "dev": true, + "license": "MIT", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "dev": true, + "license": "ISC", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", + "dev": true, + "license": "ISC" + }, + "node_modules/inquirer": { + "version": "8.2.7", + "license": "MIT", + "dependencies": { + "@inquirer/external-editor": "^1.0.0", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, + "engines": { + "node": ">=12.0.0" + } + }, + "node_modules/inquirer-search-checkbox": { + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "chalk": "^2.3.0", + "figures": "^2.0.0", + "fuzzy": "^0.1.3", + "inquirer": "^3.3.0" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/ansi-escapes": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/ansi-regex": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/cli-cursor": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/cli-width": { + "version": "2.2.1", + "license": "ISC" + }, + "node_modules/inquirer-search-checkbox/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/inquirer-search-checkbox/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/figures": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/inquirer": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/mimic-fn": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/mute-stream": { + "version": "0.0.7", + "license": "ISC" + }, + "node_modules/inquirer-search-checkbox/node_modules/onetime": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/restore-cursor": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/inquirer-search-checkbox/node_modules/string-width": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/strip-ansi": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-checkbox/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list": { + "version": "1.2.6", + "license": "MIT", + "dependencies": { + "chalk": "^2.3.0", + "figures": "^2.0.0", + "fuzzy": "^0.1.3", + "inquirer": "^3.3.0" + } + }, + "node_modules/inquirer-search-list/node_modules/ansi-escapes": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/ansi-regex": { + "version": "3.0.1", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/ansi-styles": { + "version": "3.2.1", + "license": "MIT", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/chalk": { + "version": "2.4.2", + "license": "MIT", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/cli-cursor": { + "version": "2.1.0", + "license": "MIT", + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/cli-width": { + "version": "2.2.1", + "license": "ISC" + }, + "node_modules/inquirer-search-list/node_modules/color-convert": { + "version": "1.9.3", + "license": "MIT", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/inquirer-search-list/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" + }, + "node_modules/inquirer-search-list/node_modules/escape-string-regexp": { + "version": "1.0.5", + "license": "MIT", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/inquirer-search-list/node_modules/figures": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/has-flag": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/inquirer": { + "version": "3.3.0", + "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer-search-list/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/mimic-fn": { + "version": "1.2.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/mute-stream": { + "version": "0.0.7", + "license": "ISC" + }, + "node_modules/inquirer-search-list/node_modules/onetime": { + "version": "2.0.1", + "license": "MIT", + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/restore-cursor": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/inquirer-search-list/node_modules/string-width": { + "version": "2.1.1", + "license": "MIT", + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/strip-ansi": { + "version": "4.0.0", + "license": "MIT", + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer-search-list/node_modules/supports-color": { + "version": "5.5.0", + "license": "MIT", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/rxjs": { + "version": "7.8.2", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/inquirer/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/internal-slot": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "hasown": "^2.0.2", + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arguments": { + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-array-buffer": { + "version": "3.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/is-async-function": { + "version": "2.1.1", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-bigint": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-boolean-object": { + "version": "1.2.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-callable": { + "version": "1.2.7", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-data-view": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "is-typed-array": "^1.1.13" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-date-object": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "license": "MIT", + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finalizationregistry": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-generator-function": { + "version": "1.1.2", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-interactive": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-map": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-nan": { + "version": "1.3.2", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-negative-zero": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-number-object": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-path-inside": { + "version": "3.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-plain-object": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-potential-custom-element-name": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/is-regex": { + "version": "1.2.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-retry-allowed": { + "version": "1.2.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-set": { + "version": "2.0.3", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-string": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-symbol": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-typed-array": { + "version": "1.1.15", + "license": "MIT", + "dependencies": { + "which-typed-array": "^1.1.16" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-unicode-supported": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-weakmap": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakref": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-weakset": { + "version": "2.0.4", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-wsl": { + "version": "2.2.0", + "license": "MIT", + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/isarray": { + "version": "2.0.5", + "license": "MIT" + }, + "node_modules/isexe": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/jake": { + "version": "10.9.4", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.6", + "filelist": "^1.0.4", + "picocolors": "^1.1.1" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/js-yaml": { + "version": "4.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/puzrin" + }, + { + "type": "github", + "url": "https://github.com/sponsors/nodeca" + } + ], + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsdom": { + "version": "23.2.0", + "license": "MIT", + "dependencies": { + "@asamuzakjp/dom-selector": "^2.0.1", + "cssstyle": "^4.0.1", + "data-urls": "^5.0.0", + "decimal.js": "^10.4.3", + "form-data": "^4.0.0", + "html-encoding-sniffer": "^4.0.0", + "http-proxy-agent": "^7.0.0", + "https-proxy-agent": "^7.0.2", + "is-potential-custom-element-name": "^1.0.1", + "parse5": "^7.1.2", + "rrweb-cssom": "^0.6.0", + "saxes": "^6.0.0", + "symbol-tree": "^3.2.4", + "tough-cookie": "^4.1.3", + "w3c-xmlserializer": "^5.0.0", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^3.1.1", + "whatwg-mimetype": "^4.0.0", + "whatwg-url": "^14.0.0", + "ws": "^8.16.0", + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "canvas": "^2.11.2" + }, + "peerDependenciesMeta": { + "canvas": { + "optional": true + } + } + }, + "node_modules/jsdom/node_modules/agent-base": { + "version": "7.1.4", + "license": "MIT", + "engines": { + "node": ">= 14" + } + }, + "node_modules/jsdom/node_modules/https-proxy-agent": { + "version": "7.0.6", + "license": "MIT", + "dependencies": { + "agent-base": "^7.1.2", + "debug": "4" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/json-buffer": { + "version": "3.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-schema-typed": { + "version": "7.0.3", + "license": "BSD-2-Clause" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/just-extend": { + "version": "6.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/keyv": { + "version": "4.5.4", + "dev": true, + "license": "MIT", + "dependencies": { + "json-buffer": "3.0.1" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/klona": { + "version": "2.0.6", + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/kuler": { + "version": "2.0.0", + "license": "MIT" + }, + "node_modules/levn": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/lightningcss": { + "version": "1.32.0", + "dev": true, + "license": "MPL-2.0", + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-android-arm64": "1.32.0", + "lightningcss-darwin-arm64": "1.32.0", + "lightningcss-darwin-x64": "1.32.0", + "lightningcss-freebsd-x64": "1.32.0", + "lightningcss-linux-arm-gnueabihf": "1.32.0", + "lightningcss-linux-arm64-gnu": "1.32.0", + "lightningcss-linux-arm64-musl": "1.32.0", + "lightningcss-linux-x64-gnu": "1.32.0", + "lightningcss-linux-x64-musl": "1.32.0", + "lightningcss-win32-arm64-msvc": "1.32.0", + "lightningcss-win32-x64-msvc": "1.32.0" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.32.0", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MPL-2.0", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lilconfig": { + "version": "3.1.3", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/localStorage": { + "version": "1.0.4", + "license": "(MIT OR Apache-2.0)", + "engines": { + "node": ">= v0.2.0" + } + }, + "node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lodash": { + "version": "4.18.1", + "license": "MIT" + }, + "node_modules/lodash.clonedeep": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "license": "MIT" + }, + "node_modules/lodash.isempty": { + "version": "4.4.0", + "license": "MIT" + }, + "node_modules/lodash.isequal": { + "version": "4.5.0", + "license": "MIT" + }, + "node_modules/lodash.isobject": { + "version": "3.0.2", + "license": "MIT" + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "license": "MIT" + }, + "node_modules/lodash.isundefined": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "license": "MIT" + }, + "node_modules/lodash.merge": { + "version": "4.6.2", + "dev": true, + "license": "MIT" + }, + "node_modules/log-symbols": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/logform": { + "version": "2.7.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "1.6.0", + "@types/triple-beam": "^1.3.2", + "fecha": "^4.2.0", + "ms": "^2.1.1", + "safe-stable-stringify": "^2.3.1", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/loupe": { + "version": "2.3.7", + "dev": true, + "license": "MIT", + "dependencies": { + "get-func-name": "^2.0.1" + } + }, + "node_modules/lower-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "license": "ISC" + }, + "node_modules/magic-string": { + "version": "0.30.21", + "dev": true, + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "license": "CC0-1.0" + }, + "node_modules/merge2": { + "version": "1.4.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "dev": true, + "license": "MIT", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "license": "MIT", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "3.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/mimic-response": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/minimatch": { + "version": "10.2.5", + "license": "BlueOak-1.0.0", + "dependencies": { + "brace-expansion": "^5.0.5" + }, + "engines": { + "node": "18 || 20 || >=22" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/mixme": { + "version": "0.5.10", + "license": "MIT", + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/mkdirp": { + "version": "1.0.4", + "license": "MIT", + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mock-stdin": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/ms": { + "version": "2.1.3", + "license": "MIT" + }, + "node_modules/mute-stream": { + "version": "0.0.8", + "license": "ISC" + }, + "node_modules/nanoid": { + "version": "3.3.12", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/natural-orderby": { + "version": "2.0.3", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/nise": { + "version": "5.1.9", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^11.2.2", + "@sinonjs/text-encoding": "^0.7.2", + "just-extend": "^6.2.0", + "path-to-regexp": "^6.2.1" + } + }, + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "11.3.1", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.1" + } + }, + "node_modules/no-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "lower-case": "^2.0.2", + "tslib": "^2.0.3" + } + }, + "node_modules/nock": { + "version": "13.5.6", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" + }, + "engines": { + "node": ">= 10.13" + } + }, + "node_modules/normalize-package-data": { + "version": "6.0.2", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^7.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" + }, + "engines": { + "node": "^16.14.0 || >=18.0.0" + } + }, + "node_modules/normalize-url": { + "version": "8.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/object-inspect": { + "version": "1.13.4", + "license": "MIT", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-is": { + "version": "1.1.6", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-treeify": { + "version": "1.1.33", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/object.assign": { + "version": "4.1.7", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/obug": { + "version": "2.1.2", + "dev": true, + "funding": [ + "https://github.com/sponsors/sxzz", + "https://opencollective.com/debug" + ], + "license": "MIT", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/oclif": { + "version": "4.23.14", + "dev": true, + "license": "MIT", + "dependencies": { + "@aws-sdk/client-cloudfront": "^3.1009.0", + "@aws-sdk/client-s3": "^3.1063.0", + "@inquirer/confirm": "^3.1.22", + "@inquirer/input": "^2.2.4", + "@inquirer/select": "^2.5.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.50", + "@oclif/plugin-not-found": "^3.2.87", + "@oclif/plugin-warn-if-update-available": "^3.1.65", + "ansis": "^3.16.0", + "async-retry": "^1.3.3", + "change-case": "^4", + "debug": "^4.4.0", + "ejs": "^3.1.10", + "find-yarn-workspace-root": "^2.0.0", + "fs-extra": "^8.1", + "github-slugger": "^2", + "got": "^13", + "normalize-package-data": "^6", + "semver": "^7.8.2", + "tiny-jsonc": "^1.0.2", + "validate-npm-package-name": "^5.0.1" + }, + "bin": { + "oclif": "bin/run.js" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/once": { + "version": "1.4.0", + "dev": true, + "license": "ISC", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/one-time": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "fn.name": "1.x.x" + } + }, + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "8.4.2", + "license": "MIT", + "dependencies": { + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/optionator": { + "version": "0.9.4", + "dev": true, + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/optionator/node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/ora": { + "version": "5.4.1", + "license": "MIT", + "dependencies": { + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/otplib": { + "version": "12.0.1", + "license": "MIT", + "dependencies": { + "@otplib/core": "^12.0.1", + "@otplib/preset-default": "^12.0.1", + "@otplib/preset-v11": "^12.0.1" + } + }, + "node_modules/own-keys": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } + }, + "node_modules/p-limit": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/papaparse": { + "version": "5.5.3", + "license": "MIT" + }, + "node_modules/param-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse5": { + "version": "7.3.0", + "license": "MIT", + "dependencies": { + "entities": "^6.0.0" + }, + "funding": { + "url": "https://github.com/inikulin/parse5?sponsor=1" + } + }, + "node_modules/pascal-case": { + "version": "3.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/password-prompt": { + "version": "1.1.3", + "dev": true, + "license": "0BSD", + "dependencies": { + "ansi-escapes": "^4.3.2", + "cross-spawn": "^7.0.3" + } + }, + "node_modules/path-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/path-exists": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-expression-matcher": { + "version": "1.5.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-to-regexp": { + "version": "6.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/pathe": { + "version": "2.0.3", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "2.3.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pkg-up": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up/node_modules/path-exists": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/pnpm": { + "version": "10.34.1", + "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-10.34.1.tgz", + "integrity": "sha512-tY+95tymapKVOAIVgfZItFcLbKGbGOfL1/LAenskRUFVOI2s3wjyrzZ46IptH+BPnWCd8kv1FzWgYOoEGzdKtw==", + "dev": true, + "license": "MIT", + "bin": { + "pnpm": "bin/pnpm.cjs", + "pnpx": "bin/pnpx.cjs" + }, + "engines": { + "node": ">=18.12" + }, + "funding": { + "url": "https://opencollective.com/pnpm" + } + }, + "node_modules/possible-typed-array-names": { + "version": "1.1.0", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/postcss": { + "version": "8.5.15", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.12", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/propagate": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 8" + } + }, + "node_modules/proto-list": { + "version": "1.2.4", + "dev": true, + "license": "ISC" + }, + "node_modules/proxy-from-env": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/psl": { + "version": "1.15.0", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" + } + }, + "node_modules/punycode": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/qs": { + "version": "6.15.2", + "license": "BSD-3-Clause", + "dependencies": { + "side-channel": "^1.1.0" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/readable-stream": { + "version": "3.6.2", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/recheck": { + "version": "4.4.5", + "license": "MIT", + "engines": { + "node": ">=14" + }, + "optionalDependencies": { + "recheck-jar": "4.4.5", + "recheck-linux-x64": "4.4.5", + "recheck-macos-x64": "4.4.5", + "recheck-windows-x64": "4.4.5" + } + }, + "node_modules/recheck-jar": { + "version": "4.4.5", + "license": "MIT", + "optional": true + }, + "node_modules/redeyed": { + "version": "2.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "esprima": "~4.0.0" + } + }, + "node_modules/reflect.getprototypeof": { + "version": "1.0.10", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.5.4", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/registry-auth-token": { + "version": "5.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "@pnpm/npm-conf": "^3.0.2" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-from-string": { + "version": "2.0.2", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/requires-port": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/resolve-alpn": { + "version": "1.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/responselike": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "lowercase-keys": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/restore-cursor": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/restore-cursor/node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/retry": { + "version": "0.13.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.1.0", + "dev": true, + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rolldown": { + "version": "1.0.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@oxc-project/types": "=0.133.0", + "@rolldown/pluginutils": "^1.0.0" + }, + "bin": { + "rolldown": "bin/cli.mjs" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "optionalDependencies": { + "@rolldown/binding-android-arm64": "1.0.3", + "@rolldown/binding-darwin-arm64": "1.0.3", + "@rolldown/binding-darwin-x64": "1.0.3", + "@rolldown/binding-freebsd-x64": "1.0.3", + "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", + "@rolldown/binding-linux-arm64-gnu": "1.0.3", + "@rolldown/binding-linux-arm64-musl": "1.0.3", + "@rolldown/binding-linux-ppc64-gnu": "1.0.3", + "@rolldown/binding-linux-s390x-gnu": "1.0.3", + "@rolldown/binding-linux-x64-gnu": "1.0.3", + "@rolldown/binding-linux-x64-musl": "1.0.3", + "@rolldown/binding-openharmony-arm64": "1.0.3", + "@rolldown/binding-wasm32-wasi": "1.0.3", + "@rolldown/binding-win32-arm64-msvc": "1.0.3", + "@rolldown/binding-win32-x64-msvc": "1.0.3" + } + }, + "node_modules/rrweb-cssom": { + "version": "0.6.0", + "license": "MIT" + }, + "node_modules/run-async": { + "version": "2.4.1", + "license": "MIT", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8" + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/safe-array-concat": { + "version": "1.1.4", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "get-intrinsic": "^1.3.0", + "has-symbols": "^1.1.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">=0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT" + }, + "node_modules/safe-push-apply": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "isarray": "^2.0.5" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-regex-test": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "is-regex": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/safe-stable-stringify": { + "version": "2.5.0", + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/saxes": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "xmlchars": "^2.2.0" + }, + "engines": { + "node": ">=v12.22.7" + } + }, + "node_modules/semver": { + "version": "7.8.4", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/sentence-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "no-case": "^3.0.4", + "tslib": "^2.0.3", + "upper-case-first": "^2.0.2" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-function-name": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-proto": { + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/short-uuid": { + "version": "6.0.3", + "license": "MIT", + "dependencies": { + "any-base": "^1.1.0" + }, + "engines": { + "node": ">=14.17.0" + } + }, + "node_modules/side-channel": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4", + "side-channel-list": "^1.0.1", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-list": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/siginfo": { + "version": "2.0.0", + "dev": true, + "license": "ISC" + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/simple-swizzle": { + "version": "0.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.4", + "dev": true, + "license": "MIT" + }, + "node_modules/sinon": { + "version": "16.1.3", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0", + "@sinonjs/fake-timers": "^10.3.0", + "@sinonjs/samsam": "^8.0.0", + "diff": "^5.1.0", + "nise": "^5.1.4", + "supports-color": "^7.2.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/sinon" + } + }, + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/slash": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/slate": { + "version": "0.103.0", + "license": "MIT", + "dependencies": { + "immer": "^10.0.3", + "is-plain-object": "^5.0.0", + "tiny-warning": "^1.0.3" + } + }, + "node_modules/slice-ansi": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" + } + }, + "node_modules/smartwrap": { + "version": "2.0.2", + "license": "MIT", + "dependencies": { + "array.prototype.flat": "^1.2.3", + "breakword": "^1.0.5", + "grapheme-splitter": "^1.0.4", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1", + "yargs": "^15.1.0" + }, + "bin": { + "smartwrap": "src/terminal-adapter.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/smartwrap/node_modules/cliui": { + "version": "6.0.0", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^6.2.0" + } + }, + "node_modules/smartwrap/node_modules/find-up": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/locate-path": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/p-limit": { + "version": "2.3.0", + "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/smartwrap/node_modules/p-locate": { + "version": "4.1.0", + "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/wrap-ansi": { + "version": "6.2.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/y18n": { + "version": "4.0.3", + "license": "ISC" + }, + "node_modules/smartwrap/node_modules/yargs": { + "version": "15.4.1", + "license": "MIT", + "dependencies": { + "cliui": "^6.0.0", + "decamelize": "^1.2.0", + "find-up": "^4.1.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^4.2.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^18.1.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/smartwrap/node_modules/yargs-parser": { + "version": "18.1.3", + "license": "ISC", + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/snake-case": { + "version": "3.0.4", + "dev": true, + "license": "MIT", + "dependencies": { + "dot-case": "^3.0.4", + "tslib": "^2.0.3" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.5.0", + "dev": true, + "license": "CC-BY-3.0" + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.23", + "dev": true, + "license": "CC0-1.0" + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "dev": true, + "license": "BSD-3-Clause" + }, + "node_modules/stack-trace": { + "version": "0.0.10", + "license": "MIT", + "engines": { + "node": "*" + } + }, + "node_modules/stackback": { + "version": "0.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/std-env": { + "version": "4.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/stdout-stderr": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "dependencies": { + "debug": "^4.1.1", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/stop-iteration-iterator": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/stream-browserify": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "inherits": "~2.0.4", + "readable-stream": "^3.5.0" + } + }, + "node_modules/stream-transform": { + "version": "2.1.3", + "license": "MIT", + "dependencies": { + "mixme": "^0.5.1" + } + }, + "node_modules/string_decoder": { + "version": "1.3.0", + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.2.0" + } + }, + "node_modules/string-width": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string.prototype.trim": { + "version": "1.2.11", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-data-property": "^1.1.4", + "define-properties": "^1.2.1", + "es-abstract": "^1.24.2", + "es-object-atoms": "^1.1.2", + "has-property-descriptors": "^1.0.2", + "safe-regex-test": "^1.1.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.10", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.7", + "define-properties": "^1.2.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-json-comments": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/strnum": { + "version": "2.4.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "dependencies": { + "anynum": "^1.0.0" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/symbol-tree": { + "version": "3.2.4", + "license": "MIT" + }, + "node_modules/text-hex": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/text-table": { + "version": "0.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/thirty-two": { + "version": "1.0.2", + "engines": { + "node": ">=0.2.6" + } + }, + "node_modules/through": { + "version": "2.3.8", + "license": "MIT" + }, + "node_modules/tiny-jsonc": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/tiny-warning": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/tinybench": { + "version": "2.9.0", + "dev": true, + "license": "MIT" + }, + "node_modules/tinyexec": { + "version": "1.2.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/tinyglobby": { + "version": "0.2.17", + "license": "MIT", + "dependencies": { + "fdir": "^6.5.0", + "picomatch": "^4.0.4" + }, + "engines": { + "node": ">=12.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/SuperchupuDev" + } + }, + "node_modules/tinyglobby/node_modules/fdir": { + "version": "6.5.0", + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } + }, + "node_modules/tinyglobby/node_modules/picomatch": { + "version": "4.0.4", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/tinyrainbow": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tough-cookie": { + "version": "4.1.4", + "license": "BSD-3-Clause", + "dependencies": { + "psl": "^1.1.33", + "punycode": "^2.1.1", + "universalify": "^0.2.0", + "url-parse": "^1.5.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tough-cookie/node_modules/universalify": { + "version": "0.2.0", + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/tr46": { + "version": "5.1.1", + "license": "MIT", + "dependencies": { + "punycode": "^2.3.1" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/traverse": { + "version": "0.6.11", + "license": "MIT", + "dependencies": { + "gopd": "^1.2.0", + "typedarray.prototype.slice": "^1.0.5", + "which-typed-array": "^1.1.18" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/triple-beam": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 14.0.0" + } + }, + "node_modules/ts-api-utils": { + "version": "1.4.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "license": "0BSD" + }, + "node_modules/tty-table": { + "version": "4.2.3", + "license": "MIT", + "dependencies": { + "chalk": "^4.1.2", + "csv": "^5.5.3", + "kleur": "^4.1.5", + "smartwrap": "^2.0.2", + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.1", + "yargs": "^17.7.1" + }, + "bin": { + "tty-table": "adapters/terminal-adapter.js" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/type-check": { + "version": "0.4.0", + "dev": true, + "license": "MIT", + "dependencies": { + "prelude-ls": "^1.2.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-detect": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/type-fest": { + "version": "0.21.3", + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/typed-array-buffer": { + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-typed-array": "^1.1.14" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/typed-array-byte-length": { + "version": "1.0.3", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-byte-offset": { + "version": "1.0.4", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typed-array-length": { + "version": "1.0.8", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.9", + "for-each": "^0.3.5", + "gopd": "^1.2.0", + "is-typed-array": "^1.1.15", + "possible-typed-array-names": "^1.1.0", + "reflect.getprototypeof": "^1.0.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typedarray.prototype.slice": { + "version": "1.0.5", + "license": "MIT", + "dependencies": { + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.9", + "es-errors": "^1.3.0", + "get-proto": "^1.0.1", + "math-intrinsics": "^1.1.0", + "typed-array-buffer": "^1.0.3", + "typed-array-byte-offset": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/typescript": { + "version": "5.9.3", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/unbox-primitive": { + "version": "1.1.0", + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "has-bigints": "^1.0.2", + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/undici-types": { + "version": "6.21.0", + "devOptional": true, + "license": "MIT" + }, + "node_modules/unique-string": { + "version": "2.0.0", + "license": "MIT", + "dependencies": { + "crypto-random-string": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/universalify": { + "version": "0.1.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/upper-case": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/upper-case-first": { + "version": "2.0.2", + "dev": true, + "license": "MIT", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "14.0.0", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist-node/bin/uuid" + } + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "5.0.1", + "dev": true, + "license": "ISC", + "engines": { + "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + } + }, + "node_modules/vite": { + "version": "8.0.16", + "dev": true, + "license": "MIT", + "dependencies": { + "lightningcss": "^1.32.0", + "picomatch": "^4.0.4", + "postcss": "^8.5.15", + "rolldown": "1.0.3", + "tinyglobby": "^0.2.17" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^20.19.0 || >=22.12.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^20.19.0 || >=22.12.0", + "@vitejs/devtools": "^0.1.18", + "esbuild": "^0.27.0 || ^0.28.0", + "jiti": ">=1.21.0", + "less": "^4.0.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" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "@vitejs/devtools": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "jiti": { + "optional": true + }, + "less": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/picomatch": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/vitest": { + "version": "4.1.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@vitest/expect": "4.1.8", + "@vitest/mocker": "4.1.8", + "@vitest/pretty-format": "4.1.8", + "@vitest/runner": "4.1.8", + "@vitest/snapshot": "4.1.8", + "@vitest/spy": "4.1.8", + "@vitest/utils": "4.1.8", + "es-module-lexer": "^2.0.0", + "expect-type": "^1.3.0", + "magic-string": "^0.30.21", + "obug": "^2.1.1", + "pathe": "^2.0.3", + "picomatch": "^4.0.3", + "std-env": "^4.0.0-rc.1", + "tinybench": "^2.9.0", + "tinyexec": "^1.0.2", + "tinyglobby": "^0.2.15", + "tinyrainbow": "^3.1.0", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", + "why-is-node-running": "^2.3.0" + }, + "bin": { + "vitest": "vitest.mjs" + }, + "engines": { + "node": "^20.0.0 || ^22.0.0 || >=24.0.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@opentelemetry/api": "^1.9.0", + "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", + "@vitest/browser-playwright": "4.1.8", + "@vitest/browser-preview": "4.1.8", + "@vitest/browser-webdriverio": "4.1.8", + "@vitest/coverage-istanbul": "4.1.8", + "@vitest/coverage-v8": "4.1.8", + "@vitest/ui": "4.1.8", + "happy-dom": "*", + "jsdom": "*", + "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@opentelemetry/api": { + "optional": true + }, + "@types/node": { + "optional": true + }, + "@vitest/browser-playwright": { + "optional": true + }, + "@vitest/browser-preview": { + "optional": true + }, + "@vitest/browser-webdriverio": { + "optional": true + }, + "@vitest/coverage-istanbul": { + "optional": true + }, + "@vitest/coverage-v8": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "vite": { + "optional": false + } + } + }, + "node_modules/vitest/node_modules/picomatch": { + "version": "4.0.4", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/w3c-xmlserializer": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "xml-name-validator": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "license": "MIT", + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "7.0.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/whatwg-encoding": { + "version": "3.1.1", + "license": "MIT", + "dependencies": { + "iconv-lite": "0.6.3" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/whatwg-mimetype": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/whatwg-url": { + "version": "14.2.0", + "license": "MIT", + "dependencies": { + "tr46": "^5.1.0", + "webidl-conversions": "^7.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/which": { + "version": "2.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.1.1", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-builtin-type": { + "version": "1.2.1", + "license": "MIT", + "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" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-collection": { + "version": "1.0.2", + "license": "MIT", + "dependencies": { + "is-map": "^2.0.3", + "is-set": "^2.0.3", + "is-weakmap": "^2.0.2", + "is-weakset": "^2.0.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/which-module": { + "version": "2.0.1", + "license": "ISC" + }, + "node_modules/which-typed-array": { + "version": "1.1.22", + "license": "MIT", + "dependencies": { + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.9", + "call-bound": "^1.0.4", + "for-each": "^0.3.5", + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/why-is-node-running": { + "version": "2.3.0", + "dev": true, + "license": "MIT", + "dependencies": { + "siginfo": "^2.0.0", + "stackback": "0.0.2" + }, + "bin": { + "why-is-node-running": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/widest-line": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "string-width": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/winston": { + "version": "3.19.0", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@dabh/diagnostics": "^2.0.8", + "async": "^3.2.3", + "is-stream": "^2.0.0", + "logform": "^2.7.0", + "one-time": "^1.0.0", + "readable-stream": "^3.4.0", + "safe-stable-stringify": "^2.3.1", + "stack-trace": "0.0.x", + "triple-beam": "^1.3.0", + "winston-transport": "^4.9.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/winston-transport": { + "version": "4.9.0", + "license": "MIT", + "dependencies": { + "logform": "^2.7.0", + "readable-stream": "^3.6.2", + "triple-beam": "^1.3.0" + }, + "engines": { + "node": ">= 12.0.0" + } + }, + "node_modules/word-wrap": { + "version": "1.2.5", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "dev": true, + "license": "ISC" + }, + "node_modules/ws": { + "version": "8.21.0", + "license": "MIT", + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "bufferutil": "^4.0.1", + "utf-8-validate": ">=5.0.2" + }, + "peerDependenciesMeta": { + "bufferutil": { + "optional": true + }, + "utf-8-validate": { + "optional": true + } + } + }, + "node_modules/xdg-basedir": { + "version": "4.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/xml-name-validator": { + "version": "5.0.0", + "license": "Apache-2.0", + "engines": { + "node": ">=18" + } + }, + "node_modules/xml-naming": { + "version": "0.1.0", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/NaturalIntelligence" + } + ], + "license": "MIT", + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/xmlchars": { + "version": "2.2.0", + "license": "MIT" + }, + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "license": "MIT", + "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" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yoctocolors-cjs": { + "version": "2.1.3", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack-apps-cli": { + "name": "@contentstack/apps-cli", + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "@apollo/client": "^3.14.1", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-launch": "^1.10.0", + "@contentstack/cli-utilities": "~1.18.4", + "adm-zip": "^0.5.17", + "chalk": "^4.1.2", + "lodash": "^4.18.1", + "shelljs": "^0.10.0", + "tmp": "^0.2.7", + "winston": "^3.19.0" + }, + "bin": { + "app": "bin/run" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/adm-zip": "^0.5.8", + "@types/chai": "^4.3.20", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^20.19.41", + "@types/shelljs": "^0.10.0", + "@types/tmp": "^0.2.6", + "@typescript-eslint/eslint-plugin": "^8.58.2", + "@typescript-eslint/parser": "^8.58.2", + "axios": "^1.16.1", + "chai": "^4.5.0", + "dotenv": "^16.6.1", + "eslint": "^8.57.1", + "eslint-config-oclif": "^6.0.157", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "shx": "^0.4.0", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=16" + } + }, + "packages/contentstack-apps-cli/node_modules/@apollo/client": { + "resolved": "../node_modules/.pnpm/@apollo+client@3.14.1_graphql@16.13.0/node_modules/@apollo/client", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@contentstack/cli-launch": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-launch@1.10.1_@types+node@20.19.42_tslib@2.8.1_typescript@5.9.3/node_modules/@contentstack/cli-launch", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/adm-zip": { + "resolved": "../node_modules/.pnpm/@types+adm-zip@0.5.8/node_modules/@types/adm-zip", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/lodash": { + "resolved": "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/shelljs": { + "resolved": "../node_modules/.pnpm/@types+shelljs@0.10.0/node_modules/@types/shelljs", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@types/tmp": { + "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/@typescript-eslint/parser": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/adm-zip": { + "resolved": "../node_modules/.pnpm/adm-zip@0.5.17/node_modules/adm-zip", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/axios": { + "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/shelljs": { + "resolved": "../node_modules/.pnpm/shelljs@0.10.0/node_modules/shelljs", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/shx": { + "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/tmp": { + "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@5.9.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/tslib": { + "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-apps-cli/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-audit": { + "name": "@contentstack/cli-audit", + "version": "1.19.4", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "chalk": "^4.1.2", + "fast-csv": "^4.3.6", + "fs-extra": "^11.3.0", + "lodash": "^4.18.1", + "winston": "^3.19.0" + }, + "bin": { + "audit": "bin/run.js" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/fs-extra": "^11.0.4", + "@types/mocha": "^10.0.10", + "@types/node": "^20.17.50", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.17.46", + "shx": "^0.4.0", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=16" + } + }, + "packages/contentstack-audit/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-audit/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-audit/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-audit/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-audit/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-audit/node_modules/@types/fs-extra": { + "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", + "link": true + }, + "packages/contentstack-audit/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-audit/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node", + "link": true + }, + "packages/contentstack-audit/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-audit/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-audit/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-audit/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-audit/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-audit/node_modules/fast-csv": { + "resolved": "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv", + "link": true + }, + "packages/contentstack-audit/node_modules/fs-extra": { + "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", + "link": true + }, + "packages/contentstack-audit/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-audit/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-audit/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-audit/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@20.19.35/node_modules/oclif", + "link": true + }, + "packages/contentstack-audit/node_modules/shx": { + "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", + "link": true + }, + "packages/contentstack-audit/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", + "link": true + }, + "packages/contentstack-audit/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-audit/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-audit/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-bootstrap": { + "name": "@contentstack/cli-cm-bootstrap", + "version": "1.19.6", + "license": "MIT", + "dependencies": { + "@contentstack/cli-cm-seed": "~1.15.6", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-config": "~1.20.4", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "inquirer": "8.2.7", + "mkdirp": "^2.1.6", + "tar": "^7.5.11" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/inquirer": "^9.0.8", + "@types/mkdirp": "^1.0.2", + "@types/node": "^14.18.63", + "@types/tar": "^6.1.13", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.17.46", + "tmp": "^0.2.7", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-bootstrap/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@contentstack/cli-config": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@14.18.63/node_modules/@contentstack/cli-config", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@types/inquirer": { + "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/@types/tar": { + "resolved": "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@2.1.6/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/tar": { + "resolved": "../node_modules/.pnpm/tar@7.5.11/node_modules/tar", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/tmp": { + "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", + "link": true + }, + "packages/contentstack-bootstrap/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-branches": { + "name": "@contentstack/cli-cm-branches", + "version": "1.8.2", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "chalk": "^4.1.2", + "just-diff": "^6.0.2", + "lodash": "^4.18.1" + }, + "devDependencies": { + "chai": "^4.5.0", + "dotenv": "^16.5.0", + "dotenv-expand": "^9.0.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.17.46", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-branches/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-branches/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-branches/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-branches/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-branches/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-branches/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-branches/node_modules/dotenv-expand": { + "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", + "link": true + }, + "packages/contentstack-branches/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-branches/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-branches/node_modules/just-diff": { + "resolved": "../node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff", + "link": true + }, + "packages/contentstack-branches/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-branches/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-branches/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-branches/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-branches/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", + "link": true + }, + "packages/contentstack-branches/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-branches/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-bulk-operations": { + "name": "@contentstack/cli-bulk-operations", + "version": "1.2.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/delivery-sdk": "^5.2.1", + "@contentstack/management": "^1.30.3", + "lodash": "^4.18.1", + "uuid": "^14.0.0" + }, + "bin": { + "bulk": "bin/run.js" + }, + "devDependencies": { + "@eslint/eslintrc": "^3.3.1", + "@types/chai": "^5.2.3", + "@types/lodash": "^4.17.24", + "@types/mocha": "^10.0.10", + "@types/node": "^20.19.0", + "@types/sinon": "^21.0.1", + "@typescript-eslint/eslint-plugin": "^8.59.2", + "@typescript-eslint/parser": "^8.59.2", + "chai": "^6.2.2", + "conventional-changelog-cli": "^5.0.0", + "dotenv": "^17.4.2", + "eslint": "^10.3.0", + "eslint-config-oclif": "^6.0.162", + "eslint-config-oclif-typescript": "^3.1.14", + "eslint-config-prettier": "^10.1.8", + "eslint-plugin-prettier": "^5.5.5", + "husky": "^9.1.7", + "lint-staged": "^17.0.2", + "mocha": "^11.7.5", + "nyc": "^18.0.0", + "oclif": "^4.23.8", + "prettier": "^3.8.3", + "shx": "^0.4.0", + "sinon": "^22.0.0", + "ts-node": "^10.9.2", + "tslib": "^2.8.1", + "typescript": "~6.0.3" + }, + "engines": { + "node": ">=20.19.0" + } + }, + "packages/contentstack-bulk-operations/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@contentstack/delivery-sdk": { + "resolved": "../node_modules/.pnpm/@contentstack+delivery-sdk@5.2.1/node_modules/@contentstack/delivery-sdk", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@contentstack/management": { + "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@eslint/eslintrc": { + "resolved": "../node_modules/.pnpm/@eslint+eslintrc@3.3.5/node_modules/@eslint/eslintrc", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@types/lodash": { + "resolved": "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@10.4.1__e3ba3d274f8f3b210d1198e9e5c2531c/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/@typescript-eslint/parser": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@10.4.1_typescript@6.0.3/node_modules/@typescript-eslint/parser", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@6.2.2/node_modules/chai", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/conventional-changelog-cli": { + "resolved": "../node_modules/.pnpm/conventional-changelog-cli@5.0.0_conventional-commits-filter@5.0.0/node_modules/conventional-changelog-cli", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@10.4.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/eslint-config-prettier": { + "resolved": "../node_modules/.pnpm/eslint-config-prettier@10.1.8_eslint@10.4.1/node_modules/eslint-config-prettier", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/eslint-plugin-prettier": { + "resolved": "../node_modules/.pnpm/eslint-plugin-prettier@5.5.6_eslint-config-prettier@10.1.8_eslint@10.4.1__eslint@10.4.1_prettier@3.8.3/node_modules/eslint-plugin-prettier", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/husky": { + "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/lint-staged": { + "resolved": "../node_modules/.pnpm/lint-staged@17.0.7/node_modules/lint-staged", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@11.7.6/node_modules/mocha", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@18.0.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/prettier": { + "resolved": "../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/shx": { + "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@22.0.0/node_modules/sinon", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@6.0.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/tslib": { + "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-bulk-operations/node_modules/uuid": { + "resolved": "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid", + "link": true + }, + "packages/contentstack-bulk-publish": { + "name": "@contentstack/cli-cm-bulk-publish", + "version": "1.12.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-config": "~1.20.4", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "chalk": "^4.1.2", + "dotenv": "^16.6.1", + "inquirer": "8.2.7", + "lodash": "^4.18.1", + "winston": "^3.19.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-config": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@22.19.20/node_modules/@contentstack/cli-config", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@22.19.20/node_modules/inquirer", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-bulk-publish/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate": { + "name": "@contentstack/cli-cm-regex-validate", + "version": "1.0.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "^1.8.3", + "@contentstack/cli-utilities": "^1.18.4", + "@contentstack/management": "^1.30.3", + "cli-table3": "^0.6.5", + "cli-ux": "^6.0.9", + "inquirer": "12.11.1", + "jest": "^30.4.2", + "jsonexport": "^3.2.0", + "safe-regex": "^2.1.1", + "tslib": "^2.8.1" + }, + "devDependencies": { + "@babel/preset-env": "^7.29.5", + "@oclif/plugin-help": "^6.2.49", + "@oclif/test": "^3.2.15", + "@types/chai": "^4.3.20", + "@types/jest": "^30.0.0", + "@types/jsonexport": "^3.0.5", + "@types/mocha": "^10.0.10", + "@types/node": "^18.19.130", + "@types/safe-regex": "^1.1.6", + "@typescript-eslint/eslint-plugin": "^8.59.2", + "chai": "^4.5.0", + "eslint": "^8.57.1", + "eslint-config-oclif": "^4.0.0", + "eslint-config-oclif-typescript": "^1.0.3", + "eslint-plugin-unicorn": "^48.0.1", + "globby": "^11.1.0", + "husky": "^9.1.7", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "ts-jest": "^29.4.9", + "ts-node": "^10.9.2", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@babel/preset-env": { + "resolved": "../node_modules/.pnpm/@babel+preset-env@7.29.7_@babel+core@7.29.0/node_modules/@babel/preset-env", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@18.19.130/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@18.19.130/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/management": { + "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@3.2.15/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/jest": { + "resolved": "../node_modules/.pnpm/@types+jest@30.0.0/node_modules/@types/jest", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/jsonexport": { + "resolved": "../node_modules/.pnpm/@types+jsonexport@3.0.5/node_modules/@types/jsonexport", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@18.19.130/node_modules/@types/node", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@types/safe-regex": { + "resolved": "../node_modules/.pnpm/@types+safe-regex@1.1.6/node_modules/@types/safe-regex", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/cli-table3": { + "resolved": "../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/cli-ux": { + "resolved": "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@4.0.0_eslint@8.57.1/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@1.0.3_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-plugin-unicorn": { + "resolved": "../node_modules/.pnpm/eslint-plugin-unicorn@48.0.1_eslint@8.57.1/node_modules/eslint-plugin-unicorn", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/globby": { + "resolved": "../node_modules/.pnpm/globby@11.1.0/node_modules/globby", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/husky": { + "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@12.11.1_@types+node@18.19.130/node_modules/inquirer", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/jest": { + "resolved": "../node_modules/.pnpm/jest@30.4.2_@types+node@18.19.130_ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3_/node_modules/jest", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/jsonexport": { + "resolved": "../node_modules/.pnpm/jsonexport@3.2.0/node_modules/jsonexport", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@18.19.130/node_modules/oclif", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/safe-regex": { + "resolved": "../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/ts-jest": { + "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_91e8a29d7054379dc014cfca91cefdc3/node_modules/ts-jest", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/tslib": { + "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", + "link": true + }, + "packages/contentstack-cli-cm-regex-validate/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-cli-tsgen": { + "version": "4.10.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/types-generator": "^3.10.1" + }, + "devDependencies": { + "@oclif/plugin-help": "^6.2.49", + "@oclif/test": "^4.1.18", + "@types/jest": "^29.5.14", + "@types/node": "^22.19.19", + "@typescript-eslint/eslint-plugin": "^8.59.3", + "@typescript-eslint/parser": "^8.59.3", + "dotenv": "^16.6.1", + "eslint": "^8.57.1", + "eslint-config-oclif": "^6.0.165", + "eslint-config-oclif-typescript": "^3.1.14", + "jest": "^29.7.0", + "oclif": "^4.23.8", + "ts-jest": "^29.4.9", + "typescript": "^5.9.3" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-cli-tsgen/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@contentstack/types-generator": { + "resolved": "../node_modules/.pnpm/@contentstack+types-generator@3.10.1_graphql@16.13.0/node_modules/@contentstack/types-generator", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@types/jest": { + "resolved": "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/@typescript-eslint/parser": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/jest": { + "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@5.9.3_/node_modules/jest", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/ts-jest": { + "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_c6f142628921a6aa1de38c975c7e1f3d/node_modules/ts-jest", + "link": true + }, + "packages/contentstack-cli-tsgen/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-clone": { + "name": "@contentstack/cli-cm-clone", + "version": "1.21.7", + "license": "MIT", + "dependencies": { + "@colors/colors": "^1.6.0", + "@contentstack/cli-cm-export": "~1.25.1", + "@contentstack/cli-cm-import": "~1.33.3", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "chalk": "^4.1.2", + "inquirer": "8.2.7", + "lodash": "^4.18.1", + "merge": "^2.1.1", + "ora": "^5.4.1", + "prompt": "^1.3.0", + "rimraf": "^6.1.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.0", + "@types/mocha": "^10.0.0", + "@types/node": "^14.18.63", + "@types/sinon": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^21.0.1", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-clone/node_modules/@colors/colors": { + "resolved": "../node_modules/.pnpm/@colors+colors@1.6.0/node_modules/@colors/colors", + "link": true + }, + "packages/contentstack-clone/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-clone/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-clone/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-clone/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-clone/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-clone/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-clone/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-clone/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@10.0.20/node_modules/@types/sinon", + "link": true + }, + "packages/contentstack-clone/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-clone/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-clone/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-clone/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-clone/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-clone/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", + "link": true + }, + "packages/contentstack-clone/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-clone/node_modules/merge": { + "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", + "link": true + }, + "packages/contentstack-clone/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-clone/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-clone/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-clone/node_modules/ora": { + "resolved": "../node_modules/.pnpm/ora@5.4.1/node_modules/ora", + "link": true + }, + "packages/contentstack-clone/node_modules/prompt": { + "resolved": "../node_modules/.pnpm/prompt@1.3.0/node_modules/prompt", + "link": true + }, + "packages/contentstack-clone/node_modules/rimraf": { + "resolved": "../node_modules/.pnpm/rimraf@6.1.3/node_modules/rimraf", + "link": true + }, + "packages/contentstack-clone/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", + "link": true + }, + "packages/contentstack-clone/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-clone/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-content-type": { + "name": "contentstack-cli-content-type", + "version": "1.5.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "^1.8.3", + "@contentstack/cli-utilities": "^1.18.4", + "@types/diff2html": "^3.0.3", + "@types/git-diff": "^2.0.7", + "@types/hogan.js": "^3.0.5", + "@types/table": "^6.3.2", + "@types/tmp": "^0.2.6", + "axios": "^1.16.1", + "cli-ux": "^6.0.9", + "diff2html": "^3.4.56", + "git-diff": "^2.0.6", + "moment": "^2.30.1", + "node-graphviz": "^0.1.1", + "table": "^6.9.0", + "tmp": "^0.2.7", + "tslib": "^2.8.1", + "url-join": "^4.0.1" + }, + "devDependencies": { + "@oclif/plugin-help": "^6.2.49", + "@types/jest": "^29.5.14", + "@types/node": "^22.19.19", + "eslint": "^8.57.1", + "eslint-config-oclif": "^6.0.162", + "eslint-config-oclif-typescript": "^3.1.14", + "globby": "^11.1.0", + "jest": "^29.7.0", + "oclif": "^4.23.8", + "ts-jest": "^29.4.10", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-content-type/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-content-type/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-content-type/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/diff2html": { + "resolved": "../node_modules/.pnpm/@types+diff2html@3.0.3/node_modules/@types/diff2html", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/git-diff": { + "resolved": "../node_modules/.pnpm/@types+git-diff@2.0.7/node_modules/@types/git-diff", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/hogan.js": { + "resolved": "../node_modules/.pnpm/@types+hogan.js@3.0.5/node_modules/@types/hogan.js", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/jest": { + "resolved": "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/table": { + "resolved": "../node_modules/.pnpm/@types+table@6.3.2/node_modules/@types/table", + "link": true + }, + "packages/contentstack-content-type/node_modules/@types/tmp": { + "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", + "link": true + }, + "packages/contentstack-content-type/node_modules/axios": { + "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", + "link": true + }, + "packages/contentstack-content-type/node_modules/cli-ux": { + "resolved": "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux", + "link": true + }, + "packages/contentstack-content-type/node_modules/diff2html": { + "resolved": "../node_modules/.pnpm/diff2html@3.4.56/node_modules/diff2html", + "link": true + }, + "packages/contentstack-content-type/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-content-type/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-content-type/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-content-type/node_modules/git-diff": { + "resolved": "../node_modules/.pnpm/git-diff@2.0.6/node_modules/git-diff", + "link": true + }, + "packages/contentstack-content-type/node_modules/globby": { + "resolved": "../node_modules/.pnpm/globby@11.1.0/node_modules/globby", + "link": true + }, + "packages/contentstack-content-type/node_modules/jest": { + "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5_/node_modules/jest", + "link": true + }, + "packages/contentstack-content-type/node_modules/moment": { + "resolved": "../node_modules/.pnpm/moment@2.30.1/node_modules/moment", + "link": true + }, + "packages/contentstack-content-type/node_modules/node-graphviz": { + "resolved": "../node_modules/.pnpm/node-graphviz@0.1.1/node_modules/node-graphviz", + "link": true + }, + "packages/contentstack-content-type/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-content-type/node_modules/table": { + "resolved": "../node_modules/.pnpm/table@6.9.0/node_modules/table", + "link": true + }, + "packages/contentstack-content-type/node_modules/tmp": { + "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", + "link": true + }, + "packages/contentstack-content-type/node_modules/ts-jest": { + "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_cb540a799e3e2e0732d753edc26b671a/node_modules/ts-jest", + "link": true + }, + "packages/contentstack-content-type/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-content-type/node_modules/tslib": { + "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", + "link": true + }, + "packages/contentstack-content-type/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-content-type/node_modules/url-join": { + "resolved": "../node_modules/.pnpm/url-join@4.0.1/node_modules/url-join", + "link": true + }, + "packages/contentstack-export": { + "name": "@contentstack/cli-cm-export", + "version": "1.25.1", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/cli-variants": "~1.5.1", + "@oclif/core": "^4.11.4", + "async": "^3.2.6", + "big-json": "^3.2.0", + "bluebird": "^3.7.2", + "chalk": "^4.1.2", + "lodash": "^4.18.1", + "merge": "^2.1.1", + "mkdirp": "^1.0.4", + "progress-stream": "^2.0.0", + "promise-limit": "^2.7.0", + "winston": "^3.19.0" + }, + "devDependencies": { + "@contentstack/cli-auth": "~1.8.0", + "@contentstack/cli-config": "~1.20.1", + "@contentstack/cli-dev-dependencies": "^1.3.1", + "@oclif/plugin-help": "^6.2.28", + "@oclif/test": "^4.1.18", + "@types/big-json": "^3.2.5", + "@types/chai": "^4.3.11", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.6", + "@types/progress-stream": "^2.0.5", + "@types/sinon": "^17.0.2", + "chai": "^4.4.1", + "dotenv": "^16.5.0", + "dotenv-expand": "^9.0.0", + "eslint": "^9.26.0", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^17.0.1", + "source-map-support": "^0.5.21", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-export-to-csv": { + "name": "@contentstack/cli-cm-export-to-csv", + "version": "1.12.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "fast-csv": "^4.3.6", + "inquirer": "8.2.7", + "inquirer-checkbox-plus-prompt": "1.4.2" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/chai": "^4.3.20", + "@types/inquirer": "^9.0.8", + "@types/mocha": "^10.0.10", + "@types/node": "^20.17.50", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "eslint-config-oclif-typescript": "^3.1.14", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^19.0.5", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/contentstack-export-to-csv/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@types/inquirer": { + "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/fast-csv": { + "resolved": "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@20.19.35/node_modules/inquirer", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/inquirer-checkbox-plus-prompt": { + "resolved": "../node_modules/.pnpm/inquirer-checkbox-plus-prompt@1.4.2_inquirer@8.2.7_@types+node@20.19.35_/node_modules/inquirer-checkbox-plus-prompt", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.35/node_modules/oclif", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-export-to-csv/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-export/node_modules/@contentstack/cli-auth": { + "resolved": "../cli/packages/contentstack-auth", + "link": true + }, + "packages/contentstack-export/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-export/node_modules/@contentstack/cli-config": { + "resolved": "../cli/packages/contentstack-config", + "link": true + }, + "packages/contentstack-export/node_modules/@contentstack/cli-dev-dependencies": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", + "link": true + }, + "packages/contentstack-export/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-export/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-export/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.37/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-export/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-export/node_modules/@types/big-json": { + "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", + "link": true + }, + "packages/contentstack-export/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-export/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-export/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-export/node_modules/@types/progress-stream": { + "resolved": "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream", + "link": true + }, + "packages/contentstack-export/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon", + "link": true + }, + "packages/contentstack-export/node_modules/async": { + "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", + "link": true + }, + "packages/contentstack-export/node_modules/big-json": { + "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", + "link": true + }, + "packages/contentstack-export/node_modules/bluebird": { + "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", + "link": true + }, + "packages/contentstack-export/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-export/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-export/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-export/node_modules/dotenv-expand": { + "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", + "link": true + }, + "packages/contentstack-export/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-export/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-export/node_modules/merge": { + "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", + "link": true + }, + "packages/contentstack-export/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-export/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-export/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-export/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-export/node_modules/progress-stream": { + "resolved": "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream", + "link": true + }, + "packages/contentstack-export/node_modules/promise-limit": { + "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", + "link": true + }, + "packages/contentstack-export/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon", + "link": true + }, + "packages/contentstack-export/node_modules/source-map-support": { + "resolved": "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support", + "link": true + }, + "packages/contentstack-export/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-export/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-export/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-external-migrate": { + "name": "@contentstack/cli-external-migrate", + "version": "1.0.0-alpha.1", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "^1.6.1", + "@contentstack/cli-utilities": "^1.14.4", + "@contentstack/json-rte-serializer": "^2.0.13", + "@contentstack/marketplace-sdk": "^1.5.2", + "@oclif/core": "^4.8.0", + "axios": "^1.15.2", + "chalk": "^4.1.2", + "jsdom": "^23.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "p-limit": "^3.1.0", + "uuid": "^14.0.0" + }, + "devDependencies": { + "@oclif/test": "^3.0.0", + "@types/jsdom": "^21.1.7", + "@types/lodash": "^4.17.0", + "@types/mkdirp": "^1.0.2", + "@types/node": "^20.12.12", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "eslint": "^8.56.0", + "oclif": "^4.8.0", + "typescript": "^5.3.3", + "vitest": "^4.0.18" + }, + "engines": { + "node": ">=20.0.0" + } + }, + "packages/contentstack-import": { + "name": "@contentstack/cli-cm-import", + "version": "1.33.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-audit": "~1.19.4", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/cli-variants": "~1.5.1", + "@oclif/core": "^4.11.4", + "big-json": "^3.2.0", + "bluebird": "^3.7.2", + "chalk": "^4.1.2", + "debug": "^4.4.3", + "fs-extra": "^11.3.3", + "lodash": "^4.18.1", + "marked": "^4.3.0", + "merge": "^2.1.1", + "mkdirp": "^1.0.4", + "promise-limit": "^2.7.0", + "winston": "^3.19.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/big-json": "^3.2.5", + "@types/bluebird": "^3.5.42", + "@types/fs-extra": "^11.0.4", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.89", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-import-setup": { + "name": "@contentstack/cli-cm-import-setup", + "version": "1.8.4", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "big-json": "^3.2.0", + "chalk": "^4.1.2", + "fs-extra": "^11.3.0", + "lodash": "^4.18.1", + "merge": "^2.1.1", + "mkdirp": "^1.0.4", + "winston": "^3.19.0" + }, + "devDependencies": { + "@types/big-json": "^3.2.5", + "@types/chai": "^4.3.20", + "@types/fs-extra": "^11.0.4", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "@typescript-eslint/eslint-plugin": "^5.62.0", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-import-setup/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/big-json": { + "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/fs-extra": { + "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-import-setup/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-import-setup/node_modules/big-json": { + "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", + "link": true + }, + "packages/contentstack-import-setup/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-import-setup/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-import-setup/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-import-setup/node_modules/fs-extra": { + "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", + "link": true + }, + "packages/contentstack-import-setup/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-import-setup/node_modules/merge": { + "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", + "link": true + }, + "packages/contentstack-import-setup/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-import-setup/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-import-setup/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-import-setup/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-import-setup/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-import-setup/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-import-setup/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-import/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-import/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-import/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-import/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-import/node_modules/@types/big-json": { + "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", + "link": true + }, + "packages/contentstack-import/node_modules/@types/bluebird": { + "resolved": "../node_modules/.pnpm/@types+bluebird@3.5.42/node_modules/@types/bluebird", + "link": true + }, + "packages/contentstack-import/node_modules/@types/fs-extra": { + "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", + "link": true + }, + "packages/contentstack-import/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-import/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-import/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-import/node_modules/@typescript-eslint/eslint-plugin": { + "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", + "link": true + }, + "packages/contentstack-import/node_modules/big-json": { + "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", + "link": true + }, + "packages/contentstack-import/node_modules/bluebird": { + "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", + "link": true + }, + "packages/contentstack-import/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-import/node_modules/debug": { + "resolved": "../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug", + "link": true + }, + "packages/contentstack-import/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-import/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-import/node_modules/fs-extra": { + "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", + "link": true + }, + "packages/contentstack-import/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-import/node_modules/marked": { + "resolved": "../node_modules/.pnpm/marked@4.3.0/node_modules/marked", + "link": true + }, + "packages/contentstack-import/node_modules/merge": { + "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", + "link": true + }, + "packages/contentstack-import/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-import/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-import/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-import/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-import/node_modules/promise-limit": { + "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", + "link": true + }, + "packages/contentstack-import/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-import/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-import/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-migrate-rte": { + "name": "@contentstack/cli-cm-migrate-rte", + "version": "1.7.0", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "1.8.3", + "@contentstack/cli-utilities": "1.18.4", + "@contentstack/json-rte-serializer": "~2.1.0", + "@oclif/core": "^4.11.4", + "@oclif/plugin-help": "^6.2.37", + "chalk": "^4.1.2", + "collapse-whitespace": "^1.1.7", + "jsdom": "^23.2.0", + "jsonschema": "^1.5.0", + "lodash": "^4.18.1", + "omit-deep-lodash": "^1.1.7" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "chai": "^4.5.0", + "eslint": "^8.57.1", + "eslint-config-oclif": "^6.0.165", + "husky": "^9.1.7", + "mocha": "^10.8.2", + "nock": "^13.5.6", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "querystring": "^0.2.1", + "sinon": "^21.1.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "packages/contentstack-migrate-rte/node_modules/@contentstack/cli-command": { + "resolved": "../cli/packages/contentstack-command", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/@contentstack/cli-utilities": { + "resolved": "../cli/packages/contentstack-utilities", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/@contentstack/json-rte-serializer": { + "resolved": "../node_modules/.pnpm/@contentstack+json-rte-serializer@2.1.0/node_modules/@contentstack/json-rte-serializer", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/collapse-whitespace": { + "resolved": "../node_modules/.pnpm/collapse-whitespace@1.1.7/node_modules/collapse-whitespace", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/husky": { + "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/jsdom": { + "resolved": "../node_modules/.pnpm/jsdom@23.2.0/node_modules/jsdom", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/jsonschema": { + "resolved": "../node_modules/.pnpm/jsonschema@1.5.0/node_modules/jsonschema", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/nock": { + "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/omit-deep-lodash": { + "resolved": "../node_modules/.pnpm/omit-deep-lodash@1.1.7/node_modules/omit-deep-lodash", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/querystring": { + "resolved": "../node_modules/.pnpm/querystring@0.2.1/node_modules/querystring", + "link": true + }, + "packages/contentstack-migrate-rte/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", + "link": true + }, + "packages/contentstack-migration": { + "name": "@contentstack/cli-migration", + "version": "1.12.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-command": "~1.8.2", + "@contentstack/cli-utilities": "~1.18.3", + "@oclif/core": "^4.11.4", + "async": "^3.2.6", + "callsites": "^3.1.0", + "cardinal": "^2.1.1", + "chalk": "^4.1.2", + "concat-stream": "^2.0.0", + "listr": "^0.14.3", + "winston": "^3.19.0" + }, + "devDependencies": { + "@oclif/test": "^4.1.18", + "@types/mocha": "^8.2.3", + "@types/node": "^14.18.63", + "chai": "^4.5.0", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.62", + "jsdoc-to-markdown": "^8.0.3", + "mocha": "^10.8.2", + "nock": "^13.5.6", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^19.0.5", + "source-map-support": "^0.5.21", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=8.3.0" + } + }, + "packages/contentstack-migration/node_modules/@contentstack/cli-command": { + "resolved": "../cli/packages/contentstack-command", + "link": true + }, + "packages/contentstack-migration/node_modules/@contentstack/cli-utilities": { + "resolved": "../cli/packages/contentstack-utilities", + "link": true + }, + "packages/contentstack-migration/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-migration/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-migration/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-migration/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-migration/node_modules/async": { + "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", + "link": true + }, + "packages/contentstack-migration/node_modules/callsites": { + "resolved": "../node_modules/.pnpm/callsites@3.1.0/node_modules/callsites", + "link": true + }, + "packages/contentstack-migration/node_modules/cardinal": { + "resolved": "../node_modules/.pnpm/cardinal@2.1.1/node_modules/cardinal", + "link": true + }, + "packages/contentstack-migration/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-migration/node_modules/chalk": { + "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", + "link": true + }, + "packages/contentstack-migration/node_modules/concat-stream": { + "resolved": "../node_modules/.pnpm/concat-stream@2.0.0/node_modules/concat-stream", + "link": true + }, + "packages/contentstack-migration/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-migration/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-migration/node_modules/jsdoc-to-markdown": { + "resolved": "../node_modules/.pnpm/jsdoc-to-markdown@8.0.3/node_modules/jsdoc-to-markdown", + "link": true + }, + "packages/contentstack-migration/node_modules/listr": { + "resolved": "../node_modules/.pnpm/listr@0.14.3/node_modules/listr", + "link": true + }, + "packages/contentstack-migration/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-migration/node_modules/nock": { + "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", + "link": true + }, + "packages/contentstack-migration/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-migration/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-migration/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon", + "link": true + }, + "packages/contentstack-migration/node_modules/source-map-support": { + "resolved": "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support", + "link": true + }, + "packages/contentstack-migration/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-migration/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-migration/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-query-export": { + "name": "@contentstack/cli-cm-export-query", + "version": "1.0.3", + "license": "MIT", + "dependencies": { + "@contentstack/cli-cm-export": "~1.25.1", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/cli-variants": "~1.5.1", + "@oclif/core": "^4.11.4", + "async": "^3.2.6", + "big-json": "^3.2.0", + "bluebird": "^3.7.2", + "lodash": "^4.18.1", + "merge": "^2.1.1", + "mkdirp": "^1.0.4", + "progress-stream": "^2.0.0", + "promise-limit": "^2.7.0", + "tslib": "^2.8.1", + "winston": "^3.19.0" + }, + "devDependencies": { + "@contentstack/cli-dev-dependencies": "~1.3.1", + "@oclif/plugin-help": "^6.2.44", + "@oclif/test": "^4.1.18", + "@types/big-json": "^3.2.5", + "@types/chai": "^4.3.20", + "@types/mkdirp": "^1.0.2", + "@types/mocha": "^10.0.10", + "@types/node": "^20.19.39", + "@types/progress-stream": "^2.0.5", + "@types/sinon": "^17.0.4", + "chai": "^4.5.0", + "dotenv": "^16.6.1", + "dotenv-expand": "^9.0.0", + "eslint": "^8.57.1", + "eslint-config-oclif": "^6.0.157", + "husky": "^9.1.7", + "mocha": "10.8.2", + "nyc": "^15.1.0", + "oclif": "^4.23.8", + "sinon": "^17.0.2", + "ts-node": "^10.9.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-query-export/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.39/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-query-export/node_modules/@contentstack/cli-dev-dependencies": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", + "link": true + }, + "packages/contentstack-query-export/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-query-export/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-query-export/node_modules/@oclif/plugin-help": { + "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.44/node_modules/@oclif/plugin-help", + "link": true + }, + "packages/contentstack-query-export/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/big-json": { + "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/chai": { + "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/mocha": { + "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/progress-stream": { + "resolved": "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream", + "link": true + }, + "packages/contentstack-query-export/node_modules/@types/sinon": { + "resolved": "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon", + "link": true + }, + "packages/contentstack-query-export/node_modules/async": { + "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", + "link": true + }, + "packages/contentstack-query-export/node_modules/big-json": { + "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", + "link": true + }, + "packages/contentstack-query-export/node_modules/bluebird": { + "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", + "link": true + }, + "packages/contentstack-query-export/node_modules/chai": { + "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", + "link": true + }, + "packages/contentstack-query-export/node_modules/dotenv": { + "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", + "link": true + }, + "packages/contentstack-query-export/node_modules/dotenv-expand": { + "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", + "link": true + }, + "packages/contentstack-query-export/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", + "link": true + }, + "packages/contentstack-query-export/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-query-export/node_modules/husky": { + "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", + "link": true + }, + "packages/contentstack-query-export/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-query-export/node_modules/merge": { + "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", + "link": true + }, + "packages/contentstack-query-export/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-query-export/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-query-export/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-query-export/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.39/node_modules/oclif", + "link": true + }, + "packages/contentstack-query-export/node_modules/progress-stream": { + "resolved": "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream", + "link": true + }, + "packages/contentstack-query-export/node_modules/promise-limit": { + "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", + "link": true + }, + "packages/contentstack-query-export/node_modules/sinon": { + "resolved": "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon", + "link": true + }, + "packages/contentstack-query-export/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-query-export/node_modules/tslib": { + "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", + "link": true + }, + "packages/contentstack-query-export/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-query-export/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + }, + "packages/contentstack-seed": { + "name": "@contentstack/cli-cm-seed", + "version": "1.15.6", + "license": "MIT", + "dependencies": { + "@contentstack/cli-cm-import": "~1.33.3", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "inquirer": "8.2.7", + "mkdirp": "^1.0.4", + "tar": "^7.5.11", + "tmp": "^0.2.7" + }, + "devDependencies": { + "@types/inquirer": "^9.0.9", + "@types/jest": "^26.0.24", + "@types/mkdirp": "^1.0.2", + "@types/node": "^14.18.63", + "@types/tar": "^6.1.13", + "@types/tmp": "^0.2.6", + "eslint": "^9.26.0", + "eslint-config-oclif": "^6.0.137", + "eslint-config-oclif-typescript": "^3.1.14", + "jest": "^29.7.0", + "oclif": "^4.23.8", + "ts-jest": "^29.4.6", + "ts-node": "^8.10.2", + "typescript": "^4.9.5" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "packages/contentstack-seed/node_modules/@contentstack/cli-command": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", + "link": true + }, + "packages/contentstack-seed/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/inquirer": { + "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/jest": { + "resolved": "../node_modules/.pnpm/@types+jest@26.0.24/node_modules/@types/jest", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/mkdirp": { + "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/tar": { + "resolved": "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar", + "link": true + }, + "packages/contentstack-seed/node_modules/@types/tmp": { + "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", + "link": true + }, + "packages/contentstack-seed/node_modules/eslint": { + "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", + "link": true + }, + "packages/contentstack-seed/node_modules/eslint-config-oclif": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", + "link": true + }, + "packages/contentstack-seed/node_modules/eslint-config-oclif-typescript": { + "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", + "link": true + }, + "packages/contentstack-seed/node_modules/inquirer": { + "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", + "link": true + }, + "packages/contentstack-seed/node_modules/jest": { + "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@14.18.63_ts-node@8.10.2_typescript@4.9.5_/node_modules/jest", + "link": true + }, + "packages/contentstack-seed/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-seed/node_modules/oclif": { + "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", + "link": true + }, + "packages/contentstack-seed/node_modules/tar": { + "resolved": "../node_modules/.pnpm/tar@7.5.11/node_modules/tar", + "link": true + }, + "packages/contentstack-seed/node_modules/tmp": { + "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", + "link": true + }, + "packages/contentstack-seed/node_modules/ts-jest": { + "resolved": "../node_modules/.pnpm/ts-jest@29.4.6_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest@_91abf64bf25366afcb92b2a0c11b02db/node_modules/ts-jest", + "link": true + }, + "packages/contentstack-seed/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node", + "link": true + }, + "packages/contentstack-seed/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", + "link": true + }, + "packages/contentstack-variants": { + "name": "@contentstack/cli-variants", + "version": "1.5.1", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.18.4", + "@oclif/core": "^4.11.4", + "lodash": "^4.18.1", + "mkdirp": "^1.0.4", + "winston": "^3.19.0" + }, + "devDependencies": { + "@contentstack/cli-dev-dependencies": "^1.3.1", + "@oclif/test": "^4.1.18", + "@types/node": "^20.19.39", + "mocha": "^10.8.2", + "nyc": "^15.1.0", + "ts-node": "^10.9.2", + "typescript": "^5.8.3" + } + }, + "packages/contentstack-variants/node_modules/@contentstack/cli-dev-dependencies": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", + "link": true + }, + "packages/contentstack-variants/node_modules/@contentstack/cli-utilities": { + "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities", + "link": true + }, + "packages/contentstack-variants/node_modules/@oclif/core": { + "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", + "link": true + }, + "packages/contentstack-variants/node_modules/@oclif/test": { + "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", + "link": true + }, + "packages/contentstack-variants/node_modules/@types/node": { + "resolved": "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node", + "link": true + }, + "packages/contentstack-variants/node_modules/lodash": { + "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", + "link": true + }, + "packages/contentstack-variants/node_modules/mkdirp": { + "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", + "link": true + }, + "packages/contentstack-variants/node_modules/mocha": { + "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", + "link": true + }, + "packages/contentstack-variants/node_modules/nyc": { + "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", + "link": true + }, + "packages/contentstack-variants/node_modules/ts-node": { + "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@5.9.3/node_modules/ts-node", + "link": true + }, + "packages/contentstack-variants/node_modules/typescript": { + "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", + "link": true + }, + "packages/contentstack-variants/node_modules/winston": { + "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", + "link": true + } + } +} diff --git a/packages/contentstack-apps-cli/src/util/common-utils.ts b/packages/contentstack-apps-cli/src/util/common-utils.ts index f72dcb1c4..b9f68def4 100644 --- a/packages/contentstack-apps-cli/src/util/common-utils.ts +++ b/packages/contentstack-apps-cli/src/util/common-utils.ts @@ -120,7 +120,7 @@ function fetchAppInstallations( flags: FlagInput, orgUid: string, options: MarketPlaceOptions -) { +): Promise { const { marketplaceSdk } = options; const app: any = flags["app-uid"]; return marketplaceSdk @@ -218,7 +218,7 @@ function uninstallApp( orgUid: string, options: MarketPlaceOptions, installationUid: string -) { +): Promise { const { marketplaceSdk } = options; // const app: any = flags["app-uid"]; return marketplaceSdk diff --git a/packages/contentstack-external-migrate/.eslintrc.js b/packages/contentstack-external-migrate/.eslintrc.js new file mode 100644 index 000000000..08f344c60 --- /dev/null +++ b/packages/contentstack-external-migrate/.eslintrc.js @@ -0,0 +1,18 @@ +module.exports = { + parser: '@typescript-eslint/parser', + parserOptions: { + ecmaVersion: 2020, + sourceType: 'module', + }, + plugins: ['@typescript-eslint'], + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended'], + rules: { + 'unicorn/prefer-module': 'off', + 'unicorn/no-abusive-eslint-disable': 'off', + '@typescript-eslint/no-use-before-define': 'off', + 'node/no-missing-import': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-require-imports': 'off', + 'no-useless-escape': 'off', + }, +}; diff --git a/packages/contentstack-external-migrate/.gitignore b/packages/contentstack-external-migrate/.gitignore new file mode 100644 index 000000000..b45de1b9d --- /dev/null +++ b/packages/contentstack-external-migrate/.gitignore @@ -0,0 +1,27 @@ +node_modules/ +/lib/ +oclif.manifest.json +*.log +.DS_Store +coverage/ + +# Local migration outputs (may contain customer content) +migration-workspace/ +contentstack-import/ +audit-reports/ +audit-fix/ +audit-verify/ +export.json +contentfulMigrationData/ +_backup_*/ +migration-manifest.json + +# Import/audit session logs (local artifacts, may contain customer content) +logs/ +session.json + +# Internal scratch docs — never commit (PR drafts / status notes) +pr.md +achieve.md +out/ +.vscode/ diff --git a/packages/contentstack-external-migrate/AGENTS.md b/packages/contentstack-external-migrate/AGENTS.md new file mode 100644 index 000000000..c39f64c19 --- /dev/null +++ b/packages/contentstack-external-migrate/AGENTS.md @@ -0,0 +1,43 @@ +# Agent guide — Contentstack Migrate plugin + +Use this file when automating work in `cli-plugin-migrate/`. + +## What this repo is + +- **Package:** `@contentstack/cli-plugin-migrate` +- **Commands:** `csdx migrate:export|convert|audit|import|status` +- **Scope:** Contentful → Contentstack migration (expert CLI, no bundled AI) + +## User-facing docs (read first) + +| Doc | Use when | +|-----|----------| +| [README.md](./README.md) | Install, commands, troubleshooting | +| [docs/getting-started.md](./docs/getting-started.md) | Onboarding colleagues | +| [docs/expert-workflow.md](./docs/expert-workflow.md) | End-to-end pipeline | +| [docs/limitations-and-scope.md](./docs/limitations-and-scope.md) | What is / isn't supported | + +## Maintainer docs + +| Doc | Use when | +|-----|----------| +| [docs/architecture.md](./docs/architecture.md) | Package layout, adapters | +| [docs/implementation-principles.md](./docs/implementation-principles.md) | Port vs PRD flags, spawn rules | +| [docs/phases/](./docs/phases/) | Per-command implementation specs | + +## Rules for changes + +1. **Do not** add `--stack` to `migrate:convert` — import stays on `migrate:import`. +2. **Audit/import** → shell out via `src/lib/csdx-spawn.ts`, do not reimplement CMA. +3. **Export** → `src/lib/contentful-cli-spawn.ts` (global `contentful` or `npx -y contentful-cli`). +4. **Never log** management tokens or full stack API keys. +5. **Manifest** updates on successful command completion — see `src/lib/manifest.ts`. +6. Match flag names in [README.md](./README.md) and phase docs, not the old reference Commander CLI. + +## Verify + +```bash +npm run build && npm test +``` + +Reference port source (optional, parent monorepo): `../references/import-contentful-cli-main/`. diff --git a/packages/contentstack-external-migrate/CHANGELOG.md b/packages/contentstack-external-migrate/CHANGELOG.md new file mode 100644 index 000000000..30bf34818 --- /dev/null +++ b/packages/contentstack-external-migrate/CHANGELOG.md @@ -0,0 +1,21 @@ +# Changelog + +All notable changes to `@contentstack/cli-plugin-migrate` are documented here. + +## [0.1.0] — 2026-06-03 + +### Added + +- `csdx migrate:export` — Contentful space export via Contentful CLI +- `csdx migrate:convert` — Contentful export → Contentstack import bundle +- `csdx migrate:audit` — wrapper for `csdx cm:stacks:audit` +- `csdx migrate:import` — wrapper for `csdx cm:stacks:import` +- `csdx migrate:status` — migration workspace manifest and next-step hints +- `migration-manifest.json` tracking (no secrets) +- Documentation set under `docs/` and root `README.md` + +### Notes + +- Contentful-only (`--legacy contentful`) +- Install via `csdx plugins:link .` after `npm run build` +- Import requires an empty destination stack and `csdx auth:login` diff --git a/packages/contentstack-external-migrate/CONTRIBUTING.md b/packages/contentstack-external-migrate/CONTRIBUTING.md new file mode 100644 index 000000000..e7680db48 --- /dev/null +++ b/packages/contentstack-external-migrate/CONTRIBUTING.md @@ -0,0 +1,56 @@ +# Contributing + +Thanks for working on `@contentstack/cli-plugin-migrate`. This repo is a **csdx plugin** — colleagues install it with `csdx plugins:link .`, not from npm (unless you publish it later). + +## Setup + +```bash +cd cli-plugin-migrate +npm install +npm run build +csdx plugins:link . +csdx migrate --help +``` + +Node **20+** required. Built output goes to `lib/` (gitignored); always run `npm run build` after pulling TypeScript changes. + +## Scripts + +| Command | Purpose | +|---------|---------| +| `npm run build` | `tsc`, copy JSON assets, regenerate `oclif.manifest.json` | +| `npm test` | Vitest (unit + convert integration on fixtures) | +| `npm run lint` | ESLint on `.ts` files | + +## Where to change things + +| Area | Path | +|------|------| +| CLI commands | `src/commands/migrate/*.ts` | +| Contentful orchestration | `src/adapters/contentful/` | +| Conversion engine | `src/services/contentful/` | +| Spawn helpers | `src/lib/csdx-spawn.ts`, `src/lib/contentful-cli-spawn.ts` | +| Manifest | `src/lib/manifest.ts` | +| Tests | `test/` | + +## Documentation + +When you change behavior or flags, update: + +1. [README.md](./README.md) — user-facing command reference +2. [docs/expert-workflow.md](./docs/expert-workflow.md) — copy-paste pipeline +3. Relevant [docs/phases/](./docs/phases/) spec if the contract changed +4. [docs/manifest-schema.md](./docs/manifest-schema.md) if manifest fields change + +See [docs/README.md](./docs/README.md) for the full doc map. + +## Tests + +- Small fixture: `test/fixtures/contentful-export.json` (always in repo) +- Large export test skips if `../references/contentful-export-*.json` is missing (monorepo only) + +## Pull requests + +- Run `npm run build && npm test` before opening a PR +- Do not commit `migration-workspace/`, `export.json`, tokens, or `node_modules/` +- Do not commit `lib/` or `oclif.manifest.json` (generated on build) diff --git a/packages/contentstack-external-migrate/LICENSE b/packages/contentstack-external-migrate/LICENSE new file mode 100644 index 000000000..aff1142ee --- /dev/null +++ b/packages/contentstack-external-migrate/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 Contentstack + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/contentstack-external-migrate/README.md b/packages/contentstack-external-migrate/README.md new file mode 100644 index 000000000..99c39c1eb --- /dev/null +++ b/packages/contentstack-external-migrate/README.md @@ -0,0 +1,859 @@ +# Contentstack Migrate (`csdx migrate`) + +`@contentstack/cli-plugin-migrate` is a **csdx** plugin that migrates content from **Contentful** into **Contentstack**. Each step is a separate CLI command you can run on its own — no AI required, no monolithic “do everything” script. + +The plugin **converts** legacy exports in-process and **delegates** stack operations to native Contentstack CLI (`csdx cm:stacks:audit`, `csdx cm:stacks:import`). Contentful export uses the **Contentful CLI** (global `contentful` or `npx -y contentful-cli`). + +--- + +## What you get + +| Command | Purpose | +|---------|---------| +| `csdx migrate:export` | Pull a Contentful space to `export.json` | +| `csdx migrate:convert` | Transform export → Contentstack import **bundle** | +| `csdx migrate:audit` | Validate bundle (`csdx cm:stacks:audit`) | +| `csdx migrate:import` | Push bundle to an empty stack | +| `csdx migrate:create` | **One-shot**: convert + create a new stack in an org + import into it | +| `csdx migrate:status` | Show pipeline progress from `migration-manifest.json` | + +**Typical flow:** export → convert → **review model** → audit → (optional fix) → import → delivery credentials in the UI. + +--- + +## What gets migrated + +There is **no separate command per object** — everything below is handled automatically inside `migrate:convert` (builds it into the bundle) and `migrate:create` / `migrate:import` (pushes it to the stack). You run the same few commands; these are the capabilities they cover. + +| Object | Migrated? | Where | Notes | +|--------|-----------|-------|-------| +| **Content types & fields** | ✅ | convert | Full field-type mapping; affix prefixing; Title/URL auto-mapped | +| **Field help text** | ✅ | convert | Contentful `editorInterfaces` help text → Contentstack field instruction | +| **Content-type description** | ✅ | convert | Carried onto the content type | +| **Default values** | ✅ | convert | Per field type → `field_metadata.default_value` | +| **Rich Text → JSON RTE** | ✅ | convert | Structured; embedded entries/assets kept as references | +| **Entries** | ✅ | convert/import | References re-linked; localized variants | +| **Entry tags** | ✅ | convert | Contentful entry `metadata.tags` resolved id → **name** → Contentstack entry tags | +| **Assets** | ✅ | convert/import | Uploaded + re-linked | +| **Locales / languages** | ✅ | convert | Master locale auto-detected; fallback chain | +| **Taxonomy** | ✅ | convert | Taxonomy + terms | +| **Roles** | ✅ | convert/import | Built-ins matched (Owner/Admin/Developer/Content Manager, incl. Editor/Author); others → custom roles | +| **Webhooks** | ✅ | convert/import | Secret values are stripped by Contentful → header **names kept as placeholders**; imported **disabled**. Created via CMA so all webhooks land (works around a csdx limit that imports only the first 5) | +| **Environments → branches** | ✅ | create | Branch-enabled org: each Contentful environment → its own branch (`master`→`main`). Branch-disabled org: master only → default workspace | +| **Delivery + preview tokens** | ✅ | create/import | Provisioned on stack creation; Live Preview enabled; written to `metadata.json` (incl. `branches[]`, main first) | +| **Users / memberships** | ✅ | create (`--space-id`) | Space members fetched from the live CF API, invited with their **exact** mapped roles (on by default; `--no-invite-users` to skip). OAuth/SSO supported | +| **Personalize** | ✅ | import | | +| Workflows & publish rules | ❌ | — | Not exported by Contentful — rebuild via CMA | +| Releases / scheduled actions | ❌ | — | Not exported by Contentful — recreate after cutover | +| Webhook **secret values** | ❌ | — | Redacted by Contentful — operator re-enters (we flag which) | + +--- + +## Prerequisites + +| Requirement | Used for | +|-------------|----------| +| **Node.js 20+** | Plugin runtime | +| **`@contentstack/cli`** (`npm i -g @contentstack/cli`) | `csdx` and audit/import | +| **`csdx auth:login`** | Audit and import only | +| **`CONTENTFUL_MANAGEMENT_TOKEN`** | Export (prefer env over CLI flag) | +| **Empty Contentstack stack** | Import destination | + +Contentful CLI for export: install globally (`npm i -g contentful-cli`) or rely on automatic `npx -y contentful-cli`. + +--- + +## Install the plugin + +From the plugin directory (this repo root, or `cli-plugin-migrate/` inside a parent monorepo): + +```bash +cd cli-plugin-migrate # skip if you are already at the repo root +npm install +npm run build +csdx plugins:link . +``` + +Verify: + +```bash +csdx migrate --help +``` + +To unlink later: `csdx plugins:unlink cli-plugin-migrate` (from the plugin directory). + +After code changes, run `npm run build` and `csdx plugins:link .` again. + +--- + +## Sharing with your team + +Send colleagues: + +1. Link to this repo +2. [docs/getting-started.md](./docs/getting-started.md) — install + first run +3. [docs/expert-workflow.md](./docs/expert-workflow.md) — full migration pipeline + +Install is always: clone → `npm install && npm run build` → `csdx plugins:link .` (not npm publish). + +## Quick start (existing Contentful export) + +**Built-in fixture** (works with only this repo): + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./test/fixtures/contentful-export.json \ + --output ./contentstack-import \ + --master-locale en-US +``` + +**Large sample export** (when cloned inside a monorepo with `references/`): + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json \ + --output ./contentstack-import \ + --master-locale en-US +``` + +Bundle output: `./contentstack-import/bundle/` (content types, entries, locales, assets metadata, `mapper.json`). + +Then audit and import (requires Contentstack login): + +```bash +csdx auth:login + +csdx migrate:audit \ + -d ./contentstack-import/bundle \ + --report-path ./audit-reports + +csdx migrate:import \ + -k YOUR_STACK_API_KEY \ + -d ./contentstack-import/bundle \ + -y +``` + +--- + +## Full pipeline (recommended workspace layout) + +Use one **migration workspace** so `migration-manifest.json` tracks progress: + +```bash +export CONTENTFUL_MANAGEMENT_TOKEN="your-cma-token" +csdx auth:login +``` + +### 1. Export from Contentful + +```bash +csdx migrate:export \ + --legacy contentful \ + --space-id YOUR_SPACE_ID \ + --output ./migration-workspace +``` + +Creates `./migration-workspace/export.json` (and optional asset files with `--download-assets`). + +### 2. Convert to Contentstack bundle + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./migration-workspace/export.json \ + --output ./migration-workspace/contentstack-import \ + --master-locale en-US \ + --workspace ./migration-workspace +``` + +### 3. Review the content model (manual) + +Before audit/import, inspect generated schemas: + +```bash +ls ./migration-workspace/contentstack-import/bundle/content_types/ +cat ./migration-workspace/contentstack-import/bundle/mapper.json +``` + +Checklist and rationale: [docs/phases/phase-5-manifest-and-review.md](./docs/phases/phase-5-manifest-and-review.md). + +Re-run convert with `--affix` or `--master-locale` if naming or locale mapping is wrong. Do not skip this step on production migrations. + +### 4. Audit the bundle + +```bash +csdx migrate:audit \ + -d ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-reports \ + --workspace ./migration-workspace +``` + +Fix issues with native CLI, then re-audit: + +```bash +csdx cm:stacks:audit:fix \ + -d ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-fix + +csdx migrate:audit \ + -d ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-verify +``` + +### 5. Import into Contentstack + +Target stack must be **empty**. + +```bash +csdx migrate:import \ + -k YOUR_STACK_API_KEY \ + -d ./migration-workspace/contentstack-import/bundle \ + --workspace ./migration-workspace \ + -y +``` + +`--yes` skips confirmation prompts (default). Use `--no-yes` for interactive confirmations. + +### 6. Check status anytime + +```bash +csdx migrate:status --workspace ./migration-workspace +cat ./migration-workspace/migration-manifest.json +``` + +The manifest records step timestamps and paths — **never** management tokens or full stack API keys (only a short prefix after import). + +### 7. Delivery credentials (manual) + +In the Contentstack UI: Stack → API Key and Delivery Token → configure your app (`CONTENTSTACK_API_KEY`, delivery token, region, environment). + +--- + +## Command reference + +### `migrate:export` + +| Flag | Description | +|------|-------------| +| `-l, --legacy` | `contentful` (required) | +| `--space-id` | Contentful space ID | +| `--management-token` | CMA token (prefer `CONTENTFUL_MANAGEMENT_TOKEN`) | +| `-o, --output` | Workspace root (default: `./migration-workspace`) | +| `-w, --workspace` | Manifest workspace (defaults to `--output`) | +| `--download-assets` | Download asset binaries | +| `--include-drafts` / `--include-archived` | Export scope | +| `-v, --verbose` | Log CLI invocation (token redacted) | + +### `migrate:convert` + +| Flag | Description | +|------|-------------| +| `-l, --legacy` | `contentful` (required) | +| `-i, --input` | Path to Contentful export JSON | +| `-o, --output` | Parent dir; bundle → `/bundle` | +| `-m, --master-locale` | Destination master locale (e.g. `en-US`) | +| `-a, --affix` | Content-type UID prefix | +| `-w, --workspace` | Manifest workspace | +| `-v, --verbose` | Verbose conversion logs | + +No `--stack` on convert — import is a separate step by design. + +### `migrate:audit` + +Wraps `csdx cm:stacks:audit`. + +| Flag | Description | +|------|-------------| +| `-d, --data-dir` | Bundle directory | +| `--report-path` | Audit report output dir | +| `--modules` | e.g. `content-types,entries,assets` | +| `--csv` | CSV report | +| `-w, --workspace` | Manifest workspace | + +### `migrate:import` + +Import a converted bundle — **either** into an existing stack (`--stack-api-key`) **or** into a brand-new stack created in an organization (`--org`). All inputs are optional; you're prompted for anything missing. + +- `--stack-api-key` given → import into that existing stack (wraps `csdx cm:stacks:import`). +- no `--stack-api-key` → resolve `--org` (or pick from a list of your orgs), create a stack named `Contentful Migration `, and import into it. The master locale is read from the bundle. **Delivery and preview tokens** are then provisioned and written to `/metadata.json`. + +Auth uses your existing csdx session — both `csdx auth:login` and `csdx auth:login --oauth` work; no re-login. + +```bash +# into an existing stack +csdx migrate:import -k bltYOUR_KEY -d ./contentstack-import/bundle + +# create a new stack in an org and import into it +csdx migrate:import --org bltYOUR_ORG_UID -d ./contentstack-import/bundle + +# fully prompted (bundle path → org pick-list → auto stack name) +csdx migrate:import +``` + +| Flag | Description | +|------|-------------| +| `-k, --stack-api-key` | Destination stack API key (import into an **existing** stack) | +| `--org` | Org uid — create a **new** stack here when `--stack-api-key` is omitted (prompts with a list if omitted) | +| `--stack-name` | Name for the new stack (default: `Contentful Migration `) | +| `-d, --data-dir` | Bundle directory | +| `-y, --yes` / `--no-yes` | Skip prompts (default: yes) | +| `--skip-audit` | Skip pre-import audit-fix | +| `--module` | Partial import (e.g. `entries`) | +| `--branch` | Branch alias | +| `-w, --workspace` | Manifest workspace | + +When a stack is created, delivery + preview tokens are generated (best-effort) and saved to `metadata.json` alongside the bundle. + +### `migrate:create` + +One-shot org flow: get an export, **create a new stack** in an organization, and import into it. Master locale is auto-detected from the export's default locale and used for both the new stack and the conversion. + +You supply the source **one of three ways**: +- `--input ./export.json` — an export JSON you already have, **or** +- `--space-id SPACE_ID` — pull a fresh export from one Contentful space; the JSON is saved to the workspace and reused, **or** +- `--cf-org-id CF_ORG_ID` — migrate **every space** the token can access in that Contentful org, **one stack per space**. + +The CMA token is resolved automatically from `--management-token` → `CONTENTFUL_MANAGEMENT_TOKEN` → `contentful login` (`~/.contentfulrc.json`), and prompted only if none is found. + +`--org` (the **destination Contentstack** org) is optional — omit it to choose from a pick-list of your orgs. Note: `--org` is the Contentstack destination; `--cf-org-id` is the Contentful source — they are different orgs. + +#### Migrate a whole Contentful org (with `--cf-org-id`) + +Pass a Contentful **org id** and the command migrates every space in it, one at a time, each into its own stack: + +- Prints `Contentful Org name`, `Total space count`, and the space list first. +- For **each space**: export all environments → convert (prints the conversion summary) → create a stack **named after the space** → branches (master→main) → import → webhooks/workflows/users/tokens → `✓ Migration complete`. Then the next space. +- **Continues on failure** — if one space errors it's logged and the run moves on; a final roll-up shows `N/M spaces succeeded` with per-space ✓ stack / ✗ error (and a non-zero exit if any failed). +- If **both** `--space-id` and `--cf-org-id` are given, only `--space-id` is used. +- Each space gets its own output subdir (`//…`); the space name is the stack name (so `--stack-name` is honored only for a single-space/`--input` run). + +```bash +# migrate every space in a Contentful org → one stack per space +csdx migrate:create --legacy contentful --cf-org-id CF_ORG_ID --org bltYOUR_ORG_UID +``` + +Stack creation uses the Contentstack Management API (primary) and falls back to `csdx cm:stacks:seed`. Requires `csdx auth:login` (basic **or** `--oauth`), and the logged-in **region must match the org's region**. + +#### Users (with `--space-id`) + +Contentful space **members are not in the static export**, so when you use `--space-id` the command fetches them from the live Contentful Management API and migrates them into the new stack: + +- Each member is invited with **exactly** their equivalent Contentstack role(s) — a space **admin** → the **Admin** role; other roles → the matching built-in (e.g. `Editor`/`Author` → **Content Manager**) or a **same-name custom role**. A member whose roles map to nothing is **skipped** (never invited into a default/unintended role). +- Inviting is **on by default** (sends invite emails). Pass `--no-invite-users` to only write the mapping report and not email anyone. +- A `users/users-mapping.json` report (who maps to which role, who was skipped) is **always** written to the bundle. +- **OAuth / SSO orgs** are supported: invites use the same authenticated session (`--oauth` Bearer token, auto-refreshed). If a **strict-SSO** org rejects email invites, the command surfaces a hint to provision those users via your IdP (SAML/SCIM) — the role mapping is preserved in the report. + +```bash +# A) from an existing export JSON +csdx migrate:create --legacy contentful --input ./export.json --org bltYOUR_ORG_UID + +# B) export from Contentful first +export CONTENTFUL_MANAGEMENT_TOKEN="your-cma-token" +csdx migrate:create --legacy contentful --space-id YOUR_SPACE_ID --org bltYOUR_ORG_UID --download-assets +``` + +| Flag | Description | +|------|-------------| +| `-l, --legacy` | `contentful` (required) | +| `-i, --input` | Path to Contentful export JSON (use this **or** `--space-id`) | +| `--space-id` | Contentful space ID — export one space (use this **or** `--input` **or** `--cf-org-id`) | +| `--cf-org-id` | Contentful **org** id — migrate every space in the org, one stack per space. Ignored if `--space-id` is given | +| `--management-token` | Contentful CMA token — optional; falls back to `CONTENTFUL_MANAGEMENT_TOKEN`, then `contentful login`, then a prompt | +| `--download-assets` / `--include-drafts` / `--include-archived` | Export scope (with `--space-id`) | +| `--org` | Destination organization uid — new stack is created here. Optional: if omitted, you get a pick-list of your organizations | +| `--stack-name` | New stack name (optional). Default: the Contentful **space name** (when using `--space-id`), else `Contentful Migration ` | +| `--invite-users` / `--no-invite-users` | Invite Contentful space members into the new stack with their mapped roles (with `--space-id`). **On by default**; `--no-invite-users` writes only the `users-mapping.json` report | +| `-o, --output` | Parent dir; bundle → `/bundle` | +| `-a, --affix` | Content-type UID prefix | +| `--branch` | Branch alias for branch-aware import | +| `-y, --yes` / `--no-yes` | Skip import confirmation prompts (default: yes) | +| `-v, --verbose` | Verbose logs (streams seed fallback output) | +| `-w, --workspace` | Manifest workspace (also where the exported JSON is saved) | + +The destination stack does **not** need to exist — it is created fresh. The detected master locale must be a valid Contentstack locale code. + +### `migrate:status` + +| Flag | Description | +|------|-------------| +| `-w, --workspace` | Workspace containing `migration-manifest.json` | + +--- + +## Workspace layout + +``` +migration-workspace/ +├── migration-manifest.json # progress (no secrets) +├── export.json # Contentful export +├── contentstack-import/ +│ └── bundle/ # import-ready Contentstack data +│ ├── content_types/ +│ ├── entries/ +│ ├── locales/ +│ ├── export-info.json +│ └── mapper.json +├── audit-reports/ # optional +└── audit-fix/ # optional +``` + +--- + +## Troubleshooting + +| Symptom | What to do | +|---------|----------------| +| `csdx not found` | `npm i -g @contentstack/cli` | +| `Not logged in` | `csdx auth:login` | +| `Invalid bundle` / missing `export-info.json` | Run `migrate:convert` first | +| `Set CONTENTFUL_MANAGEMENT_TOKEN` | Export token via env or flag | +| Contentful CLI fails | Install `contentful-cli` globally or ensure `npx` works | +| Import fails | Run audit + `csdx cm:stacks:audit:fix`; confirm **empty** stack | +| Wrong locales | Re-run `migrate:convert` with `--master-locale` | +| Plugin commands missing | `npm run build && csdx plugins:link .` from plugin root | +| Duplicate migrate plugins | `csdx plugins` — unlink old `cli-plugin-migrate-*` variants | + +--- + +## Development + +```bash +npm run build # tsc + assets + oclif manifest +npm test # vitest +npm run lint +``` + +Reference code lives in the parent workspace at [`../references/import-contentful-cli-main/`](../references/import-contentful-cli-main/) when `cli-plugin-migrate` sits beside a `references/` folder (e.g. `contentful-cursor` monorepo). Sample export: [`../references/contentful-export-*.json`](../references/). Unit fixture: [`test/fixtures/contentful-export.json`](./test/fixtures/contentful-export.json). + +### Documentation + +Full index: **[docs/README.md](./docs/README.md)** + +| Doc | Audience | Purpose | +|-----|----------|---------| +| [docs/getting-started.md](./docs/getting-started.md) | Teammates | Onboarding | +| [docs/expert-workflow.md](./docs/expert-workflow.md) | Teammates | End-to-end pipeline | +| [docs/limitations-and-scope.md](./docs/limitations-and-scope.md) | Teammates | Supported CMS, requirements | +| [docs/manifest-schema.md](./docs/manifest-schema.md) | Teammates | `migration-manifest.json` | +| [docs/repository-layout.md](./docs/repository-layout.md) | Teammates | Repo vs monorepo layout | +| [docs/phases/phase-5-manifest-and-review.md](./docs/phases/phase-5-manifest-and-review.md) | Teammates | Model review checklist | +| [docs/architecture.md](./docs/architecture.md) | Maintainers | Package layout | +| [docs/implementation-principles.md](./docs/implementation-principles.md) | Maintainers | Design rules | +| [docs/phases/](./docs/phases/) | Maintainers | Implementation specs | +| [CONTRIBUTING.md](./CONTRIBUTING.md) | Maintainers | Build, test, PRs | +| [AGENTS.md](./AGENTS.md) | Agents | Automation router | +| [CHANGELOG.md](./CHANGELOG.md) | All | Release notes | + +--- + +## Security notes + +- Prefer `CONTENTFUL_MANAGEMENT_TOKEN` in the environment; verbose logs **never** print the token. +- Do not commit `export.json` or migration workspaces if they contain sensitive content. +- Do not commit stack API keys or delivery tokens. +- `migration-manifest.json` stores only a **prefix** of the stack key after import (e.g. `blt1234…`). + +--- + +## License + +[MIT](./LICENSE) + +--- + +# Appendix — Running the whole migration (by hand) + +> This appendix is the repo-root walkthrough, included here so this plugin's +> README is self-contained. It explains the full end-to-end migration — the same +> `csdx migrate:*` commands documented above, placed in order with the +> surrounding setup, model-review, credentials, and website-conversion steps. +> Links are relative to this file (`cli-plugin-migrate/`). + +This repo contains tooling to migrate content from **Contentful** into +**Contentstack**. There are two ways to run a migration, both using the exact +same underlying commands: + +- **AI Migration Companion** — a skill that interviews you once, then runs the + whole pipeline for you, explaining each step. See + [migration-companion/README.md](../migration-companion/README.md). +- **By hand (this appendix)** — you run the same `csdx migrate:*` commands + yourself, in order. No AI required. + +This appendix is the **by-hand path**. It is a complete, self-contained +walkthrough: every command, every decision, and the model-review checklist are +inlined here. If you would rather be guided, use the companion skill — it does +exactly what is written below. + +> **Core principle: AI guides, tooling executes.** +> A migration is just a sequence of documented `csdx` commands. Nothing is +> hand-transformed or invented — the converter is a deterministic 1:1 mirror of +> your Contentful data. That is precisely why you can do the whole thing by hand: +> the companion has no secret sauce, only the commands below. + +--- + +## What you'll do (the 7 steps) + +| Step | Command / action | Produces | +|---|---|---| +| 1. Export | `csdx migrate:export` | `export.json` from your Contentful space | +| 2. Convert | `csdx migrate:convert` | A Contentstack import **bundle** | +| 3. Model review | Read the bundle (manual, read-only) | A findings list; maybe a re-convert | +| 4. Audit (+ fix) | `csdx migrate:audit` → `csdx cm:stacks:audit:fix` | A validation report | +| 5. Import | `csdx migrate:import` | Content live in an **empty** stack | +| 6. Delivery credentials | Contentstack UI (manual) | API key + delivery token for your app | +| 7. Website conversion | Update your app's SDK code | A working frontend on Contentstack | + +Steps 1–5 are CLI commands. Step 6 is a UI task. Step 7 is a separate frontend +effort, summarized at the end. + +--- + +## Prerequisites & one-time setup + +### 1. Install the tools + +```bash +node --version # must be 20+ +npm i -g @contentstack/cli # provides the `csdx` command +npm i -g contentful-cli # optional; export falls back to `npx -y contentful-cli` +``` + +### 2. Link the migrate plugin + +The `csdx migrate:*` commands come from the `cli-plugin-migrate` plugin in this +repo. Build and link it once: + +```bash +cd cli-plugin-migrate +npm install +npm run build +csdx plugins:link . +``` + +Verify the subcommands are available: + +```bash +csdx migrate --help # should list: export, convert, audit, import, status +``` + +If commands are missing, re-run `npm run build` and `csdx plugins:link .`. If you +see duplicates, run `csdx plugins` and unlink older `cli-plugin-migrate-*` +variants. After any plugin code change, build and link again. + +### 3. Log in and set your region + +Audit and import talk to your Contentstack stack, so you must be logged in **in +the right region**: + +```bash +csdx config:get:region # check current region +csdx config:set:region EU # only if your stack is not in the default (e.g. NA, EU, AU, Azure) +csdx auth:login # interactive (browser/SSO) +csdx auth:whoami # confirm you're logged in +``` + +Login is **region-specific**. If you switch region, log in again and re-run +`csdx auth:whoami`. Sessions can also expire mid-migration — re-check before +import even if an earlier check passed. + +### 4. Create the destination stack + +Import requires an **empty** Contentstack stack. Create one in the UI first +(a dedicated dev stack is recommended). The plugin does not create stacks. + +--- + +## Gather everything up front + +The companion collects every input in one pass before running anything. Do the +same by hand — having these ready means the rest is uninterrupted: + +| Input | Where it comes from | Used by | +|---|---|---| +| Workspace path | your choice; default `./migration-workspace` | all steps | +| Contentful space ID | Contentful UI / your records | Step 1 export | +| `CONTENTFUL_MANAGEMENT_TOKEN` | **environment variable only** | Step 1 export | +| Download assets / drafts / archived? | your call (default off) | Step 1 export | +| Master locale (e.g. `en-US`) | your destination model | Step 2 convert | +| Affix / UID prefix (optional) | naming convention | Step 2 convert | +| Destination stack API key (`blt…`) | Contentstack UI → Settings → Stack | Step 5 import | +| Is the stack empty? | confirm yourself — **gate for import** | Step 5 import | +| Branch alias (optional) | if you use branches | Step 5 import | + +**Handle the management token safely.** Put it in the environment — never paste +it into a command you share, a log, or a chat: + +```bash +export CONTENTFUL_MANAGEMENT_TOKEN="your-cma-token" +``` + +To generate one, you can log in with the Contentful CLI (`contentful login`), +which stores a token locally, or create a CMA token in the Contentful UI. + +> Use one **migration workspace** folder for the whole run. The plugin writes a +> `migration-manifest.json` there to track progress, so every command below +> points at the same `./migration-workspace`. + +--- + +## Step 1 — Export from Contentful + +**What it does:** pulls your Contentful space into a single `export.json` (plus +asset binaries if you ask for them). Reads from Contentful via the Contentful +CLI; writes into your workspace. **Success:** +`./migration-workspace/export.json` exists. + +```bash +csdx migrate:export \ + --legacy contentful \ + --space-id YOUR_SPACE_ID \ + --output ./migration-workspace +# optional: --download-assets --include-drafts --include-archived +``` + +Requires `CONTENTFUL_MANAGEMENT_TOKEN` in the environment (see above). + +> **Already have an export?** If you already have a Contentful export JSON (your +> own file, or a sample under `references/`), **skip this step** and point Step 2 +> at that file. + +Verify: + +```bash +ls -la ./migration-workspace/export.json +``` + +--- + +## Step 2 — Convert to a Contentstack bundle + +**What it does:** transforms the Contentful export into an import-ready +Contentstack **bundle** (content types, entries, locales, assets metadata, and a +`mapper.json` that records the source → Contentstack mapping). This is a +deterministic 1:1 port. **Success:** +`./migration-workspace/contentstack-import/bundle/` is populated. + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./migration-workspace/export.json \ + --output ./migration-workspace/contentstack-import \ + --master-locale en-US \ + --workspace ./migration-workspace +# optional: --affix YOUR_PREFIX +``` + +Verify: + +```bash +ls ./migration-workspace/contentstack-import/bundle/content_types/ +cat ./migration-workspace/contentstack-import/bundle/mapper.json +``` + +The only conversion knobs are `--master-locale` and `--affix`. Everything else +about the model is reviewed in Step 3. + +--- + +## Step 3 — Review the content model (read-only, manual) + +**What it does:** you read the generated schema and decide whether it's good to +import. This is **advisory** — the converter mirrors your source exactly, so the +only in-pipeline changes are `--affix` and `--master-locale` on a **re-run of +convert**. Everything else is a recommendation you apply **in Contentstack after +import**. + +> **Hard rule:** never hand-edit files in the bundle (`content_types/`, +> `entries/`, `locales/`, `mapper.json`). Editing the model means re-running +> `convert`, not editing JSON. Hand-edits break the 1:1 mapping that makes the +> migration verifiable. + +Read the schema: + +```bash +ls ./migration-workspace/contentstack-import/bundle/content_types/ +cat ./migration-workspace/contentstack-import/bundle/content_types/.json +cat ./migration-workspace/contentstack-import/bundle/mapper.json +``` + +Go through this checklist against the **actual** converted schema — flag, don't +fix: + +| Lens | What to look for | Action | +|---|---|---| +| Naming / affix | Unclear, channel-specific, or colliding content-type UIDs | **Fixable now** — re-run `convert --affix ` | +| Master locale | Wrong master, or fields localized that never need translation | **Fixable now** — re-run `convert --master-locale` | +| Global-field candidates | A nested, lifecycle-less field set reused across types (classic: `seo`, `address`, `social_links`) | Advisory — convert to a **global field** post-import | +| Reference depth | Reference chains deeper than ~2–3 hops | Advisory — flatten/denormalize post-import; watch query cost | +| Modular blocks | Blocks with very many options, or options never used | Advisory — split or trim post-import | +| JSON RTE | Filterable/queryable facts buried inside rich text | Advisory — promote to discrete fields post-import | +| Taxonomy / tags | Free-text fields that are really governed classification | Advisory — model as taxonomy (governed) or tags post-import | + +Write your findings in two buckets: + +- **Fixable now (re-run convert):** for each item, the type/field, the issue, and + the flag (`--affix` / `--master-locale`) that addresses it. If you accept any, + go back to Step 2, re-run `convert` with the adjusted flags, and re-review. +- **Advisory (apply in Contentstack after import):** record these for later — they + do **not** block audit or import. + +When the fixable-now bucket is empty (or you've re-converted), continue. + +--- + +## Step 4 — Audit (and fix) + +**What it does:** validates the bundle against Contentstack's import rules and +writes a report. Wraps the native `csdx cm:stacks:audit`. **Success:** the report +shows no blocking errors. + +```bash +csdx migrate:audit \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-reports \ + --workspace ./migration-workspace +``` + +Read the report under `--report-path` and translate it: errors block import; +warnings are usually safe but worth understanding. To remediate, run the native +fix command, then **re-audit into a fresh report directory** to confirm: + +```bash +csdx cm:stacks:audit:fix \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-fix + +csdx migrate:audit \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-verify \ + --workspace ./migration-workspace +``` + +Only proceed to import once the audit is clean (or the remaining items are +warnings you've consciously accepted). + +--- + +## Step 5 — Import into Contentstack + +**What it does:** pushes the bundle into your destination stack. Wraps the native +`csdx cm:stacks:import`. **Success:** content types, entries, locales, and assets +appear in the stack. + +> **The stack must be empty.** This is the one destructive, outward-facing step. +> Confirm the destination is empty before running. Re-check your session and +> region first — they can drift since setup: + +```bash +csdx auth:whoami # must be logged in +csdx config:get:region # must match the destination stack's region +``` + +Then import: + +```bash +csdx migrate:import \ + --stack-api-key bltYOUR_KEY \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --workspace ./migration-workspace \ + --yes +# optional: --branch ALIAS --module entries --skip-audit +``` + +`--yes` skips confirmation prompts (the default); use `--no-yes` if you want to +confirm interactively. After it completes, spot-check the stack in the UI. + +--- + +## Step 6 — Delivery credentials (manual UI step) + +**What it does:** gets the keys your application needs to read content. There is +no CLI command for this — it's done in the Contentstack UI. + +From your stack in the Contentstack UI, collect: + +- **Stack API key** (`blt…`) +- **Delivery token** (for published content) +- **Preview token** (for drafts / live preview, if you use it) +- **Region** (NA / EU / Azure / …) and **environment** name + +Set them in your application's environment, e.g.: + +```bash +CONTENTSTACK_API_KEY=blt... +CONTENTSTACK_DELIVERY_TOKEN=cs... +CONTENTSTACK_PREVIEW_TOKEN=cs... # if using live preview +CONTENTSTACK_REGION=EU +CONTENTSTACK_ENVIRONMENT=production +``` + +--- + +## Step 7 — Website / application conversion + +**What it does:** updates your frontend to read from Contentstack instead of +Contentful. This is a **separate effort** from the content migration above — the +content is now in Contentstack regardless of when you do this. + +The good news from porting the sample starter: the architecture maps almost 1:1 +(same file count, same env-var switch, same prop-injection pattern). The main +changes: + +- **Fetchers** — swap the `contentful` SDK for `@contentstack/delivery-sdk` + (`contentstack.stack({ apiKey, deliveryToken, environment, region })`) and + rewrite queries to the `stack.contentType(...).entry().query()...` style. +- **Reference resolution** — Contentstack uses **explicit** includes + (`.includeReference(['path.to.ref'])`) instead of Contentful's depth-based + `include: 10`. Sections modeled as **modular blocks** come back inline and need + no includes at all. +- **Live preview** — replace `@contentful/live-preview` hooks with + `@contentstack/live-preview-utils` (`ContentstackLivePreview.init()` + + `onEntryChange()`), which is more callback-driven (you re-fetch and set state). +- **Editable tags** — swap `data-contentful-*` for `data-cslp` via + `addEditableTags(...)` / `entry.$`. +- **Region** — must be set in the stack config or every call fails. + +Full piece-by-piece mapping and effort notes: +[docs/contentful-vs-contentstack-audit.md](../docs/contentful-vs-contentstack-audit.md). +A reference Contentful starter app lives in [cf-starter/](../cf-starter/). + +--- + +## Tracking progress & resuming + +The `migration-manifest.json` in your workspace is the single source of truth. +Every successful command updates it; you never edit it by hand. Check where you +are at any time: + +```bash +csdx migrate:status --workspace ./migration-workspace +cat ./migration-workspace/migration-manifest.json +``` + +This is also how you **resume**: the manifest tells you the last completed step, +so you just run the next command. Rough mapping from manifest state to next step: + +``` +no manifest / no source -> Step 1 export (or skip if you already have export.json) +source set, no convert -> Step 2 convert +convert set -> Step 3 model review -> Step 4 audit +audit clean -> Step 5 import +import.status = completed -> Step 6 credentials -> Step 7 website +``` + +The manifest records timestamps and paths only — **never** management tokens or +full stack API keys (it keeps just a short `blt…` prefix after import). + +--- + +## Going deeper + +- **Run it with AI instead:** [migration-companion/README.md](../migration-companion/README.md) + — the companion skill performs exactly this pipeline for you. +- **CLI plugin reference & internals:** this README (above) and + [docs/](./docs/). +- **Why this product exists:** [docs/PRD.md](../docs/PRD.md). +- **Website porting detail:** [docs/contentful-vs-contentstack-audit.md](../docs/contentful-vs-contentstack-audit.md). diff --git a/packages/contentstack-external-migrate/docs/README.md b/packages/contentstack-external-migrate/docs/README.md new file mode 100644 index 000000000..26d62ecd0 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/README.md @@ -0,0 +1,61 @@ +# Documentation index + +Start with the [README](../README.md) in the repo root for install, commands, and troubleshooting. Use this page to find everything else. + +## For teammates (migrations) + +| Document | Description | +|----------|-------------| +| [getting-started.md](./getting-started.md) | Install plugin, first convert, audit/import | +| [expert-workflow.md](./expert-workflow.md) | Full pipeline copy-paste (export → import) | +| [limitations-and-scope.md](./limitations-and-scope.md) | What is supported, requirements, expectations | +| [manifest-schema.md](./manifest-schema.md) | `migration-manifest.json` fields | +| [repository-layout.md](./repository-layout.md) | Repo vs monorepo, local workspaces | +| [phases/phase-5-manifest-and-review.md](./phases/phase-5-manifest-and-review.md) | Manual content model review checklist | + +## For maintainers (code changes) + +| Document | Description | +|----------|-------------| +| [architecture.md](./architecture.md) | Package layout, adapters, port map | +| [implementation-principles.md](./implementation-principles.md) | Reference port rules, spawn helpers, flags | +| [phases/](./phases/) | Per-command implementation specs (see [phases/README.md](./phases/README.md)) | +| [../CONTRIBUTING.md](../CONTRIBUTING.md) | Build, test, PR notes | +| [../AGENTS.md](../AGENTS.md) | Short guide for coding agents | + +## Commands at a glance + +| Runtime order | Command | Auth | +|---------------|---------|------| +| 1 | `migrate:export` | Contentful CMA token | +| 2 | `migrate:convert` | None | +| 3 | *(manual review)* | — | +| 4 | `migrate:audit` | `csdx auth:login` | +| 5 | `migrate:import` | `csdx auth:login` | +| — | `migrate:status` | None | + +Native equivalents: audit → `csdx cm:stacks:audit`; import → `csdx cm:stacks:import`; fix → `csdx cm:stacks:audit:fix`. + +## Design principles + +1. Every step runs without AI — `csdx migrate:*` only. +2. Single package — `@contentstack/cli-plugin-migrate`. +3. Do not reimplement stack audit/import — delegate to `csdx`. +4. Convert and import are **separate** commands (no `--stack` on convert). +5. Contentful export uses Contentful CLI (global or `npx`). + +## Phase specs (implementation history) + +Phases 0–5 are **complete**. Phase 6 (AI companion) is future work. + +| Phase | Doc | Delivers | +|-------|-----|----------| +| 0 | [phase-0-foundation.md](./phases/phase-0-foundation.md) | Plugin scaffold | +| 1 | [phase-1-convert.md](./phases/phase-1-convert.md) | `migrate:convert` | +| 2 | [phase-2-audit.md](./phases/phase-2-audit.md) | `migrate:audit` | +| 3 | [phase-3-import.md](./phases/phase-3-import.md) | `migrate:import` | +| 4 | [phase-4-export.md](./phases/phase-4-export.md) | `migrate:export` | +| 5 | [phase-5-manifest-and-review.md](./phases/phase-5-manifest-and-review.md) | `migrate:status` + review | +| 6 | [phase-6-ai-companion.md](./phases/phase-6-ai-companion.md) | Future | + +Build order in phase docs ≠ runtime order. Runtime order matches [expert-workflow.md](./expert-workflow.md). diff --git a/packages/contentstack-external-migrate/docs/architecture.md b/packages/contentstack-external-migrate/docs/architecture.md new file mode 100644 index 000000000..863cbf125 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/architecture.md @@ -0,0 +1,289 @@ +# Architecture + +## Implementation principles + +Before porting `references/import-contentful-cli-main`: + +- **Reuse its conversion code** in `src/services/contentful/` — do not copy Commander layout, auth-on-convert, or inline `--stack` import. +- **Command flags** come from `docs/phases/*.md` (PRD), declared with `@contentstack/cli-utilities` on oclif commands extending `@contentstack/cli-command`. +- **Contentful export** shells out via `src/lib/contentful-cli-spawn.ts`: global `contentful` if on PATH, else `npx -y contentful-cli`. +- **Audit/import** shell out via `src/lib/csdx-spawn.ts` to native `csdx cm:stacks:*`. + +Full detail: [implementation-principles.md](./implementation-principles.md). + +## Single package + +One `csdx` plugin — no monorepo, no separate core library. + +Future Sanity and Storyblok support is added as adapter folders inside the same package, not as new npm workspaces. + +``` +cli-plugin-migrate/ +├── src/ +│ ├── commands/migrate/ # Thin oclif commands +│ │ ├── convert.ts +│ │ ├── export.ts +│ │ ├── audit.ts +│ │ ├── import.ts +│ │ └── status.ts # Phase 5 +│ ├── adapters/ # Per legacy CMS +│ │ ├── types.ts # LegacyAdapter interface +│ │ ├── registry.ts # legacy flag → adapter +│ │ └── contentful/ # Phase 1 + 4 +│ │ ├── convert.ts # Orchestrator (from reference) +│ │ ├── export.ts # Phase 4 +│ │ └── validator.ts +│ ├── services/contentful/ # Ported reference engine +│ │ ├── contentful.service.ts +│ │ ├── content-type-creator.ts +│ │ ├── migration-contentful/ +│ │ ├── jsonRTE.ts +│ │ ├── taxonomy.service.ts +│ │ ├── constants.ts +│ │ ├── mapper/write.ts +│ │ └── prompts/master-locale.ts +│ ├── lib/ +│ │ ├── csdx-spawn.ts # Spawn native csdx for audit/import +│ │ ├── contentful-cli-spawn.ts # Global contentful or npx contentful-cli +│ │ ├── bundle.ts # assertBundleDir, paths +│ │ ├── manifest.ts # Phase 5 +│ │ └── log.ts # Stage progress output +│ └── index.ts +├── test/ +│ ├── commands/ +│ ├── adapters/contentful/ +│ └── fixtures/ +├── scripts/copy-assets.js +├── package.json +├── tsconfig.json +├── docs/ +└── README.md +``` + +Package name: `@contentstack/cli-plugin-migrate` + +--- + +## Adapter pattern + +Commands stay thin. They parse flags, resolve the adapter from `--legacy`, and delegate. + +```typescript +// src/adapters/types.ts + +export interface ExportOptions { + outputDir: string; + downloadAssets?: boolean; + includeDrafts?: boolean; + includeArchived?: boolean; + verbose?: boolean; + // Contentful-specific — extend per adapter or use adapter-specific options bag + spaceId?: string; + managementToken?: string; +} + +export interface ExportResult { + exportFile: string; + assetsDir?: string; +} + +export interface ConvertOptions { + input: string; + outputDir: string; + affix?: string; + masterLocale?: string; + verbose?: boolean; +} + +export interface ConvertResult { + bundleDir: string; + mapperPath: string; + stats: { locales: number; contentTypes: number; entries: number }; +} + +export interface LegacyAdapter { + readonly legacy: string; + export(options: ExportOptions): Promise; + convert(options: ConvertOptions): Promise; +} +``` + +```typescript +// src/adapters/registry.ts + +import { contentfulAdapter } from './contentful'; + +const adapters = { contentful: contentfulAdapter }; + +export function getAdapter(legacy: string): LegacyAdapter { + const adapter = adapters[legacy as keyof typeof adapters]; + if (!adapter) throw new Error(`Unsupported legacy CMS: ${legacy}. Supported: ${Object.keys(adapters).join(', ')}`); + return adapter; +} +``` + +Adding Sanity or Storyblok later = new folder + one line in the registry. + +--- + +## Command → adapter mapping + +| Command | Delegates to | Native csdx | +|---------|--------------|-------------| +| `migrate:export` | `adapter.export()` | — | +| `migrate:convert` | `adapter.convert()` | — | +| `migrate:audit` | `lib/csdx-spawn` | `csdx cm:stacks:audit` | +| `migrate:import` | `lib/csdx-spawn` | `csdx cm:stacks:import` | +| `migrate:status` | `lib/manifest` | — | + +Audit and import do **not** go through legacy adapters — they operate on the Contentstack bundle regardless of source CMS. + +--- + +## Reference port map + +From `references/import-contentful-cli-main/`: + +| Reference | Destination | +|-----------|-------------| +| `src/lib/contentful.service.ts` | `src/services/contentful/contentful.service.ts` | +| `src/lib/content-type-creator.ts` | `src/services/contentful/content-type-creator.ts` | +| `src/lib/validator.ts` | `src/adapters/contentful/validator.ts` | +| `src/lib/migration-contentful/**` | `src/services/contentful/migration-contentful/**` | +| `src/lib/contentful/jsonRTE.ts` | `src/services/contentful/jsonRTE.ts` | +| `src/lib/contentful/taxonomy.service.ts` | `src/services/contentful/taxonomy.service.ts` | +| `src/lib/constants.ts` | `src/services/contentful/constants.ts` | +| `src/lib/types.ts` | `src/services/contentful/types.ts` | +| `src/lib/utils/**` | `src/services/contentful/utils/**` | +| `src/lib/*.json` | `src/services/contentful/assets/` | +| `src/mapper/write.ts` | `src/services/contentful/mapper/write.ts` | +| `src/commands/contentful.ts` | `src/adapters/contentful/convert.ts` | +| `src/ui/prompt.ts` | `src/services/contentful/prompts/master-locale.ts` | +| `tests/fixtures/contentful-export.json` | `test/fixtures/` | +| `scripts/copy-assets.js` | `scripts/copy-assets.js` | + +**Not ported:** + +| Reference | Reason | +|-----------|--------| +| `src/index.ts` | oclif commands replace it | +| `src/auth/session.ts` | Auth only for audit/import via `@contentstack/cli-command` | +| `src/ui/render.ts` | `src/lib/log.ts` + oclif `this.log()` | +| `runCsdxImport()` | `migrate:import` command (Phase 3) | +| `--stack` flag | Split into separate import step | + +--- + +## Bundle output contract + +Convert writes `/bundle/` compatible with native csdx audit and import: + +``` +bundle/ +├── content_types/ +├── global_fields/ +├── locales/ +├── entries/// +├── assets/ +├── environments/ +├── reference/ +├── rteReference/ +├── taxonomies/ +├── mapper.json +└── export-info.json +``` + +Default: `--output ./contentstack-import` → `./contentstack-import/bundle/` + +--- + +## Refactor during port + +The reference binds output paths via `process.env.CLI_OUT_DIR` at import time. Fix this: + +1. Pass `outputDir` through `ConvertOptions` +2. Initialize path config in a factory before loading services +3. No import-time env side effects — keeps vitest clean + +--- + +## csdx primitives (do not reimplement) + +| Operation | Command | +|-----------|---------| +| Audit | `csdx cm:stacks:audit --data-dir ` | +| Audit fix | `csdx cm:stacks:audit:fix --data-dir ` | +| Import | `csdx cm:stacks:import --stack-api-key --data-dir --yes` | + +Import runs audit-fix by default unless `--skip-audit`. + +Docs: [Audit plugin](https://www.contentstack.com/docs/developers/cli/audit-plugin), [Import content](https://www.contentstack.com/docs/developers/cli/import-content-using-the-cli). + +--- + +## Dependencies + +Single `package.json`: + +```json +{ + "dependencies": { + "@contentstack/cli-command": "^1.6.1", + "@contentstack/cli-utilities": "^1.14.4", + "@contentstack/json-rte-serializer": "^2.0.13", + "@oclif/core": "^4.8.0", + "axios": "^1.15.2", + "chalk": "^4.1.2", + "jsdom": "^23.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "p-limit": "^3.1.0", + "uuid": "^14.0.0" + }, + "devDependencies": { + "@oclif/test": "^3.0.0", + "@types/node": "^20.12.12", + "typescript": "^5.3.3", + "vitest": "^4.0.18" + } +} +``` + +Convert does not require `@contentstack/cli-*` at runtime — only audit/import commands use the base class session. + +--- + +## Future adapters (not in initial scope) + +Research confirms both platforms can export content, but neither matches Contentful's single JSON export. Each needs a dedicated adapter — little code shared with Contentful convert. + +### Sanity (future) + +| Aspect | Detail | +|--------|--------| +| Export | `sanity dataset export production backup.tar.gz` — NDJSON + assets in tarball | +| Schema | **Not** in dataset export; requires Studio repo + `sanity schemas extract` (experimental) | +| Convert | Map `_type` documents, portable text, asset refs → Contentstack bundle | +| Docs | [Dataset CLI](https://www.sanity.io/docs/cli-reference/cli-datasets), [Schema migrations](https://www.sanity.io/docs/content-lake/schema-and-content-migrations) | + +### Storyblok (future) + +| Aspect | Detail | +|--------|--------| +| Export | Multiple CLI pulls: `components pull`, `stories pull`, `assets pull`, `languages pull`, `datasources pull` | +| Unified export | No — v4 removed `sync`; full backup = orchestrate several commands or use CLI v3 | +| Convert | Map bloks/components → content types + modular blocks | +| Docs | [Storyblok CLI](https://www.storyblok.com/docs/libraries/storyblok-cli), [CLI v4 blog](https://www.storyblok.com/mp/introducing-storyblok-cli-v4) | + +Implement as `src/adapters/sanity/` and `src/adapters/storyblok/` when prioritized — no architectural change required. + +--- + +## Testing + +| Layer | Tool | Target | +|-------|------|--------| +| Convert | vitest | `test/adapters/contentful/convert.test.ts` | +| Commands | vitest + `@oclif/test` | Flag parsing, spawn args | +| Fixtures | vitest | `test/fixtures/contentful-export.json` + repo `references/contentful-export-*.json` | +| E2E | manual | convert → audit → import on empty dev stack | diff --git a/packages/contentstack-external-migrate/docs/expert-workflow.md b/packages/contentstack-external-migrate/docs/expert-workflow.md new file mode 100644 index 000000000..85232de9a --- /dev/null +++ b/packages/contentstack-external-migrate/docs/expert-workflow.md @@ -0,0 +1,147 @@ +# Expert workflow — no AI required + +Complete Contentful → Contentstack migration using only CLI commands. + +## Prerequisites + +```bash +node --version # 20+ +npm i -g @contentstack/cli +csdx auth:login # audit + import only + +# Phase 4+: +export CONTENTFUL_MANAGEMENT_TOKEN="..." +``` + +Install the plugin (after Phase 0): + +```bash +cd cli-plugin-migrate +npm install && npm run build +csdx plugins:link . +``` + +--- + +## Full pipeline + +### 1. Export (Phase 4) + +```bash +csdx migrate:export \ + --legacy contentful \ + --space-id YOUR_SPACE_ID \ + --output ./migration-workspace +``` + +Skip if you already have a Contentful export JSON (your own file, or `../references/contentful-export-*.json` in a monorepo). + +### 2. Convert (Phase 1) + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./migration-workspace/export.json \ + --output ./migration-workspace/contentstack-import \ + --master-locale en-US +``` + +Output: `./migration-workspace/contentstack-import/bundle/` + +### 3. Review content model (Phase 5 — manual) + +```bash +cat ./migration-workspace/contentstack-import/bundle/mapper.json +ls ./migration-workspace/contentstack-import/bundle/content_types/ +``` + +Checklist: [phase-5-manifest-and-review.md](./phases/phase-5-manifest-and-review.md) + +### 4. Audit (Phase 2) + +```bash +csdx migrate:audit \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --report-path ./migration-workspace/audit-reports +``` + +Fix: + +```bash +csdx cm:stacks:audit:fix \ + --data-dir ./migration-workspace/contentstack-import/bundle +``` + +### 5. Import (Phase 3) + +Empty destination stack required. + +```bash +csdx migrate:import \ + --stack-api-key bltYOUR_KEY \ + --data-dir ./migration-workspace/contentstack-import/bundle \ + --yes +``` + +### 6. Delivery credentials (manual) + +From Contentstack UI: Stack API Key + Delivery Token → app env vars. + +### 7. Update application (future) + +Separate Website Migration Skill — see Phase 6. + +--- + +## Quick start (convert only) + +**This repo only** (built-in fixture): + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./test/fixtures/contentful-export.json \ + --output ./contentstack-import \ + --master-locale en-US +``` + +**Monorepo** (large sample export): + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json \ + --output ./contentstack-import \ + --master-locale en-US +``` + +--- + +## Check progress (Phase 5) + +```bash +csdx migrate:status --workspace ./migration-workspace +``` + +--- + +## Native csdx equivalents + +| Our command | Native | +|-------------|--------| +| `migrate:audit` | `csdx cm:stacks:audit` | +| `migrate:import` | `csdx cm:stacks:import` | +| `migrate:convert` | No native equivalent | + +--- + +## Troubleshooting + +| Symptom | Fix | +|---------|-----| +| `csdx not found` | `npm i -g @contentstack/cli` | +| `Not logged in` | `csdx auth:login` | +| Invalid bundle | Run `migrate:convert` first | +| Import fails | Audit + audit:fix; verify empty stack | +| Wrong master locale | Re-run convert with `--master-locale` | +| Plugin missing | `csdx plugins:link .` from project root | diff --git a/packages/contentstack-external-migrate/docs/getting-started.md b/packages/contentstack-external-migrate/docs/getting-started.md new file mode 100644 index 000000000..1c564afcc --- /dev/null +++ b/packages/contentstack-external-migrate/docs/getting-started.md @@ -0,0 +1,96 @@ +# Getting started + +Onboarding guide for teammates using `csdx migrate`. For the full command reference, see [README.md](../README.md). + +## 1. Install tools + +```bash +node --version # must be 20+ +npm i -g @contentstack/cli +# optional for export: +npm i -g contentful-cli +``` + +## 2. Install this plugin + +Clone this repository, then from the repo root: + +```bash +npm install +npm run build +csdx plugins:link . +csdx migrate --help +``` + +You should see subcommands: `export`, `convert`, `audit`, `import`, `status`. + +If commands are missing, run `npm run build` again and re-link. Check `csdx plugins` for duplicate migrate plugins and unlink old ones. + +## 3. Try convert (no Contentful account) + +Uses the built-in test fixture only — works with **this repo alone** (no parent `references/` folder): + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./test/fixtures/contentful-export.json \ + --output ./contentstack-import \ + --master-locale en-US +``` + +Inspect output: + +```bash +ls ./contentstack-import/bundle/content_types/ +cat ./contentstack-import/bundle/mapper.json +``` + +## 4. Audit and import (needs Contentstack) + +```bash +csdx auth:login + +csdx migrate:audit \ + -d ./contentstack-import/bundle \ + --report-path ./audit-reports + +# Empty destination stack required: +csdx migrate:import \ + -k YOUR_STACK_API_KEY \ + -d ./contentstack-import/bundle \ + -y +``` + +## 5. Full production-style run + +Use a dedicated workspace and manifest tracking — step-by-step: [expert-workflow.md](./expert-workflow.md). + +Summary: + +1. `migrate:export` (needs `CONTENTFUL_MANAGEMENT_TOKEN` + space ID), **or** use an existing Contentful export JSON +2. `migrate:convert` +3. **Manual review** of `bundle/content_types/` — [phase-5-manifest-and-review.md](./phases/phase-5-manifest-and-review.md) +4. `migrate:audit` → optional `csdx cm:stacks:audit:fix` +5. `migrate:import` +6. Delivery tokens in Contentstack UI + +Check progress anytime: + +```bash +csdx migrate:status --workspace ./migration-workspace +``` + +## Repository layouts + +| Layout | Sample export path | +|--------|-------------------| +| **This repo only** | `./test/fixtures/contentful-export.json` or your own `export.json` | +| **Monorepo** (`cli-plugin-migrate` next to `references/`) | `../references/contentful-export-*.json` | + +Details: [repository-layout.md](./repository-layout.md). + +## What to read next + +- [limitations-and-scope.md](./limitations-and-scope.md) — supported CMS, stack requirements, validation expectations +- [manifest-schema.md](./manifest-schema.md) — `migration-manifest.json` fields +- [expert-workflow.md](./expert-workflow.md) — complete copy-paste workflow diff --git a/packages/contentstack-external-migrate/docs/implementation-principles.md b/packages/contentstack-external-migrate/docs/implementation-principles.md new file mode 100644 index 000000000..794bab435 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/implementation-principles.md @@ -0,0 +1,62 @@ +# Implementation principles + +Guidance for porting the reference CLI into `@contentstack/cli-plugin-migrate`. + +## 1. Reuse reference code, not its architecture + +`references/import-contentful-cli-main` is a **standalone Commander CLI** (auth session, single `contentful` command, inline `--stack` import). Do not replicate that shape. + +| Reference | Plugin approach | +|-----------|-----------------| +| Commander + `src/index.ts` | oclif commands under `src/commands/migrate/` | +| `runContentful()` monolith | Thin command → `getAdapter(legacy)` → adapter | +| `process.env.CLI_OUT_DIR` at import | `initContentfulMigrateConfig({ outputDir })` before loading services | +| `getSession()` / Contentstack auth on convert | **No** `csdx auth` on convert or export | +| `runCsdxImport()` inside convert | **`migrate:import`** only (Phase 3) | +| `--stack` on one command | `--stack-api-key` on `migrate:import` per PRD | + +**Port:** conversion engine files into `src/services/contentful/` and orchestration into `src/adapters/contentful/`. **Delete** reference-only layers (auth, render UI, bundled import). + +## 2. Follow csdx plugin rules (vibe-docs) + +- Extend `Command` from `@contentstack/cli-command` (not raw `@oclif/core`). +- Declare flags with `flags` from `@contentstack/cli-utilities`. +- Namespace: `migrate:convert`, `migrate:export`, etc. +- Commands stay thin; business logic in adapters + `src/services/`. +- Audit/import: spawn native `csdx` via `src/lib/csdx-spawn.ts` — do not reimplement stack audit/import. +- Region/auth: use base class helpers only where a command needs Contentstack (`migrate:audit`, `migrate:import`). Never hardcode CMA hosts. + +See `.agents/skills/contentstack-vibe-docs/references/extensions/cli-plugins/`. + +## 3. Options come from the PRD (phase docs), not the reference CLI + +Flag names, defaults, and required fields are defined in `docs/phases/phase-*.md` and `docs/expert-workflow.md`. Do not copy reference `Config` or Commander option names unless they match the PRD. + +Examples: + +- `migrate:convert`: `--legacy`, `--input`, `--output`, `--master-locale`, `--affix`, `--verbose` +- `migrate:export`: `--legacy`, `--space-id`, `--management-token` (prefer `CONTENTFUL_MANAGEMENT_TOKEN`), `--output`, asset/draft flags +- `migrate:import`: `--stack-api-key`, `--data-dir`, `--yes`, `--skip-audit` — **no** inline stack on convert + +Interactive mode: flags override prompts; prompts only when a required flag is missing (CI-safe). + +## 4. Contentful export: real CLI if installed, else `npx` + +Phase 4 export shells out to **Contentful CLI**, not a reimplemented CMA export (unless we add Option B later). + +Resolution order (`src/lib/contentful-cli-spawn.ts`): + +1. If `contentful` is on `PATH` and responds (`contentful --version`), run `contentful `. +2. Otherwise run `npx -y contentful-cli ` (no global install required). + +Never log `--management-token` or env token values. + +## 5. Native csdx for Contentstack operations + +| Step | Mechanism | +|------|-----------| +| Audit | `csdx cm:stacks:audit` via `csdx-spawn.ts` | +| Import | `csdx cm:stacks:import` via `csdx-spawn.ts` | +| Convert | In-process port of reference engine | + +Use global `csdx` when installed (`ENOENT` → clear install message). diff --git a/packages/contentstack-external-migrate/docs/limitations-and-scope.md b/packages/contentstack-external-migrate/docs/limitations-and-scope.md new file mode 100644 index 000000000..5d622fd7c --- /dev/null +++ b/packages/contentstack-external-migrate/docs/limitations-and-scope.md @@ -0,0 +1,58 @@ +# Limitations and scope + +Set expectations before running migrations for customers or production stacks. + +## Supported today + +| Area | Support | +|------|---------| +| Source CMS | **Contentful** only (`--legacy contentful`) | +| Destination | **Contentstack** via `csdx cm:stacks:import` | +| Export | Contentful CLI (`contentful` or `npx -y contentful-cli`) | +| Convert | In-plugin port of reference conversion engine | +| Audit / import | Native `csdx` stack commands | +| Locales | Configurable master locale; re-convert to fix | +| Assets | Exported/transformed; large spaces may need `--download-assets` on export | + +## Not supported (v0.1) + +| Area | Notes | +|------|------| +| Sanity, Storyblok, other CMS | Future adapters — see [architecture.md](./architecture.md) | +| `migrate:export` for non-Contentful | Not implemented | +| Inline import during convert | Use `migrate:import` separately | +| Stack creation | Create empty stack in UI first | +| Delivery token setup | Manual after import | +| Website / frontend code migration | Out of scope — separate effort | +| AI orchestration | Phase 6 / optional future | +| npm-published plugin install | Use `csdx plugins:link .` from clone | + +## Operational requirements + +1. **Empty destination stack** for import (recommended dev stack). +2. **`csdx auth:login`** before audit and import. +3. **Manual content model review** after convert, before audit/import — see [phase-5-manifest-and-review.md](./phases/phase-5-manifest-and-review.md). +4. **Audit before import** — import can run audit-fix internally; still review reports for real migrations. + +## Validation expectations + +- Unit tests cover convert on fixtures, flag mapping, manifest I/O, and spawn helpers. +- **True validation** of field-level Contentstack shape is **audit + import on your stack**, not tests alone. +- Re-run `migrate:convert` with `--master-locale` or `--affix` if model naming is wrong; edit `bundle/content_types/` only with care (then re-audit). + +## Security + +- Use `CONTENTFUL_MANAGEMENT_TOKEN` via environment variable when possible. +- Do not commit `export.json`, migration workspaces, or API keys. +- Manifest stores only non-secret metadata. + +## Native command mapping + +| Plugin | Under the hood | +|--------|----------------| +| `migrate:audit` | `csdx cm:stacks:audit` | +| `migrate:import` | `csdx cm:stacks:import` | +| `migrate:convert` | No native equivalent | +| `migrate:export` | `contentful space export` | + +Fix workflow: `csdx cm:stacks:audit:fix` (not wrapped; use directly). diff --git a/packages/contentstack-external-migrate/docs/manifest-schema.md b/packages/contentstack-external-migrate/docs/manifest-schema.md new file mode 100644 index 000000000..951a6b543 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/manifest-schema.md @@ -0,0 +1,89 @@ +# Migration manifest schema + +File: **`migration-manifest.json`** at the migration workspace root. + +Written/updated by `migrate:export`, `migrate:convert`, `migrate:audit`, and `migrate:import` on success. Read by `migrate:status`. + +## Security + +**Never stored in the manifest:** + +- Contentful management tokens +- Delivery tokens +- Full stack API keys (only a short prefix after import, e.g. `blt1234…`) + +## Schema (v1) + +```json +{ + "version": 1, + "legacy": "contentful", + "workspace": "./migration-workspace", + "source": { + "spaceId": "10897132", + "exportedAt": "2026-06-03T09:00:00.000Z", + "exportFile": "export.json" + }, + "convert": { + "completedAt": "2026-06-03T09:15:00.000Z", + "bundleDir": "contentstack-import/bundle", + "masterLocale": "en-US", + "affix": "", + "stats": { + "locales": 2, + "contentTypes": 16, + "entries": 1204 + } + }, + "audit": { + "lastRunAt": "2026-06-03T09:20:00.000Z", + "reportPath": "audit-reports" + }, + "import": { + "completedAt": "2026-06-03T10:00:00.000Z", + "stackApiKeyPrefix": "blt1234…", + "status": "completed" + } +} +``` + +Paths (`exportFile`, `bundleDir`, `reportPath`) are **relative to the workspace root**. + +## Fields + +| Section | Field | Set by | Description | +|---------|-------|--------|-------------| +| root | `version` | all | Always `1` | +| root | `legacy` | export/convert | Source CMS (`contentful`) | +| root | `workspace` | all | Display path to workspace | +| `source` | `spaceId` | export | Contentful space ID | +| `source` | `exportedAt` | export | ISO timestamp | +| `source` | `exportFile` | export | Relative path to export JSON | +| `convert` | `completedAt` | convert | ISO timestamp | +| `convert` | `bundleDir` | convert, import | Relative path to bundle | +| `convert` | `masterLocale` | convert | Master locale used | +| `convert` | `affix` | convert | UID prefix if any | +| `convert` | `stats` | convert | `locales`, `contentTypes`, `entries` counts | +| `audit` | `lastRunAt` | audit | ISO timestamp | +| `audit` | `reportPath` | audit | Relative report directory | +| `import` | `completedAt` | import | ISO timestamp on success | +| `import` | `stackApiKeyPrefix` | import | First 7 chars + `…` | +| `import` | `status` | import | `completed` (or pending before run) | + +## Workspace inference + +Commands accept optional `--workspace` / `-w`. If omitted, the plugin infers the workspace from: + +- Existing `migration-manifest.json` (walk up from `--data-dir` or `--input`) +- `--output` (e.g. `contentstack-import` → parent folder) +- Default: `./migration-workspace` for `migrate:status` + +Implementation: `src/lib/manifest.ts`. + +## Example + +```bash +csdx migrate:status --workspace ./migration-workspace +``` + +Prints a checklist and suggests the next command. diff --git a/packages/contentstack-external-migrate/docs/phases/README.md b/packages/contentstack-external-migrate/docs/phases/README.md new file mode 100644 index 000000000..f53f20794 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/README.md @@ -0,0 +1,19 @@ +# Phase implementation specs + +These documents are **maintainer specs** from building the plugin: scope, flags, acceptance criteria, and file paths. They are accurate for v0.1 but written during implementation. + +**Teammates running migrations** should use: + +- [../getting-started.md](../getting-started.md) +- [../expert-workflow.md](../expert-workflow.md) +- [../../README.md](../../README.md) + +| Phase | Status | Command | +|-------|--------|---------| +| [0 — Foundation](./phase-0-foundation.md) | Done | scaffold | +| [1 — Convert](./phase-1-convert.md) | Done | `migrate:convert` | +| [2 — Audit](./phase-2-audit.md) | Done | `migrate:audit` | +| [3 — Import](./phase-3-import.md) | Done | `migrate:import` | +| [4 — Export](./phase-4-export.md) | Done | `migrate:export` | +| [5 — Manifest & review](./phase-5-manifest-and-review.md) | Done | `migrate:status` | +| [6 — AI companion](./phase-6-ai-companion.md) | Future | — | diff --git a/packages/contentstack-external-migrate/docs/phases/phase-0-foundation.md b/packages/contentstack-external-migrate/docs/phases/phase-0-foundation.md new file mode 100644 index 000000000..649947a98 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-0-foundation.md @@ -0,0 +1,203 @@ +# Phase 0 — Foundation + +**Goal:** Scaffold a single-package `csdx` plugin with stub commands and a working dev link. + +**Delivers:** `csdx plugins:link .` → `csdx migrate --help` lists all subcommands. + +--- + +## Scope + +### In scope + +- Single npm package `@contentstack/cli-plugin-migrate` +- oclif plugin structure per vibe-docs CLI plugin guide +- Stub commands for all migration steps +- Build, test, link workflow +- Folder skeleton for adapters and services + +### Out of scope + +- Conversion, export, audit, or import logic +- npm publish +- CI beyond `npm test` + +--- + +## Target `package.json` + +```json +{ + "name": "@contentstack/cli-plugin-migrate", + "version": "0.1.0", + "description": "Contentful → Contentstack migration plugin for csdx", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": ["/lib", "/oclif.manifest.json"], + "oclif": { + "commands": "./lib/commands", + "bin": "csdx", + "plugins": [] + }, + "scripts": { + "build": "tsc && node scripts/copy-assets.js && oclif manifest", + "test": "vitest run", + "lint": "eslint . --ext .ts" + }, + "dependencies": { + "@contentstack/cli-command": "^1.6.1", + "@contentstack/cli-utilities": "^1.14.4", + "@oclif/core": "^4.8.0" + }, + "devDependencies": { + "@oclif/test": "^3.0.0", + "@types/node": "^20.12.12", + "typescript": "^5.3.3", + "vitest": "^4.0.18" + }, + "engines": { "node": ">=20.0.0" } +} +``` + +Bootstrap alternative: + +```bash +csdx plugins:create +# name: cli-plugin-migrate +# command namespace: migrate +``` + +Then adjust `package.json` name to `@contentstack/cli-plugin-migrate`. + +--- + +## Folder skeleton + +Create empty dirs with placeholder exports: + +``` +src/ +├── commands/migrate/ +│ ├── convert.ts +│ ├── export.ts +│ ├── audit.ts +│ ├── import.ts +│ └── status.ts +├── adapters/ +│ ├── types.ts +│ ├── registry.ts +│ └── contentful/index.ts +├── services/contentful/.gitkeep +├── lib/ +│ ├── csdx-spawn.ts +│ ├── bundle.ts +│ └── log.ts +└── index.ts +``` + +### Stub command pattern + +```typescript +import { Command } from '@contentstack/cli-command'; + +export default class MigrateConvert extends Command { + static description = 'Convert a legacy CMS export to a Contentstack import bundle'; + + async run(): Promise { + this.log('Not implemented yet — see docs/phases/phase-1-convert.md'); + } +} +``` + +Repeat for `export` (Phase 4), `audit` (Phase 2), `import` (Phase 3), `status` (Phase 5). + +### Adapter registry stub + +```typescript +// src/adapters/registry.ts +export function getAdapter(legacy: string) { + throw new Error(`Adapter "${legacy}" not implemented yet`); +} +``` + +--- + +## `tsconfig.json` + +```json +{ + "compilerOptions": { + "target": "ES2022", + "module": "commonjs", + "lib": ["ES2022"], + "declaration": true, + "outDir": "./lib", + "rootDir": "./src", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "resolveJsonModule": true, + "moduleResolution": "node" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "lib", "test"] +} +``` + +--- + +## Dev workflow + +```bash +cd cli-plugin-migrate +npm install +npm run build +csdx plugins:link . +csdx plugins:list +csdx migrate --help +``` + +After code changes: + +```bash +npm run build +# linked plugin picks up lib/ changes automatically +``` + +Unlink when done: + +```bash +csdx plugins:unlink cli-plugin-migrate +``` + +--- + +## Acceptance criteria + +- [ ] `npm run build` succeeds and generates `oclif.manifest.json` +- [ ] `csdx plugins:link .` registers the plugin +- [ ] `csdx migrate --help` lists: convert, export, audit, import, status +- [ ] Each subcommand `--help` renders without error +- [ ] `npm test` runs (smoke test OK) + +--- + +## Manual test script + +```bash +cd cli-plugin-migrate +npm install && npm run build +csdx plugins:link . +csdx migrate --help +csdx migrate:convert --help +csdx migrate:audit --help +csdx migrate:import --help +``` + +--- + +## Notes + +- Node 20+ (vibe-docs CLI plugin requirement) +- Global `@contentstack/cli` required for `csdx plugins:link` +- Package lives at repo root `cli-plugin-migrate/` — not nested under `packages/` diff --git a/packages/contentstack-external-migrate/docs/phases/phase-1-convert.md b/packages/contentstack-external-migrate/docs/phases/phase-1-convert.md new file mode 100644 index 000000000..6afc020ed --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-1-convert.md @@ -0,0 +1,220 @@ +# Phase 1 — Convert + +**Goal:** `csdx migrate:convert` transforms a Contentful export JSON into a Contentstack import bundle. + +**Delivers:** Core migration value — fully offline, no Contentstack credentials. + +--- + +## Scope + +### In scope + +- Port conversion engine from `references/import-contentful-cli-main` +- Contentful adapter: `src/adapters/contentful/convert.ts` +- Service layer: `src/services/contentful/**` +- `csdx migrate:convert` with flags + interactive prompts +- Vitest tests against fixtures + +### Out of scope + +- Export (Phase 4) +- Audit / import (Phases 2–3) +- `--stack` inline push from reference +- csdx auth on convert (reference had it; we drop it) + +--- + +## Command interface + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ./export.json \ + --output ./contentstack-import \ + [--master-locale en-US] \ + [--affix prj_] \ + [--verbose] +``` + +| Flag | Short | Required | Default | Description | +|------|-------|----------|---------|-------------| +| `--legacy` | — | yes | — | `contentful` (only option in this phase) | +| `--input` | `-i` | yes* | — | Contentful export JSON path | +| `--output` | `-o` | no | `./contentstack-import` | Parent dir; bundle at `/bundle` | +| `--master-locale` | `-m` | no | prompt | Destination master locale | +| `--affix` | `-a` | no | `""` | Content-type UID prefix | +| `--verbose` | `-v` | no | off | Underlying logs | + +*Omit `--input` for interactive mode. + +--- + +## Implementation steps + +### 1. Port reference files + +See [architecture port map](../architecture.md#reference-port-map). Copy into `src/services/contentful/` and `src/adapters/contentful/`. + +Build step copies JSON assets: + +```bash +# scripts/copy-assets.js — mirror reference script, target lib/services/contentful/assets/ +``` + +### 2. Refactor `CLI_OUT_DIR` + +Before porting `constants.ts`, introduce runtime config: + +```typescript +// src/services/contentful/config.ts +export interface ContentfulMigrateConfig { + outputDir: string; + verbose: boolean; +} + +let activeConfig: ContentfulMigrateConfig | null = null; + +export function initContentfulMigrateConfig(cfg: ContentfulMigrateConfig): void { + activeConfig = cfg; +} + +export function getOutputDir(): string { + if (!activeConfig) throw new Error('Contentful migrate config not initialized'); + return activeConfig.outputDir; +} +``` + +Replace `process.env.CLI_OUT_DIR` reads in `constants.ts` with `getOutputDir()`. + +### 3. Contentful adapter + +Read [implementation-principles.md](../implementation-principles.md) first — port logic from reference `runContentful()`, not the Commander/auth/import shell. + +`src/adapters/contentful/convert.ts` — extract orchestration from reference `src/commands/contentful.ts`: + +| Reference stage | Keep? | +|-----------------|-------| +| auth | **Remove** | +| validate | Keep → `validator.ts` | +| extract | Keep → migration-contentful libs | +| transform | Keep → contentful.service + content-type-creator | +| push (`runCsdxImport`) | **Remove** | +| staging cleanup | Keep | + +Export: + +```typescript +export async function convertContentfulExport(opts: ConvertOptions): Promise; +``` + +Register in `src/adapters/contentful/index.ts`: + +```typescript +export const contentfulAdapter: LegacyAdapter = { + legacy: 'contentful', + export: exportContentful, // stub until Phase 4 + convert: convertContentfulExport, +}; +``` + +### 4. oclif command + +`src/commands/migrate/convert.ts`: + +```typescript +async run() { + const { flags } = await this.parse(MigrateConvert); + const adapter = getAdapter(flags.legacy); + const input = flags.input ?? await promptInput(); + const result = await adapter.convert({ + input, + outputDir: flags.output, + masterLocale: flags['master-locale'], + affix: flags.affix, + verbose: flags.verbose, + }); + logStages(result); + this.log(`✓ Bundle ready: ${result.bundleDir}`); +} +``` + +### 5. Progress output + +`src/lib/log.ts`: + +``` +validate ✓ export.json +extract ✓ 2 locales · 16 types +transform ✓ 1204 entries · 16 types → contentstack-import/bundle +``` + +### 6. Tests + +`test/adapters/contentful/convert.test.ts`: + +```typescript +import { convertContentfulExport } from '../../../src/adapters/contentful/convert'; + +it('writes mapper.json and content_types/', async () => { + const tmp = await mkdtemp(); + const result = await convertContentfulExport({ + input: FIXTURE_SMALL, + outputDir: tmp, + masterLocale: 'en-US', + }); + expect(fs.existsSync(path.join(result.bundleDir, 'mapper.json'))).toBe(true); +}); +``` + +Fixtures: + +- Fast: `test/fixtures/contentful-export.json` (copy from reference) +- Integration: `../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json` + +--- + +## Key behaviors to preserve + +- Clear `/bundle` before write (no stale UUID chunks) +- `enforceLocaleFallbacks()` — master = `""`, others = master code +- Clean up `contentfulMigrationData/` staging dir after success +- Write `mapper.json` into bundle root + +--- + +## Acceptance criteria + +- [ ] `csdx migrate:convert -l contentful -i ` creates `/bundle/` +- [ ] Bundle has `content_types/`, `entries/`, `locales/`, `mapper.json`, `export-info.json` +- [ ] No `csdx auth:login` required +- [ ] Vitest passes +- [ ] Interactive mode prompts for missing flags + +--- + +## Manual test script + +```bash +csdx migrate:convert \ + --legacy contentful \ + --input ../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json \ + --output ./contentstack-import \ + --master-locale en-US \ + --verbose + +ls contentstack-import/bundle/ +cat contentstack-import/bundle/mapper.json | head -40 + +# Verify native audit accepts the bundle (no wrapper needed yet) +csdx auth:login +csdx cm:stacks:audit --data-dir ./contentstack-import/bundle +``` + +--- + +## Known reference quirks + +1. Hardcoded `region: 'NA'` in content-type-maker — acceptable for v1 +2. Typo `createRefrence` — keep when porting to avoid missed calls +3. CJS `require` for migration-contentful — OK in v1; ESM later diff --git a/packages/contentstack-external-migrate/docs/phases/phase-2-audit.md b/packages/contentstack-external-migrate/docs/phases/phase-2-audit.md new file mode 100644 index 000000000..031e4e4f8 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-2-audit.md @@ -0,0 +1,143 @@ +# Phase 2 — Audit + +**Goal:** `csdx migrate:audit` validates a convert output bundle via native `csdx cm:stacks:audit`. + +**Delivers:** Named audit step — no custom audit logic. + +--- + +## Scope + +### In scope + +- oclif command wrapping `csdx cm:stacks:audit` +- `src/lib/csdx-spawn.ts` — shared spawn helper +- `src/lib/bundle.ts` — `assertBundleDir()` pre-flight +- Pass-through flags: `--data-dir`, `--report-path`, `--modules`, `--csv` +- Document native `csdx cm:stacks:audit:fix` remediation loop + +### Out of scope + +- `migrate:audit:fix` wrapper +- Parsing audit report JSON inside the plugin +- Contentful-specific audit rules + +--- + +## Command interface + +```bash +csdx migrate:audit \ + --data-dir ./contentstack-import/bundle \ + [--report-path ./audit-reports] \ + [--modules content-types,entries,assets] \ + [--csv] +``` + +| Flag | Short | Required | Maps to native | +|------|-------|----------|----------------| +| `--data-dir` | `-d` | yes* | `--data-dir` | +| `--report-path` | — | no | `--report-path` | +| `--modules` | — | no | `--modules` | +| `--csv` | — | no | `--csv` | + +*Interactive mode prompts for `--data-dir`. + +**Requires:** `csdx auth:login` + +--- + +## Implementation + +### `src/lib/bundle.ts` + +```typescript +export function assertBundleDir(bundleDir: string): void { + const required = ['content_types', 'locales', 'export-info.json']; + for (const entry of required) { + if (!fs.existsSync(path.join(bundleDir, entry))) { + throw new Error( + `Invalid bundle at ${bundleDir}: missing ${entry}. Run migrate:convert first.` + ); + } + } +} +``` + +### `src/lib/csdx-spawn.ts` + +```typescript +export async function spawnCsdx(args: string[]): Promise { + return new Promise((resolve, reject) => { + const child = spawn('csdx', args, { stdio: 'inherit' }); + child.on('error', (err) => { + if ((err as NodeJS.ErrnoException).code === 'ENOENT') { + reject(new Error('csdx not found. Install: npm i -g @contentstack/cli')); + } else reject(err); + }); + child.on('exit', (code) => resolve(code ?? 1)); + }); +} +``` + +### `src/commands/migrate/audit.ts` + +```typescript +async run() { + const { flags } = await this.parse(MigrateAudit); + const dataDir = flags['data-dir'] ?? await promptDataDir(); + assertBundleDir(dataDir); + + const args = ['cm:stacks:audit', '--data-dir', dataDir]; + if (flags['report-path']) args.push('--report-path', flags['report-path']); + if (flags.modules) args.push('--modules', flags.modules); + if (flags.csv) args.push('--csv'); + + this.log(`Running: csdx ${args.join(' ')}`); + const code = await spawnCsdx(args); + if (code !== 0) this.error(`Audit failed (exit ${code})`, { exit: code }); + this.log('✓ Audit complete'); +} +``` + +Audit does **not** use legacy adapters — same command regardless of source CMS. + +--- + +## Remediation loop (document in README) + +```bash +csdx migrate:audit -d ./contentstack-import/bundle --report-path ./audit-reports +csdx cm:stacks:audit:fix -d ./contentstack-import/bundle --report-path ./audit-fix +csdx migrate:audit -d ./contentstack-import/bundle --report-path ./audit-verify +``` + +--- + +## Acceptance criteria + +- [ ] Spawns native audit with correct args +- [ ] Invalid bundle path fails fast +- [ ] Exit code matches native csdx +- [ ] Works on Phase 1 bundle output +- [ ] `--report-path` writes reports + +--- + +## Manual test script + +```bash +csdx auth:login +csdx migrate:audit -d ./contentstack-import/bundle --report-path ./audit-reports + +# Should match native behavior: +csdx cm:stacks:audit -d ./contentstack-import/bundle --report-path ./audit-native +``` + +--- + +## Tests + +`test/lib/csdx-spawn.test.ts` — mock spawn, verify args array. + +`test/lib/bundle.test.ts` — assertBundleDir throws on missing dirs. diff --git a/packages/contentstack-external-migrate/docs/phases/phase-3-import.md b/packages/contentstack-external-migrate/docs/phases/phase-3-import.md new file mode 100644 index 000000000..a72579ac7 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-3-import.md @@ -0,0 +1,135 @@ +# Phase 3 — Import + +**Goal:** `csdx migrate:import` imports a bundle into a Contentstack stack via native `csdx cm:stacks:import`. + +**Delivers:** Final deterministic step — explicitly separate from convert (reference bundled these with `--stack`). + +--- + +## Scope + +### In scope + +- oclif wrapper around `csdx cm:stacks:import` +- Reuse `csdx-spawn.ts` and `assertBundleDir()` from Phase 2 +- Flags: `--stack-api-key`, `--data-dir`, `--yes`, `--skip-audit`, `--module`, `--branch` +- Live stdout streaming (long-running) + +### Out of scope + +- Inline import during convert +- Stack creation +- Delivery token retrieval + +--- + +## Command interface + +```bash +csdx migrate:import \ + --stack-api-key bltXXXXXXXX \ + --data-dir ./contentstack-import/bundle \ + [--yes] \ + [--skip-audit] \ + [--module entries] \ + [--branch main] +``` + +| Flag | Short | Required | Maps to native | +|------|-------|----------|----------------| +| `--stack-api-key` | `-k` | yes* | `--stack-api-key` | +| `--data-dir` | `-d` | yes* | `--data-dir` | +| `--yes` | `-y` | no | `--yes` | +| `--skip-audit` | — | no | `--skip-audit` | +| `--module` | — | no | `--module` | +| `--branch` | — | no | `--branch` | + +**Requires:** `csdx auth:login` + empty destination stack (recommended) + +--- + +## Implementation + +Port spawn args from reference `runCsdxImport()`: + +```typescript +// src/commands/migrate/import.ts +async run() { + const { flags } = await this.parse(MigrateImport); + const dataDir = flags['data-dir'] ?? await promptDataDir(); + const stackKey = flags['stack-api-key'] ?? await promptStackKey(); + assertBundleDir(dataDir); + + const args = [ + 'cm:stacks:import', + '--stack-api-key', stackKey, + '--data-dir', dataDir, + ]; + + // Default --yes for non-interactive CI/expert use (matches reference) + if (flags.yes !== false) args.push('--yes'); + if (flags['skip-audit']) args.push('--skip-audit'); + if (flags.module) args.push('--module', flags.module); + if (flags.branch) args.push('--branch', flags.branch); + + this.log('─── csdx cm:stacks:import ──────────────────────────────'); + const code = await spawnCsdx(args); + this.log('────────────────────────────────────────────────────────'); + if (code !== 0) this.error(`Import failed (exit ${code})`, { exit: code }); + this.log(`✓ Import complete — ${stackKey}`); +} +``` + +Import does **not** use legacy adapters. + +--- + +## Recommended workflow + +``` +convert → migrate:audit (review) → migrate:import +``` + +Native import runs audit-fix by default. Use `--skip-audit` only if you already audited and fixed manually. + +--- + +## Acceptance criteria + +- [ ] Import succeeds against empty dev stack +- [ ] Streams native csdx output +- [ ] `--skip-audit`, `--module`, `--branch` forwarded +- [ ] Fails fast on missing bundle +- [ ] Convert has no `--stack` flag + +--- + +## Manual test script + +```bash +csdx auth:login + +csdx migrate:convert \ + -l contentful \ + -i ../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json \ + -o ./contentstack-import -m en-US + +csdx migrate:audit -d ./contentstack-import/bundle --report-path ./audit-reports + +csdx migrate:import \ + -k YOUR_STACK_API_KEY \ + -d ./contentstack-import/bundle \ + -y +``` + +Verify in Contentstack UI: content types, entries, assets present. + +--- + +## Comparison with reference CLI + +| Reference | Our plugin | +|-----------|------------| +| `migrate file.json` | `migrate:convert -i file.json` | +| `migrate file.json --stack KEY` | `migrate:import -k KEY -d bundle` | +| Auth required for convert | Auth only for audit/import | diff --git a/packages/contentstack-external-migrate/docs/phases/phase-4-export.md b/packages/contentstack-external-migrate/docs/phases/phase-4-export.md new file mode 100644 index 000000000..754d1d128 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-4-export.md @@ -0,0 +1,175 @@ +# Phase 4 — Export + +**Goal:** `csdx migrate:export` exports content from a legacy CMS into a migration workspace. + +**Delivers:** Step 1 of the full pipeline — Contentful first. + +--- + +## Scope + +### In scope + +- Contentful adapter export: `src/adapters/contentful/export.ts` +- Management API or Contentful CLI export +- Flags: space ID, management token, asset download, drafts, archived +- Output: `export.json` in workspace + +### Out of scope + +- Sanity / Storyblok (future adapters — see [architecture](../architecture.md#future-adapters-not-in-initial-scope)) +- Convert logic + +--- + +## Command interface + +```bash +csdx migrate:export \ + --legacy contentful \ + --space-id 10897132 \ + --management-token "$CONTENTFUL_MANAGEMENT_TOKEN" \ + --output ./migration-workspace \ + [--download-assets] \ + [--include-drafts] \ + [--include-archived] \ + [--verbose] +``` + +| Flag | Required | Default | Description | +|------|----------|---------|-------------| +| `--legacy` | yes | — | `contentful` | +| `--space-id` | yes* | — | Contentful space ID | +| `--management-token` | yes* | — | CMA token (prefer env var) | +| `--output` | no | `./migration-workspace` | Workspace root | +| `--download-assets` | no | off | Download asset binaries | +| `--include-drafts` | no | off | Include draft entries | +| `--include-archived` | no | off | Include archived entries | + +*Interactive mode prompts. Prefer `CONTENTFUL_MANAGEMENT_TOKEN` env var over CLI flag. + +**No `csdx auth:login` required** — Contentful credentials only. + +--- + +## Output layout + +``` +migration-workspace/ +├── export.json # Must pass Phase 1 validator +└── assets/ # optional +``` + +Phase 5 adds `migration-manifest.json` here. + +--- + +## Implementation + +Use **Contentful CLI** via `src/lib/contentful-cli-spawn.ts`: + +1. If `contentful` is on PATH (`contentful --version` succeeds), run `contentful space export …`. +2. Otherwise run `npx -y contentful-cli space export …` (no global install required). + +Do not reimplement CMA export in v1 unless we add Option B later. + +### Adapter example + +```typescript +// src/adapters/contentful/export.ts +import { formatContentfulCliInvocation, spawnContentfulCli } from '../../lib/contentful-cli-spawn'; + +export async function exportContentful(opts: ExportOptions): Promise { + const exportFile = path.join(opts.outputDir, 'export.json'); + const token = opts.managementToken ?? process.env.CONTENTFUL_MANAGEMENT_TOKEN; + if (!token) throw new Error('Set CONTENTFUL_MANAGEMENT_TOKEN or --management-token'); + + await mkdirp(opts.outputDir); + + const args = [ + 'space', 'export', + '--space-id', opts.spaceId!, + '--management-token', token, + '--content-file', exportFile, + ...(opts.includeDrafts ? ['--include-drafts'] : []), + ...(opts.includeArchived ? ['--include-archived'] : []), + ...(opts.downloadAssets ? ['--download-assets'] : []), + ]; + + if (opts.verbose) { + console.log(`Running: ${formatContentfulCliInvocation(args)}`); + } + + const code = await spawnContentfulCli(args); + if (code !== 0) throw new Error(`Contentful export failed (exit ${code})`); + return { exportFile }; +} +``` + +Future **Option B** (CMA `POST /spaces/{id}/export` + poll) can live in the same adapter without changing command flags. + +### Wire adapter + +Update `src/adapters/contentful/index.ts`: + +```typescript +export const contentfulAdapter: LegacyAdapter = { + legacy: 'contentful', + export: exportContentful, + convert: convertContentfulExport, +}; +``` + +### oclif command + +`src/commands/migrate/export.ts` — resolve adapter, call `adapter.export()`. + +--- + +## Validation + +After export, run validator before returning success: + +```typescript +import contentfulValidator from '../../adapters/contentful/validator'; +const raw = await fs.readFile(exportFile, 'utf8'); +if (!contentfulValidator(raw)) { + throw new Error('Export missing required Contentful keys'); +} +``` + +Required keys: `contentTypes`, `editorInterfaces`, `entries`, `assets`, `locales`. + +--- + +## Acceptance criteria + +- [ ] Produces valid `export.json` +- [ ] `migrate:convert -i export.json` succeeds +- [ ] Token never logged to stdout +- [ ] Interactive mode works + +--- + +## Manual test script + +```bash +export CONTENTFUL_MANAGEMENT_TOKEN="..." +csdx migrate:export \ + --legacy contentful \ + --space-id YOUR_SPACE_ID \ + --output ./migration-workspace + +csdx migrate:convert \ + -l contentful \ + -i ./migration-workspace/export.json \ + -o ./migration-workspace/contentstack-import +``` + +--- + +## Security + +- Read token from env in docs and examples +- Warn against committing export files with embedded secrets +- Never write management token to manifest (Phase 5) diff --git a/packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md b/packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md new file mode 100644 index 000000000..2cf03b947 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md @@ -0,0 +1,176 @@ +# Phase 5 — Manifest, status & model review + +**Goal:** Track migration progress in a workspace manifest and document manual content model review. + +**Delivers:** Resumable workflows and step 3 without AI. + +--- + +## Scope + +### In scope + +- `src/lib/manifest.ts` — read/write `migration-manifest.json` +- `csdx migrate:status` command +- Each command updates manifest on success +- Manual review checklist (expert path for step 3) +- Delivery credentials checklist (step 6 — manual) + +### Out of scope + +- AI-driven review command +- Storing secrets in manifest +- Website conversion (Phase 6) + +--- + +## Manifest schema (v1) + +`migration-manifest.json` at workspace root: + +```json +{ + "version": 1, + "legacy": "contentful", + "workspace": "./migration-workspace", + "source": { + "spaceId": "10897132", + "exportedAt": "2026-06-03T09:00:00.000Z", + "exportFile": "export.json" + }, + "convert": { + "completedAt": "2026-06-03T09:15:00.000Z", + "bundleDir": "contentstack-import/bundle", + "masterLocale": "en-US", + "stats": { "locales": 2, "contentTypes": 16, "entries": 1204 } + }, + "audit": { + "lastRunAt": "2026-06-03T09:20:00.000Z", + "reportPath": "audit-reports" + }, + "import": { + "completedAt": null, + "stackApiKeyPrefix": "bltXXXX", + "status": "pending" + } +} +``` + +**Never store:** management tokens, delivery tokens, full stack keys (prefix only OK). + +--- + +## Implementation + +### `src/lib/manifest.ts` + +```typescript +export interface MigrationManifest { /* ... */ } + +export async function readManifest(workspace: string): Promise; +export async function writeManifest(workspace: string, manifest: MigrationManifest): Promise; +export async function patchManifest(workspace: string, patch: Partial): Promise; +``` + +Atomic write: temp file + rename. + +Each command accepts `--workspace ` (default: infer from `--output` or cwd). + +| Command | Updates | +|---------|---------| +| `migrate:export` | `source` | +| `migrate:convert` | `convert` | +| `migrate:audit` | `audit` | +| `migrate:import` | `import` | + +### `src/commands/migrate/status.ts` + +```typescript +async run() { + const manifest = await readManifest(workspace); + if (!manifest) { this.error('No migration-manifest.json found'); } + // Print step checklist with ✓ / ✗ and suggest next command +} +``` + +Example output: + +``` +Migration workspace: ./migration-workspace + + [✓] export export.json + [✓] convert 16 types, 1204 entries → contentstack-import/bundle + [✓] audit audit-reports + [ ] import not run + +Next: csdx migrate:import -k -d ./migration-workspace/contentstack-import/bundle +``` + +--- + +## Step 3 — Manual model review + +After convert, before audit/import. No CLI command required. + +### Files to inspect + +| Path | Purpose | +|------|---------| +| `bundle/mapper.json` | Field mapping table | +| `bundle/content_types/*.json` | Generated schemas | +| `bundle/reference/reference.json` | Reference mappings | +| `../references/contentstack-model/MODEL-RATIONALE.md` | Project notes | +| `../references/contentstack-model/CONVERSION-AUDIT.md` | Known risks | + +### Checklist + +1. Content type count matches expectation +2. UID naming OK? Re-convert with `--affix` if not +3. Master locale correct? Re-convert with `--master-locale` if not +4. Reference depth acceptable? +5. Modular blocks vs references — consult `cms-data-modeling-best-practices` skill +6. Spot-check JSON RTE in `bundle/entries/` +7. Taxonomies in `bundle/taxonomies/` if present + +### Applying changes + +| Change | Action | +|--------|--------| +| Locale / affix | Re-run `migrate:convert` | +| Manual schema edit | Edit `bundle/content_types/`, then audit | +| Structural redesign | Fix source export, re-convert | + +**Rule:** no silent auto-modification. + +### Optional AI review + +Advisory only — developer approves all changes. Skills: `cms-data-modeling-best-practices`, `contentstack-vibe-docs`. + +--- + +## Step 6 — Delivery credentials (manual) + +Document in [expert-workflow.md](../expert-workflow.md): + +1. Stack → Settings → copy API Key +2. Settings → Tokens → Delivery Token +3. Set env vars in target app (`CONTENTSTACK_API_KEY`, `CONTENTSTACK_DELIVERY_TOKEN`, region, environment) + +--- + +## Acceptance criteria + +- [ ] Commands write/update manifest on success +- [ ] `migrate:status` shows accurate state +- [ ] No secrets in manifest +- [ ] Review checklist usable without AI + +--- + +## Manual test script + +```bash +# After export + convert + audit +csdx migrate:status --workspace ./migration-workspace +cat ./migration-workspace/migration-manifest.json +``` diff --git a/packages/contentstack-external-migrate/docs/phases/phase-6-ai-companion.md b/packages/contentstack-external-migrate/docs/phases/phase-6-ai-companion.md new file mode 100644 index 000000000..f1e8dd9c1 --- /dev/null +++ b/packages/contentstack-external-migrate/docs/phases/phase-6-ai-companion.md @@ -0,0 +1,90 @@ +# Phase 6 — AI companion (future) + +**Goal:** Optional AI orchestration on top of expert-mode CLI commands. + +**Status:** Future — after Phases 0–5 are stable. + +--- + +## Guiding principle + +> AI guides, tooling executes. + +The AI never transforms migration data. It explains, recommends, validates, and runs approved `csdx migrate:*` commands. + +Phases 0–5 remain fully functional without AI. + +--- + +## What the AI uses + +| Input | Source | +|-------|--------| +| Step completion | `migration-manifest.json` | +| Audit results | Report files from `--report-path` | +| Model review | `bundle/mapper.json`, `bundle/content_types/` | +| Commands | Same `csdx migrate:*` as expert mode | + +No new data paths. No AI-generated bundle files. + +--- + +## PRD step mapping + +| Step | AI role | CLI command | +|------|---------|-------------| +| Export | Confirm flags, run | `migrate:export` | +| Convert | Confirm master locale | `migrate:convert` | +| Model review | Analyze, recommend (read-only) | — | +| Audit | Run, summarize report | `migrate:audit` | +| Fix | Explain remediation | `csdx cm:stacks:audit:fix` | +| Import | Confirm empty stack, run | `migrate:import` | +| Credentials | Guide UI steps | — | +| Website | Separate skill | — | + +--- + +## Skills + +| Step | Skill | +|------|-------| +| Model review | `cms-data-modeling-best-practices`, vibe-docs | +| Tokens | `cms-tokens-authentication` | +| Website conversion | New **Website Migration Skill** (separate deliverable) | +| Plugin maintenance | vibe-docs `extensions/cli-plugins/*` | + +Website migration is intentionally separate from content CLI. + +--- + +## Implementation options + +1. [AGENTS.md](../../AGENTS.md) in `cli-plugin-migrate/` — step router for any agent +2. Cursor rules — workflow router + manifest awareness +3. Dedicated `migration-companion` skill via skills CLI + +Suggested guardrails in prompt/rules: + +``` +Read migration-manifest.json before suggesting next steps. +Never modify bundle files without explicit user approval. +Only run csdx migrate:* or documented csdx cm:* commands. +Never invent migration transformations. +``` + +--- + +## Acceptance criteria (future) + +- [ ] AI guides full migration using only CLI commands +- [ ] Disabling AI does not block any step +- [ ] AI never writes bundle without approval +- [ ] Website skill documented separately + +--- + +## Out of scope + +- Autonomous migration +- AI-generated convert logic +- Replacing professional services diff --git a/packages/contentstack-external-migrate/docs/repository-layout.md b/packages/contentstack-external-migrate/docs/repository-layout.md new file mode 100644 index 000000000..5ddb1987a --- /dev/null +++ b/packages/contentstack-external-migrate/docs/repository-layout.md @@ -0,0 +1,59 @@ +# Repository layout + +## This repository (`cli-plugin-migrate`) + +Self-contained **csdx plugin** source: + +``` +cli-plugin-migrate/ +├── src/commands/migrate/ # oclif commands +├── src/adapters/contentful/ # export + convert orchestration +├── src/services/contentful/ # conversion engine (ported reference) +├── src/lib/ # spawn helpers, manifest, bundle validation +├── test/fixtures/ # small Contentful export for tests & try-outs +├── docs/ # documentation +├── package.json +└── README.md # primary user guide +``` + +Generated on build (not committed): `lib/`, `oclif.manifest.json`. + +## Parent monorepo (optional) + +Some teams keep the plugin inside a larger workspace, e.g. `contentful-cursor/`: + +``` +contentful-cursor/ +├── cli-plugin-migrate/ # this plugin +├── references/ +│ ├── import-contentful-cli-main/ # original reference CLI +│ ├── contentful-export-*.json # large sample exports +│ └── contentstack-model/ # model notes (review helpers) +└── cf-starter/ # example app (if present) +``` + +In that layout: + +- Large sample exports: `../references/contentful-export-*.json` from the plugin directory +- Vitest optional integration test uses the same path (skipped if file missing) + +## Local migration workspaces (not in git) + +Created when you run the CLI — **do not commit** (see `.gitignore`): + +``` +migration-workspace/ +├── migration-manifest.json +├── export.json +├── contentstack-import/bundle/ +└── audit-reports/ +``` + +Or ad-hoc: + +``` +contentstack-import/bundle/ +audit-reports/ +``` + +These may contain customer content and tokens in export files. Keep them local or in secure storage. diff --git a/packages/contentstack-external-migrate/package.json b/packages/contentstack-external-migrate/package.json new file mode 100644 index 000000000..b608ef938 --- /dev/null +++ b/packages/contentstack-external-migrate/package.json @@ -0,0 +1,79 @@ +{ + "name": "@contentstack/cli-external-migrate", + "version": "1.0.0-alpha.1", + "description": "Migrate from external source to Contentstack", + "author": "Contentstack", + "license": "MIT", + "main": "lib/index.js", + "types": "lib/index.d.ts", + "files": [ + "/lib", + "/oclif.manifest.json" + ], + "scripts": { + "build": "pnpm compile && oclif manifest && oclif readme", + "clean": "rm -rf ./lib ./node_modules tsconfig.tsbuildinfo", + "compile": "tsc -b tsconfig.json && node scripts/copy-assets.js", + "lint": "eslint . --ext .ts --config .eslintrc.js", + "postpack": "rm -f oclif.manifest.json", + "posttest": "eslint . --ext .ts --config .eslintrc.js --fix", + "prepack": "pnpm compile && oclif manifest && oclif readme", + "test": "vitest run", + "test:integration": "jest --testPathPattern=tests/integration", + "version": "oclif readme && git add README.md" + }, + "dependencies": { + "@contentstack/cli-command": "^1.6.1", + "@contentstack/cli-utilities": "^1.14.4", + "@contentstack/json-rte-serializer": "^2.0.13", + "@contentstack/marketplace-sdk": "^1.5.2", + "@oclif/core": "^4.8.0", + "axios": "^1.15.2", + "chalk": "^4.1.2", + "jsdom": "^23.0.0", + "lodash": "^4.17.21", + "mkdirp": "^1.0.4", + "p-limit": "^3.1.0", + "uuid": "^14.0.0" + }, + "devDependencies": { + "@oclif/test": "^3.0.0", + "@types/jsdom": "^21.1.7", + "@types/lodash": "^4.17.0", + "@types/mkdirp": "^1.0.2", + "@types/node": "^20.12.12", + "@types/uuid": "^10.0.0", + "@typescript-eslint/eslint-plugin": "^6.19.0", + "@typescript-eslint/parser": "^6.19.0", + "eslint": "^8.56.0", + "oclif": "^4.8.0", + "typescript": "^5.3.3", + "vitest": "^4.0.18" + }, + "oclif": { + "commands": "./lib/commands", + "bin": "csdx", + "devPlugins": [ + "@oclif/plugin-help" + ], + "repositoryPrefix": "<%- repo %>/blob/main/packages/contentstack-external-migrate/<%- commandPath %>" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/contentstack/cli-plugins.git", + "directory": "packages/contentstack-external-migrate" + }, + "csdxConfig": { + "shortCommandName": { + "external-migrate:create": "EMCRT" + } + }, + "keywords": [ + "contentstack", + "cli", + "plugin" + ], + "engines": { + "node": ">=20.0.0" + } +} diff --git a/packages/contentstack-external-migrate/scripts/copy-assets.js b/packages/contentstack-external-migrate/scripts/copy-assets.js new file mode 100644 index 000000000..0e3b02871 --- /dev/null +++ b/packages/contentstack-external-migrate/scripts/copy-assets.js @@ -0,0 +1,28 @@ +// Copies non-TS assets (JSON configs) from src/ into lib/ after `tsc` runs. + +const fs = require('fs'); +const path = require('path'); + +const SRC = path.resolve(__dirname, '..', 'src'); +const OUT = path.resolve(__dirname, '..', 'lib'); + +function walk(dir, fn) { + if (!fs.existsSync(dir)) return; + for (const name of fs.readdirSync(dir)) { + const p = path.join(dir, name); + const stat = fs.statSync(p); + if (stat.isDirectory()) walk(p, fn); + else fn(p); + } +} + +walk(SRC, (file) => { + if (file.endsWith('.json')) { + const rel = path.relative(SRC, file); + const dst = path.join(OUT, rel); + fs.mkdirSync(path.dirname(dst), { recursive: true }); + fs.copyFileSync(file, dst); + } +}); + +console.log('copy-assets: done'); diff --git a/packages/contentstack-external-migrate/src/adapters/contentful/contentful-schema.json b/packages/contentstack-external-migrate/src/adapters/contentful/contentful-schema.json new file mode 100644 index 000000000..5ff2ce71d --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/contentful/contentful-schema.json @@ -0,0 +1,34 @@ +{ + "contentTypes": { + "name": "contentTypes", + "required": "true" + }, + "tags": { + "name": "tags", + "required": "false" + }, + "editorInterfaces": { + "name": "editorInterfaces", + "required": "true" + }, + "entries": { + "name": "entries", + "required": "true" + }, + "assets": { + "name": "assets", + "required": "true" + }, + "locales": { + "name": "locales", + "required": "true" + }, + "webhooks": { + "name": "webhooks", + "required": "false" + }, + "roles": { + "name": "roles", + "required": "false" + } +} diff --git a/packages/contentstack-external-migrate/src/adapters/contentful/convert.ts b/packages/contentstack-external-migrate/src/adapters/contentful/convert.ts new file mode 100644 index 000000000..1e6fe98a8 --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/contentful/convert.ts @@ -0,0 +1,327 @@ +import fs from 'fs'; +import path from 'path'; +import mkdirp from 'mkdirp'; +import type { ConvertOptions, ConvertResult } from '../types'; +import contentfulValidator from './validator'; +import { initContentfulMigrateConfig } from '../../services/contentful/config'; +import { pickMasterLocale } from '../../services/contentful/prompts/master-locale'; +import { writeMapper, type MapperBundle } from '../../services/contentful/mapper/write'; +import { + done, + logStageFail, + logStageOk, + logSummary, +} from '../../lib/log'; +import { parseJsonLoose } from '../../lib/parse-json-loose'; + +const BUNDLE_ID = 'bundle'; + +// eslint-disable-next-line @typescript-eslint/no-var-requires +const { + extractLocale, + extractContentTypes, + extractTaxonomy, + createInitialMapper, +} = require('../../services/contentful/migration-contentful'); + +export async function convertContentfulExport(opts: ConvertOptions): Promise { + const startedAt = Date.now(); + const input = path.resolve(opts.input); + const outputDir = path.resolve(opts.outputDir); + const affix = opts.affix ?? ''; + + initContentfulMigrateConfig({ outputDir, verbose: !!opts.verbose }); + + if (!fs.existsSync(input)) { + throw new Error(`Export file not found: ${input}`); + } + + const rawExport = await fs.promises.readFile(input, 'utf8'); + if (!contentfulValidator(rawExport)) { + throw new Error('Export is missing required Contentful keys'); + } + logStageOk('validate', path.basename(input)); + + let initialMapper: { contentTypes: unknown[] }; + let locales: string[] = []; + let taxonomies: unknown[] = []; + + try { + locales = (await extractLocale(input)) || []; + await extractContentTypes(input, affix); + initialMapper = await createInitialMapper(input, affix); + await extractTaxonomy(input); + + const taxonomyPath = path.join( + process.cwd(), + 'contentfulMigrationData', + 'taxonomySchema', + 'taxonomySchema.json', + ); + if (fs.existsSync(taxonomyPath)) { + taxonomies = parseJsonLoose(await fs.promises.readFile(taxonomyPath, 'utf8')) || []; + } + logStageOk( + 'extract', + `${locales.length} locales · ${initialMapper?.contentTypes?.length ?? 0} types`, + ); + } catch (err) { + logStageFail('extract', err instanceof Error ? err.message : String(err)); + throw err; + } + + const { contentfulService } = await import('../../services/contentful/contentful.service'); + const { contenTypeMaker } = await import('../../services/contentful/content-type-creator'); + const { extensionService } = await import('../../services/contentful/extension.service'); + const { marketPlaceAppService } = await import('../../services/contentful/marketplace.service'); + const { createCustomRoles } = await import('../../services/contentful/contentful/roles'); + + const projectId = 'migrate'; + const destinationStackId = BUNDLE_ID; + const bundleRoot = path.join(outputDir, destinationStackId); + + if (fs.existsSync(bundleRoot)) { + fs.rmSync(bundleRoot, { recursive: true, force: true }); + } + + let cfDefaultLocale: string | undefined; + try { + const parsedForLocale = parseJsonLoose(rawExport); + const defaultLocale = (parsedForLocale?.locales ?? []).find((l: any) => l?.default === true); + cfDefaultLocale = defaultLocale?.code; + } catch { + // best-effort; fall through to the prompt + } + let pickedMaster: string; + try { + pickedMaster = await pickMasterLocale(locales, opts.masterLocale ?? cfDefaultLocale); + } catch (err) { + logStageFail('locale', err instanceof Error ? err.message : String(err)); + throw err; + } + + const masterLocaleCode = pickedMaster.toLowerCase(); + const masterLocaleMap: Record = { [masterLocaleCode]: pickedMaster }; + const nonMasterLocaleMap: Record = {}; + for (const code of locales) { + if (code === pickedMaster) continue; + nonMasterLocaleMap[code.toLowerCase()] = code; + } + + const project = { + master_locale: masterLocaleMap, + locales: nonMasterLocaleMap, + stackDetails: { master_locale: masterLocaleCode }, + mapperKeys: {}, + }; + + const contentTypes = initialMapper?.contentTypes ?? []; + const mapperKeys: Record = {}; + + const entryCountsByCt: Record = {}; + const pageContentTypeIds = new Set(); + try { + const parsedExport = parseJsonLoose(rawExport); + for (const e of parsedExport?.entries ?? []) { + const ctId = e?.sys?.contentType?.sys?.id; + if (!ctId) continue; + entryCountsByCt[ctId] = (entryCountsByCt[ctId] ?? 0) + 1; + } + const URL_LIKE_FIELD_IDS = new Set(['url', 'slug', 'path', 'permalink']); + for (const ct of parsedExport?.contentTypes ?? []) { + const ctId = ct?.sys?.id; + if (!ctId) continue; + for (const f of ct?.fields ?? []) { + const fid = String(f?.id ?? '').toLowerCase(); + if (URL_LIKE_FIELD_IDS.has(fid)) { pageContentTypeIds.add(ctId); break; } + if (f?.type === 'RichText') { pageContentTypeIds.add(ctId); break; } + } + } + } catch { + // best-effort; singleton/is_page detection will fall back to defaults + } + + try { + for (const contentType of contentTypes) { + await contenTypeMaker({ + contentType, + destinationStackId, + projectId, + newStack: true, + keyMapper: mapperKeys, + region: 'NA', + user_id: 'migrate', + is_sso: false, + entryCountsByCt, + pageContentTypeIds, + }); + } + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + logStageFail('transform', `content-type-maker: ${msg}`); + throw err; + } + + try { + await contentfulService.createLocale(input, destinationStackId, projectId, project); + enforceLocaleFallbacks(bundleRoot, masterLocaleCode); + await contentfulService.createRefrence(input, destinationStackId, projectId); + const webhookStats = await contentfulService.createWebhooks(input, destinationStackId, projectId); + if (webhookStats && webhookStats.total) { + const manual = webhookStats.needsSecretReentry ?? []; + logStageOk( + 'webhooks', + manual.length + ? `${webhookStats.total} migrated · ${manual.length} need manual secret re-entry` + : `${webhookStats.total} migrated`, + ); + if (opts.verbose && manual.length) { + for (const name of manual) { + process.stdout.write(` ⚠ secret re-entry: ${name}\n`); + } + } + } + await contentfulService.createEnvironment(input, destinationStackId, projectId); + // isTest=false — reference passed true, which slice(0,10) caps processed assets (dev-only) + await contentfulService.createAssets(input, destinationStackId, projectId, false); + await contentfulService.createTaxonomy(input, destinationStackId, projectId); + await contentfulService.createEntry( + input, + destinationStackId, + projectId, + contentTypes, + mapperKeys, + masterLocaleCode, + project, + ); + // Build the marketplace_apps manifest (only when content-type-creator wrote + // extension-mapper.json for `app` widget fields). No-ops gracefully when csdx + // session/org is missing — convert still succeeds. + try { + await marketPlaceAppService.createAppManifest({ destinationStackId, orgUid: opts.orgUid }); + } catch (mpErr) { + logStageFail('marketplace', mpErr instanceof Error ? mpErr.message : String(mpErr)); + } + await extensionService.createExtension({ destinationStackId }); + + // Roles & permissions: Contentful roles → Contentstack custom-roles bundle + // (built-in names map to existing roles; the rest become custom roles). + try { + const ctMap: Record = {}; + for (const ct of contentTypes as any[]) { + if (ct?.otherCmsUid && ct?.contentstackUid) ctMap[ct.otherCmsUid] = ct.contentstackUid; + } + const roleMapping = createCustomRoles(input, destinationStackId, ctMap); + if (roleMapping.length) { + const builtIns = roleMapping.filter((m) => m.kind === 'built-in'); + const customs = roleMapping.filter((m) => m.kind === 'custom'); + logStageOk( + 'roles', + `${customs.length} custom · ${builtIns.length} → built-in`, + ); + if (opts.verbose) { + for (const m of roleMapping) { + process.stdout.write(` ${m.source} → ${m.target} (${m.kind})\n`); + } + } + } + } catch (roleErr) { + logStageFail('roles', roleErr instanceof Error ? roleErr.message : String(roleErr)); + } + + await contentfulService.createVersionFile(destinationStackId, projectId); + + await mkdirp(bundleRoot); + const mapper: MapperBundle = { + contentTypes, + taxonomies, + locales, + }; + const mapperPath = await writeMapper(bundleRoot, mapper); + + const entriesDir = path.join(bundleRoot, 'entries'); + const ctCount = fs.existsSync(entriesDir) ? fs.readdirSync(entriesDir).length : 0; + const sourceEntries = parseJsonLoose(rawExport)?.entries; + const entryCount = Array.isArray(sourceEntries) ? sourceEntries.length : 0; + + const relBundle = path.relative(process.cwd(), bundleRoot) || bundleRoot; + logStageOk('transform', `${entryCount} entries · ${ctCount} types → ${relBundle}`); + if (opts.verbose) { + process.stdout.write( + ` mapper: ${path.relative(process.cwd(), mapperPath) || mapperPath}\n`, + ); + } + + try { + const stagingDir = path.join(process.cwd(), 'contentfulMigrationData'); + if (fs.existsSync(stagingDir)) { + fs.rmSync(stagingDir, { recursive: true, force: true }); + } + } catch { + // best-effort + } + + logSummary({ bundleDir: bundleRoot, entryCount, contentTypeCount: contentTypes.length }); + + // Per-module conversion summary (source vs converted, with pass/fail) — + // written into the bundle so migrate:create / migrate:import can show it + // before touching a stack, and printed here for the standalone convert. + try { + const { + computeConversionSummary, + computeContentTypeFieldSummary, + writeConversionSummary, + renderConversionSummary, + renderContentTypeFieldSummary, + } = await import('../../lib/conversion-summary'); + const parsedForSummary = parseJsonLoose(rawExport); + const summary = computeConversionSummary(parsedForSummary, bundleRoot); + summary.contentTypeFields = computeContentTypeFieldSummary(parsedForSummary, bundleRoot); + writeConversionSummary(bundleRoot, summary); + process.stdout.write(`\n${renderConversionSummary(summary)}\n`); + process.stdout.write(`\n${renderContentTypeFieldSummary(summary.contentTypeFields)}\n`); + } catch { + // best-effort — never fail convert over the summary + } + + done(Date.now() - startedAt); + + return { + bundleDir: bundleRoot, + mapperPath, + stats: { + locales: locales.length, + contentTypes: contentTypes.length, + entries: entryCount, + }, + }; + } catch (err) { + logStageFail('transform', err instanceof Error ? err.message : String(err)); + throw err; + } +} + +function enforceLocaleFallbacks(bundleRoot: string, masterCode: string): void { + const localesDir = path.join(bundleRoot, 'locales'); + const masterFile = path.join(localesDir, 'master-locale.json'); + const localesFile = path.join(localesDir, 'locales.json'); + const languageFile = path.join(localesDir, 'language.json'); + + const patch = (file: string, isMaster: boolean) => { + if (!fs.existsSync(file)) return; + const data = parseJsonLoose(fs.readFileSync(file, 'utf8')); + for (const k of Object.keys(data || {})) { + if (!data[k]) continue; + if (isMaster || data[k].code === masterCode) { + data[k].fallback_locale = ''; + } else { + data[k].fallback_locale = masterCode; + } + } + fs.writeFileSync(file, JSON.stringify(data, null, 2), 'utf8'); + }; + + patch(masterFile, true); + patch(localesFile, false); + patch(languageFile, false); +} diff --git a/packages/contentstack-external-migrate/src/adapters/contentful/export.ts b/packages/contentstack-external-migrate/src/adapters/contentful/export.ts new file mode 100644 index 000000000..6475cb865 --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/contentful/export.ts @@ -0,0 +1,432 @@ +import fs from 'fs'; +import path from 'path'; +import https from 'https'; +import mkdirp from 'mkdirp'; +import type { ExportOptions, ExportResult } from '../types'; +import contentfulValidator from './validator'; +import { + formatContentfulCliInvocation, + spawnContentfulCli, +} from '../../lib/contentful-cli-spawn'; + +const EXPORT_FILENAME = 'export.json'; + +export function resolveContentfulManagementToken( + flagToken?: string, +): string | undefined { + return flagToken ?? process.env.CONTENTFUL_MANAGEMENT_TOKEN; +} + +/** Build argv for `contentful space export` / `npx -y contentful-cli space export`. */ +export function buildContentfulSpaceExportArgs( + opts: ExportOptions & { spaceId: string }, + token: string, +): string[] { + const exportDir = path.resolve(opts.outputDir); + const args = [ + 'space', + 'export', + '--space-id', + opts.spaceId, + '--management-token', + token, + '--export-dir', + exportDir, + '--content-file', + EXPORT_FILENAME, + ]; + + if (opts.environmentId) { + args.push('--environment-id', opts.environmentId); + } + if (opts.includeDrafts) { + args.push('--include-drafts'); + } + if (opts.includeArchived) { + args.push('--include-archived'); + } + if (opts.downloadAssets) { + args.push('--download-assets'); + } + + return args; +} + +export async function exportContentful( + opts: ExportOptions & { spaceId: string }, + spawnFn: typeof spawnContentfulCli = spawnContentfulCli, +): Promise { + const token = resolveContentfulManagementToken(opts.managementToken); + if (!token) { + throw new Error('Set CONTENTFUL_MANAGEMENT_TOKEN or pass --management-token'); + } + + const outputDir = path.resolve(opts.outputDir); + const exportFile = path.join(outputDir, EXPORT_FILENAME); + + await mkdirp(outputDir); + + const args = buildContentfulSpaceExportArgs(opts, token); + + if (opts.verbose) { + // eslint-disable-next-line no-console + console.log(`Running: ${formatContentfulCliInvocation(args)}`); + } + + const code = await spawnFn(args, { cwd: outputDir }); + if (code !== 0) { + throw new Error(`Contentful export failed (exit ${code})`); + } + + if (!fs.existsSync(exportFile)) { + throw new Error(`Contentful export finished but ${exportFile} was not created`); + } + + const raw = await fs.promises.readFile(exportFile, 'utf8'); + if (!contentfulValidator(raw)) { + throw new Error('Export missing required Contentful keys'); + } + + const result: ExportResult = { exportFile }; + if (opts.downloadAssets) { + result.assetsDir = outputDir; + } + + return result; +} + +/** + * List the environments of a Contentful space (CMA GET /spaces/{id}/environments), + * so each can be migrated into its own Contentstack branch. Uses node `https` + * directly — axios stalls on this endpoint in some environments. + */ +export async function fetchContentfulEnvironments( + spaceId: string, + managementToken?: string, + attempts = 3, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) { + throw new Error('Set CONTENTFUL_MANAGEMENT_TOKEN or pass --management-token'); + } + let lastErr: unknown; + for (let i = 0; i < attempts; i++) { + try { + return await fetchContentfulEnvironmentsOnce(spaceId, token); + } catch (err) { + lastErr = err; + if (i < attempts - 1) await new Promise((r) => setTimeout(r, 2000)); + } + } + throw lastErr; +} + +function fetchContentfulEnvironmentsOnce(spaceId: string, token: string): Promise { + return new Promise((resolve, reject) => { + const req = https.request( + { + hostname: 'api.contentful.com', + path: `/spaces/${spaceId}/environments`, + method: 'GET', + headers: { Authorization: `Bearer ${token}` }, + timeout: 60_000, + }, + (res) => { + let data = ''; + res.on('data', (c) => (data += c)); + res.on('end', () => { + if (res.statusCode && res.statusCode >= 400) { + reject(new Error(`Contentful environments fetch failed (HTTP ${res.statusCode})`)); + return; + } + try { + const items = JSON.parse(data)?.items; + resolve( + Array.isArray(items) + ? items.map((e: any) => e?.sys?.id).filter((id: unknown): id is string => Boolean(id)) + : [], + ); + } catch (err) { + reject(err); + } + }); + }, + ); + req.on('timeout', () => req.destroy(new Error('Contentful environments fetch timed out'))); + req.on('error', reject); + req.end(); + }); +} + +/** Low-level GET against the Contentful Management API (node https + retry). */ +function cfApiGet(apiPath: string, token: string, headers: Record = {}, attempts = 3): Promise { + const once = () => + new Promise((resolve, reject) => { + const req = https.request( + { + hostname: 'api.contentful.com', + path: apiPath, + method: 'GET', + headers: { Authorization: `Bearer ${token}`, ...headers }, + timeout: 60_000, + }, + (res) => { + let data = ''; + res.on('data', (c) => (data += c)); + res.on('end', () => { + if (res.statusCode && res.statusCode >= 400) { + reject(new Error(`Contentful GET ${apiPath} failed (HTTP ${res.statusCode})`)); + return; + } + try { + resolve(JSON.parse(data)); + } catch (err) { + reject(err); + } + }); + }, + ); + req.on('timeout', () => req.destroy(new Error(`Contentful GET ${apiPath} timed out`))); + req.on('error', reject); + req.end(); + }); + return (async () => { + let lastErr: unknown; + for (let i = 0; i < attempts; i++) { + try { + return await once(); + } catch (err) { + lastErr = err; + if (i < attempts - 1) await new Promise((r) => setTimeout(r, 2000)); + } + } + throw lastErr; + })(); +} + +/** + * Fetch a Contentful environment's workflow definitions from the LIVE Management + * API (workflows are NOT in the static `contentful space export`). Returns the + * raw definitions; mapping to Contentstack workflows happens in the service. + * Best-effort: returns [] if the space has no workflows or the feature is off. + */ +export async function fetchContentfulWorkflows( + spaceId: string, + environmentId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) return []; + const env = environmentId || 'master'; + // Workflows is an alpha/app feature — the alpha header is required, and the + // call may 404/403 on spaces without it; treat any failure as "no workflows". + const alpha = { 'X-Contentful-Enable-Alpha-Feature': 'workflows' }; + const paths = [ + `/spaces/${spaceId}/environments/${env}/workflow_definitions`, + `/spaces/${spaceId}/workflow_definitions`, + ]; + for (const p of paths) { + try { + const page = await cfApiGet(`${p}?limit=100`, token, alpha); + if (Array.isArray(page?.items)) return page.items; + } catch { + // try the next path / give up + } + } + return []; +} + +/** + * Fetch a Contentful environment's Releases from the LIVE Management API + * (Releases are NOT in the static export; it's an alpha/app feature). Each + * release carries its `entities.items` (links to entries/assets). Best-effort: + * returns [] when the space has no releases or the feature is off. + */ +export async function fetchContentfulReleases( + spaceId: string, + environmentId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) return []; + const env = environmentId || 'master'; + const alpha = { 'X-Contentful-Enable-Alpha-Feature': 'releases' }; + try { + const page = await cfApiGet( + `/spaces/${spaceId}/environments/${env}/releases?limit=100`, + token, + alpha, + ); + return Array.isArray(page?.items) ? page.items : []; + } catch { + return []; + } +} + +/** + * Fetch a Contentful environment's pending Scheduled Actions from the LIVE + * Management API (not in the static export). Best-effort: [] on error/none. + */ +export async function fetchContentfulScheduledActions( + spaceId: string, + environmentId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) return []; + const env = environmentId || 'master'; + try { + const page = await cfApiGet( + `/spaces/${spaceId}/environments/${env}/scheduled_actions?filter[environment.sys.id]=${env}&filter[sys.status]=scheduled&limit=100`, + token, + ); + return Array.isArray(page?.items) ? page.items : []; + } catch { + return []; + } +} + +/** + * Fetch the Tasks on a single Contentful entry from the LIVE Management API + * (tasks are per-entry to-dos, not in the static export). Best-effort: []. + */ +export async function fetchContentfulEntryTasks( + spaceId: string, + environmentId: string, + entryId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) return []; + const env = environmentId || 'master'; + try { + const page = await cfApiGet( + `/spaces/${spaceId}/environments/${env}/entries/${entryId}/tasks?limit=100`, + token, + ); + return Array.isArray(page?.items) ? page.items : []; + } catch { + return []; + } +} + +export interface ContentfulSpace { + id: string; + name: string; +} + +/** + * List the spaces a Contentful org has (CMA GET /spaces, filtered by + * sys.organization). Lets `migrate:create --cf-org-id` migrate every space the + * token can access in that org, one stack per space. + */ +export async function fetchContentfulSpaces( + orgId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) { + throw new Error('Set CONTENTFUL_MANAGEMENT_TOKEN or pass --management-token'); + } + const out: ContentfulSpace[] = []; + let skip = 0; + for (;;) { + const page = await cfApiGet(`/spaces?limit=100&skip=${skip}`, token); + const items: any[] = Array.isArray(page?.items) ? page.items : []; + for (const s of items) { + if (s?.sys?.organization?.sys?.id === orgId && s?.sys?.id) { + out.push({ id: s.sys.id, name: s?.name || s.sys.id }); + } + } + skip += items.length; + const total = typeof page?.total === 'number' ? page.total : skip; + if (items.length === 0 || skip >= total) break; + } + return out; +} + +/** Resolve a Contentful organization's display name (CMA GET /organizations). */ +export async function fetchContentfulOrgName( + orgId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) return undefined; + try { + const page = await cfApiGet('/organizations?limit=100', token); + const org = (page?.items ?? []).find((o: any) => o?.sys?.id === orgId); + return org?.name; + } catch { + return undefined; + } +} + +/** Fetch all pages of a Contentful collection endpoint (skip/limit). */ +async function cfApiGetAll(basePath: string, token: string): Promise { + const items: any[] = []; + let skip = 0; + for (;;) { + const sep = basePath.includes('?') ? '&' : '?'; + const page = await cfApiGet(`${basePath}${sep}limit=100&skip=${skip}`, token); + const batch: any[] = Array.isArray(page?.items) ? page.items : []; + items.push(...batch); + skip += batch.length; + const total = typeof page?.total === 'number' ? page.total : skip; + if (batch.length === 0 || skip >= total) break; + } + return items; +} + +export interface ContentfulMember { + email: string; + firstName?: string; + lastName?: string; + /** Space admin in Contentful → maps to the Contentstack Admin role. */ + admin: boolean; + /** Contentful role NAMES held by this member (empty for admins). */ + roleNames: string[]; +} + +/** + * Fetch a Contentful space's members with their roles, from the LIVE Management + * API (space memberships are NOT in the static `contentful space export`). + * Joins space_memberships (user→roles + admin) with users (emails) and roles + * (id→name) so each member is returned with its human-readable role names. + */ +export async function fetchContentfulMembers( + spaceId: string, + managementToken?: string, +): Promise { + const token = resolveContentfulManagementToken(managementToken); + if (!token) { + throw new Error('Set CONTENTFUL_MANAGEMENT_TOKEN or pass --management-token'); + } + const [memberships, users, roles] = await Promise.all([ + cfApiGetAll(`/spaces/${spaceId}/space_memberships`, token), + cfApiGetAll(`/spaces/${spaceId}/users`, token), + cfApiGetAll(`/spaces/${spaceId}/roles`, token), + ]); + const emailByUserId: Record = {}; + for (const u of users) if (u?.sys?.id) emailByUserId[u.sys.id] = u; + const roleNameById: Record = {}; + for (const r of roles) if (r?.sys?.id) roleNameById[r.sys.id] = r?.name || r.sys.id; + + const members: ContentfulMember[] = []; + for (const m of memberships) { + const userId = m?.sys?.user?.sys?.id || m?.user?.sys?.id; + const user = userId ? emailByUserId[userId] : undefined; + const email = user?.email || m?.email; + if (!email) continue; // can't invite without an email + const roleNames = Array.isArray(m?.roles) + ? m.roles.map((r: any) => roleNameById[r?.sys?.id]).filter((n: any): n is string => Boolean(n)) + : []; + members.push({ + email, + firstName: user?.firstName, + lastName: user?.lastName, + admin: Boolean(m?.admin), + roleNames, + }); + } + return members; +} diff --git a/packages/contentstack-external-migrate/src/adapters/contentful/index.ts b/packages/contentstack-external-migrate/src/adapters/contentful/index.ts new file mode 100644 index 000000000..7620347f1 --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/contentful/index.ts @@ -0,0 +1,9 @@ +import type { LegacyAdapter } from '../types'; +import { convertContentfulExport } from './convert'; +import { exportContentful } from './export'; + +export const contentfulAdapter: LegacyAdapter = { + legacy: 'contentful', + export: exportContentful, + convert: convertContentfulExport, +}; diff --git a/packages/contentstack-external-migrate/src/adapters/contentful/validator.ts b/packages/contentstack-external-migrate/src/adapters/contentful/validator.ts new file mode 100644 index 000000000..a062877d1 --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/contentful/validator.ts @@ -0,0 +1,34 @@ +import jsonConfig from './contentful-schema.json'; +import { parseJsonLoose } from '../../lib/parse-json-loose'; + +//interface for json file data +interface JsonData { + [key: string]: any; +} + +//function to validate json file data +function contentfulValidator(data: string): boolean { + let jsonData: JsonData; + + try { + //parse the data (tolerant — BOM/control-char/trailing-comma recovery) + jsonData = parseJsonLoose(data); + + //iterate through jsonconfig to check to check if data is valid + return Object.values(jsonConfig).every((prop:any) => { + // Check if the current property exists in the json data. + if (jsonData?.hasOwnProperty(prop?.name)) { + return true; + } + // If the property is required but not present + else if (prop?.required === 'true') { + return false; + } + return true; + }); + } catch (error) { + //console.error('Error:', error); + return false; + } +} +export default contentfulValidator; diff --git a/packages/contentstack-external-migrate/src/adapters/registry.ts b/packages/contentstack-external-migrate/src/adapters/registry.ts new file mode 100644 index 000000000..46d903f99 --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/registry.ts @@ -0,0 +1,16 @@ +import type { LegacyAdapter } from './types'; +import { contentfulAdapter } from './contentful'; + +const adapters: Record = { + contentful: contentfulAdapter, +}; + +export function getAdapter(legacy: string): LegacyAdapter { + const adapter = adapters[legacy]; + if (!adapter) { + throw new Error( + `Unsupported legacy CMS: ${legacy}. Supported: ${Object.keys(adapters).join(', ')}`, + ); + } + return adapter; +} diff --git a/packages/contentstack-external-migrate/src/adapters/types.ts b/packages/contentstack-external-migrate/src/adapters/types.ts new file mode 100644 index 000000000..db6b7fe9f --- /dev/null +++ b/packages/contentstack-external-migrate/src/adapters/types.ts @@ -0,0 +1,42 @@ +export interface ExportOptions { + outputDir: string; + downloadAssets?: boolean; + includeDrafts?: boolean; + includeArchived?: boolean; + verbose?: boolean; + spaceId?: string; + managementToken?: string; + /** Contentful environment to export (defaults to the space default). */ + environmentId?: string; +} + +export interface ExportResult { + exportFile: string; + assetsDir?: string; +} + +export interface ConvertOptions { + input: string; + outputDir: string; + affix?: string; + masterLocale?: string; + verbose?: boolean; + /** + * Organization UID, used to fetch marketplace app manifests from Developer Hub + * for `app`-widget fields (e.g. Cloudinary). Mirrors the API's explicit orgId + * input. Falls back to csdx's oauthOrgUid when omitted. + */ + orgUid?: string; +} + +export interface ConvertResult { + bundleDir: string; + mapperPath: string; + stats: { locales: number; contentTypes: number; entries: number }; +} + +export interface LegacyAdapter { + readonly legacy: string; + export(options: ExportOptions): Promise; + convert(options: ConvertOptions): Promise; +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/audit.ts b/packages/contentstack-external-migrate/src/commands/migrate/audit.ts new file mode 100644 index 000000000..b61967c7f --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/audit.ts @@ -0,0 +1,86 @@ +import { Command } from '@contentstack/cli-command'; +import { cliux, flags, FlagInput } from '@contentstack/cli-utilities'; +import { assertBundleDir } from '../../lib/bundle'; +import { inferWorkspace, patchManifest, toWorkspaceRelative } from '../../lib/manifest'; +import { spawnCsdx } from '../../lib/csdx-spawn'; + +export interface AuditFlags { + 'data-dir'?: string; + 'report-path'?: string; + modules?: string; + csv?: boolean; +} + +/** Build argv for `csdx cm:stacks:audit` from migrate:audit flags. */ +export function buildStacksAuditArgs(dataDir: string, flags: AuditFlags): string[] { + const args = ['cm:stacks:audit', '--data-dir', dataDir]; + if (flags['report-path']) args.push('--report-path', flags['report-path']); + if (flags.modules) args.push('--modules', flags.modules); + if (flags.csv) args.push('--csv'); + return args; +} + +export default class MigrateAudit extends Command { + static description = 'Audit a Contentstack import bundle (wraps csdx cm:stacks:audit)'; + + static examples = [ + '$ csdx migrate:audit --data-dir ./contentstack-import/bundle', + '$ csdx migrate:audit -d ./contentstack-import/bundle --report-path ./audit-reports', + '$ csdx migrate:audit -d ./bundle --modules content-types,entries,assets --csv', + ]; + static hidden = true; + static flags: FlagInput = { + 'data-dir': flags.string({ + char: 'd', + description: 'Path to convert output bundle directory', + }), + 'report-path': flags.string({ + description: 'Directory for audit reports', + }), + modules: flags.string({ + description: 'Comma-separated audit modules (e.g. content-types,entries,assets)', + }), + csv: flags.boolean({ + description: 'Export audit report as CSV', + default: false, + }), + workspace: flags.string({ + char: 'w', + description: 'Migration workspace root for migration-manifest.json', + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateAudit); + + try { + const dataDir = flags['data-dir'] ?? (await cliux.prompt('Path to convert output bundle directory')); + + assertBundleDir(dataDir); + + const args = buildStacksAuditArgs(dataDir, { + 'report-path': flags['report-path'], + modules: flags.modules, + csv: flags.csv, + }); + this.log(`Running: csdx ${args.join(' ')}`); + + const code = await spawnCsdx(args); + if (code !== 0) { + this.error(`Audit failed (exit ${code})`, { exit: code }); + } + + const workspace = inferWorkspace({ workspace: flags.workspace, dataDir }); + await patchManifest(workspace, { + audit: { + lastRunAt: new Date().toISOString(), + reportPath: flags['report-path'] ? toWorkspaceRelative(workspace, flags['report-path']) : undefined, + }, + }); + + this.log('✓ Audit complete'); + } catch (error) { + this.error(error instanceof Error ? error.message : String(error), { exit: 1 }); + } + } +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/convert.ts b/packages/contentstack-external-migrate/src/commands/migrate/convert.ts new file mode 100644 index 000000000..c39f9fbd3 --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/convert.ts @@ -0,0 +1,97 @@ +import { Command } from '@contentstack/cli-command'; +import { cliux, flags, FlagInput } from '@contentstack/cli-utilities'; +import { getAdapter } from '../../adapters/registry'; +import { inferWorkspace, patchManifest, toWorkspaceRelative } from '../../lib/manifest'; + +export default class MigrateConvert extends Command { + static description = 'Convert a legacy CMS export to a Contentstack import bundle'; + + static examples = [ + '$ csdx migrate:convert --legacy contentful --input ./export.json --output ./contentstack-import', + '$ csdx migrate:convert -l contentful -i ../references/contentful-export-*.json -o ./contentstack-import -m en-US', + ]; + static hidden = true; + static flags: FlagInput = { + legacy: flags.string({ + char: 'l', + description: 'Legacy CMS source (contentful)', + required: true, + options: ['contentful'], + }), + input: flags.string({ + char: 'i', + description: 'Path to legacy export JSON (e.g. Contentful export)', + }), + output: flags.string({ + char: 'o', + description: 'Parent output directory; bundle written to /bundle', + default: './contentstack-import', + }), + 'master-locale': flags.string({ + char: 'm', + description: 'Destination master locale code', + }), + affix: flags.string({ + char: 'a', + description: 'Content-type UID prefix', + default: '', + }), + verbose: flags.boolean({ + char: 'v', + description: 'Verbose conversion logs', + default: false, + }), + workspace: flags.string({ + char: 'w', + description: 'Migration workspace root for migration-manifest.json', + }), + org: flags.string({ + description: + 'Organization UID for migrating marketplace `app` fields (e.g. Cloudinary). ' + + 'Optional: defaults to your csdx org, or prompts when you belong to several.', + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateConvert); + + try { + const adapter = getAdapter(flags.legacy); + const input = flags.input ?? (await cliux.prompt('Path to Contentful export JSON')); + + const result = await adapter.convert({ + input, + outputDir: flags.output, + masterLocale: flags['master-locale'], + affix: flags.affix, + verbose: flags.verbose, + orgUid: flags.org, + }); + + const workspace = inferWorkspace({ + workspace: flags.workspace, + output: flags.output, + input, + }); + + await patchManifest( + workspace, + { + legacy: flags.legacy, + convert: { + completedAt: new Date().toISOString(), + bundleDir: toWorkspaceRelative(workspace, result.bundleDir), + masterLocale: flags['master-locale'], + affix: flags.affix || undefined, + stats: result.stats, + }, + }, + { legacy: flags.legacy }, + ); + + this.log(`✓ Bundle ready: ${result.bundleDir}`); + } catch (error) { + this.error(error instanceof Error ? error.message : String(error), { exit: 1 }); + } + } +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/create.ts b/packages/contentstack-external-migrate/src/commands/migrate/create.ts new file mode 100644 index 000000000..a58339976 --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/create.ts @@ -0,0 +1,740 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import axios from 'axios'; +import { Command } from '@contentstack/cli-command'; +import { cliux, flags, FlagInput } from '@contentstack/cli-utilities'; +import { getAdapter } from '../../adapters/registry'; +import { + createBranch, + createStack, + ensureWebhooks, + fetchOrganizations, + fetchStackBranches, + provisionStackCredentials, + resolveSession, + sanitizeBranchUid, +} from '../../lib/create-stack'; +import { + fetchContentfulEnvironments, + fetchContentfulOrgName, + fetchContentfulSpaces, +} from '../../adapters/contentful/export'; +import { spawnCsdx } from '../../lib/csdx-spawn'; +import { buildStacksImportArgs } from './import'; +import { parseJsonLoose } from '../../lib/parse-json-loose'; +import { clearStaleImportState } from '../../lib/clear-import-state'; +import { localDateStamp } from '../../lib/local-date'; +import { inferWorkspace, patchManifest, stackApiKeyPrefix, toWorkspaceRelative } from '../../lib/manifest'; + +export default class MigrateCreate extends Command { + static description = 'Convert a legacy export, create a new stack in an organization, and import into it'; + + static examples = [ + '$ csdx migrate:create --legacy contentful --input ./export.json --org bltOrgUid', + '$ csdx migrate:create -l contentful -i ./export.json --org bltOrgUid --stack-name "My Site"', + '$ CONTENTFUL_MANAGEMENT_TOKEN=... csdx migrate:create -l contentful --space-id SPACE_ID --org bltOrgUid', + ]; + + static flags: FlagInput = { + source: flags.string({ + char: 'l', + description: 'Legacy CMS source (contentful)', + required: true, + options: ['contentful'], + }), + 'space-id': flags.string({ + description: 'Contentful space ID — export from Contentful first (use this OR --input)', + }), + 'source-token': flags.string({ + description: 'Sorce CMA token (prefer CONTENTFUL_MANAGEMENT_TOKEN env)', + }), + 'download-assets': flags.boolean({ + description: 'Download asset binaries during export (with --space-id)', + default: false, + }), + 'include-drafts': flags.boolean({ + description: 'Include draft entries in export (with --space-id)', + default: false, + }), + 'include-archived': flags.boolean({ + description: 'Include archived entries in export (with --space-id)', + default: false, + }), + 'org-uid': flags.string({ + description: 'Contentstack organization uid — a new stack is created here (prompts with a list if omitted)', + }), + output: flags.string({ + description: 'Parent output directory; bundle written to /bundle', + default: './output-dir', + }), + affix: flags.string({ + description: 'Content-type UID prefix', + default: 'CS', + }), + 'invite-users': flags.boolean({ + description: + 'Invite Contentful space members into the new stack with their mapped roles (sends invite emails). On by default; pass --no-invite-users to only write the users-mapping.json report.', + default: true, + allowNo: true, + }), + yes: flags.boolean({ + char: 'y', + description: 'Skip import confirmation prompts', + default: true, + allowNo: true, + }), + workspace: flags.string({ + description: 'Migration workspace root for migration-manifest.json', + default: './output-dir', + }), + input: flags.string({ + char: 'i', + description: 'Path to legacy export JSON (use this OR --space-id)', + hidden: true, + }), + 'cf-org-id': flags.string({ + description: + 'Contentful ORG id — migrate EVERY space the token can access in that org (one stack per space). Ignored if --space-id is given.', + hidden: true, + }), + 'stack-name': flags.string({ + description: 'New stack name (default: "Contentful Migration ")', + hidden: true, + }), + branch: flags.string({ + description: 'Branch alias for branch-aware import', + hidden: true, + }), + verbose: flags.boolean({ + description: 'Verbose logs', + default: false, + hidden: true, + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateCreate); + + try { + const adapter = getAdapter(flags.legacy); + + // Destination Contentstack org (shared across every migrated space). + let orgUid = flags.org; + if (!orgUid) { + const orgs = await fetchOrganizations(); + if (!orgs.length) { + this.error('No organizations found for your account. Pass --org .', { exit: 1 }); + } + orgUid = await cliux.inquire({ + type: 'list', + name: 'org', + message: 'Select the destination organization', + choices: orgs.map((o) => ({ name: `${o.name} (${o.uid})`, value: o.uid })), + }); + } + + // --input: a single local export JSON (no Contentful live API). + if (flags.input || (!flags['space-id'] && !flags['cf-org-id'])) { + let input = flags.input; + if (!input) input = await cliux.prompt('Path to Contentful export JSON'); + await this.migrateSpace({ adapter, flags, orgUid, input, outputRoot: flags.output }); + return; + } + + // Resolve the Contentful management token (shared) for live-API discovery. + let managementToken = + flags['management-token'] ?? process.env.CONTENTFUL_MANAGEMENT_TOKEN ?? readContentfulCliToken(); + if (!managementToken) { + managementToken = await cliux.prompt( + 'Contentful management token (not found in --management-token, CONTENTFUL_MANAGEMENT_TOKEN, or contentful login)', + ); + } + + // Build the list of spaces to migrate. --space-id takes precedence over + // --cf-org-id (which migrates EVERY space the token can access in that org). + let spaces: Array<{ id: string; name: string }>; + if (flags['space-id']) { + if (flags['cf-org-id']) { + this.log('ℹ Both --space-id and --cf-org-id given — using --space-id only.'); + } + const name = await fetchContentfulSpaceName(flags['space-id'], managementToken); + spaces = [{ id: flags['space-id'], name: name || flags['space-id'] }]; + } else { + const orgId = flags['cf-org-id'] as string; + const orgName = await fetchContentfulOrgName(orgId, managementToken); + spaces = await fetchContentfulSpaces(orgId, managementToken); + this.log(`Contentful Org name: ${orgName || orgId}`); + this.log(`Total space count: ${spaces.length}`); + if (!spaces.length) { + this.error(`No spaces found in Contentful org ${orgId} for this token.`, { exit: 1 }); + } + this.log(`Spaces: ${spaces.map((s) => s.name).join(', ')}`); + } + + // Migrate each space into its own stack, one after another. A failure in + // one space does NOT stop the rest — record it and continue, then print a + // roll-up at the end. + const multiSpace = spaces.length > 1; + const results: Array<{ space: string; ok: boolean; stackName?: string; apiKey?: string; error?: string }> = []; + let idx = 0; + for (const sp of spaces) { + idx += 1; + this.log( + `\n═══ Migrating space "${sp.name}" (${sp.id})${multiSpace ? ` · ${idx} of ${spaces.length}` : ''} ═══`, + ); + // Each space gets its own output subdir + uses the space name as the + // stack name; --stack-name is honored only for a single target. + const outputRoot = multiSpace ? path.join(flags.output, sanitizeBranchUid(sp.name) || sp.id) : flags.output; + try { + const res = await this.migrateSpace({ + adapter, + flags, + orgUid, + spaceId: sp.id, + spaceName: sp.name, + managementToken, + outputRoot, + stackNameOverride: multiSpace ? undefined : flags['stack-name'], + }); + results.push({ space: sp.name, ok: true, stackName: res.stackName, apiKey: res.apiKey }); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + this.log(`✗ Space "${sp.name}" failed: ${msg}`); + results.push({ space: sp.name, ok: false, error: msg }); + if (!multiSpace) { + // Single target — surface the failure as a non-zero exit. + this.error(msg, { exit: 1 }); + } + } + } + + // Roll-up across all spaces (only meaningful for multi-space org runs). + if (multiSpace) { + const ok = results.filter((r) => r.ok); + this.log(`\n═══ Org migration summary — ${ok.length}/${results.length} spaces succeeded ═══`); + for (const r of results) { + this.log(r.ok ? ` ✓ ${r.space} → ${r.stackName} (${r.apiKey})` : ` ✗ ${r.space} — ${r.error}`); + } + if (ok.length < results.length) { + this.error(`${results.length - ok.length} space(s) failed to migrate.`, { exit: 1 }); + } + } + } catch (error) { + this.error(error instanceof Error ? error.message : String(error), { exit: 1 }); + } + } + + /** + * Migrate ONE source (a Contentful space, or a local --input export) into a + * new Contentstack stack: export envs → convert (with summary) → create stack + * → branches → import (workflows + webhooks) → tokens → users → manifest. + */ + private async migrateSpace(opts: { + adapter: ReturnType; + flags: any; + orgUid: string; + outputRoot: string; + spaceId?: string; + spaceName?: string; + managementToken?: string; + input?: string; + stackNameOverride?: string; + }): Promise<{ stackName: string; apiKey: string }> { + const { adapter, flags, orgUid, outputRoot } = opts; + const cfSpaceId = opts.spaceId; + const cfManagementToken = opts.managementToken; + + // ── Build jobs: one per Contentful environment (space mode), or a single + // job from the local --input file. master → main; other envs → branches. + const jobs: Array<{ exportFile: string; env?: string; branch?: string }> = []; + if (cfSpaceId) { + let envs: string[] = []; + try { + envs = await fetchContentfulEnvironments(cfSpaceId, cfManagementToken); + } catch (err) { + throw new Error( + `Could not list Contentful environments for space ${cfSpaceId}: ${ + err instanceof Error ? err.message : String(err) + }. Re-run, or check your network/token.`, + ); + } + if (!envs.length) envs = ['master']; + this.log(`Contentful environments: ${envs.join(', ')}`); + for (const env of envs) { + const branch = env === 'master' ? 'main' : sanitizeBranchUid(env); + const exportResult = await adapter.export({ + outputDir: path.join(outputRoot, sanitizeBranchUid(env)), + spaceId: cfSpaceId, + managementToken: cfManagementToken, + environmentId: env, + downloadAssets: flags['download-assets'], + includeDrafts: flags['include-drafts'], + includeArchived: flags['include-archived'], + verbose: flags.verbose, + }); + this.log(`✓ Exported env "${env}" → branch "${branch}"`); + jobs.push({ exportFile: exportResult.exportFile, env, branch }); + } + } else { + jobs.push({ exportFile: opts.input as string, branch: flags.branch }); + } + + for (const j of jobs) { + if (!fs.existsSync(j.exportFile)) { + throw new Error(`Export file not found: ${j.exportFile}`); + } + } + + // Master locale comes from the main-branch (master) job; the new stack is + // created with it and every convert uses the same so locales align. + const masterJob = jobs.find((j) => (j.branch ?? 'main') === 'main') ?? jobs[0]; + const masterLocale = detectMasterLocale(masterJob.exportFile); + + // 1. Convert EVERY job first (no stack needed). convert prints each bundle's + // per-module conversion summary, so the operator sees what converted BEFORE + // any stack is created. + const multi = jobs.length > 1; + const converted: Array<{ + job: { exportFile: string; env?: string; branch?: string }; + branch: string; + bundleDir: string; + }> = []; + const stats = { locales: 0, contentTypes: 0, entries: 0 }; + for (const j of jobs) { + const branch = j.branch ?? 'main'; + const outDir = multi ? path.join(outputRoot, branch) : outputRoot; + const result = await adapter.convert({ + input: j.exportFile, + outputDir: outDir, + masterLocale, + affix: flags.affix, + verbose: flags.verbose, + orgUid, + }); + converted.push({ job: j, branch, bundleDir: result.bundleDir }); + stats.contentTypes += result.stats.contentTypes; + stats.entries += result.stats.entries; + stats.locales = Math.max(stats.locales, result.stats.locales); + } + + // 2. Create the destination stack (empty main branch). + const stackName = opts.stackNameOverride || opts.spaceName || `Contentful Migration ${localDateStamp()}`; + const created = await createStack({ + orgUid, + name: stackName, + masterLocale: masterLocale.toLowerCase(), + verbose: flags.verbose, + }); + let region = ''; + try { + region = resolveSession().region; + } catch { + // cosmetic + } + this.log(`✓ Stack created · via ${created.via}`); + this.printStackSummary(stackName, created.apiKey, region); + + // 3. Branch handling depends on whether the org has the Branches feature. + // A branch-enabled stack has a `main` branch; a branch-disabled one has no + // branches at all (the classic single workspace, addressed without --branch). + const stackBranches = await fetchStackBranches(created.apiKey).catch(() => [] as string[]); + const branchesEnabled = stackBranches.includes('main'); + + const extraBranches = [ + ...new Set(jobs.map((j) => j.branch).filter((b): b is string => Boolean(b) && b !== 'main')), + ]; + + // Decide which converted bundles actually get imported. Branch-disabled + // stacks have no place to isolate non-master environments, so we migrate + // ONLY the master environment (default workspace) and skip the rest. + let toImport = converted; + if (!branchesEnabled) { + toImport = converted.filter((c) => c.job === masterJob); + const skipped = converted + .filter((c) => c.job !== masterJob) + .map((c) => c.job.env) + .filter(Boolean); + if (skipped.length) { + this.log( + `⚠ Branches not enabled on this org — migrating ONLY the master environment ` + + `into the default workspace. Skipping: ${skipped.join(', ')}. ` + + `Enable the Branches feature to migrate every environment into its own branch.`, + ); + } else { + this.log('ℹ Branches not enabled on this org — importing into the default workspace (no branch).'); + } + } else { + // Create the non-main branches from the EMPTY main, before any import. + for (const b of extraBranches) { + this.log(`Creating branch "${b}" from main…`); + await createBranch(created.apiKey, b, 'main'); + this.log(`✓ Branch "${b}" ready`); + } + } + + // 4. Import each pre-converted bundle into its branch (master → main). + let lastBundleDir = ''; + for (const c of toImport) { + lastBundleDir = c.bundleDir; + + // Workflows: not in the static export → fetch this env's workflow + // definitions from the live CF API and write them into the bundle so the + // csdx workflows module imports them (after content-types + roles). + if (cfSpaceId) { + try { + const { buildWorkflowsBundle } = await import('../../services/contentful/workflows'); + const wf = await buildWorkflowsBundle({ + spaceId: cfSpaceId, + environmentId: c.job.env ?? 'master', + managementToken: cfManagementToken, + bundleDir: c.bundleDir, + affix: flags.affix, + }); + if (wf.total) this.log(`✓ Workflows mapped — ${wf.total}: ${wf.workflows.join(', ')}`); + } catch (err) { + this.log(`⚠ Workflow mapping skipped: ${err instanceof Error ? err.message : String(err)}`); + } + } + + // On a branch-disabled stack there is no `main`/branch to target — omit + // --branch so csdx imports into the default workspace. + const targetBranch = branchesEnabled ? c.job.branch : undefined; + const branchLabel = branchesEnabled ? c.branch : 'default (no branch)'; + const args = buildStacksImportArgs(created.apiKey, c.bundleDir, { + yes: flags.yes, + branch: targetBranch, + }); + // Wipe csdx's stale import state so each branch import starts clean and + // never falsely skips webhooks/custom-roles from a previous run's mapper. + clearStaleImportState(c.bundleDir); + + this.log(`─── import → ${branchLabel} ──────────────────────`); + this.log(`Running: csdx ${args.join(' ')}`); + const code = await spawnCsdx(args); + this.log('────────────────────────────────────────────────────────'); + if (code !== 0) { + throw new Error(`Import failed for ${branchLabel} (exit ${code})`); + } + + // csdx's webhooks module imports only the first 5 (concurrency bug) and + // falsely skips the rest — backfill any missing ones via CMA. + try { + const wh = await ensureWebhooks(created.apiKey, c.bundleDir); + if (wh.created.length) { + this.log(`✓ Webhooks backfilled via CMA — ${wh.created.length} created (csdx imported ${wh.skipped.length})`); + } + if (wh.failed.length) { + this.log(`⚠ ${wh.failed.length} webhook(s) failed: ${wh.failed.map((f) => f.name).join(', ')}`); + } + } catch (err) { + this.log(`⚠ Webhook backfill skipped: ${err instanceof Error ? err.message : String(err)}`); + } + + // Per-branch live-API objects (Releases, Scheduled actions, Tasks): for + // THIS Contentful env → THIS Contentstack branch. Read this import's + // id→uid remap from its backup (before the next branch wipes it), + // translate, and create them in this branch (branch header). Skip-safe. + if (cfSpaceId) { + await this.migrateBranchLiveObjects({ + spaceId: cfSpaceId, + managementToken: cfManagementToken, + apiKey: created.apiKey, + env: c.job.env ?? 'master', + branch: branchesEnabled ? (c.job.branch ?? 'main') : undefined, + bundleDir: c.bundleDir, + locale: masterLocale.toLowerCase(), + }); + } + } + + // Write metadata/credentials into the MAIN branch's bundle (the master + // job), not whichever branch happened to import last. + const mainBundleDir = converted.find((c) => c.job === masterJob)?.bundleDir ?? lastBundleDir; + + // 4. Provision ONE delivery + preview token across ALL environments, write metadata. + const creds = await provisionStackCredentials({ + apiKey: created.apiKey, + uid: created.uid, + bundleDir: mainBundleDir, + tokenName: `${stackName} delivery token`, + }); + if (creds.deliveryToken) { + this.log( + `✓ Delivery token created — publishing environment "${creds.environment}"${ + creds.branches.length ? `, branches: ${creds.branches.join(', ')}` : '' + }`, + ); + } else { + this.log( + `⚠ Could not create delivery token${ + creds.deliveryTokenError ? `: ${creds.deliveryTokenError}` : '' + } (create it in the UI).`, + ); + } + if (creds.previewToken) { + this.log('✓ Preview token created'); + } + if (creds.livePreviewEnabled) { + this.log('✓ Live Preview enabled'); + } + const metadata = { + org_id: orgUid, + stack_id: creds.stackUid ?? created.apiKey, + branches: creds.branches, // main first; empty on branch-disabled stacks + environment: creds.environment, + delivery_token: creds.deliveryToken, + preview_token: creds.previewToken, + }; + const metadataPath = path.join(mainBundleDir, 'metadata.json'); + fs.writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}\n`, 'utf8'); + this.log(`✓ Bundle metadata written: ${metadataPath}`); + + // 4b. Users: map Contentful space members → Contentstack stack users with + // their EXACT mapped roles (live CF Management API; needs --space-id). The + // stack roles exist now (imported above). Writes a report always; only + // sends invite emails with --invite-users. + if (cfSpaceId) { + try { + const { migrateUsers } = await import('../../services/contentful/users'); + const res = await migrateUsers({ + spaceId: cfSpaceId, + managementToken: cfManagementToken, + apiKey: created.apiKey, + bundleDir: mainBundleDir, + invite: flags['invite-users'], + }); + const reportPath = path.join(mainBundleDir, 'users', 'users-mapping.json'); + if (flags['invite-users']) { + this.log( + `✓ Users invited — ${res.invited?.length ?? 0} sent${ + res.failed?.length ? `, ${res.failed.length} failed` : '' + }${res.skipped.length ? `, ${res.skipped.length} skipped (no mapped role)` : ''}`, + ); + for (const f of res.failed ?? []) this.log(` ⚠ ${f.email}: ${f.error}`); + // Strict-SSO orgs reject email invites — users must come through the + // IdP. Surface that hint instead of leaving a raw API error. + const ssoBlocked = (res.failed ?? []).some((f) => + /sso|strict|identity provider|not allowed|forbidden/i.test(f.error), + ); + if (ssoBlocked) { + this.log( + ' ℹ This org appears to enforce SSO. Invited users must be provisioned through your ' + + 'identity provider (SAML/SCIM); the role mapping is recorded in users-mapping.json for that.', + ); + } + } else { + this.log( + `✓ Users mapped — ${res.invitable.length} invitable, ${res.skipped.length} skipped (no mapped role). ` + + `Report: ${reportPath}. Re-run with --invite-users to send invites.`, + ); + } + } catch (err) { + this.log(`⚠ User migration skipped: ${err instanceof Error ? err.message : String(err)}`); + } + } + + // 5. Record progress. + const workspace = inferWorkspace({ + workspace: flags.workspace, + output: outputRoot, + input: masterJob.exportFile, + }); + await patchManifest( + workspace, + { + legacy: flags.legacy, + convert: { + completedAt: new Date().toISOString(), + bundleDir: toWorkspaceRelative(workspace, mainBundleDir), + masterLocale, + affix: flags.affix || undefined, + stats, + }, + import: { + completedAt: new Date().toISOString(), + stackApiKeyPrefix: stackApiKeyPrefix(created.apiKey), + status: 'completed', + }, + }, + { legacy: flags.legacy }, + ); + + this.log(`✓ Migration complete`); + this.printStackSummary(stackName, created.apiKey, region); + return { stackName, apiKey: created.apiKey }; + } + + /** Boxed summary of the created stack — shown after creation and at the end. */ + /** + * Per-branch live-API objects: Releases, Scheduled actions, Tasks. Run right + * after a branch's import (entries exist + its uid-remap backup is fresh) for + * THIS Contentful env → THIS Contentstack branch. All best-effort + skip-safe. + */ + private async migrateBranchLiveObjects(opts: { + spaceId: string; + managementToken?: string; + apiKey: string; + env: string; + branch?: string; + bundleDir: string; + locale: string; + }): Promise { + const { migrateReleases, buildEntryContentTypeMap, readImportUidMaps } = + await import('../../services/contentful/releases'); + // This branch's import id→uid remap (newest _backup_*, before the next + // branch's clearStaleImportState removes it). + let uidMaps: { entryUidMap: Record; assetUidMap: Record } = { + entryUidMap: {}, + assetUidMap: {}, + }; + try { + const backups = fs + .readdirSync(process.cwd()) + .filter((n) => /^_backup_\d+$/.test(n)) + .map((n) => ({ n, t: fs.statSync(n).mtimeMs })) + .sort((a, b) => b.t - a.t); + if (backups.length) uidMaps = readImportUidMaps(backups[0].n); + } catch { + // best-effort — items that can't be translated are skipped + } + const entryCtUid = buildEntryContentTypeMap(opts.bundleDir); + const where = opts.branch ? `branch "${opts.branch}"` : 'default workspace'; + + // Releases + try { + const rel = await migrateReleases({ + spaceId: opts.spaceId, + environmentId: opts.env, + managementToken: opts.managementToken, + apiKey: opts.apiKey, + bundleDir: opts.bundleDir, + entryUidMap: uidMaps.entryUidMap, + assetUidMap: uidMaps.assetUidMap, + locale: opts.locale, + branch: opts.branch, + }); + if (rel.total) { + const items = rel.created.reduce((n, r) => n + r.items, 0); + this.log( + `✓ Releases → ${where} — ${rel.created.length}/${rel.total} created (${items} items); deploy from the UI`, + ); + for (const f of rel.failed) this.log(` ⚠ release "${f.name}": ${f.error}`); + } + } catch (err) { + this.log(`⚠ Release migration skipped (${where}): ${err instanceof Error ? err.message : String(err)}`); + } + + // Scheduled actions + try { + const { migrateScheduledActions } = await import('../../services/contentful/scheduled'); + const sch = await migrateScheduledActions({ + spaceId: opts.spaceId, + environmentId: opts.env, + managementToken: opts.managementToken, + apiKey: opts.apiKey, + entryUidMap: uidMaps.entryUidMap, + assetUidMap: uidMaps.assetUidMap, + entryCtUid, + environment: 'master', + locale: opts.locale, + branch: opts.branch, + }); + if (sch.total) { + this.log( + `✓ Scheduled actions → ${where} — ${sch.scheduled} scheduled${ + sch.skipped ? `, ${sch.skipped} skipped (past / not migrated)` : '' + }${sch.failed.length ? `, ${sch.failed.length} failed` : ''}`, + ); + } + } catch (err) { + this.log(`⚠ Scheduled-actions migration skipped (${where}): ${err instanceof Error ? err.message : String(err)}`); + } + + // Tasks → entry comments + try { + const { migrateTasks } = await import('../../services/contentful/tasks'); + const tk = await migrateTasks({ + spaceId: opts.spaceId, + environmentId: opts.env, + managementToken: opts.managementToken, + apiKey: opts.apiKey, + entryUidMap: uidMaps.entryUidMap, + entryCtUid, + locale: opts.locale, + branch: opts.branch, + }); + if (tk.entriesWithTasks || tk.commentsCreated || tk.skipped) { + this.log( + `✓ Tasks → entry comments (${where}) — ${tk.commentsCreated} comment(s) on ${tk.entriesWithTasks} entr${ + tk.entriesWithTasks === 1 ? 'y' : 'ies' + }${tk.skipped ? `, ${tk.skipped} skipped (entry not migrated)` : ''}${tk.failed ? `, ${tk.failed} failed` : ''}`, + ); + } + } catch (err) { + this.log(`⚠ Task migration skipped (${where}): ${err instanceof Error ? err.message : String(err)}`); + } + } + + private printStackSummary(stackName: string, apiKey: string, region: string): void { + const line = '──────────────────────────────────────'; + this.log(line); + this.log(` Stack name : ${stackName}`); + this.log(` Stack key : ${apiKey}`); + if (region) this.log(` Region : ${region}`); + this.log(line); + } +} + +/** + * Best-effort fetch of the Contentful space's name (Management API), used as the + * default Contentstack stack name. Silent on ANY failure (bad token, network, + * EU residency host, etc.) — the caller falls back to the dated name, so the + * user never sees an error from this lookup. + */ +async function fetchContentfulSpaceName(spaceId?: string, token?: string): Promise { + if (!spaceId || !token) return undefined; + try { + const res = await axios.get(`https://api.contentful.com/spaces/${spaceId}`, { + timeout: 30000, + headers: { Authorization: `Bearer ${token}` }, + }); + const name = res?.data?.name; + return typeof name === 'string' && name.trim() ? name.trim() : undefined; + } catch { + return undefined; + } +} + +/** + * Reuse the CMA token saved by `contentful login` (~/.contentfulrc.json), so a + * logged-in user need not pass --management-token. Returns undefined if absent. + */ +function readContentfulCliToken(): string | undefined { + try { + const rc = path.join(os.homedir(), '.contentfulrc.json'); + if (!fs.existsSync(rc)) return undefined; + const data = JSON.parse(fs.readFileSync(rc, 'utf8')); + return data?.managementToken || data?.cmaToken || undefined; + } catch { + return undefined; + } +} + +/** + * Pick the Contentful default locale code from the export (the locale object + * with `default: true`). Falls back to the first locale. Throws if there are none. + */ +function detectMasterLocale(input: string): string { + const raw = fs.readFileSync(input, 'utf8'); + let locales: Array<{ code?: string; default?: boolean }> = []; + try { + locales = parseJsonLoose(raw)?.locales ?? []; + } catch { + // fall through + } + const def = locales.find((l) => l?.default === true)?.code; + if (def) return def; + if (locales[0]?.code) return locales[0].code as string; + throw new Error('Source export has no locales — cannot determine master locale.'); +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/export.ts b/packages/contentstack-external-migrate/src/commands/migrate/export.ts new file mode 100644 index 000000000..658fddf46 --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/export.ts @@ -0,0 +1,102 @@ +import { Command } from '@contentstack/cli-command'; +import { cliux, flags, FlagInput } from '@contentstack/cli-utilities'; +import { getAdapter } from '../../adapters/registry'; +import { inferWorkspace, patchManifest, toWorkspaceRelative } from '../../lib/manifest'; + +export default class MigrateExport extends Command { + static description = 'Export content from a legacy CMS (e.g. Contentful)'; + + static examples = [ + '$ csdx migrate:export --legacy contentful --space-id YOUR_SPACE --output ./migration-workspace', + '$ CONTENTFUL_MANAGEMENT_TOKEN=... csdx migrate:export -l contentful --space-id YOUR_SPACE -o ./migration-workspace', + '$ csdx migrate:export -l contentful --space-id YOUR_SPACE --download-assets --include-drafts', + ]; + static hidden = true; + static flags: FlagInput = { + legacy: flags.string({ + char: 'l', + description: 'Legacy CMS source (contentful)', + required: true, + options: ['contentful'], + }), + 'space-id': flags.string({ + description: 'Contentful space ID', + }), + 'management-token': flags.string({ + description: 'Contentful CMA token (prefer CONTENTFUL_MANAGEMENT_TOKEN env)', + }), + output: flags.string({ + char: 'o', + description: 'Migration workspace root (writes export.json here)', + default: './migration-workspace', + }), + 'download-assets': flags.boolean({ + description: 'Download asset binaries via Contentful CLI', + default: false, + }), + 'include-drafts': flags.boolean({ + description: 'Include draft entries in export', + default: false, + }), + 'include-archived': flags.boolean({ + description: 'Include archived entries in export', + default: false, + }), + verbose: flags.boolean({ + char: 'v', + description: 'Verbose export logs', + default: false, + }), + workspace: flags.string({ + char: 'w', + description: 'Migration workspace root for migration-manifest.json (defaults to --output)', + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateExport); + + try { + const adapter = getAdapter(flags.legacy); + + const spaceId = flags['space-id'] ?? (await cliux.prompt('Contentful space ID')); + + const managementToken = + flags['management-token'] ?? + process.env.CONTENTFUL_MANAGEMENT_TOKEN ?? + (await cliux.prompt('Contentful management token (prefer CONTENTFUL_MANAGEMENT_TOKEN env)')); + + const result = await adapter.export({ + outputDir: flags.output, + spaceId, + managementToken, + downloadAssets: flags['download-assets'], + includeDrafts: flags['include-drafts'], + includeArchived: flags['include-archived'], + verbose: flags.verbose, + }); + + const workspace = inferWorkspace({ workspace: flags.workspace, output: flags.output }); + + await patchManifest( + workspace, + { + legacy: flags.legacy, + source: { + spaceId, + exportedAt: new Date().toISOString(), + exportFile: toWorkspaceRelative(workspace, result.exportFile), + }, + }, + { legacy: flags.legacy }, + ); + + this.log(`✓ Export ready: ${result.exportFile}`); + if (result.assetsDir) { + this.log(` Assets downloaded under: ${result.assetsDir}`); + } + } catch (error) { + this.error(error instanceof Error ? error.message : String(error), { exit: 1 }); + } + } +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/import.ts b/packages/contentstack-external-migrate/src/commands/migrate/import.ts new file mode 100644 index 000000000..82952bf77 --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/import.ts @@ -0,0 +1,314 @@ +import fs from 'fs'; +import path from 'path'; +import { Command } from '@contentstack/cli-command'; +import { cliux, flags, FlagInput } from '@contentstack/cli-utilities'; +import { assertBundleDir } from '../../lib/bundle'; +import { inferWorkspace, patchManifest, stackApiKeyPrefix, toWorkspaceRelative } from '../../lib/manifest'; +import { spawnCsdx } from '../../lib/csdx-spawn'; +import { + createStack, + ensureWebhooks, + fetchOrganizations, + fetchStackBranches, + provisionStackCredentials, + resolveSession, +} from '../../lib/create-stack'; +import { parseJsonLoose } from '../../lib/parse-json-loose'; +import { + readConversionSummary, + renderConversionSummary, + renderContentTypeFieldSummary, +} from '../../lib/conversion-summary'; +import { clearStaleImportState } from '../../lib/clear-import-state'; +import { localDateStamp } from '../../lib/local-date'; + +export interface ImportFlags { + yes?: boolean; + 'skip-audit'?: boolean; + module?: string; + branch?: string; +} + +/** Build argv for `csdx cm:stacks:import` from migrate:import flags. */ +export function buildStacksImportArgs(stackApiKey: string, dataDir: string, flags: ImportFlags): string[] { + const args = ['cm:stacks:import', '--stack-api-key', stackApiKey, '--data-dir', dataDir]; + + if (flags.yes !== false) { + args.push('--yes'); + } + if (flags['skip-audit']) { + args.push('--skip-audit'); + } + if (flags.module) { + args.push('--module', flags.module); + } + if (flags.branch) { + args.push('--branch', flags.branch); + } + + return args; +} + +export default class MigrateImport extends Command { + static description = + 'Import a Contentstack bundle — into an existing stack (--stack-api-key) or a new one created in an organization (--org)'; + + static examples = [ + '$ csdx migrate:import --stack-api-key bltXXXX --data-dir ./contentstack-import/bundle', + '$ csdx migrate:import --org bltOrgUid --data-dir ./contentstack-import/bundle', + '$ csdx migrate:import -d ./contentstack-import/bundle # prompts for org, creates a stack', + ]; + static hidden = true; + static flags: FlagInput = { + 'stack-api-key': flags.string({ + char: 'k', + description: 'Destination stack API key (import into an EXISTING stack)', + }), + org: flags.string({ + description: + 'Destination organization uid — create a new stack here and import into it (used when --stack-api-key is omitted; prompts with a list if omitted)', + }), + 'stack-name': flags.string({ + description: 'Name for the new stack (default: "Contentful Migration ")', + }), + 'data-dir': flags.string({ + char: 'd', + description: 'Path to convert output bundle directory', + }), + yes: flags.boolean({ + char: 'y', + description: 'Skip import confirmation prompts', + default: true, + allowNo: true, + }), + 'skip-audit': flags.boolean({ + description: 'Skip audit-fix before import', + default: false, + }), + module: flags.string({ + description: 'Import only a module (e.g. entries)', + }), + branch: flags.string({ + description: 'Branch alias for branch-aware import', + }), + workspace: flags.string({ + char: 'w', + description: 'Migration workspace root for migration-manifest.json', + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateImport); + + try { + const dataDir = flags['data-dir'] ?? (await cliux.prompt('Path to convert output bundle directory')); + + assertBundleDir(dataDir); + + // Show the per-module conversion summary (written by convert) BEFORE we + // create/touch a stack, so the operator sees what will be imported. + const summary = readConversionSummary(dataDir); + if (summary) { + this.log(`\n${renderConversionSummary(summary, 'Conversion summary (to be imported)')}\n`); + if (summary.contentTypeFields?.length) { + this.log(`\n${renderContentTypeFieldSummary(summary.contentTypeFields)}\n`); + } + } + + // Target stack: import into an existing one (--stack-api-key) OR create a + // fresh stack in an organization (--org / prompt) and import into that. + let stackKey = flags['stack-api-key']; + let createdStackName: string | undefined; + let createdStackUid: string | undefined; + let createdOrgUid: string | undefined; + let region = ''; + + if (!stackKey) { + let orgUid = flags.org; + if (!orgUid) { + const orgs = await fetchOrganizations(); + if (!orgs.length) { + this.error('No organizations found for your account. Pass --org or --stack-api-key .', { + exit: 1, + }); + } + orgUid = await cliux.inquire({ + type: 'list', + name: 'org', + message: 'Select the destination organization (a new stack is created here)', + choices: orgs.map((o) => ({ name: `${o.name} (${o.uid})`, value: o.uid })), + }); + } + + const masterLocale = detectMasterLocaleFromBundle(dataDir); + const stackName = flags['stack-name'] || `Contentful Migration ${localDateStamp()}`; + const created = await createStack({ + orgUid, + name: stackName, + masterLocale, + verbose: false, + }); + stackKey = created.apiKey; + createdStackName = stackName; + createdStackUid = created.uid; + createdOrgUid = orgUid; + try { + region = resolveSession().region; + } catch { + // cosmetic + } + this.log(`✓ Stack created · via ${created.via}`); + this.printStackSummary(stackName, stackKey, region); + } + + // Guard a user-passed --branch: if that branch doesn't exist on the stack + // (e.g. --branch main on a Branches-disabled org), csdx import would fail. + // Drop it and import into the default workspace instead. + let effectiveBranch = flags.branch; + if (effectiveBranch) { + const stackBranches = await fetchStackBranches(stackKey).catch(() => [] as string[]); + if (!stackBranches.includes(effectiveBranch)) { + this.log( + `⚠ Branch "${effectiveBranch}" not found on the stack ` + + `(${stackBranches.length ? `available: ${stackBranches.join(', ')}` : 'Branches not enabled'}). ` + + `Importing into the default workspace.`, + ); + effectiveBranch = undefined; + } + } + + const args = buildStacksImportArgs(stackKey, dataDir, { + yes: flags.yes, + 'skip-audit': flags['skip-audit'], + module: flags.module, + branch: effectiveBranch, + }); + + // Wipe csdx's stale import state so a re-import never falsely skips + // webhooks/custom-roles recorded in a previous run's mapper. + clearStaleImportState(dataDir); + + this.log('─── csdx cm:stacks:import ──────────────────────────────'); + this.log(`Running: csdx ${args.join(' ')}`); + + const code = await spawnCsdx(args); + this.log('────────────────────────────────────────────────────────'); + + if (code !== 0) { + this.error(`Import failed (exit ${code})`, { exit: code }); + } + + // csdx's webhooks module only imports the first 5 (concurrency bug) and + // falsely skips the rest — backfill any missing ones via CMA. + if (!flags.module || flags.module === 'webhooks') { + await this.backfillWebhooks(stackKey, dataDir); + } + + const workspace = inferWorkspace({ workspace: flags.workspace, dataDir }); + await patchManifest(workspace, { + import: { + completedAt: new Date().toISOString(), + stackApiKeyPrefix: stackApiKeyPrefix(stackKey), + status: 'completed', + }, + convert: { + bundleDir: toWorkspaceRelative(workspace, dataDir), + }, + }); + + this.log(`✓ Import complete — ${stackApiKeyPrefix(stackKey)}`); + + // When we created the stack, provision delivery + preview tokens (the + // environment exists only now) and write bundle metadata.json. Best-effort. + if (createdStackName) { + const creds = await provisionStackCredentials({ + apiKey: stackKey, + uid: createdStackUid, + bundleDir: dataDir, + tokenName: `${createdStackName} delivery token`, + }); + if (creds.deliveryToken) { + this.log( + `✓ Delivery token created — publishing environment "${creds.environment}"${ + creds.branches.length ? `, branches: ${creds.branches.join(', ')}` : '' + }`, + ); + } else { + this.log( + `⚠ Could not create delivery token${ + creds.deliveryTokenError ? `: ${creds.deliveryTokenError}` : '' + } (create it in the UI).`, + ); + } + if (creds.previewToken) { + this.log('✓ Preview token created'); + } + if (creds.livePreviewEnabled) { + this.log('✓ Live Preview enabled'); + } + const metadata = { + org_id: createdOrgUid, + stack_id: creds.stackUid ?? stackKey, + branches: creds.branches, // main first; empty on branch-disabled stacks + environment: creds.environment, + delivery_token: creds.deliveryToken, + preview_token: creds.previewToken, + }; + const metadataPath = path.join(dataDir, 'metadata.json'); + fs.writeFileSync(metadataPath, `${JSON.stringify(metadata, null, 2)}\n`, 'utf8'); + this.log(`✓ Bundle metadata written: ${metadataPath}`); + + this.printStackSummary(createdStackName, stackKey, region); + } + } catch (error) { + this.error(error instanceof Error ? error.message : String(error), { exit: 1 }); + } + } + + /** + * Backfill webhooks csdx's import dropped (its module imports only the first 5 + * and falsely skips the rest). Creates the missing ones directly via CMA. + */ + private async backfillWebhooks(stackKey: string, dataDir: string): Promise { + try { + const wh = await ensureWebhooks(stackKey, dataDir); + if (wh.total === 0) return; + if (wh.created.length) { + this.log(`✓ Webhooks backfilled via CMA — ${wh.created.length} created (csdx imported ${wh.skipped.length})`); + } + if (wh.failed.length) { + this.log(`⚠ ${wh.failed.length} webhook(s) failed to create: ${wh.failed.map((f) => f.name).join(', ')}`); + } + } catch (err) { + this.log(`⚠ Webhook backfill skipped: ${err instanceof Error ? err.message : String(err)}`); + } + } + + /** Boxed summary of the created stack — shown after creation and at the end. */ + private printStackSummary(stackName: string, apiKey: string, region: string): void { + const line = '──────────────────────────────────────'; + this.log(line); + this.log(` Stack name : ${stackName}`); + this.log(` Stack key : ${apiKey}`); + if (region) this.log(` Region : ${region}`); + this.log(line); + } +} + +/** + * Read the master locale code from a converted bundle's + * locales/master-locale.json (the master is the locale with no fallback). + * Used to create the destination stack with the matching master language. + */ +function detectMasterLocaleFromBundle(dataDir: string): string { + try { + const p = path.join(dataDir, 'locales', 'master-locale.json'); + const data = parseJsonLoose(fs.readFileSync(p, 'utf8')); + const locales = Object.values(data || {}) as Array<{ code?: string; fallback_locale?: string }>; + const master = locales.find((l) => l && l.fallback_locale === '') || locales[0]; + if (master?.code) return String(master.code).toLowerCase(); + } catch { + // fall through to default + } + return 'en-us'; +} diff --git a/packages/contentstack-external-migrate/src/commands/migrate/status.ts b/packages/contentstack-external-migrate/src/commands/migrate/status.ts new file mode 100644 index 000000000..686cb9e21 --- /dev/null +++ b/packages/contentstack-external-migrate/src/commands/migrate/status.ts @@ -0,0 +1,31 @@ +import { Command } from '@contentstack/cli-command'; +import { flags, FlagInput } from '@contentstack/cli-utilities'; +import { formatMigrationStatus, inferWorkspace, MANIFEST_FILENAME, readManifest } from '../../lib/manifest'; + +export default class MigrateStatus extends Command { + static description = 'Show migration manifest and step status'; + + static examples = ['$ csdx migrate:status --workspace ./migration-workspace', '$ csdx migrate:status -w .']; + static hidden = true; + static flags: FlagInput = { + workspace: flags.string({ + char: 'w', + description: 'Migration workspace root (contains migration-manifest.json)', + default: './migration-workspace', + }), + }; + + async run(): Promise { + const { flags } = await this.parse(MigrateStatus); + const workspace = inferWorkspace({ workspace: flags.workspace }); + const manifest = await readManifest(workspace); + + if (!manifest) { + this.error(`No ${MANIFEST_FILENAME} found in ${workspace}. Run migrate:export or pass --workspace.`, { exit: 1 }); + } + + for (const line of formatMigrationStatus(manifest, workspace)) { + this.log(line); + } + } +} diff --git a/packages/contentstack-external-migrate/src/index.ts b/packages/contentstack-external-migrate/src/index.ts new file mode 100644 index 000000000..1c462560e --- /dev/null +++ b/packages/contentstack-external-migrate/src/index.ts @@ -0,0 +1,2 @@ +// Plugin entry — commands are discovered via oclif manifest from lib/commands/ +export {}; diff --git a/packages/contentstack-external-migrate/src/lib/bundle.ts b/packages/contentstack-external-migrate/src/lib/bundle.ts new file mode 100644 index 000000000..2fc026914 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/bundle.ts @@ -0,0 +1,17 @@ +import fs from 'fs'; +import path from 'path'; + +const REQUIRED_ENTRIES = ['content_types', 'locales', 'export-info.json'] as const; + +/** + * Fail fast when a path is not a valid convert output bundle. + */ +export function assertBundleDir(bundleDir: string): void { + for (const entry of REQUIRED_ENTRIES) { + if (!fs.existsSync(path.join(bundleDir, entry))) { + throw new Error( + `Invalid bundle at ${bundleDir}: missing ${entry}. Run migrate:convert first.`, + ); + } + } +} diff --git a/packages/contentstack-external-migrate/src/lib/clear-import-state.ts b/packages/contentstack-external-migrate/src/lib/clear-import-state.ts new file mode 100644 index 000000000..e602ce4dd --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/clear-import-state.ts @@ -0,0 +1,38 @@ +import fs from 'fs'; +import path from 'path'; + +/** + * `csdx cm:stacks:import` is idempotent via a local `mapper/` directory it writes + * into the data-dir (e.g. `mapper/webhooks/uid-mapping.json`). On a RE-import of + * the same bundle it then skips any object recorded there as "already exists" — + * even when the target is a brand-new, EMPTY stack — silently dropping webhooks, + * custom-roles, etc. (the "5 of 15 webhooks" bug). It also litters the CWD with + * `_backup_` copies. + * + * Clearing csdx's runtime state before each import makes every run start clean so + * nothing is falsely skipped. We remove ONLY csdx-generated state: + * - `/mapper` — the DIRECTORY csdx writes; NEVER our convert's + * `mapper.json` FILE (different name, untouched). + * - `/_backup_*` — csdx import backup copies. + */ +export function clearStaleImportState(dataDir: string): void { + try { + const csdxMapperDir = path.join(dataDir, 'mapper'); + // Guard on isDirectory so a stray mapper.json file can never be removed. + if (fs.existsSync(csdxMapperDir) && fs.statSync(csdxMapperDir).isDirectory()) { + fs.rmSync(csdxMapperDir, { recursive: true, force: true }); + } + } catch { + // best-effort + } + try { + const cwd = process.cwd(); + for (const name of fs.readdirSync(cwd)) { + if (/^_backup_\d+$/.test(name)) { + fs.rmSync(path.join(cwd, name), { recursive: true, force: true }); + } + } + } catch { + // best-effort + } +} diff --git a/packages/contentstack-external-migrate/src/lib/contentful-cli-spawn.ts b/packages/contentstack-external-migrate/src/lib/contentful-cli-spawn.ts new file mode 100644 index 000000000..182de943a --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/contentful-cli-spawn.ts @@ -0,0 +1,90 @@ +import { spawn, spawnSync, type SpawnSyncReturns } from 'child_process'; + +export interface ContentfulCliInvocation { + /** Executable: `contentful` or `npx` */ + command: string; + /** Prefix args before the Contentful subcommand (e.g. `['-y', 'contentful-cli']`) */ + prefixArgs: string[]; +} + +type SpawnSyncFn = typeof spawnSync; + +/** Returns true when `contentful` is on PATH and responds to --version. */ +export function isGlobalContentfulCliAvailable( + sync: SpawnSyncFn = spawnSync, +): boolean { + try { + const check: SpawnSyncReturns = sync('contentful', ['--version'], { + encoding: 'utf8', + stdio: ['ignore', 'pipe', 'ignore'], + }); + return check.status === 0; + } catch { + return false; + } +} + +/** + * Prefer a globally installed Contentful CLI; fall back to npx so export works + * without a global install. + */ +export function resolveContentfulCli(sync: SpawnSyncFn = spawnSync): ContentfulCliInvocation { + if (isGlobalContentfulCliAvailable(sync)) { + return { command: 'contentful', prefixArgs: [] }; + } + + return { command: 'npx', prefixArgs: ['-y', 'contentful-cli'] }; +} + +const SENSITIVE_CONTENTFUL_FLAGS = new Set(['--management-token', '--mt']); + +/** Strip secret values from argv before logging. */ +export function redactContentfulCliArgs(subcommandArgs: string[]): string[] { + const redacted: string[] = []; + for (let i = 0; i < subcommandArgs.length; i++) { + const arg = subcommandArgs[i]; + if (SENSITIVE_CONTENTFUL_FLAGS.has(arg) && i + 1 < subcommandArgs.length) { + redacted.push(arg, '***'); + i += 1; + } else { + redacted.push(arg); + } + } + return redacted; +} + +/** Human-readable invocation for logs (never includes secrets). */ +export function formatContentfulCliInvocation(subcommandArgs: string[]): string { + const { command, prefixArgs } = resolveContentfulCli(); + return [command, ...prefixArgs, ...redactContentfulCliArgs(subcommandArgs)].join(' '); +} + +/** + * Run `contentful space export` (or other subcommands) via global CLI or npx. + */ +export async function spawnContentfulCli( + subcommandArgs: string[], + options?: { cwd?: string }, +): Promise { + const { command, prefixArgs } = resolveContentfulCli(); + const args = [...prefixArgs, ...subcommandArgs]; + + return new Promise((resolve, reject) => { + const child = spawn(command, args, { + stdio: 'inherit', + cwd: options?.cwd, + }); + child.on('error', (err) => { + if ((err as NodeJS.ErrnoException).code === 'ENOENT') { + reject( + new Error( + 'Could not run Contentful CLI. Install globally: npm i -g contentful-cli — or ensure npx is available.', + ), + ); + } else { + reject(err); + } + }); + child.on('exit', (code) => resolve(code ?? 1)); + }); +} diff --git a/packages/contentstack-external-migrate/src/lib/conversion-summary.ts b/packages/contentstack-external-migrate/src/lib/conversion-summary.ts new file mode 100644 index 000000000..ece99fc22 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/conversion-summary.ts @@ -0,0 +1,380 @@ +import fs from 'fs'; +import path from 'path'; +import { parseJsonLoose } from './parse-json-loose'; + +export type ModuleStatus = 'passed' | 'partial' | 'failed' | 'skipped'; + +export interface ModuleRow { + module: string; + /** Actual count of items in the source export (raw, incl. duplicates). */ + source: number; + /** Duplicate source items collapsed by id/code (so unique = source − duplicate). */ + duplicate: number; + converted: number; + status: ModuleStatus; +} + +export interface ContentTypeFieldRow { + contentType: string; + cfFields: number; + csFields: number; + failed: number; +} + +export interface ConversionSummary { + rows: ModuleRow[]; + contentTypeFields?: ContentTypeFieldRow[]; + generatedAt?: string; +} + +const SUMMARY_FILE = 'conversion-summary.json'; + +/** Contentful role names that map onto a Contentstack built-in (not created as custom). */ +const BUILTIN_ROLE_SYNONYMS = new Set([ + 'owner', + 'admin', + 'administrator', + 'developer', + 'dev', + 'content manager', + 'content-manager', + 'editor', + 'author', +]); + +function statusFor(source: number, converted: number): ModuleStatus { + if (source === 0) return 'skipped'; + if (converted === 0) return 'failed'; + if (converted >= source) return 'passed'; + return 'partial'; +} + +/** Count items in a JSON file — array length or object key count; 0 if missing. */ +function jsonCount(file: string): number { + try { + const j = parseJsonLoose(fs.readFileSync(file, 'utf8')); + if (Array.isArray(j)) return j.length; + if (j && typeof j === 'object') return Object.keys(j).length; + return 0; + } catch { + return 0; + } +} + +/** + * Count converted entries as UNIQUE entry uids across every *-entries.json file. + * (Localized variants of one entry share a uid across locale files, so a plain + * sum would over-count vs the source's unique-entry count.) + */ +function countConvertedEntries(bundleDir: string): number { + const root = path.join(bundleDir, 'entries'); + const uids = new Set(); + const walk = (p: string) => { + let dirents: fs.Dirent[]; + try { + dirents = fs.readdirSync(p, { withFileTypes: true }); + } catch { + return; + } + for (const d of dirents) { + const fp = path.join(p, d.name); + if (d.isDirectory()) walk(fp); + else if (/-entries\.json$/.test(d.name)) { + try { + const j = parseJsonLoose(fs.readFileSync(fp, 'utf8')); + if (j && typeof j === 'object') for (const k of Object.keys(j)) uids.add(k); + } catch { + // skip unreadable file + } + } + } + }; + walk(root); + return uids.size; +} + +/** Converted locales = master-locale.json + locales.json key counts. */ +function countConvertedLocales(bundleDir: string): number { + return ( + jsonCount(path.join(bundleDir, 'locales', 'master-locale.json')) + + jsonCount(path.join(bundleDir, 'locales', 'locales.json')) + ); +} + +/** Converted roles = custom roles created + source roles that map to a built-in. */ +function countConvertedRoles(sourceRoles: any[], bundleDir: string): number { + const custom = jsonCount(path.join(bundleDir, 'custom-roles', 'custom-roles.json')); + const builtin = sourceRoles.filter((r) => + BUILTIN_ROLE_SYNONYMS.has(String(r?.name || '').trim().toLowerCase()), + ).length; + return custom + builtin; +} + +/** + * Compare a Contentful export (source) against the converted bundle and produce + * a per-module summary: how many of each module the source had vs how many + * landed in the bundle, with a pass/partial/fail status. The same QA view csdx + * shows after an audit, but for the conversion step. + */ +export function computeConversionSummary(source: any, bundleDir: string): ConversionSummary { + const arr = (v: any): any[] => (Array.isArray(v) ? v : []); + // Raw count + unique count (by a key field) so we can report duplicates that + // the bundle collapses (it keys by id/code). dup = raw − unique. + const uniq = (items: any[], keyFn: (x: any) => any) => { + const ids = new Set(); + for (const it of items) { + const k = keyFn(it); + if (k != null && k !== '') ids.add(String(k)); + } + return { raw: items.length, unique: ids.size }; + }; + const byId = (x: any) => x?.sys?.id; + + const cts = uniq(arr(source?.contentTypes), byId); + const entries = uniq(arr(source?.entries), byId); + const assets = uniq(arr(source?.assets), byId); + const locales = uniq(arr(source?.locales), (l: any) => l?.code); + const webhooks = uniq(arr(source?.webhooks), byId); + const roleArr = arr(source?.roles); + const roles = uniq(roleArr, (r: any) => r?.name); + + const defs: Array<{ module: string; unique: number; raw: number; converted: number }> = [ + { + module: 'Content Types', + unique: cts.unique, + raw: cts.raw, + converted: jsonCount(path.join(bundleDir, 'content_types', 'schema.json')), + }, + { + module: 'Entries', + unique: entries.unique, + raw: entries.raw, + converted: countConvertedEntries(bundleDir), + }, + { + // The canonical converted-assets list is assets/index.json (keyed by uid); + // assets.json can carry a stray placeholder entry, so don't count it. + module: 'Assets', + unique: assets.unique, + raw: assets.raw, + converted: jsonCount(path.join(bundleDir, 'assets', 'index.json')), + }, + { + module: 'Locales', + unique: locales.unique, + raw: locales.raw, + converted: countConvertedLocales(bundleDir), + }, + { + module: 'Webhooks', + unique: webhooks.unique, + raw: webhooks.raw, + converted: jsonCount(path.join(bundleDir, 'webhooks', 'webhooks.json')), + }, + { + module: 'Roles', + unique: roles.unique, + raw: roles.raw, + converted: countConvertedRoles(roleArr, bundleDir), + }, + ]; + + const rows: ModuleRow[] = defs.map((d) => { + const duplicate = Math.max(0, d.raw - d.unique); + // Source = the actual count in the export; duplicates collapse by id/code, + // so status compares converted against the unique (source − duplicate). + return { + module: d.module, + source: d.raw, + duplicate, + converted: d.converted, + status: statusFor(d.raw - duplicate, d.converted), + }; + }); + return { rows }; +} + +const STATUS_ICON: Record = { + passed: '✓ passed', + partial: '⚠ partial', + failed: '✗ failed', + skipped: '— none', +}; + +/** Render the summary as a bordered ASCII table (csdx-style). */ +export function renderConversionSummary(summary: ConversionSummary, title = 'Conversion summary'): string { + const header = ['Module', 'Source', 'Duplicate', 'Converted', 'Status']; + const rows = summary.rows.map((r) => [ + r.module, + String(r.source), + String(r.duplicate ?? 0), + String(r.converted), + STATUS_ICON[r.status], + ]); + const widths = header.map((h, i) => + Math.max(h.length, ...rows.map((row) => row[i].length)), + ); + const pad = (s: string, w: number) => s + ' '.repeat(w - s.length); + const line = (l: string, m: string, r: string) => + l + widths.map((w) => '─'.repeat(w + 2)).join(m) + r; + const fmt = (cells: string[]) => + '│ ' + cells.map((c, i) => pad(c, widths[i])).join(' │ ') + ' │'; + + const out: string[] = []; + out.push(title); + out.push(line('┌', '┬', '┐')); + out.push(fmt(header)); + out.push(line('├', '┼', '┤')); + for (const row of rows) out.push(fmt(row)); + out.push(line('└', '┴', '┘')); + + const failed = summary.rows.filter((r) => r.status === 'failed'); + const partial = summary.rows.filter((r) => r.status === 'partial'); + const dups = summary.rows.filter((r) => (r.duplicate ?? 0) > 0); + if (failed.length) out.push(`✗ ${failed.length} module(s) failed: ${failed.map((r) => r.module).join(', ')}`); + if (partial.length) out.push(`⚠ ${partial.length} module(s) partial: ${partial.map((r) => r.module).join(', ')}`); + if (!failed.length && !partial.length) out.push('✓ All modules converted fully.'); + if (dups.length) { + out.push( + `ℹ Duplicate source items collapsed by id: ${dups + .map((r) => `${r.module} (${r.duplicate})`) + .join(', ')}`, + ); + } + return out.join('\n'); +} + +/** Normalize an id/name for loose comparison (lowercase, alphanumerics only). */ +function norm(s: any): string { + return String(s || '').toLowerCase().replace(/[^a-z0-9]/g, ''); +} + +/** Read the CS schema (field list) for every converted content type, by uid. */ +function readBundleContentTypes(bundleDir: string): Array<{ uid: string; title: string; schema: any[] }> { + const out: Array<{ uid: string; title: string; schema: any[] }> = []; + // schema.json is the canonical array of all converted content types. + const schemaFile = path.join(bundleDir, 'content_types', 'schema.json'); + try { + const arr = parseJsonLoose(fs.readFileSync(schemaFile, 'utf8')); + if (Array.isArray(arr)) { + for (const ct of arr) { + out.push({ uid: ct?.uid || '', title: ct?.title || ct?.uid || '', schema: Array.isArray(ct?.schema) ? ct.schema : [] }); + } + } + } catch { + // ignore + } + return out; +} + +/** + * Per-content-type field summary: how many fields each Contentful content type + * had vs how many converted into the Contentstack content type, and how many + * failed to convert. A Contentful field is considered converted when a + * Contentstack field matches it by uid or name — accounting for the renames + * Contentstack does (the title/display field → Title, a slug field → URL). + */ +export function computeContentTypeFieldSummary(source: any, bundleDir: string): ContentTypeFieldRow[] { + const cfCts: any[] = Array.isArray(source?.contentTypes) ? source.contentTypes : []; + const csCts = readBundleContentTypes(bundleDir); + // Match CS content types to CF by normalized title/name. + const csByName = new Map(); + for (const cs of csCts) { + csByName.set(norm(cs.title), cs); + csByName.set(norm(cs.uid), cs); + } + + const rows: ContentTypeFieldRow[] = []; + for (const cf of cfCts) { + const cfFields: any[] = Array.isArray(cf?.fields) ? cf.fields : []; + const cs = + csByName.get(norm(cf?.name)) || + csByName.get(norm(cf?.sys?.id)) || + csByName.get(norm(String(cf?.sys?.id).replace(/([A-Z])/g, '_$1'))); + const csSchema: any[] = cs?.schema ?? []; + const csUidSet = new Set(csSchema.map((f) => norm(f?.uid))); + const csNameSet = new Set(csSchema.map((f) => norm(f?.display_name))); + const hasTitle = csUidSet.has('title'); + const hasUrl = csUidSet.has('url'); + const displayFieldId = cf?.displayField; + + // CS Fields = how many CF fields actually converted. We count only + // CF-originated fields, so the auto-added built-in Title/URL are NOT counted + // unless they came from a CF field (the title/display field, or a slug → URL). + let matched = 0; + for (const f of cfFields) { + const ok = + csUidSet.has(norm(f?.id)) || + csNameSet.has(norm(f?.name)) || + (displayFieldId && f?.id === displayFieldId && hasTitle) || // title/display field + ((/slug/i.test(String(f?.id)) || /slug/i.test(String(f?.name))) && hasUrl); // slug → URL + if (ok) matched += 1; + } + + rows.push({ + contentType: cs?.title || cf?.name || cf?.sys?.id || 'unknown', + cfFields: cfFields.length, + csFields: matched, + failed: cfFields.length - matched, + }); + } + return rows; +} + +/** Render the per-content-type field table. */ +export function renderContentTypeFieldSummary( + rows: ContentTypeFieldRow[], + title = 'Content-type field conversion', +): string { + const header = ['Content Type', 'CF Fields', 'CS Fields', 'Failed']; + const body = rows.map((r) => [ + r.contentType, + String(r.cfFields), + String(r.csFields), + r.failed > 0 ? `✗ ${r.failed}` : '0', + ]); + const widths = header.map((h, i) => Math.max(h.length, ...body.map((row) => row[i].length))); + const pad = (s: string, w: number) => s + ' '.repeat(w - s.length); + const line = (l: string, m: string, r: string) => + l + widths.map((w) => '─'.repeat(w + 2)).join(m) + r; + const fmt = (cells: string[]) => + '│ ' + cells.map((c, i) => pad(c, widths[i])).join(' │ ') + ' │'; + const out: string[] = [title, line('┌', '┬', '┐'), fmt(header), line('├', '┼', '┤')]; + for (const row of body) out.push(fmt(row)); + out.push(line('└', '┴', '┘')); + const withFailed = rows.filter((r) => r.failed > 0); + if (withFailed.length) { + out.push( + `✗ ${withFailed.length} content type(s) with failed fields: ${withFailed + .map((r) => `${r.contentType} (${r.failed})`) + .join(', ')}`, + ); + } else { + out.push('✓ All content-type fields converted.'); + } + return out.join('\n'); +} + +export function writeConversionSummary(bundleDir: string, summary: ConversionSummary): void { + try { + fs.mkdirSync(bundleDir, { recursive: true }); + fs.writeFileSync( + path.join(bundleDir, SUMMARY_FILE), + `${JSON.stringify(summary, null, 2)}\n`, + 'utf8', + ); + } catch { + // best-effort + } +} + +export function readConversionSummary(bundleDir: string): ConversionSummary | null { + try { + const raw = fs.readFileSync(path.join(bundleDir, SUMMARY_FILE), 'utf8'); + const parsed = parseJsonLoose(raw); + if (parsed && Array.isArray(parsed.rows)) return parsed as ConversionSummary; + } catch { + // ignore + } + return null; +} diff --git a/packages/contentstack-external-migrate/src/lib/create-stack.ts b/packages/contentstack-external-migrate/src/lib/create-stack.ts new file mode 100644 index 000000000..873646798 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/create-stack.ts @@ -0,0 +1,942 @@ +import fs from 'fs'; +import path from 'path'; +import { spawn } from 'child_process'; +import axios from 'axios'; +import { configHandler, authHandler } from '@contentstack/cli-utilities'; + +const AXIOS_TIMEOUT = 60 * 1000; +/** Shorter timeout for the post-import read/provision calls so a wrong host or + * an unreachable region fails fast instead of stalling the run for a minute. */ +const QUICK_TIMEOUT = 15 * 1000; +/** Hard cap on the csdx seed fallback so it can never hang indefinitely. */ +const SEED_TIMEOUT = 10 * 60 * 1000; + +const regionalApiHosts: Record = { + NA: 'api.contentstack.io', + EU: 'eu-api.contentstack.com', + AZURE_NA: 'azure-na-api.contentstack.com', + AZURE_EU: 'azure-eu-api.contentstack.com', + GCP_NA: 'gcp-na-api.contentstack.com', + AU: 'au-api.contentstack.com', + GCP_EU: 'gcp-eu-api.contentstack.com', +}; + +export interface CreateStackParams { + orgUid: string; + name: string; + /** Contentstack master locale code, e.g. "en-us". */ + masterLocale: string; + verbose?: boolean; +} + +export interface CreatedStack { + apiKey: string; + /** Stack uid from the CMA. Undefined on the csdx fallback path (fetch separately). */ + uid?: string; + /** How the stack was created — surfaced to the user. */ + via: 'cma' | 'csdx'; +} + +interface ResolvedSession { + region: string; + /** Contentstack Management API base URL for the logged-in region. */ + cma: string; + /** + * Auth headers for CMA calls. Supports BOTH csdx login modes: + * - BASIC (username/password) → { authtoken } + * - OAUTH (`csdx auth:login --oauth`) → { authorization: 'Bearer ' } + */ + authHeaders: Record; +} + +/** + * Build CMA auth headers from the csdx session, matching how the cli-utilities + * SDK does it: `authorisationType` decides basic vs oauth. Falls back to + * authtoken when the type is unset (legacy basic logins). + */ +function buildAuthHeaders(): Record { + const authType = configHandler.get('authorisationType') as string | undefined; + if (authType === 'OAUTH') { + const oauthToken = configHandler.get('oauthAccessToken') as string | undefined; + if (!oauthToken) { + throw new Error("Not logged in. Run 'csdx auth:login' (or 'csdx auth:login --oauth') first."); + } + return { authorization: `Bearer ${oauthToken}` }; + } + // BASIC or unset → authtoken + const token = configHandler.get('authtoken') as string | undefined; + if (!token) { + throw new Error("Not logged in. Run 'csdx auth:login' (or 'csdx auth:login --oauth') first."); + } + return { authtoken: token }; +} + +/** + * Refresh the OAuth access token when it's expired (no-op for basic auth). + * OAuth access tokens are short-lived; csdx's own commands refresh before each + * request. Our raw CMA calls must do the same or they send a stale Bearer token + * (which is why `--oauth` couldn't create a stack). Best-effort — a failed + * refresh lets the subsequent call surface a clear auth error. + */ +export async function ensureFreshAuth(): Promise { + const authType = configHandler.get('authorisationType') as string | undefined; + if (authType !== 'OAUTH') return; + try { + await authHandler.checkExpiryAndRefresh(); + } catch { + // refresh failed — leave it; the CMA call will report the auth error + } +} + +/** Ensure the cma value is an absolute https URL with no trailing slash. */ +function normalizeCma(raw: string): string { + let v = raw.trim(); + if (!/^https?:\/\//i.test(v)) v = `https://${v}`; + return v.replace(/\/+$/, ''); +} + +/** + * Read the csdx session (`csdx auth:login`). The token gates stack creation and + * is sent to the Contentstack Management API; the region's cma host is the API + * base URL. Region MUST match the org's region. + */ +export function resolveSession(): ResolvedSession { + const authHeaders = buildAuthHeaders(); // throws if neither basic nor oauth token present + const regionRaw = configHandler.get('region') as + | { name?: string; cma?: string } + | string + | undefined; + const region = typeof regionRaw === 'string' ? regionRaw : regionRaw?.name || 'NA'; + const cmaFromConfig = regionRaw && typeof regionRaw === 'object' ? regionRaw.cma : undefined; + const hostFromTable = regionalApiHosts[region]; + // Don't silently fall back to the NA host for an unknown region — that points + // every CMA call at the wrong endpoint and they stall until the timeout. Fail + // fast with an actionable message instead. + if (!cmaFromConfig && !hostFromTable) { + throw new Error( + `Unknown region "${region}" and no CMA host found in config. ` + + `Re-run 'csdx config:set:region' (or 'csdx auth:login') to set a valid region.`, + ); + } + const cma = normalizeCma(cmaFromConfig || `https://${hostFromTable}`); + return { region, cma, authHeaders }; +} + +export interface OrganizationOption { + uid: string; + name: string; +} + +/** + * List the organizations the logged-in user belongs to (CMA + * GET /v3/organizations), so the command can offer a pick-list when --org is + * omitted. Uses the csdx session token + region host. + */ +export async function fetchOrganizations(): Promise { + await ensureFreshAuth(); + const session = resolveSession(); + const res = await axios.get(`${session.cma}/v3/organizations`, { + timeout: AXIOS_TIMEOUT, + headers: { ...session.authHeaders }, + params: { limit: 100 }, + }); + const orgs = res?.data?.organizations; + if (!Array.isArray(orgs)) return []; + return orgs + .map((o: any) => ({ uid: o?.uid, name: o?.name })) + .filter((o: OrganizationOption) => Boolean(o.uid)); +} + +/** + * Create a destination stack in the given org and return its api_key. + * + * Primary: Contentstack Management API (POST /v3/stacks) with the csdx session + * token — returns the new stack's api_key directly. + * + * Fallback: `csdx cm:stacks:seed` (the only csdx command that creates a stack), + * scraping the api_key from output. Degraded — seed also pulls starter content. + */ +export async function createStack(params: CreateStackParams): Promise { + await ensureFreshAuth(); + try { + const { apiKey, uid } = await createStackViaCMA(params); + return { apiKey, uid, via: 'cma' }; + } catch (cmaErr: any) { + const cmaMsg = describeCmaError(cmaErr); + try { + const apiKey = await createStackViaCsdx(params); + return { apiKey, via: 'csdx' }; + } catch (csdxErr: any) { + throw new Error( + `stack creation failed.\n` + + ` CMA: ${cmaMsg}\n` + + ` csdx: ${csdxErr?.message || csdxErr}`, + ); + } + } +} + +async function createStackViaCMA(params: CreateStackParams): Promise<{ apiKey: string; uid?: string }> { + const { orgUid, name, masterLocale } = params; + const session = resolveSession(); + const res = await axios.post( + `${session.cma}/v3/stacks`, + { + stack: { + name, + description: 'Created by migrate CLI from a Contentful export', + master_locale: masterLocale, + }, + }, + { + timeout: AXIOS_TIMEOUT, + headers: { + ...session.authHeaders, + organization_uid: orgUid, + 'Content-Type': 'application/json', + }, + }, + ); + + const apiKey = res?.data?.stack?.api_key; + if (!apiKey) { + throw new Error('CMA response did not include stack.api_key'); + } + return { apiKey, uid: res?.data?.stack?.uid }; +} + +/** + * Fetch the stack uid for a given api_key (CMA GET /v3/stacks). Used on the csdx + * fallback path, where stack creation only yields the api_key. + */ +export async function fetchStackUid( + apiKey: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + const session = resolveSession(); + const res = await axios.get(`${session.cma}/v3/stacks`, { + timeout: timeoutMs, + headers: { ...session.authHeaders, api_key: apiKey }, + }); + return res?.data?.stack?.uid; +} + +/** + * List environment names in a stack (CMA GET /v3/environments). The import step + * creates these from the bundle, so call AFTER import. A delivery token must be + * scoped to environments that already exist. + */ +export async function fetchStackEnvironments( + apiKey: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + const session = resolveSession(); + const res = await axios.get(`${session.cma}/v3/environments`, { + timeout: timeoutMs, + headers: { ...session.authHeaders, api_key: apiKey }, + }); + const envs = res?.data?.environments; + if (!Array.isArray(envs)) return []; + return envs.map((e: any) => e?.name).filter((n: unknown): n is string => Boolean(n)); +} + +/** + * List branch uids in a stack (CMA GET /v3/stacks/branches). Stacks are + * branch-enabled by default (a `main` branch), and the delivery-token API + * rejects a scope that omits branches on such stacks — so we scope to these. + */ +export async function fetchStackBranches( + apiKey: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + const session = resolveSession(); + const res = await axios.get(`${session.cma}/v3/stacks/branches`, { + timeout: timeoutMs, + headers: { ...session.authHeaders, api_key: apiKey }, + }); + const branches = res?.data?.branches; + if (!Array.isArray(branches)) return []; + return branches.map((b: any) => b?.uid).filter((u: unknown): u is string => Boolean(u)); +} + +/** Map of role name → role uid for a stack (CMA GET /v3/roles). */ +export async function fetchStackRoles( + apiKey: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise> { + await ensureFreshAuth(); + const session = resolveSession(); + const res = await axios.get(`${session.cma}/v3/roles?include_rules=false`, { + timeout: timeoutMs, + headers: { ...session.authHeaders, api_key: apiKey }, + }); + const map: Record = {}; + for (const r of res?.data?.roles ?? []) { + if (r?.name && r?.uid) map[r.name] = r.uid; + } + return map; +} + +export interface StackInvite { + email: string; + roleUids: string[]; +} + +/** + * Share a stack with users, assigning EXACTLY the given role uids per email + * (CMA POST /v3/stacks/share). The per-email roles map is authoritative — an + * invitee receives only those roles, no default/extra access. Invites with an + * empty role list are skipped by the caller (never invite into a default role). + * Best-effort per email; returns which succeeded/failed. + */ +export async function shareStackWithUsers( + apiKey: string, + invites: StackInvite[], + timeoutMs: number = QUICK_TIMEOUT, +): Promise<{ invited: string[]; failed: Array<{ email: string; error: string }> }> { + const result = { invited: [] as string[], failed: [] as Array<{ email: string; error: string }> }; + const valid = invites.filter((i) => i.email && i.roleUids.length); + if (!valid.length) return result; + await ensureFreshAuth(); + const session = resolveSession(); + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json' }; + // Invite per-email so one bad address doesn't fail the whole batch. + for (const inv of valid) { + try { + await axios.post( + `${session.cma}/v3/stacks/share`, + { emails: [inv.email], roles: { [inv.email]: inv.roleUids } }, + { timeout: timeoutMs, headers }, + ); + result.invited.push(inv.email); + } catch (err: any) { + const detail = + err?.response?.data?.error_message || + (err?.response?.data?.errors && JSON.stringify(err.response.data.errors)) || + err?.message || + 'unknown error'; + result.failed.push({ email: inv.email, error: typeof detail === 'string' ? detail : JSON.stringify(detail) }); + } + } + return result; +} + +export interface DeliveryTokenResult { + /** The read-scoped delivery token value. */ + token: string; + /** Delivery-token uid — needed to create the associated preview token. */ + uid?: string; + /** The single publishing environment the token is bound to. */ + environment: string; +} + +/** + * Create a read-only delivery token (CMA POST /v3/stacks/delivery_tokens). + * A Contentstack delivery token binds to exactly ONE publishing environment + * (the UI is single-select), but can be scoped to multiple branches. + */ +export async function createDeliveryToken( + apiKey: string, + environment: string, + opts: { name?: string; timeoutMs?: number; branches?: string[] } = {}, +): Promise { + const session = resolveSession(); + const scope: Array> = [ + { + module: 'environment', + environments: [environment], + acl: { read: true }, + }, + ]; + // Branch-enabled stacks (the default) reject a token whose scope omits + // branches, so include a branch scope when the stack has any. + if (opts.branches && opts.branches.length > 0) { + scope.push({ + module: 'branch', + branches: opts.branches, + acl: { read: true }, + }); + } + const res = await axios.post( + `${session.cma}/v3/stacks/delivery_tokens`, + { + token: { + name: opts.name || 'Migration delivery token', + description: 'Created by migrate CLI', + scope, + }, + }, + { + timeout: opts.timeoutMs ?? QUICK_TIMEOUT, + headers: { + ...session.authHeaders, + api_key: apiKey, + 'Content-Type': 'application/json', + }, + }, + ); + const token = res?.data?.token?.token; + if (!token) { + throw new Error('CMA response did not include token.token'); + } + return { token, uid: res?.data?.token?.uid, environment }; +} + +/** + * Create the preview token associated with an existing delivery token + * (CMA POST /v3/stacks/delivery_tokens/{uid}/preview_token). Independent of + * branches — the scope is inherited from the delivery token. Returns the + * preview token value. + */ +export async function createPreviewToken( + apiKey: string, + deliveryTokenUid: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + const session = resolveSession(); + const res = await axios.post( + `${session.cma}/v3/stacks/delivery_tokens/${deliveryTokenUid}/preview_token`, + {}, + { + timeout: timeoutMs, + headers: { + ...session.authHeaders, + api_key: apiKey, + 'Content-Type': 'application/json', + }, + }, + ); + const preview = res?.data?.token?.preview_token; + if (!preview) { + throw new Error('CMA response did not include token.preview_token'); + } + return preview; +} + +/** + * Turn on Live Preview for the stack (CMA POST /v3/stacks/settings), pointing it + * at the given environment + preview token. Best-effort. + */ +export async function enableLivePreview( + apiKey: string, + environment: string, + previewToken: string, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + const session = resolveSession(); + await axios.post( + `${session.cma}/v3/stacks/settings`, + { + stack_settings: { + live_preview: { + enabled: true, + 'default-env': environment, + 'preview-token': previewToken, + }, + }, + }, + { + timeout: timeoutMs, + headers: { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json' }, + }, + ); +} + +/** + * The Contentstack "app" API host (app.contentstack.com/api), where the entry + * Discussions/Comments endpoints live — distinct from the CMA host. Derived from + * the session's CMA host so it follows the region. + */ +function appApiBase(): string { + const session = resolveSession(); + const host = session.cma.replace(/^https?:\/\//, '').replace(/\/+$/, ''); + // NA is the special case (api.contentstack.io → app.contentstack.com); every + // other region is -api.contentstack.com → -app.contentstack.com. + const appHost = host === 'api.contentstack.io' ? 'app.contentstack.com' : host.replace('api', 'app'); + return `https://${appHost}/api/v3`; +} + +/** + * Create an entry Discussion attached to a field (Contentstack allows ONE active + * discussion per field), returning its uid. Entry comments are the home for + * migrated Contentful entry Tasks. Uses the app API host + session auth. + */ +export async function createEntryDiscussion( + apiKey: string, + opts: { contentTypeUid: string; entryUid: string; locale: string; fieldUid: string; title: string; branch?: string }, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + await ensureFreshAuth(); + const session = resolveSession(); + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json', ...(opts.branch ? { branch: opts.branch } : {}) }; + const base = `${appApiBase()}/content_types/${opts.contentTypeUid}/entries/${opts.entryUid}/discussion`; + const created = await axios.post( + `${base}?locale=${encodeURIComponent(opts.locale)}`, + { discussion: { title: opts.title, field: { uid: opts.fieldUid, path: opts.fieldUid, og_path: opts.fieldUid } } }, + { timeout: timeoutMs, headers }, + ); + const duid = created?.data?.discussion?.uid; + if (!duid) throw new Error('discussion create returned no uid'); + return duid; +} + +/** Post a comment/message into an existing entry Discussion. */ +export async function addEntryDiscussionMessage( + apiKey: string, + opts: { contentTypeUid: string; entryUid: string; discussionUid: string; message: string; branch?: string }, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + await ensureFreshAuth(); + const session = resolveSession(); + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json', ...(opts.branch ? { branch: opts.branch } : {}) }; + const base = `${appApiBase()}/content_types/${opts.contentTypeUid}/entries/${opts.entryUid}/discussion`; + await axios.post( + `${base}/${opts.discussionUid}/message`, + { conversation: { discussion_uid: opts.discussionUid, message: opts.message } }, + { timeout: timeoutMs, headers }, + ); +} + +/** + * Schedule an entry (or asset) to publish/unpublish at a future time + * (CMA POST /v3/content_types/{ct}/entries/{uid}/publish | unpublish with + * `scheduled_at`). Best-effort — throws on API error so the caller can record it. + */ +export async function scheduleEntryAction( + apiKey: string, + opts: { + contentTypeUid: string; + entryUid: string; + action: 'publish' | 'unpublish'; + environment: string; + locale: string; + scheduledAt: string; // ISO datetime + branch?: string; + }, + timeoutMs: number = QUICK_TIMEOUT, +): Promise { + await ensureFreshAuth(); + const session = resolveSession(); + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json', ...(opts.branch ? { branch: opts.branch } : {}) }; + const isAsset = opts.contentTypeUid === 'sys_assets'; + const url = isAsset + ? `${session.cma}/v3/assets/${opts.entryUid}/${opts.action}` + : `${session.cma}/v3/content_types/${opts.contentTypeUid}/entries/${opts.entryUid}/${opts.action}`; + await axios.post( + url, + { + entry: { environments: [opts.environment], locales: [opts.locale] }, + scheduled_at: opts.scheduledAt, + }, + { timeout: timeoutMs, headers }, + ); +} + +export interface ReleaseItem { + uid: string; + content_type_uid: string; + action: string; // 'publish' + locale: string; +} + +/** + * Create a Contentstack Release and add its items (CMA POST /v3/releases then + * POST /v3/releases/{uid}/items). The release is created but NOT deployed — + * recreating the Contentful release's grouping without auto-publishing; the + * operator deploys it from the UI. Returns the new release uid. + */ +export async function createReleaseWithItems( + apiKey: string, + release: { name: string; description?: string; locale: string; items: ReleaseItem[]; branch?: string }, + timeoutMs: number = QUICK_TIMEOUT, +): Promise<{ uid: string; itemsAdded: number }> { + await ensureFreshAuth(); + const session = resolveSession(); + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json', ...(release.branch ? { branch: release.branch } : {}) }; + + const created = await axios.post( + `${session.cma}/v3/releases`, + { release: { name: release.name, description: release.description || '', locale: release.locale } }, + { timeout: timeoutMs, headers }, + ); + const uid = created?.data?.release?.uid; + if (!uid) throw new Error('CMA response did not include release.uid'); + + let itemsAdded = 0; + if (release.items.length) { + await axios.post( + `${session.cma}/v3/releases/${uid}/items`, + { items: release.items }, + { timeout: timeoutMs, headers }, + ); + itemsAdded = release.items.length; + } + return { uid, itemsAdded }; +} + +export interface EnsureWebhooksResult { + total: number; + created: string[]; + skipped: string[]; + failed: Array<{ name: string; error: string }>; +} + +/** + * Create any webhooks from the bundle that are missing on the stack, via CMA + * (POST /v3/webhooks). Works around a csdx cm:stacks:import bug where its + * webhooks module imports only the first `concurrency` (5) webhooks and then + * falsely skips the rest as "already exists" — so a bundle with >5 webhooks + * silently loses all but 5. We diff the bundle against the stack's live + * webhooks (by name) and POST whatever is absent. Idempotent and safe to run + * after every import. Best-effort: never throws (returns a report). + */ +export async function ensureWebhooks( + apiKey: string, + bundleDir: string, + opts: { timeoutMs?: number } = {}, +): Promise { + const result: EnsureWebhooksResult = { total: 0, created: [], skipped: [], failed: [] }; + let bundleWebhooks: Record = {}; + try { + const raw = fs.readFileSync(path.join(bundleDir, 'webhooks', 'webhooks.json'), 'utf8'); + bundleWebhooks = JSON.parse(raw) as Record; + } catch { + return result; // no webhooks in bundle + } + const entries = Object.values(bundleWebhooks); + result.total = entries.length; + if (entries.length === 0) return result; + + await ensureFreshAuth(); + const session = resolveSession(); + const timeout = opts.timeoutMs ?? QUICK_TIMEOUT; + const headers = { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json' }; + + // Live webhook names on the stack (paginated; webhooks are stack-global). + const existing = new Set(); + try { + let skip = 0; + for (;;) { + const res = await axios.get(`${session.cma}/v3/webhooks`, { + timeout, + headers, + params: { limit: 100, skip, include_count: true }, + }); + const page: any[] = res?.data?.webhooks ?? []; + for (const w of page) if (w?.name) existing.add(w.name); + skip += page.length; + const count = res?.data?.count ?? skip; + if (page.length === 0 || skip >= count) break; + } + } catch { + // if listing fails, fall through and attempt creates (duplicates are rejected) + } + + for (const web of entries) { + const name = web?.name; + if (!name) continue; + if (existing.has(name)) { + result.skipped.push(name); + continue; + } + // CMA create accepts name/channels/destinations/retry_policy/concise_payload/ + // disabled; strip bundle-only fields (urlPath, unhealthy). Keep disabled. + const { urlPath, unhealthy, ...rest } = web; + const payload = { ...rest, disabled: true }; + try { + await axios.post(`${session.cma}/v3/webhooks`, { webhook: payload }, { timeout, headers }); + result.created.push(name); + } catch (err: any) { + const detail = + err?.response?.data?.error_message || + err?.response?.data?.errors || + err?.message || + 'unknown error'; + // A 4xx "already exists" just means csdx did create it — treat as skipped. + if (/already exist/i.test(JSON.stringify(detail))) { + result.skipped.push(name); + } else { + result.failed.push({ name, error: typeof detail === 'string' ? detail : JSON.stringify(detail) }); + } + } + } + return result; +} + +/** Environment names from a bundle's environments/environments.json (fallback). */ +function readBundleEnvironments(bundleDir: string): string[] { + try { + const raw = fs.readFileSync(path.join(bundleDir, 'environments', 'environments.json'), 'utf8'); + const parsed = JSON.parse(raw) as Record; + return Object.values(parsed) + .map((e) => e?.name) + .filter((n): n is string => Boolean(n)); + } catch { + return []; + } +} + +/** Retry an async op a few times with a fixed delay — absorbs eventual consistency. */ +async function withRetry(fn: () => Promise, attempts = 3, delayMs = 2000): Promise { + let lastErr: unknown; + for (let i = 0; i < attempts; i++) { + try { + return await fn(); + } catch (err) { + lastErr = err; + if (i < attempts - 1) await new Promise((r) => setTimeout(r, delayMs)); + } + } + throw lastErr; +} + +/** Order branch uids with `main` first (callers want it as the default/head). */ +export function orderBranchesMainFirst(branches: string[]): string[] { + const uniq = [...new Set(branches.filter(Boolean))]; + const rest = uniq.filter((b) => b !== 'main'); + return uniq.includes('main') ? ['main', ...rest] : rest; +} + +export interface StackCredentials { + stackUid?: string; + /** The token's single publishing environment (master when present). */ + environment: string; + /** All branches the token is scoped to (main first). */ + branches: string[]; + /** Empty string when token creation failed (best-effort). */ + deliveryToken: string; + previewToken: string; + /** Why the delivery token couldn't be created — set only on failure. */ + deliveryTokenError?: string; + /** Whether Live Preview was turned on for the stack. */ + livePreviewEnabled: boolean; +} + +/** + * Provision delivery + preview credentials for a freshly imported stack. + * Resolves the stack uid, ALL environments (now existing), and ALL branches, + * then creates ONE read delivery token (+ preview token) scoped to every + * environment. Best-effort: token failures yield empty strings rather than + * throwing. Call AFTER all imports (environments only exist once import runs). + */ +export async function provisionStackCredentials(opts: { + apiKey: string; + uid?: string; + bundleDir: string; + tokenName?: string; +}): Promise { + const { apiKey, uid, bundleDir, tokenName } = opts; + await ensureFreshAuth(); + const [stackUid, stackEnvs, branches] = await Promise.all([ + uid ? Promise.resolve(uid) : fetchStackUid(apiKey).catch(() => undefined), + fetchStackEnvironments(apiKey).catch(() => [] as string[]), + fetchStackBranches(apiKey).catch(() => [] as string[]), + ]); + // A Contentstack delivery token binds to ONE publishing environment — pick + // 'master' when present (else the first env). Branches stay multi (main first). + const bundleEnvs = readBundleEnvironments(bundleDir); + const resolved = stackEnvs.length ? stackEnvs : bundleEnvs.length ? bundleEnvs : ['master']; + const environment = resolved.includes('master') ? 'master' : resolved[0]; + const orderedBranches = orderBranchesMainFirst(branches); + + let deliveryToken = ''; + let previewToken = ''; + let deliveryTokenError: string | undefined; + try { + const dt = await withRetry(() => + createDeliveryToken(apiKey, environment, { + name: tokenName || 'Migration delivery token', + branches: orderedBranches, + }), + ); + deliveryToken = dt.token; + // Preview token is a separate call on the delivery token (works for both + // branch-enabled and branch-disabled stacks). Best-effort. + if (dt.uid) { + try { + previewToken = await withRetry(() => createPreviewToken(apiKey, dt.uid as string)); + } catch { + // preview token couldn't be created — leave empty + } + } + } catch (err: any) { + // Surface WHY (not silent) so the operator can act — e.g. environment + // missing because import failed, or branch scope rejected. + deliveryTokenError = + err?.response?.data?.error_message || + (err?.response?.data?.errors && JSON.stringify(err.response.data.errors)) || + err?.message || + 'unknown error'; + } + + // Turn on Live Preview (needs the preview token + environment). Best-effort. + let livePreviewEnabled = false; + if (previewToken) { + try { + await withRetry(() => enableLivePreview(apiKey, environment, previewToken)); + livePreviewEnabled = true; + } catch { + // leave disabled — user can enable in the UI + } + } + + return { + stackUid, + environment, + branches: orderedBranches, + deliveryToken, + previewToken, + deliveryTokenError, + livePreviewEnabled, + }; +} + +// ─────────────────────────── branches ─────────────────────────── + +/** + * Contentstack branch uids: lowercase alphanumeric + underscore only, must start + * with an alphanumeric, max 15 characters. (Hyphens and other chars are not + * allowed — e.g. `master-2022-02-09` → `master_2022_02`.) + */ +export function sanitizeBranchUid(name: string): string { + let s = String(name) + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') // invalid → underscore + .replace(/_+/g, '_') // collapse repeats + .replace(/^[^a-z0-9]+/, ''); // must start alphanumeric + s = s.slice(0, 15).replace(/_+$/, ''); // cap length, trim trailing underscore + return s || 'branch'; +} + +/** + * Create a branch cloned from `source` and wait until it's ready. No-op if the + * branch already exists. Branch creation is async, so we poll until live. + */ +export async function createBranch( + apiKey: string, + uid: string, + source = 'main', +): Promise { + await ensureFreshAuth(); + const session = resolveSession(); + try { + await axios.post( + `${session.cma}/v3/stacks/branches`, + { branch: { uid, source } }, + { + timeout: QUICK_TIMEOUT, + headers: { ...session.authHeaders, api_key: apiKey, 'Content-Type': 'application/json' }, + }, + ); + } catch (err: any) { + // 409 / already-exists → fine; surface anything else with its API detail. + const status = err?.response?.status; + const data = err?.response?.data; + const msg = JSON.stringify(data ?? ''); + if (status !== 409 && !/already exists/i.test(msg)) { + const detail = data?.error_message || msg || err?.message; + throw new Error(`Branch "${uid}" creation failed: ${detail}`); + } + } + await waitForBranch(apiKey, uid); +} + +/** Poll a branch until it reports a live/ready state (or times out). */ +async function waitForBranch( + apiKey: string, + uid: string, + attempts = 30, + delayMs = 2000, +): Promise { + const session = resolveSession(); + for (let i = 0; i < attempts; i++) { + try { + const res = await axios.get(`${session.cma}/v3/stacks/branches/${uid}`, { + timeout: QUICK_TIMEOUT, + headers: { ...session.authHeaders, api_key: apiKey }, + }); + const status = res?.data?.branch?.status; + // Treat a fetchable branch with no in-progress status as ready. + if (!status || /live|success|ready/i.test(String(status))) return; + } catch { + // not visible yet — keep polling + } + await new Promise((r) => setTimeout(r, delayMs)); + } +} + +function createStackViaCsdx(params: CreateStackParams): Promise { + const { orgUid, name, masterLocale, verbose } = params; + return new Promise((resolve, reject) => { + const args = [ + 'cm:stacks:seed', + '--org', orgUid, + '--stack-name', name, + '--locale', masterLocale, + '--yes', 'true', + ]; + const child = spawn('csdx', args); + + // Hard kill: seed waits on stdin if a prompt slips through despite --yes, + // which would hang the migration forever. Bound it. + let timedOut = false; + const killTimer = setTimeout(() => { + timedOut = true; + child.kill('SIGKILL'); + }, SEED_TIMEOUT); + + let buffer = ''; + const capture = (chunk: Buffer) => { + const text = chunk.toString(); + buffer += text; + if (verbose) process.stdout.write(text); + }; + child.stdout?.on('data', capture); + child.stderr?.on('data', capture); + + child.on('error', (err: any) => { + clearTimeout(killTimer); + if (err?.code === 'ENOENT') { + reject(new Error('csdx not found on PATH. Install: npm i -g @contentstack/cli')); + } else { + reject(err); + } + }); + child.on('exit', (code) => { + clearTimeout(killTimer); + if (timedOut) { + reject( + new Error(`csdx cm:stacks:seed timed out after ${SEED_TIMEOUT / 1000}s and was killed`), + ); + return; + } + if (code !== 0) { + reject(new Error(`csdx cm:stacks:seed exited with code ${code}`)); + return; + } + const apiKey = scrapeApiKey(buffer); + if (!apiKey) { + reject(new Error('could not determine the new stack api_key from csdx output')); + return; + } + resolve(apiKey); + }); + }); +} + +/** Contentstack stack api keys look like `blt` + 16 hex chars. */ +function scrapeApiKey(text: string): string | undefined { + return text.match(/blt[0-9a-f]{16}/i)?.[0]; +} + +function describeCmaError(err: any): string { + if (err?.response) { + const status = err.response.status; + const apiMsg = + err.response.data?.error_message || + err.response.data?.message || + JSON.stringify(err.response.data); + return `${status} ${apiMsg}`; + } + return err?.message || String(err); +} diff --git a/packages/contentstack-external-migrate/src/lib/csdx-spawn.ts b/packages/contentstack-external-migrate/src/lib/csdx-spawn.ts new file mode 100644 index 000000000..6013d4cd6 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/csdx-spawn.ts @@ -0,0 +1,28 @@ +import { spawn, type ChildProcess } from 'child_process'; + +export type CsdxSpawnFn = ( + command: string, + args: string[], + options: { stdio: 'inherit' }, +) => ChildProcess; + +/** + * Run the globally installed Contentstack CLI. Audit/import wrappers use this + * instead of reimplementing cm:stacks:*. + */ +export async function spawnCsdx( + args: string[], + spawnFn: CsdxSpawnFn = spawn, +): Promise { + return new Promise((resolve, reject) => { + const child = spawnFn('csdx', args, { stdio: 'inherit' }); + child.on('error', (err) => { + if ((err as NodeJS.ErrnoException).code === 'ENOENT') { + reject(new Error('csdx not found. Install: npm i -g @contentstack/cli')); + } else { + reject(err); + } + }); + child.on('exit', (code) => resolve(code ?? 1)); + }); +} diff --git a/packages/contentstack-external-migrate/src/lib/local-date.ts b/packages/contentstack-external-migrate/src/lib/local-date.ts new file mode 100644 index 000000000..7b2318538 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/local-date.ts @@ -0,0 +1,11 @@ +/** + * Local-timezone date stamp (YYYY-MM-DD) for default stack names. + * + * `new Date().toISOString()` is UTC — so a late-night run in a +UTC offset (e.g. + * 01:05 IST) would name the stack with the PREVIOUS calendar day, which reads as + * a stale/duplicate stack. Use the machine's local date instead. + */ +export function localDateStamp(d: Date = new Date()): string { + const p = (n: number) => String(n).padStart(2, '0'); + return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())}`; +} diff --git a/packages/contentstack-external-migrate/src/lib/log.ts b/packages/contentstack-external-migrate/src/lib/log.ts new file mode 100644 index 000000000..812638e9d --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/log.ts @@ -0,0 +1,33 @@ +import chalk from 'chalk'; + +const PAD = 10; + +const label = (s: string) => s.padEnd(PAD, ' '); + +export function logStageOk(stage: string, detail = ''): void { + process.stdout.write(` ${label(stage)} ${chalk.green('✓')} ${chalk.dim(detail)}\n`); +} + +export function logStageFail(stage: string, detail = ''): void { + process.stdout.write(` ${label(stage)} ${chalk.red('✗')} ${chalk.red(detail)}\n`); +} + +export function done(elapsedMs: number): void { + const s = (elapsedMs / 1000).toFixed(1); + process.stdout.write(`\n ${chalk.green('●')} ${chalk.bold(s + 's')}\n`); +} + +export function header(): void { + process.stdout.write('\n'); +} + +export function logSummary(result: { + bundleDir: string; + entryCount: number; + contentTypeCount: number; +}): void { + process.stdout.write('\n'); + process.stdout.write( + ` Bundle: ${result.bundleDir} (${result.contentTypeCount} types, ${result.entryCount} entries)\n`, + ); +} diff --git a/packages/contentstack-external-migrate/src/lib/manifest.ts b/packages/contentstack-external-migrate/src/lib/manifest.ts new file mode 100644 index 000000000..3fbfb7d17 --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/manifest.ts @@ -0,0 +1,268 @@ +import fs from 'fs'; +import path from 'path'; + +export const MANIFEST_FILENAME = 'migration-manifest.json'; +export const MANIFEST_VERSION = 1; + +export interface MigrationManifestStats { + locales: number; + contentTypes: number; + entries: number; +} + +export interface MigrationManifestSource { + spaceId?: string; + exportedAt?: string; + exportFile?: string; +} + +export interface MigrationManifestConvert { + completedAt?: string; + bundleDir?: string; + masterLocale?: string; + affix?: string; + stats?: MigrationManifestStats; +} + +export interface MigrationManifestAudit { + lastRunAt?: string; + reportPath?: string; +} + +export interface MigrationManifestImport { + completedAt?: string | null; + stackApiKeyPrefix?: string; + status?: 'pending' | 'completed' | 'failed'; +} + +export interface MigrationManifest { + version: number; + legacy: string; + workspace: string; + source?: MigrationManifestSource; + convert?: MigrationManifestConvert; + audit?: MigrationManifestAudit; + import?: MigrationManifestImport; +} + +export function manifestFilePath(workspace: string): string { + return path.join(path.resolve(workspace), MANIFEST_FILENAME); +} + +export function stackApiKeyPrefix(stackApiKey: string): string { + const trimmed = stackApiKey.trim(); + if (trimmed.length <= 7) { + return trimmed; + } + return `${trimmed.slice(0, 7)}…`; +} + +/** Path relative to workspace root for manifest storage (POSIX-style for readability). */ +export function toWorkspaceRelative(workspace: string, targetPath: string): string { + const rel = path.relative(path.resolve(workspace), path.resolve(targetPath)); + if (!rel || rel === '.') { + return '.'; + } + return rel.split(path.sep).join('/'); +} + +export function findWorkspaceRoot(startPath: string): string | null { + let dir = path.resolve(startPath); + if (!fs.existsSync(dir)) { + dir = path.dirname(dir); + } else if (fs.statSync(dir).isFile()) { + dir = path.dirname(dir); + } + + for (let i = 0; i < 10; i++) { + if (fs.existsSync(manifestFilePath(dir))) { + return dir; + } + const parent = path.dirname(dir); + if (parent === dir) { + break; + } + dir = parent; + } + return null; +} + +export interface InferWorkspaceOptions { + workspace?: string; + output?: string; + input?: string; + dataDir?: string; +} + +export function inferWorkspace(options: InferWorkspaceOptions): string { + if (options.workspace) { + return path.resolve(options.workspace); + } + + for (const hint of [options.dataDir, options.input, options.output]) { + if (!hint) continue; + const found = findWorkspaceRoot(hint); + if (found) { + return found; + } + } + + if (options.output) { + const resolved = path.resolve(options.output); + if (path.basename(resolved) === 'contentstack-import') { + return path.dirname(resolved); + } + return resolved; + } + + if (options.dataDir) { + const bundle = path.resolve(options.dataDir); + const parent = path.basename(bundle) === 'bundle' ? path.dirname(bundle) : bundle; + if (path.basename(parent) === 'contentstack-import') { + return path.dirname(parent); + } + return path.dirname(parent); + } + + return process.cwd(); +} + +export function workspaceLabel(workspace: string): string { + const rel = path.relative(process.cwd(), path.resolve(workspace)); + if (rel && !rel.startsWith('..')) { + return rel.split(path.sep).join('/') || '.'; + } + return path.resolve(workspace); +} + +export async function readManifest(workspace: string): Promise { + const filePath = manifestFilePath(workspace); + if (!fs.existsSync(filePath)) { + return null; + } + const raw = await fs.promises.readFile(filePath, 'utf8'); + return JSON.parse(raw) as MigrationManifest; +} + +function mergeManifest( + base: MigrationManifest, + patch: Partial, +): MigrationManifest { + return { + ...base, + ...patch, + version: patch.version ?? base.version, + legacy: patch.legacy ?? base.legacy, + workspace: patch.workspace ?? base.workspace, + source: patch.source ? { ...base.source, ...patch.source } : base.source, + convert: patch.convert ? { ...base.convert, ...patch.convert } : base.convert, + audit: patch.audit ? { ...base.audit, ...patch.audit } : base.audit, + import: patch.import ? { ...base.import, ...patch.import } : base.import, + }; +} + +export async function writeManifest( + workspace: string, + manifest: MigrationManifest, +): Promise { + const filePath = manifestFilePath(workspace); + await fs.promises.mkdir(path.dirname(filePath), { recursive: true }); + + const tmpPath = `${filePath}.${process.pid}.tmp`; + await fs.promises.writeFile(tmpPath, `${JSON.stringify(manifest, null, 2)}\n`, 'utf8'); + await fs.promises.rename(tmpPath, filePath); +} + +export async function patchManifest( + workspace: string, + patch: Partial, + defaults?: Pick, +): Promise { + const resolved = path.resolve(workspace); + const existing = + (await readManifest(resolved)) ?? + ({ + version: MANIFEST_VERSION, + legacy: defaults?.legacy ?? 'contentful', + workspace: workspaceLabel(resolved), + } satisfies MigrationManifest); + + const next = mergeManifest(existing, { + ...patch, + version: MANIFEST_VERSION, + workspace: patch.workspace ?? workspaceLabel(resolved), + }); + + await writeManifest(resolved, next); + return next; +} + +export function suggestNextCommand(manifest: MigrationManifest, workspace: string): string { + const ws = workspaceLabel(workspace); + const bundle = + manifest.convert?.bundleDir != null + ? path.join(ws, manifest.convert.bundleDir) + : `${ws}/contentstack-import/bundle`; + + if (!manifest.source?.exportedAt) { + return `csdx migrate:export -l contentful --space-id -o ${ws}`; + } + if (!manifest.convert?.completedAt) { + const exportFile = manifest.source.exportFile ?? 'export.json'; + return `csdx migrate:convert -l contentful -i ${path.join(ws, exportFile)} -o ${path.join(ws, 'contentstack-import')}`; + } + if (!manifest.audit?.lastRunAt) { + return `csdx migrate:audit -d ${bundle} --report-path ${ws}/audit-reports`; + } + if (manifest.import?.status !== 'completed') { + return `csdx migrate:import -k -d ${bundle}`; + } + return 'Migration pipeline complete — configure delivery credentials (see docs/expert-workflow.md)'; +} + +export function formatMigrationStatus( + manifest: MigrationManifest, + workspace: string, +): string[] { + const ws = workspaceLabel(workspace); + const lines: string[] = [`Migration workspace: ${ws}`, '']; + + if (manifest.source?.exportedAt) { + lines.push(` [✓] export ${manifest.source.exportFile ?? 'export.json'}`); + } else { + lines.push(' [ ] export not run'); + } + + if (manifest.convert?.completedAt) { + const stats = manifest.convert.stats; + const summary = stats + ? `${stats.contentTypes} types, ${stats.entries} entries` + : 'bundle ready'; + lines.push(` [✓] convert ${summary} → ${manifest.convert.bundleDir ?? 'bundle'}`); + } else { + lines.push(' [ ] convert not run'); + } + + if (manifest.convert?.completedAt) { + lines.push( + ' [ ] review manual — inspect bundle/mapper.json (docs/phases/phase-5-manifest-and-review.md)', + ); + } + + if (manifest.audit?.lastRunAt) { + lines.push(` [✓] audit ${manifest.audit.reportPath ?? 'completed'}`); + } else if (manifest.convert?.completedAt) { + lines.push(' [ ] audit not run'); + } + + if (manifest.import?.status === 'completed') { + const prefix = manifest.import.stackApiKeyPrefix ?? 'stack'; + lines.push(` [✓] import ${prefix}`); + } else if (manifest.convert?.completedAt) { + lines.push(' [ ] import not run'); + } + + lines.push(''); + lines.push(`Next: ${suggestNextCommand(manifest, workspace)}`); + return lines; +} diff --git a/packages/contentstack-external-migrate/src/lib/parse-json-loose.ts b/packages/contentstack-external-migrate/src/lib/parse-json-loose.ts new file mode 100644 index 000000000..e693c727a --- /dev/null +++ b/packages/contentstack-external-migrate/src/lib/parse-json-loose.ts @@ -0,0 +1,29 @@ +/** + * Tolerant JSON reader for Contentful exports. + * + * Strict `JSON.parse` first (clean files are untouched — no risk, no perf hit). + * Only on failure do we strip the common breakage that real-world / hand-edited + * exports carry, then retry: + * - a leading UTF-8 BOM + * - control characters (except tab/newline/carriage-return) + * - trailing commas before `}` or `]` + * + * Deliberately conservative: we do NOT apply the reference's mojibake + * substitutions (e.g. replacing every `=`), which corrupt valid content. + */ +export function cleanJsonContent(raw: string): string { + let s = raw; + if (s.charCodeAt(0) === 0xfeff) s = s.slice(1); // strip BOM + // eslint-disable-next-line no-control-regex + s = s.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, ''); // strip control chars, keep \t \n \r + s = s.replace(/,(\s*[}\]])/g, '$1'); // drop trailing commas + return s; +} + +export function parseJsonLoose(raw: string): any { + try { + return JSON.parse(raw); + } catch { + return JSON.parse(cleanJsonContent(raw)); + } +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/.gitkeep b/packages/contentstack-external-migrate/src/services/contentful/.gitkeep new file mode 100644 index 000000000..e69de29bb diff --git a/packages/contentstack-external-migrate/src/services/contentful/app/index.json b/packages/contentstack-external-migrate/src/services/contentful/app/index.json new file mode 100644 index 000000000..8fc7dfa76 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/app/index.json @@ -0,0 +1,3668 @@ +{ + "entries": [ + { + "uid": "blt306893215247514d", + "_version": 6, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6307403f08132800192fe615", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-09-14T13:26:39.897Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

With the Contentstack Marketplace Aprimo integration, into your headless CMS, you can easily manage and share digital assets across multiple platforms.

Using the Custom Field and JSON RTE plugin, you can integrate Aprimo with Contentstack. You can create an entry in Contentstack and, with the integration, view all the digital assets in Contentstack.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs3997a434a3407aca" + }, + "description": "Custom Field allows you to select multiple images to add them to your entry from your Aprimo account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csb4b648266a7e609c" + }, + "description": "You can add images from the Aprimo app to your JSON Rich Text Editor field using the Aprimo JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltf38c093728e6118d", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-09-14T13:28:32.147Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "7340", + "filename": "Aprimo.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Aprimo.svg", + "updated_at": "2022-09-14T13:28:32.147Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf38c093728e6118d/6321d700acc2b02a2d2beb76/Aprimo.svg" + }, + "installation_url": "/#!/apps/6307403f08132800192fe615/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltab7667c5bfa68ab5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:02.543Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "47090", + "filename": "aprimo1.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo1.png", + "updated_at": "2022-09-14T13:27:02.543Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltab7667c5bfa68ab5/6321d6a6aab1fc6da8413bbe/aprimo1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3a5bc2faed088ba0", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:03.228Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "44450", + "filename": "aprimo2.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo2.png", + "updated_at": "2022-09-14T13:27:03.228Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3a5bc2faed088ba0/6321d6a77b677842d8282859/aprimo2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltb6404261010a70ac", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:09.528Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "293528", + "filename": "aprimo3.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo3.png", + "updated_at": "2022-09-14T13:27:09.528Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb6404261010a70ac/6321d6ad3a97082c2920f61b/aprimo3.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt54e7fb96e980dabd", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:09.312Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "224997", + "filename": "aprimo4.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo4.png", + "updated_at": "2022-09-14T13:27:09.312Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt54e7fb96e980dabd/6321d6adaa855a2a336b9bb0/aprimo4.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt6d4821e32a03a9ce", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:08.114Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "74233", + "filename": "aprimo5.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo5.png", + "updated_at": "2022-09-14T13:27:08.114Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt6d4821e32a03a9ce/6321d6ac2769d078008690e0/aprimo5.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt720989f14aff7ec3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-14T13:27:08.848Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "137310", + "filename": "aprimo6.png", + "parent_uid": "bltd9b123ad99b0ca80", + "tags": [], + "title": "aprimo6.png", + "updated_at": "2022-09-14T13:27:08.848Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:01.962Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt720989f14aff7ec3/6321d6ac5d2a8f4646a65840/aprimo6.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cse67b21f4286086a8" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/aprimo/", + "_metadata": { + "uid": "cs74da8d29f725d7bf" + } + } + ], + "summary": "Fetch digital assets (images) from your Aprimo account into Contentstack entries.", + "tags": [], + "title": "Aprimo", + "updated_at": "2025-01-24T11:35:05.653Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/aprimo", + "use_cases": "

Manage Aprimo digital media with ease: The Aprimo app lets you manage images within your entries. With Aprimo, you can easily link all the images without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Aprimo Custom Field or JSON RTE field to insert images in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Aprimo app allows geographically dispersed teams to easily store, share and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:53:49.590Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blte0c272ac85362b1e", + "_version": 7, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "63e1fd2363081e001992f20f", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2023-02-07T09:50:55.600Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

With the Contentstack Marketplace Brandfolder app integration into your headless CMS, you can easily manage and share digital assets (images) across multiple platforms.
Using the Custom Field and JSON Rich Text Editor plugin, you can integrate Brandfolder with Contentstack. You can create an entry in Contentstack and view all the digital assets within your Contentstack website.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csabc9083d38203db6" + }, + "description": "Custom Field allows you to select multiple images to add to your entry from your Brandfolder account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs2b539819aee4ff04" + }, + "description": "You can add images from the Brandfolder app to your JSON Rich Text Editor field using the Brandfolder JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blta70fdaf98d6bb82a", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2023-02-07T10:08:04.960Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "2242", + "filename": "Brandfolder.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Brandfolder.svg", + "updated_at": "2023-02-07T10:08:04.960Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta70fdaf98d6bb82a/63e22304933db53d66f72d37/Brandfolder.svg" + }, + "installation_url": "/#!/apps/63e1fd2363081e001992f20f/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltc0ed1ab61388a84e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-06-22T07:49:19.401Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "100032", + "filename": "App_Config.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "App_Config.png", + "updated_at": "2023-06-22T07:49:19.401Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltc0ed1ab61388a84e/6493fcffcbbe0752f5d15fd6/App_Config.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt932072d875540e5a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.097Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "78360", + "filename": "brandfolder_customfield_select.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_customfield_select.png", + "updated_at": "2023-02-07T10:06:58.097Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt932072d875540e5a/63e222c2ea95785b83d3f5d0/brandfolder_customfield_select.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt73f9737af627514f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.115Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "83799", + "filename": "brandfolder_contenttype.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_contenttype.png", + "updated_at": "2023-02-07T10:06:58.115Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt73f9737af627514f/63e222c2f03f747756684c77/brandfolder_contenttype.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt516dbfe1818c2389", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.171Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "92332", + "filename": "brandfolder_jsonrte_contenttype.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "brandfolder_jsonrte_contenttype.png", + "updated_at": "2023-02-07T10:06:59.171Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt516dbfe1818c2389/63e222c34c4b0210bc379ec6/brandfolder_jsonrte_contenttype.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt90ab63cc6a44d249", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:57.943Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "18057", + "filename": "customfield_without_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "customfield_without_data.png", + "updated_at": "2023-02-07T10:06:57.943Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt90ab63cc6a44d249/63e222c197fe254050234eb3/customfield_without_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3485004145939873", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.822Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "59051", + "filename": "selector_collection.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_collection.png", + "updated_at": "2023-02-07T10:06:58.822Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3485004145939873/63e222c2fc79c04b19c2f344/selector_collection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta5a897dafc73a996", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.724Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "389773", + "filename": "selector_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_data.png", + "updated_at": "2023-02-07T10:06:59.724Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta5a897dafc73a996/63e222c3be94ee3bf4afd8aa/selector_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt58b1a3a249de1f1f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:59.582Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "282122", + "filename": "selector_place_image.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "selector_place_image.png", + "updated_at": "2023-02-07T10:06:59.582Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt58b1a3a249de1f1f/63e222c3e414c23655e13ee9/selector_place_image.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt05120b040d890a1c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.751Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "61474", + "filename": "customfield_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "customfield_data.png", + "updated_at": "2023-02-07T10:06:58.751Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt05120b040d890a1c/63e222c276abcd351bacd47b/customfield_data.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt44176a644efbe9b4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-02-07T10:06:58.464Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "170476", + "filename": "jsonrte_data.png", + "parent_uid": "blt8f6e144007ba8c5c", + "tags": [], + "title": "jsonrte_data.png", + "updated_at": "2023-02-07T10:06:58.464Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt44176a644efbe9b4/63e222c23849a0141b70237a/jsonrte_data.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/brandfolder/", + "_metadata": { + "uid": "csd2223db13369101b" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps", + "_metadata": { + "uid": "cs8c54cc546665821f" + } + } + ], + "summary": "Fetch digital assets (images) from your Brandfolder account into Contentstack entries.", + "tags": [], + "title": "Brandfolder", + "updated_at": "2025-01-24T11:19:39.982Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/brandfolder", + "use_cases": "

Manage Brandfolder digital media readily: The Brandfolder app lets you fetch and manage images within your entries. With Brandfolder, you can easily link all the images without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Custom Field or JSON RTE field to insert images in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Brandfolder app allows geographically dispersed teams to store, share, and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:55:14.141Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt2e5ed9f109bb156f", + "_version": 12, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "61ddc1b51ecff10018907c4d", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:06.028Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

Contentstack's Marketplace apps offer a variety of ways to integrate third-party applications, such as Bynder, directly into your headless CMS. With this, you can streamline the process of managing and sharing digital assets across multiple platforms.

Using a Contentstack Custom Field, you can integrate Bynder with Contentstack directly. You can create an entry in Contentstack, the app will ensure that you are able to view the digital assets within your CMS.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs23cd1a05a970bc44" + }, + "description": "While creating entries, you can select one or more images, videos, or documents as the input value for the field from your Bynder account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdae58a2b06a451d4" + }, + "description": "You can add assets from the Bynder app to your JSON Rich Text Editor field using the Bynder JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blteb81b84adb512d31", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:09:59.102Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "2589", + "filename": "Bynder.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Bynder.svg", + "updated_at": "2022-03-29T11:09:59.102Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blteb81b84adb512d31/6242e9070466d7630dd3a706/Bynder.svg" + }, + "installation_url": "#!/apps/61ddc1b51ecff10018907c4d/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/" + }, + "screenshots": [ + { + "_version": 2, + "is_dir": false, + "uid": "blt9f6cc27c83239660", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:48.091Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "43135", + "filename": "bynder-config-screen.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ConfigScreen.png", + "updated_at": "2022-07-21T14:47:18.151Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9f6cc27c83239660/62d966f6a2057a5e86269a95/bynder-config-screen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4c0f3e1846fac19e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:47.477Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "42470", + "filename": "Bynder_ContentType_AppSelection.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ContentType_AppSelection.png", + "updated_at": "2022-03-29T11:09:47.477Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4c0f3e1846fac19e/6242e8fb311ad5112f12b57c/Bynder_ContentType_AppSelection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt511316bff90cd2a3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:45.503Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "54617", + "filename": "Bynder_ContentTypeExtensionSelection.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_ContentTypeExtensionSelection.png", + "updated_at": "2022-03-29T11:09:45.503Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt511316bff90cd2a3/6242e8f99b68390fcd0530a6/Bynder_ContentTypeExtensionSelection.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt24acb3261bd466fa", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:47.491Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "22852", + "filename": "Bynder_CustomField_NoAsset.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_NoAsset.png", + "updated_at": "2022-03-29T11:09:47.491Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt24acb3261bd466fa/6242e8fbff4cca132d166a2c/Bynder_CustomField_NoAsset.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd2691e7f305d8a94", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:55.518Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "33864", + "filename": "Bynder_SelectorPage_Connect.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_Connect.png", + "updated_at": "2022-03-29T11:09:55.518Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd2691e7f305d8a94/6242e9039b68390fcd0530ae/Bynder_SelectorPage_Connect.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltc58200f52a299c8a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:53.880Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "202476", + "filename": "Bynder_SelectorPage_Login.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_Login.png", + "updated_at": "2022-03-29T11:09:53.880Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltc58200f52a299c8a/6242e901c470e610f0a9fea5/Bynder_SelectorPage_Login.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf6a97201c2cfb505", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:51.876Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "358816", + "filename": "Bynder_SelectorPage.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage.png", + "updated_at": "2022-03-29T11:09:51.876Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf6a97201c2cfb505/6242e8ffa9ee655f1991e1a1/Bynder_SelectorPage.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd390b7049019a676", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:53.003Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "333643", + "filename": "Bynder_SelectorPage_AddOption.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_SelectorPage_AddOption.png", + "updated_at": "2022-03-29T11:09:53.003Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd390b7049019a676/6242e9015564b679c0c521c6/Bynder_SelectorPage_AddOption.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt334ba0bfefd731cd", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:45.456Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "128375", + "filename": "Bynder_CustomField_Assets.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_Assets.png", + "updated_at": "2022-03-29T11:09:45.456Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt334ba0bfefd731cd/6242e8f9906f01655b799992/Bynder_CustomField_Assets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9ec31cb593cc984f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:46.572Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "211471", + "filename": "Bynder_CustomField_ActiveHover.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "Bynder_CustomField_ActiveHover.png", + "updated_at": "2022-03-29T11:09:46.572Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9ec31cb593cc984f/6242e8fadac6690b70a2dc07/Bynder_CustomField_ActiveHover.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt22269eac414805e1", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:48.908Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "49642", + "filename": "bynder-rte-field.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-field.png", + "updated_at": "2022-07-21T14:22:48.908Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt22269eac414805e1/62d9613848cc366ab5407e1c/bynder-rte-field.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt85f67a817a0741b7", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.521Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "21861", + "filename": "bynder-select-plugin.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-select-plugin.png", + "updated_at": "2022-07-21T14:22:49.521Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt85f67a817a0741b7/62d96139e49d4a6983cc1ec2/bynder-select-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltce795eb8689ec488", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.605Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "51773", + "filename": "bynder-selected-plugin.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-selected-plugin.png", + "updated_at": "2022-07-21T14:22:49.605Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltce795eb8689ec488/62d96139ecc54c6cacd810c5/bynder-selected-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4a7978cc57659046", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.156Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "52128", + "filename": "bynder-rte-icon.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-icon.png", + "updated_at": "2022-07-21T14:22:49.156Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4a7978cc57659046/62d961392b85cb6d849cce74/bynder-rte-icon.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte04688a858dde8ed", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-07-21T14:22:49.349Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "97587", + "filename": "bynder-rte-selected-assets.png", + "parent_uid": "blt75dcc859c2359a54", + "tags": [], + "title": "bynder-rte-selected-assets.png", + "updated_at": "2022-07-21T14:22:49.349Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte04688a858dde8ed/62d96139e9d7646bfeda2b47/bynder-rte-selected-assets.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/bynder", + "_metadata": { + "uid": "cs5381f9ee9cce2964" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs072dfa7b76c413be" + } + } + ], + "summary": "Fetch digital assets (images and videos) from your Bynder account into a field of an entry. ", + "tags": [], + "title": "Bynder", + "updated_at": "2025-01-24T11:33:44.597Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/bynder", + "use_cases": "

Manage Bynder digital media with ease: Contentstack's integration with Bynder allows you to link all your Bynder digital assets with ease. To access your Bynder assets, you don't have to leave your CMS. Instead, the integration allows the Bynder portal to open in the entry of your content type and you can choose and insert the assets within your entry page.

Get better control over all your marketing resources: The integration allows you to manage the entire content lifecycle of your marketing strategy. You can create content in Contentstack and use the Bynder Custom Field Extension to insert digital assets in your content. The integration provides a single solution to manage all your marketing resources inside your CMS.

Simplify sharing and distribution of digital assets: With Bynder's integration with Contentstack, your geographically dispersed teams can easily create, share, and distribute content. This makes it possible to execute large-scale marketing campaigns with cross-functional teams.

", + "publish_details": { + "time": "2025-01-28T10:53:49.649Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt5307633e8c63d59d", + "_version": 17, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "61c04dd81ecff10018907bed", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:07.327Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

Contentstack' Marketplace Apps offers a variety of ways to integrate third-party applications, such as Cloudinary, directly into your headless CMS. With the Cloudinary app, you can streamline the process of managing and sharing images across multiple platforms.

Custom Field or JSON RTE, you can integrate Cloudinary with Contentstack directly. You can create content in Contentstack, and Cloudinary will ensure that you are able to view and access your Cloudinary images within your CMS.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs451ee37dd5248c6e" + }, + "description": "While creating entries, you can select one or more Cloudinary images or videos as the input value for the field." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csa072b2b0b1c4e59b" + }, + "description": "Add assets from Cloudinary app to your JSON Rich Text Editor field using the Cloudinary JSON RTE Plugin" + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt5492471633f54c05", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:07.336Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "4694", + "filename": "cloudinary_cloud_glyph_512x512.png", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "cloudinary_cloud_glyph_512x512.png", + "updated_at": "2022-03-29T11:10:07.336Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5492471633f54c05/6242e90f6aee76195cd5a511/cloudinary_cloud_glyph_512x512.png" + }, + "installation_url": "/#!/apps/61c04dd81ecff10018907bed/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/" + }, + "screenshots": [ + { + "_version": 2, + "is_dir": false, + "uid": "blt8148fc15e5e4ea9e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-09-06T12:39:36.971Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "75712", + "filename": "Cloudinary-Config-1.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "Cloudinary-Config-Updated.png", + "updated_at": "2023-09-06T12:39:48.250Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8148fc15e5e4ea9e/64f8730916f77f0e36cbb51b/Cloudinary-Config-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltfd9d4a80ad36f5de", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:08.343Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "32748", + "filename": "coudinary_entry_creation.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "coudinary_entry_creation.png", + "updated_at": "2022-03-29T11:10:08.343Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfd9d4a80ad36f5de/6242e9109b68390fcd0530cd/coudinary_entry_creation.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt760c78d3f76b4df2", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:08.579Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "328618", + "filename": "cloudinary_asset_listing.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary_asset_listing.png", + "updated_at": "2022-03-29T11:10:08.579Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt760c78d3f76b4df2/6242e910aeff370de94d90be/cloudinary_asset_listing.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4e911a20719951a4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:10:07.606Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "222866", + "filename": "cloudinary_asset_loaded.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary_asset_loaded.png", + "updated_at": "2022-03-29T11:10:07.606Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4e911a20719951a4/6242e90fe1962d6a51cef416/cloudinary_asset_loaded.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf92c82a97fb2b970", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:38.068Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "44299", + "filename": "cloudinary-entry-json-rte.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-entry-json-rte.png", + "updated_at": "2022-05-26T06:52:38.068Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf92c82a97fb2b970/628f23b640e2312e82dd096b/cloudinary-entry-json-rte.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt7ddc3a7b1103771c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.903Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38567", + "filename": "cloudinary-add-plugin.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-add-plugin.png", + "updated_at": "2022-05-26T06:52:37.903Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt7ddc3a7b1103771c/628f23b5170c712e88665a7e/cloudinary-add-plugin.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte3a2863a52337490", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.925Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "61508", + "filename": "cloudinary-add-plugin-added.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-add-plugin-added.png", + "updated_at": "2022-05-26T06:52:37.925Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte3a2863a52337490/628f23b597d6686b1cff96f3/cloudinary-add-plugin-added.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltdefa93e028fdb7a4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:37.768Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "18372", + "filename": "cloudinary-rte.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-rte.png", + "updated_at": "2022-05-26T06:52:37.768Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltdefa93e028fdb7a4/628f23b519611a7d301084a4/cloudinary-rte.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte93e98a5c1f9b21b", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-05-26T06:52:38.513Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "356728", + "filename": "cloudinary-dashboard.png", + "parent_uid": "bltb977c7f5e15fa4f5", + "tags": [], + "title": "cloudinary-dashboard.png", + "updated_at": "2022-05-26T06:52:38.513Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte93e98a5c1f9b21b/628f23b6eaff1924caa64c4b/cloudinary-dashboard.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/cloudinary/", + "_metadata": { + "uid": "cs5be545df98c27320" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs2273829bfbdc05f2" + } + } + ], + "summary": "Fetches assets (images and videos) from your Cloudinary account into the field of an entry.", + "tags": [], + "title": "Cloudinary", + "updated_at": "2025-01-24T11:15:04.176Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/cloudinary", + "use_cases": "

One interface for content and asset management: The integration of Contentstack with Cloudinary allows you to manage content and Cloudinary assets in a single interface. Rather than managing two different apps (CMS and Cloudinary),  you save time and effort by accessing Cloudinary assets from the entry page.

Simplified digital asset sharing and distribution: Once you integrate Contentstack with Cloudinary, your geographically dispersed teams can easily create, share, and distribute content across different departments. Thus, the execution of large-scale marketing campaigns with cross-functional teams becomes possible.

Improved control over all your marketing resources: With the integration of Contentstack and Cloudinary, you gain better control over your marketing resources, allowing you to easily manage the entire content lifecycle. You simply have to create content in Contentstack and use the Cloudinary Custom Field Extension to insert digital assets in your entry.

", + "publish_details": { + "time": "2025-01-28T10:55:29.069Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blteb2e1c080caa44dd", + "_version": 3, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6667fb7b2e29d10012f8c342", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-06-11T08:25:11.583Z", + "created_by": "blt7314f6e631536c9d", + "description": "

By integrating the Digizuite app from the Contentstack Marketplace into your headless CMS, you can effortlessly manage, share, and collaborate on assets across multiple platforms.

By using the Custom Field and JSON Rich Text Editor plugin, you can integrate Digizuite with Contentstack. You can create an entry in Contentstack and view all your digital assets stored in your Digizuite account inside it.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csb0eb4bdf2eac6490" + }, + "description": "Custom Field allows you to select multiple assets from your Digizuite account and add them to your entry." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs9b68fe7c8a9a15ee" + }, + "description": "Using the Digizuite JSON RTE Plugin, you can add assets from the Digizuite app to your JSON Rich Text Editor field." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt1b43d8021f6505c7", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2024-06-11T07:59:32.914Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "1233", + "filename": "digizuite-logo.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "digizuite-logo.svg", + "updated_at": "2024-06-11T07:59:32.914Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b43d8021f6505c7/666803e471a11048c94face4/digizuite-logo.svg" + }, + "installation_url": "/#!/apps/6667fb7b2e29d10012f8c342/install", + "links": { + "source_code": "", + "documentation": "https://www.contentstack.com/docs/developers/marketplace-apps/digizuite", + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt66f588d3cff98276", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.279Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "21793", + "filename": "9-Digizuite-JSONRTE-App-Icon.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "9-Digizuite-JSONRTE-App-Icon.png", + "updated_at": "2024-06-11T09:07:25.279Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt66f588d3cff98276/666813cd88395e06f03965f0/9-Digizuite-JSONRTE-App-Icon.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltd34a9b21ede5e552", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.375Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "49714", + "filename": "2-Digizuite-UI-Locations.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "2-Digizuite-UI-Locations.png", + "updated_at": "2024-06-11T09:07:25.375Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd34a9b21ede5e552/666813cdd7f5604f7b440a9f/2-Digizuite-UI-Locations.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta1b7d8842cd0a4bb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.527Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "55326", + "filename": "3-Digizuite-Custom-Field-Sample-Entry.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "3-Digizuite-Custom-Field-Sample-Entry.png", + "updated_at": "2024-06-11T09:07:25.527Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta1b7d8842cd0a4bb/666813cdec03bd02bb15a673/3-Digizuite-Custom-Field-Sample-Entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta00eab11702b4b97", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.527Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "107874", + "filename": "1-Digizuite-Configuration.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "1-Digizuite-Configuration.png", + "updated_at": "2024-06-11T09:07:25.527Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta00eab11702b4b97/666813cd7456ddd5b9512c0d/1-Digizuite-Configuration.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt15c09164d59523eb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.502Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "40003", + "filename": "4-Digizuite-Selector-Page-Login.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "4-Digizuite-Selector-Page-Login.png", + "updated_at": "2024-06-11T09:07:25.502Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt15c09164d59523eb/666813cd679953d444447fdd/4-Digizuite-Selector-Page-Login.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta6eaff56b60384ea", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.546Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "233566", + "filename": "6-Digizuite-Selector-Page-Multi-Insert.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "6-Digizuite-Selector-Page-Multi-Insert.png", + "updated_at": "2024-06-11T09:07:25.546Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta6eaff56b60384ea/666813cdd7f5606cd2440aa3/6-Digizuite-Selector-Page-Multi-Insert.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt03e3f8cedee5b290", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.568Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "71705", + "filename": "7-Digizuite-Custom-Field-Assets-Added.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "7-Digizuite-Custom-Field-Assets-Added.png", + "updated_at": "2024-06-11T09:07:25.568Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt03e3f8cedee5b290/666813cde46c314c3d364f88/7-Digizuite-Custom-Field-Assets-Added.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltbfc8e81a474ab1c5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.435Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "87890", + "filename": "8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png", + "updated_at": "2024-06-11T09:07:25.435Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltbfc8e81a474ab1c5/666813cd472c5f1d5fc8768c/8-Digizuite-Custom-Field-Assets-View-Thumbnail-Features.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt12d61d2546171c89", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.720Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "113812", + "filename": "10-Digizuite-JSONRTE-Assets-Added-Features.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "10-Digizuite-JSONRTE-Assets-Added-Features.png", + "updated_at": "2024-06-11T09:07:25.720Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt12d61d2546171c89/666813cd049fefc578cc26a7/10-Digizuite-JSONRTE-Assets-Added-Features.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt36ee373648b4fa4c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-06-11T09:07:25.820Z", + "created_by": "blt7314f6e631536c9d", + "file_size": "207392", + "filename": "5-Digizuite-Selector-Page-Placing-Single-Asset.png", + "parent_uid": "blt613a74bd13dd3512", + "tags": [], + "title": "5-Digizuite-Selector-Page-Placing-Single-Asset.png", + "updated_at": "2024-06-11T09:07:25.820Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt36ee373648b4fa4c/666813cd599f1a26956ea87d/5-Digizuite-Selector-Page-Placing-Single-Asset.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/digizuite", + "_metadata": { + "uid": "cse4809e1dd2392680" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs8ce0c93fa2b05dc3" + } + } + ], + "summary": "Add digital assets from your Digizuite account into your Contentstack entries.", + "tags": [], + "title": "Digizuite", + "updated_at": "2025-01-24T06:24:10.302Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/digizuite", + "use_cases": "

Manage Digizuite digital media with ease: The Digizuite app lets you manage assets within your entries. With Digizuite, you can easily access all the assets without leaving your headless CMS.

Better marketing campaigns with easy-to-access assets: You can create content in Contentstack and insert assets in your entry using the Digizuite Custom Field or JSON RTE field. This allows cross-functional teams to work on large-scale campaigns easily.

Easy distribution of digital assets: The Digizuite app allows geographically dispersed teams to readily store, share, and fetch digital media assets. 

", + "publish_details": { + "time": "2025-01-28T10:56:57.063Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt802cfeedb40e4e3c", + "_version": 4, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "65eec8748ae77300126404c3", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-03-11T11:10:31.717Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

By integrating the Egnyte app from the Contentstack Marketplace into your headless CMS, you can effortlessly manage, share, and collaborate on assets across multiple platforms.

By using the Custom Field and JSON Rich Text Editor plugin, you can integrate Egnyte with Contentstack. You can create an entry in Contentstack and view all your digital assets stored in Egnyte inside it.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs1ded11395e73ee37" + }, + "description": "Custom Field allows you to select multiple assets from your Egnyte account and add them to your entry." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdd8734e35c172e8a" + }, + "description": "You can add assets from the Egnyte app to your JSON Rich Text Editor field using the Egnyte JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt9bbc2541009fcd2f", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2024-03-11T11:02:36.047Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "1467", + "filename": "Egnyte_512.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Egnyte_512.svg", + "updated_at": "2024-03-11T11:02:36.047Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9bbc2541009fcd2f/65eee4cc6b2184040adf6434/Egnyte_512.svg" + }, + "installation_url": "/#!/apps/65eec8748ae77300126404c3/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt39e69a5b368a44e2", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.868Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "94158", + "filename": "SelectAssets.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "SelectAssets.png", + "updated_at": "2024-03-11T11:23:56.868Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt39e69a5b368a44e2/65eee9cc2d7272040a9be3b5/SelectAssets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta1c3e7ab01f46c79", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.802Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "54525", + "filename": "JSONRTEModeling.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "JSONRTEModeling.png", + "updated_at": "2024-03-11T11:23:56.802Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta1c3e7ab01f46c79/65eee9cc9b3861040aba306a/JSONRTEModeling.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltee77f8357082a1bf", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.774Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "79398", + "filename": "SelectExtensionFinal.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "SelectExtensionFinal.png", + "updated_at": "2024-03-11T11:23:56.774Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltee77f8357082a1bf/65eee9cc9b01c5040a371747/SelectExtensionFinal.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt34b26dc503b5e85c", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:56.682Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "20095", + "filename": "JsonRTE_Select.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "JsonRTE_Select.png", + "updated_at": "2024-03-11T11:23:56.682Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt34b26dc503b5e85c/65eee9cc00aa28040ab71676/JsonRTE_Select.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blta5e4ff04ec5dcee3", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.006Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "54241", + "filename": "EnterPassword.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "EnterPassword.png", + "updated_at": "2024-03-11T11:23:43.006Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta5e4ff04ec5dcee3/65eee9bf32eb75040a886817/EnterPassword.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltb9da556882e17694", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.005Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "73834", + "filename": "AppExtensionSelect.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppExtensionSelect.png", + "updated_at": "2024-03-11T11:23:43.005Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb9da556882e17694/65eee9bff2e3cc040ac912c1/AppExtensionSelect.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt428d15bb4444686f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:43.002Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "85393", + "filename": "ConfigScreen.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ConfigScreen.png", + "updated_at": "2024-03-11T11:23:43.002Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt428d15bb4444686f/65eee9bf6c9f9b040a4d470e/ConfigScreen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt4d94b995ba81c23e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.992Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "88287", + "filename": "ConfigScreenWithData.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ConfigScreenWithData.png", + "updated_at": "2024-03-11T11:23:42.992Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt4d94b995ba81c23e/65eee9beacd14e0407fb942f/ConfigScreenWithData.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt78f68811cc9e7f85", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.766Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "144988", + "filename": "AppEntryCreated.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppEntryCreated.png", + "updated_at": "2024-03-11T11:23:42.766Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt78f68811cc9e7f85/65eee9bef40463040a6f7c13/AppEntryCreated.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt15b5d6ef0c1ee73d", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.707Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "67969", + "filename": "CustomField1.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "CustomField1.png", + "updated_at": "2024-03-11T11:23:42.707Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt15b5d6ef0c1ee73d/65eee9be5aa9cf0407b08f75/CustomField1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt838f8692be88b3fb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.696Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "47709", + "filename": "AllowAccess.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AllowAccess.png", + "updated_at": "2024-03-11T11:23:42.696Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt838f8692be88b3fb/65eee9bef40463040a6f7c0f/AllowAccess.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt7108e5839f206055", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.677Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "73095", + "filename": "ContentModelingApp.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "ContentModelingApp.png", + "updated_at": "2024-03-11T11:23:42.677Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt7108e5839f206055/65eee9be5b334a040a1ebffe/ContentModelingApp.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt61671b65d7b3f75a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.670Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "41425", + "filename": "AddEmail.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AddEmail.png", + "updated_at": "2024-03-11T11:23:42.670Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt61671b65d7b3f75a/65eee9be9b3861040aba3066/AddEmail.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt8fb40eb9558601fb", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-03-11T11:23:42.609Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "17201", + "filename": "AppEntryCreation.png", + "parent_uid": "blt2c3df632773487d4", + "tags": [], + "title": "AppEntryCreation.png", + "updated_at": "2024-03-11T11:23:42.609Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8fb40eb9558601fb/65eee9be2d7272040a9be3b1/AppEntryCreation.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "csc0ffeffc343abc82" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/egnyte", + "_metadata": { + "uid": "csfdebc9f93c49b957" + } + } + ], + "summary": "Fetch digital assets from your Egnyte account into your Contentstack entries. ", + "tags": [], + "title": "Egnyte", + "updated_at": "2025-01-24T06:28:44.659Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/egnyte", + "use_cases": "

Manage Egnyte digital media with ease: The Egnyte app lets you manage assets within your entries. With Egnyte, you can easily access all the assets without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Egnyte Custom Field or JSON RTE field to insert assets in your entry. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Egnyte app allows geographically dispersed teams to readily store, share, and fetch digital media assets.

", + "publish_details": { + "time": "2025-01-28T10:55:57.436Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt049c7b2db4db67a4", + "_version": 7, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "65e997d02adeba0012c6e00f", + "built_by": [ + { + "uid": "blt4ecd9b73e0a6eef7", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2024-05-09T05:28:47.806Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

Filerobot by Scaleflex is the single source of truth for all your digital assets, allowing for seamless collaboration across platforms via the Asset Hub and through a lively ecosystem of plugins and connectors.

Don't bother with multiple cloud storages, image editors, file compression, and CDN setup anymore, Filerobot takes care of it all.

Upload your digital assets (images, videos, and more) to Contentstack from Scaleflex’s Filerobot platform via the integrated modular widget.

Your media will then be natively accelerated by a top tier, multi-tenant, Content Delivery Network (CDN) architecture.

Deliver beautiful digital experiences thanks to seamless content operations:

Filerobot is a scalable, performance-oriented digital asset management platform. It has integrated image and video optimizers that store, organize, optimize, and deliver all your media assets lightning-fast around the world, to all device types.

Filerobot has a multi-tenant, scalable, and flexible file system, with an intuitive interface that simplifies complex workflows and integrations within your content operations. It uses AI-powered uploads with automatic workflows to enrich media assets for better categorization and retrieval.

Our overall mission?

To give meaning to your brand assets.

With Filerobot DAM, you’ll be able to:

1. Upload, manage, and enrich all of your digital assets from a single source of truth.

2. Collaborate with internal and external teams within our one cloud collaboration platform.

3. Optimize your images to boost SEO rankings, create beautiful digital experiences, and push device-friendly content.

4. Publish and accelerate the impact of your images thanks to real-time insights on the usage and performance of your media assets.

There’s no development needed to start reaping the benefits of Filerobot. Simply set up your account and start enjoying fast and responsive images now.

", + "dynamic_links": [], + "feature_types": [], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blta4e22048c78a4aa8", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:27:27.778Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "14374", + "filename": "Scaleflex_Filerobot.png", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Scaleflex_Filerobot.png", + "updated_at": "2024-05-09T05:27:27.778Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blta4e22048c78a4aa8/663c5ebfa4f240e5875f3dfc/Scaleflex_Filerobot.png" + }, + "installation_url": "/#!/apps/65e997d02adeba0012c6e00f/install", + "links": { + "source_code": "", + "documentation": "https://docs.scaleflex.com/filerobot-documentation/headless-dam-and-api/plugins-and-connectors/plugins/contentstack", + "end_user_license_agreement": "https://legal.scaleflex.com/privacy/global-privacy-policy", + "others": [ + { + "title": "Support & Feedback", + "href": "hiep.le@scaleflex.com" + } + ] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "blt652e924ceb8551f9", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:14.893Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "65506", + "filename": "json-rte-4.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "json-rte-4.png", + "updated_at": "2024-05-09T05:34:14.893Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt652e924ceb8551f9/663c605685e08b68b4718c7a/json-rte-4.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt20a45772230850d6", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.045Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "168564", + "filename": "config-screen-1.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "config-screen-1.png", + "updated_at": "2024-05-09T05:34:15.045Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt20a45772230850d6/663c60573af9ac0cd499b85b/config-screen-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt61bcba33de8f290f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.142Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "68051", + "filename": "customfield-2.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "customfield-2.png", + "updated_at": "2024-05-09T05:34:15.142Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt61bcba33de8f290f/663c6057ece60c9134b95ce0/customfield-2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt8190f96123ca9a48", + "ACL": {}, + "content_type": "image/png", + "created_at": "2024-05-09T05:34:15.727Z", + "created_by": "blt78cea3a89ceb6137", + "file_size": "808508", + "filename": "selector-page-3.png", + "parent_uid": "blt60b81c8c84a94a5f", + "tags": [], + "title": "selector-page-3.png", + "updated_at": "2024-05-09T05:34:15.727Z", + "updated_by": "blt78cea3a89ceb6137", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt8190f96123ca9a48/663c605793aa0d4b8c45683a/selector-page-3.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://docs.scaleflex.com/filerobot-documentation", + "_metadata": { + "uid": "cs9dc661efd6bcd427" + } + } + ], + "summary": "Filerobot allows you to store, enrich, normalize, resize, optimize, & distribute your media files rocket fast worldwide!", + "tags": [], + "title": "Filerobot by Scaleflex", + "updated_at": "2025-01-24T06:24:48.781Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/filerobot-by-scaleflex", + "use_cases": "

With Filerobot DAM you’ll be able to:

1. Upload, manage, and enrich all of your digital assets from a single source of truth.

2. Collaborate with internal and external teams within our one cloud collaboration platform.

3. Optimize your images to boost SEO rankings, create beautiful digital experiences, and push device-friendly content.

4. Publish and accelerate the impact of your images thanks to real-time insights on the usage and performance of your media assets.

", + "publish_details": { + "time": "2025-01-28T10:56:57.075Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt34a14a6e22c82feb", + "_version": 4, + "locale": "en-us", + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6311ab2b92549700190fe29a", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-09-02T06:58:07.096Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "description": "

Contentstack Marketplace offers a variety of ways to integrate third-party applications, such as Frontify, into your headless CMS. You can easily manage and share digital assets across multiple platforms.

Using the Custom Field and JSON RTE plugin, you can integrate Frontify with Contentstack. You can create an entry in Contentstack and, with the integration, view all the digital assets in Contentstack.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs7af6aebd48894a93" + }, + "description": "Custom Field allows you to select multiple images, videos, logos, and documents to add them to your entry from your Frontify account." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs770641304ceb4a2c" + }, + "description": "You can add assets from the Frontify app to your JSON Rich Text Editor field using the Frontify JSON RTE Plugin." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt736048058b05d53a", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-09-02T11:32:41.976Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "3182", + "filename": "frontify-icon.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "frontify-icon.svg", + "updated_at": "2022-09-02T11:32:41.976Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt736048058b05d53a/6311e9d9ebabda6520edad38/frontify-icon.svg" + }, + "installation_url": "/#!/apps/6311ab2b92549700190fe29a/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 3, + "is_dir": false, + "uid": "blt1b9cdb2da864eca7", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:06.796Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "description": "", + "file_size": "40411", + "filename": "config_screen.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "config_screen.png", + "updated_at": "2022-09-09T09:41:53.388Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b9cdb2da864eca7/631b0a6153c6564a15946c06/config_screen.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt295f242046e3a77e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:08.161Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38255", + "filename": "customField_appOptions.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_appOptions.png", + "updated_at": "2022-09-02T11:35:08.161Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt295f242046e3a77e/6311ea6ce6bd866fcfd99c15/customField_appOptions.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt22016a475135edfc", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:24.081Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "48796", + "filename": "customField_contentType.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_contentType.png", + "updated_at": "2022-09-02T11:35:24.081Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt22016a475135edfc/6311ea7c6304777e0f86d8fa/customField_contentType.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt45be00b9ef6619f5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:18.310Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "26512", + "filename": "customField_noData_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_noData_entry.png", + "updated_at": "2022-09-02T11:35:18.310Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt45be00b9ef6619f5/6311ea761004b759387c7376/customField_noData_entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt5f3939ea525cd94b", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:53.957Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "367075", + "filename": "selector_page.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "selector_page.png", + "updated_at": "2022-09-02T11:35:53.957Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5f3939ea525cd94b/6311ea9980f5d16e5c0da367/selector_page.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt2c7e3042f2394058", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:53.716Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "350610", + "filename": "selectorPage_selectAssets.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "selectorPage_selectAssets.png", + "updated_at": "2022-09-02T11:35:53.716Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt2c7e3042f2394058/6311ea99f948c06df05c2caf/selectorPage_selectAssets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt239f09512de2930f", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:30.319Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "119946", + "filename": "customField_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_entry.png", + "updated_at": "2022-09-02T11:35:30.319Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt239f09512de2930f/6311ea82fc0b1963dcef285a/customField_entry.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt5665105a7d6053f5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:40.654Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "301475", + "filename": "customField_assetHover.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "customField_assetHover.png", + "updated_at": "2022-09-02T11:35:40.654Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt5665105a7d6053f5/6311ea8cde82716cc171c83e/customField_assetHover.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt6cab308f19f4b548", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:28.330Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "65667", + "filename": "rte_contentType.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_contentType.png", + "updated_at": "2022-09-02T11:35:28.330Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt6cab308f19f4b548/6311ea80b21f130163e54441/rte_contentType.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt43631bb8c1505ae9", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:26.095Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "38223", + "filename": "rte_plugin_options.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_plugin_options.png", + "updated_at": "2022-09-02T11:35:26.095Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt43631bb8c1505ae9/6311ea7e31bdfe6df1c20a37/rte_plugin_options.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt3cf5039ad42d2ae4", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:26.007Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "35223", + "filename": "rte_icon_button.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_icon_button.png", + "updated_at": "2022-09-02T11:35:26.007Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt3cf5039ad42d2ae4/6311ea7ede82716cc171c83a/rte_icon_button.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blte2a4d111c21187f1", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-09-02T11:35:30.246Z", + "created_by": "bltd5e1f9e7bbbf5fff", + "file_size": "112368", + "filename": "rte_entry.png", + "parent_uid": "bltaefa20ab37acae9e", + "tags": [], + "title": "rte_entry.png", + "updated_at": "2022-09-02T11:35:30.246Z", + "updated_by": "bltd5e1f9e7bbbf5fff", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blte2a4d111c21187f1/6311ea82e6bd866fcfd99c19/rte_entry.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "csbfcfd116d3094522" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/frontify/", + "_metadata": { + "uid": "csd0a7675e2345489a" + } + } + ], + "summary": "Fetch digital assets (images/documents/video/music etc.) from your Frontify account into a Contentstack entry.", + "tags": [], + "title": "Frontify", + "updated_at": "2025-01-24T11:32:55.556Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/frontify", + "use_cases": "

Manage Frontify digital media with ease: The Frontify app lets you manage images, videos, icons, and documents within your entries. With Frontify, you can easily link all the digital assets without leaving your headless CMS.

Better marketing campaigns with ease-to-access assets: You can create content in Contentstack and use the Frontify Custom Field or JSON RTE Field to insert digital assets in your content. With this, cross-functional teams can work on large-scale campaigns with ease.

Easy distribution of digital assets: The Frontify app allows geographically dispersed teams to easily store, share and fetch digital media assets.

", + "ACL": {}, + "publish_details": { + "time": "2025-01-28T10:53:49.663Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt5efc6f55432a0878", + "_version": 10, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "621640ff4671880018efec74", + "built_by": [ + { + "uid": "bltec929d731b1f9d85", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:09.115Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

The Image Preset Builder app is a collection of formatting tools that help transform and optimize assets in the stack. You can build customized presets for any image file to tailor your assets as per your business requirements.

Image Preset Builder allows you to use varied preset versions of assets across your entries. With the help of this app, you can add image presets to fields such as Custom Field extensions or the JSON Rich Text Editor.

Developer Documentation:

To render the image presets built from the Image Preset Builder app in your project using the App Utils functions, please refer to the Render Images using Image Preset Builder section of the installation guide.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt7cf992884f5eca3d", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csa7d3f06c094c7174" + }, + "description": "Create presets for your image files using the Image Preset Builder extension app." + }, + { + "feature_type": [ + { + "uid": "bltf9b70a5fd3c08c36", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csdf8c11290f11ee6b" + }, + "description": "Add customized presets to your JSON Rich Text Editor fields using the Preset Builder JSON RTE Plugin" + }, + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs33da0ec99b1b5425" + }, + "description": "Add optimized image presets to Custom fields that accept assets as input." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltfe85fe6163c6371e", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:09:04.361Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "3155", + "filename": "preset.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "preset.svg", + "updated_at": "2022-03-29T11:09:04.361Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfe85fe6163c6371e/6242e8d081b559640a7f7475/preset.svg" + }, + "installation_url": "#!/apps/621640ff4671880018efec74/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "" + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltfd4c1b10fbadf2c8", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:03.273Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "175853", + "filename": "new_preset.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "new_preset.png", + "updated_at": "2022-03-29T11:09:03.273Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltfd4c1b10fbadf2c8/6242e8cfed063b096d929843/new_preset.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9becbd9461e8f109", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:02.272Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "435362", + "filename": "presets.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "presets.png", + "updated_at": "2022-03-29T11:09:02.272Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9becbd9461e8f109/6242e8cea7f9130fc619972c/presets.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "bltf66a57fbcf9adbb5", + "ACL": {}, + "content_type": "image/png", + "created_at": "2022-03-29T11:09:03.498Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "502254", + "filename": "formatting_options.png", + "parent_uid": "bltc827a00118a50f18", + "tags": [], + "title": "formatting_options.png", + "updated_at": "2022-03-29T11:09:03.498Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltf66a57fbcf9adbb5/6242e8cf077d7c10fb7aba67/formatting_options.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs6277649029047c65" + } + }, + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/image-preset-builder/", + "_metadata": { + "uid": "cs01d17b2955b24d9d" + } + } + ], + "summary": "Allows you to transform and enhance image files by creating presets to suit your business needs.", + "tags": [], + "title": "Image Preset Builder", + "updated_at": "2025-01-24T11:20:29.187Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/image-preset-builder", + "use_cases": "

Image optimization: Easily edit images and presets to increase productivity. Businesses can also use this to quickly customize and brand their products.

Media functionality: You can use the Image Preset Builder app in conjunction with the API functionality to apply campaign branding to images without having to do any frontend development.

Consistent solution for your work: You can maintain consistency across all your image files by using presets, thereby defining your brand image.

", + "publish_details": { + "time": "2025-01-28T10:55:14.129Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "blt4bc1c01faaa9515b", + "_version": 4, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6762b269e4edd60012729b3f", + "built_by": [ + { + "uid": "blt5dfea44cb76ed4ca", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2025-01-29T13:46:00.929Z", + "created_by": "blt78cea3a89ceb6137", + "description": "

Pull assets like images, videos, and product sheets straight from Kontainer.

The app allows download templates, which reformat images as they are fetched, and naming templates that can automize SEO optimization. Find out more here: https://helpdesk.kontainer.com/article/a-guide-to-download-templates/

", + "dynamic_links": [ + { + "title": "Support", + "href": "mailto:mail@kontainer.com" + } + ], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "cs0796754e1f71a5bb" + }, + "description": "Custom Field allows you to select multiple assets from your Digizuite account and add them to your entry." + } + ], + "icon": { + "uid": "bltd8d9475a7210809e", + "_version": 1, + "title": "Kontainer_logo.png", + "parent_uid": "blt2eb26851df9c0e2e", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:39:48.911Z", + "updated_at": "2025-01-29T13:39:48.911Z", + "content_type": "image/png", + "file_size": "9031", + "filename": "Kontainer_logo.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.856Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd8d9475a7210809e/679a2fa4137f136ac25f8570/Kontainer_logo.png" + }, + "installation_url": "#!/apps/6762b269e4edd60012729b3f/install", + "links": { + "source_code": "", + "documentation": "https://helpdesk.kontainer.com", + "end_user_license_agreement": "https://kontainer.com/terms-and-conditions", + "others": [] + }, + "screenshots": [ + { + "uid": "blt98932a04b31784e7", + "_version": 1, + "title": "config-1.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:44.442Z", + "updated_at": "2025-01-29T13:44:44.442Z", + "content_type": "image/png", + "file_size": "285152", + "filename": "config-1.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.871Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt98932a04b31784e7/679a30cca44add02754fe973/config-1.png" + }, + { + "uid": "bltdfe09822f7b23800", + "_version": 1, + "title": "contenttype-2.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:44.426Z", + "updated_at": "2025-01-29T13:44:44.426Z", + "content_type": "image/png", + "file_size": "150034", + "filename": "contenttype-2.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.840Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltdfe09822f7b23800/679a30ccc3e1cba508da025f/contenttype-2.png" + }, + { + "uid": "blt891a39db9979903a", + "_version": 1, + "title": "custom-field-3.png", + "parent_uid": "blt18080c44b39acda5", + "created_by": "blt78cea3a89ceb6137", + "updated_by": "blt78cea3a89ceb6137", + "created_at": "2025-01-29T13:44:45.076Z", + "updated_at": "2025-01-29T13:44:45.076Z", + "content_type": "image/png", + "file_size": "1375271", + "filename": "custom-field-3.png", + "ACL": {}, + "is_dir": false, + "tags": [], + "publish_details": { + "time": "2025-01-30T07:20:45.885Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt891a39db9979903a/679a30cdae49134467f88c26/custom-field-3.png" + } + ], + "seo": { + "title": "", + "description": "", + "image": null, + "robots": "", + "canonical_url": "" + }, + "static_links": [ + { + "type": "End-User License Agreement", + "url": "https://kontainer.com/terms-and-conditions", + "_metadata": { + "uid": "csbc44d7d224052d67" + } + }, + { + "type": "Documentation", + "url": "https://helpdesk.kontainer.com", + "_metadata": { + "uid": "cs283de2028059c0e1" + } + } + ], + "summary": "Pull assets like images, videos, and product sheets straight from Kontainer.", + "tags": [], + "title": "Kontainer", + "updated_at": "2025-02-07T19:39:19.147Z", + "updated_by": "blt78cea3a89ceb6137", + "url": "/marketplace/kontainer", + "use_cases": "

Connects assets from Kontainer Dam to ContentStack custom fields. Can be used all places there assets is needed

", + "publish_details": { + "time": "2025-02-07T19:39:26.552Z", + "user": "blt78cea3a89ceb6137", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "bltf3ea0046122ec160", + "_version": 8, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types" + } + ], + "app_uid": "6422122285be5a001944ad6d", + "built_by": [ + { + "uid": "blt31680c4e3b524fd2", + "_content_type_uid": "organizations" + } + ], + "category": [ + { + "uid": "blt6abfa301df06bf93", + "_content_type_uid": "categories" + } + ], + "coming_soon": false, + "created_at": "2023-05-05T07:59:03.313Z", + "created_by": "bltf389fd468f32cd6e", + "description": "

A minimal integration of the Ocavu 3d platform. Entries in Content Stack can be connected to an asset in Ocavu by inputting various fields. If the app is configured correctly and a valid asset key is entered into the Ocavu Asset Key field the model will be visible from the Entry edit view. This helps users stay within the Content Stack ecosystem if all they want to do is browse or preview their 3d models.

", + "dynamic_links": [ + { + "title": "Privacy policy", + "href": "https://www.ocavu.com/privacy-policy/" + }, + { + "title": "Support", + "href": "mailto:support@ocavu.com" + } + ], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features" + } + ], + "_metadata": { + "uid": "csf814c1f317212546" + }, + "description": "Custom field enables the viewing of Ocavu-hosted assets. embeds a basic 3D viewer for a 3D model using the models." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "bltd6915163f1454188", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2023-05-05T09:24:59.115Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "24491", + "filename": "Ocavu.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "Ocavu.svg", + "updated_at": "2023-05-05T09:24:59.115Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd6915163f1454188/6454cb6b2215a3bedde70c78/Ocavu.svg" + }, + "installation_url": "/#!/apps/6422122285be5a001944ad6d/install", + "links": { + "source_code": "", + "documentation": "", + "end_user_license_agreement": "", + "others": [] + }, + "screenshots": [ + { + "_version": 1, + "is_dir": false, + "uid": "bltb2fa3286f0ef991a", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.871Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "503999", + "filename": "ConfigScreen-1.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "ConfigScreen-1.png", + "updated_at": "2023-05-05T09:17:05.871Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltb2fa3286f0ef991a/6454c99197a1175f49721c63/ConfigScreen-1.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt1b3fbca5df1f4d86", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:06.237Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "217453", + "filename": "CustomField-2.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "CustomField-2.png", + "updated_at": "2023-05-05T09:17:06.237Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt1b3fbca5df1f4d86/6454c99291026c2e20d77bb3/CustomField-2.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9934f583008e9bb6", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.680Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "267212", + "filename": "AssetSelect-3.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "AssetSelect-3.png", + "updated_at": "2023-05-05T09:17:05.680Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9934f583008e9bb6/6454c991e0636f608d89159a/AssetSelect-3.png" + }, + { + "_version": 1, + "is_dir": false, + "uid": "blt9b5c5739cdb6453e", + "ACL": {}, + "content_type": "image/png", + "created_at": "2023-05-05T09:17:05.848Z", + "created_by": "bltf389fd468f32cd6e", + "file_size": "544019", + "filename": "AssetViewer-4.png", + "parent_uid": "bltb6c089404f41984f", + "tags": [], + "title": "AssetViewer-4.png", + "updated_at": "2023-05-05T09:17:05.848Z", + "updated_by": "bltf389fd468f32cd6e", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt9b5c5739cdb6453e/6454c99129a8592bf4189a9a/AssetViewer-4.png" + } + ], + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://api.seekxr.com/docs/cs-ocavu-viewer/", + "_metadata": { + "uid": "cse3e92eac0906a9a2" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs6b5ada60b8f6d4d6" + } + } + ], + "summary": "Allows viewing assets hosted in Ocavu. Embeds a simple 3d viewer of a 3d model using the Ocavu asset key of that model.", + "tags": [], + "title": "Ocavu Asset Viewer", + "updated_at": "2025-01-31T05:54:41.867Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/ocavu", + "use_cases": "

The app provides a way to view 3d models hosted in Ocavu without leaving Content Stack.

", + "publish_details": { + "time": "2025-01-31T05:54:48.273Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + }, + { + "uid": "bltd54177d2353a7558", + "_version": 7, + "locale": "en-us", + "ACL": {}, + "_in_progress": false, + "app_type": [ + { + "uid": "blte9d290b2e9e0931e", + "_content_type_uid": "app_types", + "title": "Stack App" + } + ], + "app_uid": "6227528cd2485c001994d262", + "built_by": [ + { + "_content_type_uid": "organizations", + "_version": 3, + "locale": "en-us", + "uid": "bltec929d731b1f9d85", + "ACL": {}, + "_in_progress": false, + "accelerator": [], + "additional_info": "", + "app": [], + "automation": [], + "badges": [], + "collections": [], + "created_at": "2022-03-29T11:12:21.999Z", + "created_by": "blt89b5b90cb9e7c645", + "date": null, + "description": "Contentstack - Headless CMS", + "is_this_a_guide": false, + "linked_app": [], + "logo": { + "_version": 2, + "is_dir": false, + "uid": "bltd1599ef0db421778", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:10:05.681Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "3347", + "filename": "Logo.svg", + "parent_uid": null, + "tags": [], + "title": "Contentstack", + "updated_at": "2024-07-23T07:59:25.044Z", + "updated_by": "blt7314f6e631536c9d", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2024-07-23T08:16:12.228Z", + "user": "blt7314f6e631536c9d" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/bltd1599ef0db421778/669f62ddf2780933e9679fae/Logo.svg" + }, + "metadata": { + "page_title": "", + "page_description": "", + "page_thumb": { + "_version": 3, + "is_dir": false, + "uid": "blt2af4c7391167e253", + "ACL": {}, + "content_type": "image/webp", + "created_at": "2022-03-29T11:11:02.983Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "", + "file_size": "73804", + "filename": "Cs_Marketplace.webp", + "parent_uid": "blt9dddaa4b9192231d", + "tags": [], + "title": "Marketplace_Hero.jpg", + "updated_at": "2024-06-19T12:55:48.327Z", + "updated_by": "bltb79b1c5ff2fe28ae", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2024-06-19T12:56:08.635Z", + "user": "bltb79b1c5ff2fe28ae" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt2af4c7391167e253/6672d5545c79863c672295ca/Cs_Marketplace.webp" + }, + "twitter_title": "", + "twitter_description": "", + "opengraph_title": "", + "opengraph_description": "", + "canonical_url": "", + "json_ld": "", + "robots": "" + }, + "partner_details": { + "categories": [], + "documentation_links": [], + "external_links": [], + "company_info": "", + "website": { + "title": "", + "href": "" + }, + "location": [], + "headquarters": "", + "consultants": "", + "projects": "", + "cta": { + "title": "", + "link": "" + }, + "services": "", + "use_cases": "", + "other_headlines": [], + "related_articles": [], + "video_section": { + "title": "", + "description": "", + "video_embed_code": "" + }, + "download_cta": { + "title": "", + "href": "" + } + }, + "partner_facets": [], + "starter": [], + "tags": [], + "title": "Contentstack", + "updated_at": "2024-12-11T11:41:35.586Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/contentstack", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + } + } + ], + "category": [ + { + "uid": "blte953c795ff59241c", + "_content_type_uid": "categories", + "title": "Development" + } + ], + "coming_soon": false, + "created_at": "2022-03-29T11:13:00.640Z", + "created_by": "blt89b5b90cb9e7c645", + "description": "

To further enhance the business user experience, Contentstack provides prebuilt custom field extensions that let you extend the functionality of your custom fields to serve your unique business needs while providing a native Contentstack look and feel.

Using Contentstack Custom Fields, you can now input a JSON text into an entry field. With the JSON Editor custom field, you can view, edit and format JSON text, code, trees, etc. within your Contentstack entry.

", + "dynamic_links": [], + "feature_types": [ + { + "feature_type": [ + { + "uid": "blt6b35fa46f253a6bd", + "_content_type_uid": "app_features", + "title": "Custom Field" + } + ], + "_metadata": { + "uid": "cs3b4ec101f90bd171" + }, + "description": "While creating entries, you can add a JSON code." + } + ], + "icon": { + "_version": 1, + "is_dir": false, + "uid": "blt38b2ab4ea0da2357", + "ACL": {}, + "content_type": "image/svg+xml", + "created_at": "2022-03-29T11:09:08.207Z", + "created_by": "blt89b5b90cb9e7c645", + "file_size": "6981", + "filename": "json-editor.svg", + "parent_uid": "blt2eb26851df9c0e2e", + "tags": [], + "title": "json-editor.svg", + "updated_at": "2022-03-29T11:09:08.207Z", + "updated_by": "blt89b5b90cb9e7c645", + "publish_details": { + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us", + "time": "2025-01-28T10:07:08.871Z", + "user": "blt05ac693470ad5ff7" + }, + "url": "https://eu-images.contentstack.com/v3/assets/blt8f94ebff857fe1ae/blt38b2ab4ea0da2357/6242e8d49eb79b7d7303c4bd/json-editor.svg" + }, + "installation_url": "#!/apps/6227528cd2485c001994d262/install", + "links": { + "source_code": "", + "documentation": "", + "others": [], + "end_user_license_agreement": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/" + }, + "seo": { + "canonical_url": "", + "description": "", + "image": null, + "robots": "", + "title": "" + }, + "static_links": [ + { + "type": "Documentation", + "url": "https://www.contentstack.com/docs/developers/marketplace-apps/json-editor/", + "_metadata": { + "uid": "csda257d0ac99cc671" + } + }, + { + "type": "End-User License Agreement", + "url": "https://www.contentstack.com/legal/eula-for-contentstack-proprietary-marketplace-apps/", + "_metadata": { + "uid": "cs920e968d62d4580b" + } + } + ], + "summary": "Enables users to view, edit, and format input data in JSON.", + "tags": [], + "title": "JSON Editor", + "updated_at": "2025-01-24T11:19:14.626Z", + "updated_by": "blt05ac693470ad5ff7", + "url": "/marketplace/json-editor", + "use_cases": "

Easy To Interpret: The JSON editor locates errors instantly, eliminating the need to locate errors within the entire code. In addition, it provides multiple view options like code, text, tree to name a few.

Validation made simple: You can validate and check for any necessary fixes in just a few seconds. In addition, because JSON does not have many elements like XML, you can even practice your coding and see the results instantly.

", + "publish_details": { + "time": "2025-01-28T10:55:14.197Z", + "user": "blt05ac693470ad5ff7", + "environment": "blt0b5712e5b06ac8b6", + "locale": "en-us" + } + } + ], + "count": 11 +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/config.ts b/packages/contentstack-external-migrate/src/services/contentful/config.ts new file mode 100644 index 000000000..c796e47b3 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/config.ts @@ -0,0 +1,23 @@ +export interface ContentfulMigrateConfig { + outputDir: string; + verbose: boolean; +} + +let activeConfig: ContentfulMigrateConfig | null = null; + +export function initContentfulMigrateConfig(cfg: ContentfulMigrateConfig): void { + activeConfig = cfg; + process.env.CLI_OUT_DIR = cfg.outputDir; + if (cfg.verbose) { + process.env.CLI_VERBOSE = '1'; + } else { + delete process.env.CLI_VERBOSE; + } +} + +export function getOutputDir(): string { + if (!activeConfig) { + throw new Error('Contentful migrate config not initialized'); + } + return activeConfig.outputDir; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/constants.ts b/packages/contentstack-external-migrate/src/services/contentful/constants.ts new file mode 100644 index 000000000..854a83bf5 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/constants.ts @@ -0,0 +1,339 @@ +import regionConfig = require('./region-config.json'); + +export const CS_REGIONS = [ + 'NA', + 'EU', + 'AZURE_NA', + 'AZURE_EU', + 'GCP_NA', + 'AU', + 'GCP_EU', +]; +export const DEVURLS: any = { + NA: 'developerhub-api.contentstack.com', + EU: 'eu-developerhub-api.contentstack.com', + AZURE_NA: 'azure-na-developerhub-api.contentstack.com', + AZURE_EU: 'azure-eu-developerhub-api.contentstack.com', + GCP_NA: 'gcp-na-developerhub-api.contentstack.com', + AU: 'au-developerhub-api.contentstack.com', + GCP_EU: 'gcp-eu-developerhub-api.contentstack.com', +}; +export const CSAUTHHOST: any = { + NA:"https://app.contentstack.com/apps-api/token", + EU:"https://eu-app.contentstack.com/apps-api/token", + AZURE_NA:"https://azure-na-app.contentstack.com/apps-api/token", + AZURE_EU:"https://azure-eu-app.contentstack.com/apps-api/token", + GCP_NA:"https://gcp-na-app.contentstack.com/apps-api/token", + AU:"https://au-app.contentstack.com/apps-api/token", + GCP_EU:"https://gcp-eu-app.contentstack.com/apps-api/token", +} + +export const regionalApiHosts = { + NA: 'api.contentstack.io', + EU: 'eu-api.contentstack.com', + AZURE_NA: 'azure-na-api.contentstack.com', + AZURE_EU: 'azure-eu-api.contentstack.com', + GCP_NA: 'gcp-na-api.contentstack.com', + AU: 'au-api.contentstack.com', + GCP_EU: 'gcp-eu-api.contentstack.com', +}; +export const CMS = { + CONTENTFUL: 'contentful', + SITECORE_V8: 'sitecore v8', + SITECORE_V9: 'sitecore v9', + SITECORE_V10: 'sitecore v10', + WORDPRESS: 'wordpress', + DRUPAL: 'drupal', + AEM: 'aem', +}; +export const MODULES = [ + 'Project', + 'Migration', + 'Content Mapping', + 'Legacy CMS', + 'Destination Stack', +]; +export const MODULES_ACTIONS = ['Create', 'Update', 'Delete']; +export const AXIOS_TIMEOUT = 60 * 1000; +export const HTTP_CODES = { + OK: 200, + FORBIDDEN: 403, + BAD_REQUEST: 400, + NOT_FOUND: 404, + UNAUTHORIZED: 401, + TOO_MANY_REQS: 429, + SOMETHING_WRONG: 501, + MOVED_PERMANENTLY: 301, + SUPPORT_DOC: 294, + SERVER_ERROR: 500, + UNPROCESSABLE_CONTENT: 422, +}; +export const HTTP_TEXTS = { + UNAUTHORIZED: "You're unauthorized to access this resource.", + S3_ERROR: 'Something went wrong while handing the file', + INTERNAL_ERROR: 'Internal server error, please try again later.', + SOMETHING_WENT_WRONG: + 'Something went wrong while processing your request, please try again.', + CS_ERROR: 'Contentstack API error', + NO_CS_USER: 'No user found with the credentials', + SUCCESS_LOGIN: 'Login Successful.', + TOKEN_ERROR: 'Error occurred during token generation.', + LOGIN_ERROR: 'Error occurred during login', + ROUTE_ERROR: 'Sorry, the requested resource is not available.', + PROJECT_NOT_FOUND: 'Sorry, the requested project does not exists.', + PROJECT_CREATION_FAILED: 'Error occurred while creating project.', + NO_PROJECT: 'resource not found with the given ID(s).', + AFFIX_UPDATED: "Project's Affix updated successfully", + AFFIX_CONFIRMATION_UPDATED: + "Project's Affix confirmation updated successfully", + FILEFORMAT_CONFIRMATION_UPDATED: + "Project's Fileformat confirmation updated successfully", + CMS_UPDATED: "Project's migration cms updated successfully", + STACK_UPDATED: "Project's migration stack details updated successfully", + CONTENT_MAPPER_UPDATED: + "Project's migration content mapping updated successfully", + FILE_FORMAT_UPDATED: "Project's migration file format updated successfully", + DESTINATION_STACK_UPDATED: + "Project's migration destination stack updated successfully", + DESTINATION_STACK_NOT_FOUND: 'Destination stack does not exist', + DESTINATION_STACK_ERROR: 'Error occurred during verifying destination stack', + INVALID_ID: 'Provided $ ID is invalid.', + CONTENT_TYPE_NOT_FOUND: 'ContentType does not exist', + CONTENT_TYPE_MISSING: 'ContentType is missing in request.', + INVALID_CONTENT_TYPE: 'Provide valid ContentType data', + RESET_CONTENT_MAPPING: + 'ContentType has been successfully restored to its initial mapping', + UPLOAD_SUCCESS: 'File uploaded successfully', + CANNOT_UPDATE_LEGACY_CMS: + 'Updating the legacy CMS is not possible as the migration process is either in progress or has already been successfully completed.', + CANNOT_UPDATE_FILE_FORMAT: + 'Updating the file format is not possible as the migration process is either in progress or has already been successfully completed.', + CANNOT_UPDATE_DESTINATION_STACK: + 'Updating the destination stack is restricted. Please verify the status and review preceding actions.', + CANNOT_PROCEED_LEGACY_CMS: + 'You cannot proceed if the project is not in draft or if any Legacy CMS details are missing.', + CANNOT_PROCEED_DESTINATION_STACK: + 'You cannot proceed if the project is not in draft or if any Legacy CMS or Destination Stack details are missing.', + CANNOT_PROCEED_CONTENT_MAPPING: + 'You cannot proceed if the project is not in draft or if any Legacy CMS or Destination Stack or Content Mapping details are missing.', + CANNOT_PROCEED_TEST_MIGRATION: + 'You cannot proceed if the project is not in draft or if any Legacy CMS or Destination Stack or Content Mapping or Test Migration details are missing.', + CANNOT_PROCEED_MIGRATION: + 'You cannot proceed if the project is not in draft or if any Legacy CMS or Destination Stack or Content Mapping or Test Migration details are missing or Migration is not completed.', + CANNOT_UPDATE_CONTENT_MAPPING: + 'Updating the content mapping is restricted. Please verify the status and review preceding actions.', + CANNOT_RESET_CONTENT_MAPPING: + 'Reseting the content mapping is restricted. Please verify the status and review preceding actions.', + CONTENTMAPPER_NOT_FOUND: + 'Sorry, the requested content mapper id does not exists.', + ADMIN_LOGIN_ERROR: + "Sorry, You Don't have admin access in any of the Organisation", + PROJECT_DELETE: 'Project Deleted Successfully', + PROJECT_REVERT: 'Project Reverted Successfully', + LOGS_NOT_FOUND: 'Sorry, no logs found for requested stack migration.', + MIGRATION_EXECUTION_KEY_UPDATED: + "Project's migration execution key updated successfully", + CONTENT_TYPE_INVALID: 'Invalid contentTypes: Expected an array.', +}; + +export const HTTP_RESPONSE_HEADERS = { + 'Access-Control-Allow-Origin': '*', + 'Content-Type': 'application/json', + Connection: 'close', +}; +export const METHODS_TO_INCLUDE_DATA_IN_AXIOS = [ + 'PUT', + 'POST', + 'DELETE', + 'PATCH', +]; +export const VALIDATION_ERRORS = { + INVALID_EMAIL: 'Given email ID is invalid.', + EMAIL_LIMIT: "Email's max limit reached.", + LENGTH_LIMIT: "$'s max limit reached.", + STRING_REQUIRED: 'Provided $ should be a string.', + BOOLEAN_REQUIRED: 'Provided $ should be a boolean.', + INVALID_REGION: "Provided region doesn't exists.", + FIELD_REQUIRED: "Field '$' is required.", + INVALID_AFFIX: 'Invalid affix format', +}; +export const POPULATE_CONTENT_MAPPER = 'content_mapper'; +export const POPULATE_FIELD_MAPPING = 'fieldMapping'; +export const CONTENT_TYPE_POPULATE_FIELDS = + 'otherCmsTitle otherCmsUid isUpdated updateAt contentstackTitle contentstackUid'; +export const PROJECT_UNSELECTED_FIELDS = + '-content_mapper -legacy_cms -destination_stack_id -execution_log'; +export const EXCLUDE_CONTENT_MAPPER = '-content_mapper -execution_log'; +export const AFFIX_REGEX = /^[a-zA-Z][a-zA-Z0-9]{1,4}$/; +export const PROJECT_STATUS = { + DRAFT: 'Draft', + READY: 'Ready', + INPROGRESS: 'InProgress', + FAILED: 'Failed', + SUCCESS: 'Success', +}; +export const STEPPER_STEPS: any = { + LEGACY_CMS: 1, + DESTINATION_STACK: 2, + CONTENT_MAPPING: 3, + TESTING: 4, + MIGRATION: 5, +}; +export const PREDEFINED_STATUS = [ + 'Draft', + 'Ready', + 'InProgress', + 'Failed', + 'Success', +]; +export const PREDEFINED_STEPS = [1, 2, 3, 4, 5]; + +export const NEW_PROJECT_STATUS = { + 0: 0, //DRAFT + 1: 1, //READY_TO_TEST + 2: 2, //TESTING_IN_PROGRESS + 3: 3, //READY_FOR_MIGRATION + 4: 4, //MIGRATION_IN_PROGRESS + 5: 5, //MIGRATION_SUCCESSFUL + 6: 6, //MIGRATION_TERMINATED +}; + +export const CONTENT_TYPE_STATUS = { + 1: 1, //auto-mapping + 2: 2, //verified + 3: 3, //mapping failed + 4: 4, //auto-dump +}; +// Cs Locale : Destination Local +export const LOCALE_MAPPER: any = { + //not more than one locale mapping in master locale + masterLocale: { + 'en-us': 'en', + }, + locales: { fr: 'fr-fr' }, +}; +export const CHUNK_SIZE = 1048576; + +export const LIST_EXTENSION_UID = 'bltc44e51cc9f4b0d80'; +export const JSON_EDITOR_EXTENSION_UID = 'bltb175817fea4631e3'; + +export const KEYTOREMOVE = [ + 'update', + 'fetch', + 'delete', + 'oauth', + 'hosting', + 'install', + 'reinstall', + 'upgrade', + 'getRequests', + 'authorize', + 'authorization', + 'listInstallations', +]; + +export const MIGRATION_DATA_CONFIG = { + // Resolved per access so repeated convert runs can change CLI_OUT_DIR (see config.ts). + get DATA(): string { + return process.env.CLI_OUT_DIR || './cmsMigrationData'; + }, + + BACKUP_DATA: 'migration-data', + BACKUP_LOG_DIR: 'logs', + BACKUP_FOLDER_NAME: 'import', + BACKUP_FILE_NAME: 'success.log', + + LOCALE_DIR_NAME: 'locales', + LOCALE_FILE_NAME: 'locales.json', + LOCALE_MASTER_LOCALE: 'master-locale.json', + LOCALE_CF_LANGUAGE: 'language.json', + + WEBHOOKS_DIR_NAME: 'webhooks', + WEBHOOKS_FILE_NAME: 'webhooks.json', + + ENVIRONMENTS_DIR_NAME: 'environments', + ENVIRONMENTS_FILE_NAME: 'environments.json', + + CONTENT_TYPES_DIR_NAME: 'content_types', + EXTENSIONS_MAPPER_DIR_NAME: 'extension-mapper.json', + CUSTOM_MAPPER_FILE_NAME: 'custmon-mapper.json', + CONTENT_TYPES_FILE_NAME: 'contenttype.json', + CONTENT_TYPES_MASTER_FILE: 'contenttypes.json', + CONTENT_TYPES_SCHEMA_FILE: 'schema.json', + MARKETPLACE_APPS_DIR_NAME: 'marketplace_apps', + MARKETPLACE_APPS_FILE_NAME: 'marketplace_apps.json', + EXTENSION_APPS_DIR_NAME: 'extensions', + EXTENSION_APPS_FILE_NAME: 'extensions.json', + REFERENCES_DIR_NAME: 'reference', + REFERENCES_FILE_NAME: 'reference.json', + TAXONOMIES_DIR_NAME: 'taxonomies', + TAXONOMIES_FILE_NAME: 'taxonomies.json', + + RTE_REFERENCES_DIR_NAME: 'rteReference', + RTE_REFERENCES_FILE_NAME: 'rteReference.json', + + ASSETS_DIR_NAME: 'assets', + ASSETS_FILE_NAME: 'assets.json', + // ASSETS_SCHEMA_FILE : "index.json", + ASSETS_SCHEMA_FILE: 'index.json', + ASSETS_FAILED_FILE: 'cs_failed.json', + ASSETS_METADATA_FILE: 'metadata.json', + ASSETS_FOLDER_FILE_NAME: 'folders.json', + + ENTRIES_DIR_NAME: 'entries', + ENTRIES_MASTER_FILE: 'index.json', + + AUTHORS_DIR_NAME: "author", + AUTHORS_FILE_NAME: "en-us.json", + AUTHORS_MASTER_FILE: "authors.json", + + CATEGORIES_DIR_NAME: 'categories', + CATEGORIES_FILE_NAME: 'en-us.json', + CATEGORIES_MASTER_FILE: 'categories.json', + + TAG_DIR_NAME: 'tag', + TAG_FILE_NAME: 'en-us.json', + TAG_MASTER_FILE: 'tag.json', + + TERMS_DIR_NAME: 'terms', + TERMS_FILE_NAME: 'en-us.json', + TERMS_MASTER_FILE: 'terms.json', + + POSTS_DIR_NAME: 'posts', + POSTS_FOLDER_NAME: 'en-us', + POSTS_FILE_NAME: 'en-us.json', + POSTS_MASTER_FILE: 'posts.json', + + PAGES_DIR_NAME: 'pages', + PAGES_FOLDER_NAME: 'en-us', + PAGES_FILE_NAME: 'en-us.json', + PAGES_MASTER_FILE: 'pages.json', + + CHUNKS_DIR_NAME: 'chunks', + + GLOBAL_FIELDS_DIR_NAME: 'global_fields', + GLOBAL_FIELDS_FILE_NAME: 'globalfields.json', + + EXPORT_INFO_FILE: 'export-info.json', + + AEM_DAM_DIR: 'dam-downloads', +}; +export const GET_AUDIT_DATA = { + MIGRATION: 'migration-v2', + API_DIR: 'api', + MIGRATION_DATA_DIR: 'migration-data', + LOGS_DIR: 'logs', + AUDIT_DIR: 'audit', + AUDIT_REPORT: 'audit-report', + FILTERALL: 'all', +}; + +export const RESERVED_FIELD_MAPPINGS: Record = { + locale: 'cm_locale', + // Add other reserved fields if needed +}; + +export const MEDIA_BLOCK_NAMES = ['core/image', 'core/video', 'core/audio', 'core/file']; +export const WORDPRESS_MISSSING_BLOCKS = 'core/missing'; + +export const REGION_CONFIG = regionConfig; diff --git a/packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts b/packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts new file mode 100644 index 000000000..f11f90882 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts @@ -0,0 +1,1646 @@ +/* eslint-disable */ +/* eslint-disable @typescript-eslint/no-var-requires, operator-linebreak */ + +import fs from 'fs'; +import path from 'path'; +import _, { includes } from 'lodash'; +import customLogger from './utils/custom-logger.utils.js'; +import { getLogMessage } from './utils/index.js'; +import { LIST_EXTENSION_UID, JSON_EDITOR_EXTENSION_UID, MIGRATION_DATA_CONFIG } from './constants.js'; +import appMeta from './app/index.json'; + +// existingCtMapper (line 1207) is the only function that uses this. It's +// only invoked when keyMapper has an existing-content-type override — the +// CLI always passes keyMapper={}, so existingCtMapper never executes. The +// stub throws so any future regression that does invoke it is loud. +const contentMapperService = { + getSingleGlobalField: async (_req: any): Promise => { + throw new Error('contentMapperService.getSingleGlobalField is not available in the CLI build'); + }, + getExistingContentTypes: async (_req: any): Promise => { + throw new Error('contentMapperService.getExistingContentTypes is not available in the CLI build'); + }, +}; + +// Contentstack's content-type API rejects long/complex regex patterns in +// `format` with "regex validation checks failed due to lengthy input strings +// or complex validation logic". Drop the regex when it exceeds the safe limit; +// the field still works, the user can re-add validation in the Contentstack UI. +const SAFE_FORMAT_MAX_LEN = 50; +function safeFormat(rawRegex: any): string { + const re = typeof rawRegex === 'string' ? rawRegex : ''; + if (re.length === 0) return ''; + if (re.length > SAFE_FORMAT_MAX_LEN) return ''; + // Contentstack also rejects "complex" regexes — quantified groups like + // ([\w-]+\.)+ are ReDoS-prone and refused even when short. Drop those so the + // content-type update doesn't fail; the field still imports without the regex. + if (/\)[+*]/.test(re) || /\)\{\d/.test(re)) return ''; + return re; +} + +const { + GLOBAL_FIELDS_FILE_NAME, + GLOBAL_FIELDS_DIR_NAME, + CONTENT_TYPES_DIR_NAME, + CONTENT_TYPES_SCHEMA_FILE, + EXTENSIONS_MAPPER_DIR_NAME, + CUSTOM_MAPPER_FILE_NAME +} = MIGRATION_DATA_CONFIG; + +interface Group { + data_type?: string; + display_name?: string; // Assuming item?.contentstackField might be undefined + field_metadata?: Record; // Assuming it's an object with any properties + schema: any[]; // Define the type of elements in the schema array if possible + uid?: string; // Assuming item?.contentstackFieldUid might be undefined + multiple?: boolean; + mandatory?: boolean; + unique?: boolean; + title?: string; +} + +interface ContentTypeOptions { + title: string; + publishable: boolean; + is_page: boolean; + singleton: boolean; + sub_title: string[]; + url_pattern: string; + url_prefix: string; +} + +interface ContentTypeAbilities { + get_one_object: boolean; + get_all_objects: boolean; + create_object: boolean; + update_object: boolean; + delete_object: boolean; + delete_all_objects: boolean; +} + +interface ContentType { + title: string | undefined; + uid: string | undefined; + description?: string; + schema: any[]; // Replace `any` with the specific type if known + options?: ContentTypeOptions; + _version?: number; + inbuilt_class?: boolean; + abilities?: ContentTypeAbilities; +} + +const DEFAULT_CT_ABILITIES: ContentTypeAbilities = { + get_one_object: true, + get_all_objects: true, + create_object: true, + update_object: true, + delete_object: true, + delete_all_objects: true, +}; + +// Contentstack built-in title/url fields (reference contenttype.js). Forced onto +// every content type so flags (unique/_default/version) exactly match a native CT. +const TITLE_FIELD = { + display_name: 'Title', + uid: 'title', + data_type: 'text', + field_metadata: { _default: true, version: 1 }, + unique: true, + mandatory: true, + multiple: false, + non_localizable: false, +}; +const URL_FIELD = { + display_name: 'URL', + uid: 'url', + data_type: 'text', + field_metadata: { _default: true, version: 1 }, + unique: false, + mandatory: false, + multiple: false, + non_localizable: false, +}; + +const DEFAULT_CT_OPTIONS: ContentTypeOptions = { + title: 'title', + publishable: true, + is_page: true, + singleton: false, + sub_title: ['url'], + url_pattern: '/:title', + url_prefix: '/', +}; + +const buildOptionsFor = ( + contentType: any, + entryCountsByCt: Record | undefined, + pageContentTypeIds: Set | undefined, +): ContentTypeOptions => { + const cfId = contentType?.otherCmsUid; + const entryCount = cfId && entryCountsByCt ? entryCountsByCt[cfId] : undefined; + const isPage = cfId && pageContentTypeIds ? pageContentTypeIds.has(cfId) : false; + return { + ...DEFAULT_CT_OPTIONS, + is_page: isPage, + singleton: entryCount === 1, + }; +}; + +const RESERVED_UIDS = new Set(['locale', 'publish_details', 'tags']); + +/** Contentful taxonomy scheme ids may be camelCase, Contentstack requires [a-z0-9_]. */ +function normalizeStackTaxonomyUid(raw?: string): string { + if (!raw || typeof raw !== 'string') return ''; + return raw + .replace(/([A-Z])/g, '_$1') + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); +} + +function sanitizeUid(uid?: string) { + if (!uid) return uid; + let out = uid?.replace?.(/[^a-zA-Z0-9_]/g, '_').replace?.(/^_+/, ''); + if (!/^[a-zA-Z]/.test(out)) out = `field_${out}`; + if (RESERVED_UIDS.has(out)) out = `cm_${out}`; // avoid reserved values + return out.toLowerCase(); +} + +function extractFieldName(input: string): string { + // Extract text inside parentheses (e.g., "JSON Editor-App") + const match = input.match(/\(([^)]+)\)/); + const insideParentheses = match ? match?.[1] : input; // If no match, use the original string + + // Remove "-App" and unwanted characters + const cleanedString = insideParentheses + .replace(/-App/g, '') // Remove "-App" + .trim(); // Trim spaces + + return cleanedString || ''; // Return the final processed string +} + + +function extractValue(input: string, prefix: string, anoter: string): any { + if (input.startsWith(prefix + anoter)) { + return input.replace(prefix + anoter, ''); + } else { + console.error(`Input does not start with the specified prefix: ${prefix}`); + return input?.split(anoter)?.[1]; + } +} + +function startsWithNumber(str: string) { + return /^\d/.test(str); +} + +const uidCorrector = ({ uid } : {uid : string}) => { + if (!uid || typeof uid !== 'string') { + return ''; + } + + let newUid = uid; + + // Note: UIDs starting with numbers and restricted keywords are handled externally in Sitecore + // The prefix is applied in contentTypeMaker function when needed + + // Clean up the UID + newUid = newUid + .replace(/[ -]/g, '_') // Replace spaces and hyphens with underscores + .replace(/[^a-zA-Z0-9_]+/g, '_') // Replace non-alphanumeric characters (except underscore) + .replace(/([A-Z])/g, (match) => `_${match.toLowerCase()}`) // Handle camelCase + .toLowerCase() // Convert to lowercase + .replace(/_+/g, '_') // Replace multiple underscores with single + .replace(/^_|_$/g, ''); // Remove leading/trailing underscores + + // Ensure UID doesn't start with underscore (Contentstack requirement) + if (newUid.startsWith('_')) { + newUid = newUid.substring(1); + } + + return newUid; +}; + +/** + * Remap an array of reference UIDs using a mapping table. + * + * @param uids - The original reference UIDs. + * @param keyMapper - A map from UID to new UID. Callers should prefer using + * the *corrected* UID (i.e. the result of `uidCorrector({ uid })`) as the key. + * For backward compatibility, this function also supports maps keyed by the + * original UID, and will try both forms when looking up each entry. + * + * NOTE: Relying on mixed key styles (some original, some corrected) can hide + * inconsistent UID formatting. When both key styles are present for the same + * logical UID and map to different targets, a warning is logged so that such + * issues do not go unnoticed. + * @returns The remapped UIDs. + */ +function remapReferenceUids(uids: string | string[], keyMapper?: Record): string[] { + const uidsArray = Array.isArray(uids) ? uids : [uids]; + if (!keyMapper || !Object.keys(keyMapper).length) return uidsArray; + return uidsArray?.map(uid => keyMapper?.[uid] ?? keyMapper?.[uidCorrector({ uid })] ?? uid); +} +function buildFieldSchema(item: any, marketPlacePath: string, parentUid = '', keyMapper?: Record): any { + if (item?.isDeleted === true) return null; + + const getCleanUid = (uid: string): string => { + if (!uid) return ''; + const segments = uid.split(/[.>]/).map(s => s.trim()); + return segments.filter(s => s).pop() || ''; + }; + + const toSnakeCase = (str: string): string => { + // Remove special characters and handle common patterns + let result = str + .replace(/^[^a-zA-Z]+/, '') // Remove non-alphabetic characters from start + .replace(/[^a-zA-Z0-9]/g, '_') // Replace all special chars with underscore + .replace(/URL/g, 'url') + .replace(/API/g, 'api') + .replace(/ID/g, 'id') + .replace(/UI/g, 'ui') + .replace(/([A-Z]+)([A-Z][a-z])/g, '$1_$2') + .replace(/([a-z\d])([A-Z])/g, '$1_$2') + .replace(/_+/g, '_') // Replace multiple underscores with single + .replace(/^_|_$/g, '') // Remove leading/trailing underscores + .toLowerCase(); + + // Ensure it starts with a letter + if (result && !/^[a-z]/.test(result)) { + result = 'field_' + result; + } + if (result === "locale") { + result = 'cm_' + result; + } + return result || 'field'; + }; + + + const rawUid = getCleanUid(item?.contentstackFieldUid || item?.uid); + const itemUid = toSnakeCase(rawUid); // Apply snake_case conversion + const fieldType = item?.contentstackFieldType; + + if (fieldType === 'modular_blocks') { + const blocks: any[] = []; + const schema = item?.schema || []; + + for (const blockItem of schema) { + if (blockItem?.contentstackFieldType !== 'modular_blocks_child') continue; + + const blockRawUid = getCleanUid(blockItem?.contentstackField); + // Use `uidCorrector` (not `toSnakeCase`) for child block UIDs so we preserve + // digit-prefixed UIDs that may already exist on the destination + // content type. `toSnakeCase` strips leading non-letters + // which causes the merge step to miss the destination block and produce a + // duplicate child block instead of merging schemas into the existing one. + const blockUid = uidCorrector({ + uid: getCleanUid(blockItem?.contentstackFieldUid || blockItem?.uid), + }); + const blockSchema: any[] = []; + + const blockElements = blockItem?.schema || []; + for (const element of blockElements) { + if (element?.isDeleted === false) { + const fieldSchema = buildFieldSchema(element, marketPlacePath, '', keyMapper); + if (fieldSchema) blockSchema.push(fieldSchema); + } + } + + blocks.push({ + title: blockRawUid, // Keep original for title + uid: blockUid, // Snake case for uid + schema: removeDuplicateFields(blockSchema) + }); + } + + return { + data_type: "blocks", + display_name: item?.display_name || rawUid, // Keep original for display + field_metadata: {}, + uid: itemUid, // Snake case uid + multiple: true, + mandatory: false, + unique: false, + non_localizable: false, + blocks: removeDuplicateFields(blocks) + }; + } + + if (fieldType === 'group') { + const groupSchema: any[] = []; + const elements = item?.schema || []; + + for (const element of elements) { + if (element?.isDeleted === false) { + const fieldSchema = buildFieldSchema(element, marketPlacePath, '', keyMapper); + if (fieldSchema) groupSchema.push(fieldSchema); + } + } + + return { + data_type: "group", + display_name: item?.display_name || rawUid, // Keep original for display + field_metadata: {}, + schema: removeDuplicateFields(groupSchema), + uid: itemUid, // Snake case uid + multiple: item?.advanced?.multiple || false, + mandatory: item?.advanced?.mandatory || false, + unique: false + }; + } + + // For leaf fields + return convertToSchemaFormate({ + field: { + ...item, + title: item?.display_name || rawUid, // Keep original for display + uid: itemUid // Snake case uid + }, + marketPlacePath, + keyMapper + }); +} + +/** + * When two schema nodes share a uid (merge artifact), prefer the Contentstack custom + * extension field so mapped plain fields do not win over the stack's extension + * definitions inside modular block schema. + */ +function resolveDuplicateFieldsByUid(group: any[]): any { + if (!group?.length) return group?.[0]; + if (group?.length === 1) return group[0]; + + const withExtensionUid = group.filter((f) => f?.extension_uid); + if (withExtensionUid?.length === 1) return withExtensionUid[0]; + + const customJson = group.filter( + (f) => + f?.data_type === 'json' && + (f?.field_metadata?.extension === true || f?.extension_uid), + ); + if (customJson?.length === 1) return customJson[0]; + + return group[0]; +} + +function removeDuplicateFields(fields: any[]): any[] { + if (!Array?.isArray(fields)) return []; + + const uidBuckets = new Map(); + for (const field of fields) { + const uid = field?.uid; + if (uid === undefined || uid === null || uid === '') continue; + if (!uidBuckets.has(uid)) uidBuckets.set(uid, []); + uidBuckets.get(uid)!.push(field); + } + + const resolvedUid = new Map(); + for (const [uid, group] of uidBuckets) { + resolvedUid.set(uid, group?.length === 1 ? group[0] : resolveDuplicateFieldsByUid(group)); + } + + const seenUid = new Set(); + const seenNoUid = new Map(); + const result: any[] = []; + + for (const field of fields) { + const uid = field?.uid; + if (uid === undefined || uid === null || uid === '') { + const key = JSON.stringify(field); + if (!seenNoUid.has(key)) { + seenNoUid.set(key, true); + result.push(field); + } + continue; + } + if (!seenUid.has(uid)) { + seenUid.add(uid); + result.push(resolvedUid.get(uid)); + } + } + + return result; +} + +/** + * If destination defines a custom extension on the same uid+data_type, copy missing + * extension_uid / config / field_metadata onto the migration-built field (modular child + * leaves often match as plain json without extension_uid). + */ +function mergeCustomFieldMetadataFromDestination(sField: any, tField: any) { + if (!sField || !tField) return; + if (sField?.uid !== tField?.uid || sField?.data_type !== tField?.data_type) return; + + const targetHasCustom = + Boolean(tField?.extension_uid) || tField?.field_metadata?.extension === true; + + if (!targetHasCustom) return; + + if (tField?.extension_uid && !sField?.extension_uid) { + sField.extension_uid = tField?.extension_uid; + } + if (tField?.config !== undefined && sField?.config === undefined) { + sField.config = cloneSchemaBranch(tField?.config); + } + if (tField?.field_metadata?.extension) { + sField.field_metadata = { + ...(sField?.field_metadata || {}), + ...tField?.field_metadata, + }; + } +} + +/** Apply {@link mergeCustomFieldMetadataFromDestination} for all leaves under merged schema. */ +function enrichMergedSchemaWithDestinationCustomFields( + sourceSchema: any[], + targetSchema: any[], +): void { + if (!Array?.isArray(sourceSchema) || !Array?.isArray(targetSchema)) return; + + for (const sField of sourceSchema) { + const tField = targetSchema.find((t: any) => t?.uid === sField?.uid); + if (!tField) continue; + + if (sField?.data_type === 'group' && tField?.data_type === 'group') { + enrichMergedSchemaWithDestinationCustomFields( + sField?.schema ?? [], + tField?.schema ?? [], + ); + } else if (sField?.data_type === 'blocks' && tField?.data_type === 'blocks') { + const sBlocks = sField?.blocks ?? []; + const tBlocks = tField?.blocks ?? []; + for (const tBlock of tBlocks) { + const sBlock = sBlocks.find((b: any) => b?.uid === tBlock?.uid); + if (sBlock) { + enrichMergedSchemaWithDestinationCustomFields( + sBlock?.schema ?? [], + tBlock?.schema ?? [], + ); + } + } + } else if (sField?.data_type === tField?.data_type) { + mergeCustomFieldMetadataFromDestination(sField, tField); + } + } +} + + +function getLastSegmentNew(str: string, separator: string): string { + if (!str) return ''; + const segments = str.split(separator); + return segments[segments.length - 1].trim(); +} + +export function buildSchemaTree(fields: any[], parentUid = '', parentType = '', oldParentUid = ''): any[] { + if (!Array.isArray(fields)) { + console.warn('buildSchemaTree called with invalid fields:', fields); + return []; + } + + // Build a lookup map for O(1) access + const fieldMap = new Map(); + fields?.forEach(f => { + if (f?.contentstackFieldUid) { + fieldMap?.set(f?.contentstackFieldUid, f); + } + }); + + // Filter direct children of current parent + const directChildren = fields.filter(field => { + const fieldUid = field?.contentstackFieldUid || ''; + + if (!parentUid) { + // Root level - only fields without dots + return fieldUid && !fieldUid?.includes('.'); + } + + // Check if field is a direct child of parentUid + if (fieldUid?.startsWith(parentUid + '.')) { + const remainder = fieldUid?.substring(parentUid.length + 1); + // Verify it's exactly one level deeper (no more dots in remainder) + return remainder && !remainder?.includes('.'); + } + + // Fallback: check if field is a direct child of oldParentUid (if provided and different from parentUid) + if (oldParentUid && oldParentUid !== parentUid && fieldUid?.startsWith(oldParentUid + '.')) { + const remainder = fieldUid?.substring(oldParentUid.length + 1); + // Verify it's exactly one level deeper (no more dots in remainder) + return remainder && !remainder?.includes('.'); + } + + // Not a direct child + return false; + }); + + return directChildren.map(field => { + const uid = getLastSegmentNew(field?.contentstackFieldUid, '.'); + const displayName = field?.display_name || getLastSegmentNew(field?.contentstackField || '', '>').trim(); + + // Base field structure + const result: any = { + ...field, + uid, + display_name: displayName + }; + + // Determine if field should have nested schema + const fieldUid = field?.contentstackFieldUid; + const fieldType = field?.contentstackFieldType; + const oldFieldUid = field?.backupFieldUid; + + // Check if this field has direct children (exactly one level deeper) + const hasChildren = fields.some(f => { + const fUid = f?.contentstackFieldUid || ''; + if (!fUid) return false; + + // Check if field starts with current fieldUid and is exactly one level deeper + if (fieldUid && fUid?.startsWith(fieldUid + '.')) { + const remainder = fUid?.substring(fieldUid.length + 1); + return remainder && !remainder?.includes('.'); + } + + // Check if field starts with oldFieldUid and is exactly one level deeper + if (oldFieldUid && fUid?.startsWith(oldFieldUid + '.')) { + const remainder = fUid?.substring(oldFieldUid.length + 1); + return remainder && !remainder?.includes('.'); + } + + return false; + }); + + if (hasChildren) { + if (fieldType === 'modular_blocks') { + // Get modular block children (check both current and backup UIDs) + const mbChildren = fields.filter(f => { + if (!f) return false; + const fUid = f?.contentstackFieldUid || ''; + if (!fUid || !fieldUid) return false; + if (f?.contentstackFieldType !== 'modular_blocks_child') return false; + + if (fUid.startsWith(fieldUid + '.') && + !fUid.substring(fieldUid.length + 1).includes('.')) { + return true; + } + + if (oldFieldUid && oldFieldUid !== fieldUid && + fUid.startsWith(oldFieldUid + '.') && + !fUid.substring(oldFieldUid.length + 1).includes('.')) { + return true; + } + + return false; + }); + + result.schema = mbChildren.map(child => { + const childFieldUid = child?.contentstackFieldUid || ''; + const childUid = getLastSegmentNew(childFieldUid, '.'); + const childDisplay = child?.display_name || getLastSegmentNew(child?.contentstackField || '', '>').trim(); + + return { + ...child, + uid: childUid, + display_name: childDisplay, + // Recursively build schema for fields inside this child block + schema: buildSchemaTree(fields, childFieldUid, 'modular_blocks_child', child?.backupFieldUid) + }; + }); + } else if (fieldType === 'group' || + (fieldType === 'modular_blocks_child' && hasChildren)) { + // Recursively build schema for groups and modular block children with nested content + result.schema = buildSchemaTree(fields, fieldUid, fieldType, oldFieldUid); + } + } + + // Preserve existing schema if no children found but schema exists + if (!hasChildren && field.schema && Array.isArray(field.schema)) { + result.schema = field.schema; + } + + return result; + }); +} + +const saveAppMapper = async ({ marketPlacePath, data, fileName }: any) => { + try { + await fs.promises.access(marketPlacePath); + } catch (err) { + try { + await fs.promises.mkdir(marketPlacePath, { recursive: true }); + } catch (mkdirErr) { + console.error("🚀 ~ fs.mkdir ~ err:", mkdirErr); + return; + } + } + const marketPlaceFilePath = path.join(marketPlacePath, fileName); + const newData: any = await fs.promises.readFile(marketPlaceFilePath, "utf-8").catch(async () => { + await fs.promises.writeFile(marketPlaceFilePath, JSON.stringify([data])); + }); + if (newData !== "" && newData !== undefined) { + const parseData: any = JSON.parse(newData); + parseData?.push(data); + await fs.promises.writeFile(marketPlaceFilePath, JSON.stringify(parseData)); + } +} + +export const convertToSchemaFormate = ({ field, advanced = false, marketPlacePath, keyMapper }: any) => { + // Clean up field UID by removing ALL leading underscores + const rawUid = field?.uid; + const cleanedUid = sanitizeUid(rawUid); + switch (field?.contentstackFieldType) { + case 'single_line_text': { + return { + "data_type": "text", + "display_name": field?.title, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? '' + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case 'boolean': { + return { + "data_type": "boolean", + "display_name": field?.title, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? false, + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case 'json': { + if (["Object", "Array"].includes(field?.otherCmsType)) { + const extensionUid = JSON_EDITOR_EXTENSION_UID; + saveAppMapper({ + marketPlacePath, + data: { extensionUid }, + fileName: CUSTOM_MAPPER_FILE_NAME, + }); + return { + data_type: "json", + display_name: field?.title ?? cleanedUid, + uid: cleanedUid, + "extension_uid": extensionUid, + "field_metadata": { + extension: true, + description: field.advanced?.description ?? '', + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "reference_to": [ + "sys_assets" + ], + "multiple": field?.advanced?.multiple ?? false, + "non_localizable": false, + "unique": field?.advanced?.unique ?? false, + "config": {}, + "mandatory": field?.advanced?.mandatory ?? false, + } + } else { + return { + "data_type": "json", + "display_name": field?.title ?? cleanedUid, + "uid": cleanedUid, + "field_metadata": { + "allow_json_rte": true, + "embed_entry": field?.advanced?.embedObjects?.length ? true : false, + "description": field?.advanced?.description ?? '', + "default_value": "", + "multiline": false, + "rich_text_type": "advanced", + "options": [] + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "reference_to": field?.advanced?.embedObjects?.length ? remapReferenceUids([ + "sys_assets", + ...field?.advanced?.embedObjects?.map?.((item: any) => uidCorrector({ uid: item })) ?? [], + ], keyMapper) : [ + "sys_assets" + ], + "multiple": field?.advanced?.multiple ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + "unique": field?.advanced?.unique ?? false, + "mandatory": field?.advanced?.mandatory ?? false + } + } + } + + case 'dropdown': { + // 🔧 CONDITIONAL LOGIC: Check if choices have key-value pairs or just values + const rawChoices = Array.isArray(field?.advanced?.options) && field?.advanced?.options?.length > 0 + ? field?.advanced?.options + : [{ value: "NF" }]; + + // Filter out null/undefined choices and ensure they are valid objects + const choices = Array.isArray(rawChoices) + ? rawChoices.filter((choice: any) => choice != null && typeof choice === 'object') + : [{ value: "NF" }]; + + const hasKeyValuePairs = Array.isArray(choices) && choices.length > 0 && + choices.some((choice: any) => choice != null && typeof choice === 'object' && choice.key !== undefined && choice.key !== null); + + const data = { + "data_type": ['dropdownNumber', 'radioNumber', 'ratingNumber'].includes(field.otherCmsType) ? 'number' : "text", + "display_name": field?.title, + "display_type": "dropdown", + "enum": { + "advanced": hasKeyValuePairs, // true if has key-value pairs, false if only values + choices: choices, + }, + "multiple": field?.advanced?.multiple ?? false, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? null, + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + }; + const default_value = field?.advanced?.options?.length ? (field?.advanced?.options?.find((item: any) => (item?.key === field?.advanced?.default_value) || (item?.key === field?.advanced?.default_value))) : { value: field?.advanced?.default_value }; + data.field_metadata.default_value = default_value?.value ?? null; + return data; + } + case 'radio': { + // 🔧 CONDITIONAL LOGIC: Check if choices have key-value pairs or just values + const rawChoices = Array.isArray(field?.advanced?.options) && field?.advanced?.options?.length > 0 + ? field?.advanced?.options + : [{ value: "NF" }]; + + // Filter out null/undefined choices and ensure they are valid objects + const choices = Array.isArray(rawChoices) + ? rawChoices.filter((choice: any) => choice != null && typeof choice === 'object') + : [{ value: "NF" }]; + + const hasKeyValuePairs = Array.isArray(choices) && choices.length > 0 && + choices.some((choice: any) => choice != null && typeof choice === 'object' && choice.key !== undefined && choice.key !== null); + + const data = { + "data_type": ['dropdownNumber', 'radioNumber', 'ratingNumber'].includes(field.otherCmsType) ? 'number' : "text", + "display_name": field?.title, + "display_type": "radio", + "enum": { + "advanced": hasKeyValuePairs, // true if has key-value pairs, false if only values + choices: choices, + }, + "multiple": field?.advanced?.multiple ?? false, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description || '', + default_value: field?.advanced?.default_value ?? null, + default_key: field?.advanced?.defaultKey ?? '' + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + return data; + } + case 'checkbox': { + // 🔧 CONDITIONAL LOGIC: Check if choices have key-value pairs or just values + const rawChoices = Array.isArray(field?.advanced?.options) && field?.advanced?.options?.length > 0 + ? field?.advanced?.options + : [{ value: "NF" }]; + + // Filter out null/undefined choices and ensure they are valid objects + const choices = Array.isArray(rawChoices) + ? rawChoices.filter((choice: any) => choice != null && typeof choice === 'object') + : [{ value: "NF" }]; + + const hasKeyValuePairs = Array.isArray(choices) && choices.length > 0 && + choices.some((choice: any) => choice != null && typeof choice === 'object' && choice.key !== undefined && choice.key !== null); + + const data = { + "data_type": "text", + "display_name": field?.title, + "display_type": "checkbox", + "enum": { + "advanced": hasKeyValuePairs, // true if has key-value pairs, false if only values + choices: choices, + }, + "multiple": true, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description || '', + default_value: field?.advanced?.default_value ?? null, + default_key: field?.advanced?.defaultKey ?? '' + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + return data; + } + + case "file": { + return { + "data_type": "file", + "display_name": field?.title, + uid: cleanedUid, + "extensions": [], + "field_metadata": { + description: field?.advanced?.description ?? '', + "rich_text_type": "standard" + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case "link": { + return { + "data_type": "link", + "display_name": field?.title, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + "default_value": { + "title": field?.advanced?.title ?? '', + "url": field?.advanced?.url ?? '', + } + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case 'url': { + // Contentstack built-in URL field (page slug). data_type text + _default. + return { + "data_type": "text", + "display_name": field?.title ?? 'URL', + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? '', + _default: true, + version: 3 + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case "multi_line_text": { + return { + "data_type": "text", + "display_name": field?.title, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? '', + "multiline": true + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + case 'markdown': { + return { + "data_type": "text", + "display_name": field?.title, + "uid": cleanedUid, + "field_metadata": { + "description": field?.advanced?.description ?? '', + "markdown": true, + "placeholder": field?.advanced?.default_value ?? '' + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case "number": { + const numberMin = field?.advanced?.numberMin; + const numberMax = field?.advanced?.numberMax; + return { + "data_type": "number", + "display_name": field?.title, + uid: cleanedUid, + "field_metadata": { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? '', + ...(typeof numberMin === 'number' ? { min: numberMin } : {}), + ...(typeof numberMax === 'number' ? { max: numberMax } : {}), + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false + } + } + + case "isodate": { + return { + "data_type": "isodate", + "display_name": field?.title, + uid: cleanedUid, + "startDate": null, + "endDate": null, + "field_metadata": { + description: field?.advanced?.description ?? '', + "default_value": {}, + "hide_time": true + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "mandatory": field?.advanced?.mandatory ?? false, + "multiple": field?.advanced?.multiple ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + "unique": field?.advanced?.unique ?? false + } + } + + + case 'global_field': { + const globalFieldRefs = remapReferenceUids(field?.refrenceTo ?? [], keyMapper); + return { + "data_type": "global_field", + "display_name": field?.title, + "reference_to": globalFieldRefs?.length === 1 ? globalFieldRefs?.[0] : globalFieldRefs, + "uid": cleanedUid, + "mandatory": field?.advanced?.mandatory ?? false, + "multiple": field?.advanced?.multiple ?? false, + "unique": field?.advanced?.unique ?? false + } + } + + case "reference": { + return { + data_type: "reference", + display_name: field?.title, + reference_to: remapReferenceUids(field?.refrenceTo ?? [], keyMapper), + field_metadata: { + ref_multiple: true, + ref_multiple_content_types: true + }, + format: safeFormat(field?.advanced?.validationRegex), + error_messages: { + format: field?.advanced?.validationErrorMessage ?? '', + }, + uid: cleanedUid, + mandatory: field?.advanced?.mandatory ?? false, + multiple: field?.advanced?.multiple ?? false, + non_localizable: field.advanced?.nonLocalizable ?? false, + unique: field?.advanced?.unique ?? false + }; + } + + case 'taxonomy': { + // Build taxonomies array from field.taxonomies or field.advanced.taxonomies + const taxonomiesData = field?.taxonomies || field?.advanced?.taxonomies || []; + const taxonomiesArray = Array.isArray(taxonomiesData) + ? taxonomiesData.map((tax: any) => ({ + taxonomy_uid: normalizeStackTaxonomyUid( + typeof tax === 'string' ? tax : (tax?.taxonomy_uid || tax), + ), + mandatory: field?.advanced?.mandatory ?? false, + multiple: field?.advanced?.multiple !== false, // Default true for taxonomies + non_localizable: false + })) + : []; + + return { + data_type: "taxonomy", + display_name: field?.title, + uid: 'taxonomies', + taxonomies: taxonomiesArray, + field_metadata: { + description: field?.advanced?.description ?? '', + default_value: field?.advanced?.default_value ?? '' + }, + format: safeFormat(field?.advanced?.validationRegex), + error_messages: { + format: field?.advanced?.validationErrorMessage ?? '' + }, + mandatory: field?.advanced?.mandatory ?? false, + multiple: field?.advanced?.multiple !== false, // Default true for taxonomies + non_localizable: false, + unique: field?.advanced?.unique ?? false + }; + } + + case 'html': { + const htmlField: any = { + "data_type": "text", + "display_name": field?.title, + "uid": cleanedUid, + "field_metadata": { + "allow_rich_text": true, + "description": field?.advanced?.description ?? '', + "multiline": false, + "rich_text_type": "advanced", + "version": 3, + "options": [], + "ref_multiple_content_types": true, + "embed_entry": field?.advanced?.embedObjects?.length ? true : false, + }, + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + "reference_to": field?.advanced?.embedObjects?.length ? remapReferenceUids(field?.advanced?.embedObjects?.map?.((item: any) => uidCorrector({ uid: item })), keyMapper) : [] + } + if ((field?.advanced?.embedObjects?.length === undefined) || + (field?.advanced?.embedObjects?.length === 0) || + (field?.advanced?.embedObjects?.length === 1 && field?.advanced?.embedObjects?.[0] === 'sys_assets')) { + if (htmlField) { + delete htmlField.reference_to; + if (htmlField.field_metadata) { + delete htmlField.field_metadata.embed_entry; + delete htmlField.field_metadata.ref_multiple_content_types; + } + } + } + return htmlField; + } + + case 'app': { + const appName = extractFieldName(field?.otherCmsField); + const title = field?.title?.split?.(' ')?.[0]; + const appDetails = appMeta?.entries?.find?.((item: any) => item?.title === appName); + if (appDetails?.uid) { + saveAppMapper({ + marketPlacePath, + data: { appUid: appDetails?.app_uid, extensionUid: `${appDetails?.uid}-cs.cm.stack.custom_field` }, + fileName: EXTENSIONS_MAPPER_DIR_NAME + }); + return { + "display_name": title, + "extension_uid": appDetails?.uid, + "field_metadata": { + "extension": true + }, + "uid": cleanedUid, + "config": {}, + "data_type": "json", + "multiple": field?.advanced?.multiple ?? false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + } + } + break; + } + + case 'extension': { + if (['listInput', 'tagEditor']?.includes(field?.otherCmsType)) { + const extensionUid = LIST_EXTENSION_UID; + saveAppMapper({ + marketPlacePath, + data: { extensionUid }, + fileName: CUSTOM_MAPPER_FILE_NAME + }); + return { + "display_name": field?.title, + "uid": cleanedUid, + "extension_uid": extensionUid, + "field_metadata": { + "extension": true + }, + "config": {}, + // Value is a single { value: [...] } object (see processField), so the + // field is NOT multiple. `advanced.multiple` is mis-set true for + // tagEditor on Array (singleRef heuristic) — force false to match value. + "multiple": false, + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + "data_type": "json", + } + } + break; + } + + default: { + if (field?.contentstackFieldType) { + return { + "display_name": field?.title, + "uid": cleanedUid, + "data_type": "text", + "mandatory": field?.advanced?.mandatory ?? false, + "unique": field?.advanced?.unique ?? false, + "field_metadata": { + "_default": true + }, + "format": safeFormat(field?.advanced?.validationRegex), + "error_messages": { + "format": field?.advanced?.validationErrorMessage ?? '', + }, + "multiple": field?.advanced?.multiple ?? false, + "non_localizable": field.advanced?.nonLocalizable ?? false, + } + } else { + console.info('Content Type Field', field?.contentstackField) + } + } + } + +} + +const saveContent = async (ct: any, contentSave: string) => { + try { + // Check if the directory exists + await fs.promises.access(contentSave).catch(async () => { + // If the directory doesn't exist, create it + await fs.promises.mkdir(contentSave, { recursive: true }); + }); + // Write the individual content to its own file + const filePath = path.join(contentSave, `${ct?.uid}.json`); + await fs.promises.writeFile(filePath, JSON.stringify(ct)); + // Append the content to schema.json + const schemaFilePath = path.join(contentSave, CONTENT_TYPES_SCHEMA_FILE); + let schemaData = []; + try { + // Read existing schema.json file if it exists + const schemaFileContent = await fs.promises.readFile(schemaFilePath, 'utf8'); + schemaData = JSON.parse(schemaFileContent); + } catch (readError: any) { + if (readError?.code !== 'ENOENT') { + throw readError; // rethrow if it's not a "file not found" error + } + } + // Append new content to schemaData + schemaData.push(ct); + // Write the updated schemaData back to schema.json + await fs.promises.writeFile(schemaFilePath, JSON.stringify(schemaData, null, 2)); + + } catch (err) { + console.error("Error:", err); + } + +} + +const writeGlobalField = async (schema: any, globalSave: string) => { + const filePath = path.join(globalSave, GLOBAL_FIELDS_FILE_NAME); + try { + await fs.promises.access(globalSave); + } catch (err) { + try { + await fs.promises.mkdir(globalSave, { recursive: true }); + } catch (mkdirErr) { + console.error("🚀 ~ fs.mkdir ~ err:", mkdirErr); + return; + } + } + let globalfields: any[] = []; + try { + const data = await fs.promises.readFile(filePath, 'utf8'); + const parsed = JSON.parse(data); + globalfields = Array.isArray(parsed) ? parsed : []; + } catch (readErr: any) { + if (readErr?.code !== 'ENOENT') { + console.error("🚀 ~ fs.readFile ~ err:", readErr); + return; + } + } + + // 🔧 FIX: Check for duplicates before adding + if (!schema || typeof schema !== 'object') { + console.error("🚀 ~ writeGlobalField ~ Invalid schema provided"); + return; + } + + if (!schema.uid) { + console.error("🚀 ~ writeGlobalField ~ Schema missing uid"); + return; + } + + if (!Array.isArray(globalfields)) { + globalfields = []; + } + + const existingIndex = globalfields.findIndex((gf: any) => gf != null && gf.uid === schema.uid); + if (existingIndex !== -1 && existingIndex < globalfields.length) { + // Replace existing global field instead of duplicating + if (schema && typeof schema === 'object' && schema.uid) { + globalfields[existingIndex] = schema; + } + } else { + // Add new global field + if (Array.isArray(globalfields) && schema && typeof schema === 'object' && schema.uid) { + globalfields.push(schema); + } else { + console.error("🚀 ~ writeGlobalField ~ Cannot push schema: invalid schema or globalfields array"); + } + } + + try { + await fs.promises.writeFile(filePath, JSON.stringify(globalfields, null, 2)); + } catch (writeErr) { + console.error("🚀 ~ fs.writeFile ~ err:", writeErr); + } +}; + +const resolveIsSsoFlag = (is_sso: any): boolean => { + if (typeof is_sso === 'boolean') { + return is_sso; + } + + if (is_sso === 'true') { + return true; + } + + if (is_sso === 'false') { + return false; + } + + throw new Error( + `Invalid token_payload.is_sso in existingCtMapper; expected boolean, received: ${JSON.stringify(is_sso)}` + ); +}; + +/** + * Resolves the Contentstack Management API UID for a content type / global field. + * @param migrationContentstackUid - The UID of the content type in the migration data. + * @param keyMapper - The key mapper object. + * @returns The Contentstack Management API UID. + */ +function resolveStackContentTypeUid( + migrationContentstackUid: string, + keyMapper?: Record, +): string { + const mapped = keyMapper?.[migrationContentstackUid]; + if (mapped === undefined || mapped === null || mapped === '') { + return migrationContentstackUid; + } + + const m = String(mapped).trim(); + const looksLikeUuid = + /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(m); + const looksLikeMongoId = /^[0-9a-f]{24}$/i.test(m); + + if (looksLikeUuid || looksLikeMongoId) { + return migrationContentstackUid; + } + + return m; +} + +const existingCtMapper = async ({ keyMapper, contentTypeUid, projectId, region, user_id, is_sso, type}: any) => { + try { + const normalizedIsSso = resolveIsSsoFlag(is_sso); + const ctUid = resolveStackContentTypeUid(contentTypeUid, keyMapper); + + if(type === 'global_field') { + + const req: any = { + params: { + projectId, + globalFieldUid: ctUid + }, + body: { + token_payload: { + region, + user_id, + is_sso: normalizedIsSso + } + } + } + const contentTypeSchema = await contentMapperService.getSingleGlobalField(req); + return contentTypeSchema ?? null; + } else { + const req: any = { + params: { + projectId, + contentTypeUid: ctUid + }, + body: { + token_payload: { + region, + user_id, + is_sso: normalizedIsSso + } + } + } + const contentTypeSchema = await contentMapperService.getExistingContentTypes(req); + return contentTypeSchema?.selectedContentType ?? null; + } + } catch (err) { + console.error("Error while getting the existing contentType from contenstack", err) + return {}; + } +} + +const mergeArrays = async (a: any[], b: any[]) => { + for await (const fieldGp of b) { + const exists = a.some(fld => + fld?.uid === fieldGp?.uid && + fld?.data_type === fieldGp?.data_type + ); + if (!exists) { + a.push(fieldGp); + } + } + return a; +} + +/** + * Clones a schema branch. + * @param node - The node to clone. + * @returns The cloned node. + */ +function cloneSchemaBranch(node: any): any { + if (node === undefined || node === null) return node; + try { + return structuredClone(node); + } catch { + return JSON.parse(JSON.stringify(node)); + } +} + +/** + * Finds the target modular blocks field. + * @param field - The field to find the target modular blocks field for. + * @param targetSchema - The target schema. + * @returns The target modular blocks field. + */ +function findTargetModularBlocksField(field: any, targetSchema: any[]): any | undefined { + if (!Array.isArray(targetSchema) || !field || field?.data_type !== 'blocks') return undefined; + + const byUid = targetSchema.find( + (mb: any) => mb?.data_type === 'blocks' && mb?.uid === field?.uid, + ); + if (byUid) return byUid; + + const fd = (field?.display_name ?? '').toString().trim().toLowerCase(); + if (fd) { + const byName = targetSchema.find( + (mb: any) => + mb?.data_type === 'blocks' && + (mb?.display_name ?? '').toString().trim().toLowerCase() === fd, + ); + if (byName) return byName; + } + + return undefined; +} + +/** + * Find a source modular-blocks child that should merge with the destination block. + * Primary match is by uid; falls back to title (case-insensitive) so blocks whose + * uids diverged due to sanitization still merge instead of + * producing a duplicate child block. + */ +function findMatchingSourceBlock(sourceBlocks: any[], targetBlock: any): any | undefined { + if (!Array?.isArray(sourceBlocks) || !targetBlock) return undefined; + + const byUid = sourceBlocks.find((b: any) => b?.uid && b?.uid === targetBlock?.uid); + if (byUid) return byUid; + + const targetTitle = (targetBlock?.title ?? '').toString().trim().toLowerCase(); + if (!targetTitle) return undefined; + + return sourceBlocks.find( + (b: any) => (b?.title ?? '').toString().trim().toLowerCase() === targetTitle, + ); +} + +/** + * Merge modular blocks preserving destination block order and UIDs: + * 1. Walk destination blocks — merge matching source blocks, clone unmapped ones. + * 2. Append source-only blocks (uids not on destination) at the end. + */ +function mergeModularBlocksFieldFromDestination(field: any, targetMB: any) { + const targetBlocks = targetMB?.blocks ?? []; + const sourceBlocks = field?.blocks ?? []; + if (!targetBlocks.length) return; + + const resultBlocks: any[] = []; + const matchedSourceIdentifiers = new Set(); + + for (const tb of targetBlocks) { + const sb = findMatchingSourceBlock(sourceBlocks, tb); + if (sb) { + const tSch = tb?.schema ?? []; + const additional = tSch.filter( + (tField: any) => + !(sb?.schema ?? []).some( + (sField: any) => + sField?.uid === tField?.uid && sField?.data_type === tField?.data_type, + ), + ); + sb.schema = removeDuplicateFields([ + ...(sb?.schema ?? []), + ...additional.map((f: any) => cloneSchemaBranch(f)), + ]); + mergeSchemaFields(sb?.schema ?? [], tSch); + + // Align uid/title with destination so the merged block updates the existing + // destination block instead of creating a divergent one when uids differ. + if (tb?.uid) sb.uid = tb?.uid; + if (tb?.title) sb.title = tb?.title; + + resultBlocks.push(sb); + if (sb?.uid) matchedSourceIdentifiers.add(`uid:${sb?.uid}`); + const matchedTitle = (sb?.title ?? '').toString().trim().toLowerCase(); + if (matchedTitle) matchedSourceIdentifiers.add(`title:${matchedTitle}`); + } else { + resultBlocks.push(cloneSchemaBranch(tb)); + } + } + + for (const sb of sourceBlocks) { + const sbUidKey = sb?.uid ? `uid:${sb?.uid}` : ''; + const sbTitleKey = sb?.title + ? `title:${(sb?.title as string).toString().trim().toLowerCase()}` + : ''; + const alreadyMatched = + (sbUidKey && matchedSourceIdentifiers.has(sbUidKey)) || + (sbTitleKey && matchedSourceIdentifiers.has(sbTitleKey)); + if (!alreadyMatched && sb?.uid && sb?.title) { + resultBlocks.push(sb); + } + } + + field.blocks = removeDuplicateFields(resultBlocks); +} + +function mergeSchemaFields(sourceSchema: any[], targetSchema: any[]) { + for (const field of sourceSchema) { + if (field?.data_type === 'group') { + const targetGroup = targetSchema?.find((grp: Group) => + grp?.uid === field?.uid && grp?.data_type === 'group' + ); + + if (targetGroup) { + const additional = (targetGroup?.schema ?? []).filter((tField: Group) => + !field?.schema?.find((sField: Group) => sField?.uid === tField?.uid && sField?.data_type === tField?.data_type) + ); + field.schema = removeDuplicateFields([...field?.schema ?? [], ...additional]); + mergeSchemaFields(field?.schema, targetGroup?.schema ?? []); + } + } + + if (field?.data_type === 'blocks') { + const targetMB = findTargetModularBlocksField(field, targetSchema ?? []); + + if (targetMB?.blocks?.length) { + mergeModularBlocksFieldFromDestination(field, targetMB); + } + } + } +} + +const mergeTwoCts = async (ct: any, mergeCts: any) => { + const ctData: any = { + ...ct, + title: mergeCts?.title, + uid: mergeCts?.uid, + options: ct?.options ?? { ...DEFAULT_CT_OPTIONS }, + } + + mergeSchemaFields(ctData?.schema ?? [], mergeCts?.schema ?? []); + + enrichMergedSchemaWithDestinationCustomFields( + ctData?.schema ?? [], + mergeCts?.schema ?? [], + ); + + ctData.schema = await mergeArrays(ctData?.schema, mergeCts?.schema) ?? []; + + return ctData; +} + +export const contenTypeMaker = async ({ contentType, destinationStackId, projectId, newStack, keyMapper, region, user_id, is_sso, entryCountsByCt, pageContentTypeIds }: any) => { + const marketPlacePath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId); + const srcFunc = 'contenTypeMaker'; + + const isGlobalField = contentType?.type === 'global_field'; + let ct: ContentType = { + title: contentType?.contentstackTitle, + uid: contentType?.contentstackUid, + description: contentType?.otherCmsDescription || '', + schema: [], + ...(isGlobalField + ? {} + : { + _version: 1, + inbuilt_class: false, + options: buildOptionsFor(contentType, entryCountsByCt, pageContentTypeIds), + abilities: { ...DEFAULT_CT_ABILITIES }, + }), + }; + + let currentCt: any = {}; + if (Object?.keys?.(keyMapper)?.length && + keyMapper?.[contentType?.contentstackUid] !== "" && + keyMapper?.[contentType?.contentstackUid] !== undefined) { + currentCt = await existingCtMapper({ keyMapper, contentTypeUid: contentType?.contentstackUid, projectId, region, user_id, is_sso, type: contentType?.type}); + } + + // Safe: ensures we never pass undefined to the builder + const ctData: any[] = buildSchemaTree(contentType?.fieldMapping || []); + + // Use the deep converter that properly handles groups & modular blocks + for (const item of ctData) { + if (item?.isDeleted === true) continue; + + const fieldSchema = buildFieldSchema(item, marketPlacePath, '', keyMapper); + if (fieldSchema) { + ct?.schema.push(fieldSchema); + } + } + + // dedupe by uid to avoid dup nodes after merges + ct.schema = removeDuplicateFields(ct.schema || []); + + // Title and url are built-in CT fields; pin them to the exact Contentstack + // shape (unique/_default/version) and keep them first, like the reference. + // Global fields have no title/url. + if (!isGlobalField) { + const rest = ct.schema.filter((f: any) => f?.uid !== 'title' && f?.uid !== 'url'); + ct.schema = [{ ...TITLE_FIELD }, { ...URL_FIELD }, ...rest]; + } + + if (currentCt?.uid) { + ct = await mergeTwoCts(ct, currentCt); + } + if (ct?.uid && Array.isArray(ct?.schema) && ct?.schema.length) { + if (contentType?.type === 'global_field') { + const globalSave = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, GLOBAL_FIELDS_DIR_NAME); + const message = getLogMessage(srcFunc, `Global Field ${ct?.uid} has been successfully Transformed.`, {}); + await customLogger(projectId, destinationStackId, 'info', message); + await writeGlobalField(ct, globalSave); + } else { + const contentSave = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, CONTENT_TYPES_DIR_NAME); + const message = getLogMessage(srcFunc, `ContentType ${ct?.uid} has been successfully Transformed.`, {}); + await customLogger(projectId, destinationStackId, 'info', message); + await saveContent(ct, contentSave); + } + } else { + console.info(contentType?.contentstackUid, 'missing'); + } +} \ No newline at end of file diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful-schema.json b/packages/contentstack-external-migrate/src/services/contentful/contentful-schema.json new file mode 100644 index 000000000..5ff2ce71d --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful-schema.json @@ -0,0 +1,34 @@ +{ + "contentTypes": { + "name": "contentTypes", + "required": "true" + }, + "tags": { + "name": "tags", + "required": "false" + }, + "editorInterfaces": { + "name": "editorInterfaces", + "required": "true" + }, + "entries": { + "name": "entries", + "required": "true" + }, + "assets": { + "name": "assets", + "required": "true" + }, + "locales": { + "name": "locales", + "required": "true" + }, + "webhooks": { + "name": "webhooks", + "required": "false" + }, + "roles": { + "name": "roles", + "required": "false" + } +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts b/packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts new file mode 100644 index 000000000..4ac591412 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts @@ -0,0 +1,1981 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import fs from "fs"; +import path from "path"; +import { v4 as uuidv4 } from "uuid"; +import _ from "lodash"; +import axios from "axios"; +import pLimit from 'p-limit'; +import { JSDOM } from "jsdom"; +import { jsonToHtml, jsonToMarkdown, htmlToJson } from '@contentstack/json-rte-serializer'; +import { CHUNK_SIZE, LOCALE_MAPPER, MIGRATION_DATA_CONFIG } from "./constants.js"; +import { Locale } from "./types.js"; +import jsonRTE from "./contentful/jsonRTE.js"; +import markdownConvert from "./contentful/markdown.js"; +import { + buildContentfulTaxonomyAssignments, + contentfulSchemeIdToStackTaxonomyUid, + createTaxonomy as createContentfulTaxonomyFromExport, +} from "./contentful/taxonomy.service.js"; +import { getAllLocales, getLogMessage } from "./utils/index.js"; +import customLogger from "./utils/custom-logger.utils.js"; +import { parseJsonLoose } from "../../lib/parse-json-loose.js"; + +const { + // DIR — use MIGRATION_DATA_CONFIG.DATA (getter), not a destructured DATA binding + LOCALE_DIR_NAME, + ENVIRONMENTS_DIR_NAME, + CONTENT_TYPES_DIR_NAME, + WEBHOOKS_DIR_NAME, + REFERENCES_DIR_NAME, + RTE_REFERENCES_DIR_NAME, + ENTRIES_DIR_NAME, + ASSETS_DIR_NAME, + GLOBAL_FIELDS_DIR_NAME, + // FILE + LOCALE_MASTER_LOCALE, + LOCALE_FILE_NAME, + EXPORT_INFO_FILE, + ASSETS_FILE_NAME, + ASSETS_SCHEMA_FILE, + ASSETS_FAILED_FILE, + ASSETS_FOLDER_FILE_NAME, + ASSETS_METADATA_FILE, + ENVIRONMENTS_FILE_NAME, + LOCALE_CF_LANGUAGE, + REFERENCES_FILE_NAME, + ENTRIES_MASTER_FILE, + WEBHOOKS_FILE_NAME, + RTE_REFERENCES_FILE_NAME, + GLOBAL_FIELDS_FILE_NAME, + +} = MIGRATION_DATA_CONFIG; + +interface AssetMetaData { + uid: string; + url: string; + filename: string; +} + + +/** + * Splits the given asset data into chunks that are under the specified size + * in bytes. The size of each chunk is determined by the {@link CHUNK_SIZE} + * constant. + * @param {object} assetData - The asset data to split into chunks. + * @returns {object} - An object where each key is a unique chunk ID and the + * value is an object containing the assets for that chunk. + */ +function makeChunks(assetData: any) { + let currentChunkSize = 0; + const chunkSize = CHUNK_SIZE; // 1 MB in bytes + let currentChunkId = uuidv4(); + const chunks: { [key: string]: any } = {}; + + for (const [key, value] of Object.entries(assetData)) { + const tempObj = { [(value as { uid: string }).uid]: value }; + chunks[currentChunkId] = { ...chunks[currentChunkId], ...tempObj }; + + currentChunkSize = Buffer.byteLength( + JSON.stringify(chunks[currentChunkId]), + "utf8" + ); + + if (currentChunkSize > chunkSize) { + currentChunkId = uuidv4(); + currentChunkSize = 0; + chunks[currentChunkId] = {}; + } + } + + return chunks; +} + +const mapLocales = ({ masterLocale, locale, locales, isNull = false }: any) => { + if (locales?.masterLocale?.[masterLocale ?? ''] === locale) { + return Object?.keys(locales?.masterLocale)?.[0] + } + for (const [key, value] of (Object?.entries?.(locales) ?? []) as [string, any][]) { + if (typeof value !== 'object' && value === locale) { + return key; + } + } + if (isNull !== true) { + return locale?.toLowerCase?.(); + } else { + return null; + } +} + +/** + * When an entry has `metadata.concepts` but no field locales, choose Contentful locale key(s) + * that align with the project/package locale mapper so `mapLocales` can resolve them later. + */ +function pickContentfulLocaleFromMasterLocaleMap(master: unknown): string | undefined { + if (!master || typeof master !== 'object' || Array.isArray(master)) return undefined; + const m = master as Record; + const keys = Object.keys(m); + if (!keys?.length) return undefined; + for (const k of keys) { + if (k.includes('-')) return k; + } + for (const v of Object.values(m)) { + if (typeof v === 'string' && v.includes('-')) return v; + } + return keys[0]; +} + +function resolveLocalesForTaxonomyMetadata( + entryLocaleKeys: Set, + entryDataBranch: Record | undefined, + localeMapper: Record, + entrySysLocale?: string, +): string[] { + const fromFields = [...entryLocaleKeys]; + if (fromFields?.length) return fromFields; + + if (entrySysLocale && typeof entrySysLocale === 'string') { + return [entrySysLocale]; + } + + const fromExisting = Object.keys(entryDataBranch || {}); + if (fromExisting?.length) return fromExisting; + + const fromProjectMaster = pickContentfulLocaleFromMasterLocaleMap(localeMapper?.masterLocale); + if (fromProjectMaster) return [fromProjectMaster]; + + const fromDefaultMaster = pickContentfulLocaleFromMasterLocaleMap(LOCALE_MAPPER?.masterLocale); + if (fromDefaultMaster) return [fromDefaultMaster]; + + const otherKeys = Object.keys(localeMapper || {}).filter((k) => k !== 'masterLocale'); + if (otherKeys?.length) return [otherKeys[0]]; + + return ['en-US']; +} + +function resolveEntryFieldKey(entry: Record, baseKey: string): string | undefined { + if (baseKey in entry) return baseKey; + const snake = baseKey.replace(/([A-Z])/g, (m) => `_${m.toLowerCase()}`); + if (snake in entry) return snake; + return undefined; +} + +/** Allowed taxonomy scheme UIDs from Contentful export content type `metadata.taxonomy` (sanitized for Contentstack). */ +function getAllowedTaxonomySchemesFromExportContentType( + contentTypesFromPackage: any[] | undefined, + contentTypeId: string, +): string[] { + if (!contentTypesFromPackage?.length) return []; + const ctDef = contentTypesFromPackage.find((c: any) => c?.sys?.id === contentTypeId); + const links = ctDef?.metadata?.taxonomy; + if (!Array.isArray(links)) return []; + return links + .map((l: any) => contentfulSchemeIdToStackTaxonomyUid(l?.sys?.id)) + .filter(Boolean); +} + +/** + * Maps Contentful content type id → field id → whether that field is localized in the export schema. + * Used so we only fan out values for fields with `localized: false`, not for localized fields that + * happen to have a single locale in the entry (missing translations). + */ +function buildContentfulFieldLocalizedByContentType( + contentTypesFromPackage: any[] +): Map> { + const byCt = new Map>(); + for (const ct of contentTypesFromPackage ?? []) { + const ctId = ct?.sys?.id; + if (!ctId) continue; + const byField = new Map(); + for (const f of ct?.fields ?? []) { + if (f?.id != null) { + byField.set(f.id, f.localized === true); + } + } + byCt.set(ctId, byField); + } + return byCt; +} + +/** + * When the export omits `widgetId`, infer defaults aligned with + * upload-api/migration-contentful/libs/contentTypeMapper.js. + */ +function inferContentfulDefaultWidgetId(fieldType: string | undefined): string | undefined { + switch (fieldType) { + case "Symbol": + return "singleLine"; + case "Text": + return "multipleLine"; + case "Integer": + case "Number": + return "numberEditor"; + case "RichText": + return "richTextEditor"; + case "Boolean": + return "boolean"; + default: + return undefined; + } +} + +function getContentfulFieldFromPackage( + contentTypesFromPackage: any[] | undefined, + ctId: string, + fieldId: string +): any | undefined { + const ct = contentTypesFromPackage?.find((c: any) => c?.sys?.id === ctId); + return ct?.fields?.find((f: any) => f?.id === fieldId); +} + +/** + * Picks one fieldMapping row when several share the same `uid` (e.g. bootstrap `title`/`url` rows + * from createInitialMapper plus the real Contentful field). Mapper `otherCmsType` is Contentful + * `widgetId` from the migration pipeline. + */ +function resolveFieldMappingRow( + fieldMapping: any[] | undefined, + contentTypesFromPackage: any[] | undefined, + ctId: string, + fieldId: string +): any | undefined { + const candidates = fieldMapping?.filter((item: any) => item?.uid === fieldId) ?? []; + if (candidates?.length === 0) return undefined; + if (candidates?.length === 1) return candidates?.[0]; + const cfField = getContentfulFieldFromPackage(contentTypesFromPackage, ctId, fieldId); + const widgetId = cfField?.widgetId ?? inferContentfulDefaultWidgetId(cfField?.type); + if (widgetId) { + const byWidget = candidates?.filter((c: any) => c?.otherCmsType === widgetId); + if (byWidget?.length >= 1) return byWidget?.[0]; + } + const typeToCs: Record = { + RichText: "json", + Boolean: "boolean", + Date: "isodate", + }; + const expectCs = cfField?.type ? typeToCs[cfField.type as string] : undefined; + if (expectCs) { + const byCs = candidates?.filter((c: any) => c?.contentstackFieldType === expectCs); + if (byCs?.length >= 1) return byCs?.[0]; + } + if (cfField?.type === "Boolean") { + const byBool = candidates?.filter((c: any) => c?.contentstackFieldType === "boolean"); + if (byBool?.length >= 1) return byBool?.[0]; + } + // Legacy bootstrap rows use otherCmsType "text" while real Symbol/Text fields use widget ids + // (e.g. singleLine). Prefer non-"text" otherCmsType when the schema is Symbol/Text. + if (cfField && ["Symbol", "Text"]?.includes(cfField?.type)) { + const nonBootstrap = candidates?.filter((c: any) => c?.otherCmsType !== "text"); + if (nonBootstrap?.length >= 1) return nonBootstrap?.[0]; + } + return candidates?.[0]; +} + +const transformCloudinaryObject = (input: any) => { + const result: any = []; + if (!Array.isArray(input)) { + return result; + } + for (const metaData of input ?? []) { + if (metaData?.public_id) { + result?.push({ + public_id: metaData?.public_id, + resource_type: metaData?.resource_type, + type: metaData?.type, + format: metaData?.format, + version: metaData?.version, + url: metaData?.original_url, + secure_url: metaData?.original_secure_url, + width: metaData?.width, + height: metaData?.height, + bytes: metaData?.bytes, + duration: metaData?.duration, + tags: metaData?.tags, + metadata: metaData?.metadata, + created_at: metaData?.created_at, + access_mode: "public", + access_control: [], + created_by: { + type: "", + id: "" + }, + uploaded_by: { + type: "", + id: "" + }, + folder_id: uuidv4(), + id: uuidv4(), + folder: "", + cs_metadata: { + config_label: "default_multi_config_key" + } + }); + } + } + return result; +} + +/** + * Reads a file from the given file path and returns its JSON content. + * @param {string} filePath - The path to the file to read. + * @param {string} fileName - The name of the file to read. + * @returns {Promise} - The JSON content of the file. + * @throws {Error} - If there is an error reading the file. + */ +async function readFile(filePath: string, fileName: string) { + try { + const data = await fs.promises.readFile(path.join(filePath, fileName), "utf8"); + return parseJsonLoose(data); + } catch (err) { + return undefined; + } +} + +/** + * Writes a file to the given directory path + * @param {string} indexPath - The path to write the file to. + * @param {object} fileMeta - The JSON content to write to the file. + * @throws {Error} - If there is an error writing the file. + */ +async function writeOneFile(indexPath: string, fileMeta: any) { + fs.writeFile(indexPath, JSON.stringify(fileMeta), (err) => { + if (err) { + console.error("Error writing file: 3", err); + } + }); +} + +/** + * Writes data to a specified file, ensuring the target directory exists. + * + * @param {string} dirPath - The directory path where the file should be saved. + * @param {string} filename - The name of the file to be created or overwritten. + * @param {any} data - The data to write to the file. Can be a string or an object. + * @returns {Promise} Resolves when the file is successfully written. + * + * @description + * This function ensures that the specified directory exists, creating it recursively if necessary. + * Then, it writes the provided data to a file at the given directory and filename. + * If an error occurs during directory creation or file writing, it logs an error message to the console. + * +*/ +async function writeFile(dirPath: string, filename: string, data: any) { + try { + // Ensure directory exists or create it recursively + await fs.promises.mkdir(dirPath, { recursive: true }); + // Write the file + const filePath = path.join(dirPath, filename); + await writeOneFile(filePath, data); + } catch (err) { + console.error('Error writing ${dirPath}/${filename}::', err); + } +} + +function convertToArray(data: any) { + if (typeof data === 'object' && data !== null && !Array.isArray(data)) { + return [data]// Converts object values into an array + } + return data ?? []; // Return as is if it's already an array or not an object +} + +// Pull a file extension (lowercase, no leading dot) from an asset's +// extension / filename / mimetype, for CS apps whose type derives from it. +const extFromAsset = (a: any): string => { + if (a?.extension) { + const e = Array.isArray(a.extension) ? a.extension[0] : a.extension; + return String(e ?? '').toLowerCase().replace(/^\./, ''); + } + const fn = a?.filename ?? a?.name; + if (typeof fn === 'string' && fn.includes('.')) return (fn.split('.').pop() ?? '').toLowerCase(); + const mime = a?.mimetype ?? a?.mimeType ?? a?.contentType; + if (typeof mime === 'string' && mime.includes('/')) return (mime.split('/')[1] ?? '').toLowerCase(); + return ''; +}; + +/** + * Brandfolder (Contentful) → Contentstack Brandfolder stored (raw) shape. + * + * CS Brandfolder's filterAssetData READS the stored asset as: + * { id, name|filename, extension, dimensions:{width,height}, sizeInBytes, + * apiDto.attributes.cdn_url | cdn_url | url, cs_metadata } + * `modifyAssetsToSave` returns assets unchanged, so the field stores THIS raw + * shape (not filterAssetData's output). Contentful Brandfolder stores flat + * { id, url, cdn_url, filename, thumbnail_url, mimetype, width, height, size }. + * Preserve the original keys and add the nested ones CS reads. + */ +const transformBrandfolderObject = (input: any) => { + const arr = convertToArray(input); + if (!Array.isArray(arr)) return []; + return arr + .filter((a: any) => a && typeof a === 'object') + .map((a: any) => ({ + ...a, + name: a?.name ?? a?.filename, + extension: a?.extension ?? extFromAsset(a), + dimensions: a?.dimensions ?? { width: a?.width, height: a?.height }, + sizeInBytes: a?.sizeInBytes ?? a?.size, + // cdn_url / url are already present on the Contentful asset and read directly by CS. + })); +}; + +/** + * Bynder (Contentful) → Contentstack Bynder stored (raw) shape. + * + * CS Bynder's filterAssetData READS the stored asset as: + * { id, name, type (UPPERCASE "IMAGE"/"VIDEO"/"AUDIO"/"DOCUMENT"), extensions[], + * url, files.webImage.{url,width,height,fileSize}, additionalInfo.selectedFile.*, + * previewUrls[], cs_metadata } + * `modifyAssetsToSave` returns assets unchanged → the field stores THIS raw shape. + * Contentful Bynder stores { id, name, type:"image"(lowercase), fileSize, width, + * height, extension[], thumbnails:{webimage,thul}, original, videoPreviewURLs, src }. + * Preserve original keys and normalize what CS reads — UPPERCASE `type`, `extensions` + * (plural), `url` (from original), and nested `files.webImage`. + */ +const transformBynderObject = (input: any) => { + const arr = convertToArray(input); + if (!Array.isArray(arr)) return []; + return arr + .filter((a: any) => a && typeof a === 'object') + .map((a: any) => { + const webimageUrl = + a?.files?.webImage?.url ?? a?.thumbnails?.webimage ?? a?.thumbnails?.webImage ?? a?.src ?? ''; + return { + ...a, + type: typeof a?.type === 'string' ? a.type.toUpperCase() : a?.type, + extensions: + a?.extensions ?? (Array.isArray(a?.extension) ? a.extension : a?.extension ? [a.extension] : []), + url: a?.url ?? a?.original ?? '', + files: a?.files ?? { + webImage: { + url: webimageUrl, + width: a?.width, + height: a?.height, + fileSize: a?.fileSize, + }, + }, + previewUrls: a?.previewUrls ?? a?.videoPreviewURLs ?? [], + }; + }); +}; + +// Map a file extension to the capitalized asset type CS apps expect. +const typeFromExtension = (ext?: string): string => { + const e = String(ext ?? '').toLowerCase().replace(/^\./, ''); + if (['jpeg','jpg','png','gif','bmp','apng','avif','jfif','pjpeg','pjp','svg','webp','ico','cur','tif','tiff'].includes(e)) return 'Image'; + if (['mp4','mov','wmv','avi','avchd','flv','f4v','swf','ogg'].includes(e)) return 'Video'; + if (e === 'pdf') return 'Pdf'; + if (['mp3','wav'].includes(e)) return 'Audio'; + if (['zip','rar','tar','7z'].includes(e)) return 'Zip'; + return 'Document'; +}; + +/** + * Frontify (Contentful) → Contentstack Frontify custom-field shape. + * + * Contentful Frontify stores: { id, title, name, ext, width, height, created, + * generic_url, preview_url, src }. + * Contentstack Frontify (marketplace-frontify-app, root_config/index filterAssetData) + * reads the stored asset as: { id, type, title, size, width, height, icon, previewUrl } + * and runs `type.toLowerCase()` UNGUARDED — so `type` MUST be a non-empty string + * or rendering throws. Contentful has no `type`, so derive it from `ext`. URLs + * are camelCase on the CS side (icon/previewUrl) vs Contentful's preview_url. + */ +const transformFrontifyObject = (input: any) => { + const arr = convertToArray(input); + if (!Array.isArray(arr)) return []; + return arr + .filter((a: any) => a && typeof a === 'object') + .map((a: any) => { + const url = a?.preview_url ?? a?.src ?? a?.generic_url ?? ''; + return { + id: a?.id ?? '', + type: a?.type ?? typeFromExtension(a?.ext), + title: a?.title ?? a?.name ?? '', + width: a?.width, + height: a?.height, + size: a?.size ?? a?.fileSize, + icon: url, + previewUrl: url, + }; + }); +}; + +/** + * Digizuite (Contentful) → Contentstack Digizuite custom-field shape. + * + * Contentstack Digizuite (marketplace-digizuite-app, root_config/CustomField + * filterAssetData) reads the stored asset as: { itemId, assetType, title, downloadUrl } + * (width/height/size/platformUrl are hardcoded ""). The CS list view does + * `type.charAt(0)…+ type.slice(1)` with `slice` UNGUARDED, so `assetType` MUST be + * a non-empty string or the entry editor crashes. + * + * The Contentful Digizuite app is self-hosted (no public repo), so its exact + * source keys are unconfirmed — we read from broad fallbacks and always emit a + * non-empty lowercase `assetType` (Digizuite's supported types are lowercase: + * image/video/pdf/audio/document/…). If a real Digizuite export surfaces, pin + * the source keys here. + */ +const transformDigizuiteObject = (input: any) => { + const arr = convertToArray(input); + if (!Array.isArray(arr)) return []; + return arr + .filter((a: any) => a && typeof a === 'object') + .map((a: any) => { + const downloadUrl = + a?.downloadUrl ?? + a?.url ?? + a?.preview_url ?? + a?.cdn_url ?? + a?.src ?? + a?.files?.webImage?.url ?? + a?.files?.thumbnail?.url ?? + ''; + const rawType = a?.assetType ?? a?.type ?? a?.mediaType; + const assetType = + typeof rawType === 'string' && rawType + ? rawType.toLowerCase() + : typeFromExtension(a?.ext ?? a?.extension ?? a?.filename ?? a?.name).toLowerCase(); + return { + itemId: a?.itemId ?? a?.id ?? a?.assetId ?? '', + assetType, + title: a?.title ?? a?.name ?? a?.filename ?? '', + downloadUrl, + }; + }); +}; + +// DAM app custom-field widgetIds (Contentful) with no dedicated reshape — +// pass the selected-asset JSON through as-is (normalized to an array). +// RkD9DMLgnqahWzcYyQ0RI = Aprimo (cs 6307403f08132800192fe615) — pass-through is correct: +// Contentful Aprimo stores { id, title, rendition.publicuri }, exactly what CS Aprimo reads. +const PASSTHROUGH_DAM_WIDGET_IDS = new Set([ + 'RkD9DMLgnqahWzcYyQ0RI', +]); + +const mktApp = (type: string, data: any) => { + if (PASSTHROUGH_DAM_WIDGET_IDS.has(type)) { + return convertToArray(data); + } + switch (type) { + case 'zjcnWgBknf9zB7IM9HZjE': // Cloudinary + return transformCloudinaryObject(data); + case 'bgBVVuNbfvUW5tpFnD20s': // Brandfolder + return transformBrandfolderObject(data); + case '5wHGALSJtz7y2EQOLfGhKH': // Frontify + return transformFrontifyObject(data); + case '57yilZEN9oBolHz9vD6jwY': // Digizuite + return transformDigizuiteObject(data); + case '5KySdUzG7OWuCE2V3fgtIa': // Bynder + return transformBynderObject(data); + case 'objectEditor': { + return convertToArray(data); + } + } +} + +const processField = ( + lang_value: any, + entryId: any, + assetId: any, + lang: any, + destination_stack_id: string, + fieldData: any, + context?: { ctId?: string; fieldKey?: string }, +) => { + switch (fieldData?.contentstackFieldType) { + case 'multi_line_text': + case 'single_line_text': + case 'url': + case 'text': { + return lang_value; + } + + case 'link': { + // Contentstack Link field value is { title, href }. Contentful urlEditor + // exports a plain URL string. + if (typeof lang_value === 'string') { + return { title: lang_value, href: lang_value }; + } + if (lang_value && typeof lang_value === 'object') { + return { + title: lang_value.title ?? '', + href: lang_value.href ?? lang_value.url ?? '', + }; + } + return lang_value; + } + + case 'json': { + // Freeform Object/Array fields (jsonobject_extension) — preserve as-is. + // Without this, processRTEOrNestedObject runs JSDOM on a plain object, + // coercing it to "[object Object]" and wrapping it in an RTE doc. + if (fieldData?.otherCmsType === 'Object' || fieldData?.otherCmsType === 'Array') { + return lang_value; + } + return processRTEOrNestedObject(lang_value, lang, destination_stack_id); + } + + case 'dropdown': + case 'radio': { + const isPresent = fieldData?.advanced?.options?.find((option: any) => lang_value === option?.value); + return isPresent?.value ?? fieldData?.advanced?.default_value; + } + + case 'file': { + if (fieldData?.advanced?.multiple) { + const assetsData: any = []; + for (const asset of lang_value) { + if (asset?.sys?.id in assetId) { + assetsData?.push(assetId?.[asset?.sys?.id]) + } + } + return assetsData; + } else { + const id = lang_value?.sys?.id; + if (assetId && id in assetId) { + return assetId?.[id] + } + return null; + } + } + + case 'reference': { + if (Array?.isArray?.(lang_value) && fieldData?.advanced?.multiple) { + const refs = []; + for (const entry of lang_value) { + const id = entry?.sys?.id; + if (id != null && id in entryId) { + refs?.push(entryId?.[id]); + } + } + return refs; + } + // Single reference. Only emit when the target resolves in the reference + // map — an empty field (lang_value null) or a reference to an entry that + // was filtered out would otherwise yield [undefined] → serialized as + // [null], which crashes the audit ("Cannot destructure property 'uid' of + // 'reference' as it is null"). Mirror the multiple path: skip unresolved. + const id = lang_value?.sys?.id; + if (id == null || !(id in entryId)) { + return []; + } + return [entryId[id]]; + } + + case 'app': { + return mktApp(fieldData?.otherCmsType, lang_value) + } + + case 'boolean': { + return lang_value; + } + + case 'number': { + if (typeof lang_value === 'string') { + return parseInt?.(lang_value) + } + return lang_value; + } + + case 'isodate': { + return lang_value; + } + + case 'checkbox': { + return lang_value; + } + + case 'html': { + const jsonValue = processRTEOrNestedObject(lang_value, lang, destination_stack_id); + return jsonToHtml( + jsonValue, + { + customElementTypes: { + "social-embed": (attrs, child, jsonBlock) => { + return `${child}`; + }, + }, + customTextWrapper: { + "color": (child, value) => { + return `${child}`; + }, + }, + } + ) ?? '

'; + } + + case 'markdown': { + // Contentful markdown is a plain string — copy across, normalising only + // platform quirks. Do NOT run it through the HTML/RTE path. + return markdownConvert(lang_value); + } + + case 'extension': { + if (['listInput', 'tagEditor']?.includes(fieldData?.otherCmsType)) { + // Key-value (listview) extension stores { value: [{ key, value }] }. + if (Array.isArray(lang_value) && lang_value?.length) { + return { value: lang_value.map((element: any) => ({ key: element, value: element })) }; + } + // Symbol/Text tag fields export a single scalar (not an array) — keep it + // instead of dropping the value. + if (lang_value != null && lang_value !== '') { + return { value: [{ key: lang_value, value: lang_value }] }; + } + // Empty → one blank row, matching the extension's own default shape so + // the field is editable after import. + return { value: [{ key: '', value: '' }] }; + } + break; + } + + case 'group': { + if (lang_value.lat) return lang_value; + break; + } + + default: { + if (Array.isArray(lang_value)) { + return processArrayFields(lang_value, entryId, assetId); + } + if (typeof lang_value !== "object") { + return typeof lang_value === "number" ? lang_value + : cleanBrackets(lang_value); + } + console.info( + `WARN: skipped unmapped field ${context?.ctId ?? '?'}.${context?.fieldKey ?? '?'}`, + ); + break; + } + } +}; + + +// Helper function to clean up brackets in non-numeric lang_value +const cleanBrackets = (lang_value: any) => { + const myJSON = JSON.stringify(lang_value); + const withoutEmptyBrac = myJSON + .replace("__,", "**") + .replace("##", "#") + .replace("###", "#"); + return JSON.parse(withoutEmptyBrac); +}; + +// Helper function to process arrays and resolve IDs for entries and assets +// Replaces jsonpath.query(array, "$..id") with direct item-level processing +// (following the same pattern as Team Fury's processField for arrays) +const processArrayFields = (array: any, entryId: any, assetId: any) => { + // Handle primitive arrays directly (strings, numbers, booleans) + if (array.every((item: any) => typeof item !== 'object' || item === null)) { + return array; + } + + const processedArray = array.reduce((acc: any[], item: any) => { + if (item?.sys?.id) { + // Handle Contentful system links (Entry or Asset references) + const { linkType, id } = item.sys; + if (linkType === 'Entry' && id in entryId) { + acc.push(entryId[id]); + } else if (linkType === 'Asset' && id in assetId) { + acc.push(assetId[id]); + } else { + // Keep unresolved references intact — the import process has a + // separate reference update step that resolves these later. + acc.push(item); + } + } else if (item !== null && typeof item === 'object') { + // Keep non-reference objects as-is (nested objects, RTE fragments, etc.) + acc.push(item); + } else if (item !== null && item !== undefined) { + // Keep primitive values (strings, numbers, booleans) + acc.push(item); + } + return acc; + }, []); + + // Clean up empty objects (matches original cleanup behavior) + const cleanedArray = JSON.stringify(processedArray) + .replace(/{},/g, "") + .replace(/,{}/g, "") + .replace(/,{},/g, "") + .replace(/{}/g, ""); + const result = typeof cleanedArray === 'string' && JSON.parse(cleanedArray); + return Array.isArray(result) && result.length > 0 ? result : undefined; +}; + +// Helper function to process Rich Text Editor (RTE) or nested object +const processRTEOrNestedObject = (lang_value: any, lang: any, destination_stack_id: string) => { + if (lang_value?.data) { + return jsonRTE(lang_value, lang.toLowerCase(), destination_stack_id); + } else { + const dom = new JSDOM(lang_value); + const htmlDoc = dom.window.document.querySelector("body"); + return htmlToJson(htmlDoc); + } +}; + +/** + * Retrieves the display field name for a given content type key. + * + * @param {string} key - The key representing the content type. + * @param {any} displayField - An object containing mappings of content type keys to their display fields. + * @returns {string} The display field name corresponding to the given key. Returns an empty string if no match is found. + * + * @description + * This function searches the `displayField` object for an entry that matches the provided key. + * The match is determined by normalizing the key and content type names (removing non-alphanumeric characters + * and ignoring case). If a match is found, the associated `displayField` value is returned. + */ +function getDisplayName(key: string, displayField: any) { + let path = ""; + Object.entries(displayField).forEach(([item, value]) => { + if ( + item.replace(/[^a-zA-Z0-9]+/g, "").toLowerCase() === key.toLowerCase() + ) { + path = (value as { displayField: string }).displayField; + } + }); + return path; +} + +/** + * Saves an asset to the destination stack directory, transforming and writing metadata. + * + * @param {any} assets - The asset object containing metadata and file details. + * @param {any} failedJSON - A JSON object tracking failed assets for retry or logging purposes. + * @param {any} assetData - An object used to store transformed asset data. + * @param {AssetMetaData[]} metadata - An array to store metadata about successfully saved assets. + * @param {string} projectId - The ID of the current project for logging purposes. + * @param {string} destination_stack_id - The ID of the destination stack where assets will be stored. + * @param {number} [retryCount=0] - The current retry attempt count, defaulting to 0. + * @returns {Promise} Resolves when the asset is successfully saved or after handling errors. + * + * @description + * This function performs the following tasks: + * 1. Reads environment and locale details from the destination stack directory. + * 2. Processes asset details, including file URL, title, and description. + * 3. Checks if the asset file already exists in the destination. + * 4. Downloads the asset file from the source URL and saves it locally. + * 5. Generates metadata about the asset, including environment, locale, and publishing details. + * 6. Writes the metadata to a JSON file and logs the successful transformation. + * 7. Handles errors during the asset save operation, retrying once if an error occurs. + * + * @throws Will log errors during file download, writing, or processing. + */ +const saveAsset = async ( + assets: any, + failedJSON: any, + assetData: any, + metadata: AssetMetaData[], + projectId: string, + destination_stack_id: string, + retryCount = 0 +): Promise => { + try { + const srcFunc = 'saveAsset'; + const publishDetails: { environment: any; version: number; locale: any }[] = + []; + const assetsSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ASSETS_DIR_NAME); + const environmentsId = await readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME), ENVIRONMENTS_FILE_NAME) ?? {}; + const localeId = await readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, LOCALE_DIR_NAME), LOCALE_CF_LANGUAGE); + + if (assets.fields.file && assets.fields.title) { + Object?.values?.(environmentsId)?.length && Object.values(environmentsId).forEach((env: any) => { + if (env?.name === assets?.sys?.environment?.sys?.id) { + Object.values(localeId).forEach((locale: any) => { + publishDetails.push({ + environment: env?.uid, + version: 1, + locale: locale.code, + }); + }); + } + }); + + const fileUrl = `https:${(Object.values(assets?.fields?.file)[0] as { url: string }).url + }`; + const assetTitle = Object.values(assets?.fields?.title)[0]; + const fileName = path.basename( + (Object.values(assets?.fields?.file)[0] as { fileName: string }) + .fileName + ); + const description = Object.values( + assets?.fields as { [key: string]: unknown } + ) + .map((desc) => + typeof Object.values(desc as { [key: string]: unknown })[0] === + "string" ? ( + Object.values(desc as { [key: string]: unknown })[0] as string + ).slice(0, 255) + : "" + ) + .join(""); + + if (fs.existsSync(path.resolve(assetsSave, assets.sys.id, fileName))) { + return assets.sys.id; // Asset already exists + } + + try { + const response = await axios.get(fileUrl, { + responseType: "arraybuffer", + }); + const assetPath = path.resolve(assetsSave, "files", assets.sys.id); + + assetData[assets.sys.id] = { + uid: assets.sys.id, + urlPath: `/assets/${assets.sys.id}`, + status: true, + content_type: ( + Object.values(assets?.fields?.file)[0] as { contentType: string } + ).contentType, + file_size: `${( + Object.values(assets?.fields?.file)[0] as { + details: { size: string }; + } + )?.details.size + }`, + tag: assets?.metadata?.tags, + filename: fileName, + url: fileUrl, + is_dir: false, + parent_uid: "migrationasset", + _version: 1, + title: assetTitle, + description, + publish_details: publishDetails || [], + }; + const message = getLogMessage( + srcFunc, + `Asset "${fileName}" has been successfully transformed.`, + {} + ) + await fs.promises.mkdir(assetPath, { recursive: true }); + // Write file as binary + await fs.promises.writeFile(path.join(assetPath, fileName), Buffer.from(response.data), "binary"); + await writeFile(assetPath, `_contentstack_${assets.sys.id}.json`, assetData[assets.sys.id]); + metadata.push({ uid: assets.sys.id, url: fileUrl, filename: fileName }); + delete failedJSON[assets.sys.id]; + await customLogger(projectId, destination_stack_id, 'info', message); + } catch (err: any) { + if (retryCount === 1) { + failedJSON[assets.sys.id] = { + failedUid: assets.sys.id, + name: assetTitle, + url: fileUrl, + file_size: `${( + Object.values(assets?.fields?.file)[0] as { + details: { size: string }; + } + ).details.size + }`, + reason_for_error: err?.message, + }; + } else { + return await saveAsset(assets, failedJSON, assetData, metadata, projectId, destination_stack_id, 1); + } + } + } + return assets.sys.id; + } catch (error) { + console.error(error); + } +}; + +/** +* Creates and processes assets from a given package file, saving them to the destination stack directory. +* +* @param {any} packagePath - The path to the package file containing asset data. +* @param {string} destination_stack_id - The ID of the destination stack where assets will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when all assets have been successfully created or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file containing asset data. +* 2. Creates and processes each asset using the `saveAsset` function, handling failures in `failedJSON`. +* 3. Saves the processed asset data, metadata, and chunked references to the destination directory. +* 4. Generates and writes the following files: +* - Schema file with complete asset data. +* - Chunked files for asset references. +* - Metadata file containing additional information about the assets. +* - A file to track failed assets, if any. +* 5. Logs appropriate messages if no assets are found or if an error occurs during processing. +* +* @throws Will log errors encountered during file reading, writing, or asset processing. +*/ +const createAssets = async (packagePath: any, destination_stack_id: string, projectId: string, isTest = false) => { + const srcFunc = 'createAssets'; + try { + const assetsSave = path?.join?.(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ASSETS_DIR_NAME); + const data = await fs?.promises?.readFile?.(packagePath, "utf8"); + const failedJSON: any = {}; + const assetData: any = {}; + const metadata: AssetMetaData[] = []; + const fileMeta = { "1": ASSETS_SCHEMA_FILE }; + let assets = parseJsonLoose(data)?.assets; + + if (assets && assets.length > 0) { + if (isTest) { + // Dev/test cap only — production convert must pass isTest=false + assets = assets?.slice(0, 10); + } + const limit = pLimit(10); // Max 10 parallel downloads, not a total asset cap + const tasks = assets.map((asset: any) => + limit(() => saveAsset(asset, failedJSON, assetData, metadata, projectId, destination_stack_id, 0)) + ); + + await Promise.all(tasks); + const assetMasterFolderPath = path.join(assetsSave, ASSETS_FAILED_FILE); + + await writeOneFile(path.join(assetsSave, ASSETS_SCHEMA_FILE), assetData); + // This code is intentionally commented out + + // const chunks: { [key: string]: any } = makeChunks(assetData); + // const refs: any = {}; + + // for (const [index, chunkId] of Object.keys(chunks).entries()) { + // refs[index + 1] = `${chunkId}-${ASSETS_FILE_NAME}`; + // await writeOneFile( + // path.join(assetsSave, `${chunkId}-${ASSETS_FILE_NAME}`), + // chunks[chunkId] + // ); + // } + + await writeOneFile(path.join(assetsSave, ASSETS_FILE_NAME), fileMeta); + // await writeOneFile(path.join(assetsSave, ASSETS_METADATA_FILE), metadata); + const foldersData = [ + { + uid: 'migrationasset', + name: 'MigrationAsset', + is_dir: true, + parent_uid: null, + _version: 1, + tags: [], + }, + ]; + await writeOneFile(path.join(assetsSave, ASSETS_FOLDER_FILE_NAME), foldersData); + failedJSON && await writeFile(assetMasterFolderPath, ASSETS_FAILED_FILE, failedJSON); + } else { + const message = getLogMessage( + srcFunc, + `No assets found.`, + {}, + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } + } catch (err) { + const message = getLogMessage( + srcFunc, + `Error encountered while creating assets.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + +/** +* Creates environment configurations from a given package file and saves them to the destination stack directory. +* +* @param {any} packagePath - The path to the package file containing environment data. +* @param {string} destination_stack_id - The ID of the destination stack where environments will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when the environments are successfully created or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract environment data (`editorInterfaces`). +* 2. Retrieves the master locale for the destination stack from the saved locale data. +* 3. Processes and creates unique environment configurations by: +* - Extracting titles and names from the parsed data. +* - Ensuring each environment has a unique name. +* - Associating each environment with the master locale. +* 4. Writes the consolidated environment configurations to a JSON file in the destination stack directory. +* 5. Logs a message if no environments are found in the package file. +* 6. Handles errors gracefully by logging them with relevant details. +* +* @throws Will log errors encountered during file reading, writing, or processing of environments. +*/ +const createEnvironment = async (packagePath: any, destination_stack_id: string, projectId: string,) => { + const srcFunc = 'createEnvironment'; + try { + const localeSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, LOCALE_DIR_NAME); + const environmentSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME); + const data = await fs.promises.readFile(packagePath, "utf8"); + const environments = parseJsonLoose(data)?.editorInterfaces; + if (environments && environments.length > 0) { + const defaultLocale = (await readFile(localeSave, LOCALE_MASTER_LOCALE)) ?? {}; + const otherLocales = (await readFile(localeSave, LOCALE_FILE_NAME)) ?? {}; + + // Every language in the stack needs a url entry on the environment (not + // just master). url is left empty — Contentful has no delivery URL to + // migrate; the user sets the base URL per language in the UI. + const localeCodes = [ + ...Object.values(defaultLocale).map((l: any) => l?.code), + ...Object.values(otherLocales).map((l: any) => l?.code), + ].filter(Boolean); + const uniqueCodes = [...new Set(localeCodes)]; + const urls = uniqueCodes.map((code) => ({ url: '', locale: code })); + + const environmentsJSON: { [key: string]: any } = {} + environments.forEach((env: any) => { + const title = env?.sys?.createdBy?.sys?.id; + const name = env?.sys?.environment?.sys?.id || "master"; + const isUnique = !Object.values(environmentsJSON).some( + (existingEnv) => existingEnv.name === name + ); + if (isUnique) { + environmentsJSON[title] = { + uid: title, + urlPath: `/environments/${name}`, + urls, + name, + }; + } + } + ); + + await writeFile(environmentSave, ENVIRONMENTS_FILE_NAME, environmentsJSON); + } else { + const message = getLogMessage( + srcFunc, + `No environments found.`, + {}, + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } + } catch (err) { + const message = getLogMessage( + srcFunc, + `Error encountered while creating environment.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + + +/** + * Creates and processes entries from a given package file and saves them to the destination stack directory. + * + * @param {any} packagePath - The path to the package file containing entry data. + * @param {string} destination_stack_id - The ID of the destination stack where entries will be saved. + * @param {string} projectId - The ID of the current project for logging purposes. + * @returns {Promise} Resolves when all entries have been successfully created or errors have been logged. + * + * @description + * This function performs the following tasks: + * 1. Reads and parses the package file to extract entries and content types. + * 2. Retrieves supporting data such as assets, references, and environments from the destination stack directory. + * 3. Processes entries by: + * - Mapping content types to their display fields. + * - Normalizing field names and handling multilingual fields. + * - Generating entry metadata including title, locale, URLs, and publishing details. + * - Logging transformation details for each entry. + * 4. Organizes and chunks processed entries into JSON files for efficient storage. + * 5. Writes: + * - Chunked entry files categorized by content type and locale. + * - Master entry files that reference chunked files. + * 6. Logs a message if no entries are found in the package file. + * 7. Handles errors gracefully by logging them with relevant details. + * + * @throws Will log errors encountered during file reading, processing, or writing of entries. + */ +const createEntry = async (packagePath: any, destination_stack_id: string, projectId: string, contentTypes: any, mapperKeys: any, master_locale: string, project: any): Promise => { + const srcFunc = 'createEntry'; + try { + const entriesSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ENTRIES_DIR_NAME); + const assetsSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ASSETS_DIR_NAME); + const environmentSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ENVIRONMENTS_DIR_NAME); + const data = await fs.promises.readFile(packagePath, "utf8"); + const entries = parseJsonLoose(data)?.entries; + const content = parseJsonLoose(data)?.contentTypes; + // Contentful entry tags are links to space-level Tag definitions; map each + // tag id → its human-readable name so Contentstack entries carry readable + // tag strings (e.g. "blog-images") rather than the raw id ("blogImages"). + const cfTags = parseJsonLoose(data)?.tags ?? []; + const tagNameById: Record = {}; + for (const t of cfTags) { + const tid = t?.sys?.id; + if (tid) tagNameById[tid] = t?.name || tid; + } + const cfFieldLocalizedByCt = buildContentfulFieldLocalizedByContentType(content); + const LocaleMapper = { masterLocale: project?.master_locale ?? LOCALE_MAPPER?.masterLocale, ...project?.locales ?? {} }; + if (entries && entries.length > 0) { + const assetId = await readFile(assetsSave, ASSETS_SCHEMA_FILE) ?? []; + const entryId = await readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, REFERENCES_DIR_NAME), REFERENCES_FILE_NAME); + const environmentsId = await readFile(environmentSave, ENVIRONMENTS_FILE_NAME) ?? {}; + const displayField: { [key: string]: any } = {} + content.map((item: any) => { + displayField[item?.sys?.id] = + { + displayField: item?.displayField || "untitled", + }; + } + ); + // Process entries + const result = entries.reduce( + ( + entryData: { [key: string]: any }, + { + sys: { + id, + locale: entrySysLocale, + contentType: { + sys: { id: name }, + }, + environment: { sys: { id: environment_id = "" } = {} } = {}, + }, + fields, + metadata, + }: any + ) => { + entryData[name] ??= {}; + const currentCT = contentTypes?.find((ct: any) => ct?.otherCmsUid === name); + // Contentful slug field → Contentstack url. Row uid is the Contentful + // field id, which is also the key under `fields`. + const slugFieldRow = currentCT?.fieldMapping?.find( + (f: any) => f?.otherCmsType === 'slugEditor', + ); + + Object.entries(fields || {}).forEach(([key, value]) => { + const locales: string[] = []; + Object.entries(value as object).forEach(([lang, langValue]) => { + entryData[name][lang] ??= {}; + entryData[name][lang][id] ??= {}; + locales.push(lang); + const fieldData = resolveFieldMappingRow( + currentCT?.fieldMapping, + content, + name, + key + ); + const newId = fieldData?.contentstackFieldUid ?? `${key}`?.replace?.(/[^a-zA-Z0-9]+/g, "_"); + entryData[name][lang][id][newId] = processField( + langValue, + entryId, + assetId, + lang, + destination_stack_id, + fieldData, + { ctId: name, fieldKey: key }, + ); + }); + + const pathName = getDisplayName(name, displayField); + locales.forEach((locale) => { + const localeCode = mapLocales({ masterLocale: master_locale, locale, locales: LocaleMapper }); + const publishDetails = Object?.values?.(environmentsId)?.length ? Object?.values?.(environmentsId) + .filter((env: any) => env?.name === environment_id) + ?.map((env: any) => ({ + environment: env?.uid, + version: 1, + locale: localeCode, + })) : []; + const title = fields?.[pathName]?.[locale] || ""; + const urlTitle = title + ?.replace?.(/[^a-zA-Z0-9]+/g, "-") + ?.toLowerCase?.(); + // Prefer the Contentful slug value for the url field; fall back to + // the title-derived url when the entry has no slug for this locale. + const rawSlug = + slugFieldRow?.uid != null ? fields?.[slugFieldRow.uid]?.[locale] : undefined; + const slugUrl = + typeof rawSlug === 'string' && rawSlug.trim() !== '' + ? rawSlug.startsWith('/') + ? rawSlug + : `/${rawSlug}` + : undefined; + const entryTags = Array.isArray(metadata?.tags) + ? metadata.tags + .map((t: any) => t?.sys?.id) + .filter( + (tid: any): tid is string => typeof tid === 'string' && tid.length > 0, + ) + .map((tid: string) => tagNameById[tid] ?? tid) + : []; + entryData[name][locale][id] = { + ...entryData[name][locale][id], + title: title?.trim?.() === "" ? (urlTitle || id) : title, + uid: id, + url: slugUrl ?? `/${name?.toLowerCase?.()}/${urlTitle}`, + locale: localeCode, + tags: entryTags, + publish_details: publishDetails, + }; + // Format object keys to snake_case + Object.entries(entryData[name][locale][id]).forEach( + ([innerKey, value]) => { + const formattedKey = innerKey.replace( + /([A-Z])/g, + (match) => `_${match.toLowerCase()}` + ); + delete entryData[name][locale][id][innerKey]; + entryData[name][locale][id][formattedKey] = value; + } + ); + }); + }); + + // Non-localized Contentful fields (`localized: false` in the content type) only appear under + // one locale in exports. Copy them to every other locale branch so each slice is complete. + // Do not infer non-localized-ness from a single locale key — localized fields can legitimately + // have only one locale when translations are missing. + const entryLocaleKeys = new Set(); + for (const [, v] of Object?.entries?.(fields || {})) { + for (const lang of Object.keys(v as object)) { + entryLocaleKeys.add(lang); + } + } + for (const [key, value] of Object?.entries?.(fields || {})) { + const langs = Object?.keys(value as object); + if (langs?.length !== 1) continue; + const fd = resolveFieldMappingRow(currentCT?.fieldMapping, content, name, key); + const localizedInCf = cfFieldLocalizedByCt.get(name)?.get(key); + const explicitlyNonLocalized = + localizedInCf === false || + (localizedInCf === undefined && fd?.advanced?.nonLocalizable === true); + if (!explicitlyNonLocalized) continue; + const srcLang = langs[0]; + const newId = fd?.contentstackFieldUid ?? `${key}`?.replace?.(/[^a-zA-Z0-9]+/g, "_"); + const srcEntry = entryData[name][srcLang]?.[id] as Record | undefined; + if (!srcEntry) continue; + const fk = resolveEntryFieldKey(srcEntry, newId); + if (fk === undefined) continue; + for (const tgtLang of entryLocaleKeys) { + if (tgtLang === srcLang) continue; + entryData[name][tgtLang] ??= {}; + entryData[name][tgtLang][id] ??= {}; + const tgt = entryData[name][tgtLang][id] as Record; + if (tgt[fk] === undefined) { + tgt[fk] = srcEntry[fk]; + } + } + } + + const metaTaxField = currentCT?.fieldMapping?.find( + (f: any) => + f?.otherCmsType === 'TaxonomyMetadata' || + f?.contentstackFieldType === 'taxonomy' || + f?.contentstackFieldUid === 'taxonomies' || + f?.contentstackFieldUid === 'metadata_taxonomies', + ); + let allowedFromMapper: string[] = []; + if (metaTaxField) { + const taxonomiesConfig = + metaTaxField?.advanced?.taxonomies || metaTaxField?.taxonomies || []; + allowedFromMapper = taxonomiesConfig + .map((t: any) => (typeof t === 'string' ? t : t?.taxonomy_uid)) + .filter(Boolean) + .map((uid: string) => contentfulSchemeIdToStackTaxonomyUid(uid)) + .filter(Boolean); + } + const allowedFromExport = getAllowedTaxonomySchemesFromExportContentType( + content, + name, + ); + const allowedSchemes = + allowedFromMapper?.length > 0 ? allowedFromMapper : allowedFromExport; + + if (metadata?.concepts?.length) { + const taxValue = buildContentfulTaxonomyAssignments( + metadata.concepts, + allowedSchemes, + ); + if (taxValue?.length) { + const fieldKey = metaTaxField?.contentstackFieldUid || 'taxonomies'; + const localesForTax = resolveLocalesForTaxonomyMetadata( + entryLocaleKeys, + entryData[name], + LocaleMapper, + entrySysLocale, + ); + for (const loc of localesForTax) { + entryData[name][loc] ??= {}; + entryData[name][loc][id] ??= {}; + entryData[name][loc][id][fieldKey] = taxValue; + } + } + } + + return entryData; + }, + {} + ); + for await (const [newKey, values] of Object.entries(result)) { + const currentCT = contentTypes?.find((ct: any) => ct?.otherCmsUid === newKey); + const ctName = currentCT?.contentstackUid in mapperKeys ? + mapperKeys?.[currentCT?.contentstackUid] : (currentCT?.contentstackUid ?? newKey?.replace?.(/([A-Z])/g, "_$1")?.toLowerCase?.()); + const valuesByCfLocale = values as { [key: string]: { [uid: string]: Record } }; + const mergedByDestinationLocale: { [localeCode: string]: { [uid: string]: Record } } = {}; + for (const localeKey of Object.keys(valuesByCfLocale)) { + const localeValues = valuesByCfLocale[localeKey]; + if (!localeValues) continue; + const localeCode = mapLocales({ + masterLocale: master_locale, + locale: localeKey, + locales: LocaleMapper, + isNull: true, + }); + if (!localeCode) continue; + mergedByDestinationLocale[localeCode] ??= {}; + for (const [uid, entry] of Object.entries(localeValues)) { + mergedByDestinationLocale[localeCode][uid] = { + ...(mergedByDestinationLocale[localeCode][uid] ?? {}), + ...(entry ?? {}), + }; + } + } + for await (const [localeCode, localeValues] of Object.entries(mergedByDestinationLocale)) { + const seenTitles = new Map(); + for (const [uid, entry] of Object.entries(localeValues as Record)) { + const e = entry as { title?: string; url?: string }; + const baseTitle = e?.title; + if (typeof baseTitle !== 'string' || baseTitle.length === 0) continue; + const firstUid = seenTitles.get(baseTitle); + if (firstUid === undefined) { + seenTitles.set(baseTitle, uid); + continue; + } + const newTitle = `${baseTitle} - ${uid}`; + const newSlug = newTitle.replace(/[^a-zA-Z0-9]+/g, '-').toLowerCase(); + e.title = newTitle; + if (typeof e.url === 'string') { + e.url = e.url.replace(/\/[^/]+$/, `/${newSlug}`); + } + } + const chunks = makeChunks(localeValues); + for (const [entryKey, entryValue] of Object.entries(localeValues)) { + const message = getLogMessage( + srcFunc, + `Entry title "${(entryValue as { title: string })?.title}"(${ctName}) in the ${localeCode} locale has been successfully transformed.`, + {} + ); + await customLogger(projectId, destination_stack_id, "info", message); + } + const refs: { [key: string]: any } = {}; + let chunkIndex = 1; + const filePath = path.join(entriesSave, ctName, localeCode); + for await (const [chunkId, chunkData] of Object.entries(chunks)) { + refs[chunkIndex++] = `${chunkId}-entries.json`; + await writeFile(filePath, `${chunkId}-entries.json`, chunkData); + } + await writeFile(filePath, ENTRIES_MASTER_FILE, refs); + } + } + } else { + const message = getLogMessage( + srcFunc, + `No entries found.`, + {} + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } + } catch (err) { + console.error("🚀 ~ createEntry ~ err:", err) + const message = getLogMessage( + srcFunc, + `Error encountered while creating entries.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + +function getKeyByValue(obj: Record, targetValue: string): string | undefined { + return Object.entries(obj).find(([_, value]) => value === targetValue)?.[0]; +} + +/** + * Processes and creates locale configurations from a given package file and saves them to the destination stack directory. + * + * @param {string} packagePath - The path to the package file containing locale data. + * @param {string} destination_stack_id - The ID of the destination stack where locales will be saved. + * @param {string} projectId - The ID of the current project for logging purposes. + * @returns {Promise} Resolves when all locales have been successfully processed and saved, or errors have been logged. + * + * @description + * This function performs the following tasks: + * 1. Reads and parses the package file to extract locale data. + * 2. Iterates over the locales and creates new locale configurations: + * - Identifies the master locale and stores it separately. + * - Sets locale attributes such as `code`, `name`, and `fallback_locale`. + * - Logs success messages for each locale transformation. + * 3. Saves the processed locales to JSON files: + * - `locales.json`: Contains all locales. + * - `master_locale.json`: Contains only the master locale. + * - `cf_language.json`: Contains the complete list of locales. + * 4. Logs a message confirming the successful transformation of locales. + * 5. Handles errors gracefully by logging them with relevant details. + * + * @throws Will log errors encountered during file reading, processing, or writing of locale configurations. + */ +const createLocale = async (packagePath: string, destination_stack_id: string, projectId: string, project: any) => { + const srcFunc = 'createLocale'; + const localeSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, LOCALE_DIR_NAME); + const globalFieldSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, GLOBAL_FIELDS_DIR_NAME); + + try { + const msLocale: Record = {}; + const allLocales: Record = {}; + const localeList: Record = {}; + + const data = await fs.promises.readFile(packagePath, "utf8"); + + const locales = parseJsonLoose(data)?.locales; + const [err, localeCodes] = await getAllLocales(); + + if (err) { + const message = getLogMessage( + srcFunc, + `Error encountered while fetching locales list.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } + const fallbackMapLocales: any = { ...project?.master_locale ?? {}, ...project?.locales ?? {} } + await Promise?.all(locales?.map?.(async (localeData: any) => { + const currentMapLocale = getKeyByValue?.(fallbackMapLocales, localeData?.code) ?? `${localeData?.code?.toLowerCase?.()}`; + const title = localeData?.sys?.id; + const newLocale: Locale = { + code: currentMapLocale, + name: localeCodes?.[currentMapLocale] || "English - United States", + fallback_locale: getKeyByValue(fallbackMapLocales, localeData?.fallbackCode) ?? '', + uid: `${title}`, + }; + const masterLocaleCode = getKeyByValue(project?.master_locale, localeData?.code); + if (masterLocaleCode !== undefined) { + msLocale[title] = newLocale; + const message = getLogMessage( + srcFunc, + `Master Locale ${newLocale?.code} has been successfully transformed.`, + {} + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } else { + const newValueLocale = getKeyByValue(project?.locales, localeData?.code); + if (newValueLocale) { + allLocales[title] = newLocale; + const message = getLogMessage( + srcFunc, + `Locale ${newLocale?.code} has been successfully transformed.`, + {} + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } + } + localeList[title] = newLocale; + })); + const masterLocaleData = Object?.values(msLocale)?.[0]; + if (masterLocaleData) { + for (const [key, value] of (Object.entries(allLocales) ?? []) as [string, Locale][]) { + if (value?.code === masterLocaleData?.fallback_locale) { + allLocales[key].fallback_locale = masterLocaleData?.code + } + } + } + await writeFile(localeSave, LOCALE_FILE_NAME, allLocales) + await writeFile(localeSave, LOCALE_MASTER_LOCALE, msLocale) + await writeFile(localeSave, LOCALE_CF_LANGUAGE, localeList) + + const message = getLogMessage( + srcFunc, + `locales have been successfully transformed.`, + {} + ) + await customLogger(projectId, destination_stack_id, 'info', message); + } catch (err) { + const message = getLogMessage( + srcFunc, + `error while Createing the locales.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + +/** +* Processes and transforms webhook configurations from a given package file and saves them to the destination stack directory. +* +* @param {string} packagePath - The path to the package file containing webhook data. +* @param {string} destination_stack_id - The ID of the destination stack where webhooks will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when all webhooks have been successfully processed and saved, or errors have been logged. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract webhook data. +* 2. Iterates through the webhooks, transforming their configurations: +* - Processes `topics` for webhook events and constructs appropriate channel topics. +* - Handles data transformation based on the type of webhook event (`contentType`, `entries`, `assets`, `releases`). +* - Filters out ignored events and applies custom transformations to topics. +* 3. Builds webhook objects with necessary attributes like `urlPath`, `channels`, `destinations`, etc. +* 4. Logs success messages for each webhook transformation. +* 5. Saves the processed webhooks to a JSON file in the destination stack directory. +* 6. Logs a message confirming the successful transformation of webhooks or logs errors encountered during processing. +* +* @throws Will log errors encountered during file reading, processing, or writing of webhook configurations. +* +* @example +* // Example usage +* await createWebhooks('/path/to/package.json', 'stack123', 'project456'); +*/ +const createWebhooks = async (packagePath: string, destination_stack_id: string, projectId: string,) => { + const srcFunc = 'createWebhooks'; + const webhooksSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, WEBHOOKS_DIR_NAME); + + try { + const data = await fs.promises.readFile(packagePath, "utf8"); + const webhookJSON: any = {}; + // Contentful redacts secret header values + basic-auth on export, so we can + // never recreate them. Track which webhooks need a manual secret re-entry so + // the operator gets a clear post-import checklist instead of silent gaps. + const secretReentry: string[] = []; + + const webhooks = parseJsonLoose(data)?.webhooks; + + if (webhooks && webhooks.length > 0) { + for (const webhooksData of webhooks) { + const channelTopic = []; + const rest = ["publish", "unpublish"]; + const custom = ["create", "delete", "update"]; + const ignore = ["save", "archive", "unarchive"]; + const required = [ + "content_types", + "content_types.entries", + "assets", + "releases", + ]; + + // Function definitions for different data transformations + const contentTypeFirst = (data: any, value: any) => { + const contenttype = data + .split(".")[0] + .replace("*", value) + .concat(`.${data.split(".")[1]}`); + channelTopic.push(contenttype); + }; + + const contentTypeLast = (data: any, value: any) => { + const contenttype = data + .split(".")[0] + .replace("ContentType", "content_types") + .concat(`.${value}`); + channelTopic.push(contenttype); + }; + + const restFieldFirstSuccess = (data: any, value: any) => { + const entries = data + .split(".")[0] + .replace("*", value) + .concat(`.environments.${data.split(".")[1]}.success`); + channelTopic.push(entries); + }; + + const restFieldFirst = (data: any, value: any) => { + const entries = data + .split(".")[0] + .replace("*", value) + .concat(`.${data.split(".")[1]}`); + channelTopic.push(entries); + }; + + const releasesFirst = (data: any) => { + const releases = data + .split(".")[0] + .replace("*", "releases") + .concat(".environments.deploy"); + channelTopic.push(releases); + }; + + const releasesLast = (data: any) => { + const releases = data + .split(".")[0] + .replace("Release", "releases") + .concat(".environments.deploy"); + channelTopic.push(releases); + }; + + for (const data of webhooksData.topics) { + if (data.split(".")[0].includes("*")) { + if (!ignore.includes(data.split(".")[1])) { + for (const value of required) { + if (value === "content_types") contentTypeFirst(data, value); + if (value === "content_types.entries" || value === "assets") { + if (rest.includes(data.split(".")[1])) { + restFieldFirstSuccess(data, value); + } else { + restFieldFirst(data, value); + } + } + if (value === "releases") releasesFirst(data); + } + } + } else if (data.split(".")[1].includes("*")) { + if (data.split(".")[0].includes("ContentType")) { + for (const value of custom) contentTypeLast(data, value); + } + if (data.split(".")[0].includes("Entry")) { + for (const value of custom) { + const entries = data + .split(".")[0] + .replace("Entry", "content_types.entries") + .concat(`.${value}`); + channelTopic.push(entries); + } + for (const value of rest) { + const entries = data + .split(".")[0] + .replace("Entry", "content_type.entries") + .concat(`.environments.${value}.success`); + channelTopic.push(entries); + } + } + if (data.split(".")[0].includes("Asset")) { + for (const value of custom) { + const asset = data + .split(".")[0] + .replace("Asset", "assets") + .concat(`.${value}`); + channelTopic.push(asset); + } + for (const value of rest) { + const asset = data + .split(".")[0] + .replace("Asset", "assets") + .concat(`.environments.${value}.success`); + channelTopic.push(asset); + } + } + if ( + data.split(".")[0].includes("Release") && + !data.split(".")[0].includes("ReleaseAction") + ) { + releasesLast(data); + } + } else { + if (!ignore.includes(data.split(".")[1])) { + if (data.split(".")[0].includes("ContentType")) { + if (!rest.includes(data.split(".")[1])) + contentTypeFirst(data, ""); + } + if (data.split(".")[0].includes("Entry")) { + const entries = data + .split(".")[0] + .replace("Entry", "content_type.entries") + .concat( + rest.includes(data.split(".")[1]) ? `.environments.${data.split(".")[1]}.success` + : `.${data.split(".")[1]}` + ); + channelTopic.push(entries); + } + if (data.split(".")[0].includes("Asset")) { + const asset = data + .split(".")[0] + .replace("Asset", "assets") + .concat( + rest.includes(data.split(".")[1]) ? `.environments.${data.split(".")[1]}.success` + : `.${data.split(".")[1]}` + ); + channelTopic.push(asset); + } + if ( + data.split(".")[0].includes("Release") && + !data.split(".")[0].includes("ReleaseAction") + ) { + releasesLast(data); + } + } + } + } + + // Headers carrying a value migrate as-is. Secret headers (and basic auth) + // export with NO value — Contentful strips them — so we keep the header + // NAME with a blank value as a visible placeholder for the operator to + // fill in, rather than dropping it and hiding that a secret is required. + const srcHeaders: any[] = Array.isArray(webhooksData.headers) ? webhooksData.headers : []; + let needsManualSecret = false; + const custom_header = srcHeaders.map((x: any) => { + if (Object.keys(x).includes("value")) { + return { value: x["value"], header_name: x["key"] }; + } + needsManualSecret = true; + return { value: "", header_name: x["key"] }; + }); + if (webhooksData.httpBasicUsername) needsManualSecret = true; + if (needsManualSecret) secretReentry.push(webhooksData.name); + const customHeader = { custom_header }; + + const title = webhooksData.sys.id; + webhookJSON[title] = { + urlPath: `/webhooks/${title}`, + concise_payload: false, + disabled: true, + retry_policy: "manual", + channels: _.uniq(channelTopic), + destinations: [{ ...customHeader, target_url: webhooksData.url }], + name: webhooksData.name, + unhealthy: { state: false }, + }; + const message = getLogMessage( + srcFunc, + `Webhook ${webhooksData.name} has been successfully transformed.`, + {}, + ); + await customLogger(projectId, destination_stack_id, 'info', message); + } + await writeFile(webhooksSave, WEBHOOKS_FILE_NAME, webhookJSON) + if (secretReentry.length) { + const message = getLogMessage( + srcFunc, + `${secretReentry.length} webhook(s) need manual secret/credential re-entry after import (Contentful does not export secrets): ${secretReentry.join(', ')}`, + {}, + ); + await customLogger(projectId, destination_stack_id, 'warn', message); + } + return { total: Object.keys(webhookJSON).length, needsSecretReentry: secretReentry }; + } else { + const message = getLogMessage( + srcFunc, + `No webhooks found.`, + {}, + ); + await customLogger(projectId, destination_stack_id, 'info', message); + } + } catch (err) { + const message = getLogMessage( + srcFunc, + `error while Creating the Webhooks.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + +/** +* Processes and generates reference and rich-text editor (RTE) reference mappings from entries in a given package file. +* +* @param {string} packagePath - The path to the package file containing entry data. +* @param {string} destination_stack_id - The ID of the destination stack where references will be saved. +* @param {string} projectId - The ID of the current project for logging purposes. +* @returns {Promise} Resolves when reference and RTE reference files are successfully generated and saved. +* +* @description +* This function performs the following tasks: +* 1. Reads and parses the package file to extract entries. +* 2. Iterates through the entries to: +* - Construct a mapping of `references`, associating entry IDs with their content type and UID. +* - Construct a mapping of `rteReferences`, associating language-specific references for each entry ID and content type. +* 3. Saves the generated mappings to separate JSON files: +* - `references.json` for general references. +* - `rte_references.json` for rich-text editor-specific references. +* 4. Logs an error message if any issue occurs during file processing or saving. +* +* @throws Will log errors encountered during file reading, data transformation, or file writing. +*/ +const createRefrence = async (packagePath: string, destination_stack_id: string, projectId: string,) => { + const srcFunc = 'createRefrence'; + const refrencesSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, REFERENCES_DIR_NAME); + const rteRefrencesSave = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME); + try { + const data = await fs.promises.readFile(packagePath, "utf8"); + const entries = parseJsonLoose(data)?.entries; + + const result = entries.reduce( + ( + entryData: { [key: string]: any }, + { + sys: { + id, + contentType: { + sys: { id: name }, + }, + }, + fields, + }: any + ) => { + if (!entryData.rteRefrences && !entryData.refrences) { + entryData.rteRefrences = {}; + entryData.refrences = {}; + } + entryData.refrences[id] = { + uid: id, + _content_type_uid: name.replace(/([A-Z])/g, "_$1").toLowerCase(), + }; + + Object.entries(fields).forEach(([key, value]) => { + Object.entries(value as object).forEach(([lang, langValue]) => { + entryData.rteRefrences[lang.toLowerCase()] ??= {}; + entryData.rteRefrences[lang.toLowerCase()][id] ??= { + uid: id, + _content_type_uid: name.replace(/([A-Z])/g, "_$1").toLowerCase(), + }; + }); + }); + return entryData; + }, + {} + ); + await writeFile(refrencesSave, REFERENCES_FILE_NAME, result.refrences); + await writeFile(rteRefrencesSave, RTE_REFERENCES_FILE_NAME, result.rteRefrences); + } catch (err) { + const message = getLogMessage( + srcFunc, + `error while Createing the Refrence.`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } + +}; + +/** + * Creates a version file for the given destination stack. + * + * @param {string} destination_stack_id - The ID of the destination stack where the version file will be saved. + * @param {string} projectId - The ID of the current project for logging purposes. + * @returns {Promise} Resolves when the version file is successfully created. + * + * @description + * This function performs the following tasks: + * 1. Creates a `version.json` file in the destination stack directory. + * 2. The version file includes the following details: + * - `contentVersion`: The version of the content schema (set to `2`). + * - `logsPath`: An empty string reserved for future log path information. + * 3. Handles errors that occur during the file creation process: + * - Logs a detailed error message using the `customLogger` function. + * + * @throws Will log an error if the file writing operation fails. + */ +const createVersionFile = async (destination_stack_id: string, projectId: string) => { + try { + await writeFile(path?.join?.(MIGRATION_DATA_CONFIG.DATA, destination_stack_id), EXPORT_INFO_FILE, + { + contentVersion: 2, + logsPath: "", + }) + } catch (err) { + const message = getLogMessage( + "createVersionFile", + `Error writing file: ${err}`, + {}, + err + ) + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; + +export const contentfulService = { + createLocale, + createEnvironment, + createAssets, + createEntry, + createRefrence, + createWebhooks, + createVersionFile, + createTaxonomy: createContentfulTaxonomyFromExport, +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts b/packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts new file mode 100755 index 000000000..cc01f351b --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts @@ -0,0 +1,475 @@ +import path from 'path'; +import fs from 'fs'; +import { MIGRATION_DATA_CONFIG } from '../constants.js'; +import { parseJsonLoose } from '../../../lib/parse-json-loose.js'; + +const { + // DIR + LOCALE_DIR_NAME, + RTE_REFERENCES_DIR_NAME, + ASSETS_DIR_NAME, + // FILE + LOCALE_MASTER_LOCALE, + ASSETS_SCHEMA_FILE, + RTE_REFERENCES_FILE_NAME, + +} = MIGRATION_DATA_CONFIG; +type NodeType = string; +type LangType = string; +type StackId = string; + +function readFile(filePath: string) { + if (fs.existsSync(filePath)) { + return parseJsonLoose(fs.readFileSync(filePath, 'utf-8')); + } + return undefined; +} + +const parsers: Map any> = new Map([ + ['document', parseDocument], + ['paragraph', parseParagraph], + ['text', parseText], + ['hr', parseHR], + ['list-item', parseLI], + ['unordered-list', parseUL], + ['ordered-list', parseOL], + ['embedded-entry-block', parseBlockReference], + ['embedded-entry-inline', parseInlineReference], + ['embedded-asset-block', parseBlockAsset], + ['blockquote', parseBlockquote], + ['heading-1', parseHeading1], + ['heading-2', parseHeading2], + ['heading-3', parseHeading3], + ['heading-4', parseHeading4], + ['heading-5', parseHeading5], + ['heading-6', parseHeading6], + ['entry-hyperlink', parseEntryHyperlink], + ['asset-hyperlink', parseAssetHyperlink], + ['hyperlink', parseHyperlink], + ['table', parseTable], + ['table-row', parseTableRow], + ['head-tr', parseHeadTR], + ['table-header-cell', parseTableHead], + ['tbody', parseTBody], + ['body-tr', parseBodyTR], + ['table-cell', parseTableBody], +]); + +export default function jsonParse(obj: { nodeType: NodeType }, lang?: LangType, destination_stack_id?: StackId,) { + const parser = parsers.get(obj.nodeType); + if (parser) { + return parser(obj, lang, destination_stack_id); + } + return null; +} + +function generateUID(prefix: string): string { + return `${prefix}${Math.floor(Math.random() * 100000000000000)}`; +} + +const isFilled = (e: any) => !(e === null || e === undefined); + +/** + * Map a node's content into child nodes, flattening a child `paragraph`'s + * children inline (matching the Team Fury reference). Used by headings, list + * items, blockquote, list containers, and table cells so a wrapping `

` is + * not nested inside them. + */ +function mapFlattenChildren(content: any[], lang?: LangType, destination_stack_id?: StackId): any[] { + const out: any[] = []; + for (const e of content ?? []) { + const parser = parsers.get(e?.nodeType); + if (!parser) continue; + const parsed = parser(e, lang, destination_stack_id); + if (e?.nodeType === 'paragraph' && e?.content && parsed?.children) { + out.push(...parsed.children); + } else if (isFilled(parsed)) { + out.push(parsed); + } + } + return out.filter(isFilled); +} + +function parseDocument(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = (obj.content ?? []) + .map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)) + .filter(isFilled); + + return { + type: 'doc', + attrs: {}, + uid: generateUID('doc'), + children: [ + { + type: 'p', + attrs: {}, + uid: generateUID('p'), + children: [{ text: '' }], + }, + ...children, + ], + _version: 1, + }; +} + +function parseTable(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const rowCount = obj.content.length; + const colCount = Math.max(...obj.content.map((e: any) => e.content.length)); + const attrs = { + rows: rowCount, + cols: colCount, + colWidths: Array(colCount).fill(250), + }; + const children = obj.content + .map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)) + .concat(parsers.get('tbody')?.(obj, lang, destination_stack_id)) + .filter(isFilled); + + return { + type: 'table', + attrs, + uid: generateUID('table'), + children, + }; +} + +// Reference parses a header row (all cells are table-header-cell) into a +// `thead` > `head-tr`. Body rows return undefined here and are emitted via +// `tbody` instead, so each row appears exactly once. +function parseTableRow(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const cells = obj.content ?? []; + const allHeader = cells.length > 0 && cells.every((c: any) => c?.nodeType === 'table-header-cell'); + if (!allHeader) return undefined; + + const children = [parsers.get('head-tr')?.(cells, lang, destination_stack_id)].filter(isFilled); + return children.length ? { type: 'thead', attrs: {}, uid: generateUID('tabletype'), children } : undefined; +} + +function parseHeadTR(obj: any[], lang?: LangType, destination_stack_id?: StackId): any { + const children = obj.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(isFilled); + return { + type: 'tr', + attrs: {}, + uid: generateUID('tr'), + children, + }; +} + +function parseTableHead(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'th', + attrs: {}, + uid: generateUID('th'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseTBody(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = obj.content.map((e: any) => parsers.get('body-tr')?.(e, lang, destination_stack_id)).filter(isFilled); + return { + type: 'tbody', + attrs: {}, + uid: generateUID('tbody'), + children, + }; +} + +function parseBodyTR(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = obj.content + .filter((e: any) => e.nodeType === 'table-cell') + .map((e: any) => parsers.get('table-cell')?.(e, lang, destination_stack_id)) + .filter(isFilled); + return children.length ? { type: 'tr', attrs: {}, uid: generateUID('tr'), children } : null; +} + +function parseTableBody(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = mapFlattenChildren(obj.content, lang, destination_stack_id); + return children.length ? { type: 'td', attrs: {}, uid: generateUID('td'), children } : null; +} + +function parseParagraph(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = obj.content.map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)).filter(isFilled); + return { + type: 'p', + attrs: {}, + uid: generateUID('p'), + children, + }; +} + +function parseText(obj: any): any { + const result: { text: string;[key: string]: boolean | string } = { text: obj.value }; + obj.marks.forEach((e: any) => { + result[e.type.replace('code', 'inlineCode')] = true; + }); + return result; +} + +function parseHR(): any { + return { + type: 'hr', + attrs: {}, + uid: generateUID('hr'), + children: [{ text: '' }], + }; +} + +function parseUL(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + uid: generateUID('ul'), + type: 'ul', + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + id: generateUID('ul'), + attrs: {}, + }; +} + +function parseOL(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + uid: generateUID('ol'), + type: 'ol', + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + id: generateUID('ul'), + attrs: {}, + }; +} + +function parseLI(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'li', + attrs: {}, + uid: generateUID('li'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseBlockReference(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const entryId: { [key: string]: any } = (destination_stack_id && readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME, RTE_REFERENCES_FILE_NAME))) || {}; + const defaultLocale = (destination_stack_id && readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, LOCALE_DIR_NAME, LOCALE_MASTER_LOCALE))) || {}; + const masterLocale = Object.values(defaultLocale).map((localeId: any) => localeId?.code).filter(Boolean).join(); + + if (masterLocale === lang || lang) { + for (const [arrayKey, arrayValue] of Object.entries(entryId)) { + if (arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid && lang === arrayKey) { + return { + type: 'reference', + attrs: { + 'display-type': 'block', + type: 'entry', + 'class-name': 'embedded-entry redactor-component block-entry', + 'entry-uid': obj.data.target.sys.id, + locale: arrayKey, + 'content-type-uid': arrayValue[obj.data.target.sys.id]._content_type_uid, + }, + uid: generateUID('reference'), + children: [{ text: '' }], + }; + } + } + } + return { + type: 'p', + attrs: {}, + uid: generateUID('reference'), + children: [{ text: '' }], + }; +} + +function parseInlineReference(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const entryId: { [key: string]: any } = destination_stack_id && readFile(path.join(MIGRATION_DATA_CONFIG.DATA,destination_stack_id, RTE_REFERENCES_DIR_NAME, RTE_REFERENCES_FILE_NAME)); + const entry = entryId && Object.entries(entryId).find(([arrayKey, arrayValue]) => arrayKey === lang && arrayValue[obj.data.target.sys.id]); + + if (entry) { + const [arrayKey, arrayValue] = entry; + if (arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid && arrayKey) { + return { + type: 'reference', + attrs: { + 'display-type': 'block', + type: 'entry', + 'class-name': 'embedded-entry redactor-component block-entry', + 'entry-uid': obj.data.target.sys.id, + locale: arrayKey, + 'content-type-uid': arrayValue?.[obj?.data?.target?.sys?.id]?._content_type_uid, + }, + uid: generateUID('reference'), + children: [{ text: '' }], + }; + } + } + + return { + type: 'p', + attrs: {}, + uid: generateUID('reference'), + children: [{ text: '' }], + }; +} + +function parseBlockAsset(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const assetId = (destination_stack_id && readFile(path.join(MIGRATION_DATA_CONFIG.DATA,destination_stack_id, ASSETS_DIR_NAME, ASSETS_SCHEMA_FILE))) || {}; + const asset = assetId?.[obj?.data?.target?.sys?.id]; + + if (asset) { + return { + type: 'reference', + attrs: { + 'display-type': 'download', + 'asset-uid': obj.data.target.sys.id, + 'content-type-uid': 'sys_assets', + 'asset-link': asset?.url, + 'asset-name': asset?.filename, + 'asset-type': asset?.content_type, + type: 'asset', + 'class-name': 'embedded-asset', + inline: false, + width: 443, + height: 266, + }, + uid: generateUID('reference'), + children: [{ text: '' }], + }; + } + + return { + type: 'p', + attrs: {}, + uid: generateUID('reference'), + children: [{ text: '' }], + }; +} + +function parseBlockquote(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'blockquote', + attrs: {}, + uid: generateUID('blockquote'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading1(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h1', + attrs: {}, + uid: generateUID('h1'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading2(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h2', + attrs: {}, + uid: generateUID('h2'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading3(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h3', + attrs: {}, + uid: generateUID('h3'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading4(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h4', + attrs: {}, + uid: generateUID('h4'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading5(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h5', + attrs: {}, + uid: generateUID('h5'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +function parseHeading6(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + return { + type: 'h6', + attrs: {}, + uid: generateUID('h6'), + children: mapFlattenChildren(obj.content, lang, destination_stack_id), + }; +} + +// Aligned with Team Fury reference jsonRTE.js: entry-hyperlink → reference +// (block entry), asset-hyperlink → reference (asset link), hyperlink → `a`. +function parseEntryHyperlink(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const entryId: { [key: string]: any } = + (destination_stack_id && + readFile( + path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, RTE_REFERENCES_DIR_NAME, RTE_REFERENCES_FILE_NAME), + )) || + {}; + const targetId = obj?.data?.target?.sys?.id; + let attrs: any = {}; + for (const [arrayKey, arrayValue] of Object.entries(entryId)) { + const hit = (arrayValue as any)?.[targetId]; + if (hit?._content_type_uid) { + attrs = { + 'display-type': 'block', + type: 'entry', + 'class-name': 'embedded-entry redactor-component block-entry', + 'entry-uid': targetId, + locale: arrayKey, + 'content-type-uid': hit._content_type_uid, + }; + } + } + const children = (obj?.content ?? []) + .map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)) + .filter(isFilled); + return { uid: generateUID('reference'), type: 'reference', attrs, children }; +} + +function parseAssetHyperlink(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const assetId = + (destination_stack_id && + readFile(path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, ASSETS_DIR_NAME, ASSETS_SCHEMA_FILE))) || + {}; + const targetId = obj?.data?.target?.sys?.id; + const asset = assetId?.[targetId]; + if (asset) { + const children = (obj?.content ?? []) + .map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)) + .filter(isFilled); + return { + uid: generateUID('reference'), + type: 'reference', + attrs: { + 'display-type': 'link', + type: 'asset', + 'class-name': 'embedded-entry redactor-component undefined-entry', + 'asset-uid': targetId, + 'content-type-uid': 'sys_assets', + target: '_blank', + href: asset.url, + }, + children, + }; + } + // Reference returns an empty paragraph (not null) when the asset is missing. + return { type: 'p', attrs: {}, uid: generateUID('reference'), children: [{ text: '' }] }; +} + +function parseHyperlink(obj: any, lang?: LangType, destination_stack_id?: StackId): any { + const children = (obj?.content ?? []) + .map((e: any) => parsers.get(e.nodeType)?.(e, lang, destination_stack_id)) + .filter(isFilled); + return { + uid: generateUID('a'), + type: 'a', + attrs: { url: obj?.data?.uri, target: '_blank' }, + children, + }; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful/markdown.ts b/packages/contentstack-external-migrate/src/services/contentful/contentful/markdown.ts new file mode 100644 index 000000000..99e36f7a7 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful/markdown.ts @@ -0,0 +1,42 @@ +/** + * Contentful → Contentstack Markdown converter. + * + * Markdown migrates ~1:1: both platforms store the field as a plain Markdown + * string (Contentful = a `markdown` editor on a Long Text field, Contentstack = + * the dedicated Markdown field with `field_metadata.markdown: true`). So unlike + * jsonRTE (a recursive node-tree parser), this is a small ordered pipeline of + * string transforms that only normalise the platform-specific quirks. + * + * IMPORTANT: do NOT route Markdown through the RTE/HTML path — parsing a + * Markdown string as HTML corrupts it (lists, emphasis, tables all break). + */ + +type Transform = (md: string) => string; + +/** + * Contentful asset/image URLs are protocol-relative (`//images.ctfassets.net/…`). + * Contentstack needs an absolute URL, so prefix the `https:` scheme. Covers both + * inline `[text](//url)` / `![alt](//url)` and reference-style `[1]: //url` defs. + */ +const fixProtocolRelativeUrls: Transform = (md) => + md + // inline links/images: ](//host/... and autolinks + .replace(/(\]\(|<)(\/\/[^\s)>]+)/g, (_m, lead, url) => `${lead}https:${url}`) + // reference-style link definitions: [label]: //host/... + .replace(/^(\s*\[[^\]]+\]:\s*)(\/\/\S+)/gm, (_m, lead, url) => `${lead}https:${url}`); + +const TRANSFORMS: Transform[] = [fixProtocolRelativeUrls]; + +/** + * Convert a Contentful Markdown field value into a Contentstack-ready Markdown + * string. Non-string inputs are coerced safely rather than corrupted. + */ +export default function markdownConvert(value: unknown): string { + if (value == null) return ''; + if (Array.isArray(value)) { + // "Multiple" markdown → join; each element converted independently. + return value.map((v) => markdownConvert(v)).join('\n'); + } + if (typeof value !== 'string') return String(value); + return TRANSFORMS.reduce((md, t) => t(md), value); +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts b/packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts new file mode 100644 index 000000000..d422deb11 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts @@ -0,0 +1,217 @@ +import fs from 'fs'; +import path from 'path'; +import { v4 as uuidv4 } from 'uuid'; +import { MIGRATION_DATA_CONFIG } from '../constants.js'; +import { parseJsonLoose } from '../../../lib/parse-json-loose.js'; + +const { CUSTOM_ROLES_DIR_NAME, CUSTOM_ROLES_FILE_NAME } = { + CUSTOM_ROLES_DIR_NAME: 'custom-roles', + CUSTOM_ROLES_FILE_NAME: 'custom-roles.json', +}; + +type Acl = { + read?: boolean; + create?: boolean; + update?: boolean; + delete?: boolean; + publish?: boolean; +}; + +/** + * Contentful role name → Contentstack built-in role. When a source role maps to + * a built-in (which already exists in every stack), we do NOT create a custom + * role — we just record the mapping. Everything else becomes a custom role. + */ +const BUILTIN_SYNONYMS: Record = { + owner: 'Owner', + admin: 'Admin', + administrator: 'Admin', + developer: 'Developer', + dev: 'Developer', + 'content manager': 'Content Manager', + 'content-manager': 'Content Manager', + editor: 'Content Manager', + author: 'Content Manager', +}; + +export function matchBuiltin(name: string): string | null { + const key = String(name || '').trim().toLowerCase(); + return BUILTIN_SYNONYMS[key] ?? null; +} + +/** Contentful policy `actions` ("all" or a list) → a Contentstack ACL. */ +function actionsToAcl(actions: any): Acl { + if (actions === 'all') { + return { read: true, create: true, update: true, delete: true, publish: true }; + } + const list: string[] = Array.isArray(actions) ? actions : actions ? [actions] : []; + const acl: Acl = {}; + for (const a of list) { + switch (a) { + case 'read': + acl.read = true; + break; + case 'create': + acl.create = true; + acl.read = true; + break; + case 'update': + acl.update = true; + acl.read = true; + break; + case 'delete': + acl.delete = true; + break; + case 'publish': + acl.publish = true; + break; + default: + break; + } + } + return acl; +} + +function mergeAcl(a: Acl, b: Acl): Acl { + return { + read: a.read || b.read || undefined, + create: a.create || b.create || undefined, + update: a.update || b.update || undefined, + delete: a.delete || b.delete || undefined, + publish: a.publish || b.publish || undefined, + }; +} + +function hasAcl(acl: Acl): boolean { + return Object.values(acl).some(Boolean); +} + +/** Walk a Contentful policy `constraint` for what it targets. */ +function readConstraint(constraint: any): { sysType?: string; contentTypeIds: string[] } { + const contentTypeIds: string[] = []; + let sysType: string | undefined; + const visit = (node: any) => { + if (!node || typeof node !== 'object') return; + if (Array.isArray(node.equals)) { + const [lhs, rhs] = node.equals; + const docPath = lhs?.doc; + if (docPath === 'sys.type' && typeof rhs === 'string') sysType = rhs; + if (docPath === 'sys.contentType.sys.id' && typeof rhs === 'string') contentTypeIds.push(rhs); + } + for (const k of Object.keys(node)) { + const v = node[k]; + if (Array.isArray(v)) v.forEach(visit); + else if (v && typeof v === 'object') visit(v); + } + }; + visit(constraint); + return { sysType, contentTypeIds }; +} + +export interface RoleMappingEntry { + source: string; + /** 'built-in' (mapped to an existing stack role) or 'custom' (created). */ + kind: 'built-in' | 'custom'; + target: string; +} + +/** + * Translate a Contentful export's `roles` into a Contentstack custom-roles + * bundle (`/custom-roles/custom-roles.json`) consumed by csdx import. + * + * - Roles whose name matches a Contentstack built-in (Owner/Admin/Developer/ + * Content Manager, incl. synonyms like Editor/Author) are mapped to that + * built-in and NOT recreated. + * - Every other role becomes a custom role whose rules are derived from the + * Contentful `permissions` + `policies` (honoring per-content-type constraints + * when present; otherwise granting across all migrated content types). + * + * `ctMap` maps Contentful content-type id → Contentstack content-type uid. + * Returns the source→target mapping report. + */ +export function createCustomRoles( + exportPath: string, + destinationStackId: string, + ctMap: Record, +): RoleMappingEntry[] { + const mapping: RoleMappingEntry[] = []; + let roles: any[] = []; + try { + roles = parseJsonLoose(fs.readFileSync(exportPath, 'utf8'))?.roles ?? []; + } catch { + return mapping; + } + if (!Array.isArray(roles) || roles.length === 0) return mapping; + + const customRoles: Record = {}; + + for (const role of roles) { + const name = role?.name; + if (!name) continue; + + const builtin = matchBuiltin(name); + if (builtin) { + mapping.push({ source: name, kind: 'built-in', target: builtin }); + continue; + } + + // Build ACLs from permissions + policies. + let ctAcl: Acl = {}; + let assetAcl: Acl = {}; + const scopedCtIds = new Set(); + let ctScoped = false; + + // permissions.ContentModel → content-type ACL (read/create/update/delete). + const cm: string[] = role?.permissions?.ContentModel ?? []; + if (cm.length) ctAcl = mergeAcl(ctAcl, actionsToAcl(cm)); + + for (const policy of role?.policies ?? []) { + if (policy?.effect && policy.effect !== 'allow') continue; // CS has no field-level deny + const acl = actionsToAcl(policy?.actions); + const { sysType, contentTypeIds } = readConstraint(policy?.constraint); + if (sysType === 'Asset') { + assetAcl = mergeAcl(assetAcl, acl); + } else { + // Entry (or unspecified) → governs entries via the content_type rule. + ctAcl = mergeAcl(ctAcl, acl); + if (contentTypeIds.length) { + ctScoped = true; + for (const cfId of contentTypeIds) { + const uid = ctMap[cfId]; + if (uid) scopedCtIds.add(uid); + } + } + } + } + + if (!hasAcl(ctAcl)) ctAcl = { read: true }; + + // Contentstack wants the literal ['$all'] token for "all content types"; + // a per-constraint subset uses the specific content-type uids. + const contentTypes = ctScoped && scopedCtIds.size ? [...scopedCtIds] : ['$all']; + const rules: any[] = [ + { module: 'content_type', content_types: contentTypes, acl: ctAcl }, + ]; + // Asset rule rejects 'create' ("Cannot set Create permission for ... assets"). + delete assetAcl.create; + if (hasAcl(assetAcl)) rules.push({ module: 'asset', acl: assetAcl }); + // branch rule is required by csdx import (it auto-adds one, but be explicit). + rules.push({ module: 'branch', branches: ['main'], acl: { read: true } }); + + const uid = uuidv4().replace(/-/g, '').slice(0, 24); + customRoles[uid] = { name, description: role?.description ?? '', rules }; + mapping.push({ source: name, kind: 'custom', target: name }); + } + + if (Object.keys(customRoles).length > 0) { + const dir = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, CUSTOM_ROLES_DIR_NAME); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync( + path.join(dir, CUSTOM_ROLES_FILE_NAME), + `${JSON.stringify(customRoles, null, 2)}\n`, + 'utf8', + ); + } + + return mapping; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts b/packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts new file mode 100644 index 000000000..ab2004a6b --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts @@ -0,0 +1,241 @@ +import fs from 'fs'; +import path from 'path'; +import { getLogMessage } from '../utils/index.js'; +import customLogger from '../utils/custom-logger.utils.js'; +import { MIGRATION_DATA_CONFIG } from '../constants.js'; +import { parseJsonLoose } from '../../../lib/parse-json-loose.js'; + +const { TAXONOMIES_DIR_NAME, TAXONOMIES_FILE_NAME } = MIGRATION_DATA_CONFIG; + +/** + * Contentful export uses scheme ids like `productCategory`. Contentstack taxonomy UIDs must be + * lowercase alphanumeric + underscores only (no camelCase). + */ +export function contentfulSchemeIdToStackTaxonomyUid(contentfulSchemeId: string): string { + if (!contentfulSchemeId || typeof contentfulSchemeId !== 'string') return ''; + return contentfulSchemeId + .replace(/([A-Z])/g, '_$1') + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); +} + +/** Maps Contentful concept id prefix (before first "-") to Contentstack taxonomy uid (sanitized). */ +export const CONCEPT_PREFIX_TO_SCHEME: Record = { + brd: 'brand', + cat: 'product_category', + branch: 'branch', + dis: 'discipline', +}; + +export function inferSchemeFromConceptId(conceptId: string): string | null { + if (!conceptId || typeof conceptId !== 'string') return null; + const prefix = conceptId.split('-')[0]; + return CONCEPT_PREFIX_TO_SCHEME[prefix] ?? null; +} + +export function sanitizeTermUid(conceptId: string): string { + return conceptId + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); +} + +function humanizeSchemeId(id: string): string { + if (!id) return ''; + const words = id.split('_').filter(Boolean); + return words + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(' '); +} + +export function buildContentfulTaxonomyAssignments( + concepts: Array<{ sys?: { id?: string } }> | undefined, + allowedSchemeIds: string[], +): Array<{ taxonomy_uid: string; term_uid: string }> { + const allow = (allowedSchemeIds || []).filter(Boolean); + const allowSet = new Set( + allow.map((id) => contentfulSchemeIdToStackTaxonomyUid(id)).filter(Boolean), + ); + const useAllow = allowSet.size > 0; + const out: Array<{ taxonomy_uid: string; term_uid: string }> = []; + const seen = new Set(); + + for (const c of concepts || []) { + const id = c?.sys?.id; + if (!id) continue; + const scheme = inferSchemeFromConceptId(id); + if (!scheme) continue; + if (useAllow && !allowSet.has(scheme)) continue; + const termUid = sanitizeTermUid(id); + const key = `${scheme}::${termUid}`; + if (seen.has(key)) continue; + seen.add(key); + out.push({ taxonomy_uid: scheme, term_uid: termUid }); + } + return out; +} + +interface TaxonomyTerm { + uid: string; + name: string; + parent_uid: string | null; + description?: string; + contentful_concept_id: string; +} + +interface TaxonomyStructure { + taxonomy: { + uid: string; + name: string; + description: string; + }; + terms: TaxonomyTerm[]; +} + +const saveTaxonomyFiles = async ( + taxonomies: Record, + taxonomiesPath: string, + projectId: string, + destination_stack_id: string, +): Promise => { + for (const [schemeUid, taxonomy] of Object.entries(taxonomies)) { + const filePath = path.join(taxonomiesPath, `${schemeUid}.json`); + await fs.promises.writeFile(filePath, JSON.stringify(taxonomy, null, 2), 'utf8'); + const message = getLogMessage( + 'saveTaxonomyFiles', + `Saved taxonomy file: ${schemeUid}.json with ${taxonomy?.terms?.length} terms.`, + {}, + ); + await customLogger(projectId, destination_stack_id, 'info', message); + } + + const taxonomiesDataObject: Record = {}; + for (const [schemeUid, taxonomy] of Object.entries(taxonomies)) { + taxonomiesDataObject[schemeUid] = { + uid: taxonomy?.taxonomy?.uid, + name: taxonomy?.taxonomy?.name, + description: taxonomy?.taxonomy?.description, + }; + } + + const taxonomiesFilePath = path.join(taxonomiesPath, TAXONOMIES_FILE_NAME); + await fs.promises.writeFile( + taxonomiesFilePath, + JSON.stringify(taxonomiesDataObject, null, 2), + 'utf8', + ); + await customLogger( + projectId, + destination_stack_id, + 'info', + getLogMessage( + 'saveTaxonomyFiles', + `Saved consolidated ${TAXONOMIES_FILE_NAME} with ${Object.keys(taxonomiesDataObject)?.length} taxonomies.`, + {}, + ), + ); +}; + +/** + * Builds taxonomy vocabularies and terms from a Contentful export JSON (metadata.taxonomy on content types, + * metadata.concepts on entries) and writes the same layout as Drupal: per-scheme JSON + taxonomies.json. + */ +export const createTaxonomy = async ( + packagePath: string, + destination_stack_id: string, + projectId: string, +): Promise => { + const taxonomiesPath = path.join(MIGRATION_DATA_CONFIG.DATA, destination_stack_id, TAXONOMIES_DIR_NAME); + + try { + await fs.promises.mkdir(taxonomiesPath, { recursive: true }); + const raw = await fs.promises.readFile(packagePath, 'utf8'); + const data = parseJsonLoose(raw); + const contentTypes = data?.contentTypes || []; + const entries = data?.entries || []; + + const schemeIds = new Set(); + for (const ct of contentTypes) { + for (const link of ct?.metadata?.taxonomy || []) { + const sid = link?.sys?.id; + if (!sid) continue; + const schemeUid = contentfulSchemeIdToStackTaxonomyUid(sid); + if (schemeUid) schemeIds.add(schemeUid); + } + } + + const termsByScheme: Record> = {}; + for (const sid of schemeIds) { + termsByScheme[sid] = new Map(); + } + + for (const entry of entries) { + for (const c of entry?.metadata?.concepts || []) { + const conceptId = c?.sys?.id; + if (!conceptId) continue; + const scheme = inferSchemeFromConceptId(conceptId); + if (!scheme || !termsByScheme[scheme]) continue; + const termUid = sanitizeTermUid(conceptId); + if (!termsByScheme[scheme].has(termUid)) { + termsByScheme[scheme].set(termUid, conceptId); + } + } + } + + const taxonomies: Record = {}; + + for (const schemeUid of schemeIds) { + const termMap = termsByScheme[schemeUid]; + const terms: TaxonomyTerm[] = []; + for (const [termUid, conceptId] of termMap) { + terms.push({ + uid: termUid, + name: conceptId, + parent_uid: null, + description: '', + contentful_concept_id: conceptId, + }); + } + taxonomies[schemeUid] = { + taxonomy: { + uid: schemeUid, + name: humanizeSchemeId(schemeUid) || schemeUid, + description: 'Imported from Contentful taxonomy', + }, + terms, + }; + } + + if (Object.keys(taxonomies)?.length === 0) { + const message = getLogMessage( + 'createTaxonomy', + 'No Contentful taxonomy schemes found on content types (metadata.taxonomy). Skipping taxonomy files.', + {}, + ); + await customLogger(projectId, destination_stack_id, 'info', message); + return; + } + + await saveTaxonomyFiles(taxonomies, taxonomiesPath, projectId, destination_stack_id); + + const successMessage = getLogMessage( + 'createTaxonomy', + `Exported ${Object.keys(taxonomies)?.length} Contentful taxonomies.`, + {}, + ); + await customLogger(projectId, destination_stack_id, 'info', successMessage); + } catch (err) { + // Best-effort: taxonomy is optional, so a failure here must NOT abort the + // migration. Log and continue — convert/import proceed without taxonomy. + const message = getLogMessage( + 'createTaxonomy', + 'Error encountered while creating taxonomies from Contentful export. Skipping taxonomy (migration continues).', + {}, + err, + ); + await customLogger(projectId, destination_stack_id, 'error', message); + } +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/extension.service.ts b/packages/contentstack-external-migrate/src/services/contentful/extension.service.ts new file mode 100644 index 000000000..9f6758939 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/extension.service.ts @@ -0,0 +1,210 @@ +import path from 'path'; +import fs from 'fs'; +import { v4 as uuidv4 } from 'uuid'; +import { MIGRATION_DATA_CONFIG, LIST_EXTENSION_UID, JSON_EDITOR_EXTENSION_UID } from './constants'; +import appMeta from './app/index.json'; + +const { + CUSTOM_MAPPER_FILE_NAME, + EXTENSION_APPS_DIR_NAME, + EXTENSION_APPS_FILE_NAME, + EXTENSIONS_MAPPER_DIR_NAME, + MARKETPLACE_APPS_DIR_NAME, + MARKETPLACE_APPS_FILE_NAME, +} = MIGRATION_DATA_CONFIG; + +const writeExtFile = async ({ destinationStackId, extensionData }: any) => { + const dirPath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, EXTENSION_APPS_DIR_NAME); + try { + await fs.promises.access(dirPath); + } catch (err) { + try { + await fs.promises.mkdir(dirPath, { recursive: true }); + } catch (mkdirErr) { + console.error('fs.mkdir failed:', mkdirErr); + return; + } + } + try { + const filePath = path.join(dirPath, EXTENSION_APPS_FILE_NAME); + await fs.promises.writeFile(filePath, JSON.stringify(extensionData, null, 2)); + } catch (writeErr) { + console.error('fs.writeFile failed:', writeErr); + } +}; + +const getExtension = ({ uid, destinationStackId }: any) => { + if (uid === LIST_EXTENSION_UID) { + return { + stackHeaders: { api_key: destinationStackId }, + urlPath: `/extensions/${destinationStackId}`, + uid: LIST_EXTENSION_UID, + created_at: '2025-02-18T14:45:22.630Z', + updated_at: '2025-02-18T14:45:22.630Z', + created_by: 'bltba052dc70a273dd2', + updated_by: 'bltba052dc70a273dd2', + tags: [], + _version: 1, + title: 'Key-value Field', + config: {}, + type: 'field', + data_type: 'json', + multiple: false, + srcdoc: + '\n\n\n\n \n \n \n \n \n \n \n\n\n\n

\n
\n
\n
\n :\n \n \n \n
\n
\n
\n
\n\n
\n \n\n\n', + }; + } + if (uid === JSON_EDITOR_EXTENSION_UID) { + return { + stackHeaders: { api_key: destinationStackId }, + urlPath: `/extensions/${destinationStackId}`, + uid: JSON_EDITOR_EXTENSION_UID, + created_at: '2026-06-04T12:19:05.651Z', + updated_at: '2026-06-04T12:19:05.651Z', + created_by: 'bltba052dc70a273dd2', + updated_by: 'bltba052dc70a273dd2', + tags: [], + _version: 1, + title: 'JSON Editor', + config: {}, + type: 'field', + data_type: 'json', + multiple: false, + srcdoc: + '\n\n \n \n Ace Editor Extension\n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
\n \n \n \n', + }; + } + return null; +}; + +// Walk a schema array and collect any `extension_uid` values from any depth +// (groups, modular blocks, and global fields all nest a `schema` array). +const collectExtensionUidsFromSchema = (schema: any[], out: Set) => { + if (!Array.isArray(schema)) return; + for (const f of schema) { + if (f?.extension_uid && typeof f.extension_uid === 'string') out.add(f.extension_uid); + if (Array.isArray(f?.schema)) collectExtensionUidsFromSchema(f.schema, out); + if (Array.isArray(f?.blocks)) { + for (const b of f.blocks) collectExtensionUidsFromSchema(b?.schema ?? [], out); + } + } +}; + +const createExtension = async ({ destinationStackId }: any) => { + const stackRoot = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId); + const uniqueExtUids = new Set(); + + // 1) custmon-mapper.json entries written by content-type-creator (existing path). + // These appends race, so this file may be incomplete — content-type scan + // below covers what's missing. + const extMapper: any = await fs.promises + .readFile(path.join(stackRoot, CUSTOM_MAPPER_FILE_NAME), 'utf-8') + .catch(() => undefined); + if (extMapper !== undefined) { + try { + const extJson = JSON.parse(extMapper); + for (const item of extJson ?? []) { + if (item?.extensionUid) uniqueExtUids.add(item.extensionUid); + } + } catch { + // ignore malformed file; fall through to content-type scan + } + } + + // 2) Scan the just-written content_types/*.json for every `extension_uid` + // actually referenced. Robust to the saveAppMapper race in step 1. + const ctDir = path.join(stackRoot, 'content_types'); + try { + const files = await fs.promises.readdir(ctDir); + for (const f of files) { + if (!f.endsWith('.json') || f === 'schema.json') continue; + try { + const ct = JSON.parse(await fs.promises.readFile(path.join(ctDir, f), 'utf8')); + collectExtensionUidsFromSchema(ct?.schema ?? [], uniqueExtUids); + } catch { + // skip unreadable file + } + } + } catch { + // no content_types dir → nothing to scan + } + + if (uniqueExtUids.size === 0) return; + + const extensionData: any = {}; + for (const extUid of uniqueExtUids) { + const extData = getExtension({ uid: extUid, destinationStackId }); + if (extData) { + extensionData[extUid] = extData; + } + } + if (Object.keys(extensionData).length > 0) { + await writeExtFile({ destinationStackId, extensionData }); + } +}; + +/** + * Write marketplace_apps.json so `app`-type fields work on a fresh stack. + * + * `app` fields reference a marketplace app's custom-field extension_uid + * (`-cs.cm.stack.custom_field`), which only exists once the app + * is installed. The `app` case in content-type-creator records each app's + * (appUid, extensionUid) in extension-mapper.json; this turns those into an + * install manifest the native csdx import can act on. + * + * NOTE: the exact marketplace_apps shape csdx import accepts should be validated + * against a real `csdx cm:stacks:import` run; installation also requires an org + * with the app available. Without this file, app fields break silently. + */ +const createMarketplaceApps = async ({ destinationStackId }: any) => { + const stackRoot = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId); + + const raw = await fs.promises + .readFile(path.join(stackRoot, EXTENSIONS_MAPPER_DIR_NAME), 'utf-8') + .catch(() => undefined); + if (raw === undefined) return; + + let appEntries: any[] = []; + try { + appEntries = JSON.parse(raw) ?? []; + } catch { + return; // malformed mapper → nothing to install + } + + const appUids = new Set(); + for (const item of appEntries) { + if (item?.appUid) appUids.add(item.appUid); + } + if (appUids.size === 0) return; + + const marketplaceApps: any[] = []; + for (const appUid of appUids) { + const meta = (appMeta as any)?.entries?.find((e: any) => e?.app_uid === appUid); + const name = meta?.title ?? 'Custom App'; + marketplaceApps.push({ + uid: uuidv4(), + manifest: { uid: appUid, name }, + title: name, + configuration: {}, + server_configuration: {}, + ui_location: { locations: [] }, + target: { type: 'stack' }, + }); + } + + const dirPath = path.join(stackRoot, MARKETPLACE_APPS_DIR_NAME); + try { + await fs.promises.mkdir(dirPath, { recursive: true }); + await fs.promises.writeFile( + path.join(dirPath, MARKETPLACE_APPS_FILE_NAME), + JSON.stringify(marketplaceApps, null, 2), + ); + } catch (writeErr) { + console.error('fs.writeFile marketplace_apps failed:', writeErr); + } +}; + +export const extensionService = { + createExtension, + createMarketplaceApps, +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/locale-names.json b/packages/contentstack-external-migrate/src/services/contentful/locale-names.json new file mode 100644 index 000000000..5beaa0b08 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/locale-names.json @@ -0,0 +1,272 @@ +{ + "af-za": "Afrikaans - South Africa", + "ar": "Arabic", + "ar-ae": "Arabic - United Arab Emirates", + "ar-bh": "Arabic - Bahrain", + "ar-dz": "Arabic - Algeria", + "ar-eg": "Arabic - Egypt", + "ar-iq": "Arabic - Iraq", + "ar-jo": "Arabic - Jordan", + "ar-kw": "Arabic - Kuwait", + "ar-lb": "Arabic - Lebanon", + "ar-ly": "Arabic - Libya", + "ar-ma": "Arabic - Morocco", + "ar-om": "Arabic - Oman", + "ar-qa": "Arabic - Qatar", + "ar-sa": "Arabic - Saudi Arabia", + "ar-sy": "Arabic - Syria", + "ar-tn": "Arabic - Tunisia", + "ar-ye": "Arabic - Yemen", + "az": "Azeri", + "be-by": "Belarusian - Belarus", + "bg-bg": "Bulgarian - Bulgaria", + "bs": "Bosnian (Latin script)", + "ca-es": "Catalan - Catalan", + "cs": "Czech", + "cs-cz": "Czech - Czech Republic", + "cy-az-az": "Azeri (Cyrillic) - Azerbaijan", + "cy-sr-sp": "Serbian (Cyrillic) - Serbia", + "cy-uz-uz": "Uzbek (Cyrillic) - Uzbekistan", + "da-dk": "Danish - Denmark", + "de": "German", + "de-at": "German - Austria", + "de-ch": "German - Switzerland", + "de-de": "German - Germany", + "de-it": "German - Italy", + "de-li": "German - Liechtenstein", + "de-lu": "German - Luxembourg", + "div-mv": "Dhivehi - Maldives", + "el-gr": "Greek - Greece", + "en": "English", + "en-ae": "English - United Arab Emirates", + "en-at": "English - Austria", + "en-au": "English - Australia", + "en-be": "English - Belgium", + "en-bg": "English - Bulgaria", + "en-bh": "English – Bahrain", + "en-bn": "English - Brunei", + "en-br": "English - Brazil", + "en-bz": "English - Belize", + "en-ca": "English - Canada", + "en-cb": "English - Caribbean", + "en-ch": "English - Switzerland", + "en-cl": "English - Chile", + "en-cn": "English - China", + "en-co": "English - Columbia", + "en-cz": "English - Czech Republic", + "en-de": "English - Germany", + "en-dk": "English - Denmark", + "en-do": "English - Dominican Republic", + "en-ee": "English - Estonia", + "en-eg": "English – Egypt", + "en-es": "English - Spain", + "en-fi": "English - Finland", + "en-fr": "English - France", + "en-gb": "English - United Kingdom", + "en-gh": "English - Ghana", + "en-gr": "English - Greece", + "en-hk": "English - Hong Kong", + "en-hu": "English - Hungary", + "en-id": "English - Indonesia", + "en-ie": "English - Ireland", + "en-in": "English - India", + "en-iq": "English – Iraq", + "en-it": "English - Italy", + "en-jm": "English - Jamaica", + "en-jo": "English – Jordan", + "en-jp": "English - Japan", + "en-ke": "English – Kenya", + "en-kr": "English - Korea", + "en-kw": "English – Kuwait", + "en-lb": "English – Lebanon", + "en-lt": "English - Lithuania", + "en-lu": "English - Luxembourg", + "en-lv": "English - Latvia", + "en-ly": "English – Libya", + "en-mx": "English - Mexico", + "en-my": "English - Malaysia", + "en-ng": "English – Nigeria", + "en-nl": "English - Netherlands", + "en-no": "English - Norway", + "en-nz": "English - New Zealand", + "en-om": "English – Oman", + "en-pa": "English - Panama", + "en-pe": "English - Peru", + "en-ph": "English - Philippines", + "en-pl": "English - Poland", + "en-pr": "English - Puerto Rico", + "en-pt": "English - Portugal", + "en-qa": "English – Qatar", + "en-ro": "English - Romania", + "en-ru": "English - Russia", + "en-sa": "English – Saudi Arabia", + "en-se": "English - Sweden", + "en-sg": "English - Singapore", + "en-si": "English - Slovenia", + "en-sk": "English - Slovakia", + "en-th": "English - Thailand", + "en-tn": "English - Tunisia", + "en-tr": "English - Turkey", + "en-tt": "English - Trinidad and Tobago", + "en-us": "English - United States", + "en-uy": "English - Uruguay", + "en-uz": "English - Uzbekistan", + "en-ve": "English - Venezuela", + "en-vn": "English - Vietnam", + "en-za": "English - South Africa", + "en-zw": "English - Zimbabwe", + "es": "Spanish", + "es-419": "Spanish - Latin America", + "es-ar": "Spanish - Argentina", + "es-bo": "Spanish - Bolivia", + "es-cl": "Spanish - Chile", + "es-co": "Spanish - Colombia", + "es-cr": "Spanish - Costa Rica", + "es-do": "Spanish - Dominican Republic", + "es-ec": "Spanish - Ecuador", + "es-es": "Spanish - Spain", + "es-gt": "Spanish - Guatemala", + "es-hn": "Spanish - Honduras", + "es-mx": "Spanish - Mexico", + "es-ni": "Spanish - Nicaragua", + "es-pa": "Spanish - Panama", + "es-pe": "Spanish - Peru", + "es-pr": "Spanish - Puerto Rico", + "es-py": "Spanish - Paraguay", + "es-sv": "Spanish - El Salvador", + "es-us": "Spanish - United States", + "es-uy": "Spanish - Uruguay", + "es-ve": "Spanish - Venezuela", + "et-ee": "Estonian - Estonia", + "eu-es": "Basque - Basque", + "fa-ir": "Farsi - Iran", + "fi": "Finnish", + "fi-fi": "Finnish - Finland", + "fil-ph": "Filipino - Philippines", + "fo-fo": "Faroese - Faroe Islands", + "fr": "French", + "fr-be": "French - Belgium", + "fr-ca": "French - Canada", + "fr-ch": "French - Switzerland", + "fr-dz": "French – Algeria", + "fr-fr": "French - France", + "fr-lu": "French - Luxembourg", + "fr-ma": "French – Morocco", + "fr-mc": "French - Monaco", + "fr-tn": "French - Tunisia", + "fr-us": "French - United States", + "gd": "Gaelic", + "gl-es": "Galician - Galician", + "gu-in": "Gujarati - India", + "he-il": "Hebrew - Israel", + "hi-in": "Hindi - India", + "hr-hr": "Croatian - Croatia", + "hu-hu": "Hungarian - Hungary", + "hy-am": "Armenian - Armenia", + "id-id": "Indonesian - Indonesia", + "is-is": "Icelandic - Iceland", + "it": "Italian", + "it-ch": "Italian - Switzerland", + "it-it": "Italian - Italy", + "ja": "Japanese", + "ja-jp": "Japanese - Japan", + "ka-ge": "Georgian - Georgia", + "kk-kz": "Kazakh - Kazakhstan", + "km-kh": "Khmer - Cambodia", + "kn-in": "Kannada - India", + "ko": "Korean", + "ko-kr": "Korean - Korea", + "kok-in": "Konkani - India", + "ky-kz": "Kyrgyz - Kazakhstan", + "lb-lu": "Luxembourgish - Luxembourg", + "lt-az-az": "Azeri (Latin) - Azerbaijan", + "lt-lt": "Lithuanian - Lithuania", + "lt-sr-sp": "Serbian (Latin) - Serbia", + "lt-uz-uz": "Uzbek (Latin) - Uzbekistan", + "lv-lv": "Latvian - Latvia", + "mk-mk": "Macedonian (FYROM)", + "mn-mn": "Mongolian - Mongolia", + "mr-in": "Marathi - India", + "ms": "Malay", + "ms-bn": "Malay - Brunei", + "ms-my": "Malay - Malaysia", + "ms-sg": "Malay - Singapore", + "mt": "Maltese", + "my-mm": "Bahasa - Myanmar", + "nb-no": "Norwegian (Bokmal) - Norway", + "nl": "Dutch", + "nl-be": "Dutch - Belgium", + "nl-nl": "Dutch - The Netherlands", + "nn-no": "Norwegian (Nynorsk) - Norway", + "no": "Norwegian", + "no-no": "Norwegian - Norway", + "pa-in": "Punjabi - India", + "pl-pl": "Polish - Poland", + "pt": "Portuguese", + "pt-br": "Portuguese - Brazil", + "pt-pt": "Portuguese - Portugal", + "ro-ro": "Romanian - Romania", + "ru": "Russian", + "ru-am": "Russian – Armenia", + "ru-az": "Russian - Azerbaijan", + "ru-by": "Russian – Belarus ", + "ru-ee": "Russian – Estonia", + "ru-ge": "Russian – Georgia ", + "ru-kg": "Russian – Kyrgyzstan", + "ru-kz": "Russian - Kazakhstan", + "ru-lt": "Russian – Lithuania", + "ru-lv": "Russian – Latvia", + "ru-mn": "Russian – Mongolia", + "ru-ru": "Russian - Russia", + "ru-ua": "Russian-Ukraine", + "ru-uz": "Russian – Uzbekistan", + "sa-in": "Sanskrit - India", + "sk-sk": "Slovak - Slovakia", + "sl-si": "Slovenian - Slovenia", + "sq-al": "Albanian - Albania", + "sr-me": "Serbian-Montenegro", + "sv": "Swedish", + "sv-fi": "Swedish - Finland", + "sv-se": "Swedish - Sweden", + "sw-ke": "Swahili - Kenya", + "syr-sy": "Syriac - Syria", + "ta-in": "Tamil - India", + "te-in": "Telugu - India", + "th-no": "Thai - Norway", + "th-se": "Thai - Sweden", + "th-th": "Thai - Thailand", + "tl": "Tagalog (Philippines)", + "tr-tr": "Turkish - Turkey", + "tt-ru": "Tatar - Russia", + "uk-ua": "Ukrainian - Ukraine", + "ur-pk": "Urdu - Pakistan", + "uz": "Uzbek", + "vi-us": "Vietnamese - United States", + "vi-vn": "Vietnamese - Vietnam", + "xh": "Xhosa", + "zh": "Chinese", + "zh-au": "Chinese - Australia", + "zh-bn": "Chinese - Brunei", + "zh-ca": "Chinese - Canada", + "zh-chs": "Chinese (Simplified)", + "zh-cht": "Chinese (Traditional)", + "zh-cn": "Chinese - China", + "zh-fr": "Chinese - France", + "zh-hk": "Chinese - Hong Kong SAR", + "zh-it": "Chinese - Italy", + "zh-mm": "Chinese - Myanmar", + "zh-mo": "Chinese - Macau SAR", + "zh-my": "Chinese - Malaysia", + "zh-sg": "Chinese - Singapore", + "zh-tw": "Chinese - Taiwan", + "zh-us": "Chinese - United States", + "zh-za": "Chinese - South Africa", + "zu": "Zulu", + "zu-ca": "Zulu - Canada", + "zu-cn": "Zulu - China", + "zu-tw": "Zulu - Taiwan", + "zu-hk": "Zulu - Hong Kong", + "zu-us": "Zulu - United States", + "zu-my": "Zulu - Malaysia", + "zu-sg": "Zulu - Singapore" +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/mapper/write.ts b/packages/contentstack-external-migrate/src/services/contentful/mapper/write.ts new file mode 100644 index 000000000..4361e1a5e --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/mapper/write.ts @@ -0,0 +1,22 @@ +import fs from 'fs'; +import path from 'path'; +import mkdirp from 'mkdirp'; + +export interface MapperBundle { + contentTypes: any[]; + taxonomies: any[]; + locales: string[]; +} + +/** + * Serialize the in-memory mapper (the same shape the UI POSTs to + * /v2/mapper/createDummyData today) into the output bundle. Users can audit + * mapper.json after a run, and it travels with the bundle if/when the user + * later runs `csdx cm:stacks:import`. + */ +export async function writeMapper(outputDir: string, mapper: MapperBundle): Promise { + await mkdirp(outputDir); + const target = path.join(outputDir, 'mapper.json'); + await fs.promises.writeFile(target, JSON.stringify(mapper, null, 2), 'utf8'); + return target; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/market-app.utils.ts b/packages/contentstack-external-migrate/src/services/contentful/market-app.utils.ts new file mode 100644 index 000000000..26cbf97da --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/market-app.utils.ts @@ -0,0 +1,100 @@ +// Marketplace SDK helpers — ported from migration-v2/api/src/utils/market-app.utils.ts. +// Adapted for the csdx plugin: pure functions that take an explicit authtoken/region/org; +// the caller (marketplace.service.ts) resolves those from cli-utilities' configHandler. + +/* eslint-disable @typescript-eslint/no-explicit-any */ +import { client } from '@contentstack/marketplace-sdk'; +import { DEVURLS } from './constants'; + +const buildMarketplaceClient = ({ + authtoken, + region, +}: { + authtoken?: string; + region?: string; +}) => { + const host = (DEVURLS as any)?.[region as string] ?? (DEVURLS as any)?.NA; + if (typeof authtoken === 'string' && authtoken.startsWith('Bearer ')) { + return client({ authorization: authtoken, host } as any); + } + return client({ authtoken, host } as any); +}; + +export const getAllApps = async ({ organizationUid, authtoken, region }: any) => { + try { + const c = buildMarketplaceClient({ authtoken, region }); + const data: any = await c.marketplace(organizationUid).findAllApps(); + return data?.items; + } catch (err) { + console.info('getAllApps error:', err); + } +}; + +export const getAppManifestAndAppConfig = async ({ + organizationUid, + authtoken, + region, + manifestUid, +}: any) => { + try { + const c = buildMarketplaceClient({ authtoken, region }); + return await c.marketplace(organizationUid).app(manifestUid).fetch(); + } catch (err) { + console.info('getAppManifestAndAppConfig error:', err); + } +}; + +type InstallationTarget = { uid?: string; type?: string }; + +function installationTargetsStack( + inst: { target?: InstallationTarget }, + stackUid: string, +): boolean { + const t = inst?.target; + const uidOk = + typeof t?.uid === 'string' && t.uid.toLowerCase() === stackUid.trim().toLowerCase(); + const typeOk = String(t?.type ?? '').toLowerCase() === 'stack'; + return Boolean(uidOk && typeOk); +} + +export const fetchMarketplaceInstallationsForStack = async ({ + organizationUid, + stackUid, + authtoken, + region, +}: { + organizationUid: string; + stackUid: string; + authtoken: string; + region: string; +}) => { + try { + const c = buildMarketplaceClient({ authtoken, region }); + const instApi = c.marketplace(organizationUid).installation(); + + let all: Record[] = []; + try { + const limit = 100; + let skip = 0; + while (skip < 10_000) { + const raw: any = await instApi.fetchAll({ skip, limit } as any); + const items: Record[] = raw?.items ?? []; + all.push(...items); + if (items.length < limit) break; + skip += limit; + } + } catch { + const raw: any = await instApi.fetchAll(); + all = raw?.items ?? []; + } + + const normalizedUid = stackUid.trim(); + return all.filter((inst) => + installationTargetsStack(inst as { target?: InstallationTarget }, normalizedUid), + ); + } catch (err) { + const msg = err instanceof Error ? err.message : String(err); + console.info('fetchMarketplaceInstallationsForStack error:', msg); + return []; + } +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts b/packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts new file mode 100644 index 000000000..3ff082ed0 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts @@ -0,0 +1,210 @@ +// Marketplace app manifest builder — ported from migration-v2/api/src/services/marketplace.service.ts. +// Plugin adaptations: +// - auth comes from cli-utilities' configHandler (csdx session) instead of lowdb +// - SINGLE writer of marketplace_apps.json. Two modes: +// * online (csdx session + org available): fetch each app's full manifest from +// Developer Hub and build rich ui_location.locations. +// * offline (no auth/org, or fetch failed): synthesize a minimal-but-valid manifest +// from the static app catalog + extension-mapper.json. Crucially this still +// populates ui_location.locations with the custom_field extension_uid, so csdx +// import can remap the content-type's extension_uid reference and the extension +// actually gets created. (An empty locations array installs the app but never +// creates the extension → content-type import fails with "extension does not exist".) +// - early-returns when bundle has no extension-mapper.json (no `app` widget fields). + +/* eslint-disable @typescript-eslint/no-explicit-any */ +import fs from 'fs'; +import path from 'path'; +import { v4 as uuidv4 } from 'uuid'; +import { configHandler } from '@contentstack/cli-utilities'; +import { MIGRATION_DATA_CONFIG, KEYTOREMOVE } from './constants'; +import { getAppManifestAndAppConfig } from './market-app.utils'; +import appMeta from './app/index.json'; + +const { EXTENSIONS_MAPPER_DIR_NAME, MARKETPLACE_APPS_DIR_NAME, MARKETPLACE_APPS_FILE_NAME } = + MIGRATION_DATA_CONFIG; + +const groupByAppUid = (data: any[]): Record => + data?.reduce?.((acc: any, item: any) => { + if (!item?.appUid) return acc; + if (!acc[item.appUid]) acc[item.appUid] = []; + acc[item.appUid].push(item.extensionUid); + return acc; + }, {} as Record); + +const removeKeys = (obj: any, keysToRemove: string[]) => + Object.fromEntries(Object.entries(obj).filter(([key]) => !keysToRemove.includes(key))); + +// extension-mapper stores "-", e.g. +// "blt5307633e8c63d59d-cs.cm.stack.custom_field". Split on the FIRST hyphen only — +// the uid never contains one, and the type may (defensive). +const parseExt = (ext: string): { extUid: string; type: string } => { + const i = ext?.indexOf?.('-') ?? -1; + if (i === -1) return { extUid: ext, type: '' }; + return { extUid: ext.slice(0, i), type: ext.slice(i + 1) }; +}; + +/** + * Build the ui_location.locations array binding each extension_uid to its location type. + * When a fetched manifest is supplied (online), its matching location supplies the rich + * meta template; offline we emit a minimal meta carrying just the extension_uid. + */ +const buildLocations = (extUids: string[], fetchedLocations: any[] | null): any[] => { + const locations: any[] = []; + for (const ext of new Set(extUids)) { + const { extUid, type } = parseExt(ext); + if (!type) continue; + if (locations.some((l) => l.type === type && l.meta?.[0]?.extension_uid === extUid)) continue; + const tpl = (fetchedLocations ?? []).find((l: any) => l?.type === type); + locations.push({ type, meta: [{ ...(tpl?.meta?.[0] || {}), extension_uid: extUid }] }); + } + const cfgTpl = (fetchedLocations ?? []).find((l: any) => l?.type === 'cs.cm.stack.config'); + if (cfgTpl) { + locations.push({ + type: cfgTpl.type, + meta: [{ ...(cfgTpl?.meta?.[0] || {}), name: 'Config', extension_uid: uuidv4() }], + }); + } + return locations; +}; + +const writeManifestFile = async ({ destinationStackId, appManifest }: any) => { + const dirPath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, MARKETPLACE_APPS_DIR_NAME); + try { + await fs.promises.mkdir(dirPath, { recursive: true }); + await fs.promises.writeFile( + path.join(dirPath, MARKETPLACE_APPS_FILE_NAME), + JSON.stringify(appManifest, null, 2), + ); + } catch (writeErr) { + console.error('marketplace fs.writeFile failed:', writeErr); + } +}; + +// Resolve auth + org + region from csdx's active session (set by `csdx auth:login`). +// A raw `authtoken` (basic auth) works with the marketplace SDK just as well as a +// Bearer OAuth token; the org is an explicit input (the `--org` flag), falling back +// to the active OAuth org when present. Returns null when auth or org can't be found. +const resolveSession = ( + orgUid?: string, +): { authtoken: string; region: string; orgId: string } | null => { + const oauth = configHandler.get('oauthAccessToken'); + const basic = configHandler.get('authtoken'); + const authtoken = oauth ? `Bearer ${oauth}` : basic; + const orgId = orgUid ?? configHandler.get('oauthOrgUid'); + if (!authtoken) { + console.info('marketplace: no csdx auth token found (run `csdx auth:login`); skipping app manifest build'); + return null; + } + if (!orgId) { + console.info( + 'marketplace: no organization uid (pass `--org ` or log in with OAuth); skipping app manifest build', + ); + return null; + } + const regionObj: any = configHandler.get('region'); + const region = regionObj?.name ?? 'NA'; + return { authtoken, region, orgId }; +}; + +// Online: full manifest from Developer Hub with rich locations. +const buildOnlineManifest = async ( + appUid: string, + extUids: string[], + session: { authtoken: string; region: string; orgId: string }, + destinationStackId: string, +): Promise => { + const data: any = await getAppManifestAndAppConfig({ + organizationUid: session.orgId, + authtoken: session.authtoken, + region: session.region, + manifestUid: appUid, + }); + if (!data) return null; + data.manifest = removeKeys(data, KEYTOREMOVE); + data.ui_location = data.ui_location ?? {}; + data.ui_location.locations = buildLocations(extUids, data.ui_location.locations ?? []); + data.status = 'installed'; + data.target = { type: 'stack', uid: destinationStackId }; + data.installation_uid = data?.uid; + data.configuration = ''; + data.server_configuration = ''; + return removeKeys(data, KEYTOREMOVE); +}; + +// Offline: minimal manifest from the static catalog + extension-mapper, still binding the +// extension_uid so the custom-field extension is created on import. +const buildOfflineManifest = ( + appUid: string, + extUids: string[], + destinationStackId: string, +): any => { + const meta = (appMeta as any)?.entries?.find((e: any) => e?.app_uid === appUid); + const name = meta?.title ?? 'Custom App'; + const uid = uuidv4(); + return { + uid, + manifest: { uid: appUid, name }, + title: name, + configuration: {}, + server_configuration: {}, + ui_location: { locations: buildLocations(extUids, null) }, + status: 'installed', + installation_uid: uid, + target: { type: 'stack', uid: destinationStackId }, + }; +}; + +const createAppManifest = async ({ + destinationStackId, + orgUid, +}: { + destinationStackId: string; + orgUid?: string; +}) => { + // Trigger gate: only run when content-type-creator wrote {appUid, extensionUid} pairs + // (i.e. the export referenced Contentful `app` widget fields). No mapper → no work. + const mapperPath = path.join(MIGRATION_DATA_CONFIG.DATA, destinationStackId, EXTENSIONS_MAPPER_DIR_NAME); + const mapperRaw: string | undefined = await fs.promises + .readFile(mapperPath, 'utf-8') + .catch(() => undefined); + if (mapperRaw === undefined) return; + + let mapperRows: any[]; + try { + mapperRows = JSON.parse(mapperRaw); + } catch (err) { + console.error('marketplace: extension-mapper.json is not valid JSON, skipping:', err); + return; + } + if (!Array.isArray(mapperRows) || mapperRows.length === 0) return; + + const groups = groupByAppUid(mapperRows); + const session = resolveSession(orgUid); + if (!session) { + console.info( + 'marketplace: building OFFLINE app manifest — app/extension binding will NOT resolve at import. ' + + 'Re-run with `--org ` (and `csdx auth:login`) so the real app manifest can be fetched.', + ); + } + + const appManifest: any[] = []; + for (const [appUid, extUids] of Object.entries(groups)) { + let manifest: any | null = null; + if (session) { + manifest = await buildOnlineManifest(appUid, extUids, session, destinationStackId).catch(() => null); + } + if (!manifest) { + manifest = buildOfflineManifest(appUid, extUids, destinationStackId); + } + appManifest.push(manifest); + } + + if (appManifest.length > 0) { + await writeManifestFile({ destinationStackId, appManifest }); + } +}; + +export const marketPlaceAppService = { + createAppManifest, +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/config/index.json b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/config/index.json new file mode 100644 index 000000000..81b16389e --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/config/index.json @@ -0,0 +1,7 @@ +{ + "data": "./contentfulMigrationData", + "contentful": { + "contentful": "contentfulSchema" + }, + "fileName": "en-us.json" +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/index.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/index.js new file mode 100644 index 000000000..d38b50625 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/index.js @@ -0,0 +1,13 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const extractContentTypes = require('./libs/extractContentTypes'); +const createInitialMapper = require('./libs/createInitialMapper'); +const extractLocale = require('./libs/extractLocale'); +const extractTaxonomy = require('./libs/extractTaxonomy'); + +module.exports = { + extractContentTypes, + createInitialMapper, + extractLocale, + extractTaxonomy +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js new file mode 100644 index 000000000..510398414 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js @@ -0,0 +1,523 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ + +const restrictedKeyWords = require('../utils/restrictedKeyWords'); +const appDetails = require('../utils/apps/appDetails.json') + +// Wildcard-aware keyword match (mirrors reference contentfulSchema.js): +// "*_ids" → endsWith "_ids"; "prefix_*" → startsWith "prefix_"; else exact. +const matchesPattern = (fieldId, pattern) => { + const lowerFieldId = String(fieldId).toLowerCase(); + const lowerPattern = String(pattern).toLowerCase(); + if (lowerPattern.startsWith('*')) return lowerFieldId.endsWith(lowerPattern.substring(1)); + if (lowerPattern.endsWith('*')) return lowerFieldId.startsWith(lowerPattern.slice(0, -1)); + return lowerFieldId === lowerPattern; +}; + +// Field UID that collides with a Contentstack reserved *entry* keyword gets the +// affix as a SUFFIX (e.g. created_at → created_at_cs), matching the reference. +const applySuffixIfRestricted = (fieldId, prefix) => { + const entries = restrictedKeyWords?.entries || []; + for (const keyword of entries) { + if (matchesPattern(fieldId, keyword)) return `${fieldId}_${prefix}`; + } + return fieldId; +}; + +const uidCorrector = (uid, affix) => { + if (!uid || typeof uid !== 'string') return uid; + const prefix = affix || 'cs'; + let newId; + if (uid === 'title') { + // Reserved built-in title: affix as prefix (reference getNewId special-case). + newId = `${prefix}_${uid}`.replace(/[^a-zA-Z0-9]+/g, '_'); + } else { + newId = applySuffixIfRestricted(uid, prefix); + } + return newId.replace(/([A-Z])/g, (match) => `${match?.toLowerCase?.()}`); +}; + +const expandCharClassForI = (cls) => { + const startsWithNegation = cls.startsWith('^'); + const body = startsWithNegation ? cls.slice(1) : cls; + const additions = []; + const addIfMissing = (s) => { + if (s && !body.includes(s) && !additions.includes(s)) additions.push(s); + }; + let i = 0; + const n = body.length; + while (i < n) { + const ch = body[i]; + if (ch === '\\' && i + 1 < n) { i += 2; continue; } + if (i + 2 < n && body[i + 1] === '-' && body[i + 2] !== ']') { + const a = body[i], b = body[i + 2]; + if (/[a-zA-Z]/.test(a) && /[a-zA-Z]/.test(b)) { + addIfMissing(/[a-z]/.test(a) + ? `${a.toUpperCase()}-${b.toUpperCase()}` + : `${a.toLowerCase()}-${b.toLowerCase()}`); + } + i += 3; + continue; + } + if (/[a-zA-Z]/.test(ch)) { + addIfMissing(ch === ch.toLowerCase() ? ch.toUpperCase() : ch.toLowerCase()); + } + i++; + } + return (startsWithNegation ? '^' : '') + body + additions.join(''); +}; + +const applyRegexFlagsInline = (pattern, flags) => { + if (!pattern || typeof pattern !== 'string') return pattern; + if (!flags || !flags.includes('i')) return pattern; + let out = ''; + let i = 0; + const n = pattern.length; + while (i < n) { + const ch = pattern[i]; + if (ch === '\\' && i + 1 < n) { + out += ch + pattern[i + 1]; + i += 2; + continue; + } + if (ch === '[') { + let inner = ''; + let depth = 1; + i++; + while (i < n && depth > 0) { + if (pattern[i] === '\\' && i + 1 < n) { + inner += pattern[i] + pattern[i + 1]; + i += 2; + continue; + } + if (pattern[i] === ']') { depth--; if (depth === 0) break; } + inner += pattern[i]; + i++; + } + i++; + out += '[' + expandCharClassForI(inner) + ']'; + continue; + } + if (/[a-zA-Z]/.test(ch)) { + out += `[${ch.toLowerCase()}${ch.toUpperCase()}]`; + i++; + continue; + } + out += ch; + i++; + } + return out; +}; + +const extractAdvancedFields = ( + item, + referenceFields = [], +) => { + const defaultText = item.defaultValue ? Object.values(item.defaultValue)[0] : undefined; + const validation = item.validations?.[0] || {}; + const uniqueValue = validation?.unique; + const regexpValidation = (item.validations || []).find((v) => v && v.regexp); + const regexPattern = regexpValidation?.regexp?.pattern; + const regexFlags = regexpValidation?.regexp?.flags; + const regrexValue = applyRegexFlagsInline(regexPattern, regexFlags); + const validationErrorMessage = regexpValidation?.message ?? validation?.message; + const rangeValidation = (item.validations || []).find((v) => v && v.range)?.range; + const numberMin = typeof rangeValidation?.min === 'number' ? rangeValidation.min : undefined; + const numberMax = typeof rangeValidation?.max === 'number' ? rangeValidation.max : undefined; + let singleRef = false; + if (['Link', 'Array'].includes(item.type)) { + singleRef = !['assetLinkEditor', 'entryLinkEditor', 'entryCardEditor'].includes(item.widgetId); + } + // Field instruction = the field's OWN help text only. The content-type + // description belongs on the content type, not smeared across every field. + let description = item?.settings?.helpText || ''; + if (description.length > 255) { + description = description.slice(0, 255); + } + + return { + default_value: defaultText, + validationRegex: regrexValue, + mandatory: item?.required, + multiple: singleRef, + unique: uniqueValue, + nonLocalizable: !(item?.localized === true), + validationErrorMessage: validationErrorMessage, + embedObjects: referenceFields.length ? referenceFields : undefined, + description: description, + numberMin: numberMin, + numberMax: numberMax, + }; +}; + +const createFieldObject = (item, contentstackFieldType, backupFieldType, referenceFields = []) => ({ + uid: item?.id, + otherCmsField: item?.name, + otherCmsType: item?.widgetId, + contentstackField: item?.name, + contentstackFieldUid: uidCorrector(item?.id, item?.prefix), + contentstackFieldType: contentstackFieldType, + backupFieldType: backupFieldType, + backupFieldUid: uidCorrector(item?.id, item?.prefix), + advanced: extractAdvancedFields(item, referenceFields, contentstackFieldType, backupFieldType) +}); + +const createDropdownOrRadioFieldObject = (item, fieldType) => { + let choices = []; + if (item?.items?.validations?.length) { + item?.items?.validations?.forEach?.((valid) => { + valid.in?.forEach((value) => choices.push({ value: ["Symbol", "Text", "Array"].includes(item?.items?.type) ? `${value}` : value, key: `${value}` })); + }) + } else { + if (!item?.validations?.length) { + choices.push({ value: 'value', key: 'key' }); + } else { + item.validations.forEach((valid) => { + valid.in?.forEach((value) => choices.push({ value: ["Symbol", "Text", "Array"].includes(item.type) ? `${value}` : value, key: `${value}` })); + }); + } + } + return { + ...createFieldObject(item, fieldType, fieldType), + advanced: { + ...extractAdvancedFields(item), + options: choices + } + }; +}; + + + +const arrangeRte = (itemData, item) => { + const foundItem = itemData.find((element) => element?.nodes) + const refs = []; + if (foundItem?.nodes?.['embedded-entry-inline']) { + const contentType = foundItem?.nodes?.['embedded-entry-inline']?.find((element) => element?.linkContentType); + if (contentType?.linkContentType?.length) { + refs?.push(...contentType?.linkContentType ?? []) + } + } + if (foundItem?.nodes?.['embedded-entry-block']) { + const contentType = foundItem?.nodes?.['embedded-entry-block']?.find((element) => element?.linkContentType); + if (contentType?.linkContentType?.length) { + refs?.push(...contentType?.linkContentType ?? []) + } + } + if (foundItem?.nodes?.["entry-hyperlink"]) { + const contentType = foundItem?.nodes?.['entry-hyperlink']?.find((element) => element?.linkContentType); + if (contentType?.linkContentType?.length) { + refs?.push(...contentType?.linkContentType ?? []) + } + } + if (foundItem?.nodes?.["hyperlink"]) { + const contentType = foundItem?.nodes?.['hyperlink']?.find((element) => element?.linkContentType); + if (contentType?.linkContentType?.length) { + refs?.push(...contentType?.linkContentType ?? []) + } + } + if (refs?.length) { + const replaceUids = []; + for (const uid of refs ?? []) { + replaceUids?.push(uidCorrector(uid, item?.prefix)) + } + return replaceUids; + } + return refs; +} + +// When the Contentful export omits `widgetId` (some spaces emit empty controls), +// derive Contentful's default editor from the field type so the inner switches +// below have something to match. Mirrors inferContentfulDefaultWidgetId() in +// src/services/contentful/contentful.service.ts. +const inferDefaultWidgetId = (item) => { + switch (item.type) { + case 'Symbol': return 'singleLine'; + case 'Text': return 'multipleLine'; + case 'Integer': + case 'Number': return 'numberEditor'; + case 'Object': return 'objectEditor'; + case 'Array': { + const itemsType = item?.items?.type; + if (itemsType === 'Symbol' || itemsType === 'Text') return 'tagEditor'; + return undefined; // Link items handled by the existing Array/Link branch + } + default: return undefined; + } +}; + +const contentTypeMapper = (data, entries) => { + // Contentstack has ONE built-in URL field per content type. If a Contentful + // content type has several slug fields, only the FIRST becomes the URL field; + // the rest become single-line text (keeping their own uid) so they don't all + // collapse into `url` and get lost. + let slugAssigned = false; + const schemaArray = data.reduce((acc, item) => { + if (!item.widgetId) { + const inferred = inferDefaultWidgetId(item); + if (inferred) item.widgetId = inferred; + } + switch (item.type) { + case 'RichText': { + const refsUids = arrangeRte(item?.validations, item); + const referenceFields = refsUids ?? (item.contentNames?.slice(0, 9) || []); + acc.push(createFieldObject(item, 'json', 'json', referenceFields)); + break; + } + case 'Symbol': + case 'Text': + switch (item.widgetId) { + case 'singleLine': + acc.push(createFieldObject(item, 'single_line_text', 'single_line_text')); + break; + case 'urlEditor': + // Contentful URL field → Contentstack Link field (title + href). + acc.push(createFieldObject(item, 'link', 'link')); + break; + case 'slugEditor': { + if (!slugAssigned) { + // First slug → Contentstack built-in URL field (uid 'url'). + // Forcing the uid to 'url' makes it dedupe with the auto-added url + // field so there is a single URL field; the entry value is sourced + // from this slug in createEntry (otherCmsType stays 'slugEditor'). + const slugField = createFieldObject(item, 'url', 'url'); + slugField.contentstackFieldUid = 'url'; + slugField.backupFieldUid = 'url'; + acc.push(slugField); + slugAssigned = true; + } else { + // Additional slug fields can't all be the URL field → keep them as + // single-line text with their own uid so no field is lost. + acc.push(createFieldObject(item, 'single_line_text', 'single_line_text')); + } + break; + } + case 'multipleLine': + acc.push(createFieldObject(item, 'multi_line_text', 'multi_line_text')); + break; + case 'markdown': + acc.push(createFieldObject(item, 'markdown', 'markdown')); + break; + case 'dropdown': + case 'radio': + acc.push(createDropdownOrRadioFieldObject(item, item.widgetId)); + break; + case 'tagEditor': + case 'listInput': + // Short-text tags/list → listview_extension (same as the Array branch). + // Previously only logged, dropping the field and its entry values. + acc.push(createFieldObject(item, 'extension', 'extension')); + break; + } + break; + case 'Integer': + case 'Number': + switch (item.widgetId) { + case 'numberEditor': + acc.push(createFieldObject(item, 'number', 'number')); + break; + case 'dropdown': + item.widgetId = 'dropdownNumber'; + acc.push(createDropdownOrRadioFieldObject(item, 'dropdown')); + break; + case 'radio': + item.widgetId = 'radioNumber'; + acc.push(createDropdownOrRadioFieldObject(item, 'radio')); + break; + case 'rating': { + item.widgetId = 'ratingNumber'; + const starsRaw = Number(item?.settings?.stars); + const stars = Number.isFinite(starsRaw) && starsRaw > 0 ? Math.floor(starsRaw) : 5; + item.validations = [{ in: Array.from({ length: stars }, (_, i) => i + 1) }]; + acc.push(createDropdownOrRadioFieldObject(item, 'dropdown')); + break; + } + } + break; + case 'Date': + acc.push(createFieldObject(item, 'isodate', 'isodate')); + break; + + case 'Array': + case 'Link': { + if (!item.widgetId) { + if (item.type === 'Link') { + if (item.linkType === 'Asset') item.widgetId = 'assetLinkEditor'; + else if (item.linkType === 'Entry') item.widgetId = 'entryLinkEditor'; + } else if (item.type === 'Array') { + const itemsLinkType = item?.items?.linkType; + if (itemsLinkType === 'Asset') item.widgetId = 'assetLinksEditor'; + else if (itemsLinkType === 'Entry') item.widgetId = 'entryLinksEditor'; + } + } + switch (item.widgetId) { + case 'assetLinkEditor': + case 'assetLinksEditor': + case 'assetGalleryEditor': + if (item.type === 'Array') { + const data = createFieldObject(item, 'file', 'file'); + data.advanced.multiple = true; + acc.push(data); + } else { + acc.push(createFieldObject(item, 'file', 'file')); + } + break; + + case 'entryLinksEditor': + case 'entryLinkEditor': + case 'entryCardEditor': + case 'entryCardsEditor': { + let referenceFields = []; + let commonRef = []; + + const processLinkContentType = (linkContentType) => { + return linkContentType + .filter((e) => + item.contentNames.includes(e.replace(/([A-Z])/g, '_$1').toLowerCase()) + ) + .map((e) => e.replace(/([A-Z])/g, '_$1').toLowerCase()); + }; + + const processReferenceFromEntries = (entries, contentTypeUid) => { + const contentTypeRefs = []; + const allEntries = entries?.find((entry)=>{ + return entry?.sys?.contentType?.sys?.id === contentTypeUid + }); + + // allEntries is undefined when the referenced content type has no + // entries in this environment — guard so Object.values doesn't throw. + const entriesArray = allEntries ? Object.values(allEntries) : []; + if (entriesArray?.length > 0) { + entriesArray.forEach((field) => { + if (field?.[item?.id]) { + const ids = Object.values(field?.[item?.id]) + .map(localeEntry => localeEntry?.sys?.id) + .filter(Boolean); + const contentTypesRef = entries?.find((entry)=>{ + return entry?.sys?.id === ids?.[0]; + })?.sys?.contentType?.sys?.id?.replace(/([A-Z])/g, "_$1")?.toLowerCase(); + contentTypeRefs?.push(contentTypesRef) + + } + }); + } + + return contentTypeRefs; + + } + + if (!item?.items) { + if (item?.validations?.length > 0) { + item.validations.forEach((entries) => { + if (entries?.linkContentType?.length) { + commonRef = processLinkContentType(entries?.linkContentType); + referenceFields = + commonRef?.length > 0 ? commonRef : item?.contentNames?.slice(0, 9); + } + }); + } else { + referenceFields = processReferenceFromEntries(entries,item?.contentfulID); + } + } else { + const firstValidation = item.items.validations?.[0]; + if (firstValidation) { + commonRef = processLinkContentType(firstValidation.linkContentType); + referenceFields = commonRef.length > 0 ? commonRef : item.contentNames?.slice(0, 9); + } else if (item.validations?.length > 0) { + item.validations.forEach((entries) => { + if (entries.linkContentType?.length) { + referenceFields = entries?.linkContentType; + } + }); + } else { + referenceFields = processReferenceFromEntries(entries,item?.contentfulID); + } + } + const refFieldData = createFieldObject(item, 'reference', 'reference', referenceFields) + refFieldData.refrenceTo = referenceFields; + acc.push(refFieldData); + break; + } + case 'checkbox': + acc.push(createDropdownOrRadioFieldObject(item, item.widgetId)); + break; + case 'tagEditor': + case 'listInput': { + acc.push(createFieldObject(item, 'extension', 'extension')) + break; + } + default: { + // Unrecognized widget (e.g. a custom app) on an Array/Link — don't + // drop the field. An Array of Symbol/Text → multi single-line text + // (preserves the list of strings, no extension dependency); anything + // else → extension so it still lands for review. + const itemsType = item?.items?.type; + if (item.type === 'Array' && (itemsType === 'Symbol' || itemsType === 'Text')) { + const data = createFieldObject(item, 'single_line_text', 'single_line_text'); + data.advanced.multiple = true; + acc.push(data); + } else { + acc.push(createFieldObject(item, 'extension', 'extension')); + } + break; + } + } + + break; + } + case 'Boolean': + acc.push(createFieldObject(item, 'boolean', 'boolean')); + break; + case 'Object': { + if (item?.widgetId === 'objectEditor') { + // Plain JSON Object editor → Contentstack JSON field (jsonobject_extension). + // content-type-creator.ts case 'json' selects jsonobject_extension when + // otherCmsType is 'Object'/'Array'. + const data = createFieldObject(item, 'json', 'json'); + data.otherCmsType = 'Object'; + acc.push(data); + } else { + const findAppMeta = appDetails?.items?.find((ele) => ele?.sys?.id === item?.widgetId); + item.name = `${item?.name} (${findAppMeta?.name}-App)`; + acc.push(createFieldObject(item, 'app', 'app')); + } + break; + } + case 'Location': { + acc.push(createFieldObject(item, 'group', 'group')); + acc.push({ + uid: `${item.id}.lat`, + otherCmsField: `${item.name} > lat`, + otherCmsType: 'Number', + contentstackField: `${item.name} > lat`, + contentstackFieldUid: `${uidCorrector(item?.id, item?.prefix)}.lat`, + contentstackFieldType: 'number', + backupFieldType: 'number', + backupFieldUid: `${uidCorrector(item?.id, item?.prefix)}.lat`, + advanced: { + mandatory: item?.required, + unique: false, + nonLocalizable: !(item?.localized === true) || false + } + }); + acc.push({ + uid: `${item.id}.lon`, + otherCmsField: `${item.name} > lon`, + otherCmsType: 'Number', + contentstackField: `${item.name} > lon`, + contentstackFieldUid: `${uidCorrector(item?.id, item?.prefix)}.lon`, + contentstackFieldType: 'number', + backupFieldType: 'number', + backupFieldUid: `${uidCorrector(item?.id, item?.prefix)}.lon`, + advanced: { + mandatory: item?.required, + unique: false, + nonLocalizable: !(item?.localized === true) || false + } + }); + break; + } + } + return acc; + }, []); + return schemaArray; +}; +module.exports = contentTypeMapper; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js new file mode 100644 index 000000000..1da0b860c --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js @@ -0,0 +1,193 @@ +'use strict'; +/* eslint-disable @typescript-eslint/no-var-requires */ + +/** + * External module dependencies. + */ +const fs = require('fs/promises'); +const path = require('path'); +// const contentTypeMapper = require('./contentTypeMapper'); +const contentTypeMapper = require('./contentTypeMapper'); + +/** Contentstack taxonomy_uid: lowercase, a-z0-9_ only */ +function contentfulSchemeIdToStackTaxonomyUid(contentfulSchemeId) { + if (!contentfulSchemeId || typeof contentfulSchemeId !== 'string') return ''; + return contentfulSchemeId + .replace(/([A-Z])/g, '_$1') + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); +} + +/** + * Maps Contentful content-type metadata.taxonomy (TaxonomyConceptScheme links) to a Contentstack taxonomy field. + * Field uid must be `taxonomies` Taxonomy fields must be localizable. + * @param {object|undefined} metadata - Content type `metadata` from export JSON. + * @returns {object[]} Field mapping rows (empty if no taxonomy). + */ +const buildContentfulTaxonomyFields = (metadata) => { + const links = metadata?.taxonomy; + if (!Array.isArray(links) || !links.length) return []; + const schemes = links + .map((t) => contentfulSchemeIdToStackTaxonomyUid(t?.sys?.id)) + .filter(Boolean); + if (!schemes.length) return []; + return [ + { + uid: 'taxonomies', + otherCmsField: 'Contentful taxonomy (metadata)', + otherCmsType: 'TaxonomyMetadata', + contentstackField: 'Taxonomies', + contentstackFieldUid: 'taxonomies', + contentstackFieldType: 'taxonomy', + backupFieldType: 'taxonomy', + backupFieldUid: 'taxonomies', + advanced: { + taxonomies: schemes.map((schemeUid) => ({ + taxonomy_uid: schemeUid, + mandatory: false, + multiple: true, + non_localizable: false + })), + mandatory: false, + multiple: true, + nonLocalizable: false + } + } + ]; +}; + +/** + * Internal module dependencies. + */ +const { readFile, deleteFolderSync } = require('../utils/helper'); +const config = require('../config'); +const restrictedKeyWords = require('../utils/restrictedKeyWords'); + +/** + * Corrects the UID by adding a prefix and sanitizing the string if it is found in a specified list. + * + * @param {string} uid - The original UID that may need correction. + * @param {string} prefix - The prefix to be added to the UID if it's in the specified list. + * @returns {string} The corrected UID, potentially with a prefix and sanitized characters. + * + * @description + * This function checks if the provided `uid` is included in the `idArray` list. If it is: + * 1. The function will prepend the provided `prefix` to the `uid`. + * 2. Replace any non-alphanumeric characters in the `uid` with underscores. + * + * It then converts any uppercase letters in the `uid` to lowercase and prefixes them with an underscore (to convert to snake_case format). + * + * If the `uid` is not found in the `idArray` list, it will simply return the `uid` after applying the lowercase transformation and underscores for uppercase letters. + * // Outputs: 'prefix_my_special_id' + */ +// CT UID that starts with a reserved *ct* keyword gets the affix as a PREFIX +// (e.g. sys_metadata → cs_sys_metadata), matching the reference applyPrefixIfRestricted. +const uidCorrector = (uid, prefix) => { + if (!uid || typeof uid !== 'string') return uid; + const p = prefix || 'cs'; + let newId = uid; + const ctKeywords = restrictedKeyWords?.ct || []; + if (ctKeywords.some((keyword) => uid.startsWith(keyword))) { + newId = `${p}_${uid}`.replace(/[^a-zA-Z0-9]+/g, '_'); + } + return newId.replace(/([A-Z])/g, (match) => `${match.toLowerCase()}`); +}; + +/** + * Creates an initial mapping for content types by processing files in a specified directory. + * + * @returns {Promise<{ contentTypes: object[] }>} A promise that resolves to an object containing an array of content type objects. + * + * @description + * This function performs the following steps: + * 1. Reads all files in a specified directory containing data about content types. + * 2. For each file, it processes the data to construct an object representing the content type. + * 3. The content type object includes metadata such as the title, UID, status, field mappings, etc. + * 4. It checks if the `title` and `url` fields are present and includes them if not. + * 5. The content type fields are further enriched by mapping the fields from the data using a helper function `contentTypeMapper`. + * 6. After processing all the files, the content type objects are returned as an array. + * 7. The function handles errors and logs them to the console if any occur during the process. + * + * The function also deletes a folder at the end of the process (using `deleteFolderSync`), which may be used for cleanup purposes. + * + * // Outputs: an array of content type objects, each containing metadata and field mappings. + */ +const createInitialMapper = async (cleanLocalPath, affix) => { + try { + const alldata = readFile(cleanLocalPath); + const { entries, contentTypes: exportContentTypes = [] } = alldata; + + const ctMetaById = {}; + for (const ct of exportContentTypes) { + if (ct?.sys?.id) { + ctMetaById[ct.sys.id] = ct.metadata || {}; + } + } + + const initialMapper = []; + const files = await fs.readdir( + path.resolve(process.cwd(), `${config.data}/${config.contentful.contentful}`) + ); + + for (const file of files) { + const data = readFile( + path.resolve(process.cwd(), `${config.data}/${config.contentful.contentful}/${file}`) + ); + const title = file.split('.')[0]; + + const contentTypeObject = { + status: 1, + isUpdated: false, + updateAt: '', + otherCmsTitle: title, + otherCmsUid: data?.[0]?.contentfulID, + otherCmsDescription: data?.[0]?.contentDescription || '', + contentstackTitle: title.charAt(0).toUpperCase() + title.slice(1), + contentstackUid: uidCorrector(data?.[0]?.contentUid, affix), + type: 'content_type', + fieldMapping: [] + }; + const uidTitle = [ + { + uid: 'title', + backupFieldUid: 'title', + otherCmsField: 'title', + otherCmsType: 'text', + contentstackField: 'title', + contentstackFieldUid: 'title', + contentstackFieldType: 'text', + backupFieldType: 'text', + advanced: { mandatory: true } + }, + { + uid: 'url', + otherCmsField: 'url', + backupFieldUid: 'url', + otherCmsType: 'text', + contentstackField: 'Url', + contentstackFieldUid: 'url', + contentstackFieldType: 'url', + backupFieldType: 'url', + advanced: { mandatory: true } + } + ]; + const ctId = data?.[0]?.contentfulID; + const ctMetadata = ctMetaById[ctId] || {}; + const taxonomyRows = buildContentfulTaxonomyFields(ctMetadata); + const contentstackFields = [...uidTitle, ...contentTypeMapper(data, entries), ...taxonomyRows]?.filter?.( + Boolean + ); + + contentTypeObject.fieldMapping = contentstackFields; + initialMapper.push(contentTypeObject); + } + deleteFolderSync(path.resolve(process.cwd(), config?.data)); + return { contentTypes: initialMapper }; + } catch (error) { + console.error('Error saving content type:', error); + } +}; + +module.exports = createInitialMapper; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractContentTypes.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractContentTypes.js new file mode 100644 index 000000000..d35b79cf8 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractContentTypes.js @@ -0,0 +1,122 @@ +"use strict"; +/* eslint-disable @typescript-eslint/no-var-requires */ +/** + * External module dependencies. + */ +const mkdirp = require("mkdirp"); +const path = require("path"); +const fs = require("fs"); + +/** + * Internal module dependencies. + */ +const config = require('../config'); +const { readFile, writeFile } = require("../utils/helper"); + +/** + * Setup the folder path + */ +const contentfulFolderPath = path.resolve( + config.data, + config.contentful.contentful +); + +/** + * Processes and saves content types by combining data from content types and their respective editor interfaces. + * + * @param {Array} contentTypes - An array of content type objects containing content type details. + * @param {Array} editorInterface - An array of editor interface objects that map content types to their corresponding editor controls. + * @param {string} prefix - A prefix to be used when saving content types, typically used to namespace the saved files. + * + * @returns {void} This function doesn't return a value but writes content type data to files. + * + * @description + * This function processes the provided `contentTypes` and `editorInterface` data to map fields and their editors, + * and then generates a JSON object for each field in the content type. It writes each content type's data to a separate + * JSON file in the specified `contentfulFolderPath`. The files are named using the content type's name, formatted and + * cleaned for use as a valid filename. + * + * @throws {Error} If an error occurs while processing or saving the content types, the error is thrown. + * + */ +const saveContentType = (contentTypes, editorInterface, prefix, entries) => { + try { + const contentName = contentTypes.map((content) => { + return content.sys.id.replace(/([A-Z])/g, '_$1').toLowerCase(); + }); + contentTypes.map((content) => { + const jsonObj = []; + + const editor = editorInterface.find( + (editor) => editor.sys.contentType.sys.id === content.sys.id + ); + + for (const valueType of content.fields) { + const valueEditor = editor.controls.find( + (value) => valueType.id === value.fieldId + ); + jsonObj.push({ + prefix: prefix, + contentUid: content.sys.id.replace(/([A-Z])/g, "_$1").toLowerCase(), + contentDescription: content.description, + contentfulID: content.sys.id, + ...valueType, + ...valueEditor, + contentNames: contentName, + }); + } + + writeFile( + path.join( + contentfulFolderPath, + `${ + (content?.name?.charAt(0)?.toUpperCase() + content?.name?.slice(1))?.replace(/[^\w\s]/g, "") + }.json` + ), + JSON.stringify(jsonObj, null, 4) + ); + }); + } catch (error) { + console.error("Error saving content types:", error); + throw error; + } +}; + +/** + * Extracts and processes content types from a given file and saves them. + * + * @param {string} filePath - The path to the file containing content type data. + * @param {string} prefix - A prefix to be used when saving content types. + * + * @returns {Promise} A promise that resolves once the content types are saved. + * + * @description + * This function reads a file containing content type data, checks if the `contentTypes` array exists + * and contains any content types. If valid content types are found, it calls a function (`saveContentType`) + * to process and save them. If no content types are found, a message is logged to the console. + * The function also ensures that a folder (defined by `contentfulFolderPath`) exists, creating it if necessary. + * + * @throws {Error} If an error occurs during the extraction or saving of content types, the error is thrown. + * + */ +const extractContentTypes = async (filePath, prefix) => { + try { + if (!fs.existsSync(contentfulFolderPath)) { + mkdirp.sync(contentfulFolderPath); + } + + const alldata = readFile(filePath); + const { contentTypes, editorInterfaces, entries } = alldata; + + if (contentTypes && contentTypes.length > 0) { + saveContentType(contentTypes, editorInterfaces, prefix, entries); + } else { + console.info("No content-type found"); + } + } catch (error) { + console.error("Error getting all content:", error); + throw error; + } +}; + +module.exports = extractContentTypes; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractLocale.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractLocale.js new file mode 100644 index 000000000..90ab15d67 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractLocale.js @@ -0,0 +1,37 @@ +'use strict'; +/* eslint-disable @typescript-eslint/no-var-requires */ +/** + * External module dependencies. + */ +const fs = require('fs'); +const { parseJsonLoose } = require('../utils/helper'); + +/** + * @description + * Function to retrieve the unique source locales from the legacy CMS + * @param {*} jsonFilePath - Local file path of the exported data + * @returns {Array} - Array of unique locales used in the exported data + */ +const extractLocale = async (jsonFilePath) => { + try { + const rawData = fs?.readFileSync?.(jsonFilePath, 'utf8'); + const jsonData = parseJsonLoose(rawData); + + // Extract unique language codes from locales array + const uniqueLanguages = new Set(); + if (Array?.isArray?.(jsonData?.locales)) { + jsonData?.locales?.forEach?.((locale) => { + if (locale?.code) { + uniqueLanguages.add(locale?.code); // Normalize to lowercase + } + }); + } + + return [...uniqueLanguages]; // Convert Set to array for output + } catch (error) { + console.error(`Error reading JSON file:`, error.message); + return []; + } +}; + +module.exports = extractLocale; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractTaxonomy.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractTaxonomy.js new file mode 100644 index 000000000..cbdd65da5 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/extractTaxonomy.js @@ -0,0 +1,62 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +const fs = require('fs'); +const path = require('path'); +const { parseJsonLoose } = require('../utils/helper'); + +function contentfulSchemeIdToStackTaxonomyUid(contentfulSchemeId) { + if (!contentfulSchemeId || typeof contentfulSchemeId !== 'string') return ''; + return contentfulSchemeId + .replace(/([A-Z])/g, '_$1') + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); +} + +/** Display name for mapper UI (product_category -> Product Category). */ +function humanizeSchemeId(id) { + if (!id || typeof id !== 'string') return ''; + return id + .split('_') + .filter(Boolean) + .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase()) + .join(' '); +} + +/** + * Collects unique TaxonomyConceptScheme ids from Contentful export content types (`metadata.taxonomy`). + * + * @param {string} filePath - Absolute path to the Contentful export JSON. + * @returns {Promise>} + */ +const extractTaxonomy = async (filePath) => { + const raw = await fs.promises.readFile(filePath, 'utf8'); + const data = parseJsonLoose(raw); + const contentTypes = data?.contentTypes || []; + const schemeIds = new Set(); + + for (const ct of contentTypes) { + const links = ct?.metadata?.taxonomy; + if (!Array.isArray(links)) continue; + for (const link of links) { + const sid = link?.sys?.id; + if (!sid) continue; + const uid = contentfulSchemeIdToStackTaxonomyUid(sid); + if (uid) schemeIds.add(uid); + } + } + + const taxonomySchema = [...schemeIds].sort().map((uid) => ({ + uid, + name: humanizeSchemeId(uid) || uid, + })); + + const outputDir = path.join(process.cwd(), 'contentfulMigrationData', 'taxonomySchema'); + await fs.promises.mkdir(outputDir, { recursive: true }); + const outputPath = path.join(outputDir, 'taxonomySchema.json'); + await fs.promises.writeFile(outputPath, JSON.stringify(taxonomySchema, null, 2)); + + return taxonomySchema; +}; + +module.exports = extractTaxonomy; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json new file mode 100644 index 000000000..19c7a0722 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json @@ -0,0 +1,11293 @@ +{ + "sys": { + "type": "Array" + }, + "total": 99, + "items": [ + { + "sys": { + "id": "6tLfWB4Y2ppAmKynXo4STi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "78VS3MWLI40BF1TzF206cD" + } + }, + "shared": true, + "createdAt": "2023-01-27T10:09:30.721Z", + "updatedAt": "2024-03-05T19:20:23.990Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + } + }, + "name": "A-sync Publication Manager (Marketplace)", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6NETxlMNCYcgwwTeCmuqTL" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "7CsrDDzb0WDqWgakHyfJdY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3WcMEN2rEin3ZZPsoF8Lz0" + } + }, + "shared": true, + "createdAt": "2020-10-14T19:49:23.931Z", + "updatedAt": "2023-05-02T15:59:57.914Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + } + }, + "name": "Acclaro Translations", + "src": "https://ctf-translations.acclaro-apps.com/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page", + "navigationItem": { + "name": "Acclaro Translations", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6RGLVmXYrGaIIRIda1HwAC", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-10T00:02:15.750Z", + "updatedAt": "2025-01-31T19:54:58.984Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Adapt Essentials Bulk Asset Fields", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3fa8kKWRMBk9K200X0xh8e" + } + }, + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Adapt Essentials Bulk Asset Fields", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "home" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3iszK8Gl7aaxLvxGyCOhgA", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-27T20:14:47.291Z", + "updatedAt": "2024-11-20T23:45:15.094Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6iUaAfJg2ZoKe4oEYF7kxe" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AI Content Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "66LlxbQubgBbmO7UjuQXQn" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3RheWQRagirMFgWrhMOBxL", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-08-01T18:43:48.712Z", + "updatedAt": "2024-09-25T16:03:48.103Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AI Image Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2oIeB0suYvcMq0vp3iDHfD" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5bWaMz0w0jPWvYmkgcVCX3", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-12T15:27:52.465Z", + "updatedAt": "2020-04-27T12:26:41.444Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5FvvIcNbfAn7SPSO97fIMp" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "AI Image Tagging", + "src": "https://ai-image-tagging.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "5iQYfM7S9CWFeywx0lrF6A", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3HXcJCikRb72JNTFI0kUEI" + } + }, + "shared": true, + "createdAt": "2023-02-24T10:25:25.169Z", + "updatedAt": "2024-09-02T12:47:22.963Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + } + }, + "name": "Alt Text AI", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "sjvZ8VI5Gl9dNGZxg6Thd" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "AltText.ai: Bulk Update", + "path": "/Page" + } + } + ] + }, + { + "sys": { + "id": "jTed08LvhkveeUoBpJOim", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-25T16:14:16.679Z", + "updatedAt": "2024-10-28T19:41:52.339Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Amazon Bedrock Content Generator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "5YBzEzuBdpUFXkf4LPCad8" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5HVpneN2ZR6uYrOs2TOumr", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4J91ewqssC6Q5X8EkneCGX" + } + }, + "shared": true, + "createdAt": "2024-01-25T00:15:37.655Z", + "updatedAt": "2025-01-23T02:27:41.845Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4J52AcomYtlp9LGabXlCrR" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6HJDZrUnh9Nc0a3JErpOqa" + } + } + }, + "name": "Amplitude", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4UVBDXiCpT3oH85Vh7PoIl" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "4OxLnZ6demuSG0dz7rgcEB", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6jM5PF1GV3gL8H96Q4b1px" + } + }, + "shared": true, + "createdAt": "2021-06-21T14:15:44.474Z", + "updatedAt": "2023-12-26T15:15:44.100Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + } + }, + "name": "api.video", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6fcnBg5UfR7ql11szgwbMX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "RkD9DMLgnqahWzcYyQ0RI", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1UCeHE7rmDOdfNcgpCN3z2" + } + }, + "shared": true, + "createdAt": "2023-04-12T13:44:32.948Z", + "updatedAt": "2023-08-09T19:07:58.814Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + } + }, + "name": "Aprimo App", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2f8I1i02IKmVOvMDt3aJPM" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "26OUmTSqwgnCTM5BnkJL83", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4jYjoMK3b0oP9MJWtwACRJ" + } + }, + "shared": true, + "createdAt": "2023-07-20T19:58:11.391Z", + "updatedAt": "2024-11-13T15:48:26.522Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + } + }, + "name": "Arboretum", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7khrwvd7hneLQJWeU2JCpg" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Arboretum", + "path": "/" + } + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "home" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "1mVogDvuE0GuW4qp4dk4zQ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-15T15:45:53.638Z", + "updatedAt": "2024-12-12T04:15:29.920Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "AWS Amplify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1m3ZeDMfTiS1BDNB6vmknB" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "5KVbHTjQJT7XGrAy7bLIlC", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7ujDWYE18wGkFkP8NeByHh" + } + }, + "shared": true, + "createdAt": "2021-10-04T08:46:53.481Z", + "updatedAt": "2022-02-14T08:47:21.274Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "560u6wCl1rlKFX3XwBCshV" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "20n37hdJoDPFuPMRmCt0Q0" + } + } + }, + "name": "BigCommerce app", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6nUzTxsGKY9uhqUpmsxyNJ" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4yuhN91ClorVNMXVseJB6r", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5QWhpfISjlF5wNbZ4rkmQk" + } + }, + "shared": true, + "createdAt": "2023-04-24T12:45:14.843Z", + "updatedAt": "2023-05-12T10:27:09.812Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + } + }, + "name": "Brand Guardian", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "12HEPsBjXjPqOi4zXp985t" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Asset" + } + ] + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "bgBVVuNbfvUW5tpFnD20s", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-24T15:04:26.697Z", + "updatedAt": "2024-12-12T04:10:42.788Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "29B6zorz8plUCN1auThiVH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Brandfolder", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7BeVVNCDi4PPoW8RSHjzrN" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5KySdUzG7OWuCE2V3fgtIa", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:42:27.828Z", + "updatedAt": "2025-01-31T19:54:58.598Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Bynder", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "55On2kbzFcx1LqZsrUFquX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2POIRORfxypO5JsgvufCiZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-05-29T16:49:41.594Z", + "updatedAt": "2025-01-31T19:55:11.338Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Bynder Content Workflow", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2GxbNv54GEeSdFE6go7FLX" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "Bynder Content Workflow", + "path": "/" + } + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3ts0Y8tta9da2qV0qQSoZG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-05-26T12:51:54.718Z", + "updatedAt": "2025-01-31T19:55:10.295Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2RZLldkv24PyQMDfNG56Bb" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Ceros", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4tCJZGeRRpumT4DX6BotMu" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [ + { + "name": "Content Type ID", + "description": "The ID of the content type that this app save Ceros Experiences to.", + "id": "contentTypeId", + "type": "Symbol", + "required": true + }, + { + "name": "Title Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the title of the Ceros Experience.", + "id": "titleFieldId", + "type": "Symbol", + "required": true + }, + { + "name": "URL Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the URL of the Ceros Experience.", + "id": "urlFieldId", + "type": "Symbol" + }, + { + "name": "Embed Code Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the embed code of the Ceros Experience.", + "id": "embedCodeFieldId", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "8dgJSrhUhRsKzRKz4oNbW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:41:41.277Z", + "updatedAt": "2023-02-20T05:48:06.273Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Cloudimage by Scaleflex", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "jBhp8AzIZeXrfI0zeJWlJ" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "zjcnWgBknf9zB7IM9HZjE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:40:36.439Z", + "updatedAt": "2025-01-31T19:55:10.703Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Cloudinary", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6FhbjuO8cHcYuhDVTlDSCt" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "4Vy3oAINwRgnxakoTz06tG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-09-19T14:36:12.034Z", + "updatedAt": "2024-12-12T04:07:24.722Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2kPIZqSR5zjoujwXVx3dqK" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Color Picker", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "BPUQeVUgmogGJyeQ4zrBo" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Allow custom value", + "default": true, + "id": "withCustomValue", + "type": "Boolean", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "1ENTlXR17q1veUn74QF9ns", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "41cviVbFZhsyGL7zXM0N1b" + } + }, + "shared": true, + "createdAt": "2019-12-10T08:25:13.578Z", + "updatedAt": "2024-11-08T10:22:30.987Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4lnZtuZtUG8pqyhaQattvb" + } + } + }, + "name": "Commerce Layer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KPiXheMx4f3O9e8Nm9N6m" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "default": "skus", + "name": "Resource", + "options": [ + { + "skus": "Skus" + }, + { + "bundles": "Bundles" + }, + { + "sku_lists": "SKU lists" + }, + { + "markets": "Markets" + } + ], + "description": "Select which resource you want to get from Commerce Layer", + "id": "resource", + "type": "Enum", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "3GBoHfsPvqyV74chvKCzNP", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0Ri9IrGVAtHGIMIwTwtXr1" + } + }, + "shared": true, + "createdAt": "2021-12-16T01:38:40.267Z", + "updatedAt": "2021-12-17T17:59:31.453Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + } + }, + "name": "Commerce.js App", + "src": "https://contentful-app.chec.io/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7yUlnpgAofvRDee0n6Ocv2", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-04T09:35:42.602Z", + "updatedAt": "2024-12-12T03:58:13.108Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Commercetools", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3ugsvOg1UjQN6bznZq0y4u" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4TVVNA8Ske9pUajCsEXTly", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6stNN8XMtvIWzLchRHV7GI" + } + }, + "shared": true, + "createdAt": "2022-10-12T11:54:55.656Z", + "updatedAt": "2023-12-12T09:45:09.036Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + } + }, + "name": "Conditional Fields", + "src": "https://conditional-fields-app-production.netlify.app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "RichText" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6ZBUT0ZhkMRAZ7C1KNtbBk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5BAUF0LQ64OqOEs9hHF7Qz" + } + }, + "shared": true, + "createdAt": "2022-09-03T09:56:48.416Z", + "updatedAt": "2023-11-01T13:14:27.120Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + } + }, + "name": "Crowdin", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "XU2X5bNtbkkL5NN4IWPqF" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Project ID", + "description": "Crowdin Project ID (can be found in Project -> Tools -> API)", + "id": "projectId", + "type": "Number", + "required": true + } + ] + } + }, + { + "sys": { + "id": "57yilZEN9oBolHz9vD6jwY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5NC6Cypz4leJZnIweXydYZ" + } + }, + "shared": true, + "createdAt": "2022-11-21T19:14:13.271Z", + "updatedAt": "2023-01-04T07:50:26.877Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + } + }, + "name": "Digizuite DAM", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3Ddhfg3gD4xcWzuD9UROmq" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Digizuite MM URL", + "description": "Provide your media manager embedded URL", + "default": "https://dmo10-mm.digizuitedam.com/embedded/", + "id": "digizuiteMmUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "4tDyevo7sMwvZhDGKzFHVw", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-08T18:11:25.804Z", + "updatedAt": "2025-01-31T19:55:21.389Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Docs to Rich Text", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1CdS7ioTlUoESJvsHpEHgq" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "RichText" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6YdAwxoPHopeTeuwh43UJu", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:12:53.401Z", + "updatedAt": "2024-12-12T03:54:39.597Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Dropbox", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4v8nupiM6QKbO8TtSJj1oK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "6JCQ2X5GbvJ4xRGEJbWIrz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1JMZ8tf4t7c5mnKzAELjRD" + } + }, + "shared": true, + "createdAt": "2022-02-22T13:29:05.836Z", + "updatedAt": "2024-02-12T13:37:38.510Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + } + }, + "name": "EasyTranslate", + "src": "https://contentful-app.easytranslate.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "EasyTranslate", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2NHTUlzatPT8jLceaVpkG5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "06jjPu1EENrkBYwR2X37wJ" + } + }, + "shared": true, + "createdAt": "2021-07-05T12:08:08.382Z", + "updatedAt": "2024-12-04T09:03:08.087Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + } + }, + "name": "emporix", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "Mmk1l7wy0kjK0QVjwwPjr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7EFM8G3tm6fJwrsPRL0VpW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-10-28T21:47:52.085Z", + "updatedAt": "2025-01-31T19:55:22.313Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "24lQRrtm3GTwuPHzmOqcFY" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Eppo", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4ESGEzGXoDovOUwD348Rs5" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [], + "installation": [ + { + "name": "Eppo API Key", + "id": "eppoApiKey", + "type": "Symbol", + "required": true + }, + { + "name": "Default Entity ID", + "type": "Number", + "id": "defaultEntityId" + }, + { + "name": "Default Assignment Source ID", + "type": "Number", + "id": "defaultAssignmentSourceId" + }, + { + "name": "Eppo API Base URL", + "id": "eppoApiBaseUrl", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "7GbS2x3SdVh7D2hb1FFsS6", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T16:38:03.221Z", + "updatedAt": "2025-01-31T19:55:21.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "FlexFields", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4bdHOGjNjrUGUzsScRnt4J" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ] + }, + { + "sys": { + "id": "5wHGALSJtz7y2EQOLfGhKH", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:14:21.970Z", + "updatedAt": "2024-12-12T03:50:27.317Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Frontify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6QmWeg6X7mplYaVOORmlau" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2K5TL6cBI8hXXRvuDvg1K", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4noCerPY9pAzAwYUXcWMEE" + } + }, + "shared": true, + "createdAt": "2021-09-15T13:07:45.069Z", + "updatedAt": "2022-02-14T10:11:11.672Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + } + }, + "name": "Frosmo Segments", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4w6N8nK38uOMwV1OoT6sgE" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4kJlo5koeq6SSrirCFQAeJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pw414MkO7J58dWK105e0u" + } + }, + "shared": true, + "createdAt": "2020-10-23T21:54:41.281Z", + "updatedAt": "2020-10-23T21:54:41.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + } + }, + "name": "GlobalLink Connect", + "src": "https://gl-contentful.translations.com/marketplace/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GlobalLink Connect", + "path": "/globallink" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5DlxOS0KvGS1Wk362xgvbN", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-02-17T22:10:38.871Z", + "updatedAt": "2024-12-17T22:46:44.282Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Google Analytics 4", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "VIr4O387Fuw3MsJwWkmCU" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4fD58pKkn4Tdlm7IW9FbvK", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6tedZUtnDb5ugxASlwKsmz" + } + }, + "shared": true, + "createdAt": "2021-09-21T19:57:43.796Z", + "updatedAt": "2023-10-05T18:37:33.749Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + } + }, + "name": "GPI Translation Services Connector", + "src": "https://contentful.globalizationpartners.com/", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "GPI Translation Services Connector", + "path": "/gpi-tsc" + } + } + ], + "parameters": { + "instance": [ + { + "name": "Auth Token", + "description": "Auth Token", + "default": "", + "id": "authToken", + "type": "Symbol", + "required": true + }, + { + "name": "secretKey", + "id": "secretKey", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "6o8NJOeW54fY2UYY8zQUZY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-15T21:07:30.751Z", + "updatedAt": "2025-01-21T21:13:45.907Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "GraphiQL", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "73xzvb2f2hBsNrd6SmQOqh" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphiQL", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "66frtrAqmWSowDJzQNDiD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-08-18T12:40:08.484Z", + "updatedAt": "2025-01-21T21:09:51.178Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6dV4yzcXnTFJpBQNTwolmx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "GraphQL Playground", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "5PU7QvhB9REZTiOd5VqorB" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphQL Playground", + "path": "/graphql" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2m6GPV4H181rNthvN0yxdJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-12-10T17:33:24.519Z", + "updatedAt": "2025-01-31T19:55:32.302Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "GrowthBook Experiment", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6TMDCMeZ7auO6EVJyPxxJr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "342Q2DqCjmsdN5BJCEPkrJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-10-01T09:21:49.757Z", + "updatedAt": "2025-01-21T21:05:59.716Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Image Focal Point", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "H8Fs4Mxz7w5lYyozY2tKK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3BGvGx9eF1bYGJw7tmHdXv", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-11-20T20:51:38.909Z", + "updatedAt": "2025-01-31T19:55:32.009Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cesFtOix28UbXshy4iXK8" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Image Hotspot Creator", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "zPnHdZOjqEbeXunoXEzaL" + } + }, + "locations": [ + { + "location": "entry-editor" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "7v6c0ylAgt7KSAmgedz4ed", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0XenNsx0QCqtKgZsXtiWJk" + } + }, + "shared": true, + "createdAt": "2021-01-17T00:35:30.734Z", + "updatedAt": "2022-08-11T17:23:28.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + } + }, + "name": "imgix", + "src": "https://contentful-psi.vercel.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "z0uyReYKxjYGR7Aj7DjFc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3jnZ6YgPY4u2MQrtKXZ038" + } + }, + "shared": true, + "createdAt": "2020-08-20T17:00:06.260Z", + "updatedAt": "2021-08-23T12:31:57.540Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3jmJyK2gmnvmAykKLpzAEO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0OqydBwBE7LCTESG8kkZ0G" + } + } + }, + "name": "IntelligenceBank", + "src": "https://contentfulconnector.intelligencebank.com/", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "IntelligenceBank", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5q6VO8UT97XSTix4gnRbPE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T22:55:41.032Z", + "updatedAt": "2025-01-31T19:55:32.928Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Intershop", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3PXmdcgKb7rerJVp7ADJaI" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3tkiX2zjB7aqEiiKX5hRwc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-17T14:29:02.114Z", + "updatedAt": "2020-04-27T12:28:08.688Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Jira", + "src": "https://app.jira.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3fLf4DnjbkN1yUA2V2fMgE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-07-11T15:16:00.763Z", + "updatedAt": "2025-01-21T20:58:29.937Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "JSON Viewer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3LBCSIpWCbmtuGOazPHMDQ" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ] + }, + { + "sys": { + "id": "znp3ZloaqTn5g5VankRqD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2cARw0ayWLd1vWvA3xX3pZ" + } + }, + "shared": true, + "createdAt": "2022-03-02T17:42:08.820Z", + "updatedAt": "2023-03-08T10:39:04.851Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + } + }, + "name": "Kameleoon", + "src": "https://contentful-app.kameleoon.com", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4F6cpGJEuEzZDPTno9nq1f", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7e3UZK73OoV22a7UaWtGZv" + } + }, + "shared": true, + "createdAt": "2021-11-17T19:33:04.159Z", + "updatedAt": "2021-12-28T15:27:21.195Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + } + }, + "name": "Kibo Commerce", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6sSvqEM7xGmmKkGT81kTXj" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Location" + }, + { + "type": "Boolean" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4uUaxd0lfvVJpY7PsmKBb5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7uWRGc4lv1K36wcfhbdCJF" + } + }, + "shared": true, + "createdAt": "2021-01-15T02:26:20.922Z", + "updatedAt": "2024-01-16T19:43:43.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + } + }, + "name": "Lilt", + "src": "https://storage.googleapis.com/lilt_contentful/index.html?ignoreCache=1", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "10ec9foxs591x36kLhTYT2", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pFE7su6qcypDfkpytSWYC" + } + }, + "shared": true, + "createdAt": "2023-03-15T07:21:27.107Z", + "updatedAt": "2023-03-15T07:24:58.409Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + } + }, + "name": "Linguiny", + "src": "https://contentful-i18n.vercel.app", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7tmjHWJ6M0KGqrOKrhHdhe", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "03vYXC72caQvKlMA5tgu1L" + } + }, + "shared": true, + "createdAt": "2022-03-10T08:53:36.303Z", + "updatedAt": "2024-08-05T11:53:02.236Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "26cKXW6ey72xUG0NahqVl0" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0IlkG3SeMEfIDd7qVLiybN" + } + } + }, + "name": "Lionbridge Connector", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1rDLwN9sFbPwhECR6lXCJe" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Lionbridge Connector", + "path": "/" + } + } + ] + }, + { + "sys": { + "id": "3kMGvoFeVdMPIkolBPdPIg", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-11-08T17:57:44.339Z", + "updatedAt": "2025-01-31T19:55:43.504Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "668Oko9O5Fb63WY5P2lss6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Live Story", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "ZCnbGHkTsovHNPKtQeIMb" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "installation": [ + { + "name": "Content Type ID", + "type": "Symbol", + "id": "contentTypeId" + }, + { + "name": "Title Field Id", + "type": "Symbol", + "id": "titleFieldId" + }, + { + "name": "Content Id Field Id", + "type": "Symbol", + "id": "contentIdFieldId" + }, + { + "name": "Content Type Field Id", + "type": "Symbol", + "id": "contentTypeFieldId" + } + ] + } + }, + { + "sys": { + "id": "70ssKop5SL98q1JOJy3AcA", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5mrBsdeobqqOHiCIyhvJbp" + } + }, + "shared": true, + "createdAt": "2023-07-04T09:49:39.244Z", + "updatedAt": "2024-03-29T21:18:50.344Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + } + }, + "name": "Lokalise", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3GEdi69xDtJX4nNQgJSTny" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "cQeaauOu1yUCYVhQ00atE", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-05-10T13:12:32.052Z", + "updatedAt": "2025-01-29T09:05:31.096Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + } + }, + "name": "Merge", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "7dgeATZJnWgT3vi8RE60Ow" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page", + "navigationItem": { + "name": "Merge", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7lcE2IF8TiXXKiMj2UGM8k", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-10-24T18:21:06.358Z", + "updatedAt": "2025-01-21T20:56:08.386Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Microsoft Teams", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "13NLM92PvmJCXTeSHS2uMT" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5l4WmuXdhJGcADHfCm1v4k", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-05-20T07:12:51.850Z", + "updatedAt": "2025-01-21T20:51:19.536Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Mux", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1RwnoLYeRXZvJwc8QGfFAE" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1VchawWvbIClHuMIyxwR5m", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T09:09:45.574Z", + "updatedAt": "2025-01-21T20:46:33.401Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Netlify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3iEI26pdrWHvrnIREDdV6F" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4WuVKeXdeRlqpw8go7Rkal" + } + }, + "shared": true, + "createdAt": "2021-01-19T15:16:33.569Z", + "updatedAt": "2025-01-21T09:22:53.016Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + } + }, + "name": "Ninetailed", + "src": "https://contentful.ninetailed.io", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + } + ] + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2KGwCxSgYcS5KKsb8ZyN86", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0qUM6SnNjkKqN2JVBUDk4a" + } + }, + "shared": true, + "createdAt": "2022-10-24T22:13:23.538Z", + "updatedAt": "2024-04-03T19:53:55.580Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + } + }, + "name": "Octana", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "77RP6IMXl9Mt9q5NQrLi4u" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Octana", + "path": "/" + } + }, + { + "location": "app-config" + }, + { + "location": "home" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + } + ], + "parameters": {} + }, + { + "sys": { + "id": "i43PggcHag2PCrGjYTiIX", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:38:34.885Z", + "updatedAt": "2021-08-03T12:11:21.857Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Optimizely", + "src": "https://optimizely.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3Xh8uDnRiZ0hpUyWCZtWmn", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0NCstxnb2tyMr22ly7sBI7" + } + }, + "shared": true, + "createdAt": "2022-11-07T16:34:30.956Z", + "updatedAt": "2023-03-15T16:56:43.577Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0Nxch2ljQM7Txe1noKMEDx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5SsU5BsjOoYnI1BVGDrmGt" + } + } + }, + "name": "PhotoShelter", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2wKsot67ek0iKNRsFL7gVr" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "5O9v59Lbugb5tFCMeyLP8K", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0g2JAivWiSKz1VCe23uUe8" + } + }, + "shared": true, + "createdAt": "2020-08-05T21:29:37.674Z", + "updatedAt": "2020-10-23T08:21:24.446Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + } + }, + "name": "phrase", + "src": "https://pa-contentful.netlify.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1wxoLYYtUviNg9e6m5Ai54", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0dPFwFwaNijMAAcuiJT5TX" + } + }, + "shared": true, + "createdAt": "2023-04-27T08:38:08.011Z", + "updatedAt": "2024-11-19T14:30:12.782Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + } + }, + "name": "Phrase TMS", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2BgFHrPZm2dYOGkHKxZP2N" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Phrase TMS", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "5WpRlPR9T0hdBeXGQ5bEiz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2BWdsuNrGXGPjplGDwjpuP" + } + }, + "shared": true, + "createdAt": "2021-01-27T06:46:34.442Z", + "updatedAt": "2021-01-28T13:12:36.030Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + } + }, + "name": "Qencode", + "src": "https://contentful.qencode.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2YQkSSHsqSIwWhqzisdovW", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-19T21:44:18.814Z", + "updatedAt": "2025-01-31T19:55:43.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5wnS4py3wwn4xgtUhYXaA5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Raster", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6WXuJ4OCGRgsQ0pwJ1ynOK" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "installation": [ + { + "name": "apiKey", + "type": "Symbol", + "id": "apiKey" + }, + { + "name": "orgId", + "type": "Symbol", + "id": "orgId" + } + ] + } + }, + { + "sys": { + "id": "7ek22esW2z9i1kdmevLJXd", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-03-11T15:29:55.343Z", + "updatedAt": "2021-03-11T15:29:55.343Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + } + }, + "name": "Repeater", + "src": "https://hopeful-ptolemy-922717.netlify.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Custom Value Name", + "id": "valueName", + "type": "Symbol", + "required": false + } + ] + } + }, + { + "sys": { + "id": "6sLWDUsuXcyIfkPeokdRxJ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-10-28T08:43:21.403Z", + "updatedAt": "2025-01-21T20:30:47.119Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2LSyXwc717JeKfw5DIgg6W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Saleor", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6O0BY9hY5wG75yJSgUD5HP" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1O8njPYTGO44VueSJNBrdZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-01T18:58:45.824Z", + "updatedAt": "2024-12-12T03:19:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7J9Yl0eiCbWcz1a6dZz2ou" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Salesforce Commerce Cloud Connector", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "CsrBcNciwbL2ttD739JKv" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [ + { + "default": "product", + "name": "Field Type", + "options": [ + { + "product": "Product" + }, + { + "category": "Category" + } + ], + "id": "fieldType", + "type": "Enum", + "required": true, + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "GdOFzqcDrEbmn2teDQE2i", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-29T19:19:08.656Z", + "updatedAt": "2025-01-21T20:39:53.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "SAP Commerce Cloud", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3DkLV6i7HmiVKF0FzrEOg8" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "7jJoGTAjjjTZqedusaIU7M", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:35:48.878Z", + "updatedAt": "2024-09-19T04:28:44.262Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Scaleflex DAM", + "src": "https://contentful.demo.sfxconnector.com", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "60S8P6KWlzfazXqMjhsJ1v", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-16T15:07:42.148Z", + "updatedAt": "2025-01-31T19:55:54.596Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Shopify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "k2g7OVjDMtSFIUKGDkOam" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ] + }, + { + "sys": { + "id": "5E71q6bdze3Haj9F2n9czY", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0SEv9uJudA095dlkpARGvs" + } + }, + "shared": true, + "createdAt": "2022-06-30T08:32:20.862Z", + "updatedAt": "2023-07-19T09:19:26.677Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + } + }, + "name": "Shopstory", + "src": "https://contentful.shopstory.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Mode", + "default": "content", + "id": "mode", + "type": "Symbol", + "required": true + }, + { + "name": "Canvas URL", + "description": "With this parameter you can override global canvas URL for this specific field. In most cases it should stay empty.", + "id": "canvasUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "2unqOCspPxYbyM295yh51V", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5FxqrACp1SSuw3oSAUCXcw" + } + }, + "shared": true, + "createdAt": "2023-05-12T15:57:51.375Z", + "updatedAt": "2023-05-19T14:24:16.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + } + }, + "name": "SiteSpect", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6jO80YvyLTqsFOa78bFnSz" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7ir40h24qLGSQWJ6JCS3sk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-12-02T12:36:53.667Z", + "updatedAt": "2022-02-09T10:11:47.526Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Slack", + "src": "https://slack.ctfapps.net/index.html", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "24SX6dqadSbp2kTSBSNw0L", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2QOGgGnLgLCv0ROiZ3wOBr" + } + }, + "shared": true, + "createdAt": "2021-08-03T18:26:51.989Z", + "updatedAt": "2022-08-16T13:50:52.528Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5oh1nnjVvZgRgkijq7lW1t" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5LG9NsobZHM3BS2bNr4wcn" + } + } + }, + "name": "Slatwall", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2JkgvZqkwMNMCrWJeeNlAV" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7fJGa8IE51jJdakiyBwcJ5", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "12AsJraQyXh1tM0uoQ51K5" + } + }, + "shared": true, + "createdAt": "2022-06-27T12:49:30.113Z", + "updatedAt": "2024-12-09T16:01:23.574Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + } + }, + "name": "Smartcat", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "52Iw1IbBDsfMNgmasSjpIH" + } + }, + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6ABxlejtWcEubKLM42fjMD", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-31T11:06:22.084Z", + "updatedAt": "2020-04-27T12:28:47.438Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Smartling", + "src": "https://smartling.ctfapps.net/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4c6SxDAXoHPLcFmoMLvGde", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:17:22.793Z", + "updatedAt": "2025-01-31T19:55:54.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Surfer", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1BuauoUv7GkWuh6Q8U7Jio" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "QMdzLmdwbV0j4ZrVY4WOv", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0uSnG7ikBn0c6T0kS6hhlx" + } + }, + "shared": true, + "createdAt": "2021-03-18T14:58:18.720Z", + "updatedAt": "2021-03-18T14:58:18.720Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + } + }, + "name": "Swell", + "src": "https://swell-contentful-picker.vercel.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7CPoljE4C0HpsVZ7a7HrZG", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-07-05T09:39:05.993Z", + "updatedAt": "2025-02-04T08:06:39.045Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + } + }, + "name": "Tasks", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4x8Wfpo5QSpXPe3z5dNRCS" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "EPRcLyDrBeAQgLtTRfPwu", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "25nCTg3Bl7iHWXk541IXcc" + } + }, + "shared": true, + "createdAt": "2022-05-05T07:11:38.645Z", + "updatedAt": "2024-11-13T11:41:18.327Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "25dziZyGrZWrZ6gsQmtQze" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4pwK4DjXHKcAdt4nv6ZSyO" + } + } + }, + "name": "Trados", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KwZyWqOAgBnqjCnRi9aW6" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Trados", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "b7SVv0k1EYbQRsusviQDi", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-04T14:49:53.208Z", + "updatedAt": "2025-01-31T19:55:54.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Transifex", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "4yTnBmPutHfeQkRHdyHizn" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "1SZgLiOT63ijEzPJZQ4QWT", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-03-20T13:46:37.843Z", + "updatedAt": "2023-09-28T16:03:15.817Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + } + }, + "name": "Typeform", + "src": "https://typeform.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "home" + } + ] + }, + { + "sys": { + "id": "1BeY7xDfJfvD5El9ymsOZF", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "14pf4vP1CA4EGu7AXnr1P5" + } + }, + "shared": true, + "createdAt": "2020-08-20T23:27:10.487Z", + "updatedAt": "2022-04-26T20:01:40.373Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0SJxBnMuapGsHZPLP1q7US" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5uDNLZHF9vPRvtZ88GeNGi" + } + } + }, + "name": "Uniform", + "src": "https://contentful.uniform.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + } + ] + }, + { + "sys": { + "id": "3Ju8DSs6cEG3TnqFa979vc", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:12:10.394Z", + "updatedAt": "2025-01-31T19:56:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Uploadcare", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "aKexNUjkGdX7VRRIClMCI" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [ + { + "name": "Max number of files", + "description": "The max number of files that can be added to a single field. 0 means no limit.", + "id": "maxFiles", + "type": "Number" + }, + { + "name": "Upload sources string", + "description": "Comma separated list of possible upload sources. E.g. `local, camera, dropbox`. See docs for details: https://uploadcare.com/docs/upload-sources/", + "id": "uploadSourcesString", + "type": "Symbol" + }, + { + "default": "useGlobalAppSetting", + "name": "Allow to upload images only", + "options": [ + { + "allowImagesOnly": "Allow images only" + }, + { + "allowAnyFiles": "Allow any files" + }, + { + "useGlobalAppSetting": "Use global app setting" + } + ], + "description": "If selected `Allow images only` then editors won't be able to upload anything but images.", + "id": "imgOnly", + "type": "Enum", + "labels": {} + } + ] + } + }, + { + "sys": { + "id": "4QsJrTg4fFjX7UmQDkeayq", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-23T22:37:02.320Z", + "updatedAt": "2025-01-24T23:01:55.307Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Vercel", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6M05o3q40mxTfvUOu3ZnOS" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "3HFf3DxTPYMh2L8214oW1s", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-13T18:26:51.771Z", + "updatedAt": "2025-01-31T19:56:05.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Voucherify", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "6CVqOrdznLgtiDsfW2eiwo" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ] + }, + { + "sys": { + "id": "7DnamgI4qKntUVMcOfZtQk", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0obnPYhku3jo775GiGSivz" + } + }, + "shared": true, + "createdAt": "2021-06-14T06:34:10.948Z", + "updatedAt": "2021-07-27T15:46:09.562Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0i6k6A8gvnzsopMOPMqoqT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5Pdjlm0t7kKPqgRXTEcoDV" + } + } + }, + "name": "VWO", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "2nZR4C05uQJr3skPaYUXyL" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "71oYmQJFCIWn9pxizjN8dZ", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-29T16:54:50.238Z", + "updatedAt": "2025-01-31T19:56:06.115Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "VWO - Feature Management & Experimentation", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "KH2X9F4QeHzT8SLQKD5CN" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6StWOM1AZBDHDjynDkm1iz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-08-16T11:51:02.704Z", + "updatedAt": "2024-09-10T18:08:55.958Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0xAU1rz5uyEJ0ItTExcjsa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + } + }, + "name": "Wistia", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "58RN96o2neL68XlitQnmGX" + } + }, + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "44A0iM4wuqcQBDfg6qrlQx", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T23:19:13.465Z", + "updatedAt": "2025-01-31T19:56:16.427Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Wix", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "1tWK9eLCM0S4xpGsULxO39" + } + }, + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "IzXGEKn1YcF831Z2r6TtN", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-11-15T13:57:44.050Z", + "updatedAt": "2025-02-04T08:09:09.786Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0jz6hPHbUidMTiQCdO2KmW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + } + }, + "name": "Workflows App", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "3o2ZmDGW4KWe1f40Ws9FCl" + } + }, + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Workflows", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6C8a6ICmjODMMsNC0Un0Xe", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5RHAZeCcIG0BSCJll8MFMs" + } + }, + "shared": true, + "createdAt": "2023-08-24T14:06:10.167Z", + "updatedAt": "2023-09-12T20:57:19.352Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + } + }, + "name": "Writer AI Content Detector", + "src": "https://contentful-ai-detector.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ] + }, + { + "sys": { + "id": "5wmH6IpRamZ66ofjP9THlz", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1o92OHmPmIOWNYuX0jJQQE" + } + }, + "shared": true, + "createdAt": "2021-12-08T11:05:03.091Z", + "updatedAt": "2022-06-08T17:24:53.207Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + } + }, + "name": "Writer Contentful Extension", + "src": "https://contentful-plugin.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Text" + }, + { + "type": "Symbol" + }, + { + "type": "RichText" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5i8iZ60GpkbZQJzutNXit", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-29T16:48:17.872Z", + "updatedAt": "2025-01-31T19:56:16.827Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + } + }, + "name": "Xillio Transcreate", + "bundle": { + "sys": { + "type": "Link", + "linkType": "AppBundle", + "id": "24oi7FCTTLvoXDO0u6dFRH" + } + }, + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Xillio Transcreate", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "4u3pN6m2aOOBTr9kGP8LJK", + "type": "AppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "28CeCjl0ZH2X0gql3fnuHZ" + } + }, + "shared": true, + "createdAt": "2020-10-29T09:22:15.212Z", + "updatedAt": "2021-09-29T12:04:10.546Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + } + }, + "name": "XTM Connect", + "src": "https://contentful-connector.xtm-intl.com/app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "XTM Connect", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + } + ], + "includes": { + "ResolvedAppDefinition": [ + { + "sys": { + "id": "6tLfWB4Y2ppAmKynXo4STi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "78VS3MWLI40BF1TzF206cD" + } + }, + "shared": true, + "createdAt": "2023-01-27T10:09:30.721Z", + "updatedAt": "2024-03-05T19:20:23.990Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "78UP2gMaShITMmFWzp6ZD1" + } + }, + "expiresAt": "2025-02-05T20:05:50.541Z" + }, + "name": "A-sync Publication Manager (Marketplace)", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://d4e9e180-fc67-493b-b077-367c8807b8fc.ctfcloud.net/6NETxlMNCYcgwwTeCmuqTL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kNGU5ZTE4MC1mYzY3LTQ5M2ItYjA3Ny0zNjdjODgwN2I4ZmMuY3RmY2xvdWQubmV0LzZORVR4bE1OQ1ljZ3d3VGVDbXVxVEwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=ftPNaI1QW-m1cloQSP2qUBQbkmWscp9OrSiwP8G75LuVL7PBZtiWe9sIT0pfMD1W2VlglgHbfxEKQE9OKQEvqPhv21UGjRdpNQwPRPrW7wYLVFvqnPDVvsdUQOaWtffyU89uTpzzLSpCF3qZMg2mBAW2K7P~tldm4y5YsY6cv8Npc7c0TF1Q2G213PgoohDQTtf-RjMRnZx7ntIayqYb6RfUxJMZQC0xMYe2tegBp-bIV9AEd1LgXWTEagRIYecSe6tw77MoJmBbACxkRdy7NP7rahFVzI4vml2iSW~Q4URT4eTm19rc-l2nf9b1ZMzeBRcnYWT7fgRfoCbDiRQcOw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7CsrDDzb0WDqWgakHyfJdY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3WcMEN2rEin3ZZPsoF8Lz0" + } + }, + "shared": true, + "createdAt": "2020-10-14T19:49:23.931Z", + "updatedAt": "2023-05-02T15:59:57.914Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3W9pkJkQkz56EL4hsjvm2W" + } + } + }, + "name": "Acclaro Translations", + "src": "https://ctf-translations.acclaro-apps.com/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page", + "navigationItem": { + "name": "Acclaro Translations", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "6RGLVmXYrGaIIRIda1HwAC", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-10T00:02:15.750Z", + "updatedAt": "2025-01-31T19:54:58.984Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.543Z" + }, + "name": "Adapt Essentials Bulk Asset Fields", + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Adapt Essentials Bulk Asset Fields", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "home" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://e19813bb-23a9-4502-a311-61ac75874216.ctfcloud.net/3fa8kKWRMBk9K200X0xh8e/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lMTk4MTNiYi0yM2E5LTQ1MDItYTMxMS02MWFjNzU4NzQyMTYuY3RmY2xvdWQubmV0LzNmYThrS1dSTUJrOUsyMDBYMHhoOGUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Ul0bXKM0grmDNpLJWJAGONcqSaXbRFHGIVUND4mWQuBCBK2XfkwsQJrH-Gjr~~wWcYNkxNOwC2-8JXWNrNcbfnADJfHUdlRX1zfdCnWRwrV3oyj81~OEjPQtil~DnapsJeSzB-obVuTWk3xsxqq5fmzz5NPxPWwWVNZzBWMcrI63eUtQKj2s6cXCNUlXxBlRBZku63dIyJDyR0f4VWAcByV~54fL36-0K1kI-g1MlItoflkNTxRKK8cHqVvOEDouuGtYBhrQcwuPwWyFR4s4tby6s9BFJlTBWICkSAKiS2wTZLKr3003PywnT8VOKgshLDN0fCoI9cGv1ATN0tUyHg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3iszK8Gl7aaxLvxGyCOhgA", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-27T20:14:47.291Z", + "updatedAt": "2024-11-20T23:45:15.094Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6iUaAfJg2ZoKe4oEYF7kxe" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.545Z" + }, + "name": "AI Content Generator", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://6c5a9a19-156a-46c4-a6ea-d4e406a18cd8.ctfcloud.net/66LlxbQubgBbmO7UjuQXQn/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82YzVhOWExOS0xNTZhLTQ2YzQtYTZlYS1kNGU0MDZhMThjZDguY3RmY2xvdWQubmV0LzY2TGx4YlF1YmdCYm1PN1VqdVFYUW4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=nIBSp8Oy9fv-dn9U7AKBv2M008XNNGQ3M0EVnaeRJHfEUjbHGktdRqlLoNvGTIYlHuhaahrovewUYcK4Q66WY1ayozsck91A8F1EQUEb-ccnIA1dohzvlIKP4BghhvAHPzoecxUeuy8K~mmgDpsMNiuv~wzS~vuVIKXY~UB1AZdsj0H9Zk-jNEfyeRoPa9yuJQBCa~yl6xBxHZe5l9vxMdMuEpF9VkBDVfO-ad98eyn4CnkUp4b08qtGWLgGPhS3SPy5CtAVVkYMttNTYA6dOZZUkjnDyfwQkoHjfZDOGhTsN~RtAMLxHlPeu5KHcfoNiQ2L8PlIlHbwRpj0gXyscw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3RheWQRagirMFgWrhMOBxL", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-08-01T18:43:48.712Z", + "updatedAt": "2024-09-25T16:03:48.103Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.547Z" + }, + "name": "AI Image Generator", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {}, + "src": "https://7ece24c6-f6ff-4ad7-8cfd-a5d59bdc1cd1.ctfcloud.net/2oIeB0suYvcMq0vp3iDHfD/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83ZWNlMjRjNi1mNmZmLTRhZDctOGNmZC1hNWQ1OWJkYzFjZDEuY3RmY2xvdWQubmV0LzJvSWVCMHN1WXZjTXEwdnAzaURIZkQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=mYq304b1JQkAl4RD9iXZa0ImF9Bi7trCZ7Y24mbtwRIF2G9y8fYi99qB5568xd4rNy9E0DL6gZMtRWieLvz965d-rpNTiP0FKlPvz-z40lF-CLdwn927UlbEuQEp0GB7ceKi4QpvIJ5N1f9RsYkuYtNoEZfIqKKkphjYDOWIsdpyZGTND6r4pWuHufcDfWl6PKo-rCROcqcnsVT5C1W7~zZLIoy8e2ilQWdxIk8l7x1pskqP2VYbi44AYQw7aMINwlUbjYlNCrC6gMuDVCI75RDEdnnVrViOQ7rfWru43vg9g0LjmRohjUS0~sFqZgedY0KG9nG1GjMqaqllIWFQtA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5bWaMz0w0jPWvYmkgcVCX3", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-12T15:27:52.465Z", + "updatedAt": "2020-04-27T12:26:41.444Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5FvvIcNbfAn7SPSO97fIMp" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "AI Image Tagging", + "src": "https://ai-image-tagging.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ] + }, + { + "sys": { + "id": "5iQYfM7S9CWFeywx0lrF6A", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3HXcJCikRb72JNTFI0kUEI" + } + }, + "shared": true, + "createdAt": "2023-02-24T10:25:25.169Z", + "updatedAt": "2024-09-02T12:47:22.963Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5CawfuQcCBeg31D5FjPxYG" + } + }, + "expiresAt": "2025-02-05T20:05:50.549Z" + }, + "name": "Alt Text AI", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "AltText.ai: Bulk Update", + "path": "/Page" + } + } + ], + "src": "https://ae46b17f-42c6-4df6-bdca-b2647758d4f4.ctfcloud.net/sjvZ8VI5Gl9dNGZxg6Thd/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hZTQ2YjE3Zi00MmM2LTRkZjYtYmRjYS1iMjY0Nzc1OGQ0ZjQuY3RmY2xvdWQubmV0L3Nqdlo4Vkk1R2w5ZE5HWnhnNlRoZC9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=bGeYbSidg6MMrioVNpLZIEpqaZ90zpOxWhZJ5o~vunGwL-UoCPosi8LlA36j4dEmKI3tJ0qNX4qz9NJ~qrKJ8aY5KQRiaR-JKXEJ7fCri7HmrNJLDptHfl9fXe3LLsKXSosG0OQuEK6b1~DwvIGtqiU7JcNZwdBG9GeRkEQJbod-nbXpvWJuGy3sXx--bVNk6zquOlfLAVW4YcL-QQt8l0tLukNieRwrOpSpSP567eEkq6gJm1ZOONg8gmhrsejnyKvSM6gmOWHpWC6nDS8Q2XF28HWEL1slybLAIEvaCMi72nR6DNm-xVTg2tFjwRyct2NClXUggtcYh6cKx6Ekfg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "jTed08LvhkveeUoBpJOim", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-25T16:14:16.679Z", + "updatedAt": "2024-10-28T19:41:52.339Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.550Z" + }, + "name": "Amazon Bedrock Content Generator", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://0a8a864c-2d27-4881-ba3b-3b0627c259c2.ctfcloud.net/5YBzEzuBdpUFXkf4LPCad8/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wYThhODY0Yy0yZDI3LTQ4ODEtYmEzYi0zYjA2MjdjMjU5YzIuY3RmY2xvdWQubmV0LzVZQnpFenVCZHBVRlhrZjRMUENhZDgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Hx7JNbX4hXwIUqasoGT4v4Lih4vDS~xUaaEWtiaw6YHNzIZGWvEG4IB4BzpeVYrr-cZDgkuPt5olh7yluWo4R9a66R~HQgePR7QbSR5weXAmZkYxN~DGvXJZGtb1I6WvGr~vija4~M8LnqV37uOAubI1BkwiSJetTKKH3f6cpYXhtYOZ4VaHszga2w4SSytyMP1RH7swIS82H852DWU5SBaeNIF0NF6qCW1c-gcNW04NGLXMPGteFjJr1X6~-F8iX93XqAlmrICU3aSfYaED0IjFQbeNz8eWc~BaNTNm~-2clb7Zifh4JMYPU7CM345y6vx~Zf73i-HzQXt8GJwZlw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5HVpneN2ZR6uYrOs2TOumr", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4J91ewqssC6Q5X8EkneCGX" + } + }, + "shared": true, + "createdAt": "2024-01-25T00:15:37.655Z", + "updatedAt": "2025-01-23T02:27:41.845Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4J52AcomYtlp9LGabXlCrR" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6HJDZrUnh9Nc0a3JErpOqa" + } + }, + "expiresAt": "2025-02-05T20:05:50.551Z" + }, + "name": "Amplitude", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + } + ], + "parameters": {}, + "src": "https://bb901422-1114-41dd-a15b-91a7e312b887.ctfcloud.net/4UVBDXiCpT3oH85Vh7PoIl/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iYjkwMTQyMi0xMTE0LTQxZGQtYTE1Yi05MWE3ZTMxMmI4ODcuY3RmY2xvdWQubmV0LzRVVkJEWGlDcFQzb0g4NVZoN1BvSWwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=KpVHbXHfLWj9mjQGVjztlq6oXZ6kOTjUxn7wGS~V2BA~771opeCoB-6udfJPqeHOdMPs7zwOVg1GjZA3RMci0XHQ27pW-Kt2wZikAR0KLfu-5F6S2GoLWP8j-S6BhMS4NR94LpDOIoUigmpE2hWWzmeQiPWGaBefaUMZU9crUeOb1ET4I2hrtiALnKdvcwTih7gb5UiIGb0p0dHPv5ftlS6lqcsPh7ha6Jwdvowm6zGl2uVXwtY-pBOQaC456wkrtYgqXHtf7W7sc7HNDfdh96OT~nycNpPKaVhnDVSVRCMiLkP4mq7N9EgY1WvEXwbSc5C7bgGjQ2BM7DA0IEMjRQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4OxLnZ6demuSG0dz7rgcEB", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6jM5PF1GV3gL8H96Q4b1px" + } + }, + "shared": true, + "createdAt": "2021-06-21T14:15:44.474Z", + "updatedAt": "2023-12-26T15:15:44.100Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6jL2ThWHHumVn8ZQIZLDM7" + } + }, + "expiresAt": "2025-02-05T20:05:50.553Z" + }, + "name": "api.video", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://9e36a740-73b8-43d6-af8d-3bfc2a3f3895.ctfcloud.net/6fcnBg5UfR7ql11szgwbMX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85ZTM2YTc0MC03M2I4LTQzZDYtYWY4ZC0zYmZjMmEzZjM4OTUuY3RmY2xvdWQubmV0LzZmY25CZzVVZlI3cWwxMXN6Z3diTVgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dUpBZvt7H28otXdxZabC2zMM9oqSYE~-xeRZnmVqn9A6s~aYOrDNXUgY5GXkLMgfnbY9QjqzOPYgT67IlONPO3xK7K~txglDkywRm97KmT-7ul9M25wwOsHjU6ik5flWekBX3IY-5NvYre1anEkROvUuMiEADJRxVaIE5XeOb~V1T3XF8rjnh~ls3ALhfjPEMSEtFHp6kyMVHwuP3rdmWG4YmHFlko-OQScIBQjGK~hch3R-meHBSDDF8ji7-vk7Bljiyugk4NZncZkQCKX6F3~2u1slga9BD1PAeqCHvOyIqoPezlEjrKExTi-QrTcEQ6RKpjQnVOZXCOy0UwDn1A__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "RkD9DMLgnqahWzcYyQ0RI", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1UCeHE7rmDOdfNcgpCN3z2" + } + }, + "shared": true, + "createdAt": "2023-04-12T13:44:32.948Z", + "updatedAt": "2023-08-09T19:07:58.814Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0DBVatr5nHZC18z9wRBGd3" + } + }, + "expiresAt": "2025-02-05T20:05:50.554Z" + }, + "name": "Aprimo App", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://1c437f53-b92a-4d1a-9901-8233315ea382.ctfcloud.net/2f8I1i02IKmVOvMDt3aJPM/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xYzQzN2Y1My1iOTJhLTRkMWEtOTkwMS04MjMzMzE1ZWEzODIuY3RmY2xvdWQubmV0LzJmOEkxaTAySUttVk92TUR0M2FKUE0vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=RkxWL4R~3B4I~AynSOWK7cvbNlKo-91ODWZsuE417J~bfgPzXb01boh1evohXiXxxqrbmxTvF~F1KU9jHF9pDWj6Pt2WkolC~sYRObEuW2NAt3UFjacgaGX0POlACaPB073~hd2E4mH7E1iJYjFF~72UcWqyL4V9yNL1FrN-iz5PuHBqfkEUhazKn9j81pdXDuxlm0YrYCXsnilTHpaOEP3Q~Wn1FyzHs32qwIx8u~7BHxEUSIhSFMRJ6pI8600FvFkDL730fsKPnWgFzX4ktnEZoHBTPDHinR99kDJcZBUZcP3pCC16CVUt9pMM0xutDaq~NG~aLYuHaCICrEchNQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "26OUmTSqwgnCTM5BnkJL83", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4jYjoMK3b0oP9MJWtwACRJ" + } + }, + "shared": true, + "createdAt": "2023-07-20T19:58:11.391Z", + "updatedAt": "2024-11-13T15:48:26.522Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5jA82i8PO6yYxpusZflUuH" + } + }, + "expiresAt": "2025-02-05T20:05:50.555Z" + }, + "name": "Arboretum", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Arboretum", + "path": "/" + } + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "home" + } + ], + "parameters": {}, + "src": "https://45541c4b-f1c2-4de6-912b-e1656654bc67.ctfcloud.net/7khrwvd7hneLQJWeU2JCpg/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80NTU0MWM0Yi1mMWMyLTRkZTYtOTEyYi1lMTY1NjY1NGJjNjcuY3RmY2xvdWQubmV0LzdraHJ3dmQ3aG5lTFFKV2VVMkpDcGcvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mc5oVe77gwrAqZsdkXnM7EZ4ahePlsyZUez8PjUbjh0KH2SEyCiHMOI3DXo~7N-8Ft1V-kT1G7IOxDhRF1c0FBYjZqPR0SV2yempUT7R34nq5zSGU4uqBQKKhgI65-CdyZitfmKvuT88yFw9kpRrntkeCLXxQaGdnHZB2J518x-s49KV6ui-AFm7ZwV495xlKa2LxChgd3Un1nZr8fxm2B-meYMqWLW7TzR2s0qBaWlY6nDa~C64bCuQg0GMA6vIXioV5B~Bno1du4vRepnFm9oZvPref17IcBuhIvg1czFZZZAYyAAcNQAmVWjH9EUF6cbJpFpv-5GyCKpBfgyQfQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1mVogDvuE0GuW4qp4dk4zQ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-15T15:45:53.638Z", + "updatedAt": "2024-12-12T04:15:29.920Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.556Z" + }, + "name": "AWS Amplify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://2d019caf-8897-4528-af41-0460a31949ae.ctfcloud.net/1m3ZeDMfTiS1BDNB6vmknB/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8yZDAxOWNhZi04ODk3LTQ1MjgtYWY0MS0wNDYwYTMxOTQ5YWUuY3RmY2xvdWQubmV0LzFtM1plRE1mVGlTMUJETkI2dm1rbkIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=OtrtiZTIRIuhO5v9jTTRA0XrvHF2m-3jwLcJJj5YtnsoNOd8dqwwS~RaAUC4BUqigzYgCqdX1gN~XPMzJnK3u7XtDgXkIDCA7EZBJ0gpAZ1plE1SlzhTIp~uh2~bOFtAiRzsoSwsc4yqchVyeosedAvFO48knf8u-E51NCOKpJMLsRCydeffDYFHyAnEFMttLcdcMEgKeop~BHP6dINJ2USGA7pKwQiozf-6bYFiu-WYDbF1ECFzkN-i-K-KGbnHhcaoisLx8Qt5dPDmS2ozOZDLPpc-RZNx3xlB5ZC2zcyn1K0QBKRibqqV0WOkzRO-4p6HfWDX7LUsDFZBNntrrQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5KVbHTjQJT7XGrAy7bLIlC", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7ujDWYE18wGkFkP8NeByHh" + } + }, + "shared": true, + "createdAt": "2021-10-04T08:46:53.481Z", + "updatedAt": "2022-02-14T08:47:21.274Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "560u6wCl1rlKFX3XwBCshV" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "20n37hdJoDPFuPMRmCt0Q0" + } + }, + "expiresAt": "2025-02-05T20:05:50.558Z" + }, + "name": "BigCommerce app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://bd2698eb-c97e-4d54-9f91-a9a3df56dac4.ctfcloud.net/6nUzTxsGKY9uhqUpmsxyNJ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iZDI2OThlYi1jOTdlLTRkNTQtOWY5MS1hOWEzZGY1NmRhYzQuY3RmY2xvdWQubmV0LzZuVXpUeHNHS1k5dWhxVXBtc3h5TkovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=kDilQ6NrltYMkuyP4scpw632mjCky3arTFDkiVttE-YF~BHfDDivEEeUi8XW2yPQUPinl5QuAvtCa4RNxe0O9w8CgNRvbJPBPwqdyVDuYy~pPnnyBTz9MODFMyHuI5-hTcOyS-RdG06g7BuKqI9Jax3UoMf4WitKhp9B4bxSYfiLqkAIFlctyNiRzlBunBDziylysrQMlTbDrVo28dRa2mHoxUpf8QVn75-53h4gHo8IlUVyGclrm602VjALZnEzkwyRtpwf2Jlq9jHpsg-9V4u9zIWUI~Z6YuiI4a7kH2iL9JB-BUVSvUi0eC118sA1n0iPy5VjY2orR7A3-sz0VQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4yuhN91ClorVNMXVseJB6r", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5QWhpfISjlF5wNbZ4rkmQk" + } + }, + "shared": true, + "createdAt": "2023-04-24T12:45:14.843Z", + "updatedAt": "2023-05-12T10:27:09.812Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "69AXBWNchCjNtMvSvl9h0a" + } + }, + "expiresAt": "2025-02-05T20:05:50.559Z" + }, + "name": "Brand Guardian", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Link", + "linkType": "Asset" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://95b45f3e-b683-4b0a-9950-862639799adb.ctfcloud.net/12HEPsBjXjPqOi4zXp985t/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85NWI0NWYzZS1iNjgzLTRiMGEtOTk1MC04NjI2Mzk3OTlhZGIuY3RmY2xvdWQubmV0LzEySEVQc0JqWGpQcU9pNHpYcDk4NXQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=UmYZqFRpiiwIrBidNN080gGAGv1kUDJp4eqJnGu2s5yai0xJJCQlQZ3MGFIClvDqC4cO1JTU3h5uwVn9y~lG3JBXpUCnQwZ1UTZNB-00nyV9AUR3vcsrt~9exYWTe506Ip0IsvPkUUwZYirIBlkllBbfb8vVCB4CpXhPcFAhDP06ThA-VPs8Fn7cg4tp5d0lzT-DMRWXc1~ZpiBCvbHjDOBXKDIdmY5CURGDfLgw3Mca8XJuAc8-8PashVqlawZdg878f6KMtXyVEJhMjS34ikDwrt680sBrrhbCuyFKxr0DYXXzoBFEz9BP374awuLtluK3gMTe9Ep5n5MyT1X24w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "bgBVVuNbfvUW5tpFnD20s", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-02-24T15:04:26.697Z", + "updatedAt": "2024-12-12T04:10:42.788Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "29B6zorz8plUCN1auThiVH" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.560Z" + }, + "name": "Brandfolder", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://05f8afd5-8130-4e33-866a-ad5dc278aafc.ctfcloud.net/7BeVVNCDi4PPoW8RSHjzrN/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNWY4YWZkNS04MTMwLTRlMzMtODY2YS1hZDVkYzI3OGFhZmMuY3RmY2xvdWQubmV0LzdCZVZWTkNEaTRQUG9XOFJTSGp6ck4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=QwMeulf7BGlsT8uyxuJEY3a95pe7zpVhJNAirVAT2x9IGpScdUaNVN6zdjC66hR222--Uz5aLAB0uUY2wkAY6LAlp69chAVoKaKsrwRVbw3NqEQhfs6ipAfaiIyjsrdzR2lfoLkWmahzLNb6xDbBKdvaT49YrJTG0XNH8l02w7NkQmdUnTymLcTh1YhtmQUdwWhG0jZ2JGYQ4XFXwaqSBRPWNArfyVvDEvukmMi9WP8DlUQHmtf0qYUlw4ZO3jrF3NWzvujKDI6HsHTsU0Yk0GyO9Uh0zUv9COFXHfqHg1p7X0QRxogbh854vDF7m4KhJmh0Ij9iKg~7LwpPARKUYg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5KySdUzG7OWuCE2V3fgtIa", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:42:27.828Z", + "updatedAt": "2025-01-31T19:54:58.598Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.561Z" + }, + "name": "Bynder", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://bcf5c511-c1d8-4bdd-aa3f-35c25a3db376.ctfcloud.net/55On2kbzFcx1LqZsrUFquX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iY2Y1YzUxMS1jMWQ4LTRiZGQtYWEzZi0zNWMyNWEzZGIzNzYuY3RmY2xvdWQubmV0LzU1T24ya2J6RmN4MUxxWnNyVUZxdVgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=WKkjRE7qoFICMJFPYTqOS971yGR8H6ni6onUvnOOR0avRfp0vsJaGDTzvyrYY7kAD0gKldJ51iV9tBM~eK9alyr-DjGod2U2qBPDzauZamQFBqAfCZlRHOp7OZ45cOjY2WdbQ6f2dV9wksFnh0yY~hj7WrlqGnljVi3d3cnr-y8unzDku7or9CLxD9OKSSLGSodsZO0-ytI0vj26W7WUzyIo0gqLBczJkB-i97eWh7uuopxaCB87c-I5EUQcu7FbeMFF3oZrFOIMP7H6K4Db5QeNhL-W13W76Km9u1J~Q-HJfwYa40EOUO7184tXwHDPlbQmdYsX6KOvEGCn8nFA7Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2POIRORfxypO5JsgvufCiZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-05-29T16:49:41.594Z", + "updatedAt": "2025-01-31T19:55:11.338Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.563Z" + }, + "name": "Bynder Content Workflow", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "Bynder Content Workflow", + "path": "/" + } + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://5d2cb86a-895c-4049-836a-0e26e8381eb9.ctfcloud.net/2GxbNv54GEeSdFE6go7FLX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81ZDJjYjg2YS04OTVjLTQwNDktODM2YS0wZTI2ZTgzODFlYjkuY3RmY2xvdWQubmV0LzJHeGJOdjU0R0VlU2RGRTZnbzdGTFgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=YhNgnIN0Q82fGxMky5AOY35u5La5iXmfSGxQBUDn1VbtterQtUQEfD21mEqRP~9OzS97Err76-JiCzx5ExlrIhH-cr7PWEOqAWS4qkJ6-Lj2b~JJOxu-OJy4PR9TwO-yxQctdoJvsnA3wXGM7g2gNgbCGW9RnFdtQ5Kqkltx46IWC3iX~u-7-Wjfx3JuozyDCKDaI8Njgqw9alamKHWKhbZ1DCgQgiJAGMhqTaweyHXYQCpNdOCRLEdc9jjok-awcBN2Ff4s5noxgQeCjM8Ic7pVVf8ghooBsoqE4m0r2JcWVxl3uTZqkrDPG10KFfZjV0vCcNnk01G4nqwYPqvf4w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3ts0Y8tta9da2qV0qQSoZG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-05-26T12:51:54.718Z", + "updatedAt": "2025-01-31T19:55:10.295Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2RZLldkv24PyQMDfNG56Bb" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.564Z" + }, + "name": "Ceros", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [ + { + "name": "Content Type ID", + "description": "The ID of the content type that this app save Ceros Experiences to.", + "id": "contentTypeId", + "type": "Symbol", + "required": true + }, + { + "name": "Title Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the title of the Ceros Experience.", + "id": "titleFieldId", + "type": "Symbol", + "required": true + }, + { + "name": "URL Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the URL of the Ceros Experience.", + "id": "urlFieldId", + "type": "Symbol" + }, + { + "name": "Embed Code Field ID", + "description": "Field ID (on the content model specified in 'contentModelId') for the embed code of the Ceros Experience.", + "id": "embedCodeFieldId", + "type": "Symbol", + "required": true + } + ] + }, + "src": "https://722db63a-f061-4241-a4a2-cd4286407920.ctfcloud.net/4tCJZGeRRpumT4DX6BotMu/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83MjJkYjYzYS1mMDYxLTQyNDEtYTRhMi1jZDQyODY0MDc5MjAuY3RmY2xvdWQubmV0LzR0Q0paR2VSUnB1bVQ0RFg2Qm90TXUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=SdQ06per0J2kfjmt6aagZypB-x9FJ4X0v~2euF~YavMK0fAlJ1Va3agCXo5eXINr3HNRnDRARSdbp4uR~piSEpSt09PQYegYZgpwrtcko511CU10m9r3XFD9oMRl43UptJcq8fY89FPjhqd0-mXdP2HNYrZax0xy8fGQjMa9~MbFc-z2e1Nv3BG~deGD8da8vepoOCiVsm5NwOONspjKHfmHYNWEVbJMp6O0oG4JjiXaNSSiJ8yoTVedpKJiFQfNFj1xs6dTTjSz4GHCdRyP2D4hV3xPQeiZw208zjVDDPXpbXNCDmvxbhfVNf49HlNmeKcYdnYu95J6psog4ZENmA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "8dgJSrhUhRsKzRKz4oNbW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:41:41.277Z", + "updatedAt": "2023-02-20T05:48:06.273Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "expiresAt": "2025-02-05T20:05:50.565Z" + }, + "name": "Cloudimage by Scaleflex", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://045a5f8d-6fb7-4549-8c80-099cb55d21c8.ctfcloud.net/jBhp8AzIZeXrfI0zeJWlJ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNDVhNWY4ZC02ZmI3LTQ1NDktOGM4MC0wOTljYjU1ZDIxYzguY3RmY2xvdWQubmV0L2pCaHA4QXpJWmVYcmZJMHplSldsSi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=EVBK25gEJh1EODk1KDwwmW-1KaeRzYCMilrzxGQ8kf2qXoalcGGyYyP3iAstlHKKEU0EPL3hNuU2I5WAaXyGPtWozKpuVb1Yxy1hBAZ4A8rs1bk-8xuyNi7KVMqdiIxiodlEic9jhYliGi3o8OO~BrzgbOhhmk8z82nmCnPugLeRkDMNoToOxQBaECx82sHoLU9St~li1emGwEpge~vyUGds492JrIPY7I4jJlkF~oFyREmu1lp-Ex6I2HeHPb7UwHoknEFW68xPxXMvmsFElTJTB87na8u9InhjX8FmbrETpoqp1IJrls-ZZ9vB2bobgHfCq7L0AQPcf09YmHlUnA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "zjcnWgBknf9zB7IM9HZjE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:40:36.439Z", + "updatedAt": "2025-01-31T19:55:10.703Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.567Z" + }, + "name": "Cloudinary", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "src": "https://12b65bad-4767-4bf3-b575-081a11b73d6e.ctfcloud.net/6FhbjuO8cHcYuhDVTlDSCt/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xMmI2NWJhZC00NzY3LTRiZjMtYjU3NS0wODFhMTFiNzNkNmUuY3RmY2xvdWQubmV0LzZGaGJqdU84Y0hjWXVoRFZUbERTQ3QvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VWgVg86Y11r3EcZlCSQiUbnC3FKMbulbEQxE2PoCUccXh76aJ5yRrA8dCxHgo1dtpbrDtDHV~AFDqHEa9k7lj0Jz0n80EbyD1XccTXU~okMeFsY8tv8njrM9NFkZ1HWPEs1IJxbH~1yRZGoK3Xy0FlZHgvFOEDrHQVJzkiWGtrC23fJA1pTrrCE1t6md~6dnjaeS3stnTLdSlDUOl2RyuC-HPbPL-fQ8tnho6Vw1tVe354-~dwvNw-r691vxcRqnyqGEpOX~8BbGFelTVBXWhtHjaWNKwZvo2borL2~7C4gXdP8vUeIEAu8654ImBxRwd-fAHevM1E9j3WciT~MKVw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4Vy3oAINwRgnxakoTz06tG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-09-19T14:36:12.034Z", + "updatedAt": "2024-12-12T04:07:24.722Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2kPIZqSR5zjoujwXVx3dqK" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.568Z" + }, + "name": "Color Picker", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Allow custom value", + "default": true, + "id": "withCustomValue", + "type": "Boolean", + "labels": {} + } + ] + }, + "src": "https://a1ecf543-f4d1-4aa1-817e-6d409f83c098.ctfcloud.net/BPUQeVUgmogGJyeQ4zrBo/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hMWVjZjU0My1mNGQxLTRhYTEtODE3ZS02ZDQwOWY4M2MwOTguY3RmY2xvdWQubmV0L0JQVVFlVlVnbW9nR0p5ZVE0enJCby9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Q274MMz7AwBeHhWKu0cYYSuGylJpiQ4HhqPTwCj5Wxogx3uuwnBuJIfddlMQRkXdbxpta~PuHDBbyPFP9Ma6K7gtuM74~CqS1l9lvWQYqwQE~jGE2XtQJd93yB~p2D1qtkKTRQJgQgJMl7GQ8~-8BQCD3pu0AEtzYQb70D2aEzkq4iv31ZNkqzs5S9A8KvOqQGgOEpexKqhT711QXXahxwzilcwNn~j5NeeA~SumErparb5hs9Sqcnu9mogtwdmJMK4bc2XZpczG99lHY3VTc1xNRJN6rWdjiCFzv91XXvZdtbbw8bMtGXFvRKxsmI56VIVODPQPH72YxPi7KnNyzw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1ENTlXR17q1veUn74QF9ns", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "41cviVbFZhsyGL7zXM0N1b" + } + }, + "shared": true, + "createdAt": "2019-12-10T08:25:13.578Z", + "updatedAt": "2024-11-08T10:22:30.987Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4lnZtuZtUG8pqyhaQattvb" + } + }, + "expiresAt": "2025-02-05T20:05:50.569Z" + }, + "name": "Commerce Layer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "default": "skus", + "name": "Resource", + "options": [ + { + "skus": "Skus" + }, + { + "bundles": "Bundles" + }, + { + "sku_lists": "SKU lists" + }, + { + "markets": "Markets" + } + ], + "description": "Select which resource you want to get from Commerce Layer", + "id": "resource", + "type": "Enum", + "labels": {} + } + ] + }, + "src": "https://367b35c6-55c3-4128-8195-974177c99f8a.ctfcloud.net/KPiXheMx4f3O9e8Nm9N6m/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zNjdiMzVjNi01NWMzLTQxMjgtODE5NS05NzQxNzdjOTlmOGEuY3RmY2xvdWQubmV0L0tQaVhoZU14NGYzTzllOE5tOU42bS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Yc2QSu2IDk706Mp10vkrJkGZECA2i8rf0np4fnYqNMlqLeACrhbxubrkwngE2Irbf1JZpfHd4vBp~Odo3v9CZe2X0AdZBbhclqSzRimqcHdpx5DFA5xoGiz0PW4bZpDhBY0MulHO6FNJxUTE01sPKe20bgwKM4VqKqOYlDt1IzUN6adjz0LPii-COmmfPV9sw6nJxWIW4dOl5-HR6qdrsJlovricLaYVByix-b~MFo92VUHNGfaiHTawLie~KzHzQa1zBt4JvMf7N7S1OOcA2nzcwAs1BncuS5OpMRoS7JHI~H2yZ5uLWXDEph2Nfun4Zi9i-bihhqKUxZWD8kbtUg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3GBoHfsPvqyV74chvKCzNP", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0Ri9IrGVAtHGIMIwTwtXr1" + } + }, + "shared": true, + "createdAt": "2021-12-16T01:38:40.267Z", + "updatedAt": "2021-12-17T17:59:31.453Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0R27Cf3qXKc6BpvM7Ci8l9" + } + } + }, + "name": "Commerce.js App", + "src": "https://contentful-app.chec.io/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7yUlnpgAofvRDee0n6Ocv2", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-04T09:35:42.602Z", + "updatedAt": "2024-12-12T03:58:13.108Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.639Z" + }, + "name": "Commercetools", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://f87f74d2-2653-42c3-8603-d69b15a38ea4.ctfcloud.net/3ugsvOg1UjQN6bznZq0y4u/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mODdmNzRkMi0yNjUzLTQyYzMtODYwMy1kNjliMTVhMzhlYTQuY3RmY2xvdWQubmV0LzN1Z3N2T2cxVWpRTjZiem5acTB5NHUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=DEMeC5a6oS1cJWMrUGYyU4RaSAXM-XynZs2RAyg9NEDn5ATxeZFc3eGyjI-ooNKey-5I~X2Utrf9hekeMyOvV9nE4Tl7mmxoe0fMJqk0Grse-ppqzVc4qKSTwNlBqouMYlni3mxc3HUOkH49uKb5ek7KxIQxXv35R-S1skxDsLwI7EFl5N97baEe2O2TpTpGoTaE4g8jAcF~OqPTqzijpXG-WJiH5jE1aOYrNC75J2dnK1gYJK~F4ttXm5YNWvuHMHKlXj4Hv~a3u5HfkbER9gRjTIbWJZ22-Z45qg4ffWL6oRiHJFRiyl5a3OrrVwotg0aC7~cgx6qC0GzNi7UeBA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4TVVNA8Ske9pUajCsEXTly", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6stNN8XMtvIWzLchRHV7GI" + } + }, + "shared": true, + "createdAt": "2022-10-12T11:54:55.656Z", + "updatedAt": "2023-12-12T09:45:09.036Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5zswZwDK3vwrhiQKxwc9Db" + } + } + }, + "name": "Conditional Fields", + "src": "https://conditional-fields-app-production.netlify.app", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "RichText" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "6ZBUT0ZhkMRAZ7C1KNtbBk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5BAUF0LQ64OqOEs9hHF7Qz" + } + }, + "shared": true, + "createdAt": "2022-09-03T09:56:48.416Z", + "updatedAt": "2023-11-01T13:14:27.120Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5BxXAzpRsCxKLeeFJe9bFd" + } + }, + "expiresAt": "2025-02-05T20:05:50.640Z" + }, + "name": "Crowdin", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Project ID", + "description": "Crowdin Project ID (can be found in Project -> Tools -> API)", + "id": "projectId", + "type": "Number", + "required": true + } + ] + }, + "src": "https://e5cac9e2-f38a-4896-9780-e3162a0703de.ctfcloud.net/XU2X5bNtbkkL5NN4IWPqF/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNWNhYzllMi1mMzhhLTQ4OTYtOTc4MC1lMzE2MmEwNzAzZGUuY3RmY2xvdWQubmV0L1hVMlg1Yk50YmtrTDVOTjRJV1BxRi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=emM5YXmMa2tA057arTUtrWHPSuuNPy-ty2KEHYjJZRWeCyrnvOkFP~vmvBzEJcjJstN9rryPyrpUQv0vdBlJH2h1l5vz9GAhCanvNaVPyBVkQX21cOdiOQXHbCG16aK3HwdUkFg-1s4EtB99eQKJn1YbxUDgKqDEDVo00neDHh7JboJmaVdnKrXyQFR7hEQau3kd6dQlnSlzV~aV1xafmhEsIaQLfqOupE2jtMX6nyr03EsrY6hSedQ3Mo6qIyBqMOUP6xeBC95~axw4byaiAHgx7aCCc9dfEozX467uoC3tR1UINpW~A9LPEf3vrjadVB6~nbRFonZ8w3MTxqF6Rw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "57yilZEN9oBolHz9vD6jwY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5NC6Cypz4leJZnIweXydYZ" + } + }, + "shared": true, + "createdAt": "2022-11-21T19:14:13.271Z", + "updatedAt": "2023-01-04T07:50:26.877Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NxhJi8jFFu0Q5TtqyBJI5" + } + }, + "expiresAt": "2025-02-05T20:05:50.646Z" + }, + "name": "Digizuite DAM", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Digizuite MM URL", + "description": "Provide your media manager embedded URL", + "default": "https://dmo10-mm.digizuitedam.com/embedded/", + "id": "digizuiteMmUrl", + "type": "Symbol" + } + ] + }, + "src": "https://a8497d7d-1386-421d-b7b4-5519e5385368.ctfcloud.net/3Ddhfg3gD4xcWzuD9UROmq/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hODQ5N2Q3ZC0xMzg2LTQyMWQtYjdiNC01NTE5ZTUzODUzNjguY3RmY2xvdWQubmV0LzNEZGhmZzNnRDR4Y1d6dUQ5VVJPbXEvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VfSfBuHZ9vGE8iFYMU25i4zuXLa9GHSw~2lPLFtLCYhi8nOSWErRrHI-~DP7MvC3KMZQc1D3V3209IB5DarvXZsFuUt~ag-wFFFLhEdf-zISB0g4L4D5cruD2NQJftHKzvjGFa6ObguHx3dBlwVjRvl5-oQzN6zciCuGAC4j4hJDlfH3wSn6uJ39Sxl5QFjfop9LSMJToITvpHwOC1E~0L6RsqJcPI1tFQ2msArmlNUJonEVm5xIfrXYWHdMUz8dT6YAXIGsqDIxqfbBAA9pkNpj~KIjnFtq8o~b4k8XBOVNprAfROJhCQnbN-UOvPJKCdp49bMOOk~NUjQPj9pquA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4tDyevo7sMwvZhDGKzFHVw", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-08T18:11:25.804Z", + "updatedAt": "2025-01-31T19:55:21.389Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.647Z" + }, + "name": "Docs to Rich Text", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "RichText" + } + ] + } + ], + "parameters": {}, + "src": "https://93224f92-a680-497c-87c1-27bccd9663c2.ctfcloud.net/1CdS7ioTlUoESJvsHpEHgq/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85MzIyNGY5Mi1hNjgwLTQ5N2MtODdjMS0yN2JjY2Q5NjYzYzIuY3RmY2xvdWQubmV0LzFDZFM3aW9UbFVvRVNKdnNIcEVIZ3EvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dHiSmXtuqMJfGgES5FC7eqlN3~5TfM-cDrLZBnxgfFDTobs1ghgi95uXb-7aZuMv-beIukeSsOYsc-NLYW0b-mvGtgR94zIiGnAZgn1GiwwEVGUUE0HBFwkh4AmtDC6ye72JQPwRjM5KT4VRDwCqB18~ZsLFd8hSu3z2Qqh59QljQoZe0bQArrdS6i2bPjg3jWGjy~3RIAujWNMc3Ced93wAhsFaqPL2ded1BOoJ09kYxihSY31ovSHIuL~w6RFBo3w-~Ld9bxaAIM9V8ojdk0TjyvHWLwltmu7q3K0NJHSDiEF64D-zinoctYoDpcSyeLl3aEGBZvClAcxyqF55yQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6YdAwxoPHopeTeuwh43UJu", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:12:53.401Z", + "updatedAt": "2024-12-12T03:54:39.597Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.649Z" + }, + "name": "Dropbox", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://e50de2fd-6464-4b67-8c00-dd928f0737ec.ctfcloud.net/4v8nupiM6QKbO8TtSJj1oK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNTBkZTJmZC02NDY0LTRiNjctOGMwMC1kZDkyOGYwNzM3ZWMuY3RmY2xvdWQubmV0LzR2OG51cGlNNlFLYk84VHRTSmoxb0svaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=PUF8yaiTj1r~ffVxS74PChw677LMxLQwKaL0lrX92147BT5Vgm44zPw-2sTk9iZAy~Ji8Sx2~Zy9WNcENPCw1eOAGZYw4A94GDoQAaFKWWrBRyUJovqQoHmze0eX~jtQ5d071HvlrbzQ9bMYRYQVMsQBJzlc455cO-kpgbLRzC~1r7aE8QAibBWMNg7i4mis69tmzs2Gsf0wZiCKpONa00790WBeRW8~U8ek2Ll67CPrLNjSHa3jecwq~LSsU4WdjT2z62LYrCpYUieAoQVx-oj09S9R~Q06OV986~hcdbeap3dJP43IGrrWmo0V~ULdYOHrUhjVULlK7B7uGTGOoA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6JCQ2X5GbvJ4xRGEJbWIrz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1JMZ8tf4t7c5mnKzAELjRD" + } + }, + "shared": true, + "createdAt": "2022-02-22T13:29:05.836Z", + "updatedAt": "2024-02-12T13:37:38.510Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1JKGArcrenIZjNrFPEXnxL" + } + } + }, + "name": "EasyTranslate", + "src": "https://contentful-app.easytranslate.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "EasyTranslate", + "path": "/" + } + } + ], + "parameters": {} + }, + { + "sys": { + "id": "2NHTUlzatPT8jLceaVpkG5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "06jjPu1EENrkBYwR2X37wJ" + } + }, + "shared": true, + "createdAt": "2021-07-05T12:08:08.382Z", + "updatedAt": "2024-12-04T09:03:08.087Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "065tcZyXh4M0Lj7LQGal9f" + } + }, + "expiresAt": "2025-02-05T20:05:50.650Z" + }, + "name": "emporix", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://5c0e7571-6b5a-4e0d-bb56-8d23af300189.ctfcloud.net/Mmk1l7wy0kjK0QVjwwPjr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81YzBlNzU3MS02YjVhLTRlMGQtYmI1Ni04ZDIzYWYzMDAxODkuY3RmY2xvdWQubmV0L01tazFsN3d5MGtqSzBRVmp3d1Bqci9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=LuccL9U~~9Ut6NDwty3GGPVf1D6o0ge6FdJVGkllCHwUmJ0VBskCshMokSLHKI8CHZYS6AIPuDiq7fx2Uv6klmU9seN6IkqdqrA31blVpyxW~-rtPI7xuRckDadgnHE07qO9dWGv~9~IlXUHKaxyE6rUJKWnaRYXFy5pHuVONqZmItSb8chkxGEiMovkYJhLqVQwCQCcRzYlCF-tZy1QO5M1tTVTActERmUOzZpKIzIM0So-AmFS4d0P-Ea7RnfZkGdpxa~5ZFrgTshBrGJbfIOBt~DeBC21kR3eEj8rqVY7R-ghaqY8~xk85yuBNvPeg3lIeNtL33ysSkndybYwcg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7EFM8G3tm6fJwrsPRL0VpW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-10-28T21:47:52.085Z", + "updatedAt": "2025-01-31T19:55:22.313Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "24lQRrtm3GTwuPHzmOqcFY" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.652Z" + }, + "name": "Eppo", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "instance": [], + "installation": [ + { + "name": "Eppo API Key", + "id": "eppoApiKey", + "type": "Symbol", + "required": true + }, + { + "name": "Default Entity ID", + "type": "Number", + "id": "defaultEntityId" + }, + { + "name": "Default Assignment Source ID", + "type": "Number", + "id": "defaultAssignmentSourceId" + }, + { + "name": "Eppo API Base URL", + "id": "eppoApiBaseUrl", + "type": "Symbol", + "required": true + } + ] + }, + "src": "https://fb8d948e-7b23-4dff-a2b0-834c18d9ac3c.ctfcloud.net/4ESGEzGXoDovOUwD348Rs5/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYjhkOTQ4ZS03YjIzLTRkZmYtYTJiMC04MzRjMThkOWFjM2MuY3RmY2xvdWQubmV0LzRFU0dFekdYb0Rvdk9Vd0QzNDhSczUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=XwXzHKXkuh-KtLjbMlcTlY9qHW0ug-w3exKEUNu6SF8xDu0B6LrgivICEx53iBioGuM9fvZmTjNk3rO~c7r-1BxPy0QT46EE56pinb~JpuUp3dJ6bZvdIrd4N77TxItN7XVInjXLVQDlTeSuqrPCh7X7LLlJ25bRVivukQ~OgBNjP2Fw13EJsaB4f1~J3DME9yzj75YXQvSeiLCyTsLTiEvqjqxRIrPicE5BBa1ta2IBe9B4HvI8XotKnJranfRoI~xNdkhRpnDHSNxo~ch8KMnYbbQyCgynkA7rJEImdYn5ZC3Im36udbYZyCJOL-mdjI8V-XZfPhi3mfDtCn-XHg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7GbS2x3SdVh7D2hb1FFsS6", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T16:38:03.221Z", + "updatedAt": "2025-01-31T19:55:21.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.653Z" + }, + "name": "FlexFields", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "src": "https://fc5b7a2d-eb90-4d14-9323-ab3c41126bf2.ctfcloud.net/4bdHOGjNjrUGUzsScRnt4J/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYzViN2EyZC1lYjkwLTRkMTQtOTMyMy1hYjNjNDExMjZiZjIuY3RmY2xvdWQubmV0LzRiZEhPR2pOanJVR1V6c1NjUm50NEovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=PoAu57KDAj0OTOYJ5W3YG4OSmNVroZFQnnZVp9Xl1R9PZl8PMB0vNmfLa4EQmYo9eIFgJwadVjuUsiMAeEARjH4WrmYMnRom3Se48~5QzjMGsv~Ir4h-zmSiZEaH0sQadwkwITJ9GPdkGpq~NueHYeQpSOnOMMeIx1A0qniuTFFwJZPA09luyAkAek9kZWN9lp06qB~YIDmP3AnJqh0Tnqn4jHcTvMGDSc9nZsMDB7rMPXaTDqPNXu0a7JL1xeryvCMFswFaGTqZtdDGATLcmBdb8ZrI0rtl2rE7gj2k-gYF5XCoqT62RlxAmVAO4nEsbxcWk-J0ir-WEU1kjkHaVg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5wHGALSJtz7y2EQOLfGhKH", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-11-13T15:14:21.970Z", + "updatedAt": "2024-12-12T03:50:27.317Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.655Z" + }, + "name": "Frontify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://b59db6f3-efe4-4a4f-bf0d-91b9048d8cd3.ctfcloud.net/6QmWeg6X7mplYaVOORmlau/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iNTlkYjZmMy1lZmU0LTRhNGYtYmYwZC05MWI5MDQ4ZDhjZDMuY3RmY2xvdWQubmV0LzZRbVdlZzZYN21wbFlhVk9PUm1sYXUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mbv9nIZjuo5bEOnhLLj1iV5kIXzp-1JDt~oAdJOt0xtfzGQpgULeHBZKRwv-HwMIy5qLtZarCkhY1DEfDEera7Wr8O~SFBR1plzx6OWyS6s6axUgINYbw~tyhMsByQdJvEBh4N6twFXrk468tDNypPNH961WI7wz3tOKrI7308IP~uusqgYldPJPK--~JHCOAEOaKkS81BzmUGw4GDH2YDSODJlydeaz-3rN846l4p2QeBYUpv4QSP5JgtdNlu25aFKtyye0OlNtX68NPsQ7gTB0p5gHjnJleqSDfvNfeGMPFf7VRenjrWGA3Qrz5KUWOkkdgY4v~z6J5RH99i4yww__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2K5TL6cBI8hXXRvuDvg1K", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4noCerPY9pAzAwYUXcWMEE" + } + }, + "shared": true, + "createdAt": "2021-09-15T13:07:45.069Z", + "updatedAt": "2022-02-14T10:11:11.672Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4nnAK8Q6dCVvPtz8VRVArC" + } + }, + "expiresAt": "2025-02-05T20:05:50.656Z" + }, + "name": "Frosmo Segments", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://017432cb-49c3-40d0-86b4-1d636efb41a4.ctfcloud.net/4w6N8nK38uOMwV1OoT6sgE/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMTc0MzJjYi00OWMzLTQwZDAtODZiNC0xZDYzNmVmYjQxYTQuY3RmY2xvdWQubmV0LzR3Nk44bkszOHVPTXdWMU9vVDZzZ0UvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=SL3T7T1r0hjJcDRaiO2fcnhlhjCgk91wKdMCwdKE6vS5kHClUV4MVReMyF1YU~5-stihULWk-3qUZW4sQuLyntYx41n3L3YLEvrmdtGdBt2wzYOvdhwfYb78BckauIG7GDPbK7rhhm8XQmGVIQ-WTq76jbwdp3QVUq6gVp9yNlMY71jm0grzHO7dv2rVhP768Gpih88HuQfMhB6Mq97gIPO82CgdFXF0raYGVkRWBqHVbzpNfD5zd00SqQ6Ah4jLrltSmyhrnOW64SvA1Ea8m3Il~zmMMpbF6g2Ot1XU2Mj~~N~O9ab40mI62Gpib~~XHhUKFiIFRNDfEqrfapPF~Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4kJlo5koeq6SSrirCFQAeJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pw414MkO7J58dWK105e0u" + } + }, + "shared": true, + "createdAt": "2020-10-23T21:54:41.281Z", + "updatedAt": "2020-10-23T21:54:41.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3SUN5V3fIJSPUEbu8EDepA" + } + } + }, + "name": "GlobalLink Connect", + "src": "https://gl-contentful.translations.com/marketplace/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GlobalLink Connect", + "path": "/globallink" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5DlxOS0KvGS1Wk362xgvbN", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-02-17T22:10:38.871Z", + "updatedAt": "2024-12-17T22:46:44.282Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.657Z" + }, + "name": "Google Analytics 4", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://b922ef2b-607e-4411-9386-597b9fac89a7.ctfcloud.net/VIr4O387Fuw3MsJwWkmCU/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iOTIyZWYyYi02MDdlLTQ0MTEtOTM4Ni01OTdiOWZhYzg5YTcuY3RmY2xvdWQubmV0L1ZJcjRPMzg3RnV3M01zSndXa21DVS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=aSJjHnmiizZmf0UUYnToUGzfS23LZXoVBMgpTVlKZFtqqnTus~ZIhgnUM9xIM44iH1dwR2rdm~SYYax9Xc2h6zKrQ71sU~Dts4yVycCaqs70qtDmu7rEFfoYppfl9z6k0yOcmG2i9j9KmfKp72PmaLax4SOSveEiXVPlPYGvxqUW0Fnz93-wb0kqOMXLyRYxqbDLCQsby9qS4hU1YHcO1t0Dsq~y00Rce5hh6gc985MMWH8rZni-hdeX11FQ4d4uVK7APNMWELEckihFJrI-cgS4PPjjuD3yPvUtOPI522NVzesUMUdXo1YF1biK-A-20P1miQ9Wfe-g58BHqjF00Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4fD58pKkn4Tdlm7IW9FbvK", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "6tedZUtnDb5ugxASlwKsmz" + } + }, + "shared": true, + "createdAt": "2021-09-21T19:57:43.796Z", + "updatedAt": "2023-10-05T18:37:33.749Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6t4JdmDzUzpppfl8710tKf" + } + } + }, + "name": "GPI Translation Services Connector", + "src": "https://contentful.globalizationpartners.com/", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "GPI Translation Services Connector", + "path": "/gpi-tsc" + } + } + ], + "parameters": { + "instance": [ + { + "name": "Auth Token", + "description": "Auth Token", + "default": "", + "id": "authToken", + "type": "Symbol", + "required": true + }, + { + "name": "secretKey", + "id": "secretKey", + "type": "Symbol", + "required": true + } + ] + } + }, + { + "sys": { + "id": "6o8NJOeW54fY2UYY8zQUZY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-15T21:07:30.751Z", + "updatedAt": "2025-01-21T21:13:45.907Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.659Z" + }, + "name": "GraphiQL", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphiQL", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://d1ef6648-d9c8-4616-9eb6-e28af914b872.ctfcloud.net/73xzvb2f2hBsNrd6SmQOqh/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kMWVmNjY0OC1kOWM4LTQ2MTYtOWViNi1lMjhhZjkxNGI4NzIuY3RmY2xvdWQubmV0LzczeHp2YjJmMmhCc05yZDZTbVFPcWgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=OTJBUdjS2cxzhuwWhxlR6Ez0SJ0zf~ch8iel59eHwXDrxp-crEgOB~IUEU5R5jyNiQQWfkWLDe6L0RRbH5j2G09mLQhB2vJVRNe7GxkUMuXGe~PyMqwoFbFe0iCVMHLJGA5OeH6lAKZV-xpEFFrVtCNsXpjK9YgwmI9AL5LodwnljGOqQ8qP23~sTTR5mOuQiRpkIVQUFZchKpYY~kPG2zZig564iUbgqJZG9G4tSgfkAe8eZp2vCoCqC7XDFkjvHPwS5IGnHVPPUgsvQhgJDzoeXCw~4PXvfUcMb1vQoWD7KJeK0Y~MmvN9vqIJrwjRCsbXwRWKwuugQNsUfLLBUw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "66frtrAqmWSowDJzQNDiD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-08-18T12:40:08.484Z", + "updatedAt": "2025-01-21T21:09:51.178Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "6dV4yzcXnTFJpBQNTwolmx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.660Z" + }, + "name": "GraphQL Playground", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "GraphQL Playground", + "path": "/graphql" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://033bad1b-c8e2-4ee5-b8f8-f4c19c33ca37.ctfcloud.net/5PU7QvhB9REZTiOd5VqorB/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMzNiYWQxYi1jOGUyLTRlZTUtYjhmOC1mNGMxOWMzM2NhMzcuY3RmY2xvdWQubmV0LzVQVTdRdmhCOVJFWlRpT2Q1VnFvckIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=K0R8mmpJq9hDtBxO5zNbe68mbUcB2XyvAwSZjjVGpq3DpDKOA~112NOFHTz26cogWeiE87Tan4h8yj1vwv-zD2lKq1lubqMsjYIOczGngLXRcKZ9EZdAkA208PsvoYExQPmhvOSNwr6a3Y353J0CKJXdZCt0P2AqzjtChlTdZOGqhGITZftC8B3VbZzLvtt4A0xdNF6OlfF551B5rZdhShT0uRK9Y7fHM~qDTL3HVdHs4FAf2Vz4StQklkuSFVz4zi9mxMqK-T~LHeDS~GhtZZmBn8JiBZWQOIiRJWXk3G20G2GuSu291DwW37Nk0RP5sbmGj1ybH4wkJnbZ20mrZg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "2m6GPV4H181rNthvN0yxdJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-12-10T17:33:24.519Z", + "updatedAt": "2025-01-31T19:55:32.302Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.662Z" + }, + "name": "GrowthBook Experiment", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://4d6e0680-9bd4-4db3-8163-1fe8138283e7.ctfcloud.net/6TMDCMeZ7auO6EVJyPxxJr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80ZDZlMDY4MC05YmQ0LTRkYjMtODE2My0xZmU4MTM4MjgzZTcuY3RmY2xvdWQubmV0LzZUTURDTWVaN2F1TzZFVkp5UHh4SnIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=FGzagQsQyoKafyj1jNWeNz2OecJ5kpWPksTNuAfWvpsEeepqxFwRYQ0zRqiPrdeeBJQs8WqkEc1haZJXfCz0lGJJKL0dhx~ElzO~9f~gddKWUMiVXBVe3yshzQJpIts00sZe4o3f3b41IqwYnLUh9pwv5yutg1urmYlguUTNieI5Xvh3K6NGz2Ei2wYPkIKE--PcBG4OHGahcmqZYbi9kWLL1zzbYQtIaS~OxC0fSO1k35aYwd7CX3~0vxVz47iyDQMlgVyvr~aHpctw7JWLLxxoomFPfTH5K0vp6M41u5stfnvK4aCjZk2kYBJzebxEpDZEYl3LYZugUgmrZZh7Qw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "342Q2DqCjmsdN5BJCEPkrJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-10-01T09:21:49.757Z", + "updatedAt": "2025-01-21T21:05:59.716Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.663Z" + }, + "name": "Image Focal Point", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://64b6f241-4926-436c-bd20-edc8a218cfef.ctfcloud.net/H8Fs4Mxz7w5lYyozY2tKK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82NGI2ZjI0MS00OTI2LTQzNmMtYmQyMC1lZGM4YTIxOGNmZWYuY3RmY2xvdWQubmV0L0g4RnM0TXh6N3c1bFl5b3pZMnRLSy9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=KOYY764IkbMHGIBJx~Ucel7YDRoPPZyNgz2jc3nxjlUpK-tbgr4VfP~GmpNOPr20hBhB9WYzhrGYaO8DqhZfl5y6XOT1wt7aBuB~n7gLQOjD9E-5Kq7Q--66xFCy-Cvhi3okHNmuQNL0Uy4J-EUoqhnE8RU1N1nB5ckczYgSJXfYWVGALA~KuG0GljLahTtY6aO7VkFaYdj1UnC7JiGQMxzZ2OYIlN9Db-qw2LKqrNmqXX5O1tas81KTbwV5NoAd0Wx2~G7UfAKgx3GLzAE~y5VhulfFHUIW-mFp3fbxD4zn~9zg7R0tmrhbktaOXQiWL2~XCveJNFvEC7f2DPNKDw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3BGvGx9eF1bYGJw7tmHdXv", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-11-20T20:51:38.909Z", + "updatedAt": "2025-01-31T19:55:32.009Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cesFtOix28UbXshy4iXK8" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.664Z" + }, + "name": "Image Hotspot Creator", + "locations": [ + { + "location": "entry-editor" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://768ac43b-36a2-4e75-ad0f-0beff2c245c5.ctfcloud.net/zPnHdZOjqEbeXunoXEzaL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83NjhhYzQzYi0zNmEyLTRlNzUtYWQwZi0wYmVmZjJjMjQ1YzUuY3RmY2xvdWQubmV0L3pQbkhkWk9qcUViZVh1bm9YRXphTC9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=Z8QIL6UvjubYDVY4uiEVL2JF~bcgaKGPC8XrLOXgED1qytn3dkzCs1O5N-h9nMu5by5DxevGA7KQnmHJ2oVYaCTIc6znejmtzFEphhUwd3K25RRW76jWbk9lizqvZIBCOa7--EJyVyb2FMTGLymCjthPgJkknfGXOgyrFEk8lfZaNF85-MJbuXExBmJWcN-2XU~rcb-gqvkzDZshrqiU9CSwjjsn2yoq8FFT3-2evS8jkUrVP9sMoUOSMlqD~R3yJjPC0Tu-dpko2oMvsl6oOo72vgE2HzT69FyP1hRdd3GRZZGdKukr3ugT8nim~6NrdxNw8bFK9ODmhc7nICyxLw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7v6c0ylAgt7KSAmgedz4ed", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0XenNsx0QCqtKgZsXtiWJk" + } + }, + "shared": true, + "createdAt": "2021-01-17T00:35:30.734Z", + "updatedAt": "2022-08-11T17:23:28.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0XdiloXVewCZvwsuNzTocy" + } + } + }, + "name": "imgix", + "src": "https://contentful-psi.vercel.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "z0uyReYKxjYGR7Aj7DjFc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "3jnZ6YgPY4u2MQrtKXZ038" + } + }, + "shared": true, + "createdAt": "2020-08-20T17:00:06.260Z", + "updatedAt": "2021-08-23T12:31:57.540Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3jmJyK2gmnvmAykKLpzAEO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0OqydBwBE7LCTESG8kkZ0G" + } + } + }, + "name": "IntelligenceBank", + "src": "https://contentfulconnector.intelligencebank.com/", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "page", + "navigationItem": { + "name": "IntelligenceBank", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5q6VO8UT97XSTix4gnRbPE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T22:55:41.032Z", + "updatedAt": "2025-01-31T19:55:32.928Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.666Z" + }, + "name": "Intershop", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": {}, + "src": "https://b21f4978-6506-4fa6-8c86-5995705c8af6.ctfcloud.net/3PXmdcgKb7rerJVp7ADJaI/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9iMjFmNDk3OC02NTA2LTRmYTYtOGM4Ni01OTk1NzA1YzhhZjYuY3RmY2xvdWQubmV0LzNQWG1kY2dLYjdyZXJKVnA3QURKYUkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Ul8~HZJX86qnlefKwetKrN6PDIQu~S26jHqOY8CeW-N3mreSskilOq-0mm7pVwRF6TQBfr7dgK8vqK8x~wbcfwKEDvqeYoRUnT5AQdOk1vFibWEAwTL6B63N70V0rdeD~HeK2WV0fJuybSbQYL~jwUMaVnesMKQCOM3nbAMcdMEc87R02vZCSNjMe3Zcw-Uc7HkURE-K8FpznadriHTG48Mw08-n6KvkunE06Vi71sajIDELZNPi6cac~Q84E3p79xkprlqMyT2i9rzNKU6jlKqhj7hXVfrxmPE68RCNP7sLGD0hx7n9SGS7bZ4m1LPm64yUdlhpS0NrKesTAa~M2A__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3tkiX2zjB7aqEiiKX5hRwc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-17T14:29:02.114Z", + "updatedAt": "2020-04-27T12:28:08.688Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Jira", + "src": "https://app.jira.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "3fLf4DnjbkN1yUA2V2fMgE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-07-11T15:16:00.763Z", + "updatedAt": "2025-01-21T20:58:29.937Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FJf3IvgmQotV5As5zpGhc" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.667Z" + }, + "name": "JSON Viewer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "src": "https://6aec7260-34d8-407f-8e73-6e14bf2a1cd0.ctfcloud.net/3LBCSIpWCbmtuGOazPHMDQ/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82YWVjNzI2MC0zNGQ4LTQwN2YtOGU3My02ZTE0YmYyYTFjZDAuY3RmY2xvdWQubmV0LzNMQkNTSXBXQ2JtdHVHT2F6UEhNRFEvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=YNJAkn7~idzxQFs-EvO~ExlJw7gReLNyyd9bMZ6wE2a7240Y1mBnl8zxvCzzh2H035~~sJfbvnv16r~WgKeWY5aAG60bh~WQKuLl1RSs~xmWRuOTPX1dVb~mlj6MYuOOJ0fP89GNewaoN9OF-MHna5cM06NKl5f348Fo-HKeaOrBwTlQWvk1t3IJBAm3qj1YX6~am4pG-YDFPfPuPD72V4m22QWO0cKqIdzlmujTR-f0enulkIz4rdqgJmM-7EVu96RF2GEmRXWxWWys4H-bLdtBqVmdCDPTFPYRQ7-0i6yiSlMehTnMbCjUMF23Ico5meD24BuBXMpIPrqyFOWJQA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "znp3ZloaqTn5g5VankRqD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2cARw0ayWLd1vWvA3xX3pZ" + } + }, + "shared": true, + "createdAt": "2022-03-02T17:42:08.820Z", + "updatedAt": "2023-03-08T10:39:04.851Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2cxxu5IH4VwGITxLRg03NB" + } + } + }, + "name": "Kameleoon", + "src": "https://contentful-app.kameleoon.com", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Boolean" + }, + { + "type": "Location" + }, + { + "type": "Object" + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + } + ] + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "4F6cpGJEuEzZDPTno9nq1f", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7e3UZK73OoV22a7UaWtGZv" + } + }, + "shared": true, + "createdAt": "2021-11-17T19:33:04.159Z", + "updatedAt": "2021-12-28T15:27:21.195Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7dRVfKdqcMHRYJwRaifUJn" + } + }, + "expiresAt": "2025-02-05T20:05:50.668Z" + }, + "name": "Kibo Commerce", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + }, + { + "type": "Integer" + }, + { + "type": "Number" + }, + { + "type": "Date" + }, + { + "type": "Location" + }, + { + "type": "Boolean" + }, + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Asset" + } + }, + { + "type": "Link", + "linkType": "Asset" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://993555c8-30b6-4571-8388-c64f3e09abcd.ctfcloud.net/6sSvqEM7xGmmKkGT81kTXj/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85OTM1NTVjOC0zMGI2LTQ1NzEtODM4OC1jNjRmM2UwOWFiY2QuY3RmY2xvdWQubmV0LzZzU3ZxRU03eEdtbUtrR1Q4MWtUWGovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Nb8cdYnVEvQSGbdw2CJHGnG35vfvurVW3VO4MjmsO4zU8N5IHq9XUiuv4NGZW9s~SNPaQAac27ubwBtJ1bxI8nNlu06f9DoqGMDB~7byN59k541FFD-g-GsG9MOiWnO2WSdTrCuwiW2qy1B5YKx3ljhFzBsMysw2xnJwQESJCwbkXtjFogVzibcUOGMS88~XZgIXIoOK6sCg3zdwY-rjdoyAFicHcIk4dTSJ5AvBEcc04VgLMAzwxwdRwvPi0c2DojI5WhOD8JrT1QitP1SzMoZcsNA3B80M-B1EQ8c100P7sjrTrSV9BWI30LJeNpdrr6Wiwq4LltrhYj4Qiws7Iw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4uUaxd0lfvVJpY7PsmKBb5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7uWRGc4lv1K36wcfhbdCJF" + } + }, + "shared": true, + "createdAt": "2021-01-15T02:26:20.922Z", + "updatedAt": "2024-01-16T19:43:43.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "31XdODbMrVICB7JEdcInIa" + } + } + }, + "name": "Lilt", + "src": "https://storage.googleapis.com/lilt_contentful/index.html?ignoreCache=1", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "10ec9foxs591x36kLhTYT2", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "7pFE7su6qcypDfkpytSWYC" + } + }, + "shared": true, + "createdAt": "2023-03-15T07:21:27.107Z", + "updatedAt": "2023-03-15T07:24:58.409Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7miHtW58hNWv7IeeY7iCQE" + } + } + }, + "name": "Linguiny", + "src": "https://contentful-i18n.vercel.app", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "7tmjHWJ6M0KGqrOKrhHdhe", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "03vYXC72caQvKlMA5tgu1L" + } + }, + "shared": true, + "createdAt": "2022-03-10T08:53:36.303Z", + "updatedAt": "2024-08-05T11:53:02.236Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "26cKXW6ey72xUG0NahqVl0" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0IlkG3SeMEfIDd7qVLiybN" + } + }, + "expiresAt": "2025-02-05T20:05:50.669Z" + }, + "name": "Lionbridge Connector", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Lionbridge Connector", + "path": "/" + } + } + ], + "src": "https://f58eaa10-50bc-4b29-b440-0b7784180a38.ctfcloud.net/1rDLwN9sFbPwhECR6lXCJe/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mNThlYWExMC01MGJjLTRiMjktYjQ0MC0wYjc3ODQxODBhMzguY3RmY2xvdWQubmV0LzFyREx3TjlzRmJQd2hFQ1I2bFhDSmUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=FVTObH2Frbk12YJcC~Appcxk-fl2BR1HpLshh4dRRoSKd5wq7onH4jIQvNqUhmBTbAfzOsTlQm7uPDQEKPJ3TwQVOkjHC6n~C9sEpY3njDqBZiUxJxb1KWdusCSbzs~8uvEeBXAkTmaOmxDuD~CrFKkWVnGBR1bUfwruydBuNDv7F3TOwhgj8q2RNRg3WHbwY~kCfqOMvrOVKHT9vwPHRYdVtgexAE1iC6mwlSSmBhbeJn~f1g7qcGVsOnRoXt4ohn~qArYX9Celkk6Ms8LKjijD-e8SMKC62tDrE0p9bQWYqdc3yTxs8hsBjh~---vJfrCWkDs2eG1DasJQGEpt3g__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3kMGvoFeVdMPIkolBPdPIg", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-11-08T17:57:44.339Z", + "updatedAt": "2025-01-31T19:55:43.504Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "668Oko9O5Fb63WY5P2lss6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.671Z" + }, + "name": "Live Story", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + } + ], + "parameters": { + "installation": [ + { + "name": "Content Type ID", + "type": "Symbol", + "id": "contentTypeId" + }, + { + "name": "Title Field Id", + "type": "Symbol", + "id": "titleFieldId" + }, + { + "name": "Content Id Field Id", + "type": "Symbol", + "id": "contentIdFieldId" + }, + { + "name": "Content Type Field Id", + "type": "Symbol", + "id": "contentTypeFieldId" + } + ] + }, + "src": "https://6d95f02d-6e4e-4289-acfa-e4acb61e5aec.ctfcloud.net/ZCnbGHkTsovHNPKtQeIMb/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82ZDk1ZjAyZC02ZTRlLTQyODktYWNmYS1lNGFjYjYxZTVhZWMuY3RmY2xvdWQubmV0L1pDbmJHSGtUc292SE5QS3RRZUlNYi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=fdR2lnmMleQy~l0-h1T2PaS9d5HXcNWwTqQv5VSUJskIJwVxrBupe8lXWVrgf1aUOQfIgTDJ6qqGF6awtOL~2vLFoY3awmYjqVktiGiBr1f2U57CeYa7~9W8PcUR~rBXQ87C9CagrP~75SghUwVu2JZL7Lymxm7ty9V8aqWNB2gqnRC39wYSi9OsuhUQx6ORqnNKljmW~e-qX7po14yQrZ4NnmQOO28JItozCf-HUa7opw0pTWyg18Fwacbmbz~3kjThty-LxLpMO8oSFiLVIl58QZdCzmeb7B9uM9QDUgpAq8RoXpU71zxjU9cGMjPV-5QH~SlwHj3fiXqRELB7pw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "70ssKop5SL98q1JOJy3AcA", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5mrBsdeobqqOHiCIyhvJbp" + } + }, + "shared": true, + "createdAt": "2023-07-04T09:49:39.244Z", + "updatedAt": "2024-03-29T21:18:50.344Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5mn4ytNTDxT1pYPuWpZ5QX" + } + }, + "expiresAt": "2025-02-05T20:05:50.672Z" + }, + "name": "Lokalise", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://e63dc4d7-e723-4618-9bed-12694008d404.ctfcloud.net/3GEdi69xDtJX4nNQgJSTny/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNjNkYzRkNy1lNzIzLTQ2MTgtOWJlZC0xMjY5NDAwOGQ0MDQuY3RmY2xvdWQubmV0LzNHRWRpNjl4RHRKWDRuTlFnSlNUbnkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=bpETqI4oiUJ83NziRYgstLKZZytZSgSB~dYUOYyk-q1HTWYH25~G6ZlmNqbP7KnYAjrbIU7ujmO4asoZogWcsQgopIlSOsKmFi8hWWWaTqVo-zrHNUpL1q~CyPEZpLownXqEWr-fbhi0wlMRTwXp~Svox~X7KvzInC-72PtQhXC4JCVX9j15FaF9wQ8QnEnUpaPIAa2wOVke-nGokNiCnycs78W8rHMHkK-CiXQr7KiWk1J~MuKq-GvsUMcfA1tuYfp~~uo-C79XdMfI-na0L5n6xIyB4jbJzcDQjsRuBv9V6uK9ewi-BqxtT74FCFKvN-6Fp3qQxIK0deKA9QUvqA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "cQeaauOu1yUCYVhQ00atE", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-05-10T13:12:32.052Z", + "updatedAt": "2025-01-29T09:05:31.096Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7du7N9sCpTXRcuH75iBAX2" + } + }, + "expiresAt": "2025-02-05T20:05:50.673Z" + }, + "name": "Merge", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page", + "navigationItem": { + "name": "Merge", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + }, + "src": "https://06ce4a11-ec2b-4004-b40a-eae3f7ba5e96.ctfcloud.net/7dgeATZJnWgT3vi8RE60Ow/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNmNlNGExMS1lYzJiLTQwMDQtYjQwYS1lYWUzZjdiYTVlOTYuY3RmY2xvdWQubmV0LzdkZ2VBVFpKbldnVDN2aThSRTYwT3cvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Mumh1lRxbk62viT2xIfp1tfzjsXz14zTyTzSPE3VdmHiVUeDt6DU1143JVevFCPRRIoeLPO8mw6d90qmuLRbBSv7gT9PgTd-rVPF9LLl~DK3ctQjxtbueVDJ8N7f6ASEQz-XCejpU~ID5Km9gUT8b2xZJ0V9n95E9IyRupXec-uAZB3~zGS0YFh7BtrNaBKW4MXREDJGYddVLJ~WNNVt16Nw7hnQ6xFYaMCV7FulhyUbKXtKRVi67V5Lx2Bymgn~0cVQHLqwq3jLUzP6GQSz3lOHeuZU2pVhTbvXYQi9pvEAZRBFgylIuWeQjac55M6Jy9MibPUfZN-f5bnDY91jBA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7lcE2IF8TiXXKiMj2UGM8k", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-10-24T18:21:06.358Z", + "updatedAt": "2025-01-21T20:56:08.386Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.674Z" + }, + "name": "Microsoft Teams", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://f13c2a01-b0c6-49f8-b75a-01dc8ec46174.ctfcloud.net/13NLM92PvmJCXTeSHS2uMT/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mMTNjMmEwMS1iMGM2LTQ5ZjgtYjc1YS0wMWRjOGVjNDYxNzQuY3RmY2xvdWQubmV0LzEzTkxNOTJQdm1KQ1hUZVNIUzJ1TVQvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=AMH~KMiZY7pdor07BcTLspnv4E-Of0KuZzvWQcBhK-Y1Ei1v0yfpJ4yeAMbOR6m0LCoz65~VSP5vwnqyafYdp988aL0K7pLj7AppBMDEyNtmI~PuC0jk7uA9ngPgm4l-6wxktWIY9JrKuo7uBwBREIhkoqdQ9UzZlpGcCfOBVxsnmwzq82lv8eE7mHdm2hd6mPVToLcVnW36PoyMJbtuDLwoIwxPdbPKMeORc7RFYv32MnbafEP7DHb~pqqIxUm4CH6UX2NkYb75XGckouBYQUcXGZyqCI7hGX3T8D0mglRxYLg9cK3EuHyq9IeTtKzpCv00s08Hb60a30KQZsdjYg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5l4WmuXdhJGcADHfCm1v4k", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-05-20T07:12:51.850Z", + "updatedAt": "2025-01-21T20:51:19.536Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.675Z" + }, + "name": "Mux", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://af749859-2493-46d0-993b-3eec3084d760.ctfcloud.net/1RwnoLYeRXZvJwc8QGfFAE/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9hZjc0OTg1OS0yNDkzLTQ2ZDAtOTkzYi0zZWVjMzA4NGQ3NjAuY3RmY2xvdWQubmV0LzFSd25vTFllUlhadkp3YzhRR2ZGQUUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=WmCGymoiVyBe~I3ewFHYeOvp6KlKkDCwri1~LjpNp7pI2u820hjwz~haZdH9sBOJ7gCEMLxeCO0ao94RHWLF1f2HuGT~Qzj-KLsYG~9kORBSEFpuGdOTbXzYTx5qB1yMOTcYBXXX0HvE2Q250vn-KkfdII6iIDPA5ByUGr69pIR3UKaFRGp9nr8yfA4xunP8jk4IJT47RyXO0IsT0FlW9J1PQ1j-6Z9MapRVLPCvpfgduNPKgRxdJkQH7kEedkchArMnQ02aXylSXgFOVv7X2gZskqGgAlYinqz1jLnpl16WiQzw2M7RMFo2KQRjg65lDJ0JXhB7TTmz8W3YWYhS6w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1VchawWvbIClHuMIyxwR5m", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T09:09:45.574Z", + "updatedAt": "2025-01-21T20:46:33.401Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.677Z" + }, + "name": "Netlify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "src": "https://3f2b3d36-f809-44ab-bd81-f412a4a418f0.ctfcloud.net/3iEI26pdrWHvrnIREDdV6F/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zZjJiM2QzNi1mODA5LTQ0YWItYmQ4MS1mNDEyYTRhNDE4ZjAuY3RmY2xvdWQubmV0LzNpRUkyNnBkcldIdnJuSVJFRGRWNkYvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=J0qg1W7DOgrYm-GsJ77Uf7xyxhQrvdSu9B8CdX9Y3txST1XeQB9YZteEbtY3mly6CgR2fqMB9XbYJVl5CTLfHHHU5MTEryFN1OQ1OMyeVbX8Gi70goxK~wGm-1t0QzsNFsk2mA2b5jyz-7vdPejhqABs1o~7wj1q4AYUm~~j-U4TTRx50BhFMXnNabI9o8BUP-a-ICuTsXQD83FWEI-Ol4dUOXMfBhHnsVkeTpHw1Ay~qZsji3tEM-Gk0XCb2g0jjgcIW~XiVSEoGYn9DJvzT6z~HDvP1DF5CPXYJDru1ESRh4uysmzonOsshJv3EnYbKwVnG3d22ZYhu8UFXfUkpw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4QYnIIKna8TpXegJp3oSBi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "4WuVKeXdeRlqpw8go7Rkal" + } + }, + "shared": true, + "createdAt": "2021-01-19T15:16:33.569Z", + "updatedAt": "2025-01-21T09:22:53.016Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "79M4NDLgejkZSShtdJDuvD" + } + } + }, + "name": "Ninetailed", + "src": "https://contentful.ninetailed.io", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + }, + { + "type": "Link", + "linkType": "Entry" + }, + { + "type": "Object" + }, + { + "type": "Symbol" + }, + { + "type": "Text" + } + ] + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2KGwCxSgYcS5KKsb8ZyN86", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0qUM6SnNjkKqN2JVBUDk4a" + } + }, + "shared": true, + "createdAt": "2022-10-24T22:13:23.538Z", + "updatedAt": "2024-04-03T19:53:55.580Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3AV2DZ5Pn9oQJqQ6SFVBC6" + } + }, + "expiresAt": "2025-02-05T20:05:50.678Z" + }, + "name": "Octana", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Octana", + "path": "/" + } + }, + { + "location": "app-config" + }, + { + "location": "home" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Link", + "linkType": "Entry" + } + ] + } + ], + "parameters": {}, + "src": "https://5a747299-a334-4837-84dc-4bff3dffdc3a.ctfcloud.net/77RP6IMXl9Mt9q5NQrLi4u/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81YTc0NzI5OS1hMzM0LTQ4MzctODRkYy00YmZmM2RmZmRjM2EuY3RmY2xvdWQubmV0Lzc3UlA2SU1YbDlNdDlxNU5RckxpNHUvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=c3UNzdWHgPutvjhiG0COqeC6yOUe3n67i8WGsIdgt1umRxzeKEVwNL-mFu0ebhifB0HyxwB8KrSKuo5hdiydGL4CbVrfM29ZttYHb2xy3K9hdGf0sygTELXUQ484vkIlIoWGh5hMNMGXIUq1JV3Hb~q7FylbBNznIVxAx1l5dpIxgP7vvugW5DVBqBtiGShKnhWgeKUrG4k94k9P3OgVDbN2GVJ~xrCsT-zUGIFiX5fMZkPQiOEUsOkNDPMSpY2tmGFTXp1K73ldDy8kQkLS42Z5asPqrLOl1vvQ9y8dSOx7Bc4VMy-2yL~g7jxZd2z3nEfR37C8~QaIvRvhBQX9Ug__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "i43PggcHag2PCrGjYTiIX", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-07-24T12:38:34.885Z", + "updatedAt": "2021-08-03T12:11:21.857Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Optimizely", + "src": "https://optimizely.ctfapps.net", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "3Xh8uDnRiZ0hpUyWCZtWmn", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0NCstxnb2tyMr22ly7sBI7" + } + }, + "shared": true, + "createdAt": "2022-11-07T16:34:30.956Z", + "updatedAt": "2023-03-15T16:56:43.577Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0Nxch2ljQM7Txe1noKMEDx" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5SsU5BsjOoYnI1BVGDrmGt" + } + }, + "expiresAt": "2025-02-05T20:05:50.679Z" + }, + "name": "PhotoShelter", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://81fbeafe-26d6-4422-9adb-3d55d88348fb.ctfcloud.net/2wKsot67ek0iKNRsFL7gVr/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84MWZiZWFmZS0yNmQ2LTQ0MjItOWFkYi0zZDU1ZDg4MzQ4ZmIuY3RmY2xvdWQubmV0LzJ3S3NvdDY3ZWswaUtOUnNGTDdnVnIvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=N6uvGB3B6rz-FTiPYVVHdOALhygZRrz86zIXgeRqUWgP8BJUsrc-DiUQbM8UQ3AVS7wdhfh33XizT8G9-NOrVDqVmkBnOSEZQ0db~oEM6YqEH5w38j2gYUV3cxqvnvYP4bqry0BTQOjDEfb1Ych8vq7hh0tGIdmewiZuAEindBmltNLaq1Z~nVHW5KhrwtS0JjKx0Xoaz7ClnirLZ-cwqyqEiXQRPE4Su447I-wv-haZ3JBH-o64ssy-l19LhzS-nK8Qn-~H1dEmeRUDOhQ5J4J5HoOmhx~ZlG1jLqodBOaro8ydoFdnklUI4jnWwA3mwblDEFb24ruwVQG55iR0VQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5O9v59Lbugb5tFCMeyLP8K", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0g2JAivWiSKz1VCe23uUe8" + } + }, + "shared": true, + "createdAt": "2020-08-05T21:29:37.674Z", + "updatedAt": "2020-10-23T08:21:24.446Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0g04BohAJNYkYM0FOLCPKs" + } + } + }, + "name": "phrase", + "src": "https://pa-contentful.netlify.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "1wxoLYYtUviNg9e6m5Ai54", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0dPFwFwaNijMAAcuiJT5TX" + } + }, + "shared": true, + "createdAt": "2023-04-27T08:38:08.011Z", + "updatedAt": "2024-11-19T14:30:12.782Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0dOTTmNbAKcqKjfuPCrkXT" + } + }, + "expiresAt": "2025-02-05T20:05:50.680Z" + }, + "name": "Phrase TMS", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Phrase TMS", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://3219c8a7-33fa-4b75-99c3-31c816004f72.ctfcloud.net/2BgFHrPZm2dYOGkHKxZP2N/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zMjE5YzhhNy0zM2ZhLTRiNzUtOTljMy0zMWM4MTYwMDRmNzIuY3RmY2xvdWQubmV0LzJCZ0ZIclBabTJkWU9Ha0hLeFpQMk4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=hT~4FDjf6QSYF80yu1uuk3iW4obncyhEGQPsU2zXvKm9KwlOkmkkRujlUllLWn0KlW4sokt8ObrkQ5tDPtiOenOFzYbMakePHqH~wl5tDddFynaLa0NoD86gN2gHJTojp8pynCLfQW69uDARsoMmp-jP4MjIR-nXq-KI5moy4i3g6K5rh8xjE7YcBGW9THR4Y7YWbXEDdcj5gmU09E6B8ON1wPFzt6p3-K4m8kJ8MwYs3uaHI6~rR7B5w95MdlD2PmhmE24n7YGgmEg2-hRyvct~fFeYF97fffNsCeAnp5oFw6ZT0JcQZAPsFlAc93f4cB~vNNRki4UyI8Tn5wCYKg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5WpRlPR9T0hdBeXGQ5bEiz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2BWdsuNrGXGPjplGDwjpuP" + } + }, + "shared": true, + "createdAt": "2021-01-27T06:46:34.442Z", + "updatedAt": "2021-01-28T13:12:36.030Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0TqLKiJJkt2PzzENv41cyv" + } + } + }, + "name": "Qencode", + "src": "https://contentful.qencode.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "2YQkSSHsqSIwWhqzisdovW", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-08-19T21:44:18.814Z", + "updatedAt": "2025-01-31T19:55:43.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5wnS4py3wwn4xgtUhYXaA5" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.682Z" + }, + "name": "Raster", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "installation": [ + { + "name": "apiKey", + "type": "Symbol", + "id": "apiKey" + }, + { + "name": "orgId", + "type": "Symbol", + "id": "orgId" + } + ] + }, + "src": "https://61f540e2-289b-49e3-bbd9-ab1727a6e6f4.ctfcloud.net/6WXuJ4OCGRgsQ0pwJ1ynOK/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly82MWY1NDBlMi0yODliLTQ5ZTMtYmJkOS1hYjE3MjdhNmU2ZjQuY3RmY2xvdWQubmV0LzZXWHVKNE9DR1Jnc1EwcHdKMXluT0svaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IwPL9cEpFCW-YCkDoAi3rS2HmuTfz4Z2UYkefazhAjCs0rSW7Dku8yypO6sAFtR5H~UgA38F8zybXab38~8uKRZPWzqnv2EB9-pfjsxYwHnOdv9PvbOtx9Jp7PUGhqC3oYhSWTz4thf3n1e2bPrajhmG6aBGCztQh41IgZ6UG-qB19r-1ES0sXMRi8sYJgsQHjl4p2LHyobQzN~WDLcVHzE41jL4kaRKBEmaHhLbu0lMrKxvfMa-7v7trl7xISIdFFKqntnKBsNJ7wvAyMysIWf50xdXFGlIvdAB58qsmQSiqYlPY-mLNFSDxFMK7U7u66KflfW6YJsc3f5CapInZA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7ek22esW2z9i1kdmevLJXd", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-03-11T15:29:55.343Z", + "updatedAt": "2021-03-11T15:29:55.343Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2YVRzNgF2sE64ooav1eKSd" + } + } + }, + "name": "Repeater", + "src": "https://hopeful-ptolemy-922717.netlify.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [ + { + "name": "Custom Value Name", + "id": "valueName", + "type": "Symbol", + "required": false + } + ] + } + }, + { + "sys": { + "id": "6sLWDUsuXcyIfkPeokdRxJ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-10-28T08:43:21.403Z", + "updatedAt": "2025-01-21T20:30:47.119Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2LSyXwc717JeKfw5DIgg6W" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.683Z" + }, + "name": "Saleor", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://d463b888-1d06-4f10-b416-9b1566b178d7.ctfcloud.net/6O0BY9hY5wG75yJSgUD5HP/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9kNDYzYjg4OC0xZDA2LTRmMTAtYjQxNi05YjE1NjZiMTc4ZDcuY3RmY2xvdWQubmV0LzZPMEJZOWhZNXdHNzV5SlNnVUQ1SFAvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=eSDqh3kpp3pZak8OiF0L52wgZBC6PiVcJcXh7a9a69c4sWr7Wn9hGws0-GcWwnGgzgjJs8OUYLmNXOPrufnf~5wxaBjfHAC5tn5bkfRBY46idN7D5H47zdcBPkPibe1tz2ud~us8RqSLp6fq~ZUqy-ZFb1VrzpriGD-E1oaW9fJ4z4i5e9A4d0VIJJU4M3H-4wzCL6X~WM0HHEA4pKLK744jzBlaHifLRgeBvCOJkuwt8WEGpmISVrGjrRQ8Zvjfyi5-zR6d9hv95xy6~hehRjvvokUDaq~MaCSQSDLEd35VaOyTvyvVDwWX6ZUoQMdnpuFcRgGINQYq3Lj6je2JSA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1O8njPYTGO44VueSJNBrdZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-06-01T18:58:45.824Z", + "updatedAt": "2024-12-12T03:19:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7J9Yl0eiCbWcz1a6dZz2ou" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.684Z" + }, + "name": "Salesforce Commerce Cloud Connector", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [ + { + "default": "product", + "name": "Field Type", + "options": [ + { + "product": "Product" + }, + { + "category": "Category" + } + ], + "id": "fieldType", + "type": "Enum", + "required": true, + "labels": {} + } + ] + }, + "src": "https://3b6d08cb-0ba0-4fec-a881-3fc521652297.ctfcloud.net/CsrBcNciwbL2ttD739JKv/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8zYjZkMDhjYi0wYmEwLTRmZWMtYTg4MS0zZmM1MjE2NTIyOTcuY3RmY2xvdWQubmV0L0NzckJjTmNpd2JMMnR0RDczOUpLdi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=MFE67sU1ZdkxRH0DGZMxvB71gMEspih75khTl8kgsZftYpTsEK66LYMNuWk5YhM4h6fovDLtrZoQs-SZGKc6otfeMFVo4AWwr9Io1o83x7Klqcw5h0rJVbY5j3SwBnfFrg7z59BzXY5wVExYH6f4MfjAl6Rs~SAFk9LuF6ziE4XK5w9p~fBhIl5l8C--BrN7hbZRtrosPD7vEUDcHjTDs3EbwcER1Mk9qrPmNUjGjjwrBIBjeoZZQGfv9W0XKAbiptonDG11zs5HIwdWeLIUXugMzVn4A9S7oLGTy4R9bBGBY2l2fzBrDiJtz2i3rTIyx0W5nmFy9F0L7cVG7i5enQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "GdOFzqcDrEbmn2teDQE2i", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-03-29T19:19:08.656Z", + "updatedAt": "2025-01-21T20:39:53.281Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7FNJe2xmShG6mc5Cqsy6eW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.685Z" + }, + "name": "SAP Commerce Cloud", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "src": "https://16603fd4-eabd-4d70-b938-60532dd0717e.ctfcloud.net/3DkLV6i7HmiVKF0FzrEOg8/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xNjYwM2ZkNC1lYWJkLTRkNzAtYjkzOC02MDUzMmRkMDcxN2UuY3RmY2xvdWQubmV0LzNEa0xWNmk3SG1pVktGMEZ6ckVPZzgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=BCCEHswZERo4GsK6tioIdc1~37H74GH5i-wvZl7FUOTkThfTiiT23Y7ulZbJBZocAzBAVqom-xd~UMfANVlibq5FtHx0lllDc3mREueuxaiXiebscX7b4gmOaK7WwCLb-H2Y8v-P~qvNORHnGTdDYRxxOUsiqxKQaVnXrMBZRmvlJr2L-BSuzIK5UV9U2IIwZ2xl9Y85W1jjWPex~7XYac33ht~bWb1BvHb0FMKQIUrYtp9jaB~mIQ0-u20Edb~NrQ5icqru4rCexokQfQfhW0IiTxFo0KMsx9ESUFa6Xdc2s9DfJ3lMVW6s1uqNZO5srJmXWNIAXUPhOypyuQW9EA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7jJoGTAjjjTZqedusaIU7M", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5u1hLJSfU79YOdpNtySNat" + } + }, + "shared": true, + "createdAt": "2023-02-16T12:35:48.878Z", + "updatedAt": "2024-09-19T04:28:44.262Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5tiYEmkRQTmzxm19lqi0Md" + } + } + }, + "name": "Scaleflex DAM", + "src": "https://contentful.demo.sfxconnector.com", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {} + }, + { + "sys": { + "id": "60S8P6KWlzfazXqMjhsJ1v", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2019-12-16T15:07:42.148Z", + "updatedAt": "2025-01-31T19:55:54.596Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2MzbkIYbpZL19Dtc16UoJy" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.739Z" + }, + "name": "Shopify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "src": "https://c59a9a72-be13-4a13-80d7-b016b22bbde1.ctfcloud.net/k2g7OVjDMtSFIUKGDkOam/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9jNTlhOWE3Mi1iZTEzLTRhMTMtODBkNy1iMDE2YjIyYmJkZTEuY3RmY2xvdWQubmV0L2syZzdPVmpETXRTRklVS0dEa09hbS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=j9F3ufuBHT7rrU6igR50CFypGneKjhdmXcFHYqmlwOSiv-sh3JY6hEg-bW1K73FVLwp8VGEY6vb9~AlPj6ADWihMobOg5CMNbTGUdGfo3jcdgX6ndbs6OnVf9Z~rkhokvFOOx1fWTb1fw033lmuNy9ne-5SzhiH-VAO~nn~g2epgsnhyA~kzJIrOmtMRWVMQi6aeaDvw-2RxGCb5aANAHlcF90DMcFZk9D9cZs4UOZhCzrfe3oVpZDEF77L4bneRXhLIW-BQORHy-ToQ79Ajr8uVY4n3szcygrqUj8QDkNOcrvDNEfb~GR7~gWgbLBll9hShAWL4v15JC8baZ83JNg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "5E71q6bdze3Haj9F2n9czY", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0SEv9uJudA095dlkpARGvs" + } + }, + "shared": true, + "createdAt": "2022-06-30T08:32:20.862Z", + "updatedAt": "2023-07-19T09:19:26.677Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5rhzcuH9Wx3nurftHBCYVZ" + } + } + }, + "name": "Shopstory", + "src": "https://contentful.shopstory.app/", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "parameters": { + "instance": [ + { + "name": "Mode", + "default": "content", + "id": "mode", + "type": "Symbol", + "required": true + }, + { + "name": "Canvas URL", + "description": "With this parameter you can override global canvas URL for this specific field. In most cases it should stay empty.", + "id": "canvasUrl", + "type": "Symbol" + } + ] + } + }, + { + "sys": { + "id": "2unqOCspPxYbyM295yh51V", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5FxqrACp1SSuw3oSAUCXcw" + } + }, + "shared": true, + "createdAt": "2023-05-12T15:57:51.375Z", + "updatedAt": "2023-05-19T14:24:16.626Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7spvExYxsoecxOkXu6JpTN" + } + }, + "expiresAt": "2025-02-05T20:05:50.740Z" + }, + "name": "SiteSpect", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "src": "https://51cffec0-7ac9-402d-9ba6-8ef67bab4cc3.ctfcloud.net/6jO80YvyLTqsFOa78bFnSz/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly81MWNmZmVjMC03YWM5LTQwMmQtOWJhNi04ZWY2N2JhYjRjYzMuY3RmY2xvdWQubmV0LzZqTzgwWXZ5TFRxc0ZPYTc4YkZuU3ovaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=bowf74djgocqeb1xUWCb6pKlS7hKBCZz6mSHF3YnJ4ngxqDsIIulbklm~BVC4wFIPCF3ug4XdZIibUrtLOmkgcmUizP2RTAJTU9lIS3FCJ-~ifO7SvjJE6kVpZSNiOdSFCeIxSzJvsrI2Ut8FI6gvWYLvnX3ctQ3VtJLL0Z~q6yzNN2otMQS6Oh~7cQtMB9uNm~k97XjnrrL5rmuouMPxRTq-zfosv1~siKYFSiu2Lm7IKToX4-k4GKe2lZHC-DLagBPIhv1iUZsRLSu4wXxzWIuhSK1qirH-GpZr6MlKb707f4vJouF3avy5TnojRvdhNtBQd6KXuVA8MWuvGAbXg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7ir40h24qLGSQWJ6JCS3sk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-12-02T12:36:53.667Z", + "updatedAt": "2022-02-09T10:11:47.526Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1lbcJCitOqcNZToAh8Mkxz" + } + } + }, + "name": "Slack", + "src": "https://slack.ctfapps.net/index.html", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + } + ] + }, + { + "sys": { + "id": "24SX6dqadSbp2kTSBSNw0L", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "2QOGgGnLgLCv0ROiZ3wOBr" + } + }, + "shared": true, + "createdAt": "2021-08-03T18:26:51.989Z", + "updatedAt": "2022-08-16T13:50:52.528Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5oh1nnjVvZgRgkijq7lW1t" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5LG9NsobZHM3BS2bNr4wcn" + } + }, + "expiresAt": "2025-02-05T20:05:50.742Z" + }, + "name": "Slatwall", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + } + ], + "parameters": { + "instance": [] + }, + "src": "https://444da026-d75e-480f-b9bb-a58dff8402e7.ctfcloud.net/2JkgvZqkwMNMCrWJeeNlAV/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly80NDRkYTAyNi1kNzVlLTQ4MGYtYjliYi1hNThkZmY4NDAyZTcuY3RmY2xvdWQubmV0LzJKa2d2WnFrd01OTUNyV0plZU5sQVYvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=ROVevEA6nnKAHctmw-3WYnrdJY7D2KjtVbN4jOQNNAUC5AYsFY7HGhHMfTl5iPTxPZAezyysmFLEl~MtClCf4Fkx8GIk8S8X00MeLB5DVhlbiPvi923B2iFURN5B9OfVNQrxzfRLukcap42dFj3hcA0f4KxGRybOizn2uGXn9w6vwNlVaanTV8gTTAG~LxTRT2N-9fi8bGpjwJPuKDjqqyWX6hOcROSoV0sKX9c1KXgRzjOJ59FI3OzifC5tIHvmZBKWTY1tDGcZvNwYe1eNHF1ly4caw69w~~7IJbt7110KuLyVBicfYjnK3DboQXRM5n8--EwqK4NkrkDoQd1iiA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7fJGa8IE51jJdakiyBwcJ5", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "12AsJraQyXh1tM0uoQ51K5" + } + }, + "shared": true, + "createdAt": "2022-06-27T12:49:30.113Z", + "updatedAt": "2024-12-09T16:01:23.574Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "12rWPvzWa14PM2cI0c83Gd" + } + }, + "expiresAt": "2025-02-05T20:05:50.743Z" + }, + "name": "Smartcat", + "locations": [ + { + "location": "entry-sidebar" + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://ee567258-62f2-4830-bce5-e892540632ab.ctfcloud.net/52Iw1IbBDsfMNgmasSjpIH/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lZTU2NzI1OC02MmYyLTQ4MzAtYmNlNS1lODkyNTQwNjMyYWIuY3RmY2xvdWQubmV0LzUySXcxSWJCRHNmTU5nbWFzU2pwSUgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=Y6xwuLrrzRRrFg6BpGMCSstp3-EDa2GksSssALdoWDz5O2i3wARb61yLvrBztwE28BVj9o~800sfQNrK728Zy8~Mqr96f0J~ppKV0Th0k3vJh8CHJ7vhe1VE5cYg~5rTf8ltBMiD9kkg7U0s5v5WNoZb62YBdT5JNXmlpJPwD-yK6JaENzzc9MQjZAHp2zwCHQq4tugfsbSP8lXJQDRINhW0Ozg7v1wC~4TEpDNRrrjeg5T4KWOx~KrE26PFWyIZLV4kFtI3nycPPmiq9RUSy5ADmSsCyfChzq3RfLXSWlwCFE4D-5mlNxiied1kgKuR0k1IuWxsnO~JytitRSVXjg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6ABxlejtWcEubKLM42fjMD", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-01-31T11:06:22.084Z", + "updatedAt": "2020-04-27T12:28:47.438Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "46JHc8ru6cDDm0CtthS0Kw" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5NItczv8FWvPn5UTJpTOMM" + } + } + }, + "name": "Smartling", + "src": "https://smartling.ctfapps.net/frontend/index.html", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ] + }, + { + "sys": { + "id": "4c6SxDAXoHPLcFmoMLvGde", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:17:22.793Z", + "updatedAt": "2025-01-31T19:55:54.291Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.744Z" + }, + "name": "Surfer", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "src": "https://89d87a7a-bf41-4aa8-8890-796c16c5bad4.ctfcloud.net/1BuauoUv7GkWuh6Q8U7Jio/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84OWQ4N2E3YS1iZjQxLTRhYTgtODg5MC03OTZjMTZjNWJhZDQuY3RmY2xvdWQubmV0LzFCdWF1b1V2N0drV3VoNlE4VTdKaW8vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=nMWO2SVEaQ5PbreaWWXOAexksAk9YDm7n7zWga1RImNQGd6kfXFxCPP67dELmmPmqVHn8nOQgFKySzA6-WvzQ6l4i6nw6gNH4FLf6fQbPzLm~o5RLQt3eq8Q73Xr0qX2uFPCLedCkKlD2O~pVAWubIO7t46~wCBenin~8Q1895ctQ1FKP8RMtQhTtwWJ~OjCxDauplHZ~~ETe3x1zr8ruwPIjcm3HjXvrG8vqat8qYjC-u-khqWXerzuzRMCRnhbEMNKRiQgKr70sjoELqIAOQPK4AWNIaLO0LvAIFptn46gP6SAPLI3UsQPvtraaYy~TBk9lMeDiJaoNjMiWDHQ9Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "QMdzLmdwbV0j4ZrVY4WOv", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0uSnG7ikBn0c6T0kS6hhlx" + } + }, + "shared": true, + "createdAt": "2021-03-18T14:58:18.720Z", + "updatedAt": "2021-03-18T14:58:18.720Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "3IatEc5aJ2AXeP0sgPkLUM" + } + } + }, + "name": "Swell", + "src": "https://swell-contentful-picker.vercel.app", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Array", + "items": { + "type": "Symbol" + } + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "7CPoljE4C0HpsVZ7a7HrZG", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-07-05T09:39:05.993Z", + "updatedAt": "2025-02-04T08:06:39.045Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.745Z" + }, + "name": "Tasks", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://fa9349c7-7c39-42e4-849d-b577e6e9a374.ctfcloud.net/4x8Wfpo5QSpXPe3z5dNRCS/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYTkzNDljNy03YzM5LTQyZTQtODQ5ZC1iNTc3ZTZlOWEzNzQuY3RmY2xvdWQubmV0LzR4OFdmcG81UVNwWFBlM3o1ZE5SQ1MvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IzdrRVv2kfK1evdhjWb46UeCR8AqumVtwQ3PLtqRA37F8MFEggB2ACK6ffIACqhC1Xzn5tF88Cz03f96DZe4H7zYLoZy5k69yXLgO4Nggp3jljZXpLg7j5gtQsjxG46TGCAC5oztHj8s01p5WbCt-tvvTPbh3dZKG-UceNoNCBLVEfH3QSgCnLUQgQgFkIS2jdgyxwfYedvVY42EY8Gn~6jFIE2HZNW-Q1bK6A4uZ1i8Upg2mRdsquP5cA1dVvI2gonDrDf3YZMM63bCtUA068EHY1iB-YPEfeA4ALRHKOPURdSRDkXmJwHVBntgfSyy7QkW48UYGVFLdsBL6u0frA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "EPRcLyDrBeAQgLtTRfPwu", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "25nCTg3Bl7iHWXk541IXcc" + } + }, + "shared": true, + "createdAt": "2022-05-05T07:11:38.645Z", + "updatedAt": "2024-11-13T11:41:18.327Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "25dziZyGrZWrZ6gsQmtQze" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4pwK4DjXHKcAdt4nv6ZSyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.747Z" + }, + "name": "Trados", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "page", + "navigationItem": { + "name": "Trados", + "path": "/" + } + } + ], + "parameters": {}, + "src": "https://15a427d1-bb86-4b42-84fd-d2a4f6ee3a62.ctfcloud.net/KwZyWqOAgBnqjCnRi9aW6/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xNWE0MjdkMS1iYjg2LTRiNDItODRmZC1kMmE0ZjZlZTNhNjIuY3RmY2xvdWQubmV0L0t3WnlXcU9BZ0JucWpDblJpOWFXNi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=CknYAVR-87Xa5QC5wOVrZsXSPcVH8F4Lrw6JDwF3RGvagr1C8NE5IWvsn3O3-OUcv2K6hq8lGa9RdE7saN1QX2i1nwCVa0z9jfP87pNsrfFPSKTX-XNr6mQmfCaAwvptB3QB3~MbLv~1IhAHqoO0KJd1DzMGJCY4W0kqK-RkV898lwjeVCOWJycX19jCXvG1LpAYQLTXej4LhbuGPzXysWFz4JEiEoloBVzSVjfb6zM4H~rIlt~S3AM~5BhkoE1mAe1Qsd6omSENgbZBdgqwIdGtW2na5WCLt84iqXLbe1D95Q7NtNv5~EBuBP1yYwtPbDBKbworVL2WXbAxGgCeGQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "b7SVv0k1EYbQRsusviQDi", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-04T14:49:53.208Z", + "updatedAt": "2025-01-31T19:55:54.908Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "549ZG41aazTYkABSEvfRyA" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.748Z" + }, + "name": "Transifex", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://05e597ce-691d-48da-8adc-eedca26c54b4.ctfcloud.net/4yTnBmPutHfeQkRHdyHizn/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wNWU1OTdjZS02OTFkLTQ4ZGEtOGFkYy1lZWRjYTI2YzU0YjQuY3RmY2xvdWQubmV0LzR5VG5CbVB1dEhmZVFrUkhkeUhpem4vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=l4IUqFtr-yydo0l5-IZW9rWhadLA4rM1pWjoUos3EDO8zX6UndXR4PxHWvemHch4ME77BAO1Lv8N5SbdUzj3KhTmVk9djuhifxs7mkN5h0LdV4cjvi5-KixWEH59AXsm4tgDWvvUZc4r1pPPX9knweFuT9oB7N7omxIixgNdqIy1pJ7BW8XF4mlw-tGCEfoexg-sbNoke6HZrhS-WLN7wAaunoi-vIkIYW4WB-zVifgR6bbcnoyAndPPOWq5r7DRrIQS9HzcvSYnmeBESNkw7kZugBXeenR7XHYRfFXw5pdkasuuylC0YniIEpp-PY1quuhWDZXie3LfFleL~WG8sA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "1SZgLiOT63ijEzPJZQ4QWT", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2020-03-20T13:46:37.843Z", + "updatedAt": "2023-09-28T16:03:15.817Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2jvc3kU4n7OIABiFMTaGyB" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + } + }, + "name": "Typeform", + "src": "https://typeform.ctfapps.net/frontend/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "home" + } + ] + }, + { + "sys": { + "id": "1BeY7xDfJfvD5El9ymsOZF", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "14pf4vP1CA4EGu7AXnr1P5" + } + }, + "shared": true, + "createdAt": "2020-08-20T23:27:10.487Z", + "updatedAt": "2022-04-26T20:01:40.373Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0SJxBnMuapGsHZPLP1q7US" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5uDNLZHF9vPRvtZ88GeNGi" + } + } + }, + "name": "Uniform", + "src": "https://contentful.uniform.app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + }, + { + "type": "Array", + "items": { + "type": "Link", + "linkType": "Entry" + } + } + ] + } + ] + }, + { + "sys": { + "id": "3Ju8DSs6cEG3TnqFa979vc", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-27T19:12:10.394Z", + "updatedAt": "2025-01-31T19:56:05.979Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "2D8ljY8aA7f32Wxhcf8lxD" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.749Z" + }, + "name": "Uploadcare", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "parameters": { + "instance": [ + { + "name": "Max number of files", + "description": "The max number of files that can be added to a single field. 0 means no limit.", + "id": "maxFiles", + "type": "Number" + }, + { + "name": "Upload sources string", + "description": "Comma separated list of possible upload sources. E.g. `local, camera, dropbox`. See docs for details: https://uploadcare.com/docs/upload-sources/", + "id": "uploadSourcesString", + "type": "Symbol" + }, + { + "default": "useGlobalAppSetting", + "name": "Allow to upload images only", + "options": [ + { + "allowImagesOnly": "Allow images only" + }, + { + "allowAnyFiles": "Allow any files" + }, + { + "useGlobalAppSetting": "Use global app setting" + } + ], + "description": "If selected `Allow images only` then editors won't be able to upload anything but images.", + "id": "imgOnly", + "type": "Enum", + "labels": {} + } + ] + }, + "src": "https://7aad0801-b0a2-4382-9455-624148cb550a.ctfcloud.net/aKexNUjkGdX7VRRIClMCI/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83YWFkMDgwMS1iMGEyLTQzODItOTQ1NS02MjQxNDhjYjU1MGEuY3RmY2xvdWQubmV0L2FLZXhOVWprR2RYN1ZSUklDbE1DSS9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=YcCav-D3LbV5mzRB~4vx6AUgB9GteZDEMEetxo3ROF6EbYgiY42ICTVs6NK5-aLWSB0jvBXoDNSVn7AnfwhiUjRBJnTbrwvjWgNYBERiVEsGo787-24nGZxupTuxv16F1qWgncI6KFh~z9mbpNn-29pt6c70SZI8tAVaV3XpYkpgEd01--csRuxA1pvzhlq06O~gC-0jmp8WC8-5OrVOFWOAm-0h3AS5ou9aXPkWmpzSS2DNWhp0efUpl1M5NuXU66L~m8TurFBrDeIyT72OYrGr7ysZQ0qL~tXr5urY-oJIo67wkCcv3wQcR7~G~Sm7~LAGdlV-80wOxeP1mA5MAA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4QsJrTg4fFjX7UmQDkeayq", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-01-23T22:37:02.320Z", + "updatedAt": "2025-01-24T23:01:55.307Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.750Z" + }, + "name": "Vercel", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://9f3afa65-6214-4de1-bd24-408fe715c06e.ctfcloud.net/6M05o3q40mxTfvUOu3ZnOS/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly85ZjNhZmE2NS02MjE0LTRkZTEtYmQyNC00MDhmZTcxNWMwNmUuY3RmY2xvdWQubmV0LzZNMDVvM3E0MG14VGZ2VU91M1puT1MvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=J32Z1RejHhcoKzXhfsGiCJc7hRORUdtkF~9gWOzMIcSWrZLNoOvS6L0-REZ2Vbnl9yE~SD1myeyvf6w6CZM8Y3dO4TYklnQcYgIKZOwJ~Nc207Ae2txQAwrSm2G6CzYXuz~YnUtq7kGxsg6NBYxAOICvZ3A7C8aJEgPnEfbaB9tcqSm-YrwThp-OQp0fwwyHS~NEeWdimlYHpiw0kkU-MEO41Dt6imcAK9im5~BUjO6~vzKK0teT3VWDrcMIRntRClbggWdPIF-JGoetTNHXW4zob1A8TlGO7MZcopZ8dCZlFL6WoMp8xLd5Ns5txGK3jw1dvYGfR12KlOi9aJzHeg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "3HFf3DxTPYMh2L8214oW1s", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2023-09-13T18:26:51.771Z", + "updatedAt": "2025-01-31T19:56:05.440Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.752Z" + }, + "name": "Voucherify", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + } + ], + "src": "https://79b5fe5d-d537-470a-924e-236b97b7ce22.ctfcloud.net/6CVqOrdznLgtiDsfW2eiwo/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly83OWI1ZmU1ZC1kNTM3LTQ3MGEtOTI0ZS0yMzZiOTdiN2NlMjIuY3RmY2xvdWQubmV0LzZDVnFPcmR6bkxndGlEc2ZXMmVpd28vaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=TslVcLqYpx5E3ykY0FJk~n8ow8q-9tg~kDT-Pobl234D3I9ZTRT1uw0rpgGvsy8Z~QUhw36dylCbKO8d7QQImaTFO6LbZdSVS~sY5KuE32nbyNKFnFLImf4TQwZzYgZ3Bd~A1vf8F3lnBThmJJQEscnrSNF8svfIklRsL6KydaTdbKZ~9UwdgSqqkV4MovJM1TfZZ-UN85k7xjAhMPQQHZoWENtqMySOixp9lH6FS3q~gOg9yyvFX19yMaOMmBthorVAfKbXk8E2eAdsBt~0aCrVFSpiJlrLwn6rF~v6p5EvfWvWSJpHvXPgX8O6AWYbO~ZjdmIuVl8P3lMwYl~OLQ__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "7DnamgI4qKntUVMcOfZtQk", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "0obnPYhku3jo775GiGSivz" + } + }, + "shared": true, + "createdAt": "2021-06-14T06:34:10.948Z", + "updatedAt": "2021-07-27T15:46:09.562Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0i6k6A8gvnzsopMOPMqoqT" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5Pdjlm0t7kKPqgRXTEcoDV" + } + }, + "expiresAt": "2025-02-05T20:05:50.753Z" + }, + "name": "VWO", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "entry-sidebar" + }, + { + "location": "entry-editor" + }, + { + "location": "page" + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + }, + "src": "https://fadd3153-6e93-4991-b002-21f3001d4fe8.ctfcloud.net/2nZR4C05uQJr3skPaYUXyL/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9mYWRkMzE1My02ZTkzLTQ5OTEtYjAwMi0yMWYzMDAxZDRmZTguY3RmY2xvdWQubmV0LzJuWlI0QzA1dVFKcjNza1BhWVVYeUwvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=VKdpSa-Y~yQCxKH2UxmOI1uwwEmxhVpJ69A7skBRVnZyg79sDzj9ffgh-MkvTmhAQBl2KukiLtfhdO1mkETTpjpC~NMSmaXFw5O8FBtM065nTfZ-a5szlrLatjva4lQcF3yj8Ghi94AKLbPgjhhrfsWbT-e6byBTjau69Z35bn7A1IzZAzd9PWhga21EyNjQwUY7dpKLQDDxwrh5DMk41aSHKw0fVOrqziUirVQVUhFmEBPKOGwwOZexVtxH4~PP~FGSsTTT-yc3~34D9VfnBJRCmZ8QTqLUeuIlNJbIUaJOrsLqzX9q0Cd20cYzxPUT~zAX-zZrbCjalOxzfwpZkA__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "71oYmQJFCIWn9pxizjN8dZ", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2025-01-29T16:54:50.238Z", + "updatedAt": "2025-01-31T19:56:06.115Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1TxB84jpuvrlDUiXNmjAnk" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.754Z" + }, + "name": "VWO - Feature Management & Experimentation", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-editor" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://e6bdcc98-c07e-4c14-a5db-82277287e4cb.ctfcloud.net/KH2X9F4QeHzT8SLQKD5CN/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lNmJkY2M5OC1jMDdlLTRjMTQtYTVkYi04MjI3NzI4N2U0Y2IuY3RmY2xvdWQubmV0L0tIMlg5RjRRZUh6VDhTTFFLRDVDTi9pbmRleC5odG1sIiwiQ29uZGl0aW9uIjp7IkRhdGVMZXNzVGhhbiI6eyJBV1M6RXBvY2hUaW1lIjoxNzM4Nzg1OTUxfX19XX0_&Signature=aOD3jLKKuxWNVSxZ8oWmYk9iPJ-AJlrnD3ypcMAYV2tCEm~RFWoh8ApCjUXauFsHdTLX~6JKrYzOICKFAu6BE3pQRtnyvrGkEg2LO48BgSO3IUd2JpdCmu0Wym0utoSovSkf8CqI4XCEvWeX1aWccVpPs4siTz7w3k0IL-lEATwMscWMoI3q6GMR7izxn7QXiRic7PPXyIfbYqFvqwrLKGEbz01T-xzNM90UA5~mD4bQs~h5b3P8gFZuiYDW5dp5N01OWt8DdpBmGfFmRpYzY0CgfJBDPV-laL-pUZ9mOU2TpTfbZEFQegMuROci8oUeqjgQSQe56XUv-bRiyeBY0w__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6StWOM1AZBDHDjynDkm1iz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2022-08-16T11:51:02.704Z", + "updatedAt": "2024-09-10T18:08:55.958Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0xAU1rz5uyEJ0ItTExcjsa" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "30LuuQybViGYPup1O4CPyU" + } + }, + "expiresAt": "2025-02-05T20:05:50.755Z" + }, + "name": "Wistia", + "locations": [ + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Object" + } + ] + }, + { + "location": "dialog" + }, + { + "location": "app-config" + } + ], + "src": "https://e203aea8-0a3f-4b7f-96ec-eeb349422af3.ctfcloud.net/58RN96o2neL68XlitQnmGX/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly9lMjAzYWVhOC0wYTNmLTRiN2YtOTZlYy1lZWIzNDk0MjJhZjMuY3RmY2xvdWQubmV0LzU4Uk45Nm8ybmVMNjhYbGl0UW5tR1gvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=UbQU89WyTJA4y3M052mGTH1-LHuIajsHaQypphZhV~gO4Z7fyj6QlwX~IzADp6PVeNNjnnOWDsbXc~5a4NUdq~S4lkaUrbyUqmMrgI90k-ie1ZeOWFMnchL~Uagnl3taTRbkVRUBw6hXsintPA9HJoQdqLyr-rzj2vd3CTb5kTxeIgVygaShI1muJCPylDJU4~LlPRujGMnUEajOKWfjcioDGlqGKCzx3CLWP-hTRZcnsNC1F8X2UVNp8nSnRxPbBaaQ~KOfPmOE1qI5lqgabxmfF82vApJMD1ta3b9giZ~0tYryBXjce9qleuQIQz0ztuqUKsU7dbk3linL51ABRg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "44A0iM4wuqcQBDfg6qrlQx", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-01T23:19:13.465Z", + "updatedAt": "2025-01-31T19:56:16.427Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "03fzTwuuEEPDj1HaDHyeDM" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.757Z" + }, + "name": "Wix", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + } + ], + "parameters": {}, + "src": "https://85dadf93-16f5-446b-a2a9-2a0d1b1e1a95.ctfcloud.net/1tWK9eLCM0S4xpGsULxO39/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly84NWRhZGY5My0xNmY1LTQ0NmItYTJhOS0yYTBkMWIxZTFhOTUuY3RmY2xvdWQubmV0LzF0V0s5ZUxDTTBTNHhwR3NVTHhPMzkvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=dOS7mSBBBMOhbm7pZtxTiVWaM~A9dsJG8IdwN3TBvVoIBoet~yImIOvk-GxqjHxFYi-VAXJju36~c030-NGCAukY3b1PuRKtFX4ydh-RRI3EIVMb-nTGCS2dAWIZeyq049gxTNxczgkyGMTIL5R5Y~TG1SkWBRUJARzfFEhGq33vcJqAAMVy5Du0qc5LHnmQY4h58vXefoinzrqEs21Q8-V3By4QjrJtSNT2Vq7gL7U9OOTCdvzhZufV8npZONEeAmbqXMuEfC3JqNIA87C6yRrSXMI2-1Zj5MifBpomUeW-ROINWgiqS1K6Swd6RxdEafpGYRE1CWtWvrYMxGCDUg__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "IzXGEKn1YcF831Z2r6TtN", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2021-11-15T13:57:44.050Z", + "updatedAt": "2025-02-04T08:09:09.786Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0jz6hPHbUidMTiQCdO2KmW" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "7JWRGOYWY5AnjuoNVzBwyO" + } + }, + "expiresAt": "2025-02-05T20:05:50.758Z" + }, + "name": "Workflows App", + "locations": [ + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "Workflows", + "path": "/" + } + } + ], + "parameters": { + "instance": [] + }, + "src": "https://17a00aa2-860a-4c54-849b-d831f0198a13.ctfcloud.net/3o2ZmDGW4KWe1f40Ws9FCl/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8xN2EwMGFhMi04NjBhLTRjNTQtODQ5Yi1kODMxZjAxOThhMTMuY3RmY2xvdWQubmV0LzNvMlptREdXNEtXZTFmNDBXczlGQ2wvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=gAEGSHcrCIroudwkSbNNYmNIAlv~r8OYrXV3l~7os~-ufRsuuAu9iDprKYztVMbR8Mcgv7bJvQ3nQ33gtLvsIZmsZ0gIJMTt17hlMQwBEbmJ01yu2EV0D29e78917Vnm0XHpxblqlNuGZxSbuP4SmgKD5HHSxQLpKFHV~tgBjDv7B3sLVJGRrW-XdmJp14bNEKx1ksm2-IyfA9CdhmbWKOKlGjnZEe677yamLQ4SXrXO7qHPh3XYQSnD5SSiPvbD--DA~E2CZb2SOod6arJ~LwJP~55W~UABufGftnWryRbpfD54mAM7v4PFbK4tN6WQQxymQdIuKapldvYpBQNE7Q__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "6C8a6ICmjODMMsNC0Un0Xe", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5RHAZeCcIG0BSCJll8MFMs" + } + }, + "shared": true, + "createdAt": "2023-08-24T14:06:10.167Z", + "updatedAt": "2023-09-12T20:57:19.352Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "5RACtD6G9a7W26r6lzrO00" + } + } + }, + "name": "Writer AI Content Detector", + "src": "https://contentful-ai-detector.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "dialog" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Symbol" + }, + { + "type": "Text" + }, + { + "type": "RichText" + } + ] + } + ] + }, + { + "sys": { + "id": "5wmH6IpRamZ66ofjP9THlz", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "1o92OHmPmIOWNYuX0jJQQE" + } + }, + "shared": true, + "createdAt": "2021-12-08T11:05:03.091Z", + "updatedAt": "2022-06-08T17:24:53.207Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1o835krXYQ8Rtv4GEKxaaI" + } + } + }, + "name": "Writer Contentful Extension", + "src": "https://contentful-plugin.writer.com/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-field", + "fieldTypes": [ + { + "type": "Text" + }, + { + "type": "Symbol" + }, + { + "type": "RichText" + } + ] + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + }, + { + "sys": { + "id": "5i8iZ60GpkbZQJzutNXit", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "5EJGHo8tYJcjnEhYWDxivp" + } + }, + "shared": true, + "createdAt": "2024-03-29T16:48:17.872Z", + "updatedAt": "2025-01-31T19:56:16.827Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "0VYEozm0sWFT6Wee4Zm9Dn" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "1U1bynIFyhDMdYlSFujyDb" + } + }, + "expiresAt": "2025-02-05T20:05:50.759Z" + }, + "name": "Xillio Transcreate", + "locations": [ + { + "location": "page", + "navigationItem": { + "name": "Xillio Transcreate", + "path": "/" + } + }, + { + "location": "dialog" + }, + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + } + ], + "parameters": {}, + "src": "https://02ce03f3-9853-4db8-a4c3-d933d4b0822d.ctfcloud.net/24oi7FCTTLvoXDO0u6dFRH/index.html?Expires=1738785951&Policy=eyJTdGF0ZW1lbnQiOlt7IlJlc291cmNlIjoiaHR0cHM6Ly8wMmNlMDNmMy05ODUzLTRkYjgtYTRjMy1kOTMzZDRiMDgyMmQuY3RmY2xvdWQubmV0LzI0b2k3RkNUVEx2b1hETzB1NmRGUkgvaW5kZXguaHRtbCIsIkNvbmRpdGlvbiI6eyJEYXRlTGVzc1RoYW4iOnsiQVdTOkVwb2NoVGltZSI6MTczODc4NTk1MX19fV19&Signature=IDT4~ggM220eDseM~DzpJ2HPNhaYSm0sd63m4~MvBrbNNL2GqEmVwLNBCwZ3pnaRAcpWPkqogejsT7Hux8m8OiryG54B2LWbZIF0dn70A4efjeaSF1DPS6zWLthUcXx-oqQNDLtZ9LDVOwoTMZd1IxJsVyhT-hhk3u4YohyTY9YKjrzZC9m0dcYxoAaQysstQIuBUQdg6nVBNzRtAekLu1YpnbPhlEhNIzoqdJh65vO3AAloqq686oJCLV2a4FtH7zU4YuEUjWEqZbu7F~~pSwzbzqwRfrREgGEiT8OS1FmRxAbKKxJPdFAuwTSUInb61E5VITfKmuIiO1cczad8pw__&Key-Pair-Id=K1FL5TKJLAFZQZ" + }, + { + "sys": { + "id": "4u3pN6m2aOOBTr9kGP8LJK", + "type": "ResolvedAppDefinition", + "organization": { + "sys": { + "type": "Link", + "linkType": "Organization", + "id": "28CeCjl0ZH2X0gql3fnuHZ" + } + }, + "shared": true, + "createdAt": "2020-10-29T09:22:15.212Z", + "updatedAt": "2021-09-29T12:04:10.546Z", + "createdBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + }, + "updatedBy": { + "sys": { + "type": "Link", + "linkType": "User", + "id": "4PkXeFfQ9DyvCf9Y0yWP96" + } + } + }, + "name": "XTM Connect", + "src": "https://contentful-connector.xtm-intl.com/app/", + "locations": [ + { + "location": "app-config" + }, + { + "location": "entry-sidebar" + }, + { + "location": "page", + "navigationItem": { + "name": "XTM Connect", + "path": "/" + } + }, + { + "location": "dialog" + } + ], + "parameters": { + "instance": [] + } + } + ] + } +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/helper.js b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/helper.js new file mode 100755 index 000000000..c1ed729b2 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/helper.js @@ -0,0 +1,79 @@ +/* eslint-disable @typescript-eslint/no-var-requires */ +/** + * External module Dependencies. + */ +const mkdirp = require('mkdirp'); +const path = require('path'); +const fs = require('fs'); + +// Tolerant JSON cleanup — strict parse first, then strip the breakage real +// exports carry. Conservative: no mojibake substitution (would corrupt data). +const cleanJsonContent = function (raw) { + let s = raw; + if (s.charCodeAt(0) === 0xfeff) s = s.slice(1); // strip BOM + // eslint-disable-next-line no-control-regex + s = s.replace(/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F]/g, ''); // control chars, keep \t \n \r + s = s.replace(/,(\s*[}\]])/g, '$1'); // trailing commas + return s; +}; + +const parseJsonLoose = function (raw) { + try { + return JSON.parse(raw); + } catch (e) { + return JSON.parse(cleanJsonContent(raw)); + } +}; + +const readFile = function (filePath, parse) { + parse = typeof parse == 'undefined' ? true : parse; + filePath = path.resolve(filePath); + let data; + if (fs.existsSync(filePath)) data = parse ? parseJsonLoose(fs.readFileSync(filePath, 'utf-8')) : data; + return data; +}; + +const writeFile = function (filePath, data) { + filePath = path.resolve(filePath); + data = typeof data == 'object' ? JSON.stringify(data) : data || '{}'; + fs.writeFileSync(filePath, data, 'utf-8'); +}; + +const appendFile = function (filePath, data) { + filePath = path.resolve(filePath); + fs.appendFileSync(filePath, data); +}; + +const makeDirectory = function () { + for (let key in arguments) { + let dirname = path.resolve(arguments[key]); + if (!fs.existsSync(dirname)) mkdirp.sync(dirname); + } +}; + +function deleteFolderSync(folderPath) { + if (fs.existsSync(folderPath)) { + fs.readdirSync(folderPath).forEach((file) => { + const currentPath = path.join(folderPath, file); + if (fs.lstatSync(currentPath).isDirectory()) { + // Recurse + deleteFolderSync(currentPath); + } else { + // Delete file + fs.unlinkSync(currentPath); + } + }); + // Delete now-empty folder + fs.rmdirSync(folderPath); + } +} + +module.exports = { + readFile, + writeFile, + appendFile, + makeDirectory, + deleteFolderSync, + parseJsonLoose, + cleanJsonContent +}; diff --git a/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/restrictedKeyWords/index.json b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/restrictedKeyWords/index.json new file mode 100644 index 000000000..a1d40ec54 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/restrictedKeyWords/index.json @@ -0,0 +1,75 @@ +{ + "ct": [ + "api_key", + "built_io_application_user", + "built_io_application_user_role", + "built_io_audit_log", + "built_io_environment", + "built_io_extensions", + "built_io_installation_data", + "built_io_label", + "built_io_language", + "built_io_publish_queue", + "built_io_release", + "built_io_upload", + "cs_branches", + "org_uid", + "sys_asset", + "sys_metadata" + ], + "entries": [ + "_exists", + "_regex", + "*_ids", + "__indexes", + "__loc", + "__meta", + "__v", + "_id", + "_owner", + "_publish_locales", + "_shouldFilter", + "_shouldLean", + "_version", + "ACL", + "api_key", + "app_user_object_uid", + "applikation_id", + "built_io_upload", + "contentstackFilters", + "created_at", + "created_by", + "DEFAULT_ACL", + "deleted_at", + "dimension", + "domain", + "embedded_items", + "hook", + "id", + "inbuilt_class", + "isApplicationUser", + "isNew", + "isSystemUser", + "klass_id", + "locale", + "options", + "org_uid", + "publish_details", + "save", + "shard_account", + "shard_app", + "shard_random", + "SYS_ACL", + "sys_assets", + "sys_metadata", + "tags", + "tags_array", + "taxonomies", + "tenant_id", + "toJSON", + "uid", + "update", + "updated_at", + "updated_by" + ] +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/prompts/master-locale.ts b/packages/contentstack-external-migrate/src/services/contentful/prompts/master-locale.ts new file mode 100644 index 000000000..c7da467d7 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/prompts/master-locale.ts @@ -0,0 +1,59 @@ +import readline from 'readline'; +import chalk from 'chalk'; + +/** + * Choose master locale from export. Skips prompt when prefilled (--master-locale). + */ +export async function pickMasterLocale( + locales: string[], + prefilled?: string, +): Promise { + if (locales.length === 0) { + throw new Error('Source export has no locales — cannot continue.'); + } + + if (prefilled) { + const match = locales.find((c) => c.toLowerCase() === prefilled.toLowerCase()); + if (!match) { + throw new Error( + `--master-locale "${prefilled}" not in source locales: ${locales.join(', ')}`, + ); + } + return match; + } + + process.stdout.write('\n'); + process.stdout.write(` ${chalk.yellow('⚠')} ${chalk.bold('Master locale')}\n`); + process.stdout.write( + ` The master locale you pick ${chalk.bold('must match')} the destination stack's master locale\n`, + ); + process.stdout.write( + ` • master locale → fallback: ${chalk.dim('(none)')}\n`, + ); + process.stdout.write( + ` • every other locale → fallback: ${chalk.dim('master')}\n`, + ); + process.stdout.write('\n'); + process.stdout.write(` Available in export: ${chalk.cyan(locales.join(', '))}\n`); + process.stdout.write('\n'); + + const def = locales[0]; + const answer = await ask(` Master locale [${chalk.cyan(def)}]: `); + const picked = answer.trim() || def; + const match = locales.find((c) => c.toLowerCase() === picked.toLowerCase()); + if (!match) { + throw new Error(`"${picked}" not in source locales: ${locales.join(', ')}`); + } + process.stdout.write('\n'); + return match; +} + +function ask(question: string): Promise { + return new Promise((resolve) => { + const rl = readline.createInterface({ input: process.stdin, output: process.stdout }); + rl.question(question, (answer) => { + rl.close(); + resolve(answer); + }); + }); +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/region-config.json b/packages/contentstack-external-migrate/src/services/contentful/region-config.json new file mode 100644 index 000000000..e6a9123c8 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/region-config.json @@ -0,0 +1,65 @@ +{ + "NA": { + "name": "North America", + "cma": "https://api.contentstack.io", + "cda": "https://cdn.contentstack.io", + "app": "https://app.contentstack.com", + "developerHub": "https://developerhub-api.contentstack.com", + "personalize": "https://personalize-api.contentstack.com", + "launch": "https://launch-api.contentstack.com" + }, + "EU": { + "name": "Europe", + "cma": "https://eu-api.contentstack.com", + "cda": "https://eu-cdn.contentstack.com", + "app": "https://eu-app.contentstack.com", + "developerHub": "https://eu-developerhub-api.contentstack.com", + "personalize": "https://eu-personalize-api.contentstack.com", + "launch": "https://eu-launch-api.contentstack.com" + }, + "AZURE-NA": { + "name": "Azure North America", + "cma": "https://azure-na-api.contentstack.com", + "cda": "https://azure-na-cdn.contentstack.com", + "app": "https://azure-na-app.contentstack.com", + "developerHub": "https://azure-na-developerhub-api.contentstack.com", + "personalize": "https://azure-na-personalize-api.contentstack.com", + "launch": "https://azure-na-launch-api.contentstack.com" + }, + "AZURE-EU": { + "name": "Azure Europe", + "cma": "https://azure-eu-api.contentstack.com", + "cda": "https://azure-eu-cdn.contentstack.com", + "app": "https://azure-eu-app.contentstack.com", + "developerHub": "https://azure-eu-developerhub-api.contentstack.com", + "personalize": "https://azure-eu-personalize-api.contentstack.com", + "launch": "https://azure-eu-launch-api.contentstack.com" + }, + "GCP-NA": { + "name": "GCP North America", + "cma": "https://gcp-na-api.contentstack.com", + "cda": "https://gcp-na-cdn.contentstack.com", + "app": "https://gcp-na-app.contentstack.com", + "developerHub": "https://gcp-na-developerhub-api.contentstack.com", + "personalize": "https://gcp-na-personalize-api.contentstack.com", + "launch": "https://gcp-na-launch-api.contentstack.com" + }, + "GCP-EU": { + "name": "GCP Europe", + "cma": "https://gcp-eu-api.contentstack.com", + "cda": "https://gcp-eu-cdn.contentstack.com", + "app": "https://gcp-eu-app.contentstack.com", + "developerHub": "https://gcp-eu-developerhub-api.contentstack.com", + "personalize": "https://gcp-eu-personalize-api.contentstack.com", + "launch": "https://gcp-eu-launch-api.contentstack.com" + }, + "AU": { + "name": "Australia", + "cma": "https://au-api.contentstack.com", + "cda": "https://au-cdn.contentstack.com", + "app": "https://au-app.contentstack.com", + "developerHub": "https://au-developerhub-api.contentstack.com", + "personalize": "https://au-personalize-api.contentstack.com", + "launch": "https://au-launch-api.contentstack.com" + } +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/releases.ts b/packages/contentstack-external-migrate/src/services/contentful/releases.ts new file mode 100644 index 000000000..049291d31 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/releases.ts @@ -0,0 +1,192 @@ +import fs from 'fs'; +import path from 'path'; +import { fetchContentfulReleases } from '../../adapters/contentful/export'; +import { createReleaseWithItems, type ReleaseItem } from '../../lib/create-stack'; + +export interface MappedRelease { + name: string; + description: string; + items: ReleaseItem[]; + /** Source item links that couldn't be mapped (entry not migrated). */ + skipped: number; +} + +/** + * Map Contentful releases → Contentstack release payloads. Each Contentful + * release `entities.items` (links to entries/assets) becomes Contentstack + * release items. An entry item needs its content-type uid, supplied via + * `entryCtUid`; assets use the built-in `sys_assets`. Items whose entry wasn't + * migrated (no content-type uid) are skipped (counted, not silently lost). + * + * Pure function — unit-testable without any live API. + */ +export function mapContentfulReleases( + releases: any[], + opts: { + /** Contentful entry id → Contentstack entry uid (csdx reassigns uids on import). */ + entryUidMap: Record; + /** Contentful asset id → Contentstack asset uid. */ + assetUidMap: Record; + /** Contentful entry id → Contentstack content-type uid. */ + entryCtUid: Record; + locale: string; + }, +): MappedRelease[] { + const out: MappedRelease[] = []; + for (const rel of releases ?? []) { + const name = rel?.title || rel?.sys?.id; + if (!name) continue; + const links: any[] = rel?.entities?.items ?? []; + const items: ReleaseItem[] = []; + let skipped = 0; + for (const link of links) { + const linkType = link?.sys?.linkType; + const id = link?.sys?.id; + if (!id) continue; + if (linkType === 'Asset') { + // Asset — translate to the Contentstack asset uid assigned at import. + const csUid = opts.assetUidMap[id]; + if (csUid) { + items.push({ uid: csUid, content_type_uid: 'sys_assets', action: 'publish', locale: opts.locale }); + } else { + skipped += 1; + } + } else { + // Entry — needs both the Contentstack uid (post-import) and its content-type uid. + const csUid = opts.entryUidMap[id]; + const ct = opts.entryCtUid[id]; + if (csUid && ct) { + items.push({ uid: csUid, content_type_uid: ct, action: 'publish', locale: opts.locale }); + } else { + skipped += 1; + } + } + } + out.push({ name, description: rel?.description || '', items, skipped }); + } + return out; +} + +/** + * Read csdx's post-import id remapping (Contentful id → Contentstack uid) for + * entries and assets from an import backup dir's mapper. csdx reassigns uids on + * import, so release items must use these translated uids. + */ +export function readImportUidMaps(backupDir: string): { + entryUidMap: Record; + assetUidMap: Record; +} { + const read = (p: string): Record => { + try { + const j = JSON.parse(fs.readFileSync(p, 'utf8')); + return j && typeof j === 'object' ? j : {}; + } catch { + return {}; + } + }; + return { + entryUidMap: read(path.join(backupDir, 'mapper', 'entries', 'uid-mapping.json')), + assetUidMap: read(path.join(backupDir, 'mapper', 'assets', 'uid-mapping.json')), + }; +} + +/** Build entry-uid → content-type-uid map from a converted bundle's entries dir. */ +export function buildEntryContentTypeMap(bundleDir: string): Record { + const map: Record = {}; + const entriesRoot = path.join(bundleDir, 'entries'); + let cts: string[]; + try { + cts = fs.readdirSync(entriesRoot); + } catch { + return map; + } + for (const ct of cts) { + const ctDir = path.join(entriesRoot, ct); + const walk = (p: string) => { + let dirents: fs.Dirent[]; + try { + dirents = fs.readdirSync(p, { withFileTypes: true }); + } catch { + return; + } + for (const d of dirents) { + const fp = path.join(p, d.name); + if (d.isDirectory()) walk(fp); + else if (/-entries\.json$/.test(d.name)) { + try { + const data = JSON.parse(fs.readFileSync(fp, 'utf8')); + for (const uid of Object.keys(data || {})) if (!map[uid]) map[uid] = ct; + } catch { + // skip + } + } + } + }; + try { + if (fs.statSync(ctDir).isDirectory()) walk(ctDir); + } catch { + // skip + } + } + return map; +} + +export interface ReleaseMigrationResult { + total: number; + created: Array<{ name: string; uid: string; items: number; skipped: number }>; + failed: Array<{ name: string; error: string }>; +} + +/** + * Migrate a Contentful environment's Releases into Contentstack: fetch them from + * the live CF API, map their items to migrated entry/asset uids, and create a + * Contentstack Release per source release (items added, NOT auto-deployed). + * Runs after import (entries/assets must exist). Best-effort. + */ +export async function migrateReleases(opts: { + spaceId: string; + environmentId: string; + managementToken?: string; + apiKey: string; + bundleDir: string; + /** Contentful id → Contentstack uid maps (read from the import backup, since + * csdx reassigns uids on import). */ + entryUidMap: Record; + assetUidMap: Record; + locale: string; + branch?: string; +}): Promise { + const result: ReleaseMigrationResult = { total: 0, created: [], failed: [] }; + const releases = await fetchContentfulReleases(opts.spaceId, opts.environmentId, opts.managementToken); + if (!releases.length) return result; + + const entryCtUid = buildEntryContentTypeMap(opts.bundleDir); + const mapped = mapContentfulReleases(releases, { + entryUidMap: opts.entryUidMap, + assetUidMap: opts.assetUidMap, + entryCtUid, + locale: opts.locale, + }); + result.total = mapped.length; + + for (const m of mapped) { + try { + const res = await createReleaseWithItems(opts.apiKey, { + name: m.name, + description: m.description, + locale: opts.locale, + items: m.items, + branch: opts.branch, + }); + result.created.push({ name: m.name, uid: res.uid, items: res.itemsAdded, skipped: m.skipped }); + } catch (err: any) { + const detail = + err?.response?.data?.error_message || + (err?.response?.data?.errors && JSON.stringify(err.response.data.errors)) || + err?.message || + 'unknown error'; + result.failed.push({ name: m.name, error: typeof detail === 'string' ? detail : JSON.stringify(detail) }); + } + } + return result; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/scheduled.ts b/packages/contentstack-external-migrate/src/services/contentful/scheduled.ts new file mode 100644 index 000000000..b0494b833 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/scheduled.ts @@ -0,0 +1,116 @@ +import { fetchContentfulScheduledActions } from '../../adapters/contentful/export'; +import { scheduleEntryAction } from '../../lib/create-stack'; + +export interface MappedSchedule { + entryUid: string; + contentTypeUid: string; + action: 'publish' | 'unpublish'; + scheduledAt: string; + cfId: string; +} + +/** + * Map Contentful scheduled actions → Contentstack scheduled publish/unpublish + * intents. Only FUTURE-dated actions are kept (past ones are meaningless after + * migration). Entity ids are translated to the post-import Contentstack uids + * (csdx reassigns uids); entities not migrated are skipped. + * + * Pure function — unit-testable offline. `now` is injectable for tests. + */ +export function mapScheduledActions( + actions: any[], + opts: { + entryUidMap: Record; + assetUidMap: Record; + entryCtUid: Record; + }, + now: number = Date.now(), +): { scheduled: MappedSchedule[]; skipped: number } { + const scheduled: MappedSchedule[] = []; + let skipped = 0; + for (const a of actions ?? []) { + const action = a?.action; // 'publish' | 'unpublish' + const when = a?.scheduledFor?.datetime; + const link = a?.entity?.sys; + if (!action || !when || !link?.id) { + skipped += 1; + continue; + } + if (new Date(when).getTime() <= now) { + skipped += 1; // past — skip + continue; + } + const cfId = link.id; + if (link.linkType === 'Asset') { + const uid = opts.assetUidMap[cfId]; + if (uid) scheduled.push({ entryUid: uid, contentTypeUid: 'sys_assets', action, scheduledAt: when, cfId }); + else skipped += 1; + } else if (link.linkType === 'Entry') { + const uid = opts.entryUidMap[cfId]; + const ct = opts.entryCtUid[cfId]; + if (uid && ct) scheduled.push({ entryUid: uid, contentTypeUid: ct, action, scheduledAt: when, cfId }); + else skipped += 1; + } else { + // Release-scheduled actions etc. aren't handled here. + skipped += 1; + } + } + return { scheduled, skipped }; +} + +export interface ScheduleMigrationResult { + total: number; + scheduled: number; + skipped: number; + failed: Array<{ cfId: string; error: string }>; +} + +/** + * Migrate a Contentful environment's future scheduled actions into Contentstack + * scheduled publishes. Fetch (live API) → map (future-dated, uid-translated) → + * CMA schedule per entity. Runs after import. Best-effort + skip-safe. + */ +export async function migrateScheduledActions(opts: { + spaceId: string; + environmentId: string; + managementToken?: string; + apiKey: string; + entryUidMap: Record; + assetUidMap: Record; + entryCtUid: Record; + environment: string; + locale: string; + branch?: string; +}): Promise { + const result: ScheduleMigrationResult = { total: 0, scheduled: 0, skipped: 0, failed: [] }; + const actions = await fetchContentfulScheduledActions(opts.spaceId, opts.environmentId, opts.managementToken); + if (!actions.length) return result; + result.total = actions.length; + + const { scheduled, skipped } = mapScheduledActions(actions, { + entryUidMap: opts.entryUidMap, + assetUidMap: opts.assetUidMap, + entryCtUid: opts.entryCtUid, + }); + result.skipped = skipped; + + for (const s of scheduled) { + try { + await scheduleEntryAction(opts.apiKey, { + contentTypeUid: s.contentTypeUid, + entryUid: s.entryUid, + action: s.action, + environment: opts.environment, + locale: opts.locale, + scheduledAt: s.scheduledAt, + branch: opts.branch, + }); + result.scheduled += 1; + } catch (err: any) { + const detail = + err?.response?.data?.error_message || err?.message || 'unknown error'; + result.failed.push({ cfId: s.cfId, error: typeof detail === 'string' ? detail : JSON.stringify(detail) }); + } + } + return result; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/tasks.ts b/packages/contentstack-external-migrate/src/services/contentful/tasks.ts new file mode 100644 index 000000000..6856bebf3 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/tasks.ts @@ -0,0 +1,128 @@ +import { fetchContentfulEntryTasks } from '../../adapters/contentful/export'; +import { createEntryDiscussion, addEntryDiscussionMessage } from '../../lib/create-stack'; + +export interface MappedEntryTasks { + cfEntryId: string; + entryUid: string; + contentTypeUid: string; + /** One comment string per Contentful task. */ + messages: string[]; +} + +/** Build the comment text for one Contentful task (body + assignee/status/due note). */ +function taskMessage(task: any): string { + const body = String(task?.body || '').trim() || '(no description)'; + const status = task?.status ? `status: ${task.status}` : ''; + const assignee = task?.assignedTo?.sys?.id ? `assignee: ${task.assignedTo.sys.id}` : ''; + const due = task?.dueDate ? `due: ${task.dueDate}` : ''; + const meta = [assignee, status, due].filter(Boolean).join(' · '); + return meta ? `${body}\n\n(migrated from Contentful task — ${meta})` : `${body}\n\n(migrated from Contentful task)`; +} + +/** + * Map Contentful tasks (grouped by entry) → one Contentstack entry discussion + * per entry with one comment per task. Contentstack comments are per-field and + * allow one active discussion per field, while Contentful tasks are entry-level + * — so we attach a single discussion to the entry's title field and add each + * task as a comment. Entry ids are translated to post-import uids; tasks on + * un-migrated entries are skipped. Pure + unit-testable. + */ +export function mapTasks( + tasksByEntry: Array<{ cfEntryId: string; tasks: any[] }>, + opts: { entryUidMap: Record; entryCtUid: Record }, +): { mapped: MappedEntryTasks[]; skipped: number } { + const mapped: MappedEntryTasks[] = []; + let skipped = 0; + for (const { cfEntryId, tasks } of tasksByEntry ?? []) { + const list = tasks ?? []; + if (!list.length) continue; + const uid = opts.entryUidMap[cfEntryId]; + const ct = opts.entryCtUid[cfEntryId]; + if (!uid || !ct) { + skipped += list.length; + continue; + } + mapped.push({ cfEntryId, entryUid: uid, contentTypeUid: ct, messages: list.map(taskMessage) }); + } + return { mapped, skipped }; +} + +export interface TaskMigrationResult { + entriesWithTasks: number; + commentsCreated: number; + skipped: number; + failed: number; +} + +/** + * Migrate Contentful entry Tasks → Contentstack entry comments. Per migrated + * entry that has tasks: create ONE discussion on the title field, then add each + * task as a comment. Best-effort + skip-safe. + */ +export async function migrateTasks(opts: { + spaceId: string; + environmentId: string; + managementToken?: string; + apiKey: string; + entryUidMap: Record; + entryCtUid: Record; + locale: string; + fieldUid?: string; + branch?: string; +}): Promise { + const result: TaskMigrationResult = { entriesWithTasks: 0, commentsCreated: 0, skipped: 0, failed: 0 }; + const cfEntryIds = Object.keys(opts.entryUidMap); + if (!cfEntryIds.length) return result; + + // Fetch tasks only for migrated entries, small concurrency. + const tasksByEntry: Array<{ cfEntryId: string; tasks: any[] }> = []; + const CONCURRENCY = 5; + for (let i = 0; i < cfEntryIds.length; i += CONCURRENCY) { + const batch = cfEntryIds.slice(i, i + CONCURRENCY); + const fetched = await Promise.all( + batch.map(async (cfEntryId) => ({ + cfEntryId, + tasks: await fetchContentfulEntryTasks(opts.spaceId, opts.environmentId, cfEntryId, opts.managementToken), + })), + ); + for (const f of fetched) if (f.tasks.length) tasksByEntry.push(f); + } + + const { mapped, skipped } = mapTasks(tasksByEntry, { + entryUidMap: opts.entryUidMap, + entryCtUid: opts.entryCtUid, + }); + result.skipped = skipped; + result.entriesWithTasks = mapped.length; + + const fieldUid = opts.fieldUid || 'title'; + for (const e of mapped) { + try { + const duid = await createEntryDiscussion(opts.apiKey, { + contentTypeUid: e.contentTypeUid, + entryUid: e.entryUid, + locale: opts.locale, + fieldUid, + title: 'Migrated Contentful tasks', + branch: opts.branch, + }); + for (const message of e.messages) { + try { + await addEntryDiscussionMessage(opts.apiKey, { + contentTypeUid: e.contentTypeUid, + entryUid: e.entryUid, + discussionUid: duid, + message, + branch: opts.branch, + }); + result.commentsCreated += 1; + } catch { + result.failed += 1; + } + } + } catch { + result.failed += e.messages.length; + } + } + return result; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/types.ts b/packages/contentstack-external-migrate/src/services/contentful/types.ts new file mode 100644 index 000000000..a8409efcf --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/types.ts @@ -0,0 +1,56 @@ +/** + * Represents a user. + */ +export interface User { + /** + * The email address of the user. + */ + email: string; + + /** + * The password of the user. + */ + password: string; +} + +/** + * Represents the payload of an application token. + */ +export interface AppTokenPayload { + region: string; + user_id: string; + is_sso: boolean; +} + +/** + * Represents the LoginServiceType interface. + * @interface + */ +export interface LoginServiceType { + data: any; + status: number; +} + +/** + * Represents the migration query type. + */ +export interface MigrationQueryType { + id: string; + org_id: string; + region: string; + owner: string; +} + +export interface Locale { + code: string; + name: string; + fallback_locale: string; + uid: string; +} + +export interface RefreshTokenResponse { + access_token: string; + refresh_token?: string; + expires_in?: number; + token_type?: string; +} \ No newline at end of file diff --git a/packages/contentstack-external-migrate/src/services/contentful/users.ts b/packages/contentstack-external-migrate/src/services/contentful/users.ts new file mode 100644 index 000000000..615a4b55a --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/users.ts @@ -0,0 +1,131 @@ +import fs from 'fs'; +import path from 'path'; +import { fetchContentfulMembers } from '../../adapters/contentful/export'; +import { matchBuiltin } from './contentful/roles'; +import { + fetchStackRoles, + shareStackWithUsers, + type StackInvite, +} from '../../lib/create-stack'; + +export interface UserMigrationEntry { + email: string; + name?: string; + /** Contentful roles the member held (or 'admin'). */ + contentfulRoles: string[]; + /** Contentstack role names resolved for this member. */ + contentstackRoles: string[]; + /** Contentstack role uids assigned on invite. */ + roleUids: string[]; + /** Why a member was skipped (no email, or no role mapped). */ + skippedReason?: string; +} + +export interface UserMigrationResult { + total: number; + /** Members that will/did get invited (have at least one mapped role). */ + invitable: UserMigrationEntry[]; + /** Members skipped — no Contentstack role could be mapped, so we do NOT + * invite them (would otherwise grant a default/unintended role). */ + skipped: UserMigrationEntry[]; + /** Populated only when invites were actually sent. */ + invited?: string[]; + failed?: Array<{ email: string; error: string }>; +} + +/** + * Map a Contentful member's roles to Contentstack role uids, assigning EXACTLY + * the equivalent roles — never a default. A space admin → the Admin role. Other + * members → each Contentful role mapped to a built-in (synonyms) or a same-name + * custom role, resolved against the stack's actual roles. Members with no + * resolvable role are returned as skipped (the caller does not invite them). + */ +function planMember( + member: { email: string; firstName?: string; lastName?: string; admin: boolean; roleNames: string[] }, + stackRoles: Record, +): UserMigrationEntry { + const name = [member.firstName, member.lastName].filter(Boolean).join(' ') || undefined; + const cfRoles = member.admin ? ['admin'] : member.roleNames; + + // Resolve each Contentful role → a Contentstack role NAME. + const csRoleNames = new Set(); + if (member.admin) { + csRoleNames.add('Admin'); + } else { + for (const rn of member.roleNames) { + const target = matchBuiltin(rn) || rn; // built-in synonym, else same-name custom role + csRoleNames.add(target); + } + } + + // Resolve names → uids against the stack's actual roles. Drop any with no uid. + const roleUids: string[] = []; + const resolvedNames: string[] = []; + for (const rn of csRoleNames) { + const uid = stackRoles[rn]; + if (uid) { + roleUids.push(uid); + resolvedNames.push(rn); + } + } + + const entry: UserMigrationEntry = { + email: member.email, + name, + contentfulRoles: cfRoles, + contentstackRoles: resolvedNames, + roleUids, + }; + if (!roleUids.length) { + entry.skippedReason = + 'no matching Contentstack role (role not migrated / name mismatch) — not invited to avoid granting unintended access'; + } + return entry; +} + +/** + * Migrate Contentful space members → Contentstack stack users, inviting each + * with exactly their mapped role(s). Always writes a report to + * `/users/users-mapping.json`. Sends invites only when `invite` is true. + * + * Requires the LIVE Contentful Management API (space memberships are not in the + * static export), so it runs only when a space id + token are available. + */ +export async function migrateUsers(opts: { + spaceId: string; + managementToken?: string; + apiKey: string; + bundleDir: string; + invite?: boolean; +}): Promise { + const members = await fetchContentfulMembers(opts.spaceId, opts.managementToken); + const stackRoles = await fetchStackRoles(opts.apiKey); + + const entries = members.map((m) => planMember(m, stackRoles)); + const invitable = entries.filter((e) => e.roleUids.length); + const skipped = entries.filter((e) => !e.roleUids.length); + + const result: UserMigrationResult = { total: members.length, invitable, skipped }; + + // Always write the mapping report so the operator has a record. + try { + const dir = path.join(opts.bundleDir, 'users'); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync( + path.join(dir, 'users-mapping.json'), + `${JSON.stringify({ invitable, skipped }, null, 2)}\n`, + 'utf8', + ); + } catch { + // best-effort + } + + if (opts.invite && invitable.length) { + const invites: StackInvite[] = invitable.map((e) => ({ email: e.email, roleUids: e.roleUids })); + const sent = await shareStackWithUsers(opts.apiKey, invites); + result.invited = sent.invited; + result.failed = sent.failed; + } + + return result; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/utils/custom-logger.utils.ts b/packages/contentstack-external-migrate/src/services/contentful/utils/custom-logger.utils.ts new file mode 100644 index 000000000..0ee5bf1b2 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/utils/custom-logger.utils.ts @@ -0,0 +1,33 @@ +import fs from 'fs'; +import path from 'path'; +import mkdirp from 'mkdirp'; + +/** + * Minimal CLI replacement for the API's customLogger. Same signature so the + * copied contentful.service.ts works unchanged. Writes to ./logs/cli.log and + * mirrors errors to stderr when CLI_VERBOSE=1. + */ +export default async function customLogger( + projectId: string | undefined, + destinationStackId: string | undefined, + level: 'info' | 'error' | 'warn' | 'debug', + payload: any +): Promise { + const logDir = path.resolve(process.cwd(), 'logs'); + try { + await mkdirp(logDir); + const line = JSON.stringify({ + ts: new Date().toISOString(), + level, + projectId, + destinationStackId, + ...payload, + }); + await fs.promises.appendFile(path.join(logDir, 'cli.log'), line + '\n'); + } catch { + // logging must never throw + } + if (level === 'error' && process.env.CLI_VERBOSE === '1') { + console.error('[error]', payload?.message ?? payload); + } +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/utils/index.ts b/packages/contentstack-external-migrate/src/services/contentful/utils/index.ts new file mode 100644 index 000000000..60bf4c9b0 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/utils/index.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import path from 'path'; +import mkdirp from 'mkdirp'; + +export const isEmpty = (val: unknown) => + val === undefined || + val === null || + (typeof val === 'object' && Object.keys(val as object).length === 0) || + (typeof val === 'string' && val.trim() === ''); + +export const getLogMessage = ( + methodName: string, + message: string, + user: object = {}, + error?: any +) => ({ + methodName, + message, + ...(user && { user }), + ...(error && { error }), +}); + +export async function copyDirectory(srcDir: string, destDir: string): Promise { + await mkdirp(destDir); + const entries = await fs.promises.readdir(srcDir, { withFileTypes: true }); + for (const entry of entries) { + const src = path.join(srcDir, entry.name); + const dst = path.join(destDir, entry.name); + if (entry.isDirectory()) { + await copyDirectory(src, dst); + } else { + await fs.promises.copyFile(src, dst); + } + } +} + +import localeNames from '../locale-names.json'; + +/** + * In the CLI flow we don't talk to Contentstack — instead, ship a static + * locale-code → human-name table (the same one Contentstack's /locales endpoint + * returns). createLocale uses this to set each locale's `name` field, so + * "de-de" becomes "German - Germany" instead of falling back to the default + * "English - United States". + */ +export async function getAllLocales(): Promise<[any, Record]> { + return [null, localeNames as Record]; +} diff --git a/packages/contentstack-external-migrate/src/services/contentful/workflows.ts b/packages/contentstack-external-migrate/src/services/contentful/workflows.ts new file mode 100644 index 000000000..4d1c34a70 --- /dev/null +++ b/packages/contentstack-external-migrate/src/services/contentful/workflows.ts @@ -0,0 +1,116 @@ +import fs from 'fs'; +import path from 'path'; +import { v4 as uuidv4 } from 'uuid'; +import { fetchContentfulWorkflows } from '../../adapters/contentful/export'; + +/** Default stage colors (cycled) — Contentstack requires a color per stage. */ +const STAGE_COLORS = ['#2196f3', '#74ba76', '#e0a948', '#ec5b56', '#9c27b0', '#00bcd4']; + +/** Contentful content-type id → Contentstack content-type uid (snake_case + affix). */ +function ctUid(cfId: string, affix = ''): string { + const snake = String(cfId || '') + .replace(/([A-Z])/g, '_$1') + .toLowerCase() + .replace(/[^a-z0-9_]/g, '_') + .replace(/_+/g, '_') + .replace(/^_|_$/g, ''); + return affix ? `${affix}_${snake}` : snake; +} + +/** Pull the content-type ids a Contentful workflow definition applies to. */ +function appliesToContentTypes(def: any): string[] { + const ids: string[] = []; + for (const a of def?.appliesTo ?? []) { + for (const v of a?.validations ?? []) { + for (const id of v?.linkContentType ?? []) if (id) ids.push(id); + } + } + return ids; +} + +/** + * Map Contentful workflow definitions → a Contentstack workflows bundle + * (`/workflows/workflows.json`, the shape csdx import consumes). + * + * Each Contentful workflow `step` becomes a Contentstack `workflow_stage`. Stage + * access is opened to all users ($all) — Contentful step-level user/role + * assignments don't map 1:1 and are reviewed post-migration. The workflow + * applies to the mapped content types (or $all when unscoped). + */ +export function mapContentfulWorkflows( + definitions: any[], + affix = '', +): Record { + const workflows: Record = {}; + for (const def of definitions ?? []) { + const name = def?.name; + if (!name) continue; + const steps: any[] = Array.isArray(def?.steps) ? def.steps : []; + if (!steps.length) continue; + + const workflow_stages = steps.map((step: any, i: number) => ({ + color: STAGE_COLORS[i % STAGE_COLORS.length], + SYS_ACL: { + roles: { uids: [] }, + users: { uids: ['$all'] }, + others: {}, + }, + next_available_stages: ['$all'], + allStages: true, + allUsers: true, + specificStages: false, + specificUsers: false, + entry_lock: '$none', + name: String(step?.name || `Stage ${i + 1}`), + })); + + const cfCts = appliesToContentTypes(def); + const content_types = cfCts.length ? cfCts.map((id) => ctUid(id, affix)) : ['$all']; + + const uid = uuidv4().replace(/-/g, '').slice(0, 24); + workflows[uid] = { + name, + enabled: true, + branches: ['main'], + admin_users: { users: [] }, + content_types, + workflow_stages, + }; + } + return workflows; +} + +export interface WorkflowMigrationResult { + total: number; + workflows: string[]; +} + +/** + * Fetch a Contentful environment's workflows (live API) and write them into the + * bundle as `/workflows/workflows.json` so the standard csdx + * workflows import module creates them. Best-effort; returns what was written. + * + * Workflows are not in the static export, so this only does anything when a + * space id + token are available (the `--space-id` path). + */ +export async function buildWorkflowsBundle(opts: { + spaceId: string; + environmentId: string; + managementToken?: string; + bundleDir: string; + affix?: string; +}): Promise { + const definitions = await fetchContentfulWorkflows( + opts.spaceId, + opts.environmentId, + opts.managementToken, + ); + const workflows = mapContentfulWorkflows(definitions, opts.affix); + const names = Object.values(workflows).map((w: any) => w.name); + if (!names.length) return { total: 0, workflows: [] }; + + const dir = path.join(opts.bundleDir, 'workflows'); + fs.mkdirSync(dir, { recursive: true }); + fs.writeFileSync(path.join(dir, 'workflows.json'), `${JSON.stringify(workflows, null, 2)}\n`, 'utf8'); + return { total: names.length, workflows: names }; +} diff --git a/packages/contentstack-external-migrate/test/adapters/contentful/convert.test.ts b/packages/contentstack-external-migrate/test/adapters/contentful/convert.test.ts new file mode 100644 index 000000000..c0ff678ed --- /dev/null +++ b/packages/contentstack-external-migrate/test/adapters/contentful/convert.test.ts @@ -0,0 +1,68 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { afterEach, describe, expect, it } from 'vitest'; +import { convertContentfulExport } from '../../../src/adapters/contentful/convert'; + +const FIXTURE = path.resolve(__dirname, '../../fixtures/contentful-export.json'); +const LARGE_EXPORT = path.resolve( + __dirname, + '../../../../references/contentful-export-nty6h2uki8mm-master-2026-06-02T15-32-37.json', +); + +describe('convertContentfulExport', () => { + const tmpDirs: string[] = []; + + afterEach(() => { + for (const dir of tmpDirs) { + fs.rmSync(dir, { recursive: true, force: true }); + } + tmpDirs.length = 0; + const staging = path.join(process.cwd(), 'contentfulMigrationData'); + if (fs.existsSync(staging)) { + fs.rmSync(staging, { recursive: true, force: true }); + } + }); + + it('writes mapper.json and content_types/ into bundle/', async () => { + const outputDir = fs.mkdtempSync(path.join(os.tmpdir(), 'cs-migrate-alt-')); + tmpDirs.push(outputDir); + + const result = await convertContentfulExport({ + input: FIXTURE, + outputDir, + masterLocale: 'en-US', + verbose: false, + }); + + expect(fs.existsSync(path.join(result.bundleDir, 'mapper.json'))).toBe(true); + expect(fs.existsSync(path.join(result.bundleDir, 'content_types'))).toBe(true); + expect(fs.existsSync(path.join(result.bundleDir, 'locales'))).toBe(true); + expect(fs.existsSync(path.join(result.bundleDir, 'export-info.json'))).toBe(true); + expect(result.stats.contentTypes).toBeGreaterThan(0); + }); + + it('processes all export assets (not capped at 10)', async () => { + if (!fs.existsSync(LARGE_EXPORT)) return; + + const exportData = JSON.parse(fs.readFileSync(LARGE_EXPORT, 'utf8')); + const exportAssetCount = exportData.assets?.length ?? 0; + if (exportAssetCount <= 10) return; + + const outputDir = fs.mkdtempSync(path.join(os.tmpdir(), 'cs-migrate-alt-assets-')); + tmpDirs.push(outputDir); + + const result = await convertContentfulExport({ + input: LARGE_EXPORT, + outputDir, + masterLocale: 'en-US', + }); + + const indexPath = path.join(result.bundleDir, 'assets', 'index.json'); + expect(fs.existsSync(indexPath)).toBe(true); + const index = JSON.parse(fs.readFileSync(indexPath, 'utf8')); + const convertedCount = Object.keys(index).length; + expect(convertedCount).toBeGreaterThan(10); + expect(convertedCount).toBeLessThanOrEqual(exportAssetCount); + }); +}); diff --git a/packages/contentstack-external-migrate/test/adapters/contentful/export.test.ts b/packages/contentstack-external-migrate/test/adapters/contentful/export.test.ts new file mode 100644 index 000000000..c862f3bad --- /dev/null +++ b/packages/contentstack-external-migrate/test/adapters/contentful/export.test.ts @@ -0,0 +1,106 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { afterEach, describe, expect, it, vi } from 'vitest'; +import { + buildContentfulSpaceExportArgs, + exportContentful, + resolveContentfulManagementToken, +} from '../../../src/adapters/contentful/export'; +import { formatContentfulCliInvocation } from '../../../src/lib/contentful-cli-spawn'; + +const tempDirs: string[] = []; + +afterEach(() => { + for (const dir of tempDirs.splice(0)) { + fs.rmSync(dir, { recursive: true, force: true }); + } + vi.unstubAllEnvs(); +}); + +describe('resolveContentfulManagementToken', () => { + it('prefers flag over env', () => { + vi.stubEnv('CONTENTFUL_MANAGEMENT_TOKEN', 'env-token'); + expect(resolveContentfulManagementToken('flag-token')).toBe('flag-token'); + }); + + it('falls back to env when flag is missing', () => { + vi.stubEnv('CONTENTFUL_MANAGEMENT_TOKEN', 'env-token'); + expect(resolveContentfulManagementToken()).toBe('env-token'); + }); +}); + +describe('buildContentfulSpaceExportArgs', () => { + it('maps required export flags', () => { + const args = buildContentfulSpaceExportArgs( + { outputDir: './migration-workspace', spaceId: 'abc123' }, + 'secret-token', + ); + expect(args).toContain('space'); + expect(args).toContain('export'); + expect(args).toEqual( + expect.arrayContaining([ + '--space-id', + 'abc123', + '--management-token', + 'secret-token', + '--export-dir', + path.resolve('./migration-workspace'), + '--content-file', + 'export.json', + ]), + ); + }); + + it('adds optional draft, archived, and asset flags', () => { + const args = buildContentfulSpaceExportArgs( + { + outputDir: '/tmp/ws', + spaceId: '1', + includeDrafts: true, + includeArchived: true, + downloadAssets: true, + }, + 'tok', + ); + expect(args).toContain('--include-drafts'); + expect(args).toContain('--include-archived'); + expect(args).toContain('--download-assets'); + }); + + it('never logs the management token', () => { + const args = buildContentfulSpaceExportArgs( + { outputDir: './ws', spaceId: '1' }, + 'super-secret', + ); + const logged = formatContentfulCliInvocation(args); + expect(logged).not.toContain('super-secret'); + expect(logged).toContain('***'); + }); +}); + +describe('exportContentful', () => { + it('validates export.json after a successful CLI run', async () => { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'migrate-export-')); + tempDirs.push(dir); + const fixture = path.resolve(__dirname, '../../fixtures/contentful-export.json'); + const exportFile = path.join(dir, 'export.json'); + fs.copyFileSync(fixture, exportFile); + + const spawnFn = vi.fn().mockResolvedValue(0); + + const result = await exportContentful( + { outputDir: dir, spaceId: 'space-1', managementToken: 'tok' }, + spawnFn, + ); + + expect(spawnFn).toHaveBeenCalledOnce(); + expect(result.exportFile).toBe(exportFile); + }); + + it('throws when management token is missing', async () => { + await expect( + exportContentful({ outputDir: '/tmp', spaceId: '1' }), + ).rejects.toThrow(/CONTENTFUL_MANAGEMENT_TOKEN/); + }); +}); diff --git a/packages/contentstack-external-migrate/test/adapters/registry.test.ts b/packages/contentstack-external-migrate/test/adapters/registry.test.ts new file mode 100644 index 000000000..e591b73a8 --- /dev/null +++ b/packages/contentstack-external-migrate/test/adapters/registry.test.ts @@ -0,0 +1,12 @@ +import { describe, it, expect } from 'vitest'; +import { getAdapter } from '../../src/adapters/registry'; + +describe('getAdapter', () => { + it('returns contentful adapter', () => { + expect(getAdapter('contentful').legacy).toBe('contentful'); + }); + + it('throws for unsupported legacy CMS', () => { + expect(() => getAdapter('sanity')).toThrow('Unsupported legacy CMS'); + }); +}); diff --git a/packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts b/packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts new file mode 100644 index 000000000..4e3b52618 --- /dev/null +++ b/packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from 'vitest'; +import { buildStacksAuditArgs } from '../../../src/commands/migrate/audit'; + +describe('buildStacksAuditArgs', () => { + it('maps required data-dir to native audit', () => { + expect(buildStacksAuditArgs('./bundle', {})).toEqual([ + 'cm:stacks:audit', + '--data-dir', + './bundle', + ]); + }); + + it('passes optional report-path, modules, and csv', () => { + expect( + buildStacksAuditArgs('/data/bundle', { + 'report-path': './audit-reports', + modules: 'content-types,entries', + csv: true, + }), + ).toEqual([ + 'cm:stacks:audit', + '--data-dir', + '/data/bundle', + '--report-path', + './audit-reports', + '--modules', + 'content-types,entries', + '--csv', + ]); + }); + + it('omits csv when false', () => { + const args = buildStacksAuditArgs('./bundle', { csv: false }); + expect(args).not.toContain('--csv'); + }); +}); diff --git a/packages/contentstack-external-migrate/test/commands/migrate/import.test.ts b/packages/contentstack-external-migrate/test/commands/migrate/import.test.ts new file mode 100644 index 000000000..0656eebca --- /dev/null +++ b/packages/contentstack-external-migrate/test/commands/migrate/import.test.ts @@ -0,0 +1,42 @@ +import { describe, expect, it } from 'vitest'; +import { buildStacksImportArgs } from '../../../src/commands/migrate/import'; + +describe('buildStacksImportArgs', () => { + it('maps stack key and data-dir to native import', () => { + expect(buildStacksImportArgs('bltKEY', './bundle', {})).toEqual([ + 'cm:stacks:import', + '--stack-api-key', + 'bltKEY', + '--data-dir', + './bundle', + '--yes', + ]); + }); + + it('omits --yes when yes is false', () => { + const args = buildStacksImportArgs('bltKEY', './bundle', { yes: false }); + expect(args).not.toContain('--yes'); + }); + + it('forwards skip-audit, module, and branch', () => { + expect( + buildStacksImportArgs('bltKEY', '/data/bundle', { + 'skip-audit': true, + module: 'entries', + branch: 'main', + }), + ).toEqual([ + 'cm:stacks:import', + '--stack-api-key', + 'bltKEY', + '--data-dir', + '/data/bundle', + '--yes', + '--skip-audit', + '--module', + 'entries', + '--branch', + 'main', + ]); + }); +}); diff --git a/packages/contentstack-external-migrate/test/fixtures/contentful-export.json b/packages/contentstack-external-migrate/test/fixtures/contentful-export.json new file mode 100644 index 000000000..9fe1a22b5 --- /dev/null +++ b/packages/contentstack-external-migrate/test/fixtures/contentful-export.json @@ -0,0 +1,82 @@ +{ + "contentTypes": [ + { + "sys": { + "id": "blogPost", + "type": "ContentType", + "createdAt": "2024-01-01T00:00:00.000Z", + "updatedAt": "2024-01-01T00:00:00.000Z", + "version": 1 + }, + "displayField": "title", + "name": "Blog Post", + "description": "A simple blog post content type for CLI fixture testing.", + "fields": [ + { + "id": "title", + "name": "Title", + "type": "Symbol", + "localized": false, + "required": true, + "disabled": false, + "omitted": false + }, + { + "id": "body", + "name": "Body", + "type": "Text", + "localized": false, + "required": false, + "disabled": false, + "omitted": false + } + ] + } + ], + "editorInterfaces": [ + { + "sys": { + "id": "default", + "type": "EditorInterface", + "contentType": { + "sys": { "id": "blogPost", "linkType": "ContentType", "type": "Link" } + } + }, + "controls": [ + { "fieldId": "title", "widgetId": "singleLine", "widgetNamespace": "builtin" }, + { "fieldId": "body", "widgetId": "multipleLine", "widgetNamespace": "builtin" } + ] + } + ], + "entries": [ + { + "sys": { + "id": "entry-1", + "type": "Entry", + "createdAt": "2024-01-01T00:00:00.000Z", + "updatedAt": "2024-01-01T00:00:00.000Z", + "version": 1, + "contentType": { + "sys": { "id": "blogPost", "linkType": "ContentType", "type": "Link" } + } + }, + "fields": { + "title": { "en-US": "Hello, CLI" }, + "body": { "en-US": "This is a fixture entry for CLI tests." } + } + } + ], + "assets": [], + "locales": [ + { + "sys": { "id": "en-US", "type": "Locale" }, + "code": "en-US", + "name": "English (United States)", + "default": true, + "fallbackCode": null + } + ], + "webhooks": [], + "roles": [], + "tags": [] +} diff --git a/packages/contentstack-external-migrate/test/lib/bundle.test.ts b/packages/contentstack-external-migrate/test/lib/bundle.test.ts new file mode 100644 index 000000000..683107c8c --- /dev/null +++ b/packages/contentstack-external-migrate/test/lib/bundle.test.ts @@ -0,0 +1,48 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { afterEach, describe, expect, it } from 'vitest'; +import { assertBundleDir } from '../../src/lib/bundle'; + +const tempDirs: string[] = []; + +function makeTempBundle(entries: Record): string { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'migrate-bundle-')); + tempDirs.push(dir); + for (const [name, kind] of Object.entries(entries)) { + const target = path.join(dir, name); + if (kind === 'dir') { + fs.mkdirSync(target, { recursive: true }); + } else { + fs.writeFileSync(target, '{}'); + } + } + return dir; +} + +afterEach(() => { + for (const dir of tempDirs.splice(0)) { + fs.rmSync(dir, { recursive: true, force: true }); + } +}); + +describe('assertBundleDir', () => { + it('accepts a valid convert bundle layout', () => { + const bundle = makeTempBundle({ + content_types: 'dir', + locales: 'dir', + 'export-info.json': 'file', + }); + expect(() => assertBundleDir(bundle)).not.toThrow(); + }); + + it('throws when required entries are missing', () => { + const bundle = makeTempBundle({ + content_types: 'dir', + locales: 'dir', + }); + expect(() => assertBundleDir(bundle)).toThrow( + /Invalid bundle.*missing export-info\.json.*migrate:convert/, + ); + }); +}); diff --git a/packages/contentstack-external-migrate/test/lib/contentful-cli-spawn.test.ts b/packages/contentstack-external-migrate/test/lib/contentful-cli-spawn.test.ts new file mode 100644 index 000000000..20103ce5b --- /dev/null +++ b/packages/contentstack-external-migrate/test/lib/contentful-cli-spawn.test.ts @@ -0,0 +1,67 @@ +import { describe, expect, it } from 'vitest'; +import type { SpawnSyncReturns } from 'child_process'; +import { + formatContentfulCliInvocation, + isGlobalContentfulCliAvailable, + redactContentfulCliArgs, + resolveContentfulCli, +} from '../../src/lib/contentful-cli-spawn'; + +function mockSpawnSync(status: number): typeof import('child_process').spawnSync { + return (() => + ({ + status, + stdout: '', + stderr: '', + pid: 1, + output: [], + signal: null, + }) as SpawnSyncReturns) as typeof import('child_process').spawnSync; +} + +describe('contentful CLI resolution', () => { + it('uses global contentful when --version succeeds', () => { + const sync = mockSpawnSync(0); + expect(isGlobalContentfulCliAvailable(sync)).toBe(true); + const inv = resolveContentfulCli(sync); + expect(inv).toEqual({ command: 'contentful', prefixArgs: [] }); + expect([inv.command, ...inv.prefixArgs, 'space', 'export'].join(' ')).toBe( + 'contentful space export', + ); + }); + + it('falls back to npx contentful-cli when global is missing', () => { + const sync = mockSpawnSync(1); + expect(isGlobalContentfulCliAvailable(sync)).toBe(false); + expect(resolveContentfulCli(sync)).toEqual({ + command: 'npx', + prefixArgs: ['-y', 'contentful-cli'], + }); + // formatContentfulCliInvocation uses live PATH; test resolved shape only + const inv = resolveContentfulCli(sync); + expect([inv.command, ...inv.prefixArgs, 'space', 'export'].join(' ')).toBe( + 'npx -y contentful-cli space export', + ); + }); +}); + +describe('redactContentfulCliArgs', () => { + it('masks management token values in logged argv', () => { + expect( + redactContentfulCliArgs([ + 'space', + 'export', + '--management-token', + 'cfpats-secret', + ]), + ).toEqual(['space', 'export', '--management-token', '***']); + expect( + formatContentfulCliInvocation([ + 'space', + 'export', + '--management-token', + 'cfpats-secret', + ]), + ).not.toContain('cfpats-secret'); + }); +}); diff --git a/packages/contentstack-external-migrate/test/lib/csdx-spawn.test.ts b/packages/contentstack-external-migrate/test/lib/csdx-spawn.test.ts new file mode 100644 index 000000000..3753955a1 --- /dev/null +++ b/packages/contentstack-external-migrate/test/lib/csdx-spawn.test.ts @@ -0,0 +1,32 @@ +import { EventEmitter } from 'events'; +import { describe, expect, it } from 'vitest'; +import type { CsdxSpawnFn } from '../../src/lib/csdx-spawn'; +import { spawnCsdx } from '../../src/lib/csdx-spawn'; + +function mockSpawn(exitCode: number): { fn: CsdxSpawnFn; capturedArgs: string[] } { + const capturedArgs: string[] = []; + const fn: CsdxSpawnFn = (command, args) => { + expect(command).toBe('csdx'); + capturedArgs.splice(0, capturedArgs.length, ...args); + const child = new EventEmitter() as ReturnType; + process.nextTick(() => child.emit('exit', exitCode)); + return child; + }; + return { fn, capturedArgs }; +} + +describe('spawnCsdx', () => { + it('invokes csdx with the given args and returns exit code', async () => { + const { fn, capturedArgs } = mockSpawn(0); + const auditArgs = ['cm:stacks:audit', '--data-dir', '/tmp/bundle']; + const code = await spawnCsdx(auditArgs, fn); + expect(code).toBe(0); + expect(capturedArgs).toEqual(auditArgs); + }); + + it('returns non-zero exit code from child', async () => { + const { fn } = mockSpawn(2); + const code = await spawnCsdx(['cm:stacks:audit'], fn); + expect(code).toBe(2); + }); +}); diff --git a/packages/contentstack-external-migrate/test/lib/manifest.test.ts b/packages/contentstack-external-migrate/test/lib/manifest.test.ts new file mode 100644 index 000000000..d48484d4c --- /dev/null +++ b/packages/contentstack-external-migrate/test/lib/manifest.test.ts @@ -0,0 +1,110 @@ +import fs from 'fs'; +import os from 'os'; +import path from 'path'; +import { afterEach, describe, expect, it } from 'vitest'; +import { + formatMigrationStatus, + inferWorkspace, + MANIFEST_FILENAME, + patchManifest, + readManifest, + stackApiKeyPrefix, + suggestNextCommand, + toWorkspaceRelative, + writeManifest, +} from '../../src/lib/manifest'; +import type { MigrationManifest } from '../../src/lib/manifest'; + +const tempDirs: string[] = []; + +function makeWorkspace(): string { + const dir = fs.mkdtempSync(path.join(os.tmpdir(), 'migrate-ws-')); + tempDirs.push(dir); + return dir; +} + +afterEach(() => { + for (const dir of tempDirs.splice(0)) { + fs.rmSync(dir, { recursive: true, force: true }); + } +}); + +describe('manifest I/O', () => { + it('writes and reads migration-manifest.json', async () => { + const ws = makeWorkspace(); + const manifest: MigrationManifest = { + version: 1, + legacy: 'contentful', + workspace: 'migration-workspace', + source: { exportFile: 'export.json' }, + }; + await writeManifest(ws, manifest); + expect(fs.existsSync(path.join(ws, MANIFEST_FILENAME))).toBe(true); + expect(await readManifest(ws)).toEqual(manifest); + }); + + it('patchManifest merges nested sections', async () => { + const ws = makeWorkspace(); + await patchManifest(ws, { source: { spaceId: 'abc' } }, { legacy: 'contentful' }); + await patchManifest(ws, { + convert: { + completedAt: '2026-01-01T00:00:00.000Z', + stats: { locales: 2, contentTypes: 3, entries: 10 }, + }, + }); + const manifest = await readManifest(ws); + expect(manifest?.source?.spaceId).toBe('abc'); + expect(manifest?.convert?.stats?.entries).toBe(10); + }); + + it('never stores full stack API keys', () => { + expect(stackApiKeyPrefix('blt1234567890abcdef')).toBe('blt1234…'); + const raw = JSON.stringify({ import: { stackApiKeyPrefix: stackApiKeyPrefix('bltSECRETKEY') } }); + expect(raw).not.toContain('SECRETKEY'); + }); +}); + +describe('inferWorkspace', () => { + it('treats contentstack-import parent as workspace', () => { + const ws = makeWorkspace(); + const importDir = path.join(ws, 'contentstack-import'); + fs.mkdirSync(importDir, { recursive: true }); + expect(inferWorkspace({ output: importDir })).toBe(ws); + }); + + it('finds workspace from existing manifest', async () => { + const ws = makeWorkspace(); + await patchManifest(ws, { source: { spaceId: '1' } }, { legacy: 'contentful' }); + const bundle = path.join(ws, 'contentstack-import', 'bundle'); + fs.mkdirSync(bundle, { recursive: true }); + expect(inferWorkspace({ dataDir: bundle })).toBe(ws); + }); +}); + +describe('formatMigrationStatus', () => { + it('suggests import after audit', () => { + const ws = makeWorkspace(); + const manifest: MigrationManifest = { + version: 1, + legacy: 'contentful', + workspace: '.', + source: { exportedAt: 't', exportFile: 'export.json' }, + convert: { + completedAt: 't', + bundleDir: 'contentstack-import/bundle', + stats: { locales: 1, contentTypes: 2, entries: 3 }, + }, + audit: { lastRunAt: 't', reportPath: 'audit-reports' }, + }; + const lines = formatMigrationStatus(manifest, ws); + expect(lines.some((l) => l.includes('[✓] export'))).toBe(true); + expect(lines.some((l) => l.includes('[✓] audit'))).toBe(true); + expect(suggestNextCommand(manifest, ws)).toContain('migrate:import'); + }); + + it('uses workspace-relative paths', () => { + const ws = makeWorkspace(); + const rel = toWorkspaceRelative(ws, path.join(ws, 'export.json')); + expect(rel).toBe('export.json'); + }); +}); diff --git a/packages/contentstack-external-migrate/test/services/contentful/releases.test.ts b/packages/contentstack-external-migrate/test/services/contentful/releases.test.ts new file mode 100644 index 000000000..72b5a5e2a --- /dev/null +++ b/packages/contentstack-external-migrate/test/services/contentful/releases.test.ts @@ -0,0 +1,64 @@ +import { describe, expect, it } from 'vitest'; +import { mapContentfulReleases } from '../../../src/services/contentful/releases'; + +// Synthetic Contentful release, shaped per the CF Releases API: each release has +// entities.items = links to Entry/Asset by id. Lets us test the mapping offline, +// without a paid Contentful tier that has the Releases feature. +const CF_RELEASES = [ + { + sys: { id: 'rel1', type: 'Release' }, + title: 'Launch bundle', + description: 'Homepage + hero', + entities: { + sys: { type: 'Array' }, + items: [ + { sys: { type: 'Link', linkType: 'Entry', id: 'entryA' } }, + { sys: { type: 'Link', linkType: 'Entry', id: 'entryB' } }, + { sys: { type: 'Link', linkType: 'Asset', id: 'assetX' } }, + { sys: { type: 'Link', linkType: 'Entry', id: 'notMigrated' } }, + ], + }, + }, + { + sys: { id: 'rel2' }, + title: 'Empty release', + entities: { items: [] }, + }, +]; + +describe('mapContentfulReleases', () => { + // csdx reassigns uids on import: CF id → CS uid. + const entryUidMap = { entryA: 'blt_a', entryB: 'blt_b' }; // notMigrated absent + const assetUidMap = { assetX: 'blt_x' }; + const entryCtUid = { entryA: 'home_page', entryB: 'author' }; + const mapped = mapContentfulReleases(CF_RELEASES, { entryUidMap, assetUidMap, entryCtUid, locale: 'en-us' }); + + it('maps one Contentstack release per Contentful release', () => { + expect(mapped).toHaveLength(2); + expect(mapped[0].name).toBe('Launch bundle'); + expect(mapped[0].description).toBe('Homepage + hero'); + }); + + it('translates entry ids to CS uids with content-type uid + publish action', () => { + const a = mapped[0].items.find((i) => i.uid === 'blt_a'); + expect(a).toEqual({ uid: 'blt_a', content_type_uid: 'home_page', action: 'publish', locale: 'en-us' }); + const b = mapped[0].items.find((i) => i.uid === 'blt_b'); + expect(b?.content_type_uid).toBe('author'); + }); + + it('translates assets to their CS uid + sys_assets', () => { + const asset = mapped[0].items.find((i) => i.uid === 'blt_x'); + expect(asset).toEqual({ uid: 'blt_x', content_type_uid: 'sys_assets', action: 'publish', locale: 'en-us' }); + }); + + it('skips entries that were not migrated (no uid/content-type), counted not lost', () => { + expect(mapped[0].items.find((i) => i.uid === 'notMigrated')).toBeUndefined(); + expect(mapped[0].items).toHaveLength(3); // blt_a, blt_b, blt_x + expect(mapped[0].skipped).toBe(1); + }); + + it('handles an empty release', () => { + expect(mapped[1].items).toHaveLength(0); + expect(mapped[1].skipped).toBe(0); + }); +}); diff --git a/packages/contentstack-external-migrate/test/services/contentful/scheduled.test.ts b/packages/contentstack-external-migrate/test/services/contentful/scheduled.test.ts new file mode 100644 index 000000000..4c0fb1be6 --- /dev/null +++ b/packages/contentstack-external-migrate/test/services/contentful/scheduled.test.ts @@ -0,0 +1,38 @@ +import { describe, expect, it } from 'vitest'; +import { mapScheduledActions } from '../../../src/services/contentful/scheduled'; + +const NOW = new Date('2026-06-10T00:00:00Z').getTime(); +const FUTURE = '2026-12-01T09:00:00Z'; +const PAST = '2026-01-01T09:00:00Z'; + +// Synthetic CF scheduled actions (per the CF Scheduled Actions API shape). +const ACTIONS = [ + { sys: { id: 'sa1', status: 'scheduled' }, action: 'publish', scheduledFor: { datetime: FUTURE }, entity: { sys: { type: 'Link', linkType: 'Entry', id: 'entryA' } } }, + { sys: { id: 'sa2' }, action: 'unpublish', scheduledFor: { datetime: FUTURE }, entity: { sys: { type: 'Link', linkType: 'Asset', id: 'assetX' } } }, + { sys: { id: 'sa3' }, action: 'publish', scheduledFor: { datetime: PAST }, entity: { sys: { type: 'Link', linkType: 'Entry', id: 'entryA' } } }, // past → skip + { sys: { id: 'sa4' }, action: 'publish', scheduledFor: { datetime: FUTURE }, entity: { sys: { type: 'Link', linkType: 'Entry', id: 'notMigrated' } } }, // no uid → skip +]; + +describe('mapScheduledActions', () => { + const opts = { + entryUidMap: { entryA: 'blt_a' }, + assetUidMap: { assetX: 'blt_x' }, + entryCtUid: { entryA: 'home_page' }, + }; + const { scheduled, skipped } = mapScheduledActions(ACTIONS, opts, NOW); + + it('keeps only future-dated, uid-translatable actions', () => { + expect(scheduled).toHaveLength(2); + expect(skipped).toBe(2); // past + notMigrated + }); + + it('translates a future entry publish', () => { + const e = scheduled.find((s) => s.cfId === 'entryA'); + expect(e).toMatchObject({ entryUid: 'blt_a', contentTypeUid: 'home_page', action: 'publish', scheduledAt: FUTURE }); + }); + + it('translates a future asset unpublish to sys_assets', () => { + const a = scheduled.find((s) => s.cfId === 'assetX'); + expect(a).toMatchObject({ entryUid: 'blt_x', contentTypeUid: 'sys_assets', action: 'unpublish' }); + }); +}); diff --git a/packages/contentstack-external-migrate/test/services/contentful/tasks.test.ts b/packages/contentstack-external-migrate/test/services/contentful/tasks.test.ts new file mode 100644 index 000000000..c83fdc04d --- /dev/null +++ b/packages/contentstack-external-migrate/test/services/contentful/tasks.test.ts @@ -0,0 +1,36 @@ +import { describe, expect, it } from 'vitest'; +import { mapTasks } from '../../../src/services/contentful/tasks'; + +// Synthetic CF tasks grouped by entry (per the CF Tasks API shape). +const TASKS_BY_ENTRY = [ + { + cfEntryId: 'entryA', + tasks: [ + { sys: { id: 't1' }, body: 'Review SEO', status: 'active', assignedTo: { sys: { linkType: 'User', id: 'u1' } } }, + { sys: { id: 't2' }, body: 'Legal sign-off', status: 'resolved' }, + ], + }, + { cfEntryId: 'notMigrated', tasks: [{ sys: { id: 't3' }, body: 'x', status: 'active' }] }, + { cfEntryId: 'entryB', tasks: [] }, // no tasks → ignored +]; + +describe('mapTasks', () => { + const opts = { entryUidMap: { entryA: 'blt_a' }, entryCtUid: { entryA: 'home_page' } }; + const { mapped, skipped } = mapTasks(TASKS_BY_ENTRY, opts); + + it('groups one discussion per migrated entry with one comment per task', () => { + expect(mapped).toHaveLength(1); + expect(mapped[0]).toMatchObject({ cfEntryId: 'entryA', entryUid: 'blt_a', contentTypeUid: 'home_page' }); + expect(mapped[0].messages).toHaveLength(2); + }); + + it('embeds the task body + assignee/status in the comment', () => { + expect(mapped[0].messages[0]).toContain('Review SEO'); + expect(mapped[0].messages[0]).toContain('assignee: u1'); + expect(mapped[0].messages[0]).toContain('status: active'); + }); + + it('skips tasks on un-migrated entries (counted, not lost)', () => { + expect(skipped).toBe(1); // notMigrated had 1 task + }); +}); diff --git a/packages/contentstack-external-migrate/tsconfig.json b/packages/contentstack-external-migrate/tsconfig.json new file mode 100644 index 000000000..cd0bbefce --- /dev/null +++ b/packages/contentstack-external-migrate/tsconfig.json @@ -0,0 +1,18 @@ +{ + "compilerOptions": { + "declaration": true, + "importHelpers": true, + "module": "commonjs", + "outDir": "lib", + "rootDir": "src", + "strict": true, + "target": "es2022", + "skipLibCheck": true, + "resolveJsonModule": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "allowJs": true + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "lib", "test"] +} \ No newline at end of file diff --git a/packages/contentstack-external-migrate/tsconfig.tsbuildinfo b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo new file mode 100644 index 000000000..07e9c07fa --- /dev/null +++ b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/index.ts","./src/adapters/registry.ts","./src/adapters/types.ts","./src/adapters/contentful/convert.ts","./src/adapters/contentful/export.ts","./src/adapters/contentful/index.ts","./src/adapters/contentful/validator.ts","./src/commands/migrate/audit.ts","./src/commands/migrate/convert.ts","./src/commands/migrate/create.ts","./src/commands/migrate/export.ts","./src/commands/migrate/import.ts","./src/commands/migrate/status.ts","./src/lib/bundle.ts","./src/lib/clear-import-state.ts","./src/lib/contentful-cli-spawn.ts","./src/lib/conversion-summary.ts","./src/lib/create-stack.ts","./src/lib/csdx-spawn.ts","./src/lib/local-date.ts","./src/lib/log.ts","./src/lib/manifest.ts","./src/lib/parse-json-loose.ts","./src/services/contentful/config.ts","./src/services/contentful/constants.ts","./src/services/contentful/content-type-creator.ts","./src/services/contentful/contentful.service.ts","./src/services/contentful/extension.service.ts","./src/services/contentful/market-app.utils.ts","./src/services/contentful/marketplace.service.ts","./src/services/contentful/releases.ts","./src/services/contentful/scheduled.ts","./src/services/contentful/tasks.ts","./src/services/contentful/types.ts","./src/services/contentful/users.ts","./src/services/contentful/workflows.ts","./src/services/contentful/contentful/jsonrte.ts","./src/services/contentful/contentful/markdown.ts","./src/services/contentful/contentful/roles.ts","./src/services/contentful/contentful/taxonomy.service.ts","./src/services/contentful/mapper/write.ts","./src/services/contentful/migration-contentful/index.js","./src/services/contentful/migration-contentful/libs/contenttypemapper.js","./src/services/contentful/migration-contentful/libs/createinitialmapper.js","./src/services/contentful/migration-contentful/libs/extractcontenttypes.js","./src/services/contentful/migration-contentful/libs/extractlocale.js","./src/services/contentful/migration-contentful/libs/extracttaxonomy.js","./src/services/contentful/migration-contentful/utils/helper.js","./src/services/contentful/prompts/master-locale.ts","./src/services/contentful/utils/custom-logger.utils.ts","./src/services/contentful/utils/index.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/packages/contentstack-external-migrate/vitest.config.ts b/packages/contentstack-external-migrate/vitest.config.ts new file mode 100644 index 000000000..47292746a --- /dev/null +++ b/packages/contentstack-external-migrate/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + include: ['test/**/*.test.ts'], + // migration-contentful writes to cwd/contentfulMigrationData — avoid parallel files + fileParallelism: false, + }, +}); From c97dbe36451bf3311d8f3a4f5f28a3276a9218c1 Mon Sep 17 00:00:00 2001 From: naman-contentstack Date: Wed, 10 Jun 2026 18:13:40 +0530 Subject: [PATCH 2/6] Add publishing step for external-migrate plugin in production workflow --- .github/workflows/release-production-plugins.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 9c42bb26f..1eeaedd10 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -191,6 +191,14 @@ jobs: package: ./packages/contentstack-cli-tsgen/package.json tag: latest + # External Migrate + - name: Publishing external-migrate (Production) + uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/contentstack-external-migrate/package.json + tag: latest + - name: Create Production Release id: create_release env: From ff72d50758ad0108ea1af40d99e6a8bdf6458116 Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 18:20:55 +0530 Subject: [PATCH 3/6] updated lockfile --- .talismanrc | 68 +- package-lock.json | 20041 ---------------- packages/contentstack-audit/README.md | 2 +- packages/contentstack-branches/README.md | 2 +- packages/contentstack-bulk-publish/README.md | 2 +- packages/contentstack-export/README.md | 2 +- .../package.json | 8 +- packages/contentstack-import-setup/README.md | 2 +- packages/contentstack-migration/README.md | 2 +- packages/contentstack-migration/package.json | 4 +- pnpm-lock.yaml | 679 +- 11 files changed, 691 insertions(+), 20121 deletions(-) delete mode 100644 package-lock.json diff --git a/.talismanrc b/.talismanrc index ba1a909df..71ea6de83 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,68 +1,4 @@ fileignoreconfig: - - filename: packages/contentstack-external-migrate/src/services/contentful/contentful.service.ts - checksum: e710b7fbad0a413403de9b937bcc98a9cc84a2d6a920a836ddfa78706b959822 - - filename: package-lock.json - checksum: 8a837168a197b3ddd9aa965a4312327c14f583de9449c8a3c93afbc44c56ac7b - - filename: packages/contentstack-external-migrate/src/services/contentful/extension.service.ts - checksum: 1c0c95059828ccecc2e2f6bc5a377eb37a6e879a2bc2605943857a0bbfd37aad - - filename: packages/contentstack-external-migrate/src/services/contentful/app/index.json - checksum: 508b3ef2dfcabcba03bb85b2716c1690a2a693254cf7605978d909006dd52028 - - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/utils/apps/appDetails.json - checksum: a80c6dfcb90b6a964e604b47699dee694b1dd93630e69859c04bdd41a0f4a7c0 - - filename: packages/contentstack-external-migrate/src/adapters/contentful/validator.ts - checksum: c42584ad1a31a2cc085871eb62cd29c41c350b4f5ec51153e95f1279097f9b59 - - filename: packages/contentstack-external-migrate/src/commands/migrate/status.ts - checksum: 316f723f0ec85b99f4b631f35e0acbbc1c80baec0cece8fc930243c4bb9ccbfd - - filename: packages/contentstack-external-migrate/docs/phases/phase-2-audit.md - checksum: 8aa4d20af2def7b9afec9f3be7cfa269095dd92be015c6dd16774a27b13f4a65 - - filename: packages/contentstack-external-migrate/docs/manifest-schema.md - checksum: 96e188eb1cbb29d1ee3206634ac6a8cd4243c72cf42019cbb848e0e6e83c2b5f - - filename: packages/contentstack-external-migrate/docs/implementation-principles.md - checksum: 2a96dfbe9270fd50c42f781a40cbdf674d12d7f00784d4bd8640f3064b0d319f - - filename: packages/contentstack-external-migrate/src/adapters/contentful/convert.ts - checksum: 0c7cd556f5a7104bfac80f5933f3ce8f61349648462aa80e456db0390cd8491d - - filename: packages/contentstack-external-migrate/src/lib/conversion-summary.ts - checksum: 05303adaed06435152ff69f022b2282faec63b53b36c404555c806cc808d5efa - - filename: packages/contentstack-external-migrate/docs/phases/phase-3-import.md - checksum: 188c1a2b310f15b53608e97f4273e42296a87a20e3e03c0030c2140b873cc809 - - filename: packages/contentstack-external-migrate/docs/architecture.md - checksum: 0c157fef081918197a1213c8dbb1f07fd0d1313eaf90d18ddee335c0685db7b1 - - filename: packages/contentstack-external-migrate/docs/phases/phase-4-export.md - checksum: afb2edadd487e28d2ecc4ff837703dd654394c0469bc70a848e98b07bb934141 - - filename: packages/contentstack-external-migrate/docs/phases/phase-5-manifest-and-review.md - checksum: e7ea9d0095b38ed4722456d20560256eb9b7362e452929ba30925c5c66212415 - - filename: packages/contentstack-external-migrate/test/commands/migrate/import.test.ts - checksum: e931a9cb89e9cb6ce384e0ae0218b5e9df3d8631caea5997cdab4e007b6d9d9a - - filename: packages/contentstack-external-migrate/src/commands/migrate/import.ts - checksum: b1749716d8555d8a5af23c32a1b8ee8b39fa2b3dd0c51aff77f814e9766f8a92 - - filename: packages/contentstack-external-migrate/src/services/contentful/users.ts - checksum: 86dce671e996019419256dbb5ebd8d927392715cdecda3a44e2d2315ac13adbe - - filename: packages/contentstack-external-migrate/src/services/contentful/utils/index.ts - checksum: cbc04052ad999e5a2ec6fbcbcd4e1df388d8c3575ffbd8370764934892477b0f - - filename: packages/contentstack-external-migrate/src/services/contentful/marketplace.service.ts - checksum: 0f6b8c3bd68093b0e42bf2bf4345321f99e9dda7eafc233a79c296257641950a - - filename: packages/contentstack-external-migrate/test/lib/manifest.test.ts - checksum: 1e80e263e06653dfd967779696b243582fe2aefc89084a2d05499807fec49e37 - - filename: packages/contentstack-external-migrate/test/commands/migrate/audit.test.ts - checksum: 0daa06c38f5b5879cf9e5854c96f5ee4976524b2de5ff3e62c64b0e28239e508 - - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/roles.ts - checksum: 149d43d9348bf970339297b73bf66ead41efafc51ef1881b147845b4893976ad - - filename: packages/contentstack-external-migrate/src/lib/create-stack.ts - checksum: e38b3286c9091a40d3f6ce24e2b0215c9c26457591d269f886a6a27cfbeca402 - - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/taxonomy.service.ts - checksum: 6bc4638c31b5e4a87f26033b5bbea7404594e4fabc25447c8e76ec3b8b7602bb - - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/createInitialMapper.js - checksum: 7431b4ea396ca3ad670c380108b4bf2061f45526fd36161096dd4dd46b4b6f8b - - filename: packages/contentstack-external-migrate/src/commands/migrate/create.ts - checksum: 8268fb6b0cef49574ed16715e8817e4459d29eeaa68e24bf15f1bc83f4e5bc38 - - filename: packages/contentstack-external-migrate/src/lib/manifest.ts - checksum: 6674d08800ae8b3a657f7506cf7e6906b8b952ea90b50240d0314b7cb82d7d47 - - filename: packages/contentstack-external-migrate/README.md - checksum: 46565cc92ff29a8b5adae465f5268585ed1a505e004e80d0843fd5c522dd6b83 - - filename: packages/contentstack-external-migrate/src/services/contentful/migration-contentful/libs/contentTypeMapper.js - checksum: 02e0f6cce67b4e070134b3908ce44c063e12133e88c373785bb414eb93e1a9ea - - filename: packages/contentstack-external-migrate/src/services/contentful/contentful/jsonRTE.ts - checksum: f19ae1132a29a93bb2e027366ab495ada1928afc9e7acd21fc7dc0cb774bc46e - - filename: packages/contentstack-external-migrate/src/services/contentful/content-type-creator.ts - checksum: 653a7e0443f6b9712ed91ad45aa4189864bee710ea4bd3ac40031225da4da5a5 + - filename: pnpm-lock.yaml + checksum: 07642e8dd04d580185a459e5b088d8a1bb4e91be4e04f4842bf4fe4775205bf6 version: '1.0' diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index 72c1fe321..000000000 --- a/package-lock.json +++ /dev/null @@ -1,20041 +0,0 @@ -{ - "name": "csdx", - "version": "1.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "csdx", - "version": "1.0.0", - "license": "MIT", - "workspaces": [ - "packages/*" - ], - "devDependencies": { - "husky": "^9.1.7", - "pnpm": "^10.28.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../cli/packages/contentstack-auth": { - "name": "@contentstack/cli-auth", - "version": "1.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "otplib": "^12.0.1" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "chai": "^4.5.0", - "dotenv": "^16.4.7", - "eslint": "^9.26.0", - "eslint-config-oclif": "^5.2.2", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "10.8.2", - "nock": "^13.5.6", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../cli/packages/contentstack-auth/node_modules/@contentstack/cli-command": { - "resolved": "../cli/packages/contentstack-command", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@contentstack/cli-utilities": { - "resolved": "../cli/packages/contentstack-utilities", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/nock": { - "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/otplib": { - "resolved": "../node_modules/.pnpm/otplib@12.0.1/node_modules/otplib", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "../cli/packages/contentstack-auth/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "../cli/packages/contentstack-command": { - "name": "@contentstack/cli-command", - "version": "1.8.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../cli/packages/contentstack-command/node_modules/@contentstack/cli-utilities": { - "resolved": "../cli/packages/contentstack-utilities", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/contentstack": { - "resolved": "../node_modules/.pnpm/contentstack@3.27.0/node_modules/contentstack", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "../cli/packages/contentstack-command/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "../cli/packages/contentstack-config": { - "name": "@contentstack/cli-config", - "version": "1.20.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/utils": "~1.9.1", - "@oclif/core": "^4.11.4" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../cli/packages/contentstack-config/node_modules/@contentstack/cli-command": { - "resolved": "../cli/packages/contentstack-command", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@contentstack/cli-utilities": { - "resolved": "../cli/packages/contentstack-utilities", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@contentstack/utils": { - "resolved": "../node_modules/.pnpm/@contentstack+utils@1.9.1/node_modules/@contentstack/utils", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "../cli/packages/contentstack-config/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "../cli/packages/contentstack-utilities": { - "name": "@contentstack/cli-utilities", - "version": "1.18.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "minimatch": "^10.2.5", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../cli/packages/contentstack-utilities/node_modules/@contentstack/management": { - "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.1/node_modules/@contentstack/management", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@contentstack/marketplace-sdk": { - "resolved": "../node_modules/.pnpm/@contentstack+marketplace-sdk@1.5.1_debug@4.4.3/node_modules/@contentstack/marketplace-sdk", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/inquirer": { - "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@21.0.0/node_modules/@types/sinon", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/@types/traverse": { - "resolved": "../node_modules/.pnpm/@types+traverse@0.6.37/node_modules/@types/traverse", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/axios": { - "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/cli-cursor": { - "resolved": "../node_modules/.pnpm/cli-cursor@3.1.0/node_modules/cli-cursor", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/cli-progress": { - "resolved": "../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/cli-table": { - "resolved": "../node_modules/.pnpm/cli-table@0.3.11/node_modules/cli-table", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/conf": { - "resolved": "../node_modules/.pnpm/conf@10.2.0/node_modules/conf", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/fancy-test": { - "resolved": "../node_modules/.pnpm/fancy-test@2.0.42/node_modules/fancy-test", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/figures": { - "resolved": "../node_modules/.pnpm/figures@3.2.0/node_modules/figures", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/inquirer-search-checkbox": { - "resolved": "../node_modules/.pnpm/inquirer-search-checkbox@1.0.0/node_modules/inquirer-search-checkbox", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/inquirer-search-list": { - "resolved": "../node_modules/.pnpm/inquirer-search-list@1.2.6/node_modules/inquirer-search-list", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/js-yaml": { - "resolved": "../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/klona": { - "resolved": "../node_modules/.pnpm/klona@2.0.6/node_modules/klona", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/minimatch": { - "resolved": "../node_modules/.pnpm/minimatch@10.2.5/node_modules/minimatch", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/open": { - "resolved": "../node_modules/.pnpm/open@8.4.2/node_modules/open", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/ora": { - "resolved": "../node_modules/.pnpm/ora@5.4.1/node_modules/ora", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/papaparse": { - "resolved": "../node_modules/.pnpm/papaparse@5.5.3/node_modules/papaparse", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/recheck": { - "resolved": "../node_modules/.pnpm/recheck@4.4.5/node_modules/recheck", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/rxjs": { - "resolved": "../node_modules/.pnpm/rxjs@6.6.7/node_modules/rxjs", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/short-uuid": { - "resolved": "../node_modules/.pnpm/short-uuid@6.0.3/node_modules/short-uuid", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/traverse": { - "resolved": "../node_modules/.pnpm/traverse@0.6.11/node_modules/traverse", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/tty-table": { - "resolved": "../node_modules/.pnpm/tty-table@4.2.3/node_modules/tty-table", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/unique-string": { - "resolved": "../node_modules/.pnpm/unique-string@2.0.0/node_modules/unique-string", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/uuid": { - "resolved": "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "../cli/packages/contentstack-utilities/node_modules/xdg-basedir": { - "resolved": "../node_modules/.pnpm/xdg-basedir@4.0.0/node_modules/xdg-basedir", - "link": true - }, - "../node_modules/.pnpm/@apollo+client@3.14.1_graphql@16.13.0/node_modules/@apollo/client": { - "version": "3.14.1", - "license": "MIT", - "dependencies": { - "@graphql-typed-document-node/core": "^3.1.1", - "@wry/caches": "^1.0.0", - "@wry/equality": "^0.5.6", - "@wry/trie": "^0.5.0", - "graphql-tag": "^2.12.6", - "hoist-non-react-statics": "^3.3.2", - "optimism": "^0.18.0", - "prop-types": "^15.7.2", - "rehackt": "^0.1.0", - "symbol-observable": "^4.0.0", - "ts-invariant": "^0.10.3", - "tslib": "^2.3.0", - "zen-observable-ts": "^1.2.5" - }, - "devDependencies": { - "@actions/github-script": "github:actions/github-script#v7.0.1", - "@arethetypeswrong/cli": "0.15.3", - "@ark/attest": "0.28.0", - "@babel/parser": "7.25.0", - "@changesets/changelog-github": "0.5.0", - "@changesets/cli": "2.27.7", - "@eslint/compat": "1.2.5", - "@eslint/eslintrc": "3.2.0", - "@eslint/js": "9.18.0", - "@graphql-tools/merge": "9.0.4", - "@graphql-tools/schema": "10.0.4", - "@graphql-tools/utils": "10.5.0", - "@microsoft/api-extractor": "7.49.1", - "@rollup/plugin-node-resolve": "11.2.1", - "@size-limit/esbuild-why": "11.1.4", - "@size-limit/preset-small-lib": "11.1.4", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.6.3", - "@testing-library/react": "16.1.0", - "@testing-library/react-render-stream": "2.0.0", - "@testing-library/user-event": "14.5.2", - "@tsconfig/node20": "20.1.4", - "@types/bytes": "3.1.4", - "@types/fetch-mock": "7.3.8", - "@types/glob": "8.1.0", - "@types/hoist-non-react-statics": "3.3.5", - "@types/jest": "29.5.12", - "@types/lodash": "4.17.7", - "@types/node": "22.10.7", - "@types/node-fetch": "2.6.11", - "@types/prop-types": "15.7.14", - "@types/react": "19.0.0", - "@types/react-dom": "19.0.0", - "@types/relay-runtime": "14.1.24", - "@types/use-sync-external-store": "0.0.6", - "@typescript-eslint/eslint-plugin": "8.21.0", - "@typescript-eslint/parser": "8.21.0", - "@typescript-eslint/rule-tester": "8.21.0", - "@typescript-eslint/types": "8.21.0", - "@typescript-eslint/utils": "8.21.0", - "acorn": "8.12.1", - "ajv": "8.17.1", - "blob-polyfill": "7.0.20220408", - "bytes": "3.1.2", - "cross-fetch": "4.0.0", - "eslint": "9.18.0", - "eslint-import-resolver-typescript": "3.7.0", - "eslint-plugin-import": "npm:@phryneas/eslint-plugin-import@2.27.5-pr.2813.2817.199971c", - "eslint-plugin-local-rules": "3.0.2", - "eslint-plugin-react-compiler": "19.0.0-beta-decd7b8-20250118", - "eslint-plugin-react-hooks": "5.1.0", - "eslint-plugin-testing-library": "7.1.1", - "expect-type": "1.1.0", - "fetch-mock": "9.11.0", - "glob": "8.1.0", - "globals": "15.14.0", - "graphql": "16.9.0", - "graphql-17-alpha2": "npm:graphql@17.0.0-alpha.2", - "graphql-ws": "6.0.3", - "jest": "29.7.0", - "jest-environment-jsdom": "29.7.0", - "jest-junit": "16.0.0", - "lodash": "4.17.21", - "patch-package": "8.0.0", - "pkg-pr-new": "0.0.24", - "prettier": "3.1.1", - "react": "19.0.0", - "react-17": "npm:react@^17", - "react-18": "npm:react@^18", - "react-dom": "19.0.0", - "react-dom-17": "npm:react-dom@^17", - "react-dom-18": "npm:react-dom@^18", - "react-error-boundary": "4.0.13", - "recast": "0.23.9", - "resolve": "1.22.8", - "rimraf": "5.0.9", - "rollup": "2.79.2", - "rollup-plugin-cleanup": "3.2.1", - "rollup-plugin-terser": "7.0.2", - "rxjs": "7.8.1", - "size-limit": "11.1.4", - "subscriptions-transport-ws": "0.11.0", - "terser": "5.31.3", - "ts-api-utils": "2.0.0", - "ts-jest": "29.2.3", - "ts-jest-resolver": "2.0.1", - "ts-morph": "25.0.0", - "ts-node": "10.9.2", - "tsx": "4.19.2", - "typedoc": "0.25.0", - "typescript": "5.7.3", - "web-streams-polyfill": "4.0.0", - "whatwg-fetch": "3.6.20" - }, - "peerDependencies": { - "graphql": "^15.0.0 || ^16.0.0", - "graphql-ws": "^5.5.5 || ^6.0.3", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || >=19.0.0-rc", - "subscriptions-transport-ws": "^0.9.0 || ^0.11.0" - }, - "peerDependenciesMeta": { - "graphql-ws": { - "optional": true - }, - "react": { - "optional": true - }, - "react-dom": { - "optional": true - }, - "subscriptions-transport-ws": { - "optional": true - } - } - }, - "../node_modules/.pnpm/@babel+preset-env@7.29.7_@babel+core@7.29.0/node_modules/@babel/preset-env": { - "version": "7.29.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/compat-data": "^7.29.7", - "@babel/helper-compilation-targets": "^7.29.7", - "@babel/helper-plugin-utils": "^7.29.7", - "@babel/helper-validator-option": "^7.29.7", - "@babel/plugin-bugfix-firefox-class-in-computed-class-key": "^7.29.7", - "@babel/plugin-bugfix-safari-class-field-initializer-scope": "^7.29.7", - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": "^7.29.7", - "@babel/plugin-bugfix-safari-rest-destructuring-rhs-array": "^7.29.7", - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.29.7", - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly": "^7.29.7", - "@babel/plugin-proposal-private-property-in-object": "7.21.0-placeholder-for-preset-env.2", - "@babel/plugin-syntax-import-assertions": "^7.29.7", - "@babel/plugin-syntax-import-attributes": "^7.29.7", - "@babel/plugin-syntax-unicode-sets-regex": "^7.18.6", - "@babel/plugin-transform-arrow-functions": "^7.29.7", - "@babel/plugin-transform-async-generator-functions": "^7.29.7", - "@babel/plugin-transform-async-to-generator": "^7.29.7", - "@babel/plugin-transform-block-scoped-functions": "^7.29.7", - "@babel/plugin-transform-block-scoping": "^7.29.7", - "@babel/plugin-transform-class-properties": "^7.29.7", - "@babel/plugin-transform-class-static-block": "^7.29.7", - "@babel/plugin-transform-classes": "^7.29.7", - "@babel/plugin-transform-computed-properties": "^7.29.7", - "@babel/plugin-transform-destructuring": "^7.29.7", - "@babel/plugin-transform-dotall-regex": "^7.29.7", - "@babel/plugin-transform-duplicate-keys": "^7.29.7", - "@babel/plugin-transform-duplicate-named-capturing-groups-regex": "^7.29.7", - "@babel/plugin-transform-dynamic-import": "^7.29.7", - "@babel/plugin-transform-explicit-resource-management": "^7.29.7", - "@babel/plugin-transform-exponentiation-operator": "^7.29.7", - "@babel/plugin-transform-export-namespace-from": "^7.29.7", - "@babel/plugin-transform-for-of": "^7.29.7", - "@babel/plugin-transform-function-name": "^7.29.7", - "@babel/plugin-transform-json-strings": "^7.29.7", - "@babel/plugin-transform-literals": "^7.29.7", - "@babel/plugin-transform-logical-assignment-operators": "^7.29.7", - "@babel/plugin-transform-member-expression-literals": "^7.29.7", - "@babel/plugin-transform-modules-amd": "^7.29.7", - "@babel/plugin-transform-modules-commonjs": "^7.29.7", - "@babel/plugin-transform-modules-systemjs": "^7.29.7", - "@babel/plugin-transform-modules-umd": "^7.29.7", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.29.7", - "@babel/plugin-transform-new-target": "^7.29.7", - "@babel/plugin-transform-nullish-coalescing-operator": "^7.29.7", - "@babel/plugin-transform-numeric-separator": "^7.29.7", - "@babel/plugin-transform-object-rest-spread": "^7.29.7", - "@babel/plugin-transform-object-super": "^7.29.7", - "@babel/plugin-transform-optional-catch-binding": "^7.29.7", - "@babel/plugin-transform-optional-chaining": "^7.29.7", - "@babel/plugin-transform-parameters": "^7.29.7", - "@babel/plugin-transform-private-methods": "^7.29.7", - "@babel/plugin-transform-private-property-in-object": "^7.29.7", - "@babel/plugin-transform-property-literals": "^7.29.7", - "@babel/plugin-transform-regenerator": "^7.29.7", - "@babel/plugin-transform-regexp-modifiers": "^7.29.7", - "@babel/plugin-transform-reserved-words": "^7.29.7", - "@babel/plugin-transform-shorthand-properties": "^7.29.7", - "@babel/plugin-transform-spread": "^7.29.7", - "@babel/plugin-transform-sticky-regex": "^7.29.7", - "@babel/plugin-transform-template-literals": "^7.29.7", - "@babel/plugin-transform-typeof-symbol": "^7.29.7", - "@babel/plugin-transform-unicode-escapes": "^7.29.7", - "@babel/plugin-transform-unicode-property-regex": "^7.29.7", - "@babel/plugin-transform-unicode-regex": "^7.29.7", - "@babel/plugin-transform-unicode-sets-regex": "^7.29.7", - "@babel/preset-modules": "0.1.6-no-external-plugins", - "babel-plugin-polyfill-corejs2": "^0.4.15", - "babel-plugin-polyfill-corejs3": "^0.14.0", - "babel-plugin-polyfill-regenerator": "^0.6.6", - "core-js-compat": "^3.48.0", - "semver": "^6.3.1" - }, - "devDependencies": { - "@babel/core": "^7.29.7", - "@babel/core-7.12": "npm:@babel/core@7.12.9", - "@babel/helper-plugin-test-runner": "^7.29.7", - "@babel/traverse": "^7.29.7" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "../node_modules/.pnpm/@colors+colors@1.6.0/node_modules/@colors/colors": { - "version": "1.6.0", - "license": "MIT", - "devDependencies": { - "eslint": "^8.9.0", - "eslint-config-google": "^0.14.0" - }, - "engines": { - "node": ">=0.1.90" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@18.19.130/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.39/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.15", - "eslint-config-oclif-typescript": "^3.1.13", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@14.18.63/node_modules/@contentstack/cli-config": { - "version": "1.20.4", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/utils": "~1.9.1", - "@oclif/core": "^4.11.4" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@22.19.20/node_modules/@contentstack/cli-config": { - "version": "1.20.4", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/utils": "~1.9.1", - "@oclif/core": "^4.11.4" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies": { - "version": "1.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4.3.0", - "@oclif/test": "^4.1.13", - "fancy-test": "^2.0.42", - "lodash": "^4.17.21" - }, - "devDependencies": { - "@types/node": "^14.18.63", - "eslint": "^7.32.0", - "mocha": "10.8.2", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-launch@1.10.1_@types+node@20.19.42_tslib@2.8.1_typescript@5.9.3/node_modules/@contentstack/cli-launch": { - "version": "1.10.1", - "license": "MIT", - "dependencies": { - "@apollo/client": "^3.14.0", - "@contentstack/cli-command": "^1.8.2", - "@contentstack/cli-utilities": "^1.18.3", - "@oclif/core": "^4.2.7", - "@oclif/plugin-help": "^6.2.25", - "@rollup/plugin-commonjs": "^28.0.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.0", - "@rollup/plugin-typescript": "^12.1.2", - "@types/express": "^4.17.21", - "@types/express-serve-static-core": "^4.17.34", - "adm-zip": "^0.5.16", - "chalk": "^4.1.2", - "cross-fetch": "^4.1.0", - "dotenv": "^16.4.7", - "express": "^4.22.0", - "form-data": "4.0.4", - "graphql": "^16.9.0", - "ini": "^3.0.1", - "lodash": "^4.18.1", - "open": "^8.4.2", - "rollup": "^4.59.0", - "winston": "^3.17.0" - }, - "bin": { - "launch": "bin/run.js" - }, - "devDependencies": { - "@oclif/test": "^4.1.3", - "@types/adm-zip": "^0.5.7", - "@types/chai": "^4.3.20", - "@types/ini": "^1.3.34", - "@types/jest": "^29.5.14", - "@types/lodash": "^4.17.13", - "@types/mocha": "^10.0.10", - "@types/node": "^22.0.0", - "@types/sinon": "^17.0.3", - "chai": "^4.5.0", - "eslint": "^9.24.0", - "eslint-config-oclif": "^6.0.42", - "husky": "^9.1.7", - "jest": "^29.7.0", - "lint-staged": "^15.5.0", - "mocha": "^11.0.1", - "nyc": "^17.1.0", - "oclif": "^4.17.30", - "shx": "^0.3.4", - "sinon": "^19.0.2", - "ts-jest": "^29.3.1", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=22.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@18.19.130/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - }, - "devDependencies": { - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.9", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^14.18.63", - "@types/sinon": "^21.0.0", - "@types/traverse": "^0.6.37", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "fancy-test": "^2.0.42", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "sinon": "^21.1.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@contentstack+delivery-sdk@5.2.1/node_modules/@contentstack/delivery-sdk": { - "version": "5.2.1", - "license": "MIT", - "dependencies": { - "@contentstack/core": "^1.4.0", - "@contentstack/utils": "^1.8.0", - "axios": "^1.16.1", - "humps": "^2.0.1" - }, - "devDependencies": { - "@playwright/test": "^1.58.2", - "@rollup/plugin-commonjs": "^27.0.0", - "@rollup/plugin-node-resolve": "^15.3.1", - "@rollup/plugin-replace": "^5.0.7", - "@slack/bolt": "^4.6.0", - "@types/humps": "^2.0.6", - "@types/jest": "^29.5.14", - "@types/node-localstorage": "^1.3.3", - "axios-mock-adapter": "^1.22.0", - "babel-jest": "^29.7.0", - "dotenv": "^16.6.1", - "http-server": "^14.1.1", - "husky": "^9.1.7", - "jest": "^29.7.0", - "jest-environment-jsdom": "^29.7.0", - "jest-html-reporter": "^3.10.2", - "jest-html-reporters": "^3.1.7", - "jest-junit": "^16.0.0", - "rollup": "^3.30.0", - "rollup-plugin-esbuild": "^5.0.0", - "ts-jest": "^29.4.6", - "ts-node": "^10.9.2", - "typescript": "~5.7.3" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/@contentstack+json-rte-serializer@2.1.0/node_modules/@contentstack/json-rte-serializer": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "array-flat-polyfill": "^1.0.1", - "lodash": "^4.17.21", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isempty": "^4.4.0", - "lodash.isequal": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isundefined": "^3.0.1", - "lodash.kebabcase": "^4.1.1", - "slate": "^0.103.0", - "uuid": "^8.3.2" - }, - "devDependencies": { - "@types/jest": "^27.0.3", - "@types/jsdom": "^16.2.12", - "@types/lodash.clonedeep": "^4.5.9", - "@types/lodash.flatten": "^4.4.9", - "@types/lodash.isempty": "^4.4.9", - "@types/lodash.isequal": "^4.5.8", - "@types/lodash.isobject": "^3.0.9", - "@types/lodash.isplainobject": "^4.0.9", - "@types/lodash.isundefined": "^3.0.9", - "@types/lodash.kebabcase": "^4.1.9", - "@types/omit-deep-lodash": "^1.1.1", - "@types/uuid": "^8.3.0", - "esbuild": "0.19.11", - "jest": "^27.5.1", - "jest-html-reporter": "^3.7.0", - "jsdom": "^16.6.0", - "omit-deep-lodash": "^1.1.5", - "ts-jest": "^27.0.3", - "typescript": "^4.4.2" - } - }, - "../node_modules/.pnpm/@contentstack+management@1.30.1/node_modules/@contentstack/management": { - "version": "1.30.1", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.9.1", - "assert": "^2.1.0", - "axios": "^1.15.0", - "buffer": "^6.0.3", - "form-data": "^4.0.5", - "husky": "^9.1.7", - "lodash": "^4.18.1", - "otplib": "^12.0.1", - "qs": "^6.15.1", - "stream-browserify": "^3.0.0" - }, - "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/eslint-parser": "^7.28.6", - "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.2", - "@babel/register": "^7.28.6", - "@babel/runtime": "^7.29.2", - "@slack/bolt": "^4.7.0", - "@types/chai": "^5.2.3", - "@types/jest": "^30.0.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "axios-mock-adapter": "^2.1.0", - "babel-loader": "^10.1.1", - "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-rewire": "^1.2.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", - "babel-polyfill": "^6.26.0", - "chai": "^6.2.2", - "clean-webpack-plugin": "^4.0.0", - "docdash": "^2.0.2", - "dotenv": "^17.4.2", - "eslint": "^8.57.1", - "eslint-config-standard": "^13.0.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^7.2.1", - "eslint-plugin-standard": "^5.0.0", - "jest": "^30.3.0", - "jsdoc": "^4.0.5", - "mocha": "^11.7.5", - "mocha-html-reporter": "^0.0.1", - "mochawesome": "^7.1.4", - "multiparty": "^4.2.3", - "nock": "^14.0.12", - "nyc": "^17.1.0", - "os-browserify": "^0.3.0", - "rimraf": "^6.1.3", - "sinon": "^21.1.2", - "string-replace-loader": "^3.3.0", - "ts-jest": "^29.4.9", - "typescript": "^5.9.3", - "webpack": "^5.106.1", - "webpack-cli": "^6.0.1", - "webpack-merge": "6.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management": { - "version": "1.30.3", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.9.1", - "assert": "^2.1.0", - "axios": "^1.16.1", - "buffer": "^6.0.3", - "form-data": "^4.0.5", - "husky": "^9.1.7", - "lodash": "^4.18.1", - "otplib": "^12.0.1", - "qs": "^6.15.2", - "stream-browserify": "^3.0.0" - }, - "devDependencies": { - "@babel/cli": "^7.28.6", - "@babel/core": "^7.29.0", - "@babel/eslint-parser": "^7.28.6", - "@babel/plugin-transform-runtime": "^7.29.0", - "@babel/preset-env": "^7.29.5", - "@babel/register": "^7.29.3", - "@babel/runtime": "^7.29.2", - "@slack/bolt": "^4.7.2", - "@types/chai": "^5.2.3", - "@types/jest": "^30.0.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "axios-mock-adapter": "^2.1.0", - "babel-loader": "^10.1.1", - "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-rewire": "^1.2.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", - "babel-polyfill": "^6.26.0", - "chai": "^6.2.2", - "clean-webpack-plugin": "^4.0.0", - "docdash": "^2.0.2", - "dotenv": "^17.4.2", - "eslint": "^8.57.1", - "eslint-config-standard": "^13.0.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^7.3.0", - "eslint-plugin-standard": "^5.0.0", - "jest": "^30.4.2", - "jsdoc": "^4.0.5", - "mocha": "^11.7.5", - "mocha-html-reporter": "^0.0.1", - "mochawesome": "^7.1.4", - "multiparty": "^4.3.0", - "nock": "^14.0.15", - "nyc": "^17.1.0", - "os-browserify": "^0.3.0", - "rimraf": "^6.1.3", - "sinon": "^21.1.2", - "string-replace-loader": "^3.3.0", - "ts-jest": "^29.4.10", - "typescript": "^5.9.3", - "webpack": "^5.106.2", - "webpack-cli": "^6.0.1", - "webpack-merge": "6.0.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../node_modules/.pnpm/@contentstack+marketplace-sdk@1.5.1_debug@4.4.3/node_modules/@contentstack/marketplace-sdk": { - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.9.1", - "axios": "^1.15.0" - }, - "devDependencies": { - "@babel/cli": "^7.28.0", - "@babel/core": "^7.28.0", - "@babel/plugin-transform-runtime": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@babel/register": "^7.27.1", - "@babel/runtime": "^7.28.2", - "@slack/bolt": "^4.6.0", - "@types/jest": "^28.1.8", - "@types/mocha": "^7.0.2", - "axios-mock-adapter": "^1.22.0", - "babel-loader": "^8.4.1", - "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-rewire": "^1.2.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", - "babel-polyfill": "^6.26.0", - "chai": "^4.5.0", - "clean-webpack-plugin": "^4.0.0", - "docdash": "^2.0.2", - "dotenv": "^8.6.0", - "eslint": "^8.57.1", - "eslint-config-standard": "^13.0.1", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-node": "^9.2.0", - "eslint-plugin-promise": "^4.3.1", - "eslint-plugin-standard": "^4.1.0", - "jest": "^28.1.3", - "jsdoc": "^4.0.4", - "mocha": "^11.7.1", - "mochawesome": "^7.1.3", - "multiparty": "^4.2.3", - "nock": "^10.0.6", - "nyc": "^15.1.0", - "os-browserify": "^0.3.0", - "rimraf": "^2.7.1", - "sinon": "^7.5.0", - "string-replace-loader": "^3.2.0", - "ts-jest": "^28.0.8", - "typescript": "^4.9.5", - "webpack": "^5.105.4", - "webpack-cli": "^4.10.0", - "webpack-merge": "4.2.2" - } - }, - "../node_modules/.pnpm/@contentstack+types-generator@3.10.1_graphql@16.13.0/node_modules/@contentstack/types-generator": { - "version": "3.10.1", - "license": "MIT", - "dependencies": { - "@contentstack/delivery-sdk": "^5.2.1", - "@gql2ts/from-schema": "^2.0.0-4", - "async": "^3.2.6", - "axios": "1.16.1", - "lodash": "^4.18.1", - "prettier": "^3.8.3" - }, - "devDependencies": { - "@types/async": "^3.2.25", - "@types/jest": "^29.5.14", - "@types/lodash": "^4.17.24", - "@types/node": "^20.19.39", - "axios-mock-adapter": "^1.22.0", - "cross-env": "^7.0.3", - "dotenv": "^16.6.1", - "husky": "^9.1.7", - "jest": "^29.7.0", - "jest-json-reporter": "^1.2.2", - "nock": "^13.5.6", - "rollup": "^4.60.3", - "ts-jest": "^29.4.9", - "tsup": "^8.5.1", - "typescript": "^5.9.3" - } - }, - "../node_modules/.pnpm/@contentstack+utils@1.9.1/node_modules/@contentstack/utils": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "devDependencies": { - "@commitlint/cli": "^17.8.1", - "@commitlint/config-conventional": "^17.8.1", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^15.2.3", - "@types/jest": "^26.0.24", - "@types/node": "^20.0.0", - "@typescript-eslint/eslint-plugin": "^8.6.0", - "@typescript-eslint/parser": "^8.6.0", - "commitizen": "^4.3.1", - "eslint": "^9.11.1", - "husky": "^8.0.3", - "jest": "^29.7.0", - "jest-coverage-badges": "^1.0.0", - "jest-environment-jsdom": "^29.7.0", - "jest-html-reporters": "^2.1.7", - "jest-junit": "^15.0.0", - "jsdom": "^25.0.0", - "jsdom-global": "^3.0.2", - "prettier": "^3.3.3", - "rimraf": "^6.0.1", - "rollup": "^4.60.1", - "rollup-plugin-typescript2": "^0.37.0", - "snyk": "^1.1304.0", - "ts-jest": "^29.4.9", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - } - }, - "../node_modules/.pnpm/@eslint+eslintrc@3.3.5/node_modules/@eslint/eslintrc": { - "version": "3.3.5", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.14.0", - "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.1", - "minimatch": "^3.1.5", - "strip-json-comments": "^3.1.1" - }, - "devDependencies": { - "c8": "^7.7.3", - "chai": "^4.3.4", - "eslint": "^9.20.1", - "eslint-config-eslint": "^11.0.0", - "fs-teardown": "^0.1.3", - "mocha": "^9.0.3", - "rollup": "^2.70.1", - "shelljs": "^0.8.5", - "sinon": "^11.1.2", - "temp-dir": "^2.0.0", - "typescript": "^5.7.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core": { - "version": "4.11.4", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.17.0", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.4.3", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.3", - "minimatch": "^10.2.5", - "semver": "^7.8.1", - "string-width": "^4.2.3", - "supports-color": "^8", - "tinyglobby": "^0.2.16", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-help": "^6", - "@oclif/plugin-plugins": "^5", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/benchmark": "^2.1.5", - "@types/chai": "^4.3.16", - "@types/chai-as-promised": "^7.1.8", - "@types/clean-stack": "^2.1.1", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/indent-string": "^4.0.1", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/picomatch": "^4.0.3", - "@types/pnpapi": "^0.0.5", - "@types/sinon": "^17.0.3", - "@types/supports-color": "^8.1.3", - "@types/wordwrap": "^1.0.3", - "@types/wrap-ansi": "^3.0.0", - "benchmark": "^2.1.4", - "chai": "^4.5.0", - "chai-as-promised": "^7.1.2", - "commitlint": "^19", - "cross-env": "^7.0.3", - "eslint": "^9", - "eslint-config-oclif": "^6", - "eslint-config-prettier": "^10", - "husky": "^9.1.7", - "lint-staged": "^15", - "madge": "^6.1.0", - "mocha": "^11.7.5", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shx": "^0.4.0", - "sinon": "^18", - "ts-node": "^10.9.2", - "tsd": "^0.33.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/@oclif+plugin-help@6.2.37/node_modules/@oclif/plugin-help": { - "version": "6.2.37", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/chai": "^4.3.16", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9.39.2", - "eslint-config-oclif": "^6.0.130", - "eslint-config-prettier": "^10.1.8", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^10.8.2", - "oclif": "^4.22.65", - "prettier": "^3.8.0", - "shx": "^0.4.0", - "ts-node": "^10.9.2", - "typescript": "^5.7.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/@oclif+plugin-help@6.2.44/node_modules/@oclif/plugin-help": { - "version": "6.2.44", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/chai": "^4.3.16", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9.39.4", - "eslint-config-oclif": "^6.0.154", - "eslint-config-prettier": "^10.1.8", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^11", - "oclif": "^4.22.96", - "prettier": "^3.8.1", - "shx": "^0.4.0", - "ts-node": "^10.9.2", - "typescript": "^5.7.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help": { - "version": "6.2.50", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/chai": "^4.3.16", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9.39.4", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10.1.8", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^11", - "oclif": "^4.23.8", - "prettier": "^3.8.3", - "shx": "^0.4.0", - "ts-node": "^10.9.2", - "typescript": "^5.7.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/@oclif+test@3.2.15/node_modules/@oclif/test": { - "version": "3.2.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^3.26.6", - "chai": "^4.4.1", - "fancy-test": "^3.0.15" - }, - "devDependencies": { - "@commitlint/config-conventional": "^18.6.3", - "@oclif/prettier-config": "^0.2.1", - "@types/cli-progress": "^3.11.5", - "@types/mocha": "^10", - "@types/node": "^18", - "commitlint": "^18.6.1", - "eslint": "^8.57.0", - "eslint-config-oclif": "^5.2.0", - "eslint-config-oclif-typescript": "^3.1.7", - "eslint-config-prettier": "^9.1.0", - "husky": "^9.0.3", - "lint-staged": "^15.2.2", - "mocha": "^10", - "nock": "^13.5.4", - "prettier": "^3.2.5", - "shx": "^0.3.3", - "ts-node": "^10.9.2", - "typescript": "^5.4.5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test": { - "version": "4.1.18", - "dev": true, - "license": "MIT", - "dependencies": { - "ansis": "^3.17.0", - "debug": "^4.4.3" - }, - "devDependencies": { - "@commitlint/config-conventional": "^18.6.3", - "@eslint/compat": "^1.4.1", - "@oclif/core": "^4.10.3", - "@oclif/prettier-config": "^0.2.1", - "@types/chai": "^5.2.2", - "@types/debug": "^4.1.13", - "@types/mocha": "^10", - "@types/node": "^18", - "chai": "^5.3.3", - "commitlint": "^18.6.1", - "eslint": "^9.39.4", - "eslint-config-oclif": "^6.0.154", - "eslint-config-prettier": "^10.1.8", - "husky": "^9.1.7", - "lint-staged": "^15.5.2", - "mocha": "^10", - "prettier": "^3.8.1", - "shx": "^0.4.0", - "tsx": "^4.21.0", - "typescript": "^5.7.3" - }, - "engines": { - "node": ">=18.0.0" - }, - "peerDependencies": { - "@oclif/core": ">= 3.0.0" - } - }, - "../node_modules/.pnpm/@types+adm-zip@0.5.8/node_modules/@types/adm-zip": { - "version": "0.5.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json": { - "version": "3.2.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+bluebird@3.5.42/node_modules/@types/bluebird": { - "version": "3.5.42", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai": { - "version": "4.3.20", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai": { - "version": "5.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "../node_modules/.pnpm/@types+diff2html@3.0.3/node_modules/@types/diff2html": { - "version": "3.0.3", - "deprecated": "This is a stub types definition. diff2html provides its own type definitions, so you do not need this installed.", - "license": "MIT", - "dependencies": { - "diff2html": "*" - } - }, - "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra": { - "version": "11.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/jsonfile": "*", - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+git-diff@2.0.7/node_modules/@types/git-diff": { - "version": "2.0.7", - "license": "MIT" - }, - "../node_modules/.pnpm/@types+hogan.js@3.0.5/node_modules/@types/hogan.js": { - "version": "3.0.5", - "license": "MIT" - }, - "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer": { - "version": "9.0.9", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/through": "*", - "rxjs": "^7.2.0" - } - }, - "../node_modules/.pnpm/@types+jest@26.0.24/node_modules/@types/jest": { - "version": "26.0.24", - "dev": true, - "license": "MIT", - "dependencies": { - "jest-diff": "^26.0.0", - "pretty-format": "^26.0.0" - } - }, - "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest": { - "version": "29.5.14", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^29.0.0", - "pretty-format": "^29.0.0" - } - }, - "../node_modules/.pnpm/@types+jest@30.0.0/node_modules/@types/jest": { - "version": "30.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "expect": "^30.0.0", - "pretty-format": "^30.0.0" - } - }, - "../node_modules/.pnpm/@types+jsonexport@3.0.5/node_modules/@types/jsonexport": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash": { - "version": "4.17.24", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha": { - "version": "10.0.10", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha": { - "version": "8.2.3", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node": { - "version": "14.18.63", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+node@18.19.130/node_modules/@types/node": { - "version": "18.19.130", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~5.26.4" - } - }, - "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node": { - "version": "20.19.35", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node": { - "version": "20.19.39", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node": { - "version": "20.19.42", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node": { - "version": "22.19.20", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "../node_modules/.pnpm/@types+safe-regex@1.1.6/node_modules/@types/safe-regex": { - "version": "1.1.6", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+shelljs@0.10.0/node_modules/@types/shelljs": { - "version": "0.10.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "fast-glob": "^3.3.2" - } - }, - "../node_modules/.pnpm/@types+sinon@10.0.20/node_modules/@types/sinon": { - "version": "10.0.20", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon": { - "version": "17.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "../node_modules/.pnpm/@types+sinon@21.0.0/node_modules/@types/sinon": { - "version": "21.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon": { - "version": "21.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "../node_modules/.pnpm/@types+table@6.3.2/node_modules/@types/table": { - "version": "6.3.2", - "license": "MIT", - "dependencies": { - "table": "*" - } - }, - "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar": { - "version": "6.1.13", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "minipass": "^4.0.0" - } - }, - "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp": { - "version": "0.2.6", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@types+traverse@0.6.37/node_modules/@types/traverse": { - "version": "0.6.37", - "dev": true, - "license": "MIT" - }, - "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "devDependencies": { - "@types/debug": "*", - "@types/json-schema": "*", - "@types/marked": "*", - "@types/natural-compare-lite": "^1.4.0", - "@types/prettier": "*", - "chalk": "^5.0.1", - "cross-fetch": "^3.1.5", - "json-schema": "*", - "markdown-table": "^3.0.2", - "marked": "^4.0.15", - "prettier": "*", - "title-case": "^3.0.3", - "typescript": "*" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@10.4.1__e3ba3d274f8f3b210d1198e9e5c2531c/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.61.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/type-utils": "8.61.0", - "@typescript-eslint/utils": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "devDependencies": { - "@types/json-schema": "^7.0.15", - "@types/mdast": "^4.0.4", - "@types/natural-compare": "^1.4.3", - "@types/react": "^18.3.21", - "@typescript-eslint/rule-schema-to-typescript-types": "8.61.0", - "@typescript-eslint/rule-tester": "8.61.0", - "@typescript/native-preview": "7.0.0-dev.20260518.1", - "@vitest/coverage-v8": "^4.0.18", - "ajv": "^6.12.6", - "eslint": "^10.0.0", - "json-schema": "^0.4.0", - "markdown-table": "^3.0.4", - "marked": "^15.0.12", - "mdast-util-from-markdown": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0", - "prettier": "3.8.0", - "rimraf": "^5.0.10", - "title-case": "^4.3.2", - "tsx": "^4.7.2", - "typescript": ">=4.8.4 <6.1.0", - "unist-util-visit": "^5.0.0", - "vitest": "^4.0.18" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.61.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.61.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.12.2", - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/type-utils": "8.61.0", - "@typescript-eslint/utils": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "ignore": "^7.0.5", - "natural-compare": "^1.4.0", - "ts-api-utils": "^2.5.0" - }, - "devDependencies": { - "@types/json-schema": "^7.0.15", - "@types/mdast": "^4.0.4", - "@types/natural-compare": "^1.4.3", - "@types/react": "^18.3.21", - "@typescript-eslint/rule-schema-to-typescript-types": "8.61.0", - "@typescript-eslint/rule-tester": "8.61.0", - "@typescript/native-preview": "7.0.0-dev.20260518.1", - "@vitest/coverage-v8": "^4.0.18", - "ajv": "^6.12.6", - "eslint": "^10.0.0", - "json-schema": "^0.4.0", - "markdown-table": "^3.0.4", - "marked": "^15.0.12", - "mdast-util-from-markdown": "^2.0.2", - "mdast-util-mdx": "^3.0.0", - "micromark-extension-mdxjs": "^3.0.0", - "prettier": "3.8.0", - "rimraf": "^5.0.10", - "title-case": "^4.3.2", - "tsx": "^4.7.2", - "typescript": ">=4.8.4 <6.1.0", - "unist-util-visit": "^5.0.0", - "vitest": "^4.0.18" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^8.61.0", - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@10.4.1_typescript@6.0.3/node_modules/@typescript-eslint/parser": { - "version": "8.61.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "debug": "^4.4.3" - }, - "devDependencies": { - "@typescript/native-preview": "7.0.0-dev.20260518.1", - "@vitest/coverage-v8": "^4.0.18", - "eslint": "^10.0.0", - "glob": "^11.1.0", - "rimraf": "^5.0.10", - "typescript": ">=4.8.4 <6.1.0", - "vitest": "^4.0.18" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser": { - "version": "8.61.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/scope-manager": "8.61.0", - "@typescript-eslint/types": "8.61.0", - "@typescript-eslint/typescript-estree": "8.61.0", - "@typescript-eslint/visitor-keys": "8.61.0", - "debug": "^4.4.3" - }, - "devDependencies": { - "@typescript/native-preview": "7.0.0-dev.20260518.1", - "@vitest/coverage-v8": "^4.0.18", - "eslint": "^10.0.0", - "glob": "^11.1.0", - "rimraf": "^5.0.10", - "typescript": ">=4.8.4 <6.1.0", - "vitest": "^4.0.18" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0 || ^10.0.0", - "typescript": ">=4.8.4 <6.1.0" - } - }, - "../node_modules/.pnpm/adm-zip@0.5.17/node_modules/adm-zip": { - "version": "0.5.17", - "license": "MIT", - "devDependencies": { - "chai": "^6.2.2", - "iconv-lite": "^0.7.2", - "mocha": "12.0.0-beta-10", - "prettier": "^3.8.1", - "rimraf": "^3.0.2" - }, - "engines": { - "node": ">=12.0" - } - }, - "../node_modules/.pnpm/async@3.2.6/node_modules/async": { - "version": "3.2.6", - "license": "MIT", - "devDependencies": { - "@babel/core": "7.25.2", - "@babel/eslint-parser": "^7.16.5", - "babel-minify": "^0.5.0", - "babel-plugin-add-module-exports": "^1.0.4", - "babel-plugin-istanbul": "^7.0.0", - "babel-plugin-syntax-async-generators": "^6.13.0", - "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", - "babel-preset-es2015": "^6.3.13", - "babel-preset-es2017": "^6.22.0", - "babel-register": "^6.26.0", - "babelify": "^10.0.0", - "benchmark": "^2.1.1", - "bluebird": "^3.4.6", - "browserify": "^17.0.0", - "chai": "^4.2.0", - "cheerio": "^0.22.0", - "es6-promise": "^4.2.8", - "eslint": "^8.6.0", - "eslint-plugin-prefer-arrow": "^1.2.3", - "fs-extra": "^11.1.1", - "jsdoc": "^4.0.3", - "karma": "^6.3.12", - "karma-browserify": "^8.1.0", - "karma-firefox-launcher": "^2.1.2", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.0", - "karma-safari-launcher": "^1.0.0", - "mocha": "^6.1.4", - "native-promise-only": "^0.8.0-a", - "nyc": "^17.0.0", - "rollup": "^4.2.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-npm": "^2.0.0", - "rsvp": "^4.8.5", - "semver": "^7.3.5", - "yargs": "^17.3.1" - } - }, - "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios": { - "version": "1.17.0", - "dev": true, - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - }, - "devDependencies": { - "@babel/core": "^7.29.0", - "@babel/preset-env": "^7.29.5", - "@commitlint/cli": "^21.0.1", - "@commitlint/config-conventional": "^21.0.1", - "@eslint/js": "^10.0.1", - "@rollup/plugin-alias": "^6.0.0", - "@rollup/plugin-babel": "^7.0.0", - "@rollup/plugin-commonjs": "^29.0.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.3", - "@rollup/plugin-terser": "^1.0.0", - "@vitest/browser": "^4.1.7", - "@vitest/browser-playwright": "^4.1.7", - "abortcontroller-polyfill": "^1.7.8", - "acorn": "^8.16.0", - "body-parser": "^2.2.2", - "chalk": "^5.6.2", - "cross-env": "^10.1.0", - "dev-null": "^0.1.1", - "eslint": "^10.4.0", - "express": "^5.2.1", - "formdata-node": "^6.0.3", - "formidable": "^3.5.4", - "fs-extra": "^11.3.4", - "get-stream": "^9.0.1", - "globals": "^17.6.0", - "gulp": "^5.0.1", - "husky": "^9.1.7", - "lint-staged": "^17.0.5", - "minimist": "^1.2.8", - "multer": "^2.1.1", - "playwright": "^1.60.0", - "prettier": "^3.8.3", - "rollup": "^4.60.4", - "rollup-plugin-bundle-size": "^1.0.3", - "selfsigned": "^5.5.0", - "stream-throttle": "^0.1.3", - "typescript": "^5.9.3", - "vitest": "^4.1.7" - } - }, - "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json": { - "version": "3.2.0", - "license": "MIT", - "dependencies": { - "assert-plus": "^1.0.0", - "into-stream": "^5.1.0", - "json-stream-stringify": "^2.0.1", - "JSONStream": "^1.3.1", - "once": "^1.4.0", - "through2": "^3.0.1" - }, - "devDependencies": { - "chai": "^4.2.0", - "conventional-changelog-angular": "^5.0.3", - "conventional-recommended-bump": "^6.0.0", - "coveralls": "^3.0.6", - "documentation": "^12.0.0", - "eslint": "^6.1.0", - "eslint-config-prettier": "^6.0.0", - "eslint-plugin-prettier": "^3.1.0", - "mocha": "^6.2.0", - "nyc": "^14.1.1", - "prettier": "^1.18.2", - "unleash": "^2.0.1" - } - }, - "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird": { - "version": "3.7.2", - "license": "MIT", - "devDependencies": { - "acorn": "^6.0.2", - "acorn-walk": "^6.1.0", - "baconjs": "^0.7.43", - "bluebird": "^2.9.2", - "body-parser": "^1.10.2", - "browserify": "^8.1.1", - "cli-table": "~0.3.1", - "co": "^4.2.0", - "cross-spawn": "^0.2.3", - "glob": "^4.3.2", - "grunt-saucelabs": "~8.4.1", - "highland": "^2.3.0", - "istanbul": "^0.3.5", - "jshint": "^2.6.0", - "jshint-stylish": "~0.2.0", - "kefir": "^2.4.1", - "mkdirp": "~0.5.0", - "mocha": "~2.1", - "open": "~0.0.5", - "optimist": "~0.6.1", - "rimraf": "~2.2.6", - "rx": "^2.3.25", - "serve-static": "^1.7.1", - "sinon": "~1.7.3", - "uglify-js": "~2.4.16" - } - }, - "../node_modules/.pnpm/callsites@3.1.0/node_modules/callsites": { - "version": "3.1.0", - "license": "MIT", - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=6" - } - }, - "../node_modules/.pnpm/cardinal@2.1.1/node_modules/cardinal": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - }, - "devDependencies": { - "readdirp": "~2.1.0", - "standart": "~6.1.0", - "tape": "~4.9.0" - } - }, - "../node_modules/.pnpm/chai@4.5.0/node_modules/chai": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "devDependencies": { - "browserify": "^16.5.2", - "bump-cli": "^2.7.1", - "codecov": "^3.8.3", - "istanbul": "^0.4.5", - "karma": "^6.4.2", - "karma-chrome-launcher": "^2.2.0", - "karma-firefox-launcher": "^1.3.0", - "karma-mocha": "^2.0.1", - "karma-sauce-launcher": "^4.1.4", - "mocha": "^10.2.0" - }, - "engines": { - "node": ">=4" - } - }, - "../node_modules/.pnpm/chai@6.2.2/node_modules/chai": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "devDependencies": { - "@eslint/js": "^9.17.0", - "@rollup/plugin-commonjs": "^29.0.0", - "@web/dev-server-rollup": "^0.6.1", - "@web/test-runner": "^0.20.0", - "@web/test-runner-playwright": "^0.11.0", - "assertion-error": "^2.0.1", - "c8": "^10.1.3", - "check-error": "^2.1.1", - "deep-eql": "^5.0.1", - "esbuild": "^0.27.0", - "eslint": "^9.0.0", - "eslint-plugin-jsdoc": "^61.0.0", - "globals": "^16.3.0", - "loupe": "^3.1.0", - "mocha": "^11.0.0", - "pathval": "^2.0.0", - "prettier": "^3.4.2", - "typescript": "~5.9.0" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "devDependencies": { - "ava": "^2.4.0", - "coveralls": "^3.0.7", - "execa": "^4.0.0", - "import-fresh": "^3.1.0", - "matcha": "^0.7.0", - "nyc": "^15.0.0", - "resolve-from": "^5.0.0", - "tsd": "^0.7.4", - "xo": "^0.28.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "../node_modules/.pnpm/cli-cursor@3.1.0/node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "devDependencies": { - "@types/node": "^12.0.7", - "ava": "^2.1.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - } - }, - "../node_modules/.pnpm/cli-progress@3.12.0/node_modules/cli-progress": { - "version": "3.12.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3" - }, - "devDependencies": { - "eslint": "^8.14.0", - "eslint-config-aenondynamics": "^0.2.0", - "mocha": "^9.2.2" - }, - "engines": { - "node": ">=4" - } - }, - "../node_modules/.pnpm/cli-table@0.3.11/node_modules/cli-table": { - "version": "0.3.11", - "dependencies": { - "colors": "1.0.3" - }, - "devDependencies": { - "expresso": "~0.9", - "should": "~0.6" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3": { - "version": "0.6.5", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.0" - }, - "devDependencies": { - "cli-table": "^0.3.1", - "eslint": "^6.0.0", - "eslint-config-prettier": "^6.0.0", - "eslint-plugin-prettier": "^3.0.0", - "jest": "^25.2.4", - "jest-runner-eslint": "^0.7.0", - "lerna-changelog": "^1.0.1", - "prettier": "2.3.2" - }, - "engines": { - "node": "10.* || >= 12.*" - }, - "optionalDependencies": { - "@colors/colors": "1.5.0" - } - }, - "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux": { - "version": "6.0.9", - "license": "MIT", - "dependencies": { - "@oclif/core": "^1.1.1", - "@oclif/linewrap": "^1.0.0", - "@oclif/screen": "^1.0.4 ", - "ansi-escapes": "^4.3.0", - "ansi-styles": "^4.2.0", - "cardinal": "^2.1.1", - "chalk": "^4.1.0", - "clean-stack": "^3.0.0", - "cli-progress": "^3.10.0", - "extract-stack": "^2.0.0", - "fs-extra": "^8.1", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "js-yaml": "^3.13.1", - "lodash": "^4.17.21", - "natural-orderby": "^2.0.1", - "object-treeify": "^1.1.4", - "password-prompt": "^1.1.2", - "semver": "^7.3.2", - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "supports-color": "^8.1.0", - "supports-hyperlinks": "^2.1.0", - "tslib": "^2.0.0" - }, - "devDependencies": { - "@types/ansi-styles": "^3.2.1", - "@types/chai": "^4.1.7", - "@types/chai-as-promised": "^7.1.0", - "@types/clean-stack": "^2.1.1", - "@types/extract-stack": "^2.0.0", - "@types/fs-extra": "^8.1", - "@types/js-yaml": "^3.12.1", - "@types/lodash": "^4.14.117", - "@types/mocha": "^8.0.0", - "@types/node": "^11.11.2", - "@types/semver": "^7.3.1", - "@types/strip-ansi": "^5.2.1", - "@types/supports-color": "^8.1.1", - "axios": "^0.24.0", - "chai": "^4.2.0", - "chai-as-promised": "^7.1.1", - "eslint": "^7.32.0", - "eslint-config-oclif": "^4.0.0", - "eslint-config-oclif-typescript": "^1.0.2", - "fancy-test": "^1.4.10", - "mocha": "^9.1.3", - "ts-node": "^9.0.0", - "typescript": "4.5.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/collapse-whitespace@1.1.7/node_modules/collapse-whitespace": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "block-elements": "^1.0.0", - "void-elements": "^2.0.1" - }, - "devDependencies": { - "babel": "^5.6.14", - "browserify": "^10.2.6", - "standard": "^4.5.3", - "uglify-js": "^2.4.23" - } - }, - "../node_modules/.pnpm/concat-stream@2.0.0/node_modules/concat-stream": { - "version": "2.0.0", - "engines": [ - "node >= 6.0" - ], - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" - }, - "devDependencies": { - "tape": "^4.6.3" - } - }, - "../node_modules/.pnpm/conf@10.2.0/node_modules/conf": { - "version": "10.2.0", - "license": "MIT", - "dependencies": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "devDependencies": { - "@ava/typescript": "^1.1.1", - "@sindresorhus/tsconfig": "^0.7.0", - "@types/node": "^14.14.41", - "@types/semver": "^7.3.4", - "@types/write-file-atomic": "^3.0.1", - "ava": "^3.15.0", - "clear-module": "^4.1.1", - "del": "^6.0.0", - "del-cli": "^3.0.1", - "delay": "^5.0.0", - "nyc": "^15.1.0", - "p-event": "^4.2.0", - "tempy": "^1.0.1", - "tsd": "^0.14.0", - "typescript": "^4.4.3", - "xo": "^0.38.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../node_modules/.pnpm/contentstack@3.27.0/node_modules/contentstack": { - "version": "3.27.0", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.4.1", - "es6-promise": "^4.2.8", - "husky": "^9.1.7", - "localStorage": "1.0.4" - }, - "devDependencies": { - "@babel/core": "^7.28.0", - "@babel/eslint-parser": "^7.28.0", - "@babel/preset-env": "^7.28.0", - "@slack/bolt": "^4.4.0", - "@types/jest": "^30.0.0", - "babel-loader": "^10.0.0", - "clean-webpack-plugin": "^4.0.0", - "dotenv": "^17.2.1", - "eslint": "^8.57.1", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^6.6.0", - "eslint-plugin-standard": "^4.1.0", - "jest": "^30.0.5", - "jest-html-reporters": "^3.1.7", - "jsdoc": "^4.0.4", - "jsdom": "^26.1.0", - "minami": "^1.2.3", - "node-request-interceptor": "^0.6.3", - "string-replace-loader": "^3.2.0", - "tap-html": "^1.1.0", - "tap-json": "1.0.0", - "ts-jest": "^29.4.0", - "typescript": "^5.9.2", - "webpack": "^5.101.0", - "webpack-cli": "^6.0.1", - "webpack-merge": "6.0.1", - "webpack-node-externals": "^3.0.0" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "../node_modules/.pnpm/conventional-changelog-cli@5.0.0_conventional-commits-filter@5.0.0/node_modules/conventional-changelog-cli": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog": "^6.0.0", - "meow": "^13.0.0", - "tempfile": "^5.0.0" - }, - "bin": { - "conventional-changelog": "cli.js" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug": { - "version": "4.4.3", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "devDependencies": { - "brfs": "^2.0.1", - "browserify": "^16.2.3", - "coveralls": "^3.0.2", - "karma": "^3.1.4", - "karma-browserify": "^6.0.0", - "karma-chrome-launcher": "^2.2.0", - "karma-mocha": "^1.3.0", - "mocha": "^5.2.0", - "mocha-lcov-reporter": "^1.2.0", - "sinon": "^14.0.0", - "xo": "^0.23.0" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "../node_modules/.pnpm/diff2html@3.4.56/node_modules/diff2html": { - "version": "3.4.56", - "license": "MIT", - "dependencies": { - "@profoundlogic/hogan": "^3.0.4", - "diff": "^8.0.3" - }, - "devDependencies": { - "@eslint/js": "^9.39.2", - "@eslint/json": "^1.0.0", - "@types/hogan.js": "3.0.5", - "@types/jest": "^30.0.0", - "@types/node": "^25.1.0", - "@types/nopt": "3.0.32", - "all-contributors-cli": "^6.26.1", - "autoprefixer": "^10.4.24", - "bulma": "^1.0.4", - "clipboard": "2.0.11", - "copy-webpack-plugin": "^13.0.1", - "css-loader": "^7.1.3", - "cssnano": "^7.1.2", - "eslint": "^9.39.2", - "eslint-plugin-jest": "29.12.1", - "eslint-plugin-promise": "^7.2.1", - "file-loader": "6.2.0", - "globals": "^17.2.0", - "handlebars": "4.7.8", - "handlebars-loader": "1.7.3", - "html-webpack-plugin": "^5.6.6", - "husky": "^9.1.7", - "image-webpack-loader": "8.1.0", - "is-ci-cli": "2.2.0", - "jest": "30.2.0", - "lint-staged": "^16.2.7", - "markdown-toc": "^1.2.0", - "mini-css-extract-plugin": "^2.10.0", - "mkdirp": "3.0.1", - "nopt": "^9.0.0", - "postcss": "^8.5.6", - "postcss-cli": "11.0.1", - "postcss-import": "^16.1.1", - "postcss-loader": "^8.2.0", - "postcss-preset-env": "^11.1.2", - "prettier": "^3.8.1", - "prettier-2": "npm:prettier@^3", - "ts-jest": "^29.4.6", - "ts-loader": "9.5.4", - "ts-node": "10.9.2", - "typescript": "^5.9.3", - "typescript-eslint": "^8.54.0", - "url-loader": "4.1.1", - "webpack": "^5.104.1", - "webpack-cli": "^6.0.1", - "webpack-dev-server": "^5.2.3", - "whatwg-fetch": "3.6.20" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "highlight.js": "11.11.1" - } - }, - "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand": { - "version": "9.0.0", - "dev": true, - "license": "BSD-2-Clause", - "devDependencies": { - "@types/node": "^17.0.8", - "dotenv": "16.0.2", - "lab": "^14.3.4", - "should": "^11.2.1", - "standard": "^16.0.4", - "typescript": "^4.5.4" - }, - "engines": { - "node": ">=12" - } - }, - "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv": { - "version": "16.6.1", - "dev": true, - "license": "BSD-2-Clause", - "devDependencies": { - "@types/node": "^18.11.3", - "decache": "^4.6.2", - "sinon": "^14.0.1", - "standard": "^17.0.0", - "standard-version": "^9.5.0", - "tap": "^19.2.0", - "typescript": "^4.8.4" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "../node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv": { - "version": "17.4.2", - "dev": true, - "license": "BSD-2-Clause", - "devDependencies": { - "@types/node": "^18.11.3", - "decache": "^4.6.2", - "sinon": "^14.0.1", - "standard": "^17.0.0", - "standard-version": "^9.5.0", - "tap": "^19.2.0", - "typescript": "^4.8.4" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@1.0.3_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^4.31.2", - "@typescript-eslint/parser": "^4.31.2", - "eslint-config-xo-space": "^0.29.0", - "eslint-plugin-mocha": "^9.0.0", - "eslint-plugin-node": "^11.1.0" - }, - "devDependencies": { - "eslint": "^7.32.0", - "typescript": "^4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif-typescript": { - "version": "3.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15", - "eslint-plugin-perfectionist": "^2.11.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^8.57.1", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif-typescript": { - "version": "3.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15", - "eslint-plugin-perfectionist": "^2.11.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^8.57.1", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { - "version": "3.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15", - "eslint-plugin-perfectionist": "^2.11.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^8.57.1", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript": { - "version": "3.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15", - "eslint-plugin-perfectionist": "^2.11.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^8.57.1", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript": { - "version": "3.1.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.7.0", - "eslint-plugin-import": "^2.31.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15", - "eslint-plugin-perfectionist": "^2.11.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^8.57.1", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@4.0.0_eslint@8.57.1/node_modules/eslint-config-oclif": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-xo-space": "^0.27.0", - "eslint-plugin-mocha": "^9.0.0", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-unicorn": "^36.0.0" - }, - "devDependencies": { - "eslint": "^7.32.0" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@10.4.1/node_modules/eslint-config-oclif": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-xo-space": "^0.35.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15.1.0", - "eslint-plugin-unicorn": "^48.0.1" - }, - "devDependencies": { - "eslint": "^8.57.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-xo-space": "^0.35.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15.1.0", - "eslint-plugin-unicorn": "^48.0.1" - }, - "devDependencies": { - "eslint": "^8.57.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif": { - "version": "5.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-config-xo-space": "^0.35.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^15.1.0", - "eslint-plugin-unicorn": "^48.0.1" - }, - "devDependencies": { - "eslint": "^8.57.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif": { - "version": "6.0.144", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.3", - "@eslint/js": "^9.38.0", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.56.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif": { - "version": "6.0.144", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.3", - "@eslint/js": "^9.38.0", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.56.0" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif": { - "version": "6.0.162", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.59.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif": { - "version": "6.0.162", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.59.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@9.39.3/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif": { - "version": "6.0.168", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.60.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@10.4.1/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif": { - "version": "6.0.168", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.60.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif": { - "version": "6.0.168", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.60.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif": { - "version": "6.0.168", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@stylistic/eslint-plugin": "^3.1.0", - "@typescript-eslint/eslint-plugin": "^8", - "@typescript-eslint/parser": "^8", - "eslint-config-oclif": "^5.2.2", - "eslint-config-xo": "^0.49.0", - "eslint-config-xo-space": "^0.35.0", - "eslint-import-resolver-typescript": "^3.10.1", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-mocha": "^10.5.0", - "eslint-plugin-n": "^17.24.0", - "eslint-plugin-perfectionist": "^4", - "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.60.1" - }, - "devDependencies": { - "@oclif/prettier-config": "^0.2.1", - "eslint": "^9", - "typescript": "^5" - }, - "engines": { - "node": ">=18.18.0" - } - }, - "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@5.2.2_eslint@8.57.1/node_modules/eslint-config-oclif", - "link": true - }, - "../node_modules/.pnpm/eslint-config-prettier@10.1.8_eslint@10.4.1/node_modules/eslint-config-prettier": { - "version": "10.1.8", - "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" - }, - "funding": { - "url": "https://opencollective.com/eslint-config-prettier" - }, - "peerDependencies": { - "eslint": ">=7.0.0" - } - }, - "../node_modules/.pnpm/eslint-plugin-prettier@5.5.6_eslint-config-prettier@10.1.8_eslint@10.4.1__eslint@10.4.1_prettier@3.8.3/node_modules/eslint-plugin-prettier": { - "version": "5.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "prettier-linter-helpers": "^1.0.1", - "synckit": "^0.11.13" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint-plugin-prettier" - }, - "peerDependencies": { - "@types/eslint": ">=8.0.0", - "eslint": ">=8.0.0", - "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", - "prettier": ">=3.0.0" - }, - "peerDependenciesMeta": { - "@types/eslint": { - "optional": true - }, - "eslint-config-prettier": { - "optional": true - } - } - }, - "../node_modules/.pnpm/eslint-plugin-unicorn@48.0.1_eslint@8.57.1/node_modules/eslint-plugin-unicorn": { - "version": "48.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.22.5", - "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", - "clean-regexp": "^1.0.0", - "esquery": "^1.5.0", - "indent-string": "^4.0.0", - "is-builtin-module": "^3.2.1", - "jsesc": "^3.0.2", - "lodash": "^4.17.21", - "pluralize": "^8.0.0", - "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.27", - "regjsparser": "^0.10.0", - "semver": "^7.5.4", - "strip-indent": "^3.0.0" - }, - "devDependencies": { - "@babel/code-frame": "^7.22.5", - "@babel/core": "^7.22.8", - "@babel/eslint-parser": "^7.22.7", - "@lubien/fixture-beta-package": "^1.0.0-beta.1", - "@typescript-eslint/parser": "^6.2.0", - "ava": "^3.15.0", - "c8": "^8.0.0", - "chalk": "^5.3.0", - "enquirer": "^2.3.6", - "eslint": "^8.44.0", - "eslint-ava-rule-tester": "^4.0.0", - "eslint-doc-generator": "^1.4.3", - "eslint-plugin-eslint-plugin": "^5.1.0", - "eslint-plugin-internal-rules": "file:./scripts/internal-rules/", - "eslint-remote-tester": "^3.0.0", - "eslint-remote-tester-repositories": "^1.0.1", - "execa": "^7.1.1", - "listr": "^0.14.3", - "lodash-es": "^4.17.21", - "markdownlint-cli": "^0.35.0", - "mem": "^9.0.2", - "npm-package-json-lint": "^7.0.0", - "npm-run-all": "^4.1.5", - "outdent": "^0.8.0", - "typescript": "^5.1.6", - "vue-eslint-parser": "^9.3.1", - "xo": "^0.54.2", - "yaml": "^2.3.1" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" - }, - "peerDependencies": { - "eslint": ">=8.44.0" - } - }, - "../node_modules/.pnpm/eslint@10.4.1/node_modules/eslint": { - "version": "10.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.8.0", - "@eslint-community/regexpp": "^4.12.2", - "@eslint/config-array": "^0.23.5", - "@eslint/config-helpers": "^0.6.0", - "@eslint/core": "^1.2.1", - "@eslint/plugin-kit": "^0.7.2", - "@humanfs/node": "^0.16.6", - "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.4.2", - "@types/estree": "^1.0.6", - "ajv": "^6.14.0", - "cross-spawn": "^7.0.6", - "debug": "^4.3.2", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^9.1.2", - "eslint-visitor-keys": "^5.0.1", - "espree": "^11.2.0", - "esquery": "^1.7.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", - "minimatch": "^10.2.4", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "devDependencies": { - "@arethetypeswrong/cli": "^0.18.0", - "@babel/core": "^7.4.3", - "@babel/preset-env": "^7.4.3", - "@cypress/webpack-preprocessor": "^6.0.2", - "@eslint/eslintrc": "^3.3.5", - "@eslint/json": "^1.2.0", - "@types/esquery": "^1.5.4", - "@types/node": "^22.13.14", - "@typescript-eslint/parser": "^8.58.2", - "babel-loader": "^8.0.5", - "c8": "^11.0.0", - "chai": "^4.0.1", - "cheerio": "^0.22.0", - "common-tags": "^1.8.0", - "core-js": "^3.1.3", - "cypress": "^14.1.0", - "ejs": "^3.0.2", - "eslint": "file:.", - "eslint-config-eslint": "file:packages/eslint-config-eslint", - "eslint-plugin-eslint-plugin": "^7.3.2", - "eslint-plugin-expect-type": "^0.6.0", - "eslint-plugin-yml": "^1.14.0", - "eslint-release": "^3.3.0", - "eslint-rule-extender": "^0.0.1", - "eslump": "^3.0.0", - "esprima": "^4.0.1", - "fs-teardown": "^0.1.3", - "glob": "^10.0.0", - "globals": "^16.2.0", - "got": "^11.8.3", - "gray-matter": "^4.0.3", - "jiti": "^2.6.1", - "knip": "^6.13.1", - "lint-staged": "^11.0.0", - "markdown-it": "^12.2.0", - "markdown-it-container": "^3.0.0", - "markdownlint-cli2": "^0.22.0", - "marked": "^4.0.8", - "metascraper": "^5.25.7", - "metascraper-description": "^5.25.7", - "metascraper-image": "^5.29.3", - "metascraper-logo": "^5.25.7", - "metascraper-logo-favicon": "^5.25.7", - "metascraper-title": "^5.25.7", - "mocha": "^11.7.1", - "node-polyfill-webpack-plugin": "^1.0.3", - "npm-license": "^0.3.3", - "prettier": "3.8.3", - "progress": "^2.0.3", - "proxyquire": "^2.0.1", - "regenerator-runtime": "^0.14.0", - "semver": "^7.5.3", - "shelljs": "^0.10.0", - "sinon": "^11.0.0", - "typescript": "^6.0.3", - "webpack": "^5.23.0", - "webpack-cli": "^4.5.0", - "yorkie": "^2.0.0" - }, - "engines": { - "node": "^20.19.0 || ^22.13.0 || >=24" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "devDependencies": { - "@babel/core": "^7.4.3", - "@babel/preset-env": "^7.4.3", - "@sinonjs/fake-timers": "11.2.2", - "@wdio/browser-runner": "^8.14.6", - "@wdio/cli": "^8.14.6", - "@wdio/concise-reporter": "^8.14.0", - "@wdio/globals": "^8.14.6", - "@wdio/mocha-framework": "^8.14.0", - "babel-loader": "^8.0.5", - "c8": "^7.12.0", - "chai": "^4.0.1", - "cheerio": "^0.22.0", - "common-tags": "^1.8.0", - "core-js": "^3.1.3", - "ejs": "^3.0.2", - "eslint": "file:.", - "eslint-config-eslint": "file:packages/eslint-config-eslint", - "eslint-plugin-eslint-comments": "^3.2.0", - "eslint-plugin-eslint-plugin": "^5.2.1", - "eslint-plugin-internal-rules": "file:tools/internal-rules", - "eslint-plugin-jsdoc": "^46.2.5", - "eslint-plugin-n": "^16.6.0", - "eslint-plugin-unicorn": "^49.0.0", - "eslint-release": "^3.3.0", - "eslump": "^3.0.0", - "esprima": "^4.0.1", - "fast-glob": "^3.2.11", - "fs-teardown": "^0.1.3", - "glob": "^7.1.6", - "got": "^11.8.3", - "gray-matter": "^4.0.3", - "lint-staged": "^11.0.0", - "load-perf": "^0.2.0", - "markdown-it": "^12.2.0", - "markdown-it-container": "^3.0.0", - "markdownlint": "^0.32.0", - "markdownlint-cli": "^0.37.0", - "marked": "^4.0.8", - "memfs": "^3.0.1", - "metascraper": "^5.25.7", - "metascraper-description": "^5.25.7", - "metascraper-image": "^5.29.3", - "metascraper-logo": "^5.25.7", - "metascraper-logo-favicon": "^5.25.7", - "metascraper-title": "^5.25.7", - "mocha": "^8.3.2", - "mocha-junit-reporter": "^2.0.0", - "node-polyfill-webpack-plugin": "^1.0.3", - "npm-license": "^0.3.3", - "pirates": "^4.0.5", - "progress": "^2.0.3", - "proxyquire": "^2.0.1", - "recast": "^0.23.0", - "regenerator-runtime": "^0.14.0", - "rollup-plugin-node-polyfills": "^0.2.1", - "semver": "^7.5.3", - "shelljs": "^0.8.2", - "sinon": "^11.0.0", - "vite-plugin-commonjs": "0.10.1", - "webdriverio": "^8.14.6", - "webpack": "^5.23.0", - "webpack-cli": "^4.5.0", - "yorkie": "^2.0.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint": { - "version": "9.39.3", - "dev": true, - "license": "MIT", - "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.3", - "@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" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "devDependencies": { - "@arethetypeswrong/cli": "^0.18.0", - "@babel/core": "^7.4.3", - "@babel/preset-env": "^7.4.3", - "@cypress/webpack-preprocessor": "^6.0.2", - "@eslint/json": "^0.13.2", - "@trunkio/launcher": "^1.3.4", - "@types/esquery": "^1.5.4", - "@types/node": "^22.13.14", - "@typescript-eslint/parser": "^8.4.0", - "babel-loader": "^8.0.5", - "c8": "^7.12.0", - "chai": "^4.0.1", - "cheerio": "^0.22.0", - "common-tags": "^1.8.0", - "core-js": "^3.1.3", - "cypress": "^14.1.0", - "ejs": "^3.0.2", - "eslint": "file:.", - "eslint-config-eslint": "file:packages/eslint-config-eslint", - "eslint-plugin-eslint-plugin": "^6.0.0", - "eslint-plugin-expect-type": "^0.6.0", - "eslint-plugin-yml": "^1.14.0", - "eslint-release": "^3.3.0", - "eslint-rule-composer": "^0.3.0", - "eslump": "^3.0.0", - "esprima": "^4.0.1", - "fast-glob": "^3.2.11", - "fs-teardown": "^0.1.3", - "glob": "^10.0.0", - "globals": "^16.2.0", - "got": "^11.8.3", - "gray-matter": "^4.0.3", - "jiti": "^2.6.1", - "jiti-v2.0": "npm:jiti@2.0.x", - "jiti-v2.1": "npm:jiti@2.1.x", - "knip": "^5.60.2", - "lint-staged": "^11.0.0", - "markdown-it": "^12.2.0", - "markdown-it-container": "^3.0.0", - "marked": "^4.0.8", - "metascraper": "^5.25.7", - "metascraper-description": "^5.25.7", - "metascraper-image": "^5.29.3", - "metascraper-logo": "^5.25.7", - "metascraper-logo-favicon": "^5.25.7", - "metascraper-title": "^5.25.7", - "mocha": "^11.7.1", - "node-polyfill-webpack-plugin": "^1.0.3", - "npm-license": "^0.3.3", - "pirates": "^4.0.5", - "progress": "^2.0.3", - "proxyquire": "^2.0.1", - "recast": "^0.23.0", - "regenerator-runtime": "^0.14.0", - "semver": "^7.5.3", - "shelljs": "^0.10.0", - "sinon": "^11.0.0", - "typescript": "^5.3.3", - "webpack": "^5.23.0", - "webpack-cli": "^4.5.0", - "yorkie": "^2.0.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "url": "https://eslint.org/donate" - }, - "peerDependencies": { - "jiti": "*" - }, - "peerDependenciesMeta": { - "jiti": { - "optional": true - } - } - }, - "../node_modules/.pnpm/fancy-test@2.0.42/node_modules/fancy-test": { - "version": "2.0.42", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/lodash": "*", - "@types/node": "*", - "@types/sinon": "*", - "lodash": "^4.17.13", - "mock-stdin": "^1.0.0", - "nock": "^13.3.3", - "stdout-stderr": "^0.1.9" - }, - "devDependencies": { - "@types/mocha": "*", - "chai": "^4.3.8", - "chalk": "^4.1.0", - "eslint": "^7.3.1", - "eslint-config-oclif": "^3.1.0", - "eslint-config-oclif-typescript": "^0.2.0", - "http-call": "^5.2.3", - "markdown-toc": "^1.2.0", - "mocha": "^5.2.0", - "sinon": "^9.0.2", - "ts-node": "^9.0.0", - "tslib": "^2.6.2", - "typescript": "4.4.3" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv": { - "version": "4.3.6", - "license": "MIT", - "dependencies": { - "@fast-csv/format": "4.3.5", - "@fast-csv/parse": "4.3.6" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "../node_modules/.pnpm/figures@3.2.0/node_modules/figures": { - "version": "3.2.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "devDependencies": { - "ava": "^1.4.1", - "markdown-table": "^1.1.2", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra": { - "version": "11.3.3", - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" - }, - "devDependencies": { - "klaw": "^2.1.1", - "klaw-sync": "^3.0.2", - "minimist": "^1.1.1", - "mocha": "^10.1.0", - "nyc": "^15.0.0", - "proxyquire": "^2.0.1", - "read-dir-files": "^0.1.1", - "standard": "^17.0.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "../node_modules/.pnpm/git-diff@2.0.6/node_modules/git-diff": { - "version": "2.0.6", - "license": "ISC", - "dependencies": { - "chalk": "^2.3.2", - "diff": "^3.5.0", - "loglevel": "^1.6.1", - "shelljs": "^0.8.1", - "shelljs.exec": "^1.1.7" - }, - "devDependencies": { - "chai": "^4.1.2", - "chai-string": "^1.4.0", - "coveralls": "2.11.16", - "data-driven": "^1.4.0", - "eslint": "^4.18.2", - "husky": "^0.14.3", - "istanbul": "^0.4.5", - "mocha": "^5.0.4", - "npm-run-all": "^4.1.2", - "readfile-go": "^1.0.5", - "sinon": "^4.4.2", - "sinon-chai": "^3.0.0" - }, - "engines": { - "node": ">= 4.8.0" - } - }, - "../node_modules/.pnpm/globby@11.1.0/node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "devDependencies": { - "ava": "^3.13.0", - "get-stream": "^6.0.0", - "glob-stream": "^6.1.0", - "globby": "sindresorhus/globby#main", - "matcha": "^0.7.0", - "rimraf": "^3.0.2", - "tsd": "^0.13.1", - "xo": "^0.33.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../node_modules/.pnpm/husky@9.1.7/node_modules/husky": { - "version": "9.1.7", - "dev": true, - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "../node_modules/.pnpm/inquirer-checkbox-plus-prompt@1.4.2_inquirer@8.2.7_@types+node@20.19.35_/node_modules/inquirer-checkbox-plus-prompt": { - "version": "1.4.2", - "license": "MIT", - "dependencies": { - "chalk": "4.1.2", - "cli-cursor": "^3.1.0", - "figures": "^3.0.0", - "lodash": "^4.17.5", - "rxjs": "^6.6.7" - }, - "devDependencies": { - "fuzzy": "^0.1.3" - }, - "peerDependencies": { - "inquirer": "< 9.x" - } - }, - "../node_modules/.pnpm/inquirer-search-checkbox@1.0.0/node_modules/inquirer-search-checkbox": { - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "chalk": "^2.3.0", - "figures": "^2.0.0", - "fuzzy": "^0.1.3", - "inquirer": "^3.3.0" - }, - "devDependencies": { - "@types/figures": "^2.0.0", - "@types/inquirer": "^0.0.35", - "@types/node": "^8.0.47", - "typescript": "^2.5.3" - } - }, - "../node_modules/.pnpm/inquirer-search-list@1.2.6/node_modules/inquirer-search-list": { - "version": "1.2.6", - "license": "MIT", - "dependencies": { - "chalk": "^2.3.0", - "figures": "^2.0.0", - "fuzzy": "^0.1.3", - "inquirer": "^3.3.0" - }, - "devDependencies": { - "@types/figures": "^2.0.0", - "@types/inquirer": "^0.0.35", - "@types/node": "^8.0.47", - "typescript": "^2.5.3" - } - }, - "../node_modules/.pnpm/inquirer@12.11.1_@types+node@18.19.130/node_modules/inquirer": { - "version": "12.11.1", - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/prompts": "^7.10.1", - "@inquirer/type": "^3.0.10", - "mute-stream": "^2.0.0", - "run-async": "^4.0.6", - "rxjs": "^7.8.2" - }, - "devDependencies": { - "@arethetypeswrong/cli": "^0.18.2", - "@repo/tsconfig": "0.0.0", - "@types/mute-stream": "^0.0.4", - "tshy": "^3.0.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer": { - "version": "8.2.7", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "devDependencies": { - "chai": "^4.3.6", - "chai-string": "^1.5.0", - "chalk-pipe": "^5.1.1", - "cmdify": "^0.0.4", - "mocha": "^9.2.2", - "mockery": "^2.1.0", - "nyc": "^15.0.0", - "sinon": "^13.0.2", - "terminal-link": "^2.1.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/inquirer@8.2.7_@types+node@20.19.35/node_modules/inquirer": { - "version": "8.2.7", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "devDependencies": { - "chai": "^4.3.6", - "chai-string": "^1.5.0", - "chalk-pipe": "^5.1.1", - "cmdify": "^0.0.4", - "mocha": "^9.2.2", - "mockery": "^2.1.0", - "nyc": "^15.0.0", - "sinon": "^13.0.2", - "terminal-link": "^2.1.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/inquirer@8.2.7_@types+node@22.19.20/node_modules/inquirer": { - "version": "8.2.7", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "devDependencies": { - "chai": "^4.3.6", - "chai-string": "^1.5.0", - "chalk-pipe": "^5.1.1", - "cmdify": "^0.0.4", - "mocha": "^9.2.2", - "mockery": "^2.1.0", - "nyc": "^15.0.0", - "sinon": "^13.0.2", - "terminal-link": "^2.1.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "../node_modules/.pnpm/jest@29.7.0_@types+node@14.18.63_ts-node@8.10.2_typescript@4.9.5_/node_modules/jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "devDependencies": { - "@tsd/typescript": "^5.0.4", - "tsd-lite": "^0.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5_/node_modules/jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "devDependencies": { - "@tsd/typescript": "^5.0.4", - "tsd-lite": "^0.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@5.9.3_/node_modules/jest": { - "version": "29.7.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@jest/core": "^29.7.0", - "@jest/types": "^29.6.3", - "import-local": "^3.0.2", - "jest-cli": "^29.7.0" - }, - "bin": { - "jest": "bin/jest.js" - }, - "devDependencies": { - "@tsd/typescript": "^5.0.4", - "tsd-lite": "^0.7.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "../node_modules/.pnpm/jest@30.4.2_@types+node@18.19.130_ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3_/node_modules/jest": { - "version": "30.4.2", - "license": "MIT", - "dependencies": { - "@jest/core": "30.4.2", - "@jest/types": "30.4.1", - "import-local": "^3.2.0", - "jest-cli": "30.4.2" - }, - "bin": { - "jest": "bin/jest.js" - }, - "engines": { - "node": "^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "peerDependencies": { - "node-notifier": "^8.0.1 || ^9.0.0 || ^10.0.0" - }, - "peerDependenciesMeta": { - "node-notifier": { - "optional": true - } - } - }, - "../node_modules/.pnpm/js-yaml@4.1.1/node_modules/js-yaml": { - "version": "4.1.1", - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^17.0.0", - "@rollup/plugin-node-resolve": "^11.0.0", - "ansi": "^0.3.1", - "benchmark": "^2.1.4", - "codemirror": "^5.13.4", - "eslint": "^7.0.0", - "fast-check": "^2.8.0", - "gh-pages": "^3.1.0", - "mocha": "^8.2.1", - "nyc": "^15.1.0", - "rollup": "^2.34.1", - "rollup-plugin-node-polyfills": "^0.2.1", - "rollup-plugin-terser": "^7.0.2", - "shelljs": "^0.8.4" - } - }, - "../node_modules/.pnpm/jsdoc-to-markdown@8.0.3/node_modules/jsdoc-to-markdown": { - "version": "8.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^6.2.2", - "command-line-tool": "^0.8.0", - "config-master": "^3.1.0", - "dmd": "^6.2.3", - "jsdoc-api": "^8.1.1", - "jsdoc-parse": "^6.2.1", - "walk-back": "^5.1.0" - }, - "bin": { - "jsdoc2md": "bin/cli.js" - }, - "devDependencies": { - "test-runner": "^0.10.1" - }, - "engines": { - "node": ">=12.17" - } - }, - "../node_modules/.pnpm/jsdom@23.2.0/node_modules/jsdom": { - "version": "23.2.0", - "license": "MIT", - "dependencies": { - "@asamuzakjp/dom-selector": "^2.0.1", - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" - }, - "devDependencies": { - "@domenic/eslint-config": "^3.0.0", - "benchmark": "^2.1.4", - "eslint": "^8.56.0", - "eslint-plugin-html": "^7.1.0", - "eslint-plugin-jsdom-internal": "file:./scripts/eslint-plugin", - "js-yaml": "^4.1.0", - "minimatch": "^9.0.3", - "mocha": "^10.2.0", - "mocha-sugar-free": "^1.4.0", - "pngjs": "^7.0.0", - "server-destroy": "^1.0.1", - "webidl2js": "^17.1.0", - "yargs": "^17.7.2" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "../node_modules/.pnpm/jsonexport@3.2.0/node_modules/jsonexport": { - "version": "3.2.0", - "license": "Apache-2.0", - "bin": { - "jsonexport": "bin/jsonexport.js" - }, - "devDependencies": { - "babel-cli": "^6.26.0", - "babel-preset-env": "^1.7.0", - "benchmark": "^2.1.4", - "chai": "^4.1.2", - "jshint": "^2.11.1", - "mocha": "^7.1.2", - "npm-run-all": "^4.1.3", - "pre-commit": "^1.2.2" - } - }, - "../node_modules/.pnpm/jsonschema@1.5.0/node_modules/jsonschema": { - "version": "1.5.0", - "license": "MIT", - "devDependencies": { - "@stryker-mutator/core": "^4.0.0", - "@stryker-mutator/mocha-runner": "^4.0.0", - "chai": "~4.2.0", - "eslint": "^7.7.0", - "json-metaschema": "^1.2.0", - "mocha": "~8.1.1" - }, - "engines": { - "node": "*" - } - }, - "../node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff": { - "version": "6.0.2", - "license": "MIT" - }, - "../node_modules/.pnpm/klona@2.0.6/node_modules/klona": { - "version": "2.0.6", - "license": "MIT", - "devDependencies": { - "bundt": "1.0.2", - "esm": "3.2.25", - "uvu": "0.5.2" - }, - "engines": { - "node": ">= 8" - } - }, - "../node_modules/.pnpm/lint-staged@17.0.7/node_modules/lint-staged": { - "version": "17.0.7", - "dev": true, - "license": "MIT", - "dependencies": { - "listr2": "^10.2.1", - "picomatch": "^4.0.4", - "string-argv": "^0.3.2", - "tinyexec": "^1.2.4" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" - }, - "devDependencies": { - "@changesets/changelog-github": "0.7.0", - "@changesets/cli": "2.31.0", - "@commitlint/cli": "21.0.2", - "@commitlint/config-conventional": "21.0.2", - "@eslint/js": "10.0.1", - "@vitest/coverage-istanbul": "4.1.7", - "@vitest/eslint-plugin": "1.6.18", - "consolemock": "1.1.0", - "cross-env": "10.1.0", - "eslint": "10.4.1", - "eslint-config-prettier": "10.1.8", - "eslint-plugin-n": "18.0.1", - "eslint-plugin-prettier": "5.5.6", - "eslint-plugin-simple-import-sort": "13.0.0", - "husky": "9.1.7", - "mock-stdin": "1.0.0", - "prettier": "3.8.3", - "semver": "7.8.1", - "vitest": "4.1.7" - }, - "engines": { - "node": ">=22.22.1" - }, - "funding": { - "url": "https://opencollective.com/lint-staged" - }, - "optionalDependencies": { - "yaml": "^2.9.0" - } - }, - "../node_modules/.pnpm/listr@0.14.3/node_modules/listr": { - "version": "0.14.3", - "license": "MIT", - "dependencies": { - "@samverschueren/stream-to-observable": "^0.3.0", - "is-observable": "^1.1.0", - "is-promise": "^2.1.0", - "is-stream": "^1.1.0", - "listr-silent-renderer": "^1.1.1", - "listr-update-renderer": "^0.5.0", - "listr-verbose-renderer": "^0.5.0", - "p-map": "^2.0.0", - "rxjs": "^6.3.3" - }, - "devDependencies": { - "ava": "*", - "clinton": "*", - "codecov": "^3.1.0", - "delay": "^4.1.0", - "hook-std": "^1.1.0", - "lint-staged": "^8.0.5", - "log-symbols": "^2.2.0", - "nyc": "^13.1.0", - "pre-commit": "^1.2.2", - "split": "^1.0.1", - "xo": "*", - "zen-observable": "^0.8.11" - }, - "engines": { - "node": ">=6" - } - }, - "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash": { - "version": "4.18.1", - "license": "MIT" - }, - "../node_modules/.pnpm/marked@4.3.0/node_modules/marked": { - "version": "4.3.0", - "license": "MIT", - "bin": { - "marked": "bin/marked.js" - }, - "devDependencies": { - "@babel/core": "^7.21.3", - "@babel/preset-env": "^7.20.2", - "@markedjs/html-differ": "^4.0.2", - "@rollup/plugin-babel": "^6.0.3", - "@semantic-release/commit-analyzer": "^9.0.2", - "@semantic-release/git": "^10.0.1", - "@semantic-release/github": "^8.0.7", - "@semantic-release/npm": "^9.0.2", - "@semantic-release/release-notes-generator": "^10.0.3", - "cheerio": "^1.0.0-rc.12", - "commonmark": "0.30.0", - "eslint": "^8.36.0", - "eslint-config-standard": "^17.0.0", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-n": "^15.6.1", - "eslint-plugin-promise": "^6.1.1", - "front-matter": "^4.0.2", - "highlight.js": "^11.7.0", - "jasmine": "^4.6.0", - "markdown-it": "13.0.1", - "node-fetch": "^3.3.1", - "rollup": "^3.20.0", - "semantic-release": "^20.1.3", - "titleize": "^3.0.0", - "uglify-js": "^3.17.4", - "vuln-regex-detector": "^1.3.0" - }, - "engines": { - "node": ">= 12" - } - }, - "../node_modules/.pnpm/merge@2.1.1/node_modules/merge": { - "version": "2.1.1", - "license": "MIT", - "devDependencies": { - "@types/chai": "^4.2.14", - "@types/mocha": "^8.0.4", - "@types/node": "^14.14.7", - "chai": "^4.2.0", - "concurrently": "^5.3.0", - "mocha": "^8.2.1", - "typescript": "^4.0.5", - "webpack": "^5.4.0", - "webpack-cli": "^4.2.0" - } - }, - "../node_modules/.pnpm/minimatch@10.2.5/node_modules/minimatch": { - "version": "10.2.5", - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "devDependencies": { - "@types/node": "^25.5.0", - "mkdirp": "^3.0.1", - "oxlint": "^1.57.0", - "oxlint-tsgolint": "^0.18.1", - "prettier": "^3.8.1", - "tap": "^21.6.2", - "tshy": "^4.0.0", - "typedoc": "^0.28.18" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "devDependencies": { - "require-inject": "^1.4.4", - "tap": "^14.10.7" - }, - "engines": { - "node": ">=10" - } - }, - "../node_modules/.pnpm/mkdirp@2.1.6/node_modules/mkdirp": { - "version": "2.1.6", - "license": "MIT", - "bin": { - "mkdirp": "dist/cjs/src/bin.js" - }, - "devDependencies": { - "@types/brace-expansion": "^1.1.0", - "@types/node": "^18.11.9", - "@types/tap": "^15.0.7", - "c8": "^7.12.0", - "eslint-config-prettier": "^8.6.0", - "prettier": "^2.8.2", - "tap": "^16.3.3", - "ts-node": "^10.9.1", - "typedoc": "^0.23.21", - "typescript": "^4.9.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha": { - "version": "10.8.2", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-colors": "^4.1.3", - "browser-stdout": "^1.3.1", - "chokidar": "^3.5.3", - "debug": "^4.3.5", - "diff": "^5.2.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^8.1.0", - "he": "^1.2.0", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^5.1.6", - "ms": "^2.1.3", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^6.5.1", - "yargs": "^16.2.0", - "yargs-parser": "^20.2.9", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "devDependencies": { - "@11ty/eleventy": "^1.0.0", - "@11ty/eleventy-plugin-inclusive-language": "^1.0.3", - "@eslint/js": "^8.56.0", - "@mocha/docdash": "^4.0.1", - "@rollup/plugin-commonjs": "^21.0.2", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-multi-entry": "^4.0.1", - "@rollup/plugin-node-resolve": "^13.1.3", - "chai": "^4.3.4", - "coffeescript": "^2.6.1", - "cross-env": "^7.0.2", - "eslint": "^8.56.0", - "fail-on-errors-webpack-plugin": "^3.0.0", - "fs-extra": "^10.0.0", - "globals": "^13.24.0", - "jsdoc": "^3.6.7", - "jsdoc-ts-utils": "^2.0.1", - "karma": "^6.4.2", - "karma-chrome-launcher": "^3.2.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sauce-launcher": "^4.3.6", - "knip": "^5.27.0", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "markdown-it-attrs": "^4.1.3", - "markdown-it-emoji": "^2.0.0", - "markdown-it-prism": "^2.2.2", - "markdown-toc": "^1.2.0", - "markdownlint-cli": "^0.30.0", - "needle": "^2.5.0", - "npm-run-all2": "^6.2.0", - "nyc": "^15.1.0", - "pidtree": "^0.5.0", - "prettier": "^2.4.1", - "remark": "^14.0.2", - "remark-github": "^11.2.2", - "remark-inline-links": "^6.0.1", - "rewiremock": "^3.14.3", - "rimraf": "^3.0.2", - "rollup": "^2.70.1", - "rollup-plugin-node-globals": "^1.4.0", - "rollup-plugin-polyfill-node": "^0.8.0", - "rollup-plugin-visualizer": "^5.6.0", - "sinon": "^9.0.3", - "strip-ansi": "^6.0.0", - "unexpected": "^11.14.0", - "unexpected-eventemitter": "^2.2.0", - "unexpected-map": "^2.0.0", - "unexpected-set": "^3.0.0", - "unexpected-sinon": "^10.11.2", - "uslug": "^1.0.4", - "webpack": "^5.67.0", - "webpack-cli": "^4.9.1" - }, - "engines": { - "node": ">= 14.0.0" - } - }, - "../node_modules/.pnpm/mocha@11.7.6/node_modules/mocha": { - "version": "11.7.6", - "dev": true, - "license": "MIT", - "dependencies": { - "browser-stdout": "^1.3.1", - "chokidar": "^4.0.1", - "debug": "^4.3.5", - "diff": "^7.0.0", - "escape-string-regexp": "^4.0.0", - "find-up": "^5.0.0", - "glob": "^10.4.5", - "he": "^1.2.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "log-symbols": "^4.1.0", - "minimatch": "^9.0.5", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "serialize-javascript": "^6.0.2", - "strip-json-comments": "^3.1.1", - "supports-color": "^8.1.1", - "workerpool": "^9.2.0", - "yargs": "^17.7.2", - "yargs-parser": "^21.1.1", - "yargs-unparser": "^2.0.0" - }, - "bin": { - "_mocha": "bin/_mocha", - "mocha": "bin/mocha.js" - }, - "devDependencies": { - "@11ty/eleventy": "^1.0.0", - "@11ty/eleventy-plugin-inclusive-language": "^1.0.3", - "@eslint/js": "^8.56.0", - "@mocha/docdash": "^4.0.1", - "@rollup/plugin-alias": "^5.1.1", - "@rollup/plugin-commonjs": "^21.0.2", - "@rollup/plugin-json": "^4.1.0", - "@rollup/plugin-multi-entry": "^4.0.1", - "@rollup/plugin-node-resolve": "^13.1.3", - "@test/esm-only-loader": "./test/compiler-fixtures/esm-only-loader", - "@types/node": "^22.15.3", - "@types/yargs": "^17.0.33", - "@vscode/windows-process-tree": "^0.6.3", - "chai": "^4.3.4", - "coffeescript": "^2.6.1", - "cross-env": "^7.0.2", - "eslint": "^8.56.0", - "eslint-plugin-n": "^17.15.1", - "fail-on-errors-webpack-plugin": "^3.0.0", - "globals": "^13.24.0", - "http-server": "^14.1.1", - "installed-check": "^9.3.0", - "jsdoc": "^3.6.7", - "jsdoc-ts-utils": "^2.0.1", - "karma": "^6.4.2", - "karma-chrome-launcher": "^3.2.0", - "karma-mocha": "^2.0.1", - "karma-mocha-reporter": "^2.2.5", - "karma-sauce-launcher": "^4.3.6", - "knip": "^5.61.3", - "markdown-it": "^12.3.2", - "markdown-it-anchor": "^8.4.1", - "markdown-it-attrs": "^4.1.3", - "markdown-it-emoji": "^2.0.0", - "markdown-it-prism": "^2.2.2", - "markdown-toc": "^1.2.0", - "markdownlint-cli": "^0.30.0", - "needle": "^2.5.0", - "npm-run-all2": "^6.2.0", - "nyc": "^15.1.0", - "pidtree": "^0.5.0", - "prettier": "3.6.2", - "remark": "^14.0.2", - "remark-github": "^11.2.2", - "remark-inline-links": "^6.0.1", - "rewiremock": "^3.14.3", - "rimraf": "^3.0.2", - "rollup": "^2.70.1", - "rollup-plugin-node-globals": "^1.4.0", - "rollup-plugin-polyfill-node": "^0.8.0", - "rollup-plugin-visualizer": "^5.6.0", - "semver": "^7.7.2", - "sinon": "^9.0.3", - "typescript": "^5.8.3", - "unexpected": "^11.14.0", - "unexpected-eventemitter": "^2.2.0", - "unexpected-map": "^2.0.0", - "unexpected-set": "^3.0.0", - "unexpected-sinon": "^10.11.2", - "uslug": "^1.0.4", - "webpack": "^5.67.0", - "webpack-cli": "^4.9.1" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - } - }, - "../node_modules/.pnpm/moment@2.30.1/node_modules/moment": { - "version": "2.30.1", - "license": "MIT", - "devDependencies": { - "@types/node": "17.0.21", - "benchmark": "latest", - "coveralls": "latest", - "cross-env": "^6.0.3", - "es6-promise": "latest", - "eslint": "latest", - "grunt": "latest", - "grunt-benchmark": "latest", - "grunt-cli": "latest", - "grunt-contrib-clean": "latest", - "grunt-contrib-concat": "latest", - "grunt-contrib-copy": "latest", - "grunt-contrib-uglify": "latest", - "grunt-contrib-watch": "latest", - "grunt-env": "latest", - "grunt-exec": "latest", - "grunt-karma": "latest", - "grunt-nuget": "latest", - "grunt-string-replace": "latest", - "karma": "latest", - "karma-chrome-launcher": "latest", - "karma-firefox-launcher": "latest", - "karma-qunit": "latest", - "karma-sauce-launcher": "4.1.4", - "load-grunt-tasks": "latest", - "lodash": ">=4.17.19", - "node-qunit": "latest", - "nyc": "latest", - "prettier": "latest", - "qunit": "^2.10.0", - "rollup": "2.17.1", - "typescript": "^1.8.10", - "typescript3": "npm:typescript@^3.1.6", - "uglify-js": "latest" - }, - "engines": { - "node": "*" - } - }, - "../node_modules/.pnpm/nock@13.5.6/node_modules/nock": { - "version": "13.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" - }, - "devDependencies": { - "@definitelytyped/dtslint": "^0.0.163", - "@sinonjs/fake-timers": "^11.2.2", - "assert-rejects": "^1.0.0", - "chai": "^4.1.2", - "dirty-chai": "^2.0.1", - "eslint": "^8.8.0", - "eslint-config-prettier": "^9.0.0", - "eslint-config-standard": "^17.0.0-0", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-mocha": "^10.0.3", - "eslint-plugin-node": "^11.0.0", - "eslint-plugin-promise": "^6.0.0", - "form-data": "^4.0.0", - "got": "^11.3.0", - "jest": "^29.7.0", - "mocha": "^9.1.3", - "npm-run-all": "^4.1.5", - "nyc": "^15.0.0", - "prettier": "3.2.5", - "proxyquire": "^2.1.0", - "rimraf": "^3.0.0", - "semantic-release": "^24.1.0", - "sinon": "^15.0.1", - "sinon-chai": "^3.7.0", - "typescript": "^5.0.4" - }, - "engines": { - "node": ">= 10.13" - } - }, - "../node_modules/.pnpm/node-graphviz@0.1.1/node_modules/node-graphviz": { - "version": "0.1.1", - "license": "MIT", - "devDependencies": { - "uvu": "^0.3.0" - } - }, - "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc": { - "version": "15.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "devDependencies": { - "any-path": "^1.3.0", - "coveralls": "^3.0.9", - "is-windows": "^1.0.2", - "requirejs": "^2.3.6", - "source-map-support": "^0.5.16", - "standard": "^14.3.1", - "standard-version": "^8.0.0", - "tap": "^14.10.5", - "which": "^2.0.2" - }, - "engines": { - "node": ">=8.9" - } - }, - "../node_modules/.pnpm/nyc@18.0.0/node_modules/nyc": { - "version": "18.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^3.3.0", - "get-package-type": "^0.1.0", - "glob": "^13.0.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^6.0.2", - "istanbul-lib-processinfo": "^3.0.0", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^6.1.3", - "signal-exit": "^3.0.2", - "spawn-wrap": "^3.0.0", - "test-exclude": "^8.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "devDependencies": { - "any-path": "^1.3.0", - "is-windows": "^1.0.2", - "requirejs": "^2.3.6", - "source-map-support": "^0.5.16", - "standard": "^14.3.1", - "standard-version": "^9.0.0", - "tap": "^18.7.2", - "uuid": "^3.4.0", - "which": "^2.0.2" - }, - "engines": { - "node": "20 || >=22" - } - }, - "../node_modules/.pnpm/oclif@4.22.81_@types+node@14.18.63/node_modules/oclif": { - "version": "4.22.81", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.995.0", - "@aws-sdk/client-s3": "^3.995.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.8.0", - "@oclif/plugin-help": "^6.2.37", - "@oclif/plugin-not-found": "^3.2.74", - "@oclif/plugin-warn-if-update-available": "^3.1.55", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "lodash": "^4.17.23", - "normalize-package-data": "^6", - "semver": "^7.7.4", - "sort-package-json": "^2.15.1", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.28", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.12", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.23", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.1", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.22.81_@types+node@20.19.35/node_modules/oclif": { - "version": "4.22.81", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.995.0", - "@aws-sdk/client-s3": "^3.995.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.8.0", - "@oclif/plugin-help": "^6.2.37", - "@oclif/plugin-not-found": "^3.2.74", - "@oclif/plugin-warn-if-update-available": "^3.1.55", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "lodash": "^4.17.23", - "normalize-package-data": "^6", - "semver": "^7.7.4", - "sort-package-json": "^2.15.1", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.28", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.12", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.23", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.1", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.22.81_@types+node@22.19.20/node_modules/oclif": { - "version": "4.22.81", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.995.0", - "@aws-sdk/client-s3": "^3.995.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.8.0", - "@oclif/plugin-help": "^6.2.37", - "@oclif/plugin-not-found": "^3.2.74", - "@oclif/plugin-warn-if-update-available": "^3.1.55", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "lodash": "^4.17.23", - "normalize-package-data": "^6", - "semver": "^7.7.4", - "sort-package-json": "^2.15.1", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.28", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.12", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.23", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.1", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@18.19.130/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.35/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.39/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "devDependencies": { - "@commitlint/config-conventional": "^19", - "@eslint/compat": "^1.4.1", - "@oclif/plugin-legacy": "^2.0.33", - "@oclif/prettier-config": "^0.2.1", - "@oclif/test": "^4", - "@types/async-retry": "^1.4.5", - "@types/chai": "^4.3.17", - "@types/cli-progress": "^3.11.6", - "@types/debug": "^4.1.13", - "@types/ejs": "^3.1.5", - "@types/fs-extra": "^9.0", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^18", - "@types/semver": "^7.7.1", - "@types/shelljs": "^0.10.0", - "@types/sinon": "^17.0.3", - "@types/validate-npm-package-name": "^4.0.2", - "chai": "^4.5.0", - "commitlint": "^19", - "eslint": "^9", - "eslint-config-oclif": "^6.0.165", - "eslint-config-prettier": "^10", - "eslint-plugin-perfectionist": "^4", - "husky": "^9.1.7", - "lint-staged": "^15", - "lodash": "^4.18.1", - "mocha": "^11", - "nyc": "^15.1.0", - "prettier": "^3.8.3", - "shelljs": "^0.10.0", - "shx": "^0.4.0", - "sinon": "^18.0.1", - "ts-node": "^10.7.0", - "typescript": "^5" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "../node_modules/.pnpm/omit-deep-lodash@1.1.7/node_modules/omit-deep-lodash": { - "version": "1.1.7", - "license": "MIT", - "dependencies": { - "lodash": "~4.17.21" - }, - "devDependencies": { - "babel-cli": "~6.26.0", - "babel-core": "~6.26.3", - "babel-eslint": "~10.1.0", - "babel-preset-es2015": "~6.24.1", - "babel-preset-stage-1": "~6.24.1", - "chai": "~4.3.4", - "del": "~6.0.0", - "eslint": "~8.6.0", - "gulp": "~4.0.2", - "gulp-babel": "~7.0.1", - "mocha": "~9.1.3", - "mocha-cakes-2": "~3.3.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "../node_modules/.pnpm/open@8.4.2/node_modules/open": { - "version": "8.4.2", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "devDependencies": { - "@types/node": "^15.0.0", - "ava": "^3.15.0", - "tsd": "^0.14.0", - "xo": "^0.39.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../node_modules/.pnpm/ora@5.4.1/node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "devDependencies": { - "@types/node": "^14.14.35", - "ava": "^2.4.0", - "get-stream": "^6.0.0", - "tsd": "^0.14.0", - "xo": "^0.38.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "../node_modules/.pnpm/otplib@12.0.1/node_modules/otplib": { - "version": "12.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1", - "@otplib/preset-default": "^12.0.1", - "@otplib/preset-v11": "^12.0.1" - } - }, - "../node_modules/.pnpm/papaparse@5.5.3/node_modules/papaparse": { - "version": "5.5.3", - "license": "MIT", - "devDependencies": { - "chai": "^4.2.0", - "connect": "^3.3.3", - "eslint": "^4.19.1", - "grunt": "^1.5.2", - "grunt-contrib-uglify": "^5.2.0", - "mocha": "^5.2.0", - "mocha-headless-chrome": "^4.0.0", - "open": "7.0.0", - "serve-static": "^1.7.1" - } - }, - "../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier": { - "version": "3.8.3", - "dev": true, - "license": "MIT", - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream": { - "version": "2.0.0", - "license": "BSD-2-Clause", - "dependencies": { - "speedometer": "~1.0.0", - "through2": "~2.0.3" - }, - "devDependencies": { - "numeral": "~1.5.2", - "request": "~2.29.0", - "single-line-log": "~1.0.0" - } - }, - "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit": { - "version": "2.7.0", - "license": "ISC", - "devDependencies": { - "chai": "4.1.2", - "chai-as-promised": "7.1.1", - "eslint": "*", - "eslint-config-standard": "11.0.0", - "eslint-plugin-es5": "1.3.1", - "eslint-plugin-import": "*", - "eslint-plugin-node": "7.0.1", - "eslint-plugin-promise": "3.8.0", - "eslint-plugin-standard": "3.1.0", - "fs-promise": "2.0.3", - "lowscore": "1.17.0", - "mocha": "*" - } - }, - "../node_modules/.pnpm/prompt@1.3.0/node_modules/prompt": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.5.0", - "async": "3.2.3", - "read": "1.0.x", - "revalidator": "0.1.x", - "winston": "2.x" - }, - "devDependencies": { - "eslint": "^7.32.0", - "vows": "^0.7.0" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "../node_modules/.pnpm/querystring@0.2.1/node_modules/querystring": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "devDependencies": { - "retape": "~0.x.0", - "tape": "~0.1.5", - "test": "~0.x.0" - }, - "engines": { - "node": ">=0.4.x" - } - }, - "../node_modules/.pnpm/recheck@4.4.5/node_modules/recheck": { - "version": "4.4.5", - "license": "MIT", - "devDependencies": { - "@types/jest": "29.4.0", - "@types/node": "18.13.0", - "esbuild": "0.17.8", - "esbuild-jest": "0.5.0", - "esbuild-register": "3.4.2", - "jest": "29.4.2", - "prettier": "2.8.4", - "rimraf": "4.1.2", - "typescript": "4.9.5" - }, - "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "recheck-jar": "4.4.5", - "recheck-linux-x64": "4.4.5", - "recheck-macos-x64": "4.4.5", - "recheck-windows-x64": "4.4.5" - } - }, - "../node_modules/.pnpm/rimraf@6.1.3/node_modules/rimraf": { - "version": "6.1.3", - "license": "BlueOak-1.0.0", - "dependencies": { - "glob": "^13.0.3", - "package-json-from-dist": "^1.0.1" - }, - "bin": { - "rimraf": "dist/esm/bin.mjs" - }, - "devDependencies": { - "@types/node": "^25.2.0", - "mkdirp": "^3.0.1", - "prettier": "^3.6.2", - "tap": "^21.1.1", - "tshy": "^3.0.3", - "typedoc": "^0.28.14" - }, - "engines": { - "node": "20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "../node_modules/.pnpm/rxjs@6.6.7/node_modules/rxjs": { - "version": "6.6.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "devDependencies": { - "@angular-devkit/build-optimizer": "0.4.6", - "@angular-devkit/schematics": "^0.5.4", - "@types/chai": "4.1.2", - "@types/lodash": "4.14.102", - "@types/mocha": "2.2.48", - "@types/node": "9.4.5", - "@types/sinon": "4.1.3", - "@types/sinon-chai": "2.7.29", - "@types/source-map": "^0.5.2", - "babel-polyfill": "6.26.0", - "benchmark": "2.1.0", - "benchpress": "2.0.0-beta.1", - "chai": "4.1.2", - "check-side-effects": "0.0.20", - "color": "3.0.0", - "colors": "1.1.2", - "commitizen": "2.9.6", - "coveralls": "3.0.0", - "cross-env": "5.1.3", - "cz-conventional-changelog": "1.2.0", - "danger": "1.1.0", - "dependency-cruiser": "2.13.0", - "doctoc": "1.3.0", - "dtslint": "0.6.1", - "escape-string-regexp": "1.0.5", - "esdoc": "0.4.7", - "eslint": "4.17.0", - "eslint-plugin-jasmine": "^2.10.1", - "fs-extra": "5.0.0", - "get-folder-size": "1.0.1", - "glob": "7.1.2", - "gm": "1.23.1", - "google-closure-compiler-js": "20170218.0.0", - "gzip-size": "4.1.0", - "http-server": "0.11.1", - "husky": "0.14.3", - "klaw-sync": "3.0.2", - "lint-staged": "7.1.1", - "lodash": "4.17.5", - "markdown-doctest": "0.9.1", - "minimist": "1.2.0", - "mkdirp": "^1.0.4", - "mocha": "5.0.0", - "mocha-in-sauce": "0.0.1", - "npm-run-all": "4.1.2", - "nyc": "11.4.1", - "opn-cli": "3.1.0", - "platform": "1.3.5", - "promise": "8.0.1", - "protractor": "3.1.1", - "rollup": "0.66.6", - "rollup-plugin-alias": "1.4.0", - "rollup-plugin-inject": "2.0.0", - "rollup-plugin-node-resolve": "2.0.0", - "rx": "latest", - "rxjs": "^5.5.7", - "shx": "^0.3.2", - "sinon": "4.3.0", - "sinon-chai": "2.14.0", - "source-map-support": "0.5.3", - "symbol-observable": "1.0.1", - "systemjs": "^0.21.0", - "ts-api-guardian": "^0.5.0", - "ts-node": "6.1.0", - "tsconfig-paths": "3.2.0", - "tslint": "5.9.1", - "tslint-etc": "1.2.6", - "tslint-no-toplevel-property-access": "0.0.2", - "tslint-no-unused-expression-chai": "0.0.3", - "typescript": "^3.0.1", - "validate-commit-msg": "2.14.0", - "webpack": "1.13.1", - "xmlhttprequest": "1.8.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "regexp-tree": "~0.1.1" - }, - "devDependencies": { - "jest": "^24.9.0" - } - }, - "../node_modules/.pnpm/shelljs@0.10.0/node_modules/shelljs": { - "version": "0.10.0", - "license": "BSD-3-Clause", - "dependencies": { - "execa": "^5.1.1", - "fast-glob": "^3.3.2" - }, - "devDependencies": { - "ava": "^6.2.0", - "chalk": "^4.1.2", - "coffee-script": "^1.12.7", - "eslint": "^8.2.0", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-plugin-import": "^2.31.0", - "js-yaml": "^4.1.0", - "nyc": "^17.1.0", - "shelljs-changelog": "^0.2.6", - "shelljs-release": "^0.5.3", - "shx": "^0.4.0", - "travis-check-changes": "^0.5.1" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/short-uuid@6.0.3/node_modules/short-uuid": { - "version": "6.0.3", - "license": "MIT", - "dependencies": { - "any-base": "^1.1.0" - }, - "devDependencies": { - "@tsconfig/node20": "^20.1.8", - "@types/any-base": "^1.1.3", - "@types/node": "^22.13.10", - "nyc": "^15.1.0", - "oxlint": "^0.16.0", - "tape": "^5.2.2", - "typescript": "^5.8.2", - "uuid25": "^0.1.5", - "uuidv7": "^1.0.2" - }, - "engines": { - "node": ">=14.17.0" - } - }, - "../node_modules/.pnpm/shx@0.4.0/node_modules/shx": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "minimist": "^1.2.8", - "shelljs": "^0.9.2" - }, - "bin": { - "shx": "lib/cli.js" - }, - "devDependencies": { - "babel-cli": "^6.6.5", - "babel-preset-env": "^1.7.0", - "babel-register": "^6.7.2", - "eslint": "^8.57.1", - "eslint-config-airbnb-base": "^15.0.0", - "eslint-import-resolver-node": "0.3.7", - "eslint-plugin-import": "^2.31.0", - "js-yaml": "^4.1.0", - "mocha": "^11.1.0", - "nyc": "^17.1.0", - "rimraf": "^5.0.10", - "shelljs-changelog": "^0.2.6", - "shelljs-plugin-open": "^0.3.0", - "shelljs-release": "^0.5.3", - "should": "^13.2.3" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon": { - "version": "17.0.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.2.0", - "nise": "^5.1.9", - "supports-color": "^7" - }, - "devDependencies": { - "@babel/core": "^7.24.4", - "@sinonjs/eslint-config": "^5.0.3", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.1", - "@studio/changes": "^3.0.0", - "babel-plugin-istanbul": "^6.1.1", - "babelify": "^10.0.0", - "browserify": "^16.5.2", - "debug": "^4.3.4", - "dependency-check": "^4.1.0", - "lint-staged": "^15.2.2", - "mocha": "^10.4.0", - "mochify": "^9.2.0", - "nyc": "^15.1.0", - "prettier": "^3.2.5", - "puppeteer": "^22.7.1", - "rimraf": "^5.0.5", - "semver": "^7.6.0", - "shelljs": "^0.8.5", - "unimported": "^1.31.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon": { - "version": "19.0.5", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^13.0.5", - "@sinonjs/samsam": "^8.0.1", - "diff": "^7.0.0", - "nise": "^6.1.1", - "supports-color": "^7.2.0" - }, - "devDependencies": { - "@babel/core": "^7.25.2", - "@mochify/cli": "^0.4.1", - "@mochify/driver-puppeteer": "^0.4.0", - "@mochify/driver-webdriver": "^0.2.1", - "@sinonjs/eslint-config": "^5.0.3", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.1", - "@studio/changes": "^3.0.0", - "babel-plugin-istanbul": "^7.0.0", - "babelify": "^10.0.0", - "browserify": "^16.5.2", - "debug": "^4.3.7", - "dependency-check": "^4.1.0", - "esbuild": "^0.23.1", - "esbuild-plugin-istanbul": "^0.3.0", - "get-stdin": "^9.0.0", - "lint-staged": "^15.2.10", - "mocha": "^10.7.3", - "nyc": "^17.0.0", - "prettier": "^3.3.3", - "puppeteer": "^23.3.0", - "rimraf": "^6.0.1", - "semver": "^7.6.3", - "shelljs": "^0.8.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon": { - "version": "21.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.1.0", - "@sinonjs/samsam": "^8.0.3", - "diff": "^8.0.2", - "supports-color": "^7.2.0" - }, - "devDependencies": { - "@babel/core": "^7.28.5", - "@mochify/cli": "^1.0.0", - "@mochify/driver-puppeteer": "^1.0.1", - "@mochify/driver-webdriver": "^1.0.0", - "@sinonjs/eslint-config": "^5.0.4", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.1", - "@studio/changes": "^3.0.0", - "babel-plugin-istanbul": "^7.0.1", - "debug": "^4.4.3", - "dependency-check": "^4.1.0", - "esbuild": "^0.27.2", - "esbuild-plugin-istanbul": "^0.3.0", - "esbuild-plugin-umd-wrapper": "^3.0.0", - "get-stdin": "^9.0.0", - "lint-staged": "^16.2.7", - "mocha": "^11.7.5", - "nyc": "^17.1.0", - "prettier": "^3.7.4", - "puppeteer": "^24.34.0", - "rimraf": "^6.1.2", - "semver": "^7.7.3", - "shelljs": "^0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon": { - "version": "21.1.2", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.3.2", - "@sinonjs/samsam": "^10.0.2", - "diff": "^8.0.4" - }, - "devDependencies": { - "@mochify/cli": "^1.0.0", - "@mochify/driver-puppeteer": "^1.0.1", - "@mochify/driver-webdriver": "^1.0.0", - "@rollup/plugin-commonjs": "^29.0.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.3", - "@sinonjs/eslint-config": "^7.0.3", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.2", - "@studio/changes": "^3.0.0", - "debug": "^4.4.3", - "esbuild": "^0.28.0", - "esbuild-plugin-istanbul": "^0.3.0", - "esbuild-plugin-umd-wrapper": "^3.0.0", - "eslint": "^10.2.0", - "get-stdin": "^10.0.0", - "js-yaml": "^4.1.1", - "knip": "^6.4.0", - "lint-staged": "^16.4.0", - "mocha": "^11.7.5", - "npm-run-all": "^4.1.5", - "nyc": "^18.0.0", - "prettier": "^3.8.2", - "puppeteer": "^24.40.0", - "rimraf": "^6.1.3", - "rollup": "^4.60.1", - "semver": "^7.7.4", - "shelljs": "^0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "../node_modules/.pnpm/sinon@22.0.0/node_modules/sinon": { - "version": "22.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "@sinonjs/fake-timers": "^15.4.0", - "@sinonjs/samsam": "^10.0.2", - "diff": "^9.0.0" - }, - "devDependencies": { - "@mochify/cli": "^1.0.0", - "@mochify/driver-puppeteer": "^1.0.1", - "@mochify/driver-webdriver": "^1.0.0", - "@rollup/plugin-commonjs": "^29.0.2", - "@rollup/plugin-json": "^6.1.0", - "@rollup/plugin-node-resolve": "^16.0.3", - "@sinonjs/eslint-config": "^7.0.3", - "@sinonjs/eslint-plugin-no-prototype-methods": "^0.1.1", - "@sinonjs/referee": "^11.0.2", - "@studio/changes": "^3.0.0", - "debug": "^4.4.3", - "esbuild": "^0.28.0", - "esbuild-plugin-istanbul": "^0.3.0", - "esbuild-plugin-umd-wrapper": "^3.0.0", - "eslint": "^10.3.0", - "get-stdin": "^10.0.0", - "js-yaml": "^4.1.1", - "knip": "^6.11.0", - "lint-staged": "^16.4.0", - "mocha": "^11.7.5", - "npm-run-all2": "^8.0.4", - "nyc": "^18.0.0", - "prettier": "^3.8.3", - "puppeteer": "^24.42.0", - "rimraf": "^6.1.3", - "rollup": "^4.60.3", - "semver": "^7.7.4", - "shelljs": "^0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support": { - "version": "0.5.21", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" - }, - "devDependencies": { - "browserify": "^4.2.3", - "coffeescript": "^1.12.7", - "http-server": "^0.11.1", - "mocha": "^3.5.3", - "webpack": "^1.15.0" - } - }, - "../node_modules/.pnpm/table@6.9.0/node_modules/table": { - "version": "6.9.0", - "license": "BSD-3-Clause", - "dependencies": { - "ajv": "^8.0.1", - "lodash.truncate": "^4.4.2", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1" - }, - "devDependencies": { - "@types/chai": "^4.2.16", - "@types/lodash.mapvalues": "^4.6.6", - "@types/lodash.truncate": "^4.4.6", - "@types/mocha": "^9.0.0", - "@types/node": "^14.14.37", - "@types/sinon": "^10.0.0", - "@types/slice-ansi": "^4.0.0", - "ajv-cli": "^5.0.0", - "ajv-keywords": "^5.0.0", - "chai": "^4.2.0", - "chalk": "^4.1.0", - "coveralls": "^3.1.0", - "eslint": "^7.32.0", - "eslint-config-canonical": "^25.0.0", - "gitdown": "^3.1.4", - "husky": "^4.3.6", - "js-beautify": "^1.14.0", - "lodash.mapvalues": "^4.6.0", - "mkdirp": "^1.0.4", - "mocha": "^8.2.1", - "nyc": "^15.1.0", - "semantic-release": "^17.3.1", - "sinon": "^12.0.1", - "ts-node": "^9.1.1", - "typescript": "4.5.2" - }, - "engines": { - "node": ">=10.0.0" - } - }, - "../node_modules/.pnpm/tar@7.5.11/node_modules/tar": { - "version": "7.5.11", - "license": "BlueOak-1.0.0", - "dependencies": { - "@isaacs/fs-minipass": "^4.0.0", - "chownr": "^3.0.0", - "minipass": "^7.1.2", - "minizlib": "^3.1.0", - "yallist": "^5.0.0" - }, - "devDependencies": { - "@types/node": "^25.3.3", - "chmodr": "^2.0.2", - "end-of-stream": "^1.4.3", - "esbuild": "^0.27.3", - "events-to-array": "^2.0.3", - "mutate-fs": "^2.1.1", - "nock": "^13.5.4", - "prettier": "^3.8.1", - "rimraf": "^6.1.2", - "tap": "^21.6.2", - "tshy": "^3.3.2", - "typedoc": "^0.28.17" - }, - "engines": { - "node": ">=18" - } - }, - "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp": { - "version": "0.2.7", - "license": "MIT", - "devDependencies": { - "eslint": "^6.3.0", - "eslint-plugin-mocha": "^6.1.1", - "istanbul": "^0.4.5", - "lerna-changelog": "^1.0.1", - "mocha": "^10.2.0" - }, - "engines": { - "node": ">=14.14" - } - }, - "../node_modules/.pnpm/traverse@0.6.11/node_modules/traverse": { - "version": "0.6.11", - "license": "MIT", - "dependencies": { - "gopd": "^1.2.0", - "typedarray.prototype.slice": "^1.0.5", - "which-typed-array": "^1.1.18" - }, - "devDependencies": { - "@ljharb/eslint-config": "^21.1.1", - "auto-changelog": "^2.5.0", - "encoding": "^0.1.13", - "es-value-fixtures": "^1.7.0", - "eslint": "=8.8.0", - "in-publish": "^2.0.1", - "npmignore": "^0.3.1", - "safe-publish-latest": "^2.0.0", - "tape": "^5.9.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_91e8a29d7054379dc014cfca91cefdc3/node_modules/ts-jest": { - "version": "29.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.9", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.8.0", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-angular": "^19.8.1", - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@jest/globals": "^30.4.1", - "@jest/transform": "^30.4.1", - "@jest/types": "^30.4.1", - "@types/babel__core": "^7.20.5", - "@types/fs-extra": "^11.0.4", - "@types/jest": "^29.5.14", - "@types/js-yaml": "^4.0.9", - "@types/lodash.camelcase": "^4.3.9", - "@types/lodash.memoize": "^4.1.9", - "@types/lodash.set": "^4.3.9", - "@types/micromatch": "^4.0.10", - "@types/node": "20.19.41", - "@types/semver": "^7.7.1", - "@types/yargs": "^17.0.35", - "@types/yargs-parser": "21.0.3", - "@typescript-eslint/eslint-plugin": "^8.59.3", - "@typescript-eslint/parser": "^8.59.3", - "babel-jest": "^30.4.1", - "conventional-changelog": "^7.2.0", - "conventional-changelog-angular": "^8.3.1", - "esbuild": "~0.28.0", - "eslint": "^9.39.4", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-prettier": "^4.2.5", - "execa": "5.1.1", - "fast-glob": "^3.3.3", - "fs-extra": "^11.3.5", - "globals": "^16.5.0", - "husky": "^9.1.7", - "jest": "^30.4.2", - "js-yaml": "^4.1.1", - "lint-staged": "^15.5.2", - "memfs": "^4.57.2", - "prettier": "^2.8.8", - "rimraf": "^5.0.10", - "ts-node": "^10.9.2", - "typescript": "~5.9.3", - "typescript-eslint": "^8.59.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "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 <7" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_c6f142628921a6aa1de38c975c7e1f3d/node_modules/ts-jest": { - "version": "29.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.9", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.8.0", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-angular": "^19.8.1", - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@jest/globals": "^30.4.1", - "@jest/transform": "^30.4.1", - "@jest/types": "^30.4.1", - "@types/babel__core": "^7.20.5", - "@types/fs-extra": "^11.0.4", - "@types/jest": "^29.5.14", - "@types/js-yaml": "^4.0.9", - "@types/lodash.camelcase": "^4.3.9", - "@types/lodash.memoize": "^4.1.9", - "@types/lodash.set": "^4.3.9", - "@types/micromatch": "^4.0.10", - "@types/node": "20.19.41", - "@types/semver": "^7.7.1", - "@types/yargs": "^17.0.35", - "@types/yargs-parser": "21.0.3", - "@typescript-eslint/eslint-plugin": "^8.59.3", - "@typescript-eslint/parser": "^8.59.3", - "babel-jest": "^30.4.1", - "conventional-changelog": "^7.2.0", - "conventional-changelog-angular": "^8.3.1", - "esbuild": "~0.28.0", - "eslint": "^9.39.4", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-prettier": "^4.2.5", - "execa": "5.1.1", - "fast-glob": "^3.3.3", - "fs-extra": "^11.3.5", - "globals": "^16.5.0", - "husky": "^9.1.7", - "jest": "^30.4.2", - "js-yaml": "^4.1.1", - "lint-staged": "^15.5.2", - "memfs": "^4.57.2", - "prettier": "^2.8.8", - "rimraf": "^5.0.10", - "ts-node": "^10.9.2", - "typescript": "~5.9.3", - "typescript-eslint": "^8.59.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "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 <7" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_cb540a799e3e2e0732d753edc26b671a/node_modules/ts-jest": { - "version": "29.4.11", - "dev": true, - "license": "MIT", - "dependencies": { - "bs-logger": "^0.2.6", - "fast-json-stable-stringify": "^2.1.0", - "handlebars": "^4.7.9", - "json5": "^2.2.3", - "lodash.memoize": "^4.1.2", - "make-error": "^1.3.6", - "semver": "^7.8.0", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-angular": "^19.8.1", - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.5", - "@eslint/js": "^9.39.4", - "@jest/globals": "^30.4.1", - "@jest/transform": "^30.4.1", - "@jest/types": "^30.4.1", - "@types/babel__core": "^7.20.5", - "@types/fs-extra": "^11.0.4", - "@types/jest": "^29.5.14", - "@types/js-yaml": "^4.0.9", - "@types/lodash.camelcase": "^4.3.9", - "@types/lodash.memoize": "^4.1.9", - "@types/lodash.set": "^4.3.9", - "@types/micromatch": "^4.0.10", - "@types/node": "20.19.41", - "@types/semver": "^7.7.1", - "@types/yargs": "^17.0.35", - "@types/yargs-parser": "21.0.3", - "@typescript-eslint/eslint-plugin": "^8.59.3", - "@typescript-eslint/parser": "^8.59.3", - "babel-jest": "^30.4.1", - "conventional-changelog": "^7.2.0", - "conventional-changelog-angular": "^8.3.1", - "esbuild": "~0.28.0", - "eslint": "^9.39.4", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-prettier": "^4.2.5", - "execa": "5.1.1", - "fast-glob": "^3.3.3", - "fs-extra": "^11.3.5", - "globals": "^16.5.0", - "husky": "^9.1.7", - "jest": "^30.4.2", - "js-yaml": "^4.1.1", - "lint-staged": "^15.5.2", - "memfs": "^4.57.2", - "prettier": "^2.8.8", - "rimraf": "^5.0.10", - "ts-node": "^10.9.2", - "typescript": "~5.9.3", - "typescript-eslint": "^8.59.3" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "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 <7" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-jest@29.4.6_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest@_91abf64bf25366afcb92b2a0c11b02db/node_modules/ts-jest": { - "version": "29.4.6", - "dev": true, - "license": "MIT", - "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.3", - "type-fest": "^4.41.0", - "yargs-parser": "^21.1.1" - }, - "bin": { - "ts-jest": "cli.js" - }, - "devDependencies": { - "@commitlint/cli": "^19.8.1", - "@commitlint/config-angular": "^19.8.1", - "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "^9.39.1", - "@jest/globals": "^30.2.0", - "@jest/transform": "^30.2.0", - "@jest/types": "^30.2.0", - "@types/babel__core": "^7.20.5", - "@types/fs-extra": "^11.0.4", - "@types/jest": "^29.5.14", - "@types/js-yaml": "^4.0.9", - "@types/lodash.camelcase": "^4.3.9", - "@types/lodash.memoize": "^4.1.9", - "@types/lodash.set": "^4.3.9", - "@types/micromatch": "^4.0.10", - "@types/node": "20.19.25", - "@types/semver": "^7.7.1", - "@types/yargs": "^17.0.35", - "@types/yargs-parser": "21.0.3", - "@typescript-eslint/eslint-plugin": "^8.48.0", - "@typescript-eslint/parser": "^8.48.0", - "babel-jest": "^30.2.0", - "conventional-changelog": "^7.1.1", - "conventional-changelog-angular": "^8.1.0", - "esbuild": "~0.27.0", - "eslint": "^9.39.1", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-import": "^2.32.0", - "eslint-plugin-jest": "^28.14.0", - "eslint-plugin-jsdoc": "^50.8.0", - "eslint-plugin-prettier": "^4.2.5", - "execa": "5.1.1", - "fast-glob": "^3.3.3", - "fs-extra": "^11.3.2", - "globals": "^16.5.0", - "husky": "^9.1.7", - "jest": "^30.2.0", - "js-yaml": "^4.1.1", - "lint-staged": "^15.5.2", - "memfs": "^4.51.0", - "prettier": "^2.8.8", - "rimraf": "^5.0.10", - "ts-node": "^10.9.2", - "typescript": "~5.9.3", - "typescript-eslint": "^8.48.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || ^18.0.0 || >=20.0.0" - }, - "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" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "@jest/transform": { - "optional": true - }, - "@jest/types": { - "optional": true - }, - "babel-jest": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jest-util": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@4.9.5/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@5.9.3/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@5.9.3/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@6.0.3/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node": { - "version": "10.9.2", - "dev": true, - "license": "MIT", - "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" - }, - "bin": { - "ts-node": "dist/bin.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", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@microsoft/api-extractor": "^7.19.4", - "@swc/core": "^1.3.100", - "@swc/wasm": "^1.3.100", - "@types/diff": "^4.0.2", - "@types/lodash": "^4.14.151", - "@types/node": "13.13.5", - "@types/proper-lockfile": "^4.1.2", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.14.19", - "@types/rimraf": "^3.0.0", - "@types/semver": "^7.1.0", - "@yarnpkg/fslib": "^2.4.0", - "ava": "^3.15.0", - "axios": "^0.21.1", - "dprint": "^0.25.0", - "expect": "^27.0.2", - "get-stream": "^6.0.0", - "lodash": "^4.17.15", - "ntypescript": "^1.201507091536.1", - "nyc": "^15.0.1", - "outdent": "^0.8.0", - "proper-lockfile": "^4.1.2", - "proxyquire": "^2.0.0", - "react": "^16.14.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "throat": "^6.0.1", - "typedoc": "^0.22.10", - "typescript": "4.7.4", - "typescript-json-schema": "^0.53.0", - "util.promisify": "^1.0.1" - }, - "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } - } - }, - "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node": { - "version": "8.10.2", - "dev": true, - "license": "MIT", - "dependencies": { - "arg": "^4.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "source-map-support": "^0.5.17", - "yn": "3.1.1" - }, - "bin": { - "ts-node": "dist/bin.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" - }, - "devDependencies": { - "@types/chai": "^4.0.4", - "@types/diff": "^4.0.2", - "@types/mocha": "^5.2.7", - "@types/node": "13.13.5", - "@types/proxyquire": "^1.3.28", - "@types/react": "^16.0.2", - "@types/semver": "^7.1.0", - "@types/source-map-support": "^0.5.0", - "axios": "^0.19.0", - "chai": "^4.0.1", - "istanbul": "^0.4.0", - "mocha": "^6.2.2", - "ntypescript": "^1.201507091536.1", - "proxyquire": "^2.0.0", - "react": "^16.0.0", - "rimraf": "^3.0.0", - "semver": "^7.1.3", - "tslint": "^6.1.0", - "tslint-config-standard": "^9.0.0", - "typescript": "3.8.3", - "typescript-json-schema": "^0.42.0", - "util.promisify": "^1.0.1" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "typescript": ">=2.7" - } - }, - "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib": { - "version": "2.8.1", - "dev": true, - "license": "0BSD" - }, - "../node_modules/.pnpm/tty-table@4.2.3/node_modules/tty-table": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "csv": "^5.5.3", - "kleur": "^4.1.5", - "smartwrap": "^2.0.2", - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.1", - "yargs": "^17.7.1" - }, - "bin": { - "tty-table": "adapters/terminal-adapter.js" - }, - "devDependencies": { - "@rollup/plugin-commonjs": "^11.0.2", - "@rollup/plugin-node-resolve": "^7.1.1", - "@rollup/plugin-replace": "^2.3.1", - "axios-error": "^1.0.4", - "babel-core": "^6.26.3", - "babel-preset-babili": "0.1.4", - "babel-preset-es2015": "^6.24.1", - "babelify": "^8.0.0", - "browserify": "^16.5.0", - "chai": "^4.2.0", - "codecov": "^3.6.5", - "commander": "^4.1.1", - "coveralls": "^3.0.9", - "eslint": "^6.8.0", - "eslint-config-standard": "^14.1.0", - "eslint-plugin-import": "^2.20.1", - "eslint-plugin-node": "^11.0.0", - "eslint-plugin-promise": "^4.2.1", - "eslint-plugin-standard": "^4.0.1", - "glob": "^7.1.6", - "grunt": "^1.1.0", - "grunt-cli": "^1.3.2", - "grunt-contrib-watch": "^1.1.0", - "grunt-shell": "^3.0.1", - "husky": "^4.2.5", - "mocha": "^6.1.4", - "mocha-lcov-reporter": "^1.3.0", - "nyc": "^15.0.0", - "rollup": "^1.31.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript": { - "version": "4.9.5", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "devDependencies": { - "@octokit/rest": "latest", - "@types/chai": "latest", - "@types/fancy-log": "^2.0.0", - "@types/fs-extra": "^9.0.13", - "@types/glob": "latest", - "@types/gulp": "^4.0.9", - "@types/gulp-concat": "latest", - "@types/gulp-newer": "latest", - "@types/gulp-rename": "latest", - "@types/gulp-sourcemaps": "latest", - "@types/merge2": "latest", - "@types/microsoft__typescript-etw": "latest", - "@types/minimist": "latest", - "@types/mkdirp": "latest", - "@types/mocha": "latest", - "@types/ms": "latest", - "@types/node": "latest", - "@types/source-map-support": "latest", - "@types/which": "^2.0.1", - "@types/xml2js": "^0.4.11", - "@typescript-eslint/eslint-plugin": "^5.33.1", - "@typescript-eslint/parser": "^5.33.1", - "@typescript-eslint/utils": "^5.33.1", - "azure-devops-node-api": "^11.2.0", - "chai": "latest", - "chalk": "^4.1.2", - "del": "^6.1.1", - "diff": "^5.1.0", - "eslint": "^8.22.0", - "eslint-formatter-autolinkable-stylish": "^1.2.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-jsdoc": "^39.3.6", - "eslint-plugin-local": "^1.0.0", - "eslint-plugin-no-null": "^1.0.2", - "fancy-log": "latest", - "fs-extra": "^9.1.0", - "glob": "latest", - "gulp": "^4.0.2", - "gulp-concat": "latest", - "gulp-insert": "latest", - "gulp-newer": "latest", - "gulp-rename": "latest", - "gulp-sourcemaps": "latest", - "merge2": "latest", - "minimist": "latest", - "mkdirp": "latest", - "mocha": "latest", - "mocha-fivemat-progress-reporter": "latest", - "ms": "^2.1.3", - "node-fetch": "^3.2.10", - "source-map-support": "latest", - "typescript": "^4.8.4", - "vinyl": "latest", - "which": "^2.0.2", - "xml2js": "^0.4.23" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript": { - "version": "5.9.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "devDependencies": { - "@dprint/formatter": "^0.4.1", - "@dprint/typescript": "0.93.4", - "@esfx/canceltoken": "^1.0.0", - "@eslint/js": "^9.20.0", - "@octokit/rest": "^21.1.1", - "@types/chai": "^4.3.20", - "@types/diff": "^7.0.1", - "@types/minimist": "^1.2.5", - "@types/mocha": "^10.0.10", - "@types/ms": "^0.7.34", - "@types/node": "latest", - "@types/source-map-support": "^0.5.10", - "@types/which": "^3.0.4", - "@typescript-eslint/rule-tester": "^8.24.1", - "@typescript-eslint/type-utils": "^8.24.1", - "@typescript-eslint/utils": "^8.24.1", - "azure-devops-node-api": "^14.1.0", - "c8": "^10.1.3", - "chai": "^4.5.0", - "chokidar": "^4.0.3", - "diff": "^7.0.0", - "dprint": "^0.49.0", - "esbuild": "^0.25.0", - "eslint": "^9.20.1", - "eslint-formatter-autolinkable-stylish": "^1.4.0", - "eslint-plugin-regexp": "^2.7.0", - "fast-xml-parser": "^4.5.2", - "glob": "^10.4.5", - "globals": "^15.15.0", - "hereby": "^1.10.0", - "jsonc-parser": "^3.3.1", - "knip": "^5.44.4", - "minimist": "^1.2.8", - "mocha": "^10.8.2", - "mocha-fivemat-progress-reporter": "^0.1.0", - "monocart-coverage-reports": "^2.12.1", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "playwright": "^1.50.1", - "source-map-support": "^0.5.21", - "tslib": "^2.8.1", - "typescript": "^5.7.3", - "typescript-eslint": "^8.24.1", - "which": "^3.0.1" - }, - "engines": { - "node": ">=14.17" - } - }, - "../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript": { - "version": "6.0.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "devDependencies": { - "@dprint/formatter": "^0.4.1", - "@dprint/typescript": "0.93.4", - "@esfx/canceltoken": "^1.0.0", - "@eslint/js": "^10.0.1", - "@octokit/rest": "^22.0.1", - "@types/chai": "^4.3.20", - "@types/minimist": "^1.2.5", - "@types/mocha": "^10.0.10", - "@types/ms": "^2.1.0", - "@types/node": "latest", - "@types/source-map-support": "^0.5.10", - "@types/which": "^3.0.4", - "@typescript-eslint/rule-tester": "^8.56.1", - "@typescript-eslint/type-utils": "^8.56.1", - "@typescript-eslint/utils": "^8.56.1", - "azure-devops-node-api": "^15.1.3", - "c8": "^10.1.3", - "chai": "^4.5.0", - "chokidar": "^4.0.3", - "diff": "^8.0.3", - "dprint": "^0.49.1", - "esbuild": "^0.27.3", - "eslint": "^10.0.2", - "eslint-plugin-regexp": "^3.0.0", - "fast-xml-parser": "^5.4.1", - "glob": "^10.5.0", - "globals": "^17.4.0", - "hereby": "^1.12.0", - "jsonc-parser": "^3.3.1", - "knip": "^5.85.0", - "minimist": "^1.2.8", - "mocha": "^10.8.2", - "mocha-fivemat-progress-reporter": "^0.1.0", - "monocart-coverage-reports": "^2.12.9", - "ms": "^2.1.3", - "picocolors": "^1.1.1", - "playwright": "^1.58.2", - "source-map-support": "^0.5.21", - "tslib": "^2.8.1", - "typescript": "^5.9.3", - "typescript-eslint": "^8.56.1", - "which": "^3.0.1" - }, - "engines": { - "node": ">=14.17" - } - }, - "../node_modules/.pnpm/unique-string@2.0.0/node_modules/unique-string": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "devDependencies": { - "ava": "^1.4.1", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - } - }, - "../node_modules/.pnpm/url-join@4.0.1/node_modules/url-join": { - "version": "4.0.1", - "license": "MIT", - "devDependencies": { - "conventional-changelog": "^1.1.10", - "mocha": "^3.2.0", - "should": "~1.2.1" - } - }, - "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid": { - "version": "14.0.0", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - }, - "devDependencies": { - "@biomejs/biome": "2.4.10", - "@commitlint/cli": "20.5.0", - "@commitlint/config-conventional": "20.5.0", - "bundlewatch": "0.4.1", - "commander": "14.0.3", - "globals": "17.4.0", - "husky": "9.1.7", - "jest": "30.3.0", - "lint-staged": "16.4.0", - "neostandard": "0.13.0", - "npm-run-all2": "8.0.4", - "release-please": "17.3.0", - "runmd": "1.4.1", - "standard-version": "9.5.0", - "typescript": "5.4.3" - } - }, - "../node_modules/.pnpm/winston@3.19.0/node_modules/winston": { - "version": "3.19.0", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "devDependencies": { - "@babel/cli": "^7.23.9", - "@babel/core": "^7.24.0", - "@babel/preset-env": "^7.24.0", - "@dabh/eslint-config-populist": "^4.4.0", - "@types/node": "^20.11.24", - "abstract-winston-transport": "^0.5.1", - "assume": "^2.2.0", - "cross-spawn-async": "^2.2.5", - "eslint": "^8.57.0", - "hock": "^1.4.1", - "jest": "^29.7.0", - "rimraf": "5.0.10", - "split2": "^4.1.0", - "std-mocks": "^2.0.0", - "through2": "^4.0.2", - "winston-compat": "^0.1.5" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "../node_modules/.pnpm/xdg-basedir@4.0.0/node_modules/xdg-basedir": { - "version": "4.0.0", - "license": "MIT", - "devDependencies": { - "ava": "^1.4.1", - "import-fresh": "^3.0.0", - "tsd": "^0.7.2", - "xo": "^0.24.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@asamuzakjp/css-color": { - "version": "3.2.0", - "license": "MIT", - "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" - } - }, - "node_modules/@asamuzakjp/dom-selector": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "bidi-js": "^1.0.3", - "css-tree": "^2.3.1", - "is-potential-custom-element-name": "^1.0.1" - } - }, - "node_modules/@aws-crypto/crc32": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/crc32c": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha1-browser": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-browser": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-js": "^5.2.0", - "@aws-crypto/supports-web-crypto": "^5.2.0", - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "@aws-sdk/util-locate-window": "^3.0.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/sha256-js": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/util": "^5.2.0", - "@aws-sdk/types": "^3.222.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/@aws-crypto/supports-web-crypto": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-crypto/util": { - "version": "5.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.222.0", - "@smithy/util-utf8": "^2.0.0", - "tslib": "^2.6.2" - } - }, - "node_modules/@aws-sdk/checksums": { - "version": "3.1000.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@aws-crypto/crc32c": "5.2.0", - "@aws-crypto/util": "5.2.0", - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.1065.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/credential-provider-node": "^3.972.54", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/fetch-http-handler": "^5.4.6", - "@smithy/node-http-handler": "^4.7.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/client-s3": { - "version": "3.1065.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha1-browser": "5.2.0", - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/credential-provider-node": "^3.972.54", - "@aws-sdk/middleware-flexible-checksums": "^3.974.29", - "@aws-sdk/middleware-sdk-s3": "^3.972.50", - "@aws-sdk/signature-v4-multi-region": "^3.996.33", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/fetch-http-handler": "^5.4.6", - "@smithy/node-http-handler": "^4.7.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/core": { - "version": "3.974.20", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.12", - "@aws-sdk/xml-builder": "^3.972.29", - "@aws/lambda-invoke-store": "^0.2.2", - "@smithy/core": "^3.24.6", - "@smithy/signature-v4": "^5.4.6", - "@smithy/types": "^4.14.3", - "bowser": "^2.11.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.972.46", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.972.48", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/fetch-http-handler": "^5.4.6", - "@smithy/node-http-handler": "^4.7.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.972.52", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/credential-provider-env": "^3.972.46", - "@aws-sdk/credential-provider-http": "^3.972.48", - "@aws-sdk/credential-provider-login": "^3.972.51", - "@aws-sdk/credential-provider-process": "^3.972.46", - "@aws-sdk/credential-provider-sso": "^3.972.51", - "@aws-sdk/credential-provider-web-identity": "^3.972.51", - "@aws-sdk/nested-clients": "^3.997.19", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/credential-provider-imds": "^4.3.7", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-login": { - "version": "3.972.51", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/nested-clients": "^3.997.19", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.972.54", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/credential-provider-env": "^3.972.46", - "@aws-sdk/credential-provider-http": "^3.972.48", - "@aws-sdk/credential-provider-ini": "^3.972.52", - "@aws-sdk/credential-provider-process": "^3.972.46", - "@aws-sdk/credential-provider-sso": "^3.972.51", - "@aws-sdk/credential-provider-web-identity": "^3.972.51", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/credential-provider-imds": "^4.3.7", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.972.46", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.972.51", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/nested-clients": "^3.997.19", - "@aws-sdk/token-providers": "3.1065.0", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.972.51", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/nested-clients": "^3.997.19", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.974.29", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/checksums": "^3.1000.4", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.972.50", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/signature-v4-multi-region": "^3.996.33", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/nested-clients": { - "version": "3.997.19", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/sha256-browser": "5.2.0", - "@aws-crypto/sha256-js": "5.2.0", - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/signature-v4-multi-region": "^3.996.33", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/fetch-http-handler": "^5.4.6", - "@smithy/node-http-handler": "^4.7.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.996.33", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/types": "^3.973.12", - "@smithy/signature-v4": "^5.4.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/token-providers": { - "version": "3.1065.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-sdk/core": "^3.974.20", - "@aws-sdk/nested-clients": "^3.997.19", - "@aws-sdk/types": "^3.973.12", - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/types": { - "version": "3.973.12", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/util-locate-window": { - "version": "3.965.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws-sdk/xml-builder": { - "version": "3.972.29", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/types": "^4.14.3", - "fast-xml-parser": "5.7.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "node_modules/@aws/lambda-invoke-store": { - "version": "0.2.4", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@colors/colors": { - "version": "1.6.0", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@contentstack/apps-cli": { - "resolved": "packages/contentstack-apps-cli", - "link": true - }, - "node_modules/@contentstack/cli-audit": { - "resolved": "packages/contentstack-audit", - "link": true - }, - "node_modules/@contentstack/cli-bulk-operations": { - "resolved": "packages/contentstack-bulk-operations", - "link": true - }, - "node_modules/@contentstack/cli-cm-bootstrap": { - "resolved": "packages/contentstack-bootstrap", - "link": true - }, - "node_modules/@contentstack/cli-cm-branches": { - "resolved": "packages/contentstack-branches", - "link": true - }, - "node_modules/@contentstack/cli-cm-bulk-publish": { - "resolved": "packages/contentstack-bulk-publish", - "link": true - }, - "node_modules/@contentstack/cli-cm-clone": { - "resolved": "packages/contentstack-clone", - "link": true - }, - "node_modules/@contentstack/cli-cm-export": { - "resolved": "packages/contentstack-export", - "link": true - }, - "node_modules/@contentstack/cli-cm-export-query": { - "resolved": "packages/contentstack-query-export", - "link": true - }, - "node_modules/@contentstack/cli-cm-export-to-csv": { - "resolved": "packages/contentstack-export-to-csv", - "link": true - }, - "node_modules/@contentstack/cli-cm-import": { - "resolved": "packages/contentstack-import", - "link": true - }, - "node_modules/@contentstack/cli-cm-import-setup": { - "resolved": "packages/contentstack-import-setup", - "link": true - }, - "node_modules/@contentstack/cli-cm-migrate-rte": { - "resolved": "packages/contentstack-migrate-rte", - "link": true - }, - "node_modules/@contentstack/cli-cm-regex-validate": { - "resolved": "packages/contentstack-cli-cm-regex-validate", - "link": true - }, - "node_modules/@contentstack/cli-cm-seed": { - "resolved": "packages/contentstack-seed", - "link": true - }, - "node_modules/@contentstack/cli-command": { - "version": "1.8.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "contentstack": "^3.27.0" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@contentstack/cli-external-migrate": { - "resolved": "packages/contentstack-external-migrate", - "link": true - }, - "node_modules/@contentstack/cli-migration": { - "resolved": "packages/contentstack-migration", - "link": true - }, - "node_modules/@contentstack/cli-utilities": { - "version": "1.18.4", - "license": "MIT", - "dependencies": { - "@contentstack/management": "~1.30.1", - "@contentstack/marketplace-sdk": "^1.5.1", - "@oclif/core": "^4.11.4", - "axios": "^1.16.1", - "chalk": "^4.1.2", - "cli-cursor": "^3.1.0", - "cli-progress": "^3.12.0", - "cli-table": "^0.3.11", - "conf": "^10.2.0", - "dotenv": "^16.6.1", - "figures": "^3.2.0", - "inquirer": "8.2.7", - "inquirer-search-checkbox": "^1.0.0", - "inquirer-search-list": "^1.2.6", - "js-yaml": "^4.1.1", - "klona": "^2.0.6", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "open": "^8.4.2", - "ora": "^5.4.1", - "papaparse": "^5.5.3", - "recheck": "~4.4.5", - "rxjs": "^6.6.7", - "short-uuid": "^6.0.0", - "traverse": "^0.6.11", - "tty-table": "^4.2.3", - "unique-string": "^2.0.0", - "uuid": "^14.0.0", - "winston": "^3.19.0", - "xdg-basedir": "^4.0.0" - } - }, - "node_modules/@contentstack/cli-variants": { - "resolved": "packages/contentstack-variants", - "link": true - }, - "node_modules/@contentstack/json-rte-serializer": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "array-flat-polyfill": "^1.0.1", - "lodash": "^4.17.21", - "lodash.clonedeep": "^4.5.0", - "lodash.flatten": "^4.4.0", - "lodash.isempty": "^4.4.0", - "lodash.isequal": "^4.5.0", - "lodash.isobject": "^3.0.2", - "lodash.isplainobject": "^4.0.6", - "lodash.isundefined": "^3.0.1", - "lodash.kebabcase": "^4.1.1", - "slate": "^0.103.0", - "uuid": "^8.3.2" - } - }, - "node_modules/@contentstack/json-rte-serializer/node_modules/uuid": { - "version": "8.3.2", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, - "node_modules/@contentstack/management": { - "version": "1.30.3", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.9.1", - "assert": "^2.1.0", - "axios": "^1.16.1", - "buffer": "^6.0.3", - "form-data": "^4.0.5", - "husky": "^9.1.7", - "lodash": "^4.18.1", - "otplib": "^12.0.1", - "qs": "^6.15.2", - "stream-browserify": "^3.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@contentstack/marketplace-sdk": { - "version": "1.5.3", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.9.1", - "axios": "^1.17.0" - } - }, - "node_modules/@contentstack/utils": { - "version": "1.9.1", - "license": "MIT" - }, - "node_modules/@csstools/color-helpers": { - "version": "5.1.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT-0", - "engines": { - "node": ">=18" - } - }, - "node_modules/@csstools/css-calc": { - "version": "2.1.4", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-color-parser": { - "version": "3.1.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "dependencies": { - "@csstools/color-helpers": "^5.1.0", - "@csstools/css-calc": "^2.1.4" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-parser-algorithms": "^3.0.5", - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-parser-algorithms": { - "version": "3.0.5", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@csstools/css-tokenizer": "^3.0.4" - } - }, - "node_modules/@csstools/css-tokenizer": { - "version": "3.0.4", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/csstools" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/csstools" - } - ], - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@dabh/diagnostics": { - "version": "2.0.8", - "license": "MIT", - "dependencies": { - "@so-ric/colorspace": "^1.1.6", - "enabled": "2.0.x", - "kuler": "^2.0.0" - } - }, - "node_modules/@eslint-community/eslint-utils": { - "version": "4.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" - } - }, - "node_modules/@eslint-community/regexpp": { - "version": "4.12.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" - } - }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/@eslint/eslintrc/node_modules/ajv": { - "version": "6.15.0", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/@eslint/eslintrc/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { - "version": "1.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@eslint/eslintrc/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { - "version": "3.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@eslint/js": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.13.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@humanwhocodes/object-schema": "^2.0.3", - "debug": "^4.3.1", - "minimatch": "^3.0.5" - }, - "engines": { - "node": ">=10.10.0" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/@humanwhocodes/module-importer": { - "version": "1.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.22" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/nzakas" - } - }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/@inquirer/ansi": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/checkbox": { - "version": "4.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/checkbox/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/checkbox/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/checkbox/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/checkbox/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/checkbox/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/confirm": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core": { - "version": "9.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", - "ansi-escapes": "^4.3.2", - "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", - "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^6.2.0", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@inquirer/type": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.19.20", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@inquirer/core/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/core/node_modules/mute-stream": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@inquirer/core/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/editor": { - "version": "4.2.23", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/external-editor": "^1.0.3", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/editor/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/editor/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/editor/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/expand": { - "version": "4.0.23", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/expand/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/expand/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/expand/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/external-editor": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "chardet": "^2.1.1", - "iconv-lite": "^0.7.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/figures": { - "version": "1.0.15", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/input": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/number": { - "version": "3.0.23", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/number/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/number/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/number/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/password": { - "version": "4.0.23", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/ansi": "^1.0.2", - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/password/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/password/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/password/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/prompts": { - "version": "7.10.1", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/confirm": { - "version": "5.1.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/input": { - "version": "4.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/select": { - "version": "4.4.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/prompts/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/prompts/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/prompts/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/rawlist": { - "version": "4.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/rawlist/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/rawlist/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/rawlist/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/search": { - "version": "3.2.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^10.3.2", - "@inquirer/figures": "^1.0.15", - "@inquirer/type": "^3.0.10", - "yoctocolors-cjs": "^2.1.3" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search/node_modules/@inquirer/core": { - "version": "10.3.2", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search/node_modules/@inquirer/type": { - "version": "3.0.10", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "@types/node": ">=18" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - } - } - }, - "node_modules/@inquirer/search/node_modules/cli-width": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">= 12" - } - }, - "node_modules/@inquirer/search/node_modules/mute-stream": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^18.17.0 || >=20.5.0" - } - }, - "node_modules/@inquirer/search/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@inquirer/select": { - "version": "2.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/figures": "^1.0.5", - "@inquirer/type": "^1.5.3", - "ansi-escapes": "^4.3.2", - "yoctocolors-cjs": "^2.1.2" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type": { - "version": "1.5.5", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/@inquirer/type/node_modules/mute-stream": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.5.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@nodable/entities": { - "version": "2.1.1", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/nodable" - } - ], - "license": "MIT" - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@oclif/core": { - "version": "4.11.4", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^4.3.2", - "ansis": "^3.17.0", - "clean-stack": "^3.0.1", - "cli-spinners": "^2.9.2", - "debug": "^4.4.3", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "lilconfig": "^3.1.3", - "minimatch": "^10.2.5", - "semver": "^7.8.1", - "string-width": "^4.2.3", - "supports-color": "^8", - "tinyglobby": "^0.2.16", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/plugin-help": { - "version": "6.2.50", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/plugin-not-found": { - "version": "3.2.87", - "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/prompts": "^7.10.1", - "@oclif/core": "^4.11.4", - "ansis": "^3.17.0", - "fast-levenshtein": "^3.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/plugin-warn-if-update-available": { - "version": "3.1.65", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^4", - "ansis": "^3.17.0", - "debug": "^4.4.3", - "http-call": "^5.2.2", - "lodash": "^4.18.1", - "registry-auth-token": "^5.1.1" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/test": { - "version": "3.2.15", - "dev": true, - "license": "MIT", - "dependencies": { - "@oclif/core": "^3.26.6", - "chai": "^4.4.1", - "fancy-test": "^3.0.15" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/test/node_modules/@oclif/core": { - "version": "3.27.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/cli-progress": "^3.11.5", - "ansi-escapes": "^4.3.2", - "ansi-styles": "^4.3.0", - "cardinal": "^2.1.1", - "chalk": "^4.1.2", - "clean-stack": "^3.0.1", - "cli-progress": "^3.12.0", - "color": "^4.2.3", - "debug": "^4.3.5", - "ejs": "^3.1.10", - "get-package-type": "^0.1.0", - "globby": "^11.1.0", - "hyperlinker": "^1.0.0", - "indent-string": "^4.0.0", - "is-wsl": "^2.2.0", - "js-yaml": "^3.14.1", - "minimatch": "^9.0.4", - "natural-orderby": "^2.0.3", - "object-treeify": "^1.1.33", - "password-prompt": "^1.1.3", - "slice-ansi": "^4.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "supports-color": "^8.1.1", - "supports-hyperlinks": "^2.2.0", - "widest-line": "^3.1.0", - "wordwrap": "^1.0.0", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@oclif/test/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@oclif/test/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@oclif/test/node_modules/brace-expansion": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@oclif/test/node_modules/color": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/@oclif/test/node_modules/color-string": { - "version": "1.9.1", - "dev": true, - "license": "MIT", - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/@oclif/test/node_modules/js-yaml": { - "version": "3.14.2", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@oclif/test/node_modules/minimatch": { - "version": "9.0.9", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.2" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@otplib/core": { - "version": "12.0.1", - "license": "MIT" - }, - "node_modules/@otplib/plugin-crypto": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1" - } - }, - "node_modules/@otplib/plugin-thirty-two": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1", - "thirty-two": "^1.0.2" - } - }, - "node_modules/@otplib/preset-default": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1", - "@otplib/plugin-crypto": "^12.0.1", - "@otplib/plugin-thirty-two": "^12.0.1" - } - }, - "node_modules/@otplib/preset-v11": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1", - "@otplib/plugin-crypto": "^12.0.1", - "@otplib/plugin-thirty-two": "^12.0.1" - } - }, - "node_modules/@oxc-project/types": { - "version": "0.133.0", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/Boshen" - } - }, - "node_modules/@pnpm/config.env-replace": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "4.2.10" - }, - "engines": { - "node": ">=12.22.0" - } - }, - "node_modules/@pnpm/network.ca-file/node_modules/graceful-fs": { - "version": "4.2.10", - "dev": true, - "license": "ISC" - }, - "node_modules/@pnpm/npm-conf": { - "version": "3.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/config.env-replace": "^1.1.0", - "@pnpm/network.ca-file": "^1.0.1", - "config-chain": "^1.1.11" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@rolldown/binding-darwin-arm64": { - "version": "1.0.3", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^20.19.0 || >=22.12.0" - } - }, - "node_modules/@rolldown/pluginutils": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" - } - }, - "node_modules/@sinonjs/commons": { - "version": "3.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } - }, - "node_modules/@sinonjs/commons/node_modules/type-detect": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" - } - }, - "node_modules/@sinonjs/samsam": { - "version": "8.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1", - "type-detect": "^4.1.0" - } - }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.3", - "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@smithy/core": { - "version": "3.24.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/credential-provider-imds": { - "version": "4.3.8", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/fetch-http-handler": { - "version": "5.4.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/is-array-buffer": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/node-http-handler": { - "version": "4.7.7", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/signature-v4": { - "version": "5.4.6", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/core": "^3.24.6", - "@smithy/types": "^4.14.3", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/types": { - "version": "4.14.3", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/@smithy/util-buffer-from": { - "version": "2.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/is-array-buffer": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@smithy/util-utf8": { - "version": "2.3.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@smithy/util-buffer-from": "^2.2.0", - "tslib": "^2.6.2" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/@so-ric/colorspace": { - "version": "1.1.6", - "license": "MIT", - "dependencies": { - "color": "^5.0.2", - "text-hex": "1.0.x" - } - }, - "node_modules/@standard-schema/spec": { - "version": "1.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "defer-to-connect": "^2.0.1" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/@types/chai": { - "version": "5.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/deep-eql": "*", - "assertion-error": "^2.0.1" - } - }, - "node_modules/@types/chai/node_modules/assertion-error": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - } - }, - "node_modules/@types/cli-progress": { - "version": "3.11.6", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/deep-eql": { - "version": "4.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/estree": { - "version": "1.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/jsdom": { - "version": "21.1.7", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*", - "@types/tough-cookie": "*", - "parse5": "^7.0.0" - } - }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash": { - "version": "4.17.24", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/mkdirp": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, - "node_modules/@types/node": { - "version": "20.19.42", - "devOptional": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.21.0" - } - }, - "node_modules/@types/semver": { - "version": "7.7.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/sinon": { - "version": "21.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/sinonjs__fake-timers": "*" - } - }, - "node_modules/@types/sinonjs__fake-timers": { - "version": "15.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/tough-cookie": { - "version": "4.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/triple-beam": { - "version": "1.3.5", - "license": "MIT" - }, - "node_modules/@types/uuid": { - "version": "10.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.4", - "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitest/expect": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@standard-schema/spec": "^1.1.0", - "@types/chai": "^5.2.2", - "@vitest/spy": "4.1.8", - "@vitest/utils": "4.1.8", - "chai": "^6.2.2", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/expect/node_modules/chai": { - "version": "6.2.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/@vitest/mocker": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/spy": "4.1.8", - "estree-walker": "^3.0.3", - "magic-string": "^0.30.21" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "msw": "^2.4.9", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "msw": { - "optional": true - }, - "vite": { - "optional": true - } - } - }, - "node_modules/@vitest/pretty-format": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/runner": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/utils": "4.1.8", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/snapshot": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.8", - "@vitest/utils": "4.1.8", - "magic-string": "^0.30.21", - "pathe": "^2.0.3" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/spy": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/@vitest/utils": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/pretty-format": "4.1.8", - "convert-source-map": "^2.0.0", - "tinyrainbow": "^3.1.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - } - }, - "node_modules/acorn": { - "version": "8.16.0", - "dev": true, - "license": "MIT", - "bin": { - "acorn": "bin/acorn" - }, - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/acorn-jsx": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/agent-base": { - "version": "6.0.2", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, - "node_modules/ajv": { - "version": "8.20.0", - "license": "MIT", - "dependencies": { - "fast-deep-equal": "^3.1.3", - "fast-uri": "^3.0.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/ajv-formats": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "ajv": "^8.0.0" - }, - "peerDependencies": { - "ajv": "^8.0.0" - }, - "peerDependenciesMeta": { - "ajv": { - "optional": true - } - } - }, - "node_modules/ansi-escapes": { - "version": "4.3.2", - "license": "MIT", - "dependencies": { - "type-fest": "^0.21.3" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/ansicolors": { - "version": "0.3.2", - "dev": true, - "license": "MIT" - }, - "node_modules/ansis": { - "version": "3.17.0", - "license": "ISC", - "engines": { - "node": ">=14" - } - }, - "node_modules/any-base": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/anynum": { - "version": "1.0.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT" - }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" - }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "is-array-buffer": "^3.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-flat-polyfill": { - "version": "1.0.1", - "license": "CC0-1.0", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.3", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.5", - "es-shim-unscopables": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.4", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/assert": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "is-nan": "^1.3.2", - "object-is": "^1.1.5", - "object.assign": "^4.1.4", - "util": "^0.12.5" - } - }, - "node_modules/assertion-error": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/astral-regex": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/async": { - "version": "3.2.6", - "license": "MIT" - }, - "node_modules/async-function": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/async-retry": { - "version": "1.3.3", - "dev": true, - "license": "MIT", - "dependencies": { - "retry": "0.13.1" - } - }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" - }, - "node_modules/atomically": { - "version": "1.7.0", - "license": "MIT", - "engines": { - "node": ">=10.12.0" - } - }, - "node_modules/available-typed-arrays": { - "version": "1.0.7", - "license": "MIT", - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/axios": { - "version": "1.17.0", - "license": "MIT", - "dependencies": { - "follow-redirects": "^1.16.0", - "form-data": "^4.0.5", - "https-proxy-agent": "^5.0.1", - "proxy-from-env": "^2.1.0" - } - }, - "node_modules/balanced-match": { - "version": "4.0.4", - "license": "MIT", - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/base64-js": { - "version": "1.5.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/bidi-js": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "require-from-string": "^2.0.2" - } - }, - "node_modules/bl": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } - }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/bowser": { - "version": "2.14.1", - "dev": true, - "license": "MIT" - }, - "node_modules/brace-expansion": { - "version": "5.0.6", - "license": "MIT", - "dependencies": { - "balanced-match": "^4.0.2" - }, - "engines": { - "node": "18 || 20 || >=22" - } - }, - "node_modules/braces": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "fill-range": "^7.1.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/breakword": { - "version": "1.0.6", - "license": "MIT", - "dependencies": { - "wcwidth": "^1.0.1" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" - } - }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - } - }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=14.16" - } - }, - "node_modules/call-bind": { - "version": "1.0.9", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "es-define-property": "^1.0.1", - "get-intrinsic": "^1.3.0", - "set-function-length": "^1.2.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/call-bind-apply-helpers": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/call-bound": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.2", - "get-intrinsic": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/callsites": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/camel-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "pascal-case": "^3.1.2", - "tslib": "^2.0.3" - } - }, - "node_modules/camelcase": { - "version": "5.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/capital-case": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/cardinal": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansicolors": "~0.3.2", - "redeyed": "~2.1.0" - }, - "bin": { - "cdl": "bin/cdl.js" - } - }, - "node_modules/chai": { - "version": "4.5.0", - "dev": true, - "license": "MIT", - "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.1.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/chalk": { - "version": "4.1.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" - } - }, - "node_modules/chalk/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/change-case": { - "version": "4.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "camel-case": "^4.1.2", - "capital-case": "^1.0.4", - "constant-case": "^3.0.4", - "dot-case": "^3.0.4", - "header-case": "^2.0.4", - "no-case": "^3.0.4", - "param-case": "^3.0.4", - "pascal-case": "^3.1.2", - "path-case": "^3.0.4", - "sentence-case": "^3.0.4", - "snake-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/chardet": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/check-error": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.2" - }, - "engines": { - "node": "*" - } - }, - "node_modules/clean-stack": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cli-progress": { - "version": "3.12.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.2.3" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/cli-spinners": { - "version": "2.9.2", - "license": "MIT", - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/cli-table": { - "version": "0.3.11", - "dependencies": { - "colors": "1.0.3" - }, - "engines": { - "node": ">= 0.2.0" - } - }, - "node_modules/cli-width": { - "version": "3.0.0", - "license": "ISC", - "engines": { - "node": ">= 10" - } - }, - "node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "license": "MIT", - "engines": { - "node": ">=0.8" - } - }, - "node_modules/color": { - "version": "5.0.3", - "license": "MIT", - "dependencies": { - "color-convert": "^3.1.3", - "color-string": "^2.1.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-string": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/color-string/node_modules/color-name": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/color/node_modules/color-convert": { - "version": "3.1.3", - "license": "MIT", - "dependencies": { - "color-name": "^2.0.0" - }, - "engines": { - "node": ">=14.6" - } - }, - "node_modules/color/node_modules/color-name": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/colors": { - "version": "1.0.3", - "license": "MIT", - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" - }, - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/conf": { - "version": "10.2.0", - "license": "MIT", - "dependencies": { - "ajv": "^8.6.3", - "ajv-formats": "^2.1.1", - "atomically": "^1.7.0", - "debounce-fn": "^4.0.0", - "dot-prop": "^6.0.1", - "env-paths": "^2.2.1", - "json-schema-typed": "^7.0.3", - "onetime": "^5.1.2", - "pkg-up": "^3.1.0", - "semver": "^7.3.5" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/config-chain": { - "version": "1.1.13", - "dev": true, - "license": "MIT", - "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" - } - }, - "node_modules/constant-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case": "^2.0.2" - } - }, - "node_modules/content-type": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/contentstack": { - "version": "3.27.0", - "license": "MIT", - "dependencies": { - "@contentstack/utils": "^1.4.1", - "es6-promise": "^4.2.8", - "husky": "^9.1.7", - "localStorage": "1.0.4" - }, - "engines": { - "node": ">= 10.14.2" - } - }, - "node_modules/contentstack-cli-content-type": { - "resolved": "packages/contentstack-content-type", - "link": true - }, - "node_modules/contentstack-cli-tsgen": { - "resolved": "packages/contentstack-cli-tsgen", - "link": true - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cross-spawn": { - "version": "7.0.6", - "dev": true, - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/crypto-random-string": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/css-tree": { - "version": "2.3.1", - "license": "MIT", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, - "node_modules/cssstyle": { - "version": "4.6.0", - "license": "MIT", - "dependencies": { - "@asamuzakjp/css-color": "^3.2.0", - "rrweb-cssom": "^0.8.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.8.0", - "license": "MIT" - }, - "node_modules/csv": { - "version": "5.5.3", - "license": "MIT", - "dependencies": { - "csv-generate": "^3.4.3", - "csv-parse": "^4.16.3", - "csv-stringify": "^5.6.5", - "stream-transform": "^2.1.3" - }, - "engines": { - "node": ">= 0.1.90" - } - }, - "node_modules/csv-generate": { - "version": "3.4.3", - "license": "MIT" - }, - "node_modules/csv-parse": { - "version": "4.16.3", - "license": "MIT" - }, - "node_modules/csv-stringify": { - "version": "5.6.5", - "license": "MIT" - }, - "node_modules/data-urls": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/inspect-js" - } - }, - "node_modules/data-view-byte-offset": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/debounce-fn": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "mimic-fn": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/debug": { - "version": "4.4.3", - "license": "MIT", - "dependencies": { - "ms": "^2.1.3" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/decamelize": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decimal.js": { - "version": "10.6.0", - "license": "MIT" - }, - "node_modules/decompress-response": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-eql": { - "version": "4.1.4", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/defaults": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/define-data-property": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/detect-libc": { - "version": "2.1.2", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/diff": { - "version": "5.2.2", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } - }, - "node_modules/dir-glob": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/dot-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/dot-prop": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/dotenv": { - "version": "16.6.1", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://dotenvx.com" - } - }, - "node_modules/dunder-proto": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bind-apply-helpers": "^1.0.1", - "es-errors": "^1.3.0", - "gopd": "^1.2.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/ejs": { - "version": "3.1.10", - "license": "Apache-2.0", - "dependencies": { - "jake": "^10.8.5" - }, - "bin": { - "ejs": "bin/cli.js" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/enabled": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/entities": { - "version": "6.0.1", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/env-paths": { - "version": "2.2.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/error-ex": { - "version": "1.3.4", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/es-abstract": { - "version": "1.24.2", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-define-property": { - "version": "1.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-errors": { - "version": "1.3.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-module-lexer": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/es-object-atoms": { - "version": "1.1.2", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-to-primitive": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7", - "is-date-object": "^1.0.5", - "is-symbol": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es6-promise": { - "version": "4.2.8", - "license": "MIT" - }, - "node_modules/escalade": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/eslint": { - "version": "8.57.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.57.1", - "@humanwhocodes/config-array": "^0.13.0", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-scope": { - "version": "7.2.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.15.0", - "dev": true, - "license": "MIT", - "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" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/eslint/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/espree": { - "version": "9.6.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/esprima": { - "version": "4.0.1", - "dev": true, - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/esquery": { - "version": "1.7.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "estraverse": "^5.1.0" - }, - "engines": { - "node": ">=0.10" - } - }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "estraverse": "^5.2.0" - }, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" - } - }, - "node_modules/estree-walker": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "^1.0.0" - } - }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/expect-type": { - "version": "1.3.0", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/external-editor": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "chardet": "^0.4.0", - "iconv-lite": "^0.4.17", - "tmp": "^0.0.33" - }, - "engines": { - "node": ">=0.12" - } - }, - "node_modules/external-editor/node_modules/chardet": { - "version": "0.4.2", - "license": "MIT" - }, - "node_modules/external-editor/node_modules/iconv-lite": { - "version": "0.4.24", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/fancy-test": { - "version": "3.0.16", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/chai": "*", - "@types/lodash": "*", - "@types/node": "*", - "@types/sinon": "*", - "lodash": "^4.17.13", - "mock-stdin": "^1.0.0", - "nock": "^13.5.4", - "sinon": "^16.1.3", - "stdout-stderr": "^0.1.9" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" - }, - "node_modules/fast-glob": { - "version": "3.3.3", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fast-glob/node_modules/glob-parent": { - "version": "5.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "fastest-levenshtein": "^1.0.7" - } - }, - "node_modules/fast-uri": { - "version": "3.1.2", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fastify" - }, - { - "type": "opencollective", - "url": "https://opencollective.com/fastify" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/fast-xml-builder": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "path-expression-matcher": "^1.5.0", - "xml-naming": "^0.1.0" - } - }, - "node_modules/fast-xml-parser": { - "version": "5.7.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "@nodable/entities": "^2.1.0", - "fast-xml-builder": "^1.1.7", - "path-expression-matcher": "^1.5.0", - "strnum": "^2.2.3" - }, - "bin": { - "fxparser": "src/cli/cli.js" - } - }, - "node_modules/fastest-levenshtein": { - "version": "1.0.16", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.9.1" - } - }, - "node_modules/fastq": { - "version": "1.20.1", - "dev": true, - "license": "ISC", - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fecha": { - "version": "4.2.3", - "license": "MIT" - }, - "node_modules/figures": { - "version": "3.2.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/figures/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/file-entry-cache": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "flat-cache": "^3.0.4" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/filelist": { - "version": "1.0.6", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" - } - }, - "node_modules/filelist/node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/filelist/node_modules/brace-expansion": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.9", - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/fill-range": { - "version": "7.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/find-up": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/find-yarn-workspace-root": { - "version": "2.0.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "micromatch": "^4.0.2" - } - }, - "node_modules/flat-cache": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" - }, - "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/flatted": { - "version": "3.4.2", - "dev": true, - "license": "ISC" - }, - "node_modules/fn.name": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/follow-redirects": { - "version": "1.16.0", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], - "license": "MIT", - "engines": { - "node": ">=4.0" - }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } - } - }, - "node_modules/for-each": { - "version": "0.3.5", - "license": "MIT", - "dependencies": { - "is-callable": "^1.2.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/form-data": { - "version": "4.0.5", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/form-data-encoder": { - "version": "2.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 14.17" - } - }, - "node_modules/fs-extra": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/fsevents": { - "version": "2.3.3", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.2", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/function.prototype.name": { - "version": "1.1.8", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/fuzzy": { - "version": "0.1.3", - "engines": { - "node": ">= 0.6.0" - } - }, - "node_modules/generator-function": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", - "engines": { - "node": "6.* || 8.* || >= 10.*" - } - }, - "node_modules/get-func-name": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/get-intrinsic": { - "version": "1.3.0", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-package-type": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/get-proto": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/get-stream": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/get-symbol-description": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/github-slugger": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/glob": { - "version": "7.2.3", - "dev": true, - "license": "ISC", - "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" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "is-glob": "^4.0.3" - }, - "engines": { - "node": ">=10.13.0" - } - }, - "node_modules/glob/node_modules/balanced-match": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.15", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.5", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/globals": { - "version": "13.24.0", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.20.2" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/globalthis": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "define-properties": "^1.2.1", - "gopd": "^1.0.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/got": { - "version": "13.0.0", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "dev": true, - "license": "ISC" - }, - "node_modules/grapheme-splitter": { - "version": "1.0.4", - "license": "MIT" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/has-bigints": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "es-define-property": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-symbols": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-tostringtag": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/hasown": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/header-case": { - "version": "2.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "capital-case": "^1.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/hosted-git-info": { - "version": "7.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^10.0.1" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/html-encoding-sniffer": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^3.1.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/http-cache-semantics": { - "version": "4.2.0", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/http-call": { - "version": "5.3.0", - "dev": true, - "license": "ISC", - "dependencies": { - "content-type": "^1.0.4", - "debug": "^4.1.1", - "is-retry-allowed": "^1.1.0", - "is-stream": "^2.0.0", - "parse-json": "^4.0.0", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/http-proxy-agent": { - "version": "7.0.2", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.0", - "debug": "^4.3.4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/http-proxy-agent/node_modules/agent-base": { - "version": "7.1.4", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/http2-wrapper": { - "version": "2.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, - "engines": { - "node": ">=10.19.0" - } - }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/husky": { - "version": "9.1.7", - "license": "MIT", - "bin": { - "husky": "bin.js" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/typicode" - } - }, - "node_modules/hyperlinker": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/iconv-lite": { - "version": "0.7.2", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/express" - } - }, - "node_modules/ieee754": { - "version": "1.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/immer": { - "version": "10.2.0", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, - "node_modules/import-fresh": { - "version": "3.3.1", - "dev": true, - "license": "MIT", - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } - }, - "node_modules/indent-string": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "dev": true, - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", - "dev": true, - "license": "ISC" - }, - "node_modules/inquirer": { - "version": "8.2.7", - "license": "MIT", - "dependencies": { - "@inquirer/external-editor": "^1.0.0", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/inquirer-search-checkbox": { - "version": "1.0.0", - "license": "ISC", - "dependencies": { - "chalk": "^2.3.0", - "figures": "^2.0.0", - "fuzzy": "^0.1.3", - "inquirer": "^3.3.0" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/ansi-escapes": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/ansi-regex": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/cli-cursor": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/cli-width": { - "version": "2.2.1", - "license": "ISC" - }, - "node_modules/inquirer-search-checkbox/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/inquirer-search-checkbox/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/figures": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/inquirer": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/mimic-fn": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/mute-stream": { - "version": "0.0.7", - "license": "ISC" - }, - "node_modules/inquirer-search-checkbox/node_modules/onetime": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/restore-cursor": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/inquirer-search-checkbox/node_modules/string-width": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/strip-ansi": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-checkbox/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list": { - "version": "1.2.6", - "license": "MIT", - "dependencies": { - "chalk": "^2.3.0", - "figures": "^2.0.0", - "fuzzy": "^0.1.3", - "inquirer": "^3.3.0" - } - }, - "node_modules/inquirer-search-list/node_modules/ansi-escapes": { - "version": "3.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/ansi-regex": { - "version": "3.0.1", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/ansi-styles": { - "version": "3.2.1", - "license": "MIT", - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/chalk": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/cli-cursor": { - "version": "2.1.0", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/cli-width": { - "version": "2.2.1", - "license": "ISC" - }, - "node_modules/inquirer-search-list/node_modules/color-convert": { - "version": "1.9.3", - "license": "MIT", - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/inquirer-search-list/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/inquirer-search-list/node_modules/escape-string-regexp": { - "version": "1.0.5", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer-search-list/node_modules/figures": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/has-flag": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/inquirer": { - "version": "3.3.0", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "chalk": "^2.0.0", - "cli-cursor": "^2.1.0", - "cli-width": "^2.0.0", - "external-editor": "^2.0.4", - "figures": "^2.0.0", - "lodash": "^4.3.0", - "mute-stream": "0.0.7", - "run-async": "^2.2.0", - "rx-lite": "^4.0.8", - "rx-lite-aggregates": "^4.0.8", - "string-width": "^2.1.0", - "strip-ansi": "^4.0.0", - "through": "^2.3.6" - } - }, - "node_modules/inquirer-search-list/node_modules/is-fullwidth-code-point": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/mimic-fn": { - "version": "1.2.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/mute-stream": { - "version": "0.0.7", - "license": "ISC" - }, - "node_modules/inquirer-search-list/node_modules/onetime": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "mimic-fn": "^1.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/restore-cursor": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "onetime": "^2.0.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/inquirer-search-list/node_modules/string-width": { - "version": "2.1.1", - "license": "MIT", - "dependencies": { - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^4.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/strip-ansi": { - "version": "4.0.0", - "license": "MIT", - "dependencies": { - "ansi-regex": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer-search-list/node_modules/supports-color": { - "version": "5.5.0", - "license": "MIT", - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/inquirer/node_modules/rxjs": { - "version": "7.8.2", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "node_modules/inquirer/node_modules/wrap-ansi": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/internal-slot": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "hasown": "^2.0.2", - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-arguments": { - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/is-async-function": { - "version": "2.1.1", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.2.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-data-view": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "get-intrinsic": "^1.2.6", - "is-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-date-object": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-docker": { - "version": "2.2.1", - "license": "MIT", - "bin": { - "is-docker": "cli.js" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-finalizationregistry": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-generator-function": { - "version": "1.1.2", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-interactive": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-map": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-nan": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.0", - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-negative-zero": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-number-object": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-obj": { - "version": "2.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.2.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2", - "hasown": "^2.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-retry-allowed": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-set": { - "version": "2.0.3", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.4", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-stream": { - "version": "2.0.1", - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-string": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "has-symbols": "^1.1.0", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.15", - "license": "MIT", - "dependencies": { - "which-typed-array": "^1.1.16" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-unicode-supported": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/is-weakmap": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakset": { - "version": "2.0.4", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "get-intrinsic": "^1.2.6" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-wsl": { - "version": "2.2.0", - "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/jake": { - "version": "10.9.4", - "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.6", - "filelist": "^1.0.4", - "picocolors": "^1.1.1" - }, - "bin": { - "jake": "bin/cli.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/js-yaml": { - "version": "4.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/puzrin" - }, - { - "type": "github", - "url": "https://github.com/sponsors/nodeca" - } - ], - "license": "MIT", - "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsdom": { - "version": "23.2.0", - "license": "MIT", - "dependencies": { - "@asamuzakjp/dom-selector": "^2.0.1", - "cssstyle": "^4.0.1", - "data-urls": "^5.0.0", - "decimal.js": "^10.4.3", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^4.0.0", - "http-proxy-agent": "^7.0.0", - "https-proxy-agent": "^7.0.2", - "is-potential-custom-element-name": "^1.0.1", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.6.0", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.3", - "w3c-xmlserializer": "^5.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^3.1.1", - "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.16.0", - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - }, - "peerDependencies": { - "canvas": "^2.11.2" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, - "node_modules/jsdom/node_modules/agent-base": { - "version": "7.1.4", - "license": "MIT", - "engines": { - "node": ">= 14" - } - }, - "node_modules/jsdom/node_modules/https-proxy-agent": { - "version": "7.0.6", - "license": "MIT", - "dependencies": { - "agent-base": "^7.1.2", - "debug": "4" - }, - "engines": { - "node": ">= 14" - } - }, - "node_modules/json-buffer": { - "version": "3.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/json-schema-typed": { - "version": "7.0.3", - "license": "BSD-2-Clause" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/jsonfile": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/just-extend": { - "version": "6.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/keyv": { - "version": "4.5.4", - "dev": true, - "license": "MIT", - "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kleur": { - "version": "4.1.5", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/klona": { - "version": "2.0.6", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/kuler": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/levn": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/lightningcss": { - "version": "1.32.0", - "dev": true, - "license": "MPL-2.0", - "dependencies": { - "detect-libc": "^2.0.3" - }, - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - }, - "optionalDependencies": { - "lightningcss-android-arm64": "1.32.0", - "lightningcss-darwin-arm64": "1.32.0", - "lightningcss-darwin-x64": "1.32.0", - "lightningcss-freebsd-x64": "1.32.0", - "lightningcss-linux-arm-gnueabihf": "1.32.0", - "lightningcss-linux-arm64-gnu": "1.32.0", - "lightningcss-linux-arm64-musl": "1.32.0", - "lightningcss-linux-x64-gnu": "1.32.0", - "lightningcss-linux-x64-musl": "1.32.0", - "lightningcss-win32-arm64-msvc": "1.32.0", - "lightningcss-win32-x64-msvc": "1.32.0" - } - }, - "node_modules/lightningcss-darwin-arm64": { - "version": "1.32.0", - "cpu": [ - "arm64" - ], - "dev": true, - "license": "MPL-2.0", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">= 12.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" - } - }, - "node_modules/lilconfig": { - "version": "3.1.3", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/antonk52" - } - }, - "node_modules/localStorage": { - "version": "1.0.4", - "license": "(MIT OR Apache-2.0)", - "engines": { - "node": ">= v0.2.0" - } - }, - "node_modules/locate-path": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^5.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lodash": { - "version": "4.18.1", - "license": "MIT" - }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "license": "MIT" - }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "license": "MIT" - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "license": "MIT" - }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "license": "MIT" - }, - "node_modules/lodash.isundefined": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/log-symbols": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/logform": { - "version": "2.7.0", - "license": "MIT", - "dependencies": { - "@colors/colors": "1.6.0", - "@types/triple-beam": "^1.3.2", - "fecha": "^4.2.0", - "ms": "^2.1.1", - "safe-stable-stringify": "^2.3.1", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/loupe": { - "version": "2.3.7", - "dev": true, - "license": "MIT", - "dependencies": { - "get-func-name": "^2.0.1" - } - }, - "node_modules/lower-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/lowercase-keys": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/lru-cache": { - "version": "10.4.3", - "license": "ISC" - }, - "node_modules/magic-string": { - "version": "0.30.21", - "dev": true, - "license": "MIT", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.5.5" - } - }, - "node_modules/math-intrinsics": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/mdn-data": { - "version": "2.0.30", - "license": "CC0-1.0" - }, - "node_modules/merge2": { - "version": "1.4.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.8", - "dev": true, - "license": "MIT", - "dependencies": { - "braces": "^3.0.3", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", - "dependencies": { - "mime-db": "1.52.0" - }, - "engines": { - "node": ">= 0.6" - } - }, - "node_modules/mimic-fn": { - "version": "3.1.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/mimic-response": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/minimatch": { - "version": "10.2.5", - "license": "BlueOak-1.0.0", - "dependencies": { - "brace-expansion": "^5.0.5" - }, - "engines": { - "node": "18 || 20 || >=22" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/mixme": { - "version": "0.5.10", - "license": "MIT", - "engines": { - "node": ">= 8.0.0" - } - }, - "node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/mock-stdin": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/ms": { - "version": "2.1.3", - "license": "MIT" - }, - "node_modules/mute-stream": { - "version": "0.0.8", - "license": "ISC" - }, - "node_modules/nanoid": { - "version": "3.3.12", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-orderby": { - "version": "2.0.3", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/nise": { - "version": "5.1.9", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^11.2.2", - "@sinonjs/text-encoding": "^0.7.2", - "just-extend": "^6.2.0", - "path-to-regexp": "^6.2.1" - } - }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "11.3.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.1" - } - }, - "node_modules/no-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "lower-case": "^2.0.2", - "tslib": "^2.0.3" - } - }, - "node_modules/nock": { - "version": "13.5.6", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" - }, - "engines": { - "node": ">= 10.13" - } - }, - "node_modules/normalize-package-data": { - "version": "6.0.2", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^7.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" - }, - "engines": { - "node": "^16.14.0 || >=18.0.0" - } - }, - "node_modules/normalize-url": { - "version": "8.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/object-inspect": { - "version": "1.13.4", - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-is": { - "version": "1.1.6", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object-treeify": { - "version": "1.1.33", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, - "node_modules/object.assign": { - "version": "4.1.7", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/obug": { - "version": "2.1.2", - "dev": true, - "funding": [ - "https://github.com/sponsors/sxzz", - "https://opencollective.com/debug" - ], - "license": "MIT", - "engines": { - "node": ">=12.20.0" - } - }, - "node_modules/oclif": { - "version": "4.23.14", - "dev": true, - "license": "MIT", - "dependencies": { - "@aws-sdk/client-cloudfront": "^3.1009.0", - "@aws-sdk/client-s3": "^3.1063.0", - "@inquirer/confirm": "^3.1.22", - "@inquirer/input": "^2.2.4", - "@inquirer/select": "^2.5.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.50", - "@oclif/plugin-not-found": "^3.2.87", - "@oclif/plugin-warn-if-update-available": "^3.1.65", - "ansis": "^3.16.0", - "async-retry": "^1.3.3", - "change-case": "^4", - "debug": "^4.4.0", - "ejs": "^3.1.10", - "find-yarn-workspace-root": "^2.0.0", - "fs-extra": "^8.1", - "github-slugger": "^2", - "got": "^13", - "normalize-package-data": "^6", - "semver": "^7.8.2", - "tiny-jsonc": "^1.0.2", - "validate-npm-package-name": "^5.0.1" - }, - "bin": { - "oclif": "bin/run.js" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "node_modules/once": { - "version": "1.4.0", - "dev": true, - "license": "ISC", - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/one-time": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "fn.name": "1.x.x" - } - }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/open": { - "version": "8.4.2", - "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/optionator": { - "version": "0.9.4", - "dev": true, - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/optionator/node_modules/fast-levenshtein": { - "version": "2.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/ora": { - "version": "5.4.1", - "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/otplib": { - "version": "12.0.1", - "license": "MIT", - "dependencies": { - "@otplib/core": "^12.0.1", - "@otplib/preset-default": "^12.0.1", - "@otplib/preset-v11": "^12.0.1" - } - }, - "node_modules/own-keys": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.6", - "object-keys": "^1.1.1", - "safe-push-apply": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-try": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/papaparse": { - "version": "5.5.3", - "license": "MIT" - }, - "node_modules/param-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/parse-json": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/parse5": { - "version": "7.3.0", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/pascal-case": { - "version": "3.1.2", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/password-prompt": { - "version": "1.1.3", - "dev": true, - "license": "0BSD", - "dependencies": { - "ansi-escapes": "^4.3.2", - "cross-spawn": "^7.0.3" - } - }, - "node_modules/path-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/path-exists": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-expression-matcher": { - "version": "1.5.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/path-key": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/path-to-regexp": { - "version": "6.3.0", - "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/pathe": { - "version": "2.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/picocolors": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/pkg-up": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "find-up": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-up/node_modules/find-up": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "locate-path": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/locate-path": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^3.0.0", - "path-exists": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-up/node_modules/p-locate": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/pkg-up/node_modules/path-exists": { - "version": "3.0.0", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/pnpm": { - "version": "10.34.1", - "resolved": "https://registry.npmjs.org/pnpm/-/pnpm-10.34.1.tgz", - "integrity": "sha512-tY+95tymapKVOAIVgfZItFcLbKGbGOfL1/LAenskRUFVOI2s3wjyrzZ46IptH+BPnWCd8kv1FzWgYOoEGzdKtw==", - "dev": true, - "license": "MIT", - "bin": { - "pnpm": "bin/pnpm.cjs", - "pnpx": "bin/pnpx.cjs" - }, - "engines": { - "node": ">=18.12" - }, - "funding": { - "url": "https://opencollective.com/pnpm" - } - }, - "node_modules/possible-typed-array-names": { - "version": "1.1.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/postcss": { - "version": "8.5.15", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "dependencies": { - "nanoid": "^3.3.12", - "picocolors": "^1.1.1", - "source-map-js": "^1.2.1" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/prelude-ls": { - "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/propagate": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/proto-list": { - "version": "1.2.4", - "dev": true, - "license": "ISC" - }, - "node_modules/proxy-from-env": { - "version": "2.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/psl": { - "version": "1.15.0", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, - "node_modules/punycode": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/qs": { - "version": "6.15.2", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.1.0" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/querystringify": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/quick-lru": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/recheck": { - "version": "4.4.5", - "license": "MIT", - "engines": { - "node": ">=14" - }, - "optionalDependencies": { - "recheck-jar": "4.4.5", - "recheck-linux-x64": "4.4.5", - "recheck-macos-x64": "4.4.5", - "recheck-windows-x64": "4.4.5" - } - }, - "node_modules/recheck-jar": { - "version": "4.4.5", - "license": "MIT", - "optional": true - }, - "node_modules/redeyed": { - "version": "2.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "esprima": "~4.0.0" - } - }, - "node_modules/reflect.getprototypeof": { - "version": "1.0.10", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.4", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/registry-auth-token": { - "version": "5.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "@pnpm/npm-conf": "^3.0.2" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-from-string": { - "version": "2.0.2", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/requires-port": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "dev": true, - "license": "MIT" - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/responselike": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/restore-cursor": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/restore-cursor/node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/retry": { - "version": "0.13.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/reusify": { - "version": "1.1.0", - "dev": true, - "license": "MIT", - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/rolldown": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "@oxc-project/types": "=0.133.0", - "@rolldown/pluginutils": "^1.0.0" - }, - "bin": { - "rolldown": "bin/cli.mjs" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "optionalDependencies": { - "@rolldown/binding-android-arm64": "1.0.3", - "@rolldown/binding-darwin-arm64": "1.0.3", - "@rolldown/binding-darwin-x64": "1.0.3", - "@rolldown/binding-freebsd-x64": "1.0.3", - "@rolldown/binding-linux-arm-gnueabihf": "1.0.3", - "@rolldown/binding-linux-arm64-gnu": "1.0.3", - "@rolldown/binding-linux-arm64-musl": "1.0.3", - "@rolldown/binding-linux-ppc64-gnu": "1.0.3", - "@rolldown/binding-linux-s390x-gnu": "1.0.3", - "@rolldown/binding-linux-x64-gnu": "1.0.3", - "@rolldown/binding-linux-x64-musl": "1.0.3", - "@rolldown/binding-openharmony-arm64": "1.0.3", - "@rolldown/binding-wasm32-wasi": "1.0.3", - "@rolldown/binding-win32-arm64-msvc": "1.0.3", - "@rolldown/binding-win32-x64-msvc": "1.0.3" - } - }, - "node_modules/rrweb-cssom": { - "version": "0.6.0", - "license": "MIT" - }, - "node_modules/run-async": { - "version": "2.4.1", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT", - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/rx-lite": { - "version": "4.0.8" - }, - "node_modules/rx-lite-aggregates": { - "version": "4.0.8", - "dependencies": { - "rx-lite": "*" - } - }, - "node_modules/rxjs": { - "version": "6.6.7", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^1.9.0" - }, - "engines": { - "npm": ">=2.0.0" - } - }, - "node_modules/rxjs/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" - }, - "node_modules/safe-array-concat": { - "version": "1.1.4", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "get-intrinsic": "^1.3.0", - "has-symbols": "^1.1.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, - "node_modules/safe-push-apply": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "is-regex": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-stable-stringify": { - "version": "2.5.0", - "license": "MIT", - "engines": { - "node": ">=10" - } - }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/saxes": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, - "node_modules/semver": { - "version": "7.8.4", - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sentence-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "no-case": "^3.0.4", - "tslib": "^2.0.3", - "upper-case-first": "^2.0.2" - } - }, - "node_modules/set-blocking": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.2.2", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "define-data-property": "^1.1.4", - "es-errors": "^1.3.0", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-proto": { - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "dunder-proto": "^1.0.1", - "es-errors": "^1.3.0", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/shebang-command": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/shebang-regex": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/short-uuid": { - "version": "6.0.3", - "license": "MIT", - "dependencies": { - "any-base": "^1.1.0" - }, - "engines": { - "node": ">=14.17.0" - } - }, - "node_modules/side-channel": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4", - "side-channel-list": "^1.0.1", - "side-channel-map": "^1.0.1", - "side-channel-weakmap": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-list": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "object-inspect": "^1.13.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-map": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.2", - "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.5", - "object-inspect": "^1.13.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/side-channel-weakmap": { - "version": "1.0.2", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/siginfo": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "4.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.4", - "dev": true, - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/simple-swizzle/node_modules/is-arrayish": { - "version": "0.3.4", - "dev": true, - "license": "MIT" - }, - "node_modules/sinon": { - "version": "16.1.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0", - "@sinonjs/fake-timers": "^10.3.0", - "@sinonjs/samsam": "^8.0.0", - "diff": "^5.1.0", - "nise": "^5.1.4", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" - } - }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/slash": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/slate": { - "version": "0.103.0", - "license": "MIT", - "dependencies": { - "immer": "^10.0.3", - "is-plain-object": "^5.0.0", - "tiny-warning": "^1.0.3" - } - }, - "node_modules/slice-ansi": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "astral-regex": "^2.0.0", - "is-fullwidth-code-point": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" - } - }, - "node_modules/smartwrap": { - "version": "2.0.2", - "license": "MIT", - "dependencies": { - "array.prototype.flat": "^1.2.3", - "breakword": "^1.0.5", - "grapheme-splitter": "^1.0.4", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1", - "yargs": "^15.1.0" - }, - "bin": { - "smartwrap": "src/terminal-adapter.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/smartwrap/node_modules/cliui": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/smartwrap/node_modules/find-up": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/locate-path": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/p-limit": { - "version": "2.3.0", - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/smartwrap/node_modules/p-locate": { - "version": "4.1.0", - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/wrap-ansi": { - "version": "6.2.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/y18n": { - "version": "4.0.3", - "license": "ISC" - }, - "node_modules/smartwrap/node_modules/yargs": { - "version": "15.4.1", - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/smartwrap/node_modules/yargs-parser": { - "version": "18.1.3", - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/snake-case": { - "version": "3.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "dot-case": "^3.0.4", - "tslib": "^2.0.3" - } - }, - "node_modules/source-map-js": { - "version": "1.2.1", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.5.0", - "dev": true, - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-license-ids": { - "version": "3.0.23", - "dev": true, - "license": "CC0-1.0" - }, - "node_modules/sprintf-js": { - "version": "1.0.3", - "dev": true, - "license": "BSD-3-Clause" - }, - "node_modules/stack-trace": { - "version": "0.0.10", - "license": "MIT", - "engines": { - "node": "*" - } - }, - "node_modules/stackback": { - "version": "0.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/std-env": { - "version": "4.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/stdout-stderr": { - "version": "0.1.13", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^4.1.1", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/stop-iteration-iterator": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "es-errors": "^1.3.0", - "internal-slot": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/stream-browserify": { - "version": "3.0.0", - "license": "MIT", - "dependencies": { - "inherits": "~2.0.4", - "readable-stream": "^3.5.0" - } - }, - "node_modules/stream-transform": { - "version": "2.1.3", - "license": "MIT", - "dependencies": { - "mixme": "^0.5.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/string.prototype.trim": { - "version": "1.2.11", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-data-property": "^1.1.4", - "define-properties": "^1.2.1", - "es-abstract": "^1.24.2", - "es-object-atoms": "^1.1.2", - "has-property-descriptors": "^1.0.2", - "safe-regex-test": "^1.1.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.10", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.1.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.7", - "define-properties": "^1.2.1", - "es-object-atoms": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/strnum": { - "version": "2.4.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "dependencies": { - "anynum": "^1.0.0" - } - }, - "node_modules/supports-color": { - "version": "8.1.1", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" - } - }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "license": "MIT" - }, - "node_modules/text-hex": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/thirty-two": { - "version": "1.0.2", - "engines": { - "node": ">=0.2.6" - } - }, - "node_modules/through": { - "version": "2.3.8", - "license": "MIT" - }, - "node_modules/tiny-jsonc": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/tinybench": { - "version": "2.9.0", - "dev": true, - "license": "MIT" - }, - "node_modules/tinyexec": { - "version": "1.2.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/tinyglobby": { - "version": "0.2.17", - "license": "MIT", - "dependencies": { - "fdir": "^6.5.0", - "picomatch": "^4.0.4" - }, - "engines": { - "node": ">=12.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/SuperchupuDev" - } - }, - "node_modules/tinyglobby/node_modules/fdir": { - "version": "6.5.0", - "license": "MIT", - "engines": { - "node": ">=12.0.0" - }, - "peerDependencies": { - "picomatch": "^3 || ^4" - }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } - } - }, - "node_modules/tinyglobby/node_modules/picomatch": { - "version": "4.0.4", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/tinyrainbow": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/tmp": { - "version": "0.0.33", - "license": "MIT", - "dependencies": { - "os-tmpdir": "~1.0.2" - }, - "engines": { - "node": ">=0.6.0" - } - }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-number": "^7.0.0" - }, - "engines": { - "node": ">=8.0" - } - }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "license": "BSD-3-Clause", - "dependencies": { - "psl": "^1.1.33", - "punycode": "^2.1.1", - "universalify": "^0.2.0", - "url-parse": "^1.5.3" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/tough-cookie/node_modules/universalify": { - "version": "0.2.0", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/tr46": { - "version": "5.1.1", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/traverse": { - "version": "0.6.11", - "license": "MIT", - "dependencies": { - "gopd": "^1.2.0", - "typedarray.prototype.slice": "^1.0.5", - "which-typed-array": "^1.1.18" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/triple-beam": { - "version": "1.4.1", - "license": "MIT", - "engines": { - "node": ">= 14.0.0" - } - }, - "node_modules/ts-api-utils": { - "version": "1.4.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=16" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, - "node_modules/tslib": { - "version": "2.8.1", - "license": "0BSD" - }, - "node_modules/tty-table": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.2", - "csv": "^5.5.3", - "kleur": "^4.1.5", - "smartwrap": "^2.0.2", - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.1", - "yargs": "^17.7.1" - }, - "bin": { - "tty-table": "adapters/terminal-adapter.js" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "safe-buffer": "^5.0.1" - }, - "engines": { - "node": "*" - } - }, - "node_modules/type-check": { - "version": "0.4.0", - "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1" - }, - "engines": { - "node": ">= 0.8.0" - } - }, - "node_modules/type-detect": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/type-fest": { - "version": "0.21.3", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/typed-array-buffer": { - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-typed-array": "^1.1.14" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.3", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.4", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.9", - "for-each": "^0.3.5", - "gopd": "^1.2.0", - "is-typed-array": "^1.1.15", - "possible-typed-array-names": "^1.1.0", - "reflect.getprototypeof": "^1.0.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray.prototype.slice": { - "version": "1.0.5", - "license": "MIT", - "dependencies": { - "call-bind": "^1.0.8", - "define-properties": "^1.2.1", - "es-abstract": "^1.23.9", - "es-errors": "^1.3.0", - "get-proto": "^1.0.1", - "math-intrinsics": "^1.1.0", - "typed-array-buffer": "^1.0.3", - "typed-array-byte-offset": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typescript": { - "version": "5.9.3", - "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=14.17" - } - }, - "node_modules/unbox-primitive": { - "version": "1.1.0", - "license": "MIT", - "dependencies": { - "call-bound": "^1.0.3", - "has-bigints": "^1.0.2", - "has-symbols": "^1.1.0", - "which-boxed-primitive": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/undici-types": { - "version": "6.21.0", - "devOptional": true, - "license": "MIT" - }, - "node_modules/unique-string": { - "version": "2.0.0", - "license": "MIT", - "dependencies": { - "crypto-random-string": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/universalify": { - "version": "0.1.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/upper-case": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/upper-case-first": { - "version": "2.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "tslib": "^2.0.3" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" - } - }, - "node_modules/url-parse": { - "version": "1.5.10", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, - "node_modules/util": { - "version": "0.12.5", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" - } - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "14.0.0", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], - "license": "MIT", - "bin": { - "uuid": "dist-node/bin/uuid" - } - }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "node_modules/validate-npm-package-name": { - "version": "5.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, - "node_modules/vite": { - "version": "8.0.16", - "dev": true, - "license": "MIT", - "dependencies": { - "lightningcss": "^1.32.0", - "picomatch": "^4.0.4", - "postcss": "^8.5.15", - "rolldown": "1.0.3", - "tinyglobby": "^0.2.17" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^20.19.0 || >=22.12.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^20.19.0 || >=22.12.0", - "@vitejs/devtools": "^0.1.18", - "esbuild": "^0.27.0 || ^0.28.0", - "jiti": ">=1.21.0", - "less": "^4.0.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" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "@vitejs/devtools": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "jiti": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - }, - "tsx": { - "optional": true - }, - "yaml": { - "optional": true - } - } - }, - "node_modules/vite/node_modules/picomatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/vitest": { - "version": "4.1.8", - "dev": true, - "license": "MIT", - "dependencies": { - "@vitest/expect": "4.1.8", - "@vitest/mocker": "4.1.8", - "@vitest/pretty-format": "4.1.8", - "@vitest/runner": "4.1.8", - "@vitest/snapshot": "4.1.8", - "@vitest/spy": "4.1.8", - "@vitest/utils": "4.1.8", - "es-module-lexer": "^2.0.0", - "expect-type": "^1.3.0", - "magic-string": "^0.30.21", - "obug": "^2.1.1", - "pathe": "^2.0.3", - "picomatch": "^4.0.3", - "std-env": "^4.0.0-rc.1", - "tinybench": "^2.9.0", - "tinyexec": "^1.0.2", - "tinyglobby": "^0.2.15", - "tinyrainbow": "^3.1.0", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0", - "why-is-node-running": "^2.3.0" - }, - "bin": { - "vitest": "vitest.mjs" - }, - "engines": { - "node": "^20.0.0 || ^22.0.0 || >=24.0.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@opentelemetry/api": "^1.9.0", - "@types/node": "^20.0.0 || ^22.0.0 || >=24.0.0", - "@vitest/browser-playwright": "4.1.8", - "@vitest/browser-preview": "4.1.8", - "@vitest/browser-webdriverio": "4.1.8", - "@vitest/coverage-istanbul": "4.1.8", - "@vitest/coverage-v8": "4.1.8", - "@vitest/ui": "4.1.8", - "happy-dom": "*", - "jsdom": "*", - "vite": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@opentelemetry/api": { - "optional": true - }, - "@types/node": { - "optional": true - }, - "@vitest/browser-playwright": { - "optional": true - }, - "@vitest/browser-preview": { - "optional": true - }, - "@vitest/browser-webdriverio": { - "optional": true - }, - "@vitest/coverage-istanbul": { - "optional": true - }, - "@vitest/coverage-v8": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "vite": { - "optional": false - } - } - }, - "node_modules/vitest/node_modules/picomatch": { - "version": "4.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "xml-name-validator": "^5.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/wcwidth": { - "version": "1.0.1", - "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" - } - }, - "node_modules/webidl-conversions": { - "version": "7.0.0", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "3.1.1", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=18" - } - }, - "node_modules/whatwg-url": { - "version": "14.2.0", - "license": "MIT", - "dependencies": { - "tr46": "^5.1.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/which": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/which-boxed-primitive": { - "version": "1.1.1", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-builtin-type": { - "version": "1.2.1", - "license": "MIT", - "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" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-collection": { - "version": "1.0.2", - "license": "MIT", - "dependencies": { - "is-map": "^2.0.3", - "is-set": "^2.0.3", - "is-weakmap": "^2.0.2", - "is-weakset": "^2.0.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-module": { - "version": "2.0.1", - "license": "ISC" - }, - "node_modules/which-typed-array": { - "version": "1.1.22", - "license": "MIT", - "dependencies": { - "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.9", - "call-bound": "^1.0.4", - "for-each": "^0.3.5", - "get-proto": "^1.0.1", - "gopd": "^1.2.0", - "has-tostringtag": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/why-is-node-running": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/widest-line": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "string-width": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/winston": { - "version": "3.19.0", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@dabh/diagnostics": "^2.0.8", - "async": "^3.2.3", - "is-stream": "^2.0.0", - "logform": "^2.7.0", - "one-time": "^1.0.0", - "readable-stream": "^3.4.0", - "safe-stable-stringify": "^2.3.1", - "stack-trace": "0.0.x", - "triple-beam": "^1.3.0", - "winston-transport": "^4.9.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/winston-transport": { - "version": "4.9.0", - "license": "MIT", - "dependencies": { - "logform": "^2.7.0", - "readable-stream": "^3.6.2", - "triple-beam": "^1.3.0" - }, - "engines": { - "node": ">= 12.0.0" - } - }, - "node_modules/word-wrap": { - "version": "1.2.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/wordwrap": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "dev": true, - "license": "ISC" - }, - "node_modules/ws": { - "version": "8.21.0", - "license": "MIT", - "engines": { - "node": ">=10.0.0" - }, - "peerDependencies": { - "bufferutil": "^4.0.1", - "utf-8-validate": ">=5.0.2" - }, - "peerDependenciesMeta": { - "bufferutil": { - "optional": true - }, - "utf-8-validate": { - "optional": true - } - } - }, - "node_modules/xdg-basedir": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/xml-name-validator": { - "version": "5.0.0", - "license": "Apache-2.0", - "engines": { - "node": ">=18" - } - }, - "node_modules/xml-naming": { - "version": "0.1.0", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/NaturalIntelligence" - } - ], - "license": "MIT", - "engines": { - "node": ">=16.0.0" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "license": "MIT" - }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", - "engines": { - "node": ">=10" - } - }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "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" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", - "engines": { - "node": ">=12" - } - }, - "node_modules/yocto-queue": { - "version": "0.1.0", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/yoctocolors-cjs": { - "version": "2.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/contentstack-apps-cli": { - "name": "@contentstack/apps-cli", - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "@apollo/client": "^3.14.1", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-launch": "^1.10.0", - "@contentstack/cli-utilities": "~1.18.4", - "adm-zip": "^0.5.17", - "chalk": "^4.1.2", - "lodash": "^4.18.1", - "shelljs": "^0.10.0", - "tmp": "^0.2.7", - "winston": "^3.19.0" - }, - "bin": { - "app": "bin/run" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/adm-zip": "^0.5.8", - "@types/chai": "^4.3.20", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^20.19.41", - "@types/shelljs": "^0.10.0", - "@types/tmp": "^0.2.6", - "@typescript-eslint/eslint-plugin": "^8.58.2", - "@typescript-eslint/parser": "^8.58.2", - "axios": "^1.16.1", - "chai": "^4.5.0", - "dotenv": "^16.6.1", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.157", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "shx": "^0.4.0", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "typescript": "^5.9.3" - }, - "engines": { - "node": ">=16" - } - }, - "packages/contentstack-apps-cli/node_modules/@apollo/client": { - "resolved": "../node_modules/.pnpm/@apollo+client@3.14.1_graphql@16.13.0/node_modules/@apollo/client", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@contentstack/cli-launch": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-launch@1.10.1_@types+node@20.19.42_tslib@2.8.1_typescript@5.9.3/node_modules/@contentstack/cli-launch", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/adm-zip": { - "resolved": "../node_modules/.pnpm/@types+adm-zip@0.5.8/node_modules/@types/adm-zip", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/lodash": { - "resolved": "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/shelljs": { - "resolved": "../node_modules/.pnpm/@types+shelljs@0.10.0/node_modules/@types/shelljs", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@types/tmp": { - "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/@typescript-eslint/parser": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/adm-zip": { - "resolved": "../node_modules/.pnpm/adm-zip@0.5.17/node_modules/adm-zip", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/axios": { - "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/shelljs": { - "resolved": "../node_modules/.pnpm/shelljs@0.10.0/node_modules/shelljs", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/shx": { - "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/tmp": { - "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@5.9.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/tslib": { - "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-apps-cli/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-audit": { - "name": "@contentstack/cli-audit", - "version": "1.19.4", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "chalk": "^4.1.2", - "fast-csv": "^4.3.6", - "fs-extra": "^11.3.0", - "lodash": "^4.18.1", - "winston": "^3.19.0" - }, - "bin": { - "audit": "bin/run.js" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/fs-extra": "^11.0.4", - "@types/mocha": "^10.0.10", - "@types/node": "^20.17.50", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.17.46", - "shx": "^0.4.0", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=16" - } - }, - "packages/contentstack-audit/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-audit/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-audit/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-audit/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-audit/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-audit/node_modules/@types/fs-extra": { - "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", - "link": true - }, - "packages/contentstack-audit/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-audit/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node", - "link": true - }, - "packages/contentstack-audit/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-audit/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-audit/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-audit/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-audit/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-audit/node_modules/fast-csv": { - "resolved": "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv", - "link": true - }, - "packages/contentstack-audit/node_modules/fs-extra": { - "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", - "link": true - }, - "packages/contentstack-audit/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-audit/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-audit/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-audit/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@20.19.35/node_modules/oclif", - "link": true - }, - "packages/contentstack-audit/node_modules/shx": { - "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", - "link": true - }, - "packages/contentstack-audit/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", - "link": true - }, - "packages/contentstack-audit/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-audit/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-audit/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-bootstrap": { - "name": "@contentstack/cli-cm-bootstrap", - "version": "1.19.6", - "license": "MIT", - "dependencies": { - "@contentstack/cli-cm-seed": "~1.15.6", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-config": "~1.20.4", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "inquirer": "8.2.7", - "mkdirp": "^2.1.6", - "tar": "^7.5.11" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/inquirer": "^9.0.8", - "@types/mkdirp": "^1.0.2", - "@types/node": "^14.18.63", - "@types/tar": "^6.1.13", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.17.46", - "tmp": "^0.2.7", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-bootstrap/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@contentstack/cli-config": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@14.18.63/node_modules/@contentstack/cli-config", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@types/inquirer": { - "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/@types/tar": { - "resolved": "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@2.1.6/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/tar": { - "resolved": "../node_modules/.pnpm/tar@7.5.11/node_modules/tar", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/tmp": { - "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", - "link": true - }, - "packages/contentstack-bootstrap/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-branches": { - "name": "@contentstack/cli-cm-branches", - "version": "1.8.2", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "chalk": "^4.1.2", - "just-diff": "^6.0.2", - "lodash": "^4.18.1" - }, - "devDependencies": { - "chai": "^4.5.0", - "dotenv": "^16.5.0", - "dotenv-expand": "^9.0.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.17.46", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-branches/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-branches/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-branches/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-branches/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-branches/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-branches/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-branches/node_modules/dotenv-expand": { - "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", - "link": true - }, - "packages/contentstack-branches/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-branches/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-branches/node_modules/just-diff": { - "resolved": "../node_modules/.pnpm/just-diff@6.0.2/node_modules/just-diff", - "link": true - }, - "packages/contentstack-branches/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-branches/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-branches/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-branches/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.22.81_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-branches/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", - "link": true - }, - "packages/contentstack-branches/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-branches/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-bulk-operations": { - "name": "@contentstack/cli-bulk-operations", - "version": "1.2.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/delivery-sdk": "^5.2.1", - "@contentstack/management": "^1.30.3", - "lodash": "^4.18.1", - "uuid": "^14.0.0" - }, - "bin": { - "bulk": "bin/run.js" - }, - "devDependencies": { - "@eslint/eslintrc": "^3.3.1", - "@types/chai": "^5.2.3", - "@types/lodash": "^4.17.24", - "@types/mocha": "^10.0.10", - "@types/node": "^20.19.0", - "@types/sinon": "^21.0.1", - "@typescript-eslint/eslint-plugin": "^8.59.2", - "@typescript-eslint/parser": "^8.59.2", - "chai": "^6.2.2", - "conventional-changelog-cli": "^5.0.0", - "dotenv": "^17.4.2", - "eslint": "^10.3.0", - "eslint-config-oclif": "^6.0.162", - "eslint-config-oclif-typescript": "^3.1.14", - "eslint-config-prettier": "^10.1.8", - "eslint-plugin-prettier": "^5.5.5", - "husky": "^9.1.7", - "lint-staged": "^17.0.2", - "mocha": "^11.7.5", - "nyc": "^18.0.0", - "oclif": "^4.23.8", - "prettier": "^3.8.3", - "shx": "^0.4.0", - "sinon": "^22.0.0", - "ts-node": "^10.9.2", - "tslib": "^2.8.1", - "typescript": "~6.0.3" - }, - "engines": { - "node": ">=20.19.0" - } - }, - "packages/contentstack-bulk-operations/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.42/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.42/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@contentstack/delivery-sdk": { - "resolved": "../node_modules/.pnpm/@contentstack+delivery-sdk@5.2.1/node_modules/@contentstack/delivery-sdk", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@contentstack/management": { - "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@eslint/eslintrc": { - "resolved": "../node_modules/.pnpm/@eslint+eslintrc@3.3.5/node_modules/@eslint/eslintrc", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@5.2.3/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@types/lodash": { - "resolved": "../node_modules/.pnpm/@types+lodash@4.17.24/node_modules/@types/lodash", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.42/node_modules/@types/node", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@21.0.1/node_modules/@types/sinon", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@10.4.1__e3ba3d274f8f3b210d1198e9e5c2531c/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/@typescript-eslint/parser": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@10.4.1_typescript@6.0.3/node_modules/@typescript-eslint/parser", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@6.2.2/node_modules/chai", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/conventional-changelog-cli": { - "resolved": "../node_modules/.pnpm/conventional-changelog-cli@5.0.0_conventional-commits-filter@5.0.0/node_modules/conventional-changelog-cli", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@17.4.2/node_modules/dotenv", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@10.4.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@10.4.1_typescript@6.0.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/eslint-config-prettier": { - "resolved": "../node_modules/.pnpm/eslint-config-prettier@10.1.8_eslint@10.4.1/node_modules/eslint-config-prettier", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/eslint-plugin-prettier": { - "resolved": "../node_modules/.pnpm/eslint-plugin-prettier@5.5.6_eslint-config-prettier@10.1.8_eslint@10.4.1__eslint@10.4.1_prettier@3.8.3/node_modules/eslint-plugin-prettier", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/husky": { - "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/lint-staged": { - "resolved": "../node_modules/.pnpm/lint-staged@17.0.7/node_modules/lint-staged", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@11.7.6/node_modules/mocha", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@18.0.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.42/node_modules/oclif", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/prettier": { - "resolved": "../node_modules/.pnpm/prettier@3.8.3/node_modules/prettier", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/shx": { - "resolved": "../node_modules/.pnpm/shx@0.4.0/node_modules/shx", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@22.0.0/node_modules/sinon", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.42_typescript@6.0.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/tslib": { - "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@6.0.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-bulk-operations/node_modules/uuid": { - "resolved": "../node_modules/.pnpm/uuid@14.0.0/node_modules/uuid", - "link": true - }, - "packages/contentstack-bulk-publish": { - "name": "@contentstack/cli-cm-bulk-publish", - "version": "1.12.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-config": "~1.20.4", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "chalk": "^4.1.2", - "dotenv": "^16.6.1", - "inquirer": "8.2.7", - "lodash": "^4.18.1", - "winston": "^3.19.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-config": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-config@1.20.4_@types+node@22.19.20/node_modules/@contentstack/cli-config", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@9.39.3_typescript@6.0.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@22.19.20/node_modules/inquirer", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-bulk-publish/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate": { - "name": "@contentstack/cli-cm-regex-validate", - "version": "1.0.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "^1.8.3", - "@contentstack/cli-utilities": "^1.18.4", - "@contentstack/management": "^1.30.3", - "cli-table3": "^0.6.5", - "cli-ux": "^6.0.9", - "inquirer": "12.11.1", - "jest": "^30.4.2", - "jsonexport": "^3.2.0", - "safe-regex": "^2.1.1", - "tslib": "^2.8.1" - }, - "devDependencies": { - "@babel/preset-env": "^7.29.5", - "@oclif/plugin-help": "^6.2.49", - "@oclif/test": "^3.2.15", - "@types/chai": "^4.3.20", - "@types/jest": "^30.0.0", - "@types/jsonexport": "^3.0.5", - "@types/mocha": "^10.0.10", - "@types/node": "^18.19.130", - "@types/safe-regex": "^1.1.6", - "@typescript-eslint/eslint-plugin": "^8.59.2", - "chai": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-oclif": "^4.0.0", - "eslint-config-oclif-typescript": "^1.0.3", - "eslint-plugin-unicorn": "^48.0.1", - "globby": "^11.1.0", - "husky": "^9.1.7", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "ts-jest": "^29.4.9", - "ts-node": "^10.9.2", - "typescript": "^5.9.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@babel/preset-env": { - "resolved": "../node_modules/.pnpm/@babel+preset-env@7.29.7_@babel+core@7.29.0/node_modules/@babel/preset-env", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@18.19.130/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@18.19.130/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@contentstack/management": { - "resolved": "../node_modules/.pnpm/@contentstack+management@1.30.3_debug@4.4.3/node_modules/@contentstack/management", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@3.2.15/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/jest": { - "resolved": "../node_modules/.pnpm/@types+jest@30.0.0/node_modules/@types/jest", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/jsonexport": { - "resolved": "../node_modules/.pnpm/@types+jsonexport@3.0.5/node_modules/@types/jsonexport", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@18.19.130/node_modules/@types/node", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@types/safe-regex": { - "resolved": "../node_modules/.pnpm/@types+safe-regex@1.1.6/node_modules/@types/safe-regex", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/cli-table3": { - "resolved": "../node_modules/.pnpm/cli-table3@0.6.5/node_modules/cli-table3", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/cli-ux": { - "resolved": "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@4.0.0_eslint@8.57.1/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@1.0.3_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/eslint-plugin-unicorn": { - "resolved": "../node_modules/.pnpm/eslint-plugin-unicorn@48.0.1_eslint@8.57.1/node_modules/eslint-plugin-unicorn", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/globby": { - "resolved": "../node_modules/.pnpm/globby@11.1.0/node_modules/globby", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/husky": { - "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@12.11.1_@types+node@18.19.130/node_modules/inquirer", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/jest": { - "resolved": "../node_modules/.pnpm/jest@30.4.2_@types+node@18.19.130_ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3_/node_modules/jest", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/jsonexport": { - "resolved": "../node_modules/.pnpm/jsonexport@3.2.0/node_modules/jsonexport", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@18.19.130/node_modules/oclif", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/safe-regex": { - "resolved": "../node_modules/.pnpm/safe-regex@2.1.1/node_modules/safe-regex", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/ts-jest": { - "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_91e8a29d7054379dc014cfca91cefdc3/node_modules/ts-jest", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@18.19.130_typescript@5.9.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/tslib": { - "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", - "link": true - }, - "packages/contentstack-cli-cm-regex-validate/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-cli-tsgen": { - "version": "4.10.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/types-generator": "^3.10.1" - }, - "devDependencies": { - "@oclif/plugin-help": "^6.2.49", - "@oclif/test": "^4.1.18", - "@types/jest": "^29.5.14", - "@types/node": "^22.19.19", - "@typescript-eslint/eslint-plugin": "^8.59.3", - "@typescript-eslint/parser": "^8.59.3", - "dotenv": "^16.6.1", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.165", - "eslint-config-oclif-typescript": "^3.1.14", - "jest": "^29.7.0", - "oclif": "^4.23.8", - "ts-jest": "^29.4.9", - "typescript": "^5.9.3" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-cli-tsgen/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@contentstack/types-generator": { - "resolved": "../node_modules/.pnpm/@contentstack+types-generator@3.10.1_graphql@16.13.0/node_modules/@contentstack/types-generator", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@types/jest": { - "resolved": "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@8.61.0_@typescript-eslint+parser@8.61.0_eslint@8.57.1__d0aa45c7517acbef05ec46716cdfd681/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/@typescript-eslint/parser": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+parser@8.61.0_eslint@8.57.1_typescript@5.9.3/node_modules/@typescript-eslint/parser", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/jest": { - "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@5.9.3_/node_modules/jest", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/ts-jest": { - "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_c6f142628921a6aa1de38c975c7e1f3d/node_modules/ts-jest", - "link": true - }, - "packages/contentstack-cli-tsgen/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-clone": { - "name": "@contentstack/cli-cm-clone", - "version": "1.21.7", - "license": "MIT", - "dependencies": { - "@colors/colors": "^1.6.0", - "@contentstack/cli-cm-export": "~1.25.1", - "@contentstack/cli-cm-import": "~1.33.3", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "chalk": "^4.1.2", - "inquirer": "8.2.7", - "lodash": "^4.18.1", - "merge": "^2.1.1", - "ora": "^5.4.1", - "prompt": "^1.3.0", - "rimraf": "^6.1.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.0", - "@types/mocha": "^10.0.0", - "@types/node": "^14.18.63", - "@types/sinon": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^21.0.1", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-clone/node_modules/@colors/colors": { - "resolved": "../node_modules/.pnpm/@colors+colors@1.6.0/node_modules/@colors/colors", - "link": true - }, - "packages/contentstack-clone/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-clone/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-clone/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-clone/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-clone/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-clone/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-clone/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-clone/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@10.0.20/node_modules/@types/sinon", - "link": true - }, - "packages/contentstack-clone/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-clone/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-clone/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-clone/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-clone/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-clone/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", - "link": true - }, - "packages/contentstack-clone/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-clone/node_modules/merge": { - "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", - "link": true - }, - "packages/contentstack-clone/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-clone/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-clone/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-clone/node_modules/ora": { - "resolved": "../node_modules/.pnpm/ora@5.4.1/node_modules/ora", - "link": true - }, - "packages/contentstack-clone/node_modules/prompt": { - "resolved": "../node_modules/.pnpm/prompt@1.3.0/node_modules/prompt", - "link": true - }, - "packages/contentstack-clone/node_modules/rimraf": { - "resolved": "../node_modules/.pnpm/rimraf@6.1.3/node_modules/rimraf", - "link": true - }, - "packages/contentstack-clone/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.0.1/node_modules/sinon", - "link": true - }, - "packages/contentstack-clone/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-clone/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-content-type": { - "name": "contentstack-cli-content-type", - "version": "1.5.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "^1.8.3", - "@contentstack/cli-utilities": "^1.18.4", - "@types/diff2html": "^3.0.3", - "@types/git-diff": "^2.0.7", - "@types/hogan.js": "^3.0.5", - "@types/table": "^6.3.2", - "@types/tmp": "^0.2.6", - "axios": "^1.16.1", - "cli-ux": "^6.0.9", - "diff2html": "^3.4.56", - "git-diff": "^2.0.6", - "moment": "^2.30.1", - "node-graphviz": "^0.1.1", - "table": "^6.9.0", - "tmp": "^0.2.7", - "tslib": "^2.8.1", - "url-join": "^4.0.1" - }, - "devDependencies": { - "@oclif/plugin-help": "^6.2.49", - "@types/jest": "^29.5.14", - "@types/node": "^22.19.19", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.162", - "eslint-config-oclif-typescript": "^3.1.14", - "globby": "^11.1.0", - "jest": "^29.7.0", - "oclif": "^4.23.8", - "ts-jest": "^29.4.10", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-content-type/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-content-type/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-content-type/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/diff2html": { - "resolved": "../node_modules/.pnpm/@types+diff2html@3.0.3/node_modules/@types/diff2html", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/git-diff": { - "resolved": "../node_modules/.pnpm/@types+git-diff@2.0.7/node_modules/@types/git-diff", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/hogan.js": { - "resolved": "../node_modules/.pnpm/@types+hogan.js@3.0.5/node_modules/@types/hogan.js", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/jest": { - "resolved": "../node_modules/.pnpm/@types+jest@29.5.14/node_modules/@types/jest", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@22.19.20/node_modules/@types/node", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/table": { - "resolved": "../node_modules/.pnpm/@types+table@6.3.2/node_modules/@types/table", - "link": true - }, - "packages/contentstack-content-type/node_modules/@types/tmp": { - "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", - "link": true - }, - "packages/contentstack-content-type/node_modules/axios": { - "resolved": "../node_modules/.pnpm/axios@1.17.0_debug@4.4.3/node_modules/axios", - "link": true - }, - "packages/contentstack-content-type/node_modules/cli-ux": { - "resolved": "../node_modules/.pnpm/cli-ux@6.0.9/node_modules/cli-ux", - "link": true - }, - "packages/contentstack-content-type/node_modules/diff2html": { - "resolved": "../node_modules/.pnpm/diff2html@3.4.56/node_modules/diff2html", - "link": true - }, - "packages/contentstack-content-type/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-content-type/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-content-type/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-content-type/node_modules/git-diff": { - "resolved": "../node_modules/.pnpm/git-diff@2.0.6/node_modules/git-diff", - "link": true - }, - "packages/contentstack-content-type/node_modules/globby": { - "resolved": "../node_modules/.pnpm/globby@11.1.0/node_modules/globby", - "link": true - }, - "packages/contentstack-content-type/node_modules/jest": { - "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@22.19.20_ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5_/node_modules/jest", - "link": true - }, - "packages/contentstack-content-type/node_modules/moment": { - "resolved": "../node_modules/.pnpm/moment@2.30.1/node_modules/moment", - "link": true - }, - "packages/contentstack-content-type/node_modules/node-graphviz": { - "resolved": "../node_modules/.pnpm/node-graphviz@0.1.1/node_modules/node-graphviz", - "link": true - }, - "packages/contentstack-content-type/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-content-type/node_modules/table": { - "resolved": "../node_modules/.pnpm/table@6.9.0/node_modules/table", - "link": true - }, - "packages/contentstack-content-type/node_modules/tmp": { - "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", - "link": true - }, - "packages/contentstack-content-type/node_modules/ts-jest": { - "resolved": "../node_modules/.pnpm/ts-jest@29.4.11_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest_cb540a799e3e2e0732d753edc26b671a/node_modules/ts-jest", - "link": true - }, - "packages/contentstack-content-type/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-content-type/node_modules/tslib": { - "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", - "link": true - }, - "packages/contentstack-content-type/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-content-type/node_modules/url-join": { - "resolved": "../node_modules/.pnpm/url-join@4.0.1/node_modules/url-join", - "link": true - }, - "packages/contentstack-export": { - "name": "@contentstack/cli-cm-export", - "version": "1.25.1", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/cli-variants": "~1.5.1", - "@oclif/core": "^4.11.4", - "async": "^3.2.6", - "big-json": "^3.2.0", - "bluebird": "^3.7.2", - "chalk": "^4.1.2", - "lodash": "^4.18.1", - "merge": "^2.1.1", - "mkdirp": "^1.0.4", - "progress-stream": "^2.0.0", - "promise-limit": "^2.7.0", - "winston": "^3.19.0" - }, - "devDependencies": { - "@contentstack/cli-auth": "~1.8.0", - "@contentstack/cli-config": "~1.20.1", - "@contentstack/cli-dev-dependencies": "^1.3.1", - "@oclif/plugin-help": "^6.2.28", - "@oclif/test": "^4.1.18", - "@types/big-json": "^3.2.5", - "@types/chai": "^4.3.11", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.6", - "@types/progress-stream": "^2.0.5", - "@types/sinon": "^17.0.2", - "chai": "^4.4.1", - "dotenv": "^16.5.0", - "dotenv-expand": "^9.0.0", - "eslint": "^9.26.0", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^17.0.1", - "source-map-support": "^0.5.21", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-export-to-csv": { - "name": "@contentstack/cli-cm-export-to-csv", - "version": "1.12.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "fast-csv": "^4.3.6", - "inquirer": "8.2.7", - "inquirer-checkbox-plus-prompt": "1.4.2" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/chai": "^4.3.20", - "@types/inquirer": "^9.0.8", - "@types/mocha": "^10.0.10", - "@types/node": "^20.17.50", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "eslint-config-oclif-typescript": "^3.1.14", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^19.0.5", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/contentstack-export-to-csv/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.35/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.35/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@types/inquirer": { - "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.35/node_modules/@types/node", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@5.9.3/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/fast-csv": { - "resolved": "../node_modules/.pnpm/fast-csv@4.3.6/node_modules/fast-csv", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@20.19.35/node_modules/inquirer", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/inquirer-checkbox-plus-prompt": { - "resolved": "../node_modules/.pnpm/inquirer-checkbox-plus-prompt@1.4.2_inquirer@8.2.7_@types+node@20.19.35_/node_modules/inquirer-checkbox-plus-prompt", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.35/node_modules/oclif", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.35_typescript@5.9.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-export-to-csv/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-export/node_modules/@contentstack/cli-auth": { - "resolved": "../cli/packages/contentstack-auth", - "link": true - }, - "packages/contentstack-export/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@22.19.20/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-export/node_modules/@contentstack/cli-config": { - "resolved": "../cli/packages/contentstack-config", - "link": true - }, - "packages/contentstack-export/node_modules/@contentstack/cli-dev-dependencies": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", - "link": true - }, - "packages/contentstack-export/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@22.19.20/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-export/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-export/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.37/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-export/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-export/node_modules/@types/big-json": { - "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", - "link": true - }, - "packages/contentstack-export/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-export/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-export/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-export/node_modules/@types/progress-stream": { - "resolved": "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream", - "link": true - }, - "packages/contentstack-export/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon", - "link": true - }, - "packages/contentstack-export/node_modules/async": { - "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", - "link": true - }, - "packages/contentstack-export/node_modules/big-json": { - "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", - "link": true - }, - "packages/contentstack-export/node_modules/bluebird": { - "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", - "link": true - }, - "packages/contentstack-export/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-export/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-export/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-export/node_modules/dotenv-expand": { - "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", - "link": true - }, - "packages/contentstack-export/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-export/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-export/node_modules/merge": { - "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", - "link": true - }, - "packages/contentstack-export/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-export/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-export/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-export/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-export/node_modules/progress-stream": { - "resolved": "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream", - "link": true - }, - "packages/contentstack-export/node_modules/promise-limit": { - "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", - "link": true - }, - "packages/contentstack-export/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon", - "link": true - }, - "packages/contentstack-export/node_modules/source-map-support": { - "resolved": "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support", - "link": true - }, - "packages/contentstack-export/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@22.19.20_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-export/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-export/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-external-migrate": { - "name": "@contentstack/cli-external-migrate", - "version": "1.0.0-alpha.1", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "^1.6.1", - "@contentstack/cli-utilities": "^1.14.4", - "@contentstack/json-rte-serializer": "^2.0.13", - "@contentstack/marketplace-sdk": "^1.5.2", - "@oclif/core": "^4.8.0", - "axios": "^1.15.2", - "chalk": "^4.1.2", - "jsdom": "^23.0.0", - "lodash": "^4.17.21", - "mkdirp": "^1.0.4", - "p-limit": "^3.1.0", - "uuid": "^14.0.0" - }, - "devDependencies": { - "@oclif/test": "^3.0.0", - "@types/jsdom": "^21.1.7", - "@types/lodash": "^4.17.0", - "@types/mkdirp": "^1.0.2", - "@types/node": "^20.12.12", - "@types/uuid": "^10.0.0", - "@typescript-eslint/eslint-plugin": "^6.19.0", - "@typescript-eslint/parser": "^6.19.0", - "eslint": "^8.56.0", - "oclif": "^4.8.0", - "typescript": "^5.3.3", - "vitest": "^4.0.18" - }, - "engines": { - "node": ">=20.0.0" - } - }, - "packages/contentstack-import": { - "name": "@contentstack/cli-cm-import", - "version": "1.33.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-audit": "~1.19.4", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/cli-variants": "~1.5.1", - "@oclif/core": "^4.11.4", - "big-json": "^3.2.0", - "bluebird": "^3.7.2", - "chalk": "^4.1.2", - "debug": "^4.4.3", - "fs-extra": "^11.3.3", - "lodash": "^4.18.1", - "marked": "^4.3.0", - "merge": "^2.1.1", - "mkdirp": "^1.0.4", - "promise-limit": "^2.7.0", - "winston": "^3.19.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/big-json": "^3.2.5", - "@types/bluebird": "^3.5.42", - "@types/fs-extra": "^11.0.4", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.89", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-import-setup": { - "name": "@contentstack/cli-cm-import-setup", - "version": "1.8.4", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "big-json": "^3.2.0", - "chalk": "^4.1.2", - "fs-extra": "^11.3.0", - "lodash": "^4.18.1", - "merge": "^2.1.1", - "mkdirp": "^1.0.4", - "winston": "^3.19.0" - }, - "devDependencies": { - "@types/big-json": "^3.2.5", - "@types/chai": "^4.3.20", - "@types/fs-extra": "^11.0.4", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "@typescript-eslint/eslint-plugin": "^5.62.0", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-import-setup/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/big-json": { - "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/fs-extra": { - "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-import-setup/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-import-setup/node_modules/big-json": { - "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", - "link": true - }, - "packages/contentstack-import-setup/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-import-setup/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-import-setup/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-import-setup/node_modules/fs-extra": { - "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", - "link": true - }, - "packages/contentstack-import-setup/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-import-setup/node_modules/merge": { - "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", - "link": true - }, - "packages/contentstack-import-setup/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-import-setup/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-import-setup/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-import-setup/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-import-setup/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-import-setup/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-import-setup/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-import/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-import/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-import/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-import/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-import/node_modules/@types/big-json": { - "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", - "link": true - }, - "packages/contentstack-import/node_modules/@types/bluebird": { - "resolved": "../node_modules/.pnpm/@types+bluebird@3.5.42/node_modules/@types/bluebird", - "link": true - }, - "packages/contentstack-import/node_modules/@types/fs-extra": { - "resolved": "../node_modules/.pnpm/@types+fs-extra@11.0.4/node_modules/@types/fs-extra", - "link": true - }, - "packages/contentstack-import/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-import/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-import/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-import/node_modules/@typescript-eslint/eslint-plugin": { - "resolved": "../node_modules/.pnpm/@typescript-eslint+eslint-plugin@5.62.0_@typescript-eslint+parser@8.61.0_eslint@9.39.3__e7f2c29f8573fbbb5818df40fd53b481/node_modules/@typescript-eslint/eslint-plugin", - "link": true - }, - "packages/contentstack-import/node_modules/big-json": { - "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", - "link": true - }, - "packages/contentstack-import/node_modules/bluebird": { - "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", - "link": true - }, - "packages/contentstack-import/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-import/node_modules/debug": { - "resolved": "../node_modules/.pnpm/debug@4.4.3_supports-color@8.1.1/node_modules/debug", - "link": true - }, - "packages/contentstack-import/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-import/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-import/node_modules/fs-extra": { - "resolved": "../node_modules/.pnpm/fs-extra@11.3.3/node_modules/fs-extra", - "link": true - }, - "packages/contentstack-import/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-import/node_modules/marked": { - "resolved": "../node_modules/.pnpm/marked@4.3.0/node_modules/marked", - "link": true - }, - "packages/contentstack-import/node_modules/merge": { - "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", - "link": true - }, - "packages/contentstack-import/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-import/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-import/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-import/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-import/node_modules/promise-limit": { - "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", - "link": true - }, - "packages/contentstack-import/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-import/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-import/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-migrate-rte": { - "name": "@contentstack/cli-cm-migrate-rte", - "version": "1.7.0", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "1.8.3", - "@contentstack/cli-utilities": "1.18.4", - "@contentstack/json-rte-serializer": "~2.1.0", - "@oclif/core": "^4.11.4", - "@oclif/plugin-help": "^6.2.37", - "chalk": "^4.1.2", - "collapse-whitespace": "^1.1.7", - "jsdom": "^23.2.0", - "jsonschema": "^1.5.0", - "lodash": "^4.18.1", - "omit-deep-lodash": "^1.1.7" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "chai": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.165", - "husky": "^9.1.7", - "mocha": "^10.8.2", - "nock": "^13.5.6", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "querystring": "^0.2.1", - "sinon": "^21.1.2" - }, - "engines": { - "node": ">=18.0.0" - } - }, - "packages/contentstack-migrate-rte/node_modules/@contentstack/cli-command": { - "resolved": "../cli/packages/contentstack-command", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/@contentstack/cli-utilities": { - "resolved": "../cli/packages/contentstack-utilities", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/@contentstack/json-rte-serializer": { - "resolved": "../node_modules/.pnpm/@contentstack+json-rte-serializer@2.1.0/node_modules/@contentstack/json-rte-serializer", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.50/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/collapse-whitespace": { - "resolved": "../node_modules/.pnpm/collapse-whitespace@1.1.7/node_modules/collapse-whitespace", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.168_eslint@8.57.1_typescript@6.0.3/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/husky": { - "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/jsdom": { - "resolved": "../node_modules/.pnpm/jsdom@23.2.0/node_modules/jsdom", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/jsonschema": { - "resolved": "../node_modules/.pnpm/jsonschema@1.5.0/node_modules/jsonschema", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/nock": { - "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@22.19.20/node_modules/oclif", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/omit-deep-lodash": { - "resolved": "../node_modules/.pnpm/omit-deep-lodash@1.1.7/node_modules/omit-deep-lodash", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/querystring": { - "resolved": "../node_modules/.pnpm/querystring@0.2.1/node_modules/querystring", - "link": true - }, - "packages/contentstack-migrate-rte/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@21.1.2/node_modules/sinon", - "link": true - }, - "packages/contentstack-migration": { - "name": "@contentstack/cli-migration", - "version": "1.12.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-command": "~1.8.2", - "@contentstack/cli-utilities": "~1.18.3", - "@oclif/core": "^4.11.4", - "async": "^3.2.6", - "callsites": "^3.1.0", - "cardinal": "^2.1.1", - "chalk": "^4.1.2", - "concat-stream": "^2.0.0", - "listr": "^0.14.3", - "winston": "^3.19.0" - }, - "devDependencies": { - "@oclif/test": "^4.1.18", - "@types/mocha": "^8.2.3", - "@types/node": "^14.18.63", - "chai": "^4.5.0", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.62", - "jsdoc-to-markdown": "^8.0.3", - "mocha": "^10.8.2", - "nock": "^13.5.6", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^19.0.5", - "source-map-support": "^0.5.21", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=8.3.0" - } - }, - "packages/contentstack-migration/node_modules/@contentstack/cli-command": { - "resolved": "../cli/packages/contentstack-command", - "link": true - }, - "packages/contentstack-migration/node_modules/@contentstack/cli-utilities": { - "resolved": "../cli/packages/contentstack-utilities", - "link": true - }, - "packages/contentstack-migration/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-migration/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-migration/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@8.2.3/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-migration/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-migration/node_modules/async": { - "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", - "link": true - }, - "packages/contentstack-migration/node_modules/callsites": { - "resolved": "../node_modules/.pnpm/callsites@3.1.0/node_modules/callsites", - "link": true - }, - "packages/contentstack-migration/node_modules/cardinal": { - "resolved": "../node_modules/.pnpm/cardinal@2.1.1/node_modules/cardinal", - "link": true - }, - "packages/contentstack-migration/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-migration/node_modules/chalk": { - "resolved": "../node_modules/.pnpm/chalk@4.1.2/node_modules/chalk", - "link": true - }, - "packages/contentstack-migration/node_modules/concat-stream": { - "resolved": "../node_modules/.pnpm/concat-stream@2.0.0/node_modules/concat-stream", - "link": true - }, - "packages/contentstack-migration/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-migration/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-migration/node_modules/jsdoc-to-markdown": { - "resolved": "../node_modules/.pnpm/jsdoc-to-markdown@8.0.3/node_modules/jsdoc-to-markdown", - "link": true - }, - "packages/contentstack-migration/node_modules/listr": { - "resolved": "../node_modules/.pnpm/listr@0.14.3/node_modules/listr", - "link": true - }, - "packages/contentstack-migration/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-migration/node_modules/nock": { - "resolved": "../node_modules/.pnpm/nock@13.5.6/node_modules/nock", - "link": true - }, - "packages/contentstack-migration/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-migration/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-migration/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@19.0.5/node_modules/sinon", - "link": true - }, - "packages/contentstack-migration/node_modules/source-map-support": { - "resolved": "../node_modules/.pnpm/source-map-support@0.5.21/node_modules/source-map-support", - "link": true - }, - "packages/contentstack-migration/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@14.18.63_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-migration/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-migration/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-query-export": { - "name": "@contentstack/cli-cm-export-query", - "version": "1.0.3", - "license": "MIT", - "dependencies": { - "@contentstack/cli-cm-export": "~1.25.1", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "@contentstack/cli-variants": "~1.5.1", - "@oclif/core": "^4.11.4", - "async": "^3.2.6", - "big-json": "^3.2.0", - "bluebird": "^3.7.2", - "lodash": "^4.18.1", - "merge": "^2.1.1", - "mkdirp": "^1.0.4", - "progress-stream": "^2.0.0", - "promise-limit": "^2.7.0", - "tslib": "^2.8.1", - "winston": "^3.19.0" - }, - "devDependencies": { - "@contentstack/cli-dev-dependencies": "~1.3.1", - "@oclif/plugin-help": "^6.2.44", - "@oclif/test": "^4.1.18", - "@types/big-json": "^3.2.5", - "@types/chai": "^4.3.20", - "@types/mkdirp": "^1.0.2", - "@types/mocha": "^10.0.10", - "@types/node": "^20.19.39", - "@types/progress-stream": "^2.0.5", - "@types/sinon": "^17.0.4", - "chai": "^4.5.0", - "dotenv": "^16.6.1", - "dotenv-expand": "^9.0.0", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.157", - "husky": "^9.1.7", - "mocha": "10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.23.8", - "sinon": "^17.0.2", - "ts-node": "^10.9.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-query-export/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@20.19.39/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-query-export/node_modules/@contentstack/cli-dev-dependencies": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", - "link": true - }, - "packages/contentstack-query-export/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-query-export/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-query-export/node_modules/@oclif/plugin-help": { - "resolved": "../node_modules/.pnpm/@oclif+plugin-help@6.2.44/node_modules/@oclif/plugin-help", - "link": true - }, - "packages/contentstack-query-export/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/big-json": { - "resolved": "../node_modules/.pnpm/@types+big-json@3.2.5/node_modules/@types/big-json", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/chai": { - "resolved": "../node_modules/.pnpm/@types+chai@4.3.20/node_modules/@types/chai", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/mocha": { - "resolved": "../node_modules/.pnpm/@types+mocha@10.0.10/node_modules/@types/mocha", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/progress-stream": { - "resolved": "../node_modules/.pnpm/@types+progress-stream@2.0.5/node_modules/@types/progress-stream", - "link": true - }, - "packages/contentstack-query-export/node_modules/@types/sinon": { - "resolved": "../node_modules/.pnpm/@types+sinon@17.0.4/node_modules/@types/sinon", - "link": true - }, - "packages/contentstack-query-export/node_modules/async": { - "resolved": "../node_modules/.pnpm/async@3.2.6/node_modules/async", - "link": true - }, - "packages/contentstack-query-export/node_modules/big-json": { - "resolved": "../node_modules/.pnpm/big-json@3.2.0/node_modules/big-json", - "link": true - }, - "packages/contentstack-query-export/node_modules/bluebird": { - "resolved": "../node_modules/.pnpm/bluebird@3.7.2/node_modules/bluebird", - "link": true - }, - "packages/contentstack-query-export/node_modules/chai": { - "resolved": "../node_modules/.pnpm/chai@4.5.0/node_modules/chai", - "link": true - }, - "packages/contentstack-query-export/node_modules/dotenv": { - "resolved": "../node_modules/.pnpm/dotenv@16.6.1/node_modules/dotenv", - "link": true - }, - "packages/contentstack-query-export/node_modules/dotenv-expand": { - "resolved": "../node_modules/.pnpm/dotenv-expand@9.0.0/node_modules/dotenv-expand", - "link": true - }, - "packages/contentstack-query-export/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@8.57.1/node_modules/eslint", - "link": true - }, - "packages/contentstack-query-export/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.162_eslint@8.57.1_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-query-export/node_modules/husky": { - "resolved": "../node_modules/.pnpm/husky@9.1.7/node_modules/husky", - "link": true - }, - "packages/contentstack-query-export/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-query-export/node_modules/merge": { - "resolved": "../node_modules/.pnpm/merge@2.1.1/node_modules/merge", - "link": true - }, - "packages/contentstack-query-export/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-query-export/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-query-export/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-query-export/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@20.19.39/node_modules/oclif", - "link": true - }, - "packages/contentstack-query-export/node_modules/progress-stream": { - "resolved": "../node_modules/.pnpm/progress-stream@2.0.0/node_modules/progress-stream", - "link": true - }, - "packages/contentstack-query-export/node_modules/promise-limit": { - "resolved": "../node_modules/.pnpm/promise-limit@2.7.0/node_modules/promise-limit", - "link": true - }, - "packages/contentstack-query-export/node_modules/sinon": { - "resolved": "../node_modules/.pnpm/sinon@17.0.2/node_modules/sinon", - "link": true - }, - "packages/contentstack-query-export/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-query-export/node_modules/tslib": { - "resolved": "../node_modules/.pnpm/tslib@2.8.1/node_modules/tslib", - "link": true - }, - "packages/contentstack-query-export/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-query-export/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - }, - "packages/contentstack-seed": { - "name": "@contentstack/cli-cm-seed", - "version": "1.15.6", - "license": "MIT", - "dependencies": { - "@contentstack/cli-cm-import": "~1.33.3", - "@contentstack/cli-command": "~1.8.3", - "@contentstack/cli-utilities": "~1.18.4", - "inquirer": "8.2.7", - "mkdirp": "^1.0.4", - "tar": "^7.5.11", - "tmp": "^0.2.7" - }, - "devDependencies": { - "@types/inquirer": "^9.0.9", - "@types/jest": "^26.0.24", - "@types/mkdirp": "^1.0.2", - "@types/node": "^14.18.63", - "@types/tar": "^6.1.13", - "@types/tmp": "^0.2.6", - "eslint": "^9.26.0", - "eslint-config-oclif": "^6.0.137", - "eslint-config-oclif-typescript": "^3.1.14", - "jest": "^29.7.0", - "oclif": "^4.23.8", - "ts-jest": "^29.4.6", - "ts-node": "^8.10.2", - "typescript": "^4.9.5" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "packages/contentstack-seed/node_modules/@contentstack/cli-command": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-command@1.8.3_@types+node@14.18.63/node_modules/@contentstack/cli-command", - "link": true - }, - "packages/contentstack-seed/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@14.18.63_debug@4.4.3/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/inquirer": { - "resolved": "../node_modules/.pnpm/@types+inquirer@9.0.9/node_modules/@types/inquirer", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/jest": { - "resolved": "../node_modules/.pnpm/@types+jest@26.0.24/node_modules/@types/jest", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/mkdirp": { - "resolved": "../node_modules/.pnpm/@types+mkdirp@1.0.2/node_modules/@types/mkdirp", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@14.18.63/node_modules/@types/node", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/tar": { - "resolved": "../node_modules/.pnpm/@types+tar@6.1.13/node_modules/@types/tar", - "link": true - }, - "packages/contentstack-seed/node_modules/@types/tmp": { - "resolved": "../node_modules/.pnpm/@types+tmp@0.2.6/node_modules/@types/tmp", - "link": true - }, - "packages/contentstack-seed/node_modules/eslint": { - "resolved": "../node_modules/.pnpm/eslint@9.39.3/node_modules/eslint", - "link": true - }, - "packages/contentstack-seed/node_modules/eslint-config-oclif": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif@6.0.144_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif", - "link": true - }, - "packages/contentstack-seed/node_modules/eslint-config-oclif-typescript": { - "resolved": "../node_modules/.pnpm/eslint-config-oclif-typescript@3.1.14_eslint@9.39.3_typescript@4.9.5/node_modules/eslint-config-oclif-typescript", - "link": true - }, - "packages/contentstack-seed/node_modules/inquirer": { - "resolved": "../node_modules/.pnpm/inquirer@8.2.7_@types+node@14.18.63/node_modules/inquirer", - "link": true - }, - "packages/contentstack-seed/node_modules/jest": { - "resolved": "../node_modules/.pnpm/jest@29.7.0_@types+node@14.18.63_ts-node@8.10.2_typescript@4.9.5_/node_modules/jest", - "link": true - }, - "packages/contentstack-seed/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-seed/node_modules/oclif": { - "resolved": "../node_modules/.pnpm/oclif@4.23.14_@types+node@14.18.63/node_modules/oclif", - "link": true - }, - "packages/contentstack-seed/node_modules/tar": { - "resolved": "../node_modules/.pnpm/tar@7.5.11/node_modules/tar", - "link": true - }, - "packages/contentstack-seed/node_modules/tmp": { - "resolved": "../node_modules/.pnpm/tmp@0.2.7/node_modules/tmp", - "link": true - }, - "packages/contentstack-seed/node_modules/ts-jest": { - "resolved": "../node_modules/.pnpm/ts-jest@29.4.6_@babel+core@7.29.0_@jest+transform@30.4.1_@jest+types@30.4.1_babel-jest@_91abf64bf25366afcb92b2a0c11b02db/node_modules/ts-jest", - "link": true - }, - "packages/contentstack-seed/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@8.10.2_typescript@4.9.5/node_modules/ts-node", - "link": true - }, - "packages/contentstack-seed/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@4.9.5/node_modules/typescript", - "link": true - }, - "packages/contentstack-variants": { - "name": "@contentstack/cli-variants", - "version": "1.5.1", - "license": "MIT", - "dependencies": { - "@contentstack/cli-utilities": "~1.18.4", - "@oclif/core": "^4.11.4", - "lodash": "^4.18.1", - "mkdirp": "^1.0.4", - "winston": "^3.19.0" - }, - "devDependencies": { - "@contentstack/cli-dev-dependencies": "^1.3.1", - "@oclif/test": "^4.1.18", - "@types/node": "^20.19.39", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "ts-node": "^10.9.2", - "typescript": "^5.8.3" - } - }, - "packages/contentstack-variants/node_modules/@contentstack/cli-dev-dependencies": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-dev-dependencies@1.3.1/node_modules/@contentstack/cli-dev-dependencies", - "link": true - }, - "packages/contentstack-variants/node_modules/@contentstack/cli-utilities": { - "resolved": "../node_modules/.pnpm/@contentstack+cli-utilities@1.18.4_@types+node@20.19.39/node_modules/@contentstack/cli-utilities", - "link": true - }, - "packages/contentstack-variants/node_modules/@oclif/core": { - "resolved": "../node_modules/.pnpm/@oclif+core@4.11.4/node_modules/@oclif/core", - "link": true - }, - "packages/contentstack-variants/node_modules/@oclif/test": { - "resolved": "../node_modules/.pnpm/@oclif+test@4.1.18_@oclif+core@4.11.4/node_modules/@oclif/test", - "link": true - }, - "packages/contentstack-variants/node_modules/@types/node": { - "resolved": "../node_modules/.pnpm/@types+node@20.19.39/node_modules/@types/node", - "link": true - }, - "packages/contentstack-variants/node_modules/lodash": { - "resolved": "../node_modules/.pnpm/lodash@4.18.1/node_modules/lodash", - "link": true - }, - "packages/contentstack-variants/node_modules/mkdirp": { - "resolved": "../node_modules/.pnpm/mkdirp@1.0.4/node_modules/mkdirp", - "link": true - }, - "packages/contentstack-variants/node_modules/mocha": { - "resolved": "../node_modules/.pnpm/mocha@10.8.2/node_modules/mocha", - "link": true - }, - "packages/contentstack-variants/node_modules/nyc": { - "resolved": "../node_modules/.pnpm/nyc@15.1.0/node_modules/nyc", - "link": true - }, - "packages/contentstack-variants/node_modules/ts-node": { - "resolved": "../node_modules/.pnpm/ts-node@10.9.2_@types+node@20.19.39_typescript@5.9.3/node_modules/ts-node", - "link": true - }, - "packages/contentstack-variants/node_modules/typescript": { - "resolved": "../node_modules/.pnpm/typescript@5.9.3/node_modules/typescript", - "link": true - }, - "packages/contentstack-variants/node_modules/winston": { - "resolved": "../node_modules/.pnpm/winston@3.19.0/node_modules/winston", - "link": true - } - } -} diff --git a/packages/contentstack-audit/README.md b/packages/contentstack-audit/README.md index 068227279..ba500ae37 100644 --- a/packages/contentstack-audit/README.md +++ b/packages/contentstack-audit/README.md @@ -19,7 +19,7 @@ $ npm install -g @contentstack/cli-audit $ csdx COMMAND running command... $ csdx (--version|-v) -@contentstack/cli-audit/1.19.3 darwin-arm64 node-v24.14.0 +@contentstack/cli-audit/1.19.4 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-branches/README.md b/packages/contentstack-branches/README.md index 7310b1da2..2be983dd7 100755 --- a/packages/contentstack-branches/README.md +++ b/packages/contentstack-branches/README.md @@ -37,7 +37,7 @@ $ npm install -g @contentstack/cli-cm-branches $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-branches/1.8.1 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-branches/1.8.2 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-bulk-publish/README.md b/packages/contentstack-bulk-publish/README.md index 896990310..64c1cd752 100644 --- a/packages/contentstack-bulk-publish/README.md +++ b/packages/contentstack-bulk-publish/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-cm-bulk-publish $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-bulk-publish/1.11.3 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-bulk-publish/1.12.0 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-export/README.md b/packages/contentstack-export/README.md index 13dfc0c70..c95bb9a21 100755 --- a/packages/contentstack-export/README.md +++ b/packages/contentstack-export/README.md @@ -48,7 +48,7 @@ $ npm install -g @contentstack/cli-cm-export $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-export/1.25.0 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-export/1.25.1 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-external-migrate/package.json b/packages/contentstack-external-migrate/package.json index b608ef938..598a3f9af 100644 --- a/packages/contentstack-external-migrate/package.json +++ b/packages/contentstack-external-migrate/package.json @@ -23,10 +23,10 @@ "version": "oclif readme && git add README.md" }, "dependencies": { - "@contentstack/cli-command": "^1.6.1", - "@contentstack/cli-utilities": "^1.14.4", - "@contentstack/json-rte-serializer": "^2.0.13", - "@contentstack/marketplace-sdk": "^1.5.2", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", + "@contentstack/json-rte-serializer": "~2.1.0", + "@contentstack/marketplace-sdk": "~1.5.2", "@oclif/core": "^4.8.0", "axios": "^1.15.2", "chalk": "^4.1.2", diff --git a/packages/contentstack-import-setup/README.md b/packages/contentstack-import-setup/README.md index 150c2931c..54630e92d 100644 --- a/packages/contentstack-import-setup/README.md +++ b/packages/contentstack-import-setup/README.md @@ -47,7 +47,7 @@ $ npm install -g @contentstack/cli-cm-import-setup $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-import-setup/1.8.3 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-import-setup/1.8.4 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-migration/README.md b/packages/contentstack-migration/README.md index dda6bdd36..a67350816 100644 --- a/packages/contentstack-migration/README.md +++ b/packages/contentstack-migration/README.md @@ -21,7 +21,7 @@ $ npm install -g @contentstack/cli-migration $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-migration/1.12.2 darwin-arm64 node-v24.14.0 +@contentstack/cli-migration/1.12.3 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-migration/package.json b/packages/contentstack-migration/package.json index ee65f8ada..f8a914b2d 100644 --- a/packages/contentstack-migration/package.json +++ b/packages/contentstack-migration/package.json @@ -4,8 +4,8 @@ "author": "@contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { - "@contentstack/cli-command": "~1.8.2", - "@contentstack/cli-utilities": "~1.18.3", + "@contentstack/cli-command": "~1.8.3", + "@contentstack/cli-utilities": "~1.18.4", "@oclif/core": "^4.11.4", "async": "^3.2.6", "callsites": "^3.1.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e6e6e993..7e9e41636 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -989,6 +989,82 @@ importers: specifier: ^5.8.3 version: 5.9.3 + packages/contentstack-external-migrate: + dependencies: + '@contentstack/cli-command': + specifier: ~1.8.3 + version: 1.8.3(@types/node@20.19.41) + '@contentstack/cli-utilities': + specifier: ~1.18.4 + version: 1.18.4(@types/node@20.19.41) + '@contentstack/json-rte-serializer': + specifier: ~2.1.0 + version: 2.1.0 + '@contentstack/marketplace-sdk': + specifier: ~1.5.2 + version: 1.5.2(debug@4.4.3) + '@oclif/core': + specifier: ^4.8.0 + version: 4.11.4 + axios: + specifier: ^1.15.2 + version: 1.16.1(debug@4.4.3) + chalk: + specifier: ^4.1.2 + version: 4.1.2 + jsdom: + specifier: ^23.0.0 + version: 23.2.0 + lodash: + specifier: 4.18.1 + version: 4.18.1 + mkdirp: + specifier: ^1.0.4 + version: 1.0.4 + p-limit: + specifier: ^3.1.0 + version: 3.1.0 + uuid: + specifier: 14.0.0 + version: 14.0.0 + devDependencies: + '@oclif/test': + specifier: ^3.0.0 + version: 3.2.15 + '@types/jsdom': + specifier: ^21.1.7 + version: 21.1.7 + '@types/lodash': + specifier: ^4.17.0 + version: 4.17.24 + '@types/mkdirp': + specifier: ^1.0.2 + version: 1.0.2 + '@types/node': + specifier: ^20.12.12 + version: 20.19.41 + '@types/uuid': + specifier: ^10.0.0 + version: 10.0.0 + '@typescript-eslint/eslint-plugin': + specifier: ^6.19.0 + version: 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) + '@typescript-eslint/parser': + specifier: ^6.19.0 + version: 6.21.0(eslint@8.57.1)(typescript@5.9.3) + eslint: + specifier: ^8.56.0 + version: 8.57.1 + oclif: + specifier: ^4.8.0 + version: 4.23.10(@types/node@20.19.41) + typescript: + specifier: ^5.3.3 + version: 5.9.3 + vitest: + specifier: ^4.0.18 + version: 4.1.8(@types/node@20.19.41)(jsdom@23.2.0)(vite@8.0.16(@types/node@20.19.41)(yaml@2.9.0)) + packages/contentstack-import: dependencies: '@contentstack/cli-audit': @@ -1235,10 +1311,10 @@ importers: packages/contentstack-migration: dependencies: '@contentstack/cli-command': - specifier: ~1.8.2 + specifier: ~1.8.3 version: 1.8.3(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.18.3 + specifier: ~1.18.4 version: 1.18.4(@types/node@14.18.63)(debug@4.4.3) '@oclif/core': specifier: ^4.11.4 @@ -2990,6 +3066,9 @@ packages: '@otplib/preset-v11@12.0.1': resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} + '@oxc-project/types@0.133.0': + resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==} + '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} engines: {node: '>=14'} @@ -3014,6 +3093,98 @@ packages: resolution: {integrity: sha512-pmNVGuooS30Mm7YbZd5T7E5zYVO6D5Ct91sn4T39mUvMUc3sCGridcnhAufL1/Bz2QzAtzEn0agNrdk3+5yWzw==} hasBin: true + '@rolldown/binding-android-arm64@1.0.3': + resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [android] + + '@rolldown/binding-darwin-arm64@1.0.3': + resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [darwin] + + '@rolldown/binding-darwin-x64@1.0.3': + resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [darwin] + + '@rolldown/binding-freebsd-x64@1.0.3': + resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [freebsd] + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm] + os: [linux] + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-arm64-musl@1.0.3': + resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [linux] + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [ppc64] + os: [linux] + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [s390x] + os: [linux] + + '@rolldown/binding-linux-x64-gnu@1.0.3': + resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-linux-x64-musl@1.0.3': + resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [linux] + + '@rolldown/binding-openharmony-arm64@1.0.3': + resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [openharmony] + + '@rolldown/binding-wasm32-wasi@1.0.3': + resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [wasm32] + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [arm64] + os: [win32] + + '@rolldown/binding-win32-x64-msvc@1.0.3': + resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==} + engines: {node: ^20.19.0 || >=22.12.0} + cpu: [x64] + os: [win32] + + '@rolldown/pluginutils@1.0.1': + resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==} + '@rollup/plugin-commonjs@28.0.9': resolution: {integrity: sha512-PIR4/OHZ79romx0BVVll/PkwWpJ7e5lsqFa3gFfcrFPWwLXLV39JVUzQV9RKjWerE7B845Hqjj9VYlQeieZ2dA==} engines: {node: '>=16.0.0 || 14 >= 14.17'} @@ -3287,6 +3458,9 @@ packages: '@so-ric/colorspace@1.1.6': resolution: {integrity: sha512-/KiKkpHNOBgkFJwu9sh48LkHSMYGyuTcSFK/qMBdnOAlrRJzRSXAOFB5qwzaVQuDl8wAvHVMkaASQDReTahxuw==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@stylistic/eslint-plugin@3.1.0': resolution: {integrity: sha512-pA6VOrOqk0+S8toJYhQGv2MWpQQR0QpeUo9AhNkC49Y26nxBQ/nH1rta9bUU1rPw2fJ1zZEMV5oCX5AazT7J2g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} @@ -3412,6 +3586,9 @@ packages: '@types/jest@30.0.0': resolution: {integrity: sha512-XTYugzhuwqWjws0CVz8QpM36+T+Dz5mTEBKhNs/esGLnCIlGdRy+Dq78NRjd7ls7r8BC8ZRMOrKlkO1hU0JOwA==} + '@types/jsdom@21.1.7': + resolution: {integrity: sha512-yOriVnggzrnQ3a9OKOCxaVuSug3w3/SbOj5i7VwXWZEyUNl3bLF9V3MfxGbZKuwqJOQyRfqXyROBB1CoZLFWzA==} + '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} @@ -3524,9 +3701,15 @@ packages: '@types/tmp@0.2.6': resolution: {integrity: sha512-chhaNf2oKHlRkDGt+tiKE2Z5aJ6qalm7Z9rlLdBwmOiAAf09YQvvoLXjWK4HWPF1xU/fqvMgfNfpVoBscA/tKA==} + '@types/tough-cookie@4.0.5': + resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} + '@types/triple-beam@1.3.5': resolution: {integrity: sha512-6WaYesThRMCl19iryMYP7/x2OVgCtbIVflDGFpWnb9irXI3UjYE4AzmYuiUKY1AJstGijoY+MgUszMgRxIYTYw==} + '@types/uuid@10.0.0': + resolution: {integrity: sha512-7gqG38EyHgyP1S+7+xomFtL+ZNHcKv6DwNaCZmJmo1vgMugyF3TCnXVg4t1uk89mLNwnLtnY3TpOpCOyp1/xHQ==} + '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} @@ -3892,6 +4075,35 @@ packages: cpu: [x64] os: [win32] + '@vitest/expect@4.1.8': + resolution: {integrity: sha512-h3nDO677RDLEGlBxyQ5CW8RlMThSKSRLUePLOx09gNIWRL40edgA1GCZSZgf1W55MFAG6/Sw14KeaAnqv0NKdQ==} + + '@vitest/mocker@4.1.8': + resolution: {integrity: sha512-LEiN/xe4OSIbKe9HQIp5OC24agGD9J5CnmMgsLohVVoOPWL9a2sBoR6VBx43jQZb7Kr1l4RCuyCJzcAa0+dojw==} + peerDependencies: + msw: ^2.4.9 + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@4.1.8': + resolution: {integrity: sha512-9GasEBxpZ1VYIpqHf/0+YGg121uSNwCKOJqIrTwWP/TB7DmFCiaBpNl3aPZzoLWfWkuqhbH8vJIVobZkvdo2cA==} + + '@vitest/runner@4.1.8': + resolution: {integrity: sha512-EmVxeBAfMJvycdjd6Hm+RbFBbA9fKvo0Kx37hNpBYoYeavH3RNsBXWDooR1mgD52dCrxIIuP7UotpfiwOikvcg==} + + '@vitest/snapshot@4.1.8': + resolution: {integrity: sha512-acfZboRmAIf05DEKcBQy33VXojFJjtUdLyo7oOmV9kebb2xdU01UknNiPuPZoJZQyO7DF0gZdTGTpeAzET9QPQ==} + + '@vitest/spy@4.1.8': + resolution: {integrity: sha512-6EevtBp6OZOPF7bmz36HrGMeP3txgVSrgebWxHOafDXGkhIzfXK14f8KF6MuFfgXXUeHxmpD3BQxkV00/3s5mA==} + + '@vitest/utils@4.1.8': + resolution: {integrity: sha512-uOJamYALNhfJ6iolExyQM40yIQwDqYnkKtQ5VCiSe17E33H0aQ/u+1GlRuz4LZBk6Mm3sg90G9hEbmEt37C1Zg==} + '@wry/caches@1.0.1': resolution: {integrity: sha512-bXuaUNLVVkD20wcGBWRyo7j9N3TxePEWFZj2Y+r9OoUzfqmavM84+mFykRicNsBqatba5JLay1t48wxaXaWnlA==} engines: {node: '>=8'} @@ -4926,6 +5138,10 @@ packages: resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==} engines: {node: '>=12.20'} + detect-libc@2.1.2: + resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} + engines: {node: '>=8'} + detect-newline@3.1.0: resolution: {integrity: sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==} engines: {node: '>=8'} @@ -5089,6 +5305,9 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} + es-module-lexer@2.1.0: + resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==} + es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} @@ -5476,6 +5695,9 @@ packages: estree-walker@2.0.2: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -5503,6 +5725,10 @@ packages: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + expect-type@1.3.0: + resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==} + engines: {node: '>=12.0.0'} + expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -6829,6 +7055,76 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} + lightningcss-android-arm64@1.32.0: + resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [android] + + lightningcss-darwin-arm64@1.32.0: + resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [darwin] + + lightningcss-darwin-x64@1.32.0: + resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [darwin] + + lightningcss-freebsd-x64@1.32.0: + resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [freebsd] + + lightningcss-linux-arm-gnueabihf@1.32.0: + resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==} + engines: {node: '>= 12.0.0'} + cpu: [arm] + os: [linux] + + lightningcss-linux-arm64-gnu@1.32.0: + resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-arm64-musl@1.32.0: + resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [linux] + + lightningcss-linux-x64-gnu@1.32.0: + resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-linux-x64-musl@1.32.0: + resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [linux] + + lightningcss-win32-arm64-msvc@1.32.0: + resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==} + engines: {node: '>= 12.0.0'} + cpu: [arm64] + os: [win32] + + lightningcss-win32-x64-msvc@1.32.0: + resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==} + engines: {node: '>= 12.0.0'} + cpu: [x64] + os: [win32] + + lightningcss@1.32.0: + resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==} + engines: {node: '>= 12.0.0'} + lilconfig@3.1.3: resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==} engines: {node: '>=14'} @@ -7202,6 +7498,11 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} + nanoid@3.3.12: + resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -7358,6 +7659,10 @@ packages: resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==} engines: {node: '>= 0.4'} + obug@2.1.2: + resolution: {integrity: sha512-AWGB9WFcRXOQs48Z/udjI5ZcZMHXwX8XPByNpOydgcGsDLIzjGizhoMWJyKAWze7AVW/2W1i+/gPX4YtKe5cyg==} + engines: {node: '>=12.20.0'} + oclif@4.23.10: resolution: {integrity: sha512-foZYNmCjgFo0HJzbfY9oz8IgNs4aCPVbe51gnauM646mOy+C9WzoQS5iJyCzRiuJvS4fFrONG0BrjWiCFjtlGQ==} engines: {node: '>=18.0.0'} @@ -7554,6 +7859,9 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + pathe@2.0.3: + resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} + pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} @@ -7593,6 +7901,10 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} + postcss@8.5.15: + resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==} + engines: {node: ^10 || ^12 || >=14} + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -7952,6 +8264,11 @@ packages: engines: {node: 20 || >=22} hasBin: true + rolldown@1.0.3: + resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + rollup@4.61.0: resolution: {integrity: sha512-T9mWdbWfQtp0B5lv/HX+wrhYsmXRlcWnXXmJbXqKJhlRaoS6KMhq0gpyzW4UJfclcxrEdLnTgjT2NjruLONu0g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -8123,6 +8440,9 @@ packages: resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} @@ -8252,10 +8572,16 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + statuses@2.0.2: resolution: {integrity: sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==} engines: {node: '>= 0.8'} + std-env@4.1.0: + resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==} + stdout-stderr@0.1.13: resolution: {integrity: sha512-Xnt9/HHHYfjZ7NeQLvuQDyL1LnbsbddgMFKCuaQKwGCdJm8LnstZIXop+uOY36UR1UXXoHXfMbC1KlVdVd2JLA==} engines: {node: '>=8.0.0'} @@ -8481,6 +8807,9 @@ packages: tiny-warning@1.0.3: resolution: {integrity: sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + tinyexec@1.2.4: resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} engines: {node: '>=18'} @@ -8489,6 +8818,10 @@ packages: resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==} engines: {node: '>=12.0.0'} + tinyrainbow@3.1.0: + resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==} + engines: {node: '>=14.0.0'} + tmp@0.2.7: resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} engines: {node: '>=14.14'} @@ -8827,6 +9160,90 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + vite@8.0.16: + resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==} + engines: {node: ^20.19.0 || >=22.12.0} + hasBin: true + peerDependencies: + '@types/node': ^20.19.0 || >=22.12.0 + '@vitejs/devtools': ^0.1.18 + esbuild: ^0.27.0 || ^0.28.0 + jiti: '>=1.21.0' + less: ^4.0.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 + peerDependenciesMeta: + '@types/node': + optional: true + '@vitejs/devtools': + optional: true + esbuild: + optional: true + jiti: + optional: true + less: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@4.1.8: + resolution: {integrity: sha512-flY6ScbCIt9HThs+C5HS7jvGOB560DJtk/Z15IQROTA6zEy49Nh8T/dofWTQL+n3vswqn87sbJNiuqw1SDp5Ig==} + engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@opentelemetry/api': ^1.9.0 + '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0 + '@vitest/browser-playwright': 4.1.8 + '@vitest/browser-preview': 4.1.8 + '@vitest/browser-webdriverio': 4.1.8 + '@vitest/coverage-istanbul': 4.1.8 + '@vitest/coverage-v8': 4.1.8 + '@vitest/ui': 4.1.8 + happy-dom: '*' + jsdom: '*' + vite: ^6.0.0 || ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@opentelemetry/api': + optional: true + '@types/node': + optional: true + '@vitest/browser-playwright': + optional: true + '@vitest/browser-preview': + optional: true + '@vitest/browser-webdriverio': + optional: true + '@vitest/coverage-istanbul': + optional: true + '@vitest/coverage-v8': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + void-elements@2.0.1: resolution: {integrity: sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==} engines: {node: '>=0.10.0'} @@ -8905,6 +9322,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + widest-line@3.1.0: resolution: {integrity: sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==} engines: {node: '>=8'} @@ -12034,6 +12456,8 @@ snapshots: '@otplib/plugin-crypto': 12.0.1 '@otplib/plugin-thirty-two': 12.0.1 + '@oxc-project/types@0.133.0': {} + '@pkgjs/parseargs@0.11.0': optional: true @@ -12055,6 +12479,57 @@ snapshots: dependencies: nopt: 1.0.10 + '@rolldown/binding-android-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-arm64@1.0.3': + optional: true + + '@rolldown/binding-darwin-x64@1.0.3': + optional: true + + '@rolldown/binding-freebsd-x64@1.0.3': + optional: true + + '@rolldown/binding-linux-arm-gnueabihf@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-arm64-musl@1.0.3': + optional: true + + '@rolldown/binding-linux-ppc64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-s390x-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-gnu@1.0.3': + optional: true + + '@rolldown/binding-linux-x64-musl@1.0.3': + optional: true + + '@rolldown/binding-openharmony-arm64@1.0.3': + optional: true + + '@rolldown/binding-wasm32-wasi@1.0.3': + dependencies: + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 + '@napi-rs/wasm-runtime': 1.1.4(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + optional: true + + '@rolldown/binding-win32-arm64-msvc@1.0.3': + optional: true + + '@rolldown/binding-win32-x64-msvc@1.0.3': + optional: true + + '@rolldown/pluginutils@1.0.1': {} + '@rollup/plugin-commonjs@28.0.9(rollup@4.61.0)': dependencies: '@rollup/pluginutils': 5.4.0(rollup@4.61.0) @@ -12282,6 +12757,8 @@ snapshots: color: 5.0.3 text-hex: 1.0.0 + '@standard-schema/spec@1.1.0': {} + '@stylistic/eslint-plugin@3.1.0(eslint@10.4.1)(typescript@6.0.3)': dependencies: '@typescript-eslint/utils': 8.60.0(eslint@10.4.1)(typescript@6.0.3) @@ -12535,6 +13012,12 @@ snapshots: expect: 30.4.1 pretty-format: 30.4.1 + '@types/jsdom@21.1.7': + dependencies: + '@types/node': 20.19.41 + '@types/tough-cookie': 4.0.5 + parse5: 7.3.0 + '@types/json-schema@7.0.15': {} '@types/json5@0.0.29': {} @@ -12653,8 +13136,12 @@ snapshots: '@types/tmp@0.2.6': {} + '@types/tough-cookie@4.0.5': {} + '@types/triple-beam@1.3.5': {} + '@types/uuid@10.0.0': {} + '@types/wrap-ansi@3.0.0': {} '@types/yargs-parser@21.0.3': {} @@ -13796,6 +14283,47 @@ snapshots: '@unrs/resolver-binding-win32-x64-msvc@1.12.2': optional: true + '@vitest/expect@4.1.8': + dependencies: + '@standard-schema/spec': 1.1.0 + '@types/chai': 5.2.3 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + chai: 6.2.2 + tinyrainbow: 3.1.0 + + '@vitest/mocker@4.1.8(vite@8.0.16(@types/node@20.19.41)(yaml@2.9.0))': + dependencies: + '@vitest/spy': 4.1.8 + estree-walker: 3.0.3 + magic-string: 0.30.21 + optionalDependencies: + vite: 8.0.16(@types/node@20.19.41)(yaml@2.9.0) + + '@vitest/pretty-format@4.1.8': + dependencies: + tinyrainbow: 3.1.0 + + '@vitest/runner@4.1.8': + dependencies: + '@vitest/utils': 4.1.8 + pathe: 2.0.3 + + '@vitest/snapshot@4.1.8': + dependencies: + '@vitest/pretty-format': 4.1.8 + '@vitest/utils': 4.1.8 + magic-string: 0.30.21 + pathe: 2.0.3 + + '@vitest/spy@4.1.8': {} + + '@vitest/utils@4.1.8': + dependencies: + '@vitest/pretty-format': 4.1.8 + convert-source-map: 2.0.0 + tinyrainbow: 3.1.0 + '@wry/caches@1.0.1': dependencies: tslib: 2.8.1 @@ -14979,6 +15507,8 @@ snapshots: detect-indent@7.0.2: {} + detect-libc@2.1.2: {} + detect-newline@3.1.0: {} detect-newline@4.0.1: {} @@ -15166,6 +15696,8 @@ snapshots: es-errors@1.3.0: {} + es-module-lexer@2.1.0: {} + es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -16874,6 +17406,10 @@ snapshots: estree-walker@2.0.2: {} + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.9 + esutils@2.0.3: {} etag@1.8.1: {} @@ -16906,6 +17442,8 @@ snapshots: exit@0.1.2: {} + expect-type@1.3.0: {} + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -19069,6 +19607,55 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 + lightningcss-android-arm64@1.32.0: + optional: true + + lightningcss-darwin-arm64@1.32.0: + optional: true + + lightningcss-darwin-x64@1.32.0: + optional: true + + lightningcss-freebsd-x64@1.32.0: + optional: true + + lightningcss-linux-arm-gnueabihf@1.32.0: + optional: true + + lightningcss-linux-arm64-gnu@1.32.0: + optional: true + + lightningcss-linux-arm64-musl@1.32.0: + optional: true + + lightningcss-linux-x64-gnu@1.32.0: + optional: true + + lightningcss-linux-x64-musl@1.32.0: + optional: true + + lightningcss-win32-arm64-msvc@1.32.0: + optional: true + + lightningcss-win32-x64-msvc@1.32.0: + optional: true + + lightningcss@1.32.0: + dependencies: + detect-libc: 2.1.2 + optionalDependencies: + lightningcss-android-arm64: 1.32.0 + lightningcss-darwin-arm64: 1.32.0 + lightningcss-darwin-x64: 1.32.0 + lightningcss-freebsd-x64: 1.32.0 + lightningcss-linux-arm-gnueabihf: 1.32.0 + lightningcss-linux-arm64-gnu: 1.32.0 + lightningcss-linux-arm64-musl: 1.32.0 + lightningcss-linux-x64-gnu: 1.32.0 + lightningcss-linux-x64-musl: 1.32.0 + lightningcss-win32-arm64-msvc: 1.32.0 + lightningcss-win32-x64-msvc: 1.32.0 + lilconfig@3.1.3: {} lines-and-columns@1.2.4: {} @@ -19431,6 +20018,8 @@ snapshots: mute-stream@2.0.0: {} + nanoid@3.3.12: {} + napi-postinstall@0.3.4: {} natural-compare-lite@1.4.0: {} @@ -19644,6 +20233,8 @@ snapshots: define-properties: 1.2.1 es-object-atoms: 1.1.2 + obug@2.1.2: {} + oclif@4.23.10: dependencies: '@aws-sdk/client-cloudfront': 3.1057.0 @@ -19999,6 +20590,8 @@ snapshots: path-type@4.0.0: {} + pathe@2.0.3: {} + pathval@1.1.1: {} picocolors@1.1.1: {} @@ -20023,6 +20616,12 @@ snapshots: possible-typed-array-names@1.1.0: {} + postcss@8.5.15: + dependencies: + nanoid: 3.3.12 + picocolors: 1.1.1 + source-map-js: 1.2.1 + prelude-ls@1.2.1: {} prettier-linter-helpers@1.0.1: @@ -20375,6 +20974,27 @@ snapshots: glob: 13.0.6 package-json-from-dist: 1.0.1 + rolldown@1.0.3: + dependencies: + '@oxc-project/types': 0.133.0 + '@rolldown/pluginutils': 1.0.1 + optionalDependencies: + '@rolldown/binding-android-arm64': 1.0.3 + '@rolldown/binding-darwin-arm64': 1.0.3 + '@rolldown/binding-darwin-x64': 1.0.3 + '@rolldown/binding-freebsd-x64': 1.0.3 + '@rolldown/binding-linux-arm-gnueabihf': 1.0.3 + '@rolldown/binding-linux-arm64-gnu': 1.0.3 + '@rolldown/binding-linux-arm64-musl': 1.0.3 + '@rolldown/binding-linux-ppc64-gnu': 1.0.3 + '@rolldown/binding-linux-s390x-gnu': 1.0.3 + '@rolldown/binding-linux-x64-gnu': 1.0.3 + '@rolldown/binding-linux-x64-musl': 1.0.3 + '@rolldown/binding-openharmony-arm64': 1.0.3 + '@rolldown/binding-wasm32-wasi': 1.0.3 + '@rolldown/binding-win32-arm64-msvc': 1.0.3 + '@rolldown/binding-win32-x64-msvc': 1.0.3 + rollup@4.61.0: dependencies: '@types/estree': 1.0.9 @@ -20605,6 +21225,8 @@ snapshots: side-channel-map: 1.0.1 side-channel-weakmap: 1.0.2 + siginfo@2.0.0: {} + signal-exit@3.0.7: {} signal-exit@4.1.0: {} @@ -20778,8 +21400,12 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + statuses@2.0.2: {} + std-env@4.1.0: {} + stdout-stderr@0.1.13: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -21020,6 +21646,8 @@ snapshots: tiny-warning@1.0.3: {} + tinybench@2.9.0: {} + tinyexec@1.2.4: {} tinyglobby@0.2.17: @@ -21027,6 +21655,8 @@ snapshots: fdir: 6.5.0(picomatch@4.0.4) picomatch: 4.0.4 + tinyrainbow@3.1.0: {} + tmp@0.2.7: {} tmpl@1.0.5: {} @@ -21640,6 +22270,46 @@ snapshots: vary@1.1.2: {} + vite@8.0.16(@types/node@20.19.41)(yaml@2.9.0): + dependencies: + lightningcss: 1.32.0 + picomatch: 4.0.4 + postcss: 8.5.15 + rolldown: 1.0.3 + tinyglobby: 0.2.17 + optionalDependencies: + '@types/node': 20.19.41 + fsevents: 2.3.3 + yaml: 2.9.0 + + vitest@4.1.8(@types/node@20.19.41)(jsdom@23.2.0)(vite@8.0.16(@types/node@20.19.41)(yaml@2.9.0)): + dependencies: + '@vitest/expect': 4.1.8 + '@vitest/mocker': 4.1.8(vite@8.0.16(@types/node@20.19.41)(yaml@2.9.0)) + '@vitest/pretty-format': 4.1.8 + '@vitest/runner': 4.1.8 + '@vitest/snapshot': 4.1.8 + '@vitest/spy': 4.1.8 + '@vitest/utils': 4.1.8 + es-module-lexer: 2.1.0 + expect-type: 1.3.0 + magic-string: 0.30.21 + obug: 2.1.2 + pathe: 2.0.3 + picomatch: 4.0.4 + std-env: 4.1.0 + tinybench: 2.9.0 + tinyexec: 1.2.4 + tinyglobby: 0.2.17 + tinyrainbow: 3.1.0 + vite: 8.0.16(@types/node@20.19.41)(yaml@2.9.0) + why-is-node-running: 2.3.0 + optionalDependencies: + '@types/node': 20.19.41 + jsdom: 23.2.0 + transitivePeerDependencies: + - msw + void-elements@2.0.1: {} w3c-xmlserializer@5.0.0: @@ -21729,6 +22399,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + widest-line@3.1.0: dependencies: string-width: 4.2.3 From 6f5e6712666d13cde8a90ef017b510a033eb866a Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 18:23:56 +0530 Subject: [PATCH 4/6] updated command name --- .../src/commands/{migrate => external-migrate}/audit.ts | 0 .../src/commands/{migrate => external-migrate}/convert.ts | 0 .../src/commands/{migrate => external-migrate}/create.ts | 0 .../src/commands/{migrate => external-migrate}/export.ts | 0 .../src/commands/{migrate => external-migrate}/import.ts | 0 .../src/commands/{migrate => external-migrate}/status.ts | 0 6 files changed, 0 insertions(+), 0 deletions(-) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/audit.ts (100%) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/convert.ts (100%) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/create.ts (100%) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/export.ts (100%) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/import.ts (100%) rename packages/contentstack-external-migrate/src/commands/{migrate => external-migrate}/status.ts (100%) diff --git a/packages/contentstack-external-migrate/src/commands/migrate/audit.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/audit.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/audit.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/audit.ts diff --git a/packages/contentstack-external-migrate/src/commands/migrate/convert.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/convert.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/convert.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/convert.ts diff --git a/packages/contentstack-external-migrate/src/commands/migrate/create.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/create.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/create.ts diff --git a/packages/contentstack-external-migrate/src/commands/migrate/export.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/export.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/export.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/export.ts diff --git a/packages/contentstack-external-migrate/src/commands/migrate/import.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/import.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/import.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/import.ts diff --git a/packages/contentstack-external-migrate/src/commands/migrate/status.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/status.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/migrate/status.ts rename to packages/contentstack-external-migrate/src/commands/external-migrate/status.ts From c1d23dfea8342b662dcec9ce7a5bc579daedf166 Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 18:39:38 +0530 Subject: [PATCH 5/6] Updated command --- .../src/commands/external-migrate/create.ts | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts b/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts index a58339976..16be47fe0 100644 --- a/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts +++ b/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts @@ -28,17 +28,12 @@ import { localDateStamp } from '../../lib/local-date'; import { inferWorkspace, patchManifest, stackApiKeyPrefix, toWorkspaceRelative } from '../../lib/manifest'; export default class MigrateCreate extends Command { - static description = 'Convert a legacy export, create a new stack in an organization, and import into it'; + static description = 'Convert a source export, create a new stack in an organization, and import into it'; - static examples = [ - '$ csdx migrate:create --legacy contentful --input ./export.json --org bltOrgUid', - '$ csdx migrate:create -l contentful -i ./export.json --org bltOrgUid --stack-name "My Site"', - '$ CONTENTFUL_MANAGEMENT_TOKEN=... csdx migrate:create -l contentful --space-id SPACE_ID --org bltOrgUid', - ]; + static examples = ['$ csdx migrate:create --source contentful --input ./export.json --org bltOrgUid']; static flags: FlagInput = { source: flags.string({ - char: 'l', description: 'Legacy CMS source (contentful)', required: true, options: ['contentful'], @@ -61,7 +56,7 @@ export default class MigrateCreate extends Command { description: 'Include archived entries in export (with --space-id)', default: false, }), - 'org-uid': flags.string({ + org: flags.string({ description: 'Contentstack organization uid — a new stack is created here (prompts with a list if omitted)', }), output: flags.string({ @@ -90,7 +85,7 @@ export default class MigrateCreate extends Command { }), input: flags.string({ char: 'i', - description: 'Path to legacy export JSON (use this OR --space-id)', + description: 'Path to source export JSON (use this OR --space-id)', hidden: true, }), 'cf-org-id': flags.string({ @@ -117,7 +112,7 @@ export default class MigrateCreate extends Command { const { flags } = await this.parse(MigrateCreate); try { - const adapter = getAdapter(flags.legacy); + const adapter = getAdapter(flags.source); // Destination Contentstack org (shared across every migrated space). let orgUid = flags.org; @@ -543,7 +538,7 @@ export default class MigrateCreate extends Command { await patchManifest( workspace, { - legacy: flags.legacy, + legacy: flags.source, convert: { completedAt: new Date().toISOString(), bundleDir: toWorkspaceRelative(workspace, mainBundleDir), @@ -557,7 +552,7 @@ export default class MigrateCreate extends Command { status: 'completed', }, }, - { legacy: flags.legacy }, + { legacy: flags.source }, ); this.log(`✓ Migration complete`); From 47d8e8ef89602711c366057032b6061dbec1aefb Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 18:55:33 +0530 Subject: [PATCH 6/6] Reverted command name from external:migrate to migrate --- .../src/commands/{external-migrate => migrate}/audit.ts | 0 .../src/commands/{external-migrate => migrate}/convert.ts | 0 .../src/commands/{external-migrate => migrate}/create.ts | 0 .../src/commands/{external-migrate => migrate}/export.ts | 0 .../src/commands/{external-migrate => migrate}/import.ts | 0 .../src/commands/{external-migrate => migrate}/status.ts | 0 packages/contentstack-external-migrate/tsconfig.tsbuildinfo | 2 +- 7 files changed, 1 insertion(+), 1 deletion(-) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/audit.ts (100%) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/convert.ts (100%) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/create.ts (100%) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/export.ts (100%) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/import.ts (100%) rename packages/contentstack-external-migrate/src/commands/{external-migrate => migrate}/status.ts (100%) diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/audit.ts b/packages/contentstack-external-migrate/src/commands/migrate/audit.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/audit.ts rename to packages/contentstack-external-migrate/src/commands/migrate/audit.ts diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/convert.ts b/packages/contentstack-external-migrate/src/commands/migrate/convert.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/convert.ts rename to packages/contentstack-external-migrate/src/commands/migrate/convert.ts diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/create.ts b/packages/contentstack-external-migrate/src/commands/migrate/create.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/create.ts rename to packages/contentstack-external-migrate/src/commands/migrate/create.ts diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/export.ts b/packages/contentstack-external-migrate/src/commands/migrate/export.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/export.ts rename to packages/contentstack-external-migrate/src/commands/migrate/export.ts diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/import.ts b/packages/contentstack-external-migrate/src/commands/migrate/import.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/import.ts rename to packages/contentstack-external-migrate/src/commands/migrate/import.ts diff --git a/packages/contentstack-external-migrate/src/commands/external-migrate/status.ts b/packages/contentstack-external-migrate/src/commands/migrate/status.ts similarity index 100% rename from packages/contentstack-external-migrate/src/commands/external-migrate/status.ts rename to packages/contentstack-external-migrate/src/commands/migrate/status.ts diff --git a/packages/contentstack-external-migrate/tsconfig.tsbuildinfo b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo index 07e9c07fa..06e254b83 100644 --- a/packages/contentstack-external-migrate/tsconfig.tsbuildinfo +++ b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo @@ -1 +1 @@ -{"root":["./src/index.ts","./src/adapters/registry.ts","./src/adapters/types.ts","./src/adapters/contentful/convert.ts","./src/adapters/contentful/export.ts","./src/adapters/contentful/index.ts","./src/adapters/contentful/validator.ts","./src/commands/migrate/audit.ts","./src/commands/migrate/convert.ts","./src/commands/migrate/create.ts","./src/commands/migrate/export.ts","./src/commands/migrate/import.ts","./src/commands/migrate/status.ts","./src/lib/bundle.ts","./src/lib/clear-import-state.ts","./src/lib/contentful-cli-spawn.ts","./src/lib/conversion-summary.ts","./src/lib/create-stack.ts","./src/lib/csdx-spawn.ts","./src/lib/local-date.ts","./src/lib/log.ts","./src/lib/manifest.ts","./src/lib/parse-json-loose.ts","./src/services/contentful/config.ts","./src/services/contentful/constants.ts","./src/services/contentful/content-type-creator.ts","./src/services/contentful/contentful.service.ts","./src/services/contentful/extension.service.ts","./src/services/contentful/market-app.utils.ts","./src/services/contentful/marketplace.service.ts","./src/services/contentful/releases.ts","./src/services/contentful/scheduled.ts","./src/services/contentful/tasks.ts","./src/services/contentful/types.ts","./src/services/contentful/users.ts","./src/services/contentful/workflows.ts","./src/services/contentful/contentful/jsonrte.ts","./src/services/contentful/contentful/markdown.ts","./src/services/contentful/contentful/roles.ts","./src/services/contentful/contentful/taxonomy.service.ts","./src/services/contentful/mapper/write.ts","./src/services/contentful/migration-contentful/index.js","./src/services/contentful/migration-contentful/libs/contenttypemapper.js","./src/services/contentful/migration-contentful/libs/createinitialmapper.js","./src/services/contentful/migration-contentful/libs/extractcontenttypes.js","./src/services/contentful/migration-contentful/libs/extractlocale.js","./src/services/contentful/migration-contentful/libs/extracttaxonomy.js","./src/services/contentful/migration-contentful/utils/helper.js","./src/services/contentful/prompts/master-locale.ts","./src/services/contentful/utils/custom-logger.utils.ts","./src/services/contentful/utils/index.ts"],"version":"5.9.3"} \ No newline at end of file +{"root":["./src/index.ts","./src/adapters/registry.ts","./src/adapters/types.ts","./src/adapters/contentful/convert.ts","./src/adapters/contentful/export.ts","./src/adapters/contentful/index.ts","./src/adapters/contentful/validator.ts","./src/commands/external-migrate/audit.ts","./src/commands/external-migrate/convert.ts","./src/commands/external-migrate/create.ts","./src/commands/external-migrate/export.ts","./src/commands/external-migrate/import.ts","./src/commands/external-migrate/status.ts","./src/lib/bundle.ts","./src/lib/clear-import-state.ts","./src/lib/contentful-cli-spawn.ts","./src/lib/conversion-summary.ts","./src/lib/create-stack.ts","./src/lib/csdx-spawn.ts","./src/lib/local-date.ts","./src/lib/log.ts","./src/lib/manifest.ts","./src/lib/parse-json-loose.ts","./src/services/contentful/config.ts","./src/services/contentful/constants.ts","./src/services/contentful/content-type-creator.ts","./src/services/contentful/contentful.service.ts","./src/services/contentful/extension.service.ts","./src/services/contentful/market-app.utils.ts","./src/services/contentful/marketplace.service.ts","./src/services/contentful/releases.ts","./src/services/contentful/scheduled.ts","./src/services/contentful/tasks.ts","./src/services/contentful/types.ts","./src/services/contentful/users.ts","./src/services/contentful/workflows.ts","./src/services/contentful/contentful/jsonrte.ts","./src/services/contentful/contentful/markdown.ts","./src/services/contentful/contentful/roles.ts","./src/services/contentful/contentful/taxonomy.service.ts","./src/services/contentful/mapper/write.ts","./src/services/contentful/migration-contentful/index.js","./src/services/contentful/migration-contentful/libs/contenttypemapper.js","./src/services/contentful/migration-contentful/libs/createinitialmapper.js","./src/services/contentful/migration-contentful/libs/extractcontenttypes.js","./src/services/contentful/migration-contentful/libs/extractlocale.js","./src/services/contentful/migration-contentful/libs/extracttaxonomy.js","./src/services/contentful/migration-contentful/utils/helper.js","./src/services/contentful/prompts/master-locale.ts","./src/services/contentful/utils/custom-logger.utils.ts","./src/services/contentful/utils/index.ts"],"version":"5.9.3"} \ No newline at end of file