From 21239371614fe6b7dbe7d2dee312e8cc0003e4f0 Mon Sep 17 00:00:00 2001 From: Harshitha D Date: Mon, 1 Jun 2026 15:00:42 +0530 Subject: [PATCH 01/15] Update release-production-plugins.yml --- .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 81d5f1c19..9c42bb26f 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -151,6 +151,14 @@ jobs: package: ./packages/contentstack-branches/package.json tag: latest + # Apps CLI + - name: Publishing apps-cli (Production) + uses: JS-DevTools/npm-publish@v3 + with: + token: ${{ secrets.NPM_TOKEN }} + package: ./packages/contentstack-apps-cli/package.json + tag: latest + # Query Export - name: Publishing query export (Production) uses: JS-DevTools/npm-publish@v3 From 6744e15ce09c4402cb8dd0a95069de3835b4f21e Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Tue, 9 Jun 2026 14:46:54 +0530 Subject: [PATCH 02/15] Fixed issue for import skipping webhooks more than 5 --- .talismanrc | 98 +------------------ packages/contentstack-bootstrap/README.md | 2 +- packages/contentstack-bootstrap/package.json | 4 +- packages/contentstack-clone/README.md | 2 +- packages/contentstack-clone/package.json | 4 +- packages/contentstack-content-type/README.md | 12 +-- packages/contentstack-import/README.md | 2 +- packages/contentstack-import/package.json | 2 +- .../src/import/modules/webhooks.ts | 12 ++- .../test/unit/import/modules/webhooks.test.ts | 66 +++++++++++++ packages/contentstack-seed/package.json | 4 +- pnpm-lock.yaml | 38 ++++--- pnpm-workspace.yaml | 1 + 13 files changed, 114 insertions(+), 133 deletions(-) diff --git a/.talismanrc b/.talismanrc index abd4b976c..d4bce5008 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,96 +1,6 @@ fileignoreconfig: - - filename: packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json - checksum: a2784a3cb21780434958478d478dcb91d2d9a3a8025567d90fe8d74e9141b052 - - filename: packages/contentstack-migrate-rte/test/dummy/entriesResponse.json - checksum: 691f3dcfbbcf69fd21e109a0d7003bdb500af2d0253bb7d7e8a0636d8f2a58f4 - - filename: pnpm-lock.yaml - checksum: e0fb4541c1f31354c8899eba61bc579942a4c1057658973b4691c2890c98ff93 - - filename: packages/contentstack-bulk-operations/src/utils/bulk-publish-url-generator.ts - checksum: 052d811adb5da9bac8c70e5b3dc4ddf700d5aea274dd2aa90a2df374118fbd26 - - filename: packages/contentstack-bulk-operations/src/utils/client.ts - checksum: efdada21291db6d66e3114b7408163dee4cafe6ddb3904f02aa67140a1a89bb6 - - filename: packages/contentstack-bulk-operations/test/unit/core/index.test.ts - checksum: 0d789258f5a9664e8a7dc5f5b23da846d0eaf8c52638ff20fb1f26104d3f9f8d - - filename: packages/contentstack-migrate-rte/README.md - checksum: 3810817d905405de86814af35fc0f0a6712cacd70f43223869b4f0599b6e579c - - filename: packages/contentstack-bulk-operations/test/unit/messages/index.test.ts - checksum: e86e76db4f4afc899ae2a4742627a71a7d227a7139014361b9d83de6154b3c7a - - filename: packages/contentstack-bulk-operations/test/unit/base-bulk-command.test.ts - checksum: 18684a596707865e671f1ee57b4819cb3f4b4f2633d6c49f7f4b6ce09391359f - - filename: packages/contentstack-bulk-operations/src/base-bulk-command.ts - checksum: 34907f0e00c40096cbe517b680a24fdf57caac351e45bc44b96e41987e619b67 - - filename: packages/contentstack-bulk-operations/test/unit/services/index.test.ts - checksum: aae62ba072551bedf869ec7b1f6bf90238bc039336f37e7c583da8ba0637f9be - - filename: packages/contentstack-bulk-operations/test/unit/utils/bulk-operation-log-handler.test.ts - checksum: cec7ba35157c6516d67931d41deb57b7a156d9fc05dbab93ca5116e89b95c820 - - filename: packages/contentstack-bulk-operations/test/unit/utils/client.test.ts - checksum: 178611b1f153b46a0020da22cc18293d5bd9c539ec2e54557fd8c1a3c2e796b3 - - filename: packages/contentstack-bulk-operations/test/unit/services/taxonomy-service.test.ts - checksum: 33af8ee198158dd92916d76207e172b5316864d063a6929526ca259b459ec79a - - filename: packages/contentstack-cli-tsgen/src/commands/tsgen.ts - checksum: 054ea78f765edca62c785714cf8962df4fb91529c0851439d1ed61e963467408 - - filename: packages/contentstack-cli-cm-regex-validate/messages/index.json - checksum: 044b311bde624dcc3c12434174d6027dbb6b62eefdfae120570a1748f806c60c - - filename: packages/contentstack-cli-tsgen/AGENTS.md - checksum: 75b4f1414b547d0bd83df5ed4fb80020acc0ed849619bed2639491b565be7a1b - - filename: packages/contentstack-bulk-operations/eslint.config.js - checksum: 0d93d7f660fe4cd6d62348c85ac10bf7c66018ea0b8e3e6d5a53419433f15867 - - filename: packages/contentstack-cli-cm-regex-validate/test/utils/connect-stack.test.ts - checksum: 8fcd1dc2770a2a3f55ba462b7ffd3fc2e3cf45342c63e5b6dc5c1db4c2bd9738 - - filename: packages/contentstack-bulk-operations/test/unit/utils/validators.test.ts - checksum: 69cf394584e325b972d6825879de7c31b9dd1bd50b0bb057aecb739258ac0317 - - filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-assets.test.ts - checksum: c099c628c7ae1a40a9ca5580de0afa8309a611b2dff7837b10bb8f70eb92f8b3 - - filename: packages/contentstack-bulk-operations/test/unit/core/operation-executor.test.ts - checksum: 97f0ddd4d547f37a8d93650aa1e8af4ef4dbce343dd51853e34bbde6107cd725 - - filename: packages/contentstack-cli-tsgen/src/lib/helper.ts - checksum: a7ead0030ead9d15b6b6e9623f61e7def77b00325e3988f0e3d73a145180dedc - - filename: packages/contentstack-migrate-rte/test/utils/index.js - checksum: bc2a509a86174aecbaf0bfc44d6ad3afabe57ef871ec91b796d498e00177e3f0 - - filename: packages/contentstack-cli-cm-regex-validate/skills/code-review/SKILL.md - checksum: b92ea1c8e2f901c9e1e60f6ef6986d348a40a7869c236e3c1f3ca53b553dbb8e - - filename: packages/contentstack-migrate-rte/test/commands/json-migration.test.js - checksum: 56e10f1e0d2794fa13bcf5a6bb3e868b28277df1762fb3df0a8a82ad44f8045b - - filename: packages/contentstack-bulk-operations/test/unit/utils/interactive.test.ts - checksum: 3ee0ff5a74929346bfe997aeb977b4e93d398ea63892efc5f85e0b51a21074f6 - - filename: packages/contentstack-bulk-operations/src/core/operation-executor.ts - checksum: 46295f495f007ad291787133936c5af3c76838d72f2be0de9c235bb644d6f905 - - filename: packages/contentstack-bulk-operations/src/utils/batch-queue-handler.ts - checksum: d1d031242b99f5c738e2f4587ca2f5f3e96373e479ebaf4d93b2f98152943593 - - filename: packages/contentstack-bulk-operations/src/messages/index.ts - checksum: 2d904462af6dc3ddc00ae6bb4433c846500ddfecee5a9e1fb1c236bd598a2ee1 - - filename: packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js - checksum: a069c50d5152022a0957d5f597158e2d8c74803b3d24ff6bbbe3b09f0e9053e2 - - filename: packages/contentstack-bulk-operations/test/unit/utils/config-builder.test.ts - checksum: d46757d3bb98d76845e83d4585f269b62b1fa9cb5bee3215b88fed38fd1dbb53 - - filename: packages/contentstack-bulk-operations/src/utils/revert-retry-handler.ts - checksum: 76899098d74de1dd20f1b08401c65f23b2bec584c051388e63f70f3d24a6d1a4 - - filename: packages/contentstack-bulk-operations/src/utils/interactive.ts - checksum: ba4fdd6f17c7d43cae639158f82dea3065ba8a368ddce8c476bfe49a6945e5c1 - - filename: packages/contentstack-bulk-operations/test/unit/utils/taxonomy-interactive-select.test.ts - checksum: 34a085702d01d7e16e1507ea1e434b374c2cba5dd884aad5996c5484412897c0 - - filename: packages/contentstack-bulk-operations/src/core/rate-limiter.ts - checksum: 81e3d624166ab34a589e3e8527b9e57ebc7e7f4374efd0483b1df0dd11788b68 - - filename: packages/contentstack-bulk-operations/src/interfaces/index.ts - checksum: 0ff6bbc372758a20783f36bd391ba9d500530433fde472a1aacaf54f6b4a1688 - - filename: packages/contentstack-bulk-operations/test/unit/utils/operation-confirmation.test.ts - checksum: 043185e56361ffae2116a2af5a4da16986816ad054fd94f189269e5b6150609e - - filename: packages/contentstack-cli-cm-regex-validate/skills/contentstack-cli/SKILL.md - checksum: 9420a516ba6046b05748683c90e3817d091cef76c46e029cb3745d6c0c350838 - - filename: packages/contentstack-cli-cm-regex-validate/skills/dev-workflow/SKILL.md - checksum: b423dd35d0f7f0f25315e2a30198669b50db350f0ab2f917a1d3c4fbb0af0534 - - filename: packages/contentstack-bulk-operations/test/unit/commands/bulk-entries.test.ts - checksum: 845512e660813a6d7d96efd89dcff6eba4591a3f9ff371dc9b1aad38921e18a6 - - filename: packages/contentstack-bulk-operations/test/unit/utils/revert-retry-handler.test.ts - checksum: 078f9633edb53204ed14ebe3cf6b1d6063729dd37b7ee1c6e936a344ceabebda - - filename: packages/contentstack-migrate-rte/src/lib/util/index.js - checksum: 7d85f342c7fd7875713cebfae83f68d8592cc732a15cca48ddecbeae818cb4c5 - - filename: packages/contentstack-cli-cm-regex-validate/src/utils/connect-stack.ts - checksum: c77c7c25efc6d043b26e3dd0a516e22ac50142fa9fa5ff3a53a7c9fb8f24ebd6 - - filename: packages/contentstack-bulk-operations/src/utils/config-builder.ts - checksum: a7b5259ad719b8c5929f9fea3783bdc92610dc2549426204c1bb6813e7e1112a - - filename: packages/contentstack-bulk-operations/README.md - checksum: 169110e7c6159632f19dc16e17dcb5bac22e5d6880339b35ba076a2fe0d75266 - - filename: packages/contentstack-bulk-operations/test/unit/utils/batch-queue-handler.test.ts - checksum: c91f1822b5cfd34a4f4ba05dfc56c10a66e0f5ddb55a1cf5b454fa9549ea0052 + - filename: packages/contentstack-import/src/import/modules/webhooks.ts + checksum: 8c9527f966fe24debfb36d96a280ac3b2dd6494a58128380c69d7475e595436d + - filename: packages/contentstack-import/test/unit/import/modules/webhooks.test.ts + checksum: 3924a3e38211b8554f25365fe3100cb83361d03370fdaa77e5c7f9e74abafcee version: '1.0' diff --git a/packages/contentstack-bootstrap/README.md b/packages/contentstack-bootstrap/README.md index 49894909c..7e67fccb1 100644 --- a/packages/contentstack-bootstrap/README.md +++ b/packages/contentstack-bootstrap/README.md @@ -15,7 +15,7 @@ $ npm install -g @contentstack/cli-cm-bootstrap $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-bootstrap/1.19.3 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-bootstrap/1.19.6 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-bootstrap/package.json b/packages/contentstack-bootstrap/package.json index d74636f88..46c7b8fcb 100644 --- a/packages/contentstack-bootstrap/package.json +++ b/packages/contentstack-bootstrap/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-bootstrap", "description": "Bootstrap contentstack apps", - "version": "1.19.5", + "version": "1.19.6", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "scripts": { @@ -16,7 +16,7 @@ "test:report": "nyc --reporter=lcov mocha \"test/**/*.test.js\"" }, "dependencies": { - "@contentstack/cli-cm-seed": "~1.15.5", + "@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", diff --git a/packages/contentstack-clone/README.md b/packages/contentstack-clone/README.md index 37fd87a53..d6c209f33 100644 --- a/packages/contentstack-clone/README.md +++ b/packages/contentstack-clone/README.md @@ -16,7 +16,7 @@ $ npm install -g @contentstack/cli-cm-clone $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-clone/1.21.4 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-clone/1.21.7 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-clone/package.json b/packages/contentstack-clone/package.json index 06fe0340a..7903cbdcd 100644 --- a/packages/contentstack-clone/package.json +++ b/packages/contentstack-clone/package.json @@ -1,13 +1,13 @@ { "name": "@contentstack/cli-cm-clone", "description": "Contentstack stack clone plugin", - "version": "1.21.6", + "version": "1.21.7", "author": "Contentstack", "bugs": "https://github.com/rohitmishra209/cli-cm-clone/issues", "dependencies": { "@colors/colors": "^1.6.0", "@contentstack/cli-cm-export": "~1.25.1", - "@contentstack/cli-cm-import": "~1.33.2", + "@contentstack/cli-cm-import": "~1.33.3", "@contentstack/cli-command": "~1.8.3", "@contentstack/cli-utilities": "~1.18.4", "@oclif/core": "^4.11.4", diff --git a/packages/contentstack-content-type/README.md b/packages/contentstack-content-type/README.md index 429b3bedf..8e5615c93 100644 --- a/packages/contentstack-content-type/README.md +++ b/packages/contentstack-content-type/README.md @@ -85,7 +85,7 @@ EXAMPLES $ csdx content-type:audit --alias "management token" --content-type "home_page" ``` -_See code: [src/commands/content-type/audit.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/audit.ts)_ +_See code: [src/commands/content-type/audit.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/audit.ts)_ ## `csdx content-type:compare` @@ -115,7 +115,7 @@ EXAMPLES $ csdx content-type:compare --alias "management token" --content-type "home_page" --left # --right # ``` -_See code: [src/commands/content-type/compare.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/compare.ts)_ +_See code: [src/commands/content-type/compare.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare.ts)_ ## `csdx content-type:compare-remote` @@ -137,7 +137,7 @@ EXAMPLES $ csdx content-type:compare-remote --origin-stack "xxxxxxxxxxxxxxxxxxx" --remote-stack "xxxxxxxxxxxxxxxxxxx" -content-type "home_page" ``` -_See code: [src/commands/content-type/compare-remote.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/compare-remote.ts)_ +_See code: [src/commands/content-type/compare-remote.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/compare-remote.ts)_ ## `csdx content-type:details` @@ -166,7 +166,7 @@ EXAMPLES $ csdx content-type:details --alias "management token" --content-type "home_page" --no-path ``` -_See code: [src/commands/content-type/details.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/details.ts)_ +_See code: [src/commands/content-type/details.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/details.ts)_ ## `csdx content-type:diagram` @@ -201,7 +201,7 @@ EXAMPLES $ csdx content-type:diagram --alias "management token" --output "content-model.dot" --type "dot" ``` -_See code: [src/commands/content-type/diagram.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/diagram.ts)_ +_See code: [src/commands/content-type/diagram.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/diagram.ts)_ ## `csdx content-type:list` @@ -230,5 +230,5 @@ EXAMPLES $ csdx content-type:list --alias "management token" --order modified ``` -_See code: [src/commands/content-type/list.ts](https://github.com/contentstack/contentstack-cli-content-type/blob/v1.3.0/src/commands/content-type/list.ts)_ +_See code: [src/commands/content-type/list.ts](https://github.com/contentstack/cli-plugins/blob/main/packages/contentstack-content-type/src/commands/content-type/list.ts)_ diff --git a/packages/contentstack-import/README.md b/packages/contentstack-import/README.md index cfa11630a..63f52eb29 100644 --- a/packages/contentstack-import/README.md +++ b/packages/contentstack-import/README.md @@ -47,7 +47,7 @@ $ npm install -g @contentstack/cli-cm-import $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-import/1.33.0 darwin-arm64 node-v24.14.0 +@contentstack/cli-cm-import/1.33.3 darwin-arm64 node-v24.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-import/package.json b/packages/contentstack-import/package.json index a00be9855..230e2b8ac 100644 --- a/packages/contentstack-import/package.json +++ b/packages/contentstack-import/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-import", "description": "Contentstack CLI plugin to import content into stack", - "version": "1.33.2", + "version": "1.33.3", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { diff --git a/packages/contentstack-import/src/import/modules/webhooks.ts b/packages/contentstack-import/src/import/modules/webhooks.ts index b78aec5a8..3be9561a5 100644 --- a/packages/contentstack-import/src/import/modules/webhooks.ts +++ b/packages/contentstack-import/src/import/modules/webhooks.ts @@ -1,5 +1,4 @@ import isEmpty from 'lodash/isEmpty'; -import values from 'lodash/values'; import { join } from 'node:path'; import { log, handleAndLogError } from '@contentstack/cli-utilities'; @@ -93,7 +92,16 @@ export default class ImportWebhooks extends BaseClass { return; } - const apiContent = values(this.webhooks); + // Attach each webhook's UID (the JSON key) onto its body. Webhooks are keyed by + // UID in webhooks.json, but the body may not carry a `uid` field. Deriving it from + // the key keeps the dedup mapper keyed by a unique, defined UID — otherwise every + // webhook collapses onto the same `undefined` key and gets falsely skipped as a + // duplicate once the first one is created. The `uid` is stripped before the create + // API call (see `omit(apiData, ['uid'])` in base-class), so this is import-only. + const apiContent = Object.entries(this.webhooks).map(([uid, webhook]) => ({ + ...(webhook as Record), + uid, + })); log.debug(`Starting to import ${apiContent.length} webhooks`, this.importConfig.context); const onSuccess = ({ response, apiData: { uid, name } = { uid: null, name: '' } }: any) => { diff --git a/packages/contentstack-import/test/unit/import/modules/webhooks.test.ts b/packages/contentstack-import/test/unit/import/modules/webhooks.test.ts index e14ead622..15b393004 100644 --- a/packages/contentstack-import/test/unit/import/modules/webhooks.test.ts +++ b/packages/contentstack-import/test/unit/import/modules/webhooks.test.ts @@ -2887,4 +2887,70 @@ describe('ImportWebhooks - Simple Tests', () => { expect((importWebhooks as any).failedWebhooks.length).to.equal(1); }); }); + + describe('UID derivation from JSON key (regression)', () => { + it('attaches the JSON key as uid even when the webhook body has no uid', async () => { + // Mirrors the user's bundle: webhooks keyed by uid, but no `uid` in the body. + (importWebhooks as any).webhooks = { + '09Ah2QxtkCSKeIRCDYnfkF': { name: 'KB Revalidation' }, + '6fikvC9O4jTp8LNMSV006u': { name: 'DT documentation revalidater' }, + }; + + let captured: any[] = []; + sinon.stub(importWebhooks as any, 'makeConcurrentCall').callsFake(async (config: any) => { + captured = config.apiContent; + }); + + await (importWebhooks as any).importWebhooks(); + + expect(captured).to.have.length(2); + expect(captured[0].uid).to.equal('09Ah2QxtkCSKeIRCDYnfkF'); + expect(captured[1].uid).to.equal('6fikvC9O4jTp8LNMSV006u'); + // Distinct uids — not all collapsed onto a single `undefined` key. + expect(new Set(captured.map((w: any) => w.uid)).size).to.equal(2); + }); + + it('does not falsely skip later webhooks after the first is created', async () => { + // Bodies have no `uid`. Before the fix, the first success wrote + // webhookUidMapper["undefined"], so every later webhook was serialized as a + // "duplicate" and skipped. The fix keys the mapper by the unique JSON key. + (importWebhooks as any).webhooks = { + uidA: { name: 'Webhook A' }, + uidB: { name: 'Webhook B' }, + uidC: { name: 'Webhook C' }, + }; + + // onSuccess persists the mapper via fsUtil.writeFile — stub the real write. + const utils = require('../../../../src/utils'); + sinon.stub(utils.fsUtil, 'writeFile'); + + const created: string[] = []; + const skipped: string[] = []; + + sinon.stub(importWebhooks as any, 'makeConcurrentCall').callsFake(async (config: any) => { + const { serializeData, resolve } = config.apiParams; + // Process sequentially so the first success writes the mapper BEFORE the + // next item is serialized — the exact ordering that triggered the bug. + for (const apiData of config.apiContent) { + const opts = serializeData({ apiData, entity: 'create-webhooks' }); + if (opts.entity === undefined) { + skipped.push(apiData.name); + continue; + } + resolve({ response: { uid: `new-${apiData.uid}` }, apiData: opts.apiData }); + created.push(apiData.name); + } + }); + + await (importWebhooks as any).importWebhooks(); + + expect(skipped).to.deep.equal([]); // none falsely skipped + expect(created).to.deep.equal(['Webhook A', 'Webhook B', 'Webhook C']); + expect((importWebhooks as any).webhookUidMapper).to.deep.equal({ + uidA: 'new-uidA', + uidB: 'new-uidB', + uidC: 'new-uidC', + }); + }); + }); }); diff --git a/packages/contentstack-seed/package.json b/packages/contentstack-seed/package.json index 2794ac197..e3dfddb59 100644 --- a/packages/contentstack-seed/package.json +++ b/packages/contentstack-seed/package.json @@ -1,11 +1,11 @@ { "name": "@contentstack/cli-cm-seed", "description": "create a Stack from existing content types, entries, assets, etc.", - "version": "1.15.5", + "version": "1.15.6", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { - "@contentstack/cli-cm-import": "~1.33.2", + "@contentstack/cli-cm-import": "~1.33.3", "@contentstack/cli-command": "~1.8.3", "@contentstack/cli-utilities": "~1.18.4", "inquirer": "8.2.7", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 2b72a9689..6e6e6e993 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -7,6 +7,7 @@ settings: overrides: tmp: 0.2.7 uuid: 14.0.0 + lodash: 4.18.1 importers: @@ -40,7 +41,7 @@ importers: specifier: ^4.1.2 version: 4.1.2 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 shelljs: specifier: ^0.10.0 @@ -143,7 +144,7 @@ importers: specifier: ^11.3.0 version: 11.3.5 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 winston: specifier: ^3.19.0 @@ -201,7 +202,7 @@ importers: packages/contentstack-bootstrap: dependencies: '@contentstack/cli-cm-seed': - specifier: ~1.15.5 + specifier: ~1.15.6 version: link:../contentstack-seed '@contentstack/cli-command': specifier: ~1.8.3 @@ -280,7 +281,7 @@ importers: specifier: ^6.0.2 version: 6.0.2 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 devDependencies: chai: @@ -332,7 +333,7 @@ importers: specifier: ^1.30.3 version: 1.30.3(debug@4.4.3) lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 uuid: specifier: 14.0.0 @@ -444,7 +445,7 @@ importers: specifier: 8.2.7 version: 8.2.7(@types/node@22.19.19) lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 winston: specifier: ^3.19.0 @@ -639,7 +640,7 @@ importers: specifier: ~1.25.1 version: link:../contentstack-export '@contentstack/cli-cm-import': - specifier: ~1.33.2 + specifier: ~1.33.3 version: link:../contentstack-import '@contentstack/cli-command': specifier: ~1.8.3 @@ -657,7 +658,7 @@ importers: specifier: 8.2.7 version: 8.2.7(@types/node@14.18.63) lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 merge: specifier: ^2.1.1 @@ -836,7 +837,7 @@ importers: specifier: ^4.1.2 version: 4.1.2 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 merge: specifier: ^2.1.1 @@ -1021,7 +1022,7 @@ importers: specifier: ^11.3.3 version: 11.3.5 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 marked: specifier: ^4.3.0 @@ -1106,7 +1107,7 @@ importers: specifier: ^11.3.0 version: 11.3.5 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 merge: specifier: ^2.1.1 @@ -1191,7 +1192,7 @@ importers: specifier: ^1.5.0 version: 1.5.0 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 omit-deep-lodash: specifier: ^1.1.7 @@ -1337,7 +1338,7 @@ importers: specifier: ^3.7.2 version: 3.7.2 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 merge: specifier: ^2.1.1 @@ -1428,7 +1429,7 @@ importers: packages/contentstack-seed: dependencies: '@contentstack/cli-cm-import': - specifier: ~1.33.2 + specifier: ~1.33.3 version: link:../contentstack-import '@contentstack/cli-command': specifier: ~1.8.3 @@ -1501,7 +1502,7 @@ importers: specifier: ^4.11.4 version: 4.11.4 lodash: - specifier: ^4.18.1 + specifier: 4.18.1 version: 4.18.1 mkdirp: specifier: ^1.0.4 @@ -6945,9 +6946,6 @@ packages: lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} - lodash@4.17.23: - resolution: {integrity: sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==} - lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} @@ -19189,8 +19187,6 @@ snapshots: lodash.uniq@4.5.0: {} - lodash@4.17.23: {} - lodash@4.18.1: {} log-symbols@1.0.2: @@ -19800,7 +19796,7 @@ snapshots: omit-deep-lodash@1.1.7: dependencies: - lodash: 4.17.23 + lodash: 4.18.1 on-finished@2.4.1: dependencies: diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 1bc3b94a2..aced307a7 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -3,3 +3,4 @@ packages: overrides: tmp: 0.2.7 uuid: 14.0.0 + lodash: 4.18.1 From 96ac7b6bc4290e66e74621e62642ce7909eb6ef5 Mon Sep 17 00:00:00 2001 From: Dhaval Jain Date: Wed, 10 Jun 2026 14:56:15 +0530 Subject: [PATCH 03/15] Update README.md From 7d020d22f8ace49abf84d1bae2d5f358120f2e29 Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 17:57:13 +0530 Subject: [PATCH 04/15] 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 05/15] 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 06/15] 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 07/15] 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 08/15] 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 09/15] 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 From 2ca8ba787109c87c32ce27cf0bcd7560d0375528 Mon Sep 17 00:00:00 2001 From: naman-contentstack Date: Wed, 10 Jun 2026 19:20:46 +0530 Subject: [PATCH 10/15] Update release tag from latest to alpha for contentstack-external-migrate package --- .github/workflows/release-production-plugins.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 1eeaedd10..648f67163 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -197,7 +197,7 @@ jobs: with: token: ${{ secrets.NPM_TOKEN }} package: ./packages/contentstack-external-migrate/package.json - tag: latest + tag: alpha - name: Create Production Release id: create_release From 6a9f78f122e7d1328ad3806671ca9230a3290740 Mon Sep 17 00:00:00 2001 From: naman-contentstack Date: Wed, 10 Jun 2026 19:30:31 +0530 Subject: [PATCH 11/15] Add public access to alpha release tag for contentstack-external-migrate package --- .github/workflows/release-production-plugins.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 648f67163..44ef35898 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -198,6 +198,7 @@ jobs: token: ${{ secrets.NPM_TOKEN }} package: ./packages/contentstack-external-migrate/package.json tag: alpha + access: public - name: Create Production Release id: create_release From 790187bae4de539ba453110a9299c0851cba573e Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 20:24:30 +0530 Subject: [PATCH 12/15] Updated management token to source token --- .github/workflows/release-production-plugins.yml | 1 - packages/contentstack-external-migrate/package.json | 2 +- .../src/commands/migrate/create.ts | 6 +++--- 3 files changed, 4 insertions(+), 5 deletions(-) diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 44ef35898..648f67163 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -198,7 +198,6 @@ jobs: token: ${{ secrets.NPM_TOKEN }} package: ./packages/contentstack-external-migrate/package.json tag: alpha - access: public - name: Create Production Release id: create_release diff --git a/packages/contentstack-external-migrate/package.json b/packages/contentstack-external-migrate/package.json index 598a3f9af..9582951f7 100644 --- a/packages/contentstack-external-migrate/package.json +++ b/packages/contentstack-external-migrate/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-external-migrate", - "version": "1.0.0-alpha.1", + "version": "1.0.0-alpha.2", "description": "Migrate from external source to Contentstack", "author": "Contentstack", "license": "MIT", diff --git a/packages/contentstack-external-migrate/src/commands/migrate/create.ts b/packages/contentstack-external-migrate/src/commands/migrate/create.ts index 16be47fe0..12aa39932 100644 --- a/packages/contentstack-external-migrate/src/commands/migrate/create.ts +++ b/packages/contentstack-external-migrate/src/commands/migrate/create.ts @@ -139,10 +139,10 @@ export default class MigrateCreate extends Command { // Resolve the Contentful management token (shared) for live-API discovery. let managementToken = - flags['management-token'] ?? process.env.CONTENTFUL_MANAGEMENT_TOKEN ?? readContentfulCliToken(); + flags['source-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)', + 'Source token (not found in --source-token, CONTENTFUL_MANAGEMENT_TOKEN, or source login)', ); } @@ -703,7 +703,7 @@ async function fetchContentfulSpaceName(spaceId?: string, token?: string): Promi /** * Reuse the CMA token saved by `contentful login` (~/.contentfulrc.json), so a - * logged-in user need not pass --management-token. Returns undefined if absent. + * logged-in user need not pass --source-token. Returns undefined if absent. */ function readContentfulCliToken(): string | undefined { try { From a91157474914c2a49d1bd6e5200beb0ef70709f8 Mon Sep 17 00:00:00 2001 From: Netraj Patel Date: Wed, 10 Jun 2026 21:11:59 +0530 Subject: [PATCH 13/15] Updated readme --- .../workflows/release-production-plugins.yml | 2 +- .../contentstack-external-migrate/README.md | 882 +----------------- .../package.json | 2 +- 3 files changed, 42 insertions(+), 844 deletions(-) diff --git a/.github/workflows/release-production-plugins.yml b/.github/workflows/release-production-plugins.yml index 648f67163..1eeaedd10 100644 --- a/.github/workflows/release-production-plugins.yml +++ b/.github/workflows/release-production-plugins.yml @@ -197,7 +197,7 @@ jobs: with: token: ${{ secrets.NPM_TOKEN }} package: ./packages/contentstack-external-migrate/package.json - tag: alpha + tag: latest - name: Create Production Release id: create_release diff --git a/packages/contentstack-external-migrate/README.md b/packages/contentstack-external-migrate/README.md index 99c39c1eb..8458e9ed4 100644 --- a/packages/contentstack-external-migrate/README.md +++ b/packages/contentstack-external-migrate/README.md @@ -1,859 +1,57 @@ -# Contentstack Migrate (`csdx migrate`) +![npm](https://img.shields.io/npm/v/@contentstack/cli-external-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. +## Description -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`). +This is a plugin for [Contentstack's](https://www.contentstack.com/) CLI. +This plugin migrates content from an external/legacy CMS (e.g. Contentful) into Contentstack. It exports the source, converts it into a Contentstack import bundle, creates a new stack in your organization, and imports the content into it. ---- +Source lives in [contentstack/cli-plugins](https://github.com/contentstack/cli-plugins) at `packages/contentstack-external-migrate`. -## What you get +## How to install this plugin -| 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 +```shell +$ csdx plugins:install @contentstack/cli-external-migrate ``` -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/`). +## How to use this plugin -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: + +* [`csdx migrate:create`](#csdx-migratecreate) -- **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. +## `csdx migrate:create` -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. +Convert a source export, create a new stack in an organization, and import into it -> **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` ``` +USAGE + $ csdx migrate:create --source contentful [--space-id ] [--source-token ] [--download-assets] + [--include-drafts] [--include-archived] [--org ] [--output ] [--affix ] [--invite-users] [-y] + [--workspace ] -### 2. Link the migrate plugin +FLAGS + -y, --[no-]yes Skip import confirmation prompts + --affix= [default: CS] Content-type UID prefix + --download-assets Download asset binaries during export (with --space-id) + --include-archived Include archived entries in export (with --space-id) + --include-drafts Include draft entries in export (with --space-id) + --[no-]invite-users 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. + --org= Contentstack organization uid — a new stack is created here (prompts with a list if + omitted) + --output= [default: ./output-dir] Parent output directory; bundle written to /bundle + --source=