diff --git a/.github/config/release.json b/.github/config/release.json index 078a8824bf..a63e81c81e 100755 --- a/.github/config/release.json +++ b/.github/config/release.json @@ -9,7 +9,6 @@ "import": false, "clone": false, "export-to-csv": false, - "migrate-rte": false, "migration": false, "seed": false, "bootstrap": false, diff --git a/.github/workflows/release-beta.yml b/.github/workflows/release-beta.yml index b11f78e37f..736dbe1a3b 100644 --- a/.github/workflows/release-beta.yml +++ b/.github/workflows/release-beta.yml @@ -243,20 +243,6 @@ jobs: package: ./packages/contentstack-export-to-csv/package.json tag: beta - # Migrate RTE - - name: Installing dependencies of migrate rte - id: migrate-rte-installation - if: ${{env.release_releaseAll == 'true' || env.release_plugins_migrate-rte == 'true'}} - working-directory: ./packages/contentstack-migrate-rte - run: npm install - - name: Publishing migrate rte (Beta) - uses: JS-DevTools/npm-publish@v3 - if: ${{ steps.migrate-rte-installation.conclusion == 'success' }} - with: - token: ${{ secrets.NPM_TOKEN }} - package: ./packages/contentstack-migrate-rte/package.json - tag: beta - # Migration - name: Installing dependencies of migration id: migration-installation diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index accc815e98..37bdc7187b 100755 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -230,19 +230,6 @@ jobs: token: ${{ secrets.NPM_TOKEN }} package: ./packages/contentstack-export-to-csv/package.json - # Migrate RTE - - name: Installing dependencies of migrate rte - id: migrate-rte-installation - if: ${{env.release_releaseAll == 'true' || env.release_plugins_migrate-rte == 'true'}} - working-directory: ./packages/contentstack-migrate-rte - run: npm install - - name: Publishing migrate rte - uses: JS-DevTools/npm-publish@v3 - if: ${{ steps.migrate-rte-installation.conclusion == 'success' }} - with: - token: ${{ secrets.NPM_TOKEN }} - package: ./packages/contentstack-migrate-rte/package.json - # Migration - name: Installing dependencies of migration id: migration-installation diff --git a/.github/workflows/unit-test.yml b/.github/workflows/unit-test.yml index e094553fa4..05b9244a97 100644 --- a/.github/workflows/unit-test.yml +++ b/.github/workflows/unit-test.yml @@ -40,10 +40,6 @@ jobs: working-directory: ./packages/contentstack-config run: npm run test - - name: Run tests for Contentstack Migrate RTE - working-directory: ./packages/contentstack-migrate-rte - run: npm run test - - name: Run tests for Contentstack Migration working-directory: ./packages/contentstack-migration run: npm run test diff --git a/.talismanrc b/.talismanrc index eefb4908d6..245e755049 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,6 +1,6 @@ fileignoreconfig: - filename: package-lock.json - checksum: d3b93fad9630655f037e36b78fea3354f1a038988562254afdad0f6e54ece12d + checksum: 40f1c53aad40a1f8d711c5ccdde7d1c147d371618c237e1fec2d313af51edb97 - filename: pnpm-lock.yaml checksum: aa6177859aaa87caf2892e8034657fd485c3abe7c13a833fd28449a1d33fa950 - filename: packages/contentstack-import-setup/test/unit/backup-handler.test.ts @@ -30,7 +30,7 @@ fileignoreconfig: - filename: packages/contentstack-import-setup/test/unit/import-setup.test.ts checksum: 1eee4f461fa5b115894d1806a14af6f45336cbe6c0392f16078bd2877fadff67 - filename: packages/contentstack-import-setup/test/unit/login-handler.test.ts - checksum: e549f9ca3a9aae0d93b7284f7e771d55c0610725ddcb4333612df2f215e92769 + checksum: 258b92de292ab1a99aef277709fb41a95e57ce294eef445f77a9edd3b93b87f4 - filename: packages/contentstack/README.md checksum: 10f580c697d0b70b813428954b946e60609f41c42e78ca95ca3232443e725615 - filename: packages/contentstack-import-setup/test/unit/modules/assets.test.ts @@ -102,13 +102,13 @@ fileignoreconfig: - filename: packages/contentstack-audit/src/modules/workflows.ts checksum: 20d1f1985ea2657d3f9fc41b565a44000cbda47e2a60a576fee2aaff06f49352 - filename: packages/contentstack-audit/src/modules/field_rules.ts - checksum: 3eaca968126c9e0e12115491f7942341124c9962d5285dd1cfb355d9e60c6106 + checksum: f3ec8f44f8dd73601aa8da1207a72335faf0a12d52e792c1da90ba1bdeef38a7 - filename: packages/contentstack-audit/src/modules/entries.ts - checksum: 305af34194771343fee4e1d4bef60d065f1b8d1d8c1059a332f5d6c52e637ff1 + checksum: d8b6aa896aef2a9846f4dbde066d74d5b1e7b5cdbb8b548989616f9af7a8d26b - filename: packages/contentstack-audit/test/unit/base-command.test.ts checksum: b0fa8088fcbb17510fa275bd0dde3f6f4246f2525741c30426f07dd62fe497b0 - filename: packages/contentstack-audit/src/modules/content-types.ts - checksum: ddf7b08e6a80af09c6a7019a637c26089fb76572c7c3d079a8af244b02985f16 + checksum: e325a50db567abc5d0de758767037dbc10bb76501aadda32999bc96e17595d1b - filename: packages/contentstack-import/test/unit/commands/cm/stacks/import.test.ts checksum: b11e57f1b824d405f86438e9e7c59183f8c59b66b42d8d16dbeaf76195a30548 - filename: packages/contentstack-import/test/unit/utils/asset-helper.test.ts @@ -202,5 +202,9 @@ fileignoreconfig: - filename: packages/contentstack-import/test/unit/utils/logger.test.ts checksum: 794e06e657a7337c8f094d6042fb04c779683f97b860efae14e075098d2af024 - filename: packages/contentstack-import-setup/src/import/modules/taxonomies.ts - checksum: 49dd8e754a0d3635585a74e943ab097593f061089a7cddc22683ec6caddbb3c5 + checksum: c1bccc885b3f41f187f150c739b4bbd1608b01f09b0d9be0ad9214127cac071d + - filename: packages/contentstack-import-setup/src/commands/cm/stacks/import-setup.ts + checksum: 06035980b36802260f190af6e63632efe167f5b336693163f59268f3e788fba1 + - filename: packages/contentstack-import-setup/src/utils/constants.ts + checksum: fcfabb4c53ee822e05903db77595413842d656b55e2869bae97bb6c0e0e209c3 version: '1.0' diff --git a/LICENSE b/LICENSE index 25403cd591..aff1142eed 100644 --- a/LICENSE +++ b/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) 2025 Contentstack +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 diff --git a/MIGRATION.md b/MIGRATION.md index 34667b7adb..2eebeba746 100644 --- a/MIGRATION.md +++ b/MIGRATION.md @@ -112,6 +112,24 @@ csdx config:set:log --no-show-console-logs [2025-08-22 16:12:25] SUCCESS: Exported stack settings successfully! ``` +### 4. 🏷️ Taxonomy Migration Deprecation + +**What Changed:** +- Taxonomy migration functionality has been deprecated in 2.x.x +- The taxonomy migration script examples have been removed + +**Before (1.x.x):** +```bash +csdx cm:stacks:migration -k b*******9ca0 --file-path "../contentstack-migration/examples/taxonomies/import-taxonomies.js" --config data-dir:'./data/Taxonomy Stack_taxonomies.csv' +``` +- Taxonomy migration supports only in version 1.x.x + +**After (2.x.x-beta):** +- Taxonomy migration is no longer supported through the migration plugin +- Use the standard import/export commands for taxonomy data migration + +**Migration Action:** use the import/export commands instead. + ## Troubleshooting ### Common Issues diff --git a/package-lock.json b/package-lock.json index 2455805114..3a6f68dfa4 100644 --- a/package-lock.json +++ b/package-lock.json @@ -280,53 +280,52 @@ } }, "node_modules/@aws-sdk/client-cloudfront": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.930.0.tgz", - "integrity": "sha512-g0jkrZRb7JKdty4sJfxc2rsoMPMujJ+o9C0KiTutuAhEmjVFEGCKeLwMoQCvANwkt1x4S7CUqAB7UOLQlUSGhQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-cloudfront/-/client-cloudfront-3.956.0.tgz", + "integrity": "sha512-7eozK4+yBs2Ig0pTBkoc9WS1+qWPRKdhzuscLLX9XsKjPVcIqOWhzNy7aROHsYC471CBNKgp4rU/rmL5WU8qEg==", "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.930.0", - "@aws-sdk/credential-provider-node": "3.930.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.930.0", - "@aws-sdk/middleware-user-agent": "3.930.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.930.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-node": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.5", + "@smithy/util-waiter": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -334,68 +333,66 @@ } }, "node_modules/@aws-sdk/client-s3": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.930.0.tgz", - "integrity": "sha512-5ddhr3ShseFRIdNXH8bkh1CIC78p0ZXpa7HJZpONDU3JGvd/B+yHHgTr141rtgoFTaW0gjPdbdtqtPLnhlnK+A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-s3/-/client-s3-3.956.0.tgz", + "integrity": "sha512-O+Z7PSY9TjaqJcZSDMvVmXBuV/jmFRJIu7ga+9XgWv4+qfjhAX2N2s4kgsRnIdjIO4xgkN3O/BugTCyjIRrIDQ==", "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.930.0", - "@aws-sdk/credential-provider-node": "3.930.0", - "@aws-sdk/middleware-bucket-endpoint": "3.930.0", - "@aws-sdk/middleware-expect-continue": "3.930.0", - "@aws-sdk/middleware-flexible-checksums": "3.930.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-location-constraint": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.930.0", - "@aws-sdk/middleware-sdk-s3": "3.930.0", - "@aws-sdk/middleware-ssec": "3.930.0", - "@aws-sdk/middleware-user-agent": "3.930.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/signature-v4-multi-region": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.930.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/eventstream-serde-browser": "^4.2.5", - "@smithy/eventstream-serde-config-resolver": "^4.3.5", - "@smithy/eventstream-serde-node": "^4.2.5", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-blob-browser": "^4.2.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/hash-stream-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/md5-js": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-node": "3.956.0", + "@aws-sdk/middleware-bucket-endpoint": "3.956.0", + "@aws-sdk/middleware-expect-continue": "3.956.0", + "@aws-sdk/middleware-flexible-checksums": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-location-constraint": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-sdk-s3": "3.956.0", + "@aws-sdk/middleware-ssec": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/signature-v4-multi-region": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/eventstream-serde-browser": "^4.2.7", + "@smithy/eventstream-serde-config-resolver": "^4.3.7", + "@smithy/eventstream-serde-node": "^4.2.7", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-blob-browser": "^4.2.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/hash-stream-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/md5-js": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", - "@smithy/util-waiter": "^4.2.5", - "@smithy/uuid": "^1.1.0", + "@smithy/util-waiter": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -403,48 +400,48 @@ } }, "node_modules/@aws-sdk/client-sso": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.930.0.tgz", - "integrity": "sha512-sASqgm1iMLcmi+srSH9WJuqaf3GQAKhuB4xIJwkNEPUQ+yGV8HqErOOHJLXXuTUyskcdtK+4uMaBRLT2ESm+QQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/client-sso/-/client-sso-3.956.0.tgz", + "integrity": "sha512-TCxCa9B1IMILvk/7sig0fRQzff+M2zBQVZGWOJL8SAZq/gfElIMAf/nYjQwMhXjyq8PFDRGm4GN8ZhNKPeNleQ==", "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.930.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.930.0", - "@aws-sdk/middleware-user-agent": "3.930.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -453,23 +450,23 @@ } }, "node_modules/@aws-sdk/core": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.930.0.tgz", - "integrity": "sha512-E95pWT1ayfRWg0AW2KNOCYM7QQcVeOhMRLX5PXLeDKcdxP7s3x0LHG9t7a3nPbAbvYLRrhC7O2lLWzzMCpqjsw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/core/-/core-3.956.0.tgz", + "integrity": "sha512-BMOCXZNz5z4cR3/SaNHUfeoZQUG/y39bLscdLUgg3RL6mDOhuINIqMc0qc6G3kpwDTLVdXikF4nmx2UrRK9y5A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws-sdk/xml-builder": "3.930.0", - "@smithy/core": "^3.18.2", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/xml-builder": "3.956.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", - "@smithy/util-middleware": "^4.2.5", + "@smithy/util-middleware": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -478,16 +475,16 @@ } }, "node_modules/@aws-sdk/credential-provider-env": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.930.0.tgz", - "integrity": "sha512-5tJyxNQmm9C1XKeiWt/K67mUHtTiU2FxTkVsqVrzAMjNsF3uyA02kyTK70byh5n29oVR9XNValVEl6jk01ipYg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-env/-/credential-provider-env-3.956.0.tgz", + "integrity": "sha512-aLJavJMPVTvhmggJ0pcdCKEWJk3sL9QkJkUIEoTzOou7HnxWS66N4sC5e8y27AF2nlnYfIxq3hkEiZlGi/vlfA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -495,21 +492,21 @@ } }, "node_modules/@aws-sdk/credential-provider-http": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.930.0.tgz", - "integrity": "sha512-vw565GctpOPoRJyRvgqXM8U/4RG8wYEPfhe6GHvt9dchebw0OaFeW1mmSYpwEPkMhZs9Z808dkSPScwm8WZBKA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-http/-/credential-provider-http-3.956.0.tgz", + "integrity": "sha512-VsKzBNhwT6XJdW3HQX6o4KOHj1MAzSwA8/zCsT9mOGecozw1yeCcQPtlWDSlfsfygKVCXz7fiJzU03yl11NKMA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { @@ -517,24 +514,45 @@ } }, "node_modules/@aws-sdk/credential-provider-ini": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.930.0.tgz", - "integrity": "sha512-Ua4T5MWjm7QdHi7ZSUvnPBFwBZmLFP/IEGCLacPKbUT1sQO30hlWuB/uQOj0ns4T6p7V4XsM8bz5+xsW2yRYbQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-ini/-/credential-provider-ini-3.956.0.tgz", + "integrity": "sha512-TlDy+IGr0JIRBwnPdV31J1kWXEcfsR3OzcNVWQrguQdHeTw2lU5eft16kdizo6OruqcZRF/LvHBDwAWx4u51ww==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@aws-sdk/core": "3.956.0", + "@aws-sdk/credential-provider-env": "3.956.0", + "@aws-sdk/credential-provider-http": "3.956.0", + "@aws-sdk/credential-provider-login": "3.956.0", + "@aws-sdk/credential-provider-process": "3.956.0", + "@aws-sdk/credential-provider-sso": "3.956.0", + "@aws-sdk/credential-provider-web-identity": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "tslib": "^2.6.2" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@aws-sdk/credential-provider-login": { + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-login/-/credential-provider-login-3.956.0.tgz", + "integrity": "sha512-p2Y62mdIlUpiyi5tvn8cKTja5kq1e3Rm5gm4wpNQ9caTayfkIEXyKrbP07iepTv60Coaylq9Fx6b5En/siAeGA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/credential-provider-env": "3.930.0", - "@aws-sdk/credential-provider-http": "3.930.0", - "@aws-sdk/credential-provider-process": "3.930.0", - "@aws-sdk/credential-provider-sso": "3.930.0", - "@aws-sdk/credential-provider-web-identity": "3.930.0", - "@aws-sdk/nested-clients": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -542,23 +560,23 @@ } }, "node_modules/@aws-sdk/credential-provider-node": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.930.0.tgz", - "integrity": "sha512-LTx5G0PsL51hNCCzOIdacGPwqnTp3X2Ck8CjLL4Kz9FTR0mfY02qEJB5y5segU1hlge/WdQYxzBBMhtMUR2h8A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-node/-/credential-provider-node-3.956.0.tgz", + "integrity": "sha512-ITjp7uAQh17ljUsCWkPRmLjyFfupGlJVUfTLHnZJ+c7G0P0PDRquaM+fBSh0y33tauHsBa5fGnCCLRo5hy9sGQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/credential-provider-env": "3.930.0", - "@aws-sdk/credential-provider-http": "3.930.0", - "@aws-sdk/credential-provider-ini": "3.930.0", - "@aws-sdk/credential-provider-process": "3.930.0", - "@aws-sdk/credential-provider-sso": "3.930.0", - "@aws-sdk/credential-provider-web-identity": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/credential-provider-env": "3.956.0", + "@aws-sdk/credential-provider-http": "3.956.0", + "@aws-sdk/credential-provider-ini": "3.956.0", + "@aws-sdk/credential-provider-process": "3.956.0", + "@aws-sdk/credential-provider-sso": "3.956.0", + "@aws-sdk/credential-provider-web-identity": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -566,17 +584,17 @@ } }, "node_modules/@aws-sdk/credential-provider-process": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.930.0.tgz", - "integrity": "sha512-lqC4lepxgwR2uZp/JROTRjkHld4/FEpSgofmiIOAfUfDx0OWSg7nkWMMS/DzlMpODqATl9tO0DcvmIJ8tMbh6g==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-process/-/credential-provider-process-3.956.0.tgz", + "integrity": "sha512-wpAex+/LGVWkHPchsn9FWy1ahFualIeSYq3ADFc262ljJjrltOWGh3+cu3OK3gTMkX6VEsl+lFvy1P7Bk7cgXA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -584,19 +602,19 @@ } }, "node_modules/@aws-sdk/credential-provider-sso": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.930.0.tgz", - "integrity": "sha512-LIs2aaVoFfioRokR1R9SpLS9u8CmbHhrV/gpHO1ED41qNCujn23vAxRNQmWzJ2XoCxSTwvToiHD2i6CjPA6rHQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-sso/-/credential-provider-sso-3.956.0.tgz", + "integrity": "sha512-IRFSDF32x8TpOEYSGMcGQVJUiYuJaFkek0aCjW0klNIZHBF1YpflVpUarK9DJe4v4ryfVq3c0bqR/JFui8QFmw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/client-sso": "3.930.0", - "@aws-sdk/core": "3.930.0", - "@aws-sdk/token-providers": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/client-sso": "3.956.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/token-providers": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -604,18 +622,18 @@ } }, "node_modules/@aws-sdk/credential-provider-web-identity": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.930.0.tgz", - "integrity": "sha512-iIYF8GReLOp16yn2bnRWrc4UOW/vVLifqyRWZ3iAGe8NFzUiHBq+Nok7Edh+2D8zt30QOCOsWCZ31uRrPuXH8w==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/credential-provider-web-identity/-/credential-provider-web-identity-3.956.0.tgz", + "integrity": "sha512-4YkmjwZC+qoUKlVOY9xNx7BTKRdJ1R1/Zjk2QSW5aWtwkk2e07ZUQvUpbW4vGpAxGm1K4EgRcowuSpOsDTh44Q==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/nested-clients": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -623,17 +641,17 @@ } }, "node_modules/@aws-sdk/middleware-bucket-endpoint": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.930.0.tgz", - "integrity": "sha512-cnCLWeKPYgvV4yRYPFH6pWMdUByvu2cy2BAlfsPpvnm4RaVioztyvxmQj5PmVN5fvWs5w/2d6U7le8X9iye2sA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-bucket-endpoint/-/middleware-bucket-endpoint-3.956.0.tgz", + "integrity": "sha512-+iHH9cnkNZgKkTBnPP9rbapHliKDrOuj7MDz6+wL0NV4N/XGB5tbrd+uDP608FXVeMHcWIIZtWkANADUmAI49w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-arn-parser": "3.953.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-config-provider": "^4.2.0", "tslib": "^2.6.2" }, @@ -642,15 +660,15 @@ } }, "node_modules/@aws-sdk/middleware-expect-continue": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.930.0.tgz", - "integrity": "sha512-5HEQ+JU4DrLNWeY27wKg/jeVa8Suy62ivJHOSUf6e6hZdVIMx0h/kXS1fHEQNNiLu2IzSEP/bFXsKBaW7x7s0g==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-expect-continue/-/middleware-expect-continue-3.956.0.tgz", + "integrity": "sha512-97rmalK9x09Darcl6AbShZRXYxWiyCeO8ll1C9rx1xyZMs2DeIKAZ/xuAJ/bywB3l25ls6VqXO4/EuDFJHL8eA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -658,23 +676,23 @@ } }, "node_modules/@aws-sdk/middleware-flexible-checksums": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.930.0.tgz", - "integrity": "sha512-ZbAwwe7sqIO7tmNH3Q8rH91tZCQwBGliyXUbANoVMp1CWLPDAeaECurkmuBe/UJmoszi2U3gyhIQlbfzD2SBLw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-flexible-checksums/-/middleware-flexible-checksums-3.956.0.tgz", + "integrity": "sha512-Rd/VeVKuw+lQ1oJmJOyXV0flIkp9ouMGAS9QT28ogdQVxXriaheNo754N4z0+8+R6uTcmeojN7dN4jzt51WV2g==", "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.930.0", - "@aws-sdk/types": "3.930.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", "@smithy/is-array-buffer": "^4.2.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -683,15 +701,15 @@ } }, "node_modules/@aws-sdk/middleware-host-header": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.930.0.tgz", - "integrity": "sha512-x30jmm3TLu7b/b+67nMyoV0NlbnCVT5DI57yDrhXAPCtdgM1KtdLWt45UcHpKOm1JsaIkmYRh2WYu7Anx4MG0g==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-host-header/-/middleware-host-header-3.956.0.tgz", + "integrity": "sha512-JujNJDp/dj1DbsI0ntzhrz2uJ4jpumcKtr743eMpEhdboYjuu/UzY8/7n1h5JbgU9TNXgqE9lgQNa5QPG0Tvsg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -699,14 +717,14 @@ } }, "node_modules/@aws-sdk/middleware-location-constraint": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.930.0.tgz", - "integrity": "sha512-QIGNsNUdRICog+LYqmtJ03PLze6h2KCORXUs5td/hAEjVP5DMmubhtrGg1KhWyctACluUH/E/yrD14p4pRXxwA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-location-constraint/-/middleware-location-constraint-3.956.0.tgz", + "integrity": "sha512-eANhYRFcVO/lI9tliitSW0DK5H1d9J7BK/9RrRz86bd5zPWteVqqzQRbMUdErVi1nwSbSIAa6YGv/ItYPswe0w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -714,14 +732,14 @@ } }, "node_modules/@aws-sdk/middleware-logger": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.930.0.tgz", - "integrity": "sha512-vh4JBWzMCBW8wREvAwoSqB2geKsZwSHTa0nSt0OMOLp2PdTYIZDi0ZiVMmpfnjcx9XbS6aSluLv9sKx4RrG46A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-logger/-/middleware-logger-3.956.0.tgz", + "integrity": "sha512-Qff39yEOPYgRsm4SrkHOvS0nSoxXILYnC8Akp0uMRi2lOcZVyXL3WCWqIOtI830qVI4GPa796sleKguxx50RHg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -729,16 +747,16 @@ } }, "node_modules/@aws-sdk/middleware-recursion-detection": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.930.0.tgz", - "integrity": "sha512-gv0sekNpa2MBsIhm2cjP3nmYSfI4nscx/+K9u9ybrWZBWUIC4kL2sV++bFjjUz4QxUIlvKByow3/a9ARQyCu7Q==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-recursion-detection/-/middleware-recursion-detection-3.956.0.tgz", + "integrity": "sha512-/f4JxL2kSCYhy63wovqts6SJkpalSLvuFe78ozt3ClrGoHGyr69o7tPRYx5U7azLgvrIGjsWUyTayeAk3YHIVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@aws/lambda-invoke-store": "^0.1.1", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@aws/lambda-invoke-store": "^0.2.2", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -746,24 +764,24 @@ } }, "node_modules/@aws-sdk/middleware-sdk-s3": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.930.0.tgz", - "integrity": "sha512-bnVK0xVVmrPyKTbV5MgG6KP7MPe87GngBPD5MrYj9kWmGrJIvnt0qer0UIgWAnsyCi7XrTfw7SMgYRpSxOYEMw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-sdk-s3/-/middleware-sdk-s3-3.956.0.tgz", + "integrity": "sha512-U/+jYb4iowqqpLjB6cSYan0goAMOlh2xg2CPIdSy550o8mYnJtuajBUQ20A9AA9PYKLlEAoCNEysNZkn4o/63g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-arn-parser": "3.893.0", - "@smithy/core": "^3.18.2", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-arn-parser": "3.953.0", + "@smithy/core": "^3.20.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -772,14 +790,14 @@ } }, "node_modules/@aws-sdk/middleware-ssec": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.930.0.tgz", - "integrity": "sha512-N2/SvodmaDS6h7CWfuapt3oJyn1T2CBz0CsDIiTDv9cSagXAVFjPdm2g4PFJqrNBeqdDIoYBnnta336HmamWHg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-ssec/-/middleware-ssec-3.956.0.tgz", + "integrity": "sha512-1Et0vPoIzfhkUAdNRzu0pC25ZawFqXo5T8xpvbwkfDgfIkeVj+sm9t01iXO3pCOK52OSuLRAy7fiAo/AoHjOYg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -787,18 +805,18 @@ } }, "node_modules/@aws-sdk/middleware-user-agent": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.930.0.tgz", - "integrity": "sha512-UUItqy02biaHoZDd1Z2CskFon3Lej15ZCIZzW4n2lsJmgLWNvz21jtFA8DQny7ZgCLAOOXI8YK3VLZptZWtIcg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/middleware-user-agent/-/middleware-user-agent-3.956.0.tgz", + "integrity": "sha512-azH8OJ0AIe3NafaTNvJorG/ALaLNTYwVKtyaSeQKOvaL8TNuBVuDnM5iHCiWryIaRgZotomqycwyfNKLw2D3JQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@smithy/core": "^3.18.2", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@smithy/core": "^3.20.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -806,48 +824,48 @@ } }, "node_modules/@aws-sdk/nested-clients": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.930.0.tgz", - "integrity": "sha512-eEDjTVXNiDkoV0ZV+X+WV40GTpF70xZmDW13CQzQF7rzOC2iFjtTRU+F7MUhy/Vs+e9KvDgiuCDecITtaOXUNw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/nested-clients/-/nested-clients-3.956.0.tgz", + "integrity": "sha512-GHDQMkxoWpi3eTrhWGmghw0gsZJ5rM1ERHfBFhlhduCdtV3TyhKVmDgFG84KhU8v18dcVpSp3Pu3KwH7j1tgIg==", "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.930.0", - "@aws-sdk/middleware-host-header": "3.930.0", - "@aws-sdk/middleware-logger": "3.930.0", - "@aws-sdk/middleware-recursion-detection": "3.930.0", - "@aws-sdk/middleware-user-agent": "3.930.0", - "@aws-sdk/region-config-resolver": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@aws-sdk/util-endpoints": "3.930.0", - "@aws-sdk/util-user-agent-browser": "3.930.0", - "@aws-sdk/util-user-agent-node": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/core": "^3.18.2", - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/hash-node": "^4.2.5", - "@smithy/invalid-dependency": "^4.2.5", - "@smithy/middleware-content-length": "^4.2.5", - "@smithy/middleware-endpoint": "^4.3.9", - "@smithy/middleware-retry": "^4.4.9", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/smithy-client": "^4.9.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/middleware-host-header": "3.956.0", + "@aws-sdk/middleware-logger": "3.956.0", + "@aws-sdk/middleware-recursion-detection": "3.956.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/region-config-resolver": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@aws-sdk/util-endpoints": "3.956.0", + "@aws-sdk/util-user-agent-browser": "3.956.0", + "@aws-sdk/util-user-agent-node": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/core": "^3.20.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/hash-node": "^4.2.7", + "@smithy/invalid-dependency": "^4.2.7", + "@smithy/middleware-content-length": "^4.2.7", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-retry": "^4.4.17", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", "@smithy/util-body-length-node": "^4.2.1", - "@smithy/util-defaults-mode-browser": "^4.3.8", - "@smithy/util-defaults-mode-node": "^4.2.11", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", + "@smithy/util-defaults-mode-browser": "^4.3.16", + "@smithy/util-defaults-mode-node": "^4.2.19", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -856,16 +874,16 @@ } }, "node_modules/@aws-sdk/region-config-resolver": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.930.0.tgz", - "integrity": "sha512-KL2JZqH6aYeQssu1g1KuWsReupdfOoxD6f1as2VC+rdwYFUu4LfzMsFfXnBvvQWWqQ7rZHWOw1T+o5gJmg7Dzw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/region-config-resolver/-/region-config-resolver-3.956.0.tgz", + "integrity": "sha512-byU5XYekW7+rZ3e067y038wlrpnPkdI4fMxcHCHrv+TAfzl8CCk5xLyzerQtXZR8cVPVOXuaYWe1zKW0uCnXUA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/config-resolver": "^4.4.3", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -873,17 +891,17 @@ } }, "node_modules/@aws-sdk/signature-v4-multi-region": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.930.0.tgz", - "integrity": "sha512-UOAq1ftbrZc9HRP/nG970OONNykIDWunjth9GvGDODkW0FR7DHJWBmTwj61ZnrSiuSParp1eQfa+JsZ8eXNPcw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/signature-v4-multi-region/-/signature-v4-multi-region-3.956.0.tgz", + "integrity": "sha512-gejlXPmor08VydGC8bx0Bv4/tPT92eK0WLe2pUPR0AaMXL+5ycDpThAi1vLWjWr0aUjCA7lXx0pMENWlJlYK3A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-sdk-s3": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/signature-v4": "^5.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/middleware-sdk-s3": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/signature-v4": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -891,18 +909,18 @@ } }, "node_modules/@aws-sdk/token-providers": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.930.0.tgz", - "integrity": "sha512-K+fJFJXA2Tdx10WhhTm+xQmf1WDHu14rUutByyqx6W0iW2rhtl3YeRr188LWSU3/hpz7BPyvigaAb0QyRti6FQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/token-providers/-/token-providers-3.956.0.tgz", + "integrity": "sha512-I01Q9yDeG9oXge14u/bubtSdBpok/rTsPp2AQwy5xj/5PatRTHPbUTP6tef3AH/lFCAqkI0nncIcgx6zikDdUQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/core": "3.930.0", - "@aws-sdk/nested-clients": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/core": "3.956.0", + "@aws-sdk/nested-clients": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -910,13 +928,13 @@ } }, "node_modules/@aws-sdk/types": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.930.0.tgz", - "integrity": "sha512-we/vaAgwlEFW7IeftmCLlLMw+6hFs3DzZPJw7lVHbj/5HJ0bz9gndxEsS2lQoeJ1zhiiLqAqvXxmM43s0MBg0A==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/types/-/types-3.956.0.tgz", + "integrity": "sha512-DMRU/p9wAlAJxEjegnLwduCA8YP2pcT/sIJ+17KSF38c5cC6CbBhykwbZLECTo+zYzoFrOqeLbqE6paH8Gx3ug==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -924,9 +942,9 @@ } }, "node_modules/@aws-sdk/util-arn-parser": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.893.0.tgz", - "integrity": "sha512-u8H4f2Zsi19DGnwj5FSZzDMhytYF/bCh37vAtBsn3cNDL3YG578X5oc+wSX54pM3tOxS+NY7tvOAo52SW7koUA==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-arn-parser/-/util-arn-parser-3.953.0.tgz", + "integrity": "sha512-9hqdKkn4OvYzzaLryq2xnwcrPc8ziY34i9szUdgBfSqEC6pBxbY9/lLXmrgzfwMSL2Z7/v2go4Od0p5eukKLMQ==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -937,16 +955,16 @@ } }, "node_modules/@aws-sdk/util-endpoints": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.930.0.tgz", - "integrity": "sha512-M2oEKBzzNAYr136RRc6uqw3aWlwCxqTP1Lawps9E1d2abRPvl1p1ztQmmXp1Ak4rv8eByIZ+yQyKQ3zPdRG5dw==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-endpoints/-/util-endpoints-3.956.0.tgz", + "integrity": "sha512-xZ5CBoubS4rs9JkFniKNShDtfqxaMUnwaebYMoybZm070q9+omFkQkJYXl7kopTViEgZgQl1sAsAkrawBM8qEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-endpoints": "^3.2.5", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-endpoints": "^3.2.7", "tslib": "^2.6.2" }, "engines": { @@ -954,9 +972,9 @@ } }, "node_modules/@aws-sdk/util-locate-window": { - "version": "3.893.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.893.0.tgz", - "integrity": "sha512-T89pFfgat6c8nMmpI8eKjBcDcgJq36+m9oiXbcUzeU55MP9ZuGgBomGjGnHaEyF36jenW9gmg3NfZDm0AO2XPg==", + "version": "3.953.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-locate-window/-/util-locate-window-3.953.0.tgz", + "integrity": "sha512-mPxK+I1LcrgC/RSa3G5AMAn8eN2Ay0VOgw8lSRmV1jCtO+iYvNeCqOdxoJUjOW6I5BA4niIRWqVORuRP07776Q==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -967,29 +985,29 @@ } }, "node_modules/@aws-sdk/util-user-agent-browser": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.930.0.tgz", - "integrity": "sha512-q6lCRm6UAe+e1LguM5E4EqM9brQlDem4XDcQ87NzEvlTW6GzmNCO0w1jS0XgCFXQHjDxjdlNFX+5sRbHijwklg==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-browser/-/util-user-agent-browser-3.956.0.tgz", + "integrity": "sha512-s8KwYR3HqiGNni7a1DN2P3RUog64QoBQ6VCSzJkHBWb6++8KSOpqeeDkfmEz+22y1LOne+bRrpDGKa0aqOc3rQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/types": "3.930.0", - "@smithy/types": "^4.9.0", + "@aws-sdk/types": "3.956.0", + "@smithy/types": "^4.11.0", "bowser": "^2.11.0", "tslib": "^2.6.2" } }, "node_modules/@aws-sdk/util-user-agent-node": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.930.0.tgz", - "integrity": "sha512-tYc5uFKogn0vLukeZ6Zz2dR1/WiTjxZH7+Jjoce6aEYgRVfyrDje1POFb7YxhNZ7Pp1WzHCuwW2KgkmMoYVbxQ==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/util-user-agent-node/-/util-user-agent-node-3.956.0.tgz", + "integrity": "sha512-H0r6ol3Rr63/3xvrUsLqHps+cA7VkM7uCU5NtuTHnMbv3uYYTKf9M2XFHAdVewmmRgssTzvqemrARc8Ji3SNvg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@aws-sdk/middleware-user-agent": "3.930.0", - "@aws-sdk/types": "3.930.0", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@aws-sdk/middleware-user-agent": "3.956.0", + "@aws-sdk/types": "3.956.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -1005,13 +1023,13 @@ } }, "node_modules/@aws-sdk/xml-builder": { - "version": "3.930.0", - "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.930.0.tgz", - "integrity": "sha512-YIfkD17GocxdmlUVc3ia52QhcWuRIUJonbF8A2CYfcWNV3HzvAqpcPeC0bYUhkK+8e8YO1ARnLKZQE0TlwzorA==", + "version": "3.956.0", + "resolved": "https://registry.npmjs.org/@aws-sdk/xml-builder/-/xml-builder-3.956.0.tgz", + "integrity": "sha512-x/IvXUeQYNUEQojpRIQpFt4X7XGxqzjUlXFRdwaTCtTz3q1droXVJvYOhnX3KiMgzeHGlBJfY4Nmq3oZNEUGFw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "fast-xml-parser": "5.2.5", "tslib": "^2.6.2" }, @@ -1020,9 +1038,9 @@ } }, "node_modules/@aws/lambda-invoke-store": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.1.1.tgz", - "integrity": "sha512-RcLam17LdlbSOSp9VxmUu1eI6Mwxp+OwhD2QhiSNmNCzoDb0EeUXTD2n/WbcnrAYMGlmf05th6QYq23VqvJqpA==", + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@aws/lambda-invoke-store/-/lambda-invoke-store-0.2.2.tgz", + "integrity": "sha512-C0NBLsIqzDIae8HFw9YIrIBsbc0xTiOtt7fAukGPnqQ/+zZNaq+4jhuccltK0QuWHBnNm/a6kLIRA6GFiM10eg==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1692,10 +1710,6 @@ "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-seed": { "resolved": "packages/contentstack-seed", "link": true @@ -1713,12 +1727,12 @@ "link": true }, "node_modules/@contentstack/cli-launch": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/@contentstack/cli-launch/-/cli-launch-1.9.3.tgz", - "integrity": "sha512-sSaZnxHDiFZjbzEFhFDIT9dvW/6rAXSKS8RO4TsoJk/ed2noUN4gVarAmAZt2B7qy7ICoPoXREIVOqi6FbaZqQ==", + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/@contentstack/cli-launch/-/cli-launch-1.9.4.tgz", + "integrity": "sha512-Wev1zDBZ61eJSOGEaj08LZXkK6+sX7TM9TBxNd5ZHc0tkl4y8gDtuoo+wfaCV0/WcXmglUHazFX4ZgDYyB9UDQ==", "license": "MIT", "dependencies": { - "@apollo/client": "^3.11.8", + "@apollo/client": "^3.14.0", "@contentstack/cli-command": "^1.4.0", "@contentstack/cli-utilities": "^1.12.0", "@oclif/core": "^4.2.7", @@ -1735,7 +1749,7 @@ "cross-fetch": "^4.1.0", "dotenv": "^16.4.7", "express": "^4.21.1", - "form-data": "^4.0.0", + "form-data": "4.0.4", "graphql": "^16.9.0", "ini": "^3.0.1", "lodash": "^4.17.21", @@ -1762,35 +1776,6 @@ "resolved": "packages/contentstack-variants", "link": true }, - "node_modules/@contentstack/json-rte-serializer": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@contentstack/json-rte-serializer/-/json-rte-serializer-2.1.0.tgz", - "integrity": "sha512-klw+0kH5UtL4mHGDP7A8olZIaA4CoyAVzveYqso8uxeDXKkTvwF8D5HBhCqQLr0NXwhofl+FF431cbzGZ3TNCg==", - "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", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", - "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", - "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" - } - }, "node_modules/@contentstack/management": { "version": "1.22.0", "resolved": "https://registry.npmjs.org/@contentstack/management/-/management-1.22.0.tgz", @@ -1820,10 +1805,9 @@ } }, "node_modules/@contentstack/utils": { - "version": "1.6.2", - "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.6.2.tgz", - "integrity": "sha512-HWyCXchCIUUwhcaqEwMEQNSmbVih8x4QKo4UxbFSj5RmIfFDPY/szAl5hQT0Xvnhh6C3uZu2gDI/HmUcDzJQkQ==", - "hasInstallScript": true, + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@contentstack/utils/-/utils-1.6.3.tgz", + "integrity": "sha512-FU1hFks9vnJ5e9cwBTPgnf3obx/fuKh+c3Gtc71mq1Mrub3/z4rJZJWLJ2kublVKnXWnhz+Yt66rshxO/TT9IQ==", "license": "MIT" }, "node_modules/@cspotcode/source-map-support": { @@ -1862,9 +1846,9 @@ } }, "node_modules/@emnapi/core": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.0.tgz", - "integrity": "sha512-pJdKGq/1iquWYtv1RRSljZklxHCOCAJFJrImO5ZLKPJVJlVUcs8yFwNQlqS0Lo8xT1VAXXTCZocF9n26FWEKsw==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.7.1.tgz", + "integrity": "sha512-o1uhUASyo921r2XtHYOHy7gdkGLge8ghBEQHMWmyJFoXlpU58kIrhhN3w26lpQb6dspetweapMn2CSNwQ8I4wg==", "dev": true, "license": "MIT", "optional": true, @@ -1874,9 +1858,9 @@ } }, "node_modules/@emnapi/runtime": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.0.tgz", - "integrity": "sha512-oAYoQnCYaQZKVS53Fq23ceWMRxq5EhQsE0x0RdQ55jT7wagMu5k+fS39v1fiSLrtrLQlXwVINenqhLMtTrV/1Q==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.7.1.tgz", + "integrity": "sha512-PVtJr5CmLwYAU9PZDMITZoR5iAOShYREoR45EyyLrbntV50mdePTgUn4AmOw90Ifcj+x2kRjdzr1HP3RrNiHGA==", "dev": true, "license": "MIT", "optional": true, @@ -1913,9 +1897,9 @@ } }, "node_modules/@es-joy/jsdoccomment/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -1927,9 +1911,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.12.tgz", - "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.27.2.tgz", + "integrity": "sha512-GZMB+a0mOMZs4MpDbj8RJp4cw+w1WV5NYD6xzgvzUJ5Ek2jerwfO2eADyI6ExDSUED+1X8aMbegahsJi+8mgpw==", "cpu": [ "ppc64" ], @@ -1944,9 +1928,9 @@ } }, "node_modules/@esbuild/android-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.12.tgz", - "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.27.2.tgz", + "integrity": "sha512-DVNI8jlPa7Ujbr1yjU2PfUSRtAUZPG9I1RwW4F4xFB1Imiu2on0ADiI/c3td+KmDtVKNbi+nffGDQMfcIMkwIA==", "cpu": [ "arm" ], @@ -1961,9 +1945,9 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.12.tgz", - "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.27.2.tgz", + "integrity": "sha512-pvz8ZZ7ot/RBphf8fv60ljmaoydPU12VuXHImtAs0XhLLw+EXBi2BLe3OYSBslR4rryHvweW5gmkKFwTiFy6KA==", "cpu": [ "arm64" ], @@ -1978,9 +1962,9 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.12.tgz", - "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.27.2.tgz", + "integrity": "sha512-z8Ank4Byh4TJJOh4wpz8g2vDy75zFL0TlZlkUkEwYXuPSgX8yzep596n6mT7905kA9uHZsf/o2OJZubl2l3M7A==", "cpu": [ "x64" ], @@ -1995,9 +1979,9 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.12.tgz", - "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.27.2.tgz", + "integrity": "sha512-davCD2Zc80nzDVRwXTcQP/28fiJbcOwvdolL0sOiOsbwBa72kegmVU0Wrh1MYrbuCL98Omp5dVhQFWRKR2ZAlg==", "cpu": [ "arm64" ], @@ -2012,9 +1996,9 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.12.tgz", - "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.27.2.tgz", + "integrity": "sha512-ZxtijOmlQCBWGwbVmwOF/UCzuGIbUkqB1faQRf5akQmxRJ1ujusWsb3CVfk/9iZKr2L5SMU5wPBi1UWbvL+VQA==", "cpu": [ "x64" ], @@ -2029,9 +2013,9 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.12.tgz", - "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.27.2.tgz", + "integrity": "sha512-lS/9CN+rgqQ9czogxlMcBMGd+l8Q3Nj1MFQwBZJyoEKI50XGxwuzznYdwcav6lpOGv5BqaZXqvBSiB/kJ5op+g==", "cpu": [ "arm64" ], @@ -2046,9 +2030,9 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.12.tgz", - "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.27.2.tgz", + "integrity": "sha512-tAfqtNYb4YgPnJlEFu4c212HYjQWSO/w/h/lQaBK7RbwGIkBOuNKQI9tqWzx7Wtp7bTPaGC6MJvWI608P3wXYA==", "cpu": [ "x64" ], @@ -2063,9 +2047,9 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.12.tgz", - "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.27.2.tgz", + "integrity": "sha512-vWfq4GaIMP9AIe4yj1ZUW18RDhx6EPQKjwe7n8BbIecFtCQG4CfHGaHuh7fdfq+y3LIA2vGS/o9ZBGVxIDi9hw==", "cpu": [ "arm" ], @@ -2080,9 +2064,9 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.12.tgz", - "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.27.2.tgz", + "integrity": "sha512-hYxN8pr66NsCCiRFkHUAsxylNOcAQaxSSkHMMjcpx0si13t1LHFphxJZUiGwojB1a/Hd5OiPIqDdXONia6bhTw==", "cpu": [ "arm64" ], @@ -2097,9 +2081,9 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.12.tgz", - "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.27.2.tgz", + "integrity": "sha512-MJt5BRRSScPDwG2hLelYhAAKh9imjHK5+NE/tvnRLbIqUWa+0E9N4WNMjmp/kXXPHZGqPLxggwVhz7QP8CTR8w==", "cpu": [ "ia32" ], @@ -2114,9 +2098,9 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.12.tgz", - "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.27.2.tgz", + "integrity": "sha512-lugyF1atnAT463aO6KPshVCJK5NgRnU4yb3FUumyVz+cGvZbontBgzeGFO1nF+dPueHD367a2ZXe1NtUkAjOtg==", "cpu": [ "loong64" ], @@ -2131,9 +2115,9 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.12.tgz", - "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.27.2.tgz", + "integrity": "sha512-nlP2I6ArEBewvJ2gjrrkESEZkB5mIoaTswuqNFRv/WYd+ATtUpe9Y09RnJvgvdag7he0OWgEZWhviS1OTOKixw==", "cpu": [ "mips64el" ], @@ -2148,9 +2132,9 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.12.tgz", - "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.27.2.tgz", + "integrity": "sha512-C92gnpey7tUQONqg1n6dKVbx3vphKtTHJaNG2Ok9lGwbZil6DrfyecMsp9CrmXGQJmZ7iiVXvvZH6Ml5hL6XdQ==", "cpu": [ "ppc64" ], @@ -2165,9 +2149,9 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.12.tgz", - "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.27.2.tgz", + "integrity": "sha512-B5BOmojNtUyN8AXlK0QJyvjEZkWwy/FKvakkTDCziX95AowLZKR6aCDhG7LeF7uMCXEJqwa8Bejz5LTPYm8AvA==", "cpu": [ "riscv64" ], @@ -2182,9 +2166,9 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.12.tgz", - "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.27.2.tgz", + "integrity": "sha512-p4bm9+wsPwup5Z8f4EpfN63qNagQ47Ua2znaqGH6bqLlmJ4bx97Y9JdqxgGZ6Y8xVTixUnEkoKSHcpRlDnNr5w==", "cpu": [ "s390x" ], @@ -2199,9 +2183,9 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.12.tgz", - "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.27.2.tgz", + "integrity": "sha512-uwp2Tip5aPmH+NRUwTcfLb+W32WXjpFejTIOWZFw/v7/KnpCDKG66u4DLcurQpiYTiYwQ9B7KOeMJvLCu/OvbA==", "cpu": [ "x64" ], @@ -2216,9 +2200,9 @@ } }, "node_modules/@esbuild/netbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.12.tgz", - "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.27.2.tgz", + "integrity": "sha512-Kj6DiBlwXrPsCRDeRvGAUb/LNrBASrfqAIok+xB0LxK8CHqxZ037viF13ugfsIpePH93mX7xfJp97cyDuTZ3cw==", "cpu": [ "arm64" ], @@ -2233,9 +2217,9 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.12.tgz", - "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.27.2.tgz", + "integrity": "sha512-HwGDZ0VLVBY3Y+Nw0JexZy9o/nUAWq9MlV7cahpaXKW6TOzfVno3y3/M8Ga8u8Yr7GldLOov27xiCnqRZf0tCA==", "cpu": [ "x64" ], @@ -2250,9 +2234,9 @@ } }, "node_modules/@esbuild/openbsd-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.12.tgz", - "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.27.2.tgz", + "integrity": "sha512-DNIHH2BPQ5551A7oSHD0CKbwIA/Ox7+78/AWkbS5QoRzaqlev2uFayfSxq68EkonB+IKjiuxBFoV8ESJy8bOHA==", "cpu": [ "arm64" ], @@ -2267,9 +2251,9 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.12.tgz", - "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.27.2.tgz", + "integrity": "sha512-/it7w9Nb7+0KFIzjalNJVR5bOzA9Vay+yIPLVHfIQYG/j+j9VTH84aNB8ExGKPU4AzfaEvN9/V4HV+F+vo8OEg==", "cpu": [ "x64" ], @@ -2284,9 +2268,9 @@ } }, "node_modules/@esbuild/openharmony-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.25.12.tgz", - "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/openharmony-arm64/-/openharmony-arm64-0.27.2.tgz", + "integrity": "sha512-LRBbCmiU51IXfeXk59csuX/aSaToeG7w48nMwA6049Y4J4+VbWALAuXcs+qcD04rHDuSCSRKdmY63sruDS5qag==", "cpu": [ "arm64" ], @@ -2301,9 +2285,9 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.12.tgz", - "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.27.2.tgz", + "integrity": "sha512-kMtx1yqJHTmqaqHPAzKCAkDaKsffmXkPHThSfRwZGyuqyIeBvf08KSsYXl+abf5HDAPMJIPnbBfXvP2ZC2TfHg==", "cpu": [ "x64" ], @@ -2318,9 +2302,9 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.12.tgz", - "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.27.2.tgz", + "integrity": "sha512-Yaf78O/B3Kkh+nKABUF++bvJv5Ijoy9AN1ww904rOXZFLWVc5OLOfL56W+C8F9xn5JQZa3UX6m+IktJnIb1Jjg==", "cpu": [ "arm64" ], @@ -2335,9 +2319,9 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.12.tgz", - "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.27.2.tgz", + "integrity": "sha512-Iuws0kxo4yusk7sw70Xa2E2imZU5HoixzxfGCdxwBdhiDgt9vX9VUCBhqcwY7/uh//78A1hMkkROMJq9l27oLQ==", "cpu": [ "ia32" ], @@ -2352,9 +2336,9 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.12.tgz", - "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.27.2.tgz", + "integrity": "sha512-sRdU18mcKf7F+YgheI/zGf5alZatMUTKj/jNS6l744f9u3WFu4v7twcUI9vu4mknF4Y9aDlblIie0IM+5xxaqQ==", "cpu": [ "x64" ], @@ -2499,9 +2483,9 @@ } }, "node_modules/@eslint/css-tree": { - "version": "3.6.6", - "resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.6.tgz", - "integrity": "sha512-C3YiJMY9OZyZ/3vEMFWJIesdGaRY6DmIYvmtyxMT934CbrOKqRs+Iw7NWSRlJQEaK4dPYy2lZ2y1zkaj8z0p5A==", + "version": "3.6.8", + "resolved": "https://registry.npmjs.org/@eslint/css-tree/-/css-tree-3.6.8.tgz", + "integrity": "sha512-s0f40zY7dlMp8i0Jf0u6l/aSswS0WRAgkhgETgiCJRcxIWb4S/Sp9uScKHWbkM3BnoFLbJbmOYk5AZUDFVxaLA==", "dev": true, "license": "MIT", "dependencies": { @@ -2920,9 +2904,9 @@ } }, "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.19.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.1.tgz", - "integrity": "sha512-LCCV0HdSZZZb34qifBsyWlUmok6W7ouER+oQIGBScS8EsZsQbrtFTUrDX4hOl+CS6p7cnNC4td+qrSVGSCTUfQ==", + "version": "22.19.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-22.19.3.tgz", + "integrity": "sha512-1N9SBnWYOJTrNZCdh/yJE+t910Y128BoyY+zBLWhL3r0TYzlTmFdXrPwHL9DyFZmlEXNQQolTZh3KHV31QDhyA==", "dev": true, "license": "MIT", "dependencies": { @@ -3178,9 +3162,9 @@ } }, "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3749,9 +3733,9 @@ } }, "node_modules/@oclif/plugin-help": { - "version": "6.2.35", - "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.35.tgz", - "integrity": "sha512-ZMcQTsHaiCEOZIRZoynUQ+98fyM1Adoqx4LbOgYWRVKXKbavHPCZKm6F+/y0GpWscXVoeGnvJO6GIBsigrqaSA==", + "version": "6.2.36", + "resolved": "https://registry.npmjs.org/@oclif/plugin-help/-/plugin-help-6.2.36.tgz", + "integrity": "sha512-NBQIg5hEMhvdbi4mSrdqRGl5XJ0bqTAHq6vDCCCDXUcfVtdk3ZJbSxtRVWyVvo9E28vwqu6MZyHOJylevqcHbA==", "license": "MIT", "dependencies": { "@oclif/core": "^4" @@ -3761,12 +3745,12 @@ } }, "node_modules/@oclif/plugin-not-found": { - "version": "3.2.72", - "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.72.tgz", - "integrity": "sha512-CRcqHGdcEL4l5cls5F9FvwKt04LkdG7WyFozOu2vP1/3w34S29zbw8Tx1gAzfBZDDme5ChSaqFXU5qbTLx5yYQ==", + "version": "3.2.73", + "resolved": "https://registry.npmjs.org/@oclif/plugin-not-found/-/plugin-not-found-3.2.73.tgz", + "integrity": "sha512-2bQieTGI9XNFe9hKmXQjJmHV5rZw+yn7Rud1+C5uLEo8GaT89KZbiLTJgL35tGILahy/cB6+WAs812wjw7TK6w==", "license": "MIT", "dependencies": { - "@inquirer/prompts": "^7.9.0", + "@inquirer/prompts": "^7.10.1", "@oclif/core": "^4.8.0", "ansis": "^3.17.0", "fast-levenshtein": "^3.0.0" @@ -4092,9 +4076,9 @@ } }, "node_modules/@oclif/plugin-not-found/node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "license": "MIT", "optional": true, "peer": true, @@ -4118,9 +4102,9 @@ } }, "node_modules/@oclif/plugin-not-found/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -4177,9 +4161,9 @@ } }, "node_modules/@oclif/plugin-plugins": { - "version": "5.4.53", - "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.4.53.tgz", - "integrity": "sha512-jezB3NEz8fQdb/jrZq8YPvEiF+aH0wHiexVCvnj7Rmy+mmTHicEuGJMPiYeJNcRvG687raIhc6TjyMMPKi0W4A==", + "version": "5.4.54", + "resolved": "https://registry.npmjs.org/@oclif/plugin-plugins/-/plugin-plugins-5.4.54.tgz", + "integrity": "sha512-yzdukEfvvyXx31AhN+YhxLhuQdx2SrZDcRtPl5CNkuqh/uNSB2BuA3xpurdv2qotpaw/Z9InRl+Sa9bLp/4aLA==", "license": "MIT", "dependencies": { "@oclif/core": "^4.8.0", @@ -4199,9 +4183,9 @@ } }, "node_modules/@oclif/plugin-warn-if-update-available": { - "version": "3.1.52", - "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.52.tgz", - "integrity": "sha512-CAtBcMBjtuYwv2lf1U3tavAAhFtG3lYvrpestPjfIUyGSoc5kJZME1heS8Ao7IxNgp5sHFm1wNoU2vJbHJKLQg==", + "version": "3.1.53", + "resolved": "https://registry.npmjs.org/@oclif/plugin-warn-if-update-available/-/plugin-warn-if-update-available-3.1.53.tgz", + "integrity": "sha512-ALxKMNFFJQJV1Z2OMVTV+q7EbKHhnTAPcTgkgHeXCNdW5nFExoXuwusZLS4Zv2o83j9UoDx1R/CSX7QZVgEHTA==", "dev": true, "license": "MIT", "dependencies": { @@ -4217,9 +4201,9 @@ } }, "node_modules/@oclif/test": { - "version": "4.1.14", - "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.14.tgz", - "integrity": "sha512-FKPUBOnC1KnYZBcYOMNmt0DfdqTdSo2Vx8OnqgnMslHVPRPqrUF1bxfEHaw5W/+vOQLwF7MiEPq8DObpXfJJbg==", + "version": "4.1.15", + "resolved": "https://registry.npmjs.org/@oclif/test/-/test-4.1.15.tgz", + "integrity": "sha512-OVTmz3RxnOWYPoE9sbB9Przfph+QSLMvHUfqEwXZKupuOHCJAJX0QDUfVyh1pK+XYEQ2RUaF+qhxqBfIfaahBw==", "license": "MIT", "dependencies": { "ansis": "^3.17.0", @@ -4453,9 +4437,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.53.2.tgz", - "integrity": "sha512-yDPzwsgiFO26RJA4nZo8I+xqzh7sJTZIWQOxn+/XOdPE31lAvLIYCKqjV+lNH/vxE2L2iH3plKxDCRK6i+CwhA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.54.0.tgz", + "integrity": "sha512-OywsdRHrFvCdvsewAInDKCNyR3laPA2mc9bRYJ6LBp5IyvF3fvXbbNR0bSzHlZVFtn6E0xw2oZlyjg4rKCVcng==", "cpu": [ "arm" ], @@ -4466,9 +4450,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.53.2.tgz", - "integrity": "sha512-k8FontTxIE7b0/OGKeSN5B6j25EuppBcWM33Z19JoVT7UTXFSo3D9CdU39wGTeb29NO3XxpMNauh09B+Ibw+9g==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.54.0.tgz", + "integrity": "sha512-Skx39Uv+u7H224Af+bDgNinitlmHyQX1K/atIA32JP3JQw6hVODX5tkbi2zof/E69M1qH2UoN3Xdxgs90mmNYw==", "cpu": [ "arm64" ], @@ -4479,9 +4463,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.53.2.tgz", - "integrity": "sha512-A6s4gJpomNBtJ2yioj8bflM2oogDwzUiMl2yNJ2v9E7++sHrSrsQ29fOfn5DM/iCzpWcebNYEdXpaK4tr2RhfQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.54.0.tgz", + "integrity": "sha512-k43D4qta/+6Fq+nCDhhv9yP2HdeKeP56QrUUTW7E6PhZP1US6NDqpJj4MY0jBHlJivVJD5P8NxrjuobZBJTCRw==", "cpu": [ "arm64" ], @@ -4492,9 +4476,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.53.2.tgz", - "integrity": "sha512-e6XqVmXlHrBlG56obu9gDRPW3O3hLxpwHpLsBJvuI8qqnsrtSZ9ERoWUXtPOkY8c78WghyPHZdmPhHLWNdAGEw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.54.0.tgz", + "integrity": "sha512-cOo7biqwkpawslEfox5Vs8/qj83M/aZCSSNIWpVzfU2CYHa2G3P1UN5WF01RdTHSgCkri7XOlTdtk17BezlV3A==", "cpu": [ "x64" ], @@ -4505,9 +4489,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.53.2.tgz", - "integrity": "sha512-v0E9lJW8VsrwPux5Qe5CwmH/CF/2mQs6xU1MF3nmUxmZUCHazCjLgYvToOk+YuuUqLQBio1qkkREhxhc656ViA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.54.0.tgz", + "integrity": "sha512-miSvuFkmvFbgJ1BevMa4CPCFt5MPGw094knM64W9I0giUIMMmRYcGW/JWZDriaw/k1kOBtsWh1z6nIFV1vPNtA==", "cpu": [ "arm64" ], @@ -4518,9 +4502,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.53.2.tgz", - "integrity": "sha512-ClAmAPx3ZCHtp6ysl4XEhWU69GUB1D+s7G9YjHGhIGCSrsg00nEGRRZHmINYxkdoJehde8VIsDC5t9C0gb6yqA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.54.0.tgz", + "integrity": "sha512-KGXIs55+b/ZfZsq9aR026tmr/+7tq6VG6MsnrvF4H8VhwflTIuYh+LFUlIsRdQSgrgmtM3fVATzEAj4hBQlaqQ==", "cpu": [ "x64" ], @@ -4531,9 +4515,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.53.2.tgz", - "integrity": "sha512-EPlb95nUsz6Dd9Qy13fI5kUPXNSljaG9FiJ4YUGU1O/Q77i5DYFW5KR8g1OzTcdZUqQQ1KdDqsTohdFVwCwjqg==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.54.0.tgz", + "integrity": "sha512-EHMUcDwhtdRGlXZsGSIuXSYwD5kOT9NVnx9sqzYiwAc91wfYOE1g1djOEDseZJKKqtHAHGwnGPQu3kytmfaXLQ==", "cpu": [ "arm" ], @@ -4544,9 +4528,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.53.2.tgz", - "integrity": "sha512-BOmnVW+khAUX+YZvNfa0tGTEMVVEerOxN0pDk2E6N6DsEIa2Ctj48FOMfNDdrwinocKaC7YXUZ1pHlKpnkja/Q==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.54.0.tgz", + "integrity": "sha512-+pBrqEjaakN2ySv5RVrj/qLytYhPKEUwk+e3SFU5jTLHIcAtqh2rLrd/OkbNuHJpsBgxsD8ccJt5ga/SeG0JmA==", "cpu": [ "arm" ], @@ -4557,9 +4541,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.53.2.tgz", - "integrity": "sha512-Xt2byDZ+6OVNuREgBXr4+CZDJtrVso5woFtpKdGPhpTPHcNG7D8YXeQzpNbFRxzTVqJf7kvPMCub/pcGUWgBjA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.54.0.tgz", + "integrity": "sha512-NSqc7rE9wuUaRBsBp5ckQ5CVz5aIRKCwsoa6WMF7G01sX3/qHUw/z4pv+D+ahL1EIKy6Enpcnz1RY8pf7bjwng==", "cpu": [ "arm64" ], @@ -4570,9 +4554,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.53.2.tgz", - "integrity": "sha512-+LdZSldy/I9N8+klim/Y1HsKbJ3BbInHav5qE9Iy77dtHC/pibw1SR/fXlWyAk0ThnpRKoODwnAuSjqxFRDHUQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.54.0.tgz", + "integrity": "sha512-gr5vDbg3Bakga5kbdpqx81m2n9IX8M6gIMlQQIXiLTNeQW6CucvuInJ91EuCJ/JYvc+rcLLsDFcfAD1K7fMofg==", "cpu": [ "arm64" ], @@ -4583,9 +4567,9 @@ ] }, "node_modules/@rollup/rollup-linux-loong64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.53.2.tgz", - "integrity": "sha512-8ms8sjmyc1jWJS6WdNSA23rEfdjWB30LH8Wqj0Cqvv7qSHnvw6kgMMXRdop6hkmGPlyYBdRPkjJnj3KCUHV/uQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loong64-gnu/-/rollup-linux-loong64-gnu-4.54.0.tgz", + "integrity": "sha512-gsrtB1NA3ZYj2vq0Rzkylo9ylCtW/PhpLEivlgWe0bpgtX5+9j9EZa0wtZiCjgu6zmSeZWyI/e2YRX1URozpIw==", "cpu": [ "loong64" ], @@ -4596,9 +4580,9 @@ ] }, "node_modules/@rollup/rollup-linux-ppc64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.53.2.tgz", - "integrity": "sha512-3HRQLUQbpBDMmzoxPJYd3W6vrVHOo2cVW8RUo87Xz0JPJcBLBr5kZ1pGcQAhdZgX9VV7NbGNipah1omKKe23/g==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-ppc64-gnu/-/rollup-linux-ppc64-gnu-4.54.0.tgz", + "integrity": "sha512-y3qNOfTBStmFNq+t4s7Tmc9hW2ENtPg8FeUD/VShI7rKxNW7O4fFeaYbMsd3tpFlIg1Q8IapFgy7Q9i2BqeBvA==", "cpu": [ "ppc64" ], @@ -4609,9 +4593,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.53.2.tgz", - "integrity": "sha512-fMjKi+ojnmIvhk34gZP94vjogXNNUKMEYs+EDaB/5TG/wUkoeua7p7VCHnE6T2Tx+iaghAqQX8teQzcvrYpaQA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.54.0.tgz", + "integrity": "sha512-89sepv7h2lIVPsFma8iwmccN7Yjjtgz0Rj/Ou6fEqg3HDhpCa+Et+YSufy27i6b0Wav69Qv4WBNl3Rs6pwhebQ==", "cpu": [ "riscv64" ], @@ -4622,9 +4606,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.53.2.tgz", - "integrity": "sha512-XuGFGU+VwUUV5kLvoAdi0Wz5Xbh2SrjIxCtZj6Wq8MDp4bflb/+ThZsVxokM7n0pcbkEr2h5/pzqzDYI7cCgLQ==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.54.0.tgz", + "integrity": "sha512-ZcU77ieh0M2Q8Ur7D5X7KvK+UxbXeDHwiOt/CPSBTI1fBmeDMivW0dPkdqkT4rOgDjrDDBUed9x4EgraIKoR2A==", "cpu": [ "riscv64" ], @@ -4635,9 +4619,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.53.2.tgz", - "integrity": "sha512-w6yjZF0P+NGzWR3AXWX9zc0DNEGdtvykB03uhonSHMRa+oWA6novflo2WaJr6JZakG2ucsyb+rvhrKac6NIy+w==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.54.0.tgz", + "integrity": "sha512-2AdWy5RdDF5+4YfG/YesGDDtbyJlC9LHmL6rZw6FurBJ5n4vFGupsOBGfwMRjBYH7qRQowT8D/U4LoSvVwOhSQ==", "cpu": [ "s390x" ], @@ -4648,9 +4632,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.53.2.tgz", - "integrity": "sha512-yo8d6tdfdeBArzC7T/PnHd7OypfI9cbuZzPnzLJIyKYFhAQ8SvlkKtKBMbXDxe1h03Rcr7u++nFS7tqXz87Gtw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.54.0.tgz", + "integrity": "sha512-WGt5J8Ij/rvyqpFexxk3ffKqqbLf9AqrTBbWDk7ApGUzaIs6V+s2s84kAxklFwmMF/vBNGrVdYgbblCOFFezMQ==", "cpu": [ "x64" ], @@ -4661,9 +4645,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.53.2.tgz", - "integrity": "sha512-ah59c1YkCxKExPP8O9PwOvs+XRLKwh/mV+3YdKqQ5AMQ0r4M4ZDuOrpWkUaqO7fzAHdINzV9tEVu8vNw48z0lA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.54.0.tgz", + "integrity": "sha512-JzQmb38ATzHjxlPHuTH6tE7ojnMKM2kYNzt44LO/jJi8BpceEC8QuXYA908n8r3CNuG/B3BV8VR3Hi1rYtmPiw==", "cpu": [ "x64" ], @@ -4674,9 +4658,9 @@ ] }, "node_modules/@rollup/rollup-openharmony-arm64": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.53.2.tgz", - "integrity": "sha512-4VEd19Wmhr+Zy7hbUsFZ6YXEiP48hE//KPLCSVNY5RMGX2/7HZ+QkN55a3atM1C/BZCGIgqN+xrVgtdak2S9+A==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-openharmony-arm64/-/rollup-openharmony-arm64-4.54.0.tgz", + "integrity": "sha512-huT3fd0iC7jigGh7n3q/+lfPcXxBi+om/Rs3yiFxjvSxbSB6aohDFXbWvlspaqjeOh+hx7DDHS+5Es5qRkWkZg==", "cpu": [ "arm64" ], @@ -4687,9 +4671,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.53.2.tgz", - "integrity": "sha512-IlbHFYc/pQCgew/d5fslcy1KEaYVCJ44G8pajugd8VoOEI8ODhtb/j8XMhLpwHCMB3yk2J07ctup10gpw2nyMA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.54.0.tgz", + "integrity": "sha512-c2V0W1bsKIKfbLMBu/WGBz6Yci8nJ/ZJdheE0EwB73N3MvHYKiKGs3mVilX4Gs70eGeDaMqEob25Tw2Gb9Nqyw==", "cpu": [ "arm64" ], @@ -4700,9 +4684,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.53.2.tgz", - "integrity": "sha512-lNlPEGgdUfSzdCWU176ku/dQRnA7W+Gp8d+cWv73jYrb8uT7HTVVxq62DUYxjbaByuf1Yk0RIIAbDzp+CnOTFg==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.54.0.tgz", + "integrity": "sha512-woEHgqQqDCkAzrDhvDipnSirm5vxUXtSKDYTVpZG3nUdW/VVB5VdCYA2iReSj/u3yCZzXID4kuKG7OynPnB3WQ==", "cpu": [ "ia32" ], @@ -4713,9 +4697,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-gnu": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.53.2.tgz", - "integrity": "sha512-S6YojNVrHybQis2lYov1sd+uj7K0Q05NxHcGktuMMdIQ2VixGwAfbJ23NnlvvVV1bdpR2m5MsNBViHJKcA4ADw==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-gnu/-/rollup-win32-x64-gnu-4.54.0.tgz", + "integrity": "sha512-dzAc53LOuFvHwbCEOS0rPbXp6SIhAf2txMP5p6mGyOXXw5mWY8NGGbPMPrs4P1WItkfApDathBj/NzMLUZ9rtQ==", "cpu": [ "x64" ], @@ -4726,9 +4710,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.53.2.tgz", - "integrity": "sha512-k+/Rkcyx//P6fetPoLMb8pBeqJBNGx81uuf7iljX9++yNBVRDQgD04L+SVXmXmh5ZP4/WOp4mWF0kmi06PW2tA==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.54.0.tgz", + "integrity": "sha512-hYT5d3YNdSh3mbCU1gwQyPgQd3T2ne0A3KG8KSBdav5TiBg6eInVmV+TeR5uHufiIgSFg0XsOWGW5/RhNcSvPg==", "cpu": [ "x64" ], @@ -4789,6 +4773,7 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz", "integrity": "sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "type-detect": "4.0.8" @@ -4798,6 +4783,7 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -4817,6 +4803,7 @@ "version": "8.0.3", "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-8.0.3.tgz", "integrity": "sha512-hw6HbX+GyVZzmaYNh82Ecj1vdGZrqVIn/keDTg63IgAwiQPO+xCz99uG6Woqgb4tM0mUiFENKZ4cqd7IX94AXQ==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", @@ -4827,16 +4814,17 @@ "version": "0.7.3", "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.3.tgz", "integrity": "sha512-DE427ROAphMQzU4ENbliGYrBSYPXF+TtLg9S8vzeA+OF4ZKzoDdzfL8sxuMUGS/lgRhM6j1URSk9ghf7Xo1tyA==", + "dev": true, "license": "(Unlicense OR Apache-2.0)" }, "node_modules/@smithy/abort-controller": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.5.tgz", - "integrity": "sha512-j7HwVkBw68YW8UmFRcjZOmssE77Rvk0GWAIN1oFBhsaovQmZWYCIcGa9/pwRB0ExI8Sk9MWNALTjftjHZea7VA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/abort-controller/-/abort-controller-4.2.7.tgz", + "integrity": "sha512-rzMY6CaKx2qxrbYbqjXWS0plqEy7LOdKHS0bg4ixJ6aoGDPNUcLWk/FRNuCILh7GKLG9TFUXYYeQQldMBBwuyw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -4871,17 +4859,17 @@ } }, "node_modules/@smithy/config-resolver": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.3.tgz", - "integrity": "sha512-ezHLe1tKLUxDJo2LHtDuEDyWXolw8WGOR92qb4bQdWq/zKenO5BvctZGrVJBK08zjezSk7bmbKFOXIVyChvDLw==", + "version": "4.4.5", + "resolved": "https://registry.npmjs.org/@smithy/config-resolver/-/config-resolver-4.4.5.tgz", + "integrity": "sha512-HAGoUAFYsUkoSckuKbCPayECeMim8pOu+yLy1zOxt1sifzEbrsRpYa+mKcMdiHKMeiqOibyPG0sFJnmaV/OGEg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-config-provider": "^4.2.0", - "@smithy/util-endpoints": "^3.2.5", - "@smithy/util-middleware": "^4.2.5", + "@smithy/util-endpoints": "^3.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -4889,19 +4877,19 @@ } }, "node_modules/@smithy/core": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.18.3.tgz", - "integrity": "sha512-qqpNskkbHOSfrbFbjhYj5o8VMXO26fvN1K/+HbCzUNlTuxgNcPRouUDNm+7D6CkN244WG7aK533Ne18UtJEgAA==", + "version": "3.20.0", + "resolved": "https://registry.npmjs.org/@smithy/core/-/core-3.20.0.tgz", + "integrity": "sha512-WsSHCPq/neD5G/MkK4csLI5Y5Pkd9c1NMfpYEKeghSGaD4Ja1qLIohRQf2D5c1Uy5aXp76DeKHkzWZ9KAlHroQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/middleware-serde": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-body-length-browser": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-stream": "^4.5.6", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-stream": "^4.5.8", "@smithy/util-utf8": "^4.2.0", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" @@ -4911,16 +4899,16 @@ } }, "node_modules/@smithy/credential-provider-imds": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.5.tgz", - "integrity": "sha512-BZwotjoZWn9+36nimwm/OLIcVe+KYRwzMjfhd4QT7QxPm9WY0HiOV8t/Wlh+HVUif0SBVV7ksq8//hPaBC/okQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/credential-provider-imds/-/credential-provider-imds-4.2.7.tgz", + "integrity": "sha512-CmduWdCiILCRNbQWFR0OcZlUPVtyE49Sr8yYL0rZQ4D/wKxiNzBNS/YHemvnbkIWj623fplgkexUd/c9CAKdoA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -4928,14 +4916,14 @@ } }, "node_modules/@smithy/eventstream-codec": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.5.tgz", - "integrity": "sha512-Ogt4Zi9hEbIP17oQMd68qYOHUzmH47UkK7q7Gl55iIm9oKt27MUGrC5JfpMroeHjdkOliOA4Qt3NQ1xMq/nrlA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-codec/-/eventstream-codec-4.2.7.tgz", + "integrity": "sha512-DrpkEoM3j9cBBWhufqBwnbbn+3nf1N9FP6xuVJ+e220jbactKuQgaZwjwP5CP1t+O94brm2JgVMD2atMGX3xIQ==", "dev": true, "license": "Apache-2.0", "dependencies": { "@aws-crypto/crc32": "5.2.0", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "@smithy/util-hex-encoding": "^4.2.0", "tslib": "^2.6.2" }, @@ -4944,14 +4932,14 @@ } }, "node_modules/@smithy/eventstream-serde-browser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.5.tgz", - "integrity": "sha512-HohfmCQZjppVnKX2PnXlf47CW3j92Ki6T/vkAT2DhBR47e89pen3s4fIa7otGTtrVxmj7q+IhH0RnC5kpR8wtw==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-browser/-/eventstream-serde-browser-4.2.7.tgz", + "integrity": "sha512-ujzPk8seYoDBmABDE5YqlhQZAXLOrtxtJLrbhHMKjBoG5b4dK4i6/mEU+6/7yXIAkqOO8sJ6YxZl+h0QQ1IJ7g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -4959,13 +4947,13 @@ } }, "node_modules/@smithy/eventstream-serde-config-resolver": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.5.tgz", - "integrity": "sha512-ibjQjM7wEXtECiT6my1xfiMH9IcEczMOS6xiCQXoUIYSj5b1CpBbJ3VYbdwDy8Vcg5JHN7eFpOCGk8nyZAltNQ==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-config-resolver/-/eventstream-serde-config-resolver-4.3.7.tgz", + "integrity": "sha512-x7BtAiIPSaNaWuzm24Q/mtSkv+BrISO/fmheiJ39PKRNH3RmH2Hph/bUKSOBOBC9unqfIYDhKTHwpyZycLGPVQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -4973,14 +4961,14 @@ } }, "node_modules/@smithy/eventstream-serde-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.5.tgz", - "integrity": "sha512-+elOuaYx6F2H6x1/5BQP5ugv12nfJl66GhxON8+dWVUEDJ9jah/A0tayVdkLRP0AeSac0inYkDz5qBFKfVp2Gg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-node/-/eventstream-serde-node-4.2.7.tgz", + "integrity": "sha512-roySCtHC5+pQq5lK4be1fZ/WR6s/AxnPaLfCODIPArtN2du8s5Ot4mKVK3pPtijL/L654ws592JHJ1PbZFF6+A==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-serde-universal": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/eventstream-serde-universal": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -4988,14 +4976,14 @@ } }, "node_modules/@smithy/eventstream-serde-universal": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.5.tgz", - "integrity": "sha512-G9WSqbST45bmIFaeNuP/EnC19Rhp54CcVdX9PDL1zyEB514WsDVXhlyihKlGXnRycmHNmVv88Bvvt4EYxWef/Q==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/eventstream-serde-universal/-/eventstream-serde-universal-4.2.7.tgz", + "integrity": "sha512-QVD+g3+icFkThoy4r8wVFZMsIP08taHVKjE6Jpmz8h5CgX/kk6pTODq5cht0OMtcapUx+xrPzUTQdA+TmO0m1g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/eventstream-codec": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/eventstream-codec": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5003,15 +4991,15 @@ } }, "node_modules/@smithy/fetch-http-handler": { - "version": "5.3.6", - "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.6.tgz", - "integrity": "sha512-3+RG3EA6BBJ/ofZUeTFJA7mHfSYrZtQIrDP9dI8Lf7X6Jbos2jptuLrAAteDiFVrmbEmLSuRG/bUKzfAXk7dhg==", + "version": "5.3.8", + "resolved": "https://registry.npmjs.org/@smithy/fetch-http-handler/-/fetch-http-handler-5.3.8.tgz", + "integrity": "sha512-h/Fi+o7mti4n8wx1SR6UHWLaakwHRx29sizvp8OOm7iqwKGFneT06GCSFhml6Bha5BT6ot5pj3CYZnCHhGC2Rg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "tslib": "^2.6.2" }, @@ -5020,15 +5008,15 @@ } }, "node_modules/@smithy/hash-blob-browser": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.6.tgz", - "integrity": "sha512-8P//tA8DVPk+3XURk2rwcKgYwFvwGwmJH/wJqQiSKwXZtf/LiZK+hbUZmPj/9KzM+OVSwe4o85KTp5x9DUZTjw==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/hash-blob-browser/-/hash-blob-browser-4.2.8.tgz", + "integrity": "sha512-07InZontqsM1ggTCPSRgI7d8DirqRrnpL7nIACT4PW0AWrgDiHhjGZzbAE5UtRSiU0NISGUYe7/rri9ZeWyDpw==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/chunked-blob-reader": "^5.2.0", "@smithy/chunked-blob-reader-native": "^4.2.1", - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5036,13 +5024,13 @@ } }, "node_modules/@smithy/hash-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.5.tgz", - "integrity": "sha512-DpYX914YOfA3UDT9CN1BM787PcHfWRBB43fFGCYrZFUH0Jv+5t8yYl+Pd5PW4+QzoGEDvn5d5QIO4j2HyYZQSA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-node/-/hash-node-4.2.7.tgz", + "integrity": "sha512-PU/JWLTBCV1c8FtB8tEFnY4eV1tSfBc7bDBADHfn1K+uRbPgSJ9jnJp0hyjiFN2PMdPzxsf1Fdu0eo9fJ760Xw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -5052,13 +5040,13 @@ } }, "node_modules/@smithy/hash-stream-node": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.5.tgz", - "integrity": "sha512-6+do24VnEyvWcGdHXomlpd0m8bfZePpUKBy7m311n+JuRwug8J4dCanJdTymx//8mi0nlkflZBvJe+dEO/O12Q==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/hash-stream-node/-/hash-stream-node-4.2.7.tgz", + "integrity": "sha512-ZQVoAwNYnFMIbd4DUc517HuwNelJUY6YOzwqrbcAgCnVn+79/OK7UjwA93SPpdTOpKDVkLIzavWm/Ck7SmnDPQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -5067,13 +5055,13 @@ } }, "node_modules/@smithy/invalid-dependency": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.5.tgz", - "integrity": "sha512-2L2erASEro1WC5nV+plwIMxrTXpvpfzl4e+Nre6vBVRR2HKeGGcvpJyyL3/PpiSg+cJG2KpTmZmq934Olb6e5A==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/invalid-dependency/-/invalid-dependency-4.2.7.tgz", + "integrity": "sha512-ncvgCr9a15nPlkhIUx3CU4d7E7WEuVJOV7fS7nnK2hLtPK9tYRBkMHQbhXU1VvvKeBm/O0x26OEoBq+ngFpOEQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5094,13 +5082,13 @@ } }, "node_modules/@smithy/md5-js": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.5.tgz", - "integrity": "sha512-Bt6jpSTMWfjCtC0s79gZ/WZ1w90grfmopVOWqkI2ovhjpD5Q2XRXuecIPB9689L2+cCySMbaXDhBPU56FKNDNg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/md5-js/-/md5-js-4.2.7.tgz", + "integrity": "sha512-Wv6JcUxtOLTnxvNjDnAiATUsk8gvA6EeS8zzHig07dotpByYsLot+m0AaQEniUBjx97AC41MQR4hW0baraD1Xw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" }, @@ -5109,14 +5097,14 @@ } }, "node_modules/@smithy/middleware-content-length": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.5.tgz", - "integrity": "sha512-Y/RabVa5vbl5FuHYV2vUCwvh/dqzrEY/K2yWPSqvhFUwIY0atLqO4TienjBXakoy4zrKAMCZwg+YEqmH7jaN7A==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-content-length/-/middleware-content-length-4.2.7.tgz", + "integrity": "sha512-GszfBfCcvt7kIbJ41LuNa5f0wvQCHhnGx/aDaZJCCT05Ld6x6U2s0xsc/0mBFONBZjQJp2U/0uSJ178OXOwbhg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5124,19 +5112,19 @@ } }, "node_modules/@smithy/middleware-endpoint": { - "version": "4.3.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.3.10.tgz", - "integrity": "sha512-SoAag3QnWBFoXjwa1jenEThkzJYClidZUyqsLKwWZ8kOlZBwehrLBp4ygVDjNEM2a2AamCQ2FBA/HuzKJ/LiTA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@smithy/middleware-endpoint/-/middleware-endpoint-4.4.1.tgz", + "integrity": "sha512-gpLspUAoe6f1M6H0u4cVuFzxZBrsGZmjx2O9SigurTx4PbntYa4AJ+o0G0oGm1L2oSX6oBhcGHwrfJHup2JnJg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.3", - "@smithy/middleware-serde": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", - "@smithy/url-parser": "^4.2.5", - "@smithy/util-middleware": "^4.2.5", + "@smithy/core": "^3.20.0", + "@smithy/middleware-serde": "^4.2.8", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", + "@smithy/url-parser": "^4.2.7", + "@smithy/util-middleware": "^4.2.7", "tslib": "^2.6.2" }, "engines": { @@ -5144,19 +5132,19 @@ } }, "node_modules/@smithy/middleware-retry": { - "version": "4.4.10", - "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.10.tgz", - "integrity": "sha512-6fOwX34gXxcqKa3bsG0mR0arc2Cw4ddOS6tp3RgUD2yoTrDTbQ2aVADnDjhUuxaiDZN2iilxndgGDhnpL/XvJA==", + "version": "4.4.17", + "resolved": "https://registry.npmjs.org/@smithy/middleware-retry/-/middleware-retry-4.4.17.tgz", + "integrity": "sha512-MqbXK6Y9uq17h+4r0ogu/sBT6V/rdV+5NvYL7ZV444BKfQygYe8wAhDrVXagVebN6w2RE0Fm245l69mOsPGZzg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/service-error-classification": "^4.2.5", - "@smithy/smithy-client": "^4.9.6", - "@smithy/types": "^4.9.0", - "@smithy/util-middleware": "^4.2.5", - "@smithy/util-retry": "^4.2.5", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", + "@smithy/util-middleware": "^4.2.7", + "@smithy/util-retry": "^4.2.7", "@smithy/uuid": "^1.1.0", "tslib": "^2.6.2" }, @@ -5165,14 +5153,14 @@ } }, "node_modules/@smithy/middleware-serde": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.5.tgz", - "integrity": "sha512-La1ldWTJTZ5NqQyPqnCNeH9B+zjFhrNoQIL1jTh4zuqXRlmXhxYHhMtI1/92OlnoAtp6JoN7kzuwhWoXrBwPqg==", + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/@smithy/middleware-serde/-/middleware-serde-4.2.8.tgz", + "integrity": "sha512-8rDGYen5m5+NV9eHv9ry0sqm2gI6W7mc1VSFMtn6Igo25S507/HaOX9LTHAS2/J32VXD0xSzrY0H5FJtOMS4/w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5180,13 +5168,13 @@ } }, "node_modules/@smithy/middleware-stack": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.5.tgz", - "integrity": "sha512-bYrutc+neOyWxtZdbB2USbQttZN0mXaOyYLIsaTbJhFsfpXyGWUxJpEuO1rJ8IIJm2qH4+xJT0mxUSsEDTYwdQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/middleware-stack/-/middleware-stack-4.2.7.tgz", + "integrity": "sha512-bsOT0rJ+HHlZd9crHoS37mt8qRRN/h9jRve1SXUhVbkRzu0QaNYZp1i1jha4n098tsvROjcwfLlfvcFuJSXEsw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5194,15 +5182,15 @@ } }, "node_modules/@smithy/node-config-provider": { - "version": "4.3.5", - "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.5.tgz", - "integrity": "sha512-UTurh1C4qkVCtqggI36DGbLB2Kv8UlcFdMXDcWMbqVY2uRg0XmT9Pb4Vj6oSQ34eizO1fvR0RnFV4Axw4IrrAg==", + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/@smithy/node-config-provider/-/node-config-provider-4.3.7.tgz", + "integrity": "sha512-7r58wq8sdOcrwWe+klL9y3bc4GW1gnlfnFOuL7CXa7UzfhzhxKuzNdtqgzmTV+53lEp9NXh5hY/S4UgjLOzPfw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/shared-ini-file-loader": "^4.4.0", - "@smithy/types": "^4.9.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/shared-ini-file-loader": "^4.4.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5210,16 +5198,16 @@ } }, "node_modules/@smithy/node-http-handler": { - "version": "4.4.5", - "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.5.tgz", - "integrity": "sha512-CMnzM9R2WqlqXQGtIlsHMEZfXKJVTIrqCNoSd/QpAyp+Dw0a1Vps13l6ma1fH8g7zSPNsA59B/kWgeylFuA/lw==", + "version": "4.4.7", + "resolved": "https://registry.npmjs.org/@smithy/node-http-handler/-/node-http-handler-4.4.7.tgz", + "integrity": "sha512-NELpdmBOO6EpZtWgQiHjoShs1kmweaiNuETUpuup+cmm/xJYjT4eUjfhrXRP4jCOaAsS3c3yPsP3B+K+/fyPCQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/querystring-builder": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/querystring-builder": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5227,13 +5215,13 @@ } }, "node_modules/@smithy/property-provider": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.5.tgz", - "integrity": "sha512-8iLN1XSE1rl4MuxvQ+5OSk/Zb5El7NJZ1td6Tn+8dQQHIjp59Lwl6bd0+nzw6SKm2wSSriH2v/I9LPzUic7EOg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/property-provider/-/property-provider-4.2.7.tgz", + "integrity": "sha512-jmNYKe9MGGPoSl/D7JDDs1C8b3dC8f/w78LbaVfoTtWy4xAd5dfjaFG9c9PWPihY4ggMQNQSMtzU77CNgAJwmA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5241,13 +5229,13 @@ } }, "node_modules/@smithy/protocol-http": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.5.tgz", - "integrity": "sha512-RlaL+sA0LNMp03bf7XPbFmT5gN+w3besXSWMkA8rcmxLSVfiEXElQi4O2IWwPfxzcHkxqrwBFMbngB8yx/RvaQ==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/protocol-http/-/protocol-http-5.3.7.tgz", + "integrity": "sha512-1r07pb994I20dD/c2seaZhoCuNYm0rWrvBxhCQ70brNh11M5Ml2ew6qJVo0lclB3jMIXirD4s2XRXRe7QEi0xA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5255,13 +5243,13 @@ } }, "node_modules/@smithy/querystring-builder": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.5.tgz", - "integrity": "sha512-y98otMI1saoajeik2kLfGyRp11e5U/iJYH/wLCh3aTV/XutbGT9nziKGkgCaMD1ghK7p6htHMm6b6scl9JRUWg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-builder/-/querystring-builder-4.2.7.tgz", + "integrity": "sha512-eKONSywHZxK4tBxe2lXEysh8wbBdvDWiA+RIuaxZSgCMmA0zMgoDpGLJhnyj+c0leOQprVnXOmcB4m+W9Rw7sg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "@smithy/util-uri-escape": "^4.2.0", "tslib": "^2.6.2" }, @@ -5270,13 +5258,13 @@ } }, "node_modules/@smithy/querystring-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.5.tgz", - "integrity": "sha512-031WCTdPYgiQRYNPXznHXof2YM0GwL6SeaSyTH/P72M1Vz73TvCNH2Nq8Iu2IEPq9QP2yx0/nrw5YmSeAi/AjQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/querystring-parser/-/querystring-parser-4.2.7.tgz", + "integrity": "sha512-3X5ZvzUHmlSTHAXFlswrS6EGt8fMSIxX/c3Rm1Pni3+wYWB6cjGocmRIoqcQF9nU5OgGmL0u7l9m44tSUpfj9w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5284,26 +5272,26 @@ } }, "node_modules/@smithy/service-error-classification": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.5.tgz", - "integrity": "sha512-8fEvK+WPE3wUAcDvqDQG1Vk3ANLR8Px979te96m84CbKAjBVf25rPYSzb4xU4hlTyho7VhOGnh5i62D/JVF0JQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/service-error-classification/-/service-error-classification-4.2.7.tgz", + "integrity": "sha512-YB7oCbukqEb2Dlh3340/8g8vNGbs/QsNNRms+gv3N2AtZz9/1vSBx6/6tpwQpZMEJFs7Uq8h4mmOn48ZZ72MkA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0" + "@smithy/types": "^4.11.0" }, "engines": { "node": ">=18.0.0" } }, "node_modules/@smithy/shared-ini-file-loader": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.0.tgz", - "integrity": "sha512-5WmZ5+kJgJDjwXXIzr1vDTG+RhF9wzSODQBfkrQ2VVkYALKGvZX1lgVSxEkgicSAFnFhPj5rudJV0zoinqS0bA==", + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/@smithy/shared-ini-file-loader/-/shared-ini-file-loader-4.4.2.tgz", + "integrity": "sha512-M7iUUff/KwfNunmrgtqBfvZSzh3bmFgv/j/t1Y1dQ+8dNo34br1cqVEqy6v0mYEgi0DkGO7Xig0AnuOaEGVlcg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5311,17 +5299,17 @@ } }, "node_modules/@smithy/signature-v4": { - "version": "5.3.5", - "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.5.tgz", - "integrity": "sha512-xSUfMu1FT7ccfSXkoLl/QRQBi2rOvi3tiBZU2Tdy3I6cgvZ6SEi9QNey+lqps/sJRnogIS+lq+B1gxxbra2a/w==", + "version": "5.3.7", + "resolved": "https://registry.npmjs.org/@smithy/signature-v4/-/signature-v4-5.3.7.tgz", + "integrity": "sha512-9oNUlqBlFZFOSdxgImA6X5GFuzE7V2H7VG/7E70cdLhidFbdtvxxt81EHgykGK5vq5D3FafH//X+Oy31j3CKOg==", "dev": true, "license": "Apache-2.0", "dependencies": { "@smithy/is-array-buffer": "^4.2.0", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", "@smithy/util-hex-encoding": "^4.2.0", - "@smithy/util-middleware": "^4.2.5", + "@smithy/util-middleware": "^4.2.7", "@smithy/util-uri-escape": "^4.2.0", "@smithy/util-utf8": "^4.2.0", "tslib": "^2.6.2" @@ -5331,18 +5319,18 @@ } }, "node_modules/@smithy/smithy-client": { - "version": "4.9.6", - "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.9.6.tgz", - "integrity": "sha512-hGz42hggqReicRRZUvrKDQiAmoJnx1Q+XfAJnYAGu544gOfxQCAC3hGGD7+Px2gEUUxB/kKtQV7LOtBRNyxteQ==", + "version": "4.10.2", + "resolved": "https://registry.npmjs.org/@smithy/smithy-client/-/smithy-client-4.10.2.tgz", + "integrity": "sha512-D5z79xQWpgrGpAHb054Fn2CCTQZpog7JELbVQ6XAvXs5MNKWf28U9gzSBlJkOyMl9LA1TZEjRtwvGXfP0Sl90g==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/core": "^3.18.3", - "@smithy/middleware-endpoint": "^4.3.10", - "@smithy/middleware-stack": "^4.2.5", - "@smithy/protocol-http": "^5.3.5", - "@smithy/types": "^4.9.0", - "@smithy/util-stream": "^4.5.6", + "@smithy/core": "^3.20.0", + "@smithy/middleware-endpoint": "^4.4.1", + "@smithy/middleware-stack": "^4.2.7", + "@smithy/protocol-http": "^5.3.7", + "@smithy/types": "^4.11.0", + "@smithy/util-stream": "^4.5.8", "tslib": "^2.6.2" }, "engines": { @@ -5350,9 +5338,9 @@ } }, "node_modules/@smithy/types": { - "version": "4.9.0", - "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.9.0.tgz", - "integrity": "sha512-MvUbdnXDTwykR8cB1WZvNNwqoWVaTRA0RLlLmf/cIFNMM2cKWz01X4Ly6SMC4Kks30r8tT3Cty0jmeWfiuyHTA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@smithy/types/-/types-4.11.0.tgz", + "integrity": "sha512-mlrmL0DRDVe3mNrjTcVcZEgkFmufITfUAPBEA+AHYiIeYyJebso/He1qLbP3PssRe22KUzLRpQSdBPbXdgZ2VA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5363,14 +5351,14 @@ } }, "node_modules/@smithy/url-parser": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.5.tgz", - "integrity": "sha512-VaxMGsilqFnK1CeBX+LXnSuaMx4sTL/6znSZh2829txWieazdVxr54HmiyTsIbpOTLcf5nYpq9lpzmwRdxj6rQ==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/url-parser/-/url-parser-4.2.7.tgz", + "integrity": "sha512-/RLtVsRV4uY3qPWhBDsjwahAtt3x2IsMGnP5W1b2VZIe+qgCqkLxI1UOHDZp1Q1QSOrdOR32MF3Ph2JfWT1VHg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/querystring-parser": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/querystring-parser": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5446,15 +5434,15 @@ } }, "node_modules/@smithy/util-defaults-mode-browser": { - "version": "4.3.9", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.9.tgz", - "integrity": "sha512-Bh5bU40BgdkXE2BcaNazhNtEXi1TC0S+1d84vUwv5srWfvbeRNUKFzwKQgC6p6MXPvEgw+9+HdX3pOwT6ut5aw==", + "version": "4.3.16", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-browser/-/util-defaults-mode-browser-4.3.16.tgz", + "integrity": "sha512-/eiSP3mzY3TsvUOYMeL4EqUX6fgUOj2eUOU4rMMgVbq67TiRLyxT7Xsjxq0bW3OwuzK009qOwF0L2OgJqperAQ==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.6", - "@smithy/types": "^4.9.0", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5462,18 +5450,18 @@ } }, "node_modules/@smithy/util-defaults-mode-node": { - "version": "4.2.12", - "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.12.tgz", - "integrity": "sha512-EHZwe1E9Q7umImIyCKQg/Cm+S+7rjXxCRvfGmKifqwYvn7M8M4ZcowwUOQzvuuxUUmdzCkqL0Eq0z1m74Pq6pw==", + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/@smithy/util-defaults-mode-node/-/util-defaults-mode-node-4.2.19.tgz", + "integrity": "sha512-3a4+4mhf6VycEJyHIQLypRbiwG6aJvbQAeRAVXydMmfweEPnLLabRbdyo/Pjw8Rew9vjsh5WCdhmDaHkQnhhhA==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/config-resolver": "^4.4.3", - "@smithy/credential-provider-imds": "^4.2.5", - "@smithy/node-config-provider": "^4.3.5", - "@smithy/property-provider": "^4.2.5", - "@smithy/smithy-client": "^4.9.6", - "@smithy/types": "^4.9.0", + "@smithy/config-resolver": "^4.4.5", + "@smithy/credential-provider-imds": "^4.2.7", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/property-provider": "^4.2.7", + "@smithy/smithy-client": "^4.10.2", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5481,14 +5469,14 @@ } }, "node_modules/@smithy/util-endpoints": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.5.tgz", - "integrity": "sha512-3O63AAWu2cSNQZp+ayl9I3NapW1p1rR5mlVHcF6hAB1dPZUQFfRPYtplWX/3xrzWthPGj5FqB12taJJCfH6s8A==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-endpoints/-/util-endpoints-3.2.7.tgz", + "integrity": "sha512-s4ILhyAvVqhMDYREeTS68R43B1V5aenV5q/V1QpRQJkCXib5BPRo4s7uNdzGtIKxaPHCfU/8YkvPAEvTpxgspg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/node-config-provider": "^4.3.5", - "@smithy/types": "^4.9.0", + "@smithy/node-config-provider": "^4.3.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5509,13 +5497,13 @@ } }, "node_modules/@smithy/util-middleware": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.5.tgz", - "integrity": "sha512-6Y3+rvBF7+PZOc40ybeZMcGln6xJGVeY60E7jy9Mv5iKpMJpHgRE6dKy9ScsVxvfAYuEX4Q9a65DQX90KaQ3bA==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-middleware/-/util-middleware-4.2.7.tgz", + "integrity": "sha512-i1IkpbOae6NvIKsEeLLM9/2q4X+M90KV3oCFgWQI4q0Qz+yUZvsr+gZPdAEAtFhWQhAHpTsJO8DRJPuwVyln+w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/types": "^4.9.0", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5523,14 +5511,14 @@ } }, "node_modules/@smithy/util-retry": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.5.tgz", - "integrity": "sha512-GBj3+EZBbN4NAqJ/7pAhsXdfzdlznOh8PydUijy6FpNIMnHPSMO2/rP4HKu+UFeikJxShERk528oy7GT79YiJg==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-retry/-/util-retry-4.2.7.tgz", + "integrity": "sha512-SvDdsQyF5CIASa4EYVT02LukPHVzAgUA4kMAuZ97QJc2BpAqZfA4PINB8/KOoCXEw9tsuv/jQjMeaHFvxdLNGg==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/service-error-classification": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/service-error-classification": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5538,15 +5526,15 @@ } }, "node_modules/@smithy/util-stream": { - "version": "4.5.6", - "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.6.tgz", - "integrity": "sha512-qWw/UM59TiaFrPevefOZ8CNBKbYEP6wBAIlLqxn3VAIo9rgnTNc4ASbVrqDmhuwI87usnjhdQrxodzAGFFzbRQ==", + "version": "4.5.8", + "resolved": "https://registry.npmjs.org/@smithy/util-stream/-/util-stream-4.5.8.tgz", + "integrity": "sha512-ZnnBhTapjM0YPGUSmOs0Mcg/Gg87k503qG4zU2v/+Js2Gu+daKOJMeqcQns8ajepY8tgzzfYxl6kQyZKml6O2w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/fetch-http-handler": "^5.3.6", - "@smithy/node-http-handler": "^4.4.5", - "@smithy/types": "^4.9.0", + "@smithy/fetch-http-handler": "^5.3.8", + "@smithy/node-http-handler": "^4.4.7", + "@smithy/types": "^4.11.0", "@smithy/util-base64": "^4.3.0", "@smithy/util-buffer-from": "^4.2.0", "@smithy/util-hex-encoding": "^4.2.0", @@ -5585,14 +5573,14 @@ } }, "node_modules/@smithy/util-waiter": { - "version": "4.2.5", - "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.5.tgz", - "integrity": "sha512-Dbun99A3InifQdIrsXZ+QLcC0PGBPAdrl4cj1mTgJvyc9N2zf7QSxg8TBkzsCmGJdE3TLbO9ycwpY0EkWahQ/g==", + "version": "4.2.7", + "resolved": "https://registry.npmjs.org/@smithy/util-waiter/-/util-waiter-4.2.7.tgz", + "integrity": "sha512-vHJFXi9b7kUEpHWUCY3Twl+9NPOZvQ0SAi+Ewtn48mbiJk4JY9MZmKQjGB4SCvVb9WPiSphZJYY6RIbs+grrzw==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@smithy/abort-controller": "^4.2.5", - "@smithy/types": "^4.9.0", + "@smithy/abort-controller": "^4.2.7", + "@smithy/types": "^4.11.0", "tslib": "^2.6.2" }, "engines": { @@ -5643,14 +5631,14 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5661,9 +5649,9 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -5675,21 +5663,20 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -5704,16 +5691,16 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -5728,13 +5715,13 @@ } }, "node_modules/@stylistic/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -5789,15 +5776,6 @@ "node": ">=14.16" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", - "license": "MIT", - "engines": { - "node": ">= 10" - } - }, "node_modules/@tsconfig/node10": { "version": "1.0.12", "resolved": "https://registry.npmjs.org/@tsconfig/node10/-/node10-1.0.12.tgz", @@ -6097,9 +6075,9 @@ "license": "MIT" }, "node_modules/@types/lodash": { - "version": "4.17.20", - "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.20.tgz", - "integrity": "sha512-H3MHACvFUEiujabxhaI/ImO6gUrd8oOurg7LQtS7mbwIXA/cUqWrvBsaeJ23aZEPk1TAYkurjfMbSELfoCXlGA==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-FOvQ0YPD5NOfPgMzJihoT+Za5pdkDJWcbpuj1DjaKZIr/gxodQjY/uWEFlTNqW2ugXHUiL8lRQgw63dzKHZdeQ==", "license": "MIT" }, "node_modules/@types/markdown-it": { @@ -6323,9 +6301,9 @@ "license": "MIT" }, "node_modules/@types/yargs": { - "version": "17.0.34", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.34.tgz", - "integrity": "sha512-KExbHVa92aJpw9WDQvzBaGVE2/Pz+pLZQloT2hjL8IqsZnV62rlPOYvNnLmf/L2dyllfVUOVBj64M0z/46eR2A==", + "version": "17.0.35", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-17.0.35.tgz", + "integrity": "sha512-qUHkeCyQFxMXg79wQfTtfndEC+N9ZZg76HJftDJp+qH2tV7Gj4OJi7l+PiWwJ+pWtW8GwSmqsDj/oymhrTWXjg==", "dev": true, "license": "MIT", "dependencies": { @@ -6404,14 +6382,14 @@ } }, "node_modules/@typescript-eslint/project-service": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.46.4.tgz", - "integrity": "sha512-nPiRSKuvtTN+no/2N1kt2tUh/HoFzeEgOm9fQ6XQk4/ApGqjx0zFIIaLJ6wooR1HIoozvj2j6vTi/1fgAz7UYQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/project-service/-/project-service-8.50.0.tgz", + "integrity": "sha512-Cg/nQcL1BcoTijEWyx4mkVC56r8dj44bFDvBdygifuS20f3OZCHmFbjF34DPSi07kwlFvqfv/xOLnJ5DquxSGQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/tsconfig-utils": "^8.46.4", - "@typescript-eslint/types": "^8.46.4", + "@typescript-eslint/tsconfig-utils": "^8.50.0", + "@typescript-eslint/types": "^8.50.0", "debug": "^4.3.4" }, "engines": { @@ -6426,9 +6404,9 @@ } }, "node_modules/@typescript-eslint/project-service/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -6458,9 +6436,9 @@ } }, "node_modules/@typescript-eslint/tsconfig-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.46.4.tgz", - "integrity": "sha512-+/XqaZPIAk6Cjg7NWgSGe27X4zMGqrFqZ8atJsX3CWxH/jACqWnrWI68h7nHQld0y+k9eTTjb9r+KU4twLoo9A==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/tsconfig-utils/-/tsconfig-utils-8.50.0.tgz", + "integrity": "sha512-vxd3G/ybKTSlm31MOA96gqvrRGv9RJ7LGtZCn2Vrc5htA0zCDvcMqUkifcjrWNNKXHUU3WCkYOzzVSFBd0wa2w==", "dev": true, "license": "MIT", "engines": { @@ -6934,13 +6912,6 @@ "node": ">=8" } }, - "node_modules/abab": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.6.tgz", - "integrity": "sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==", - "deprecated": "Use your platform's native atob() and btoa() methods instead", - "license": "BSD-3-Clause" - }, "node_modules/accepts": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", @@ -6958,6 +6929,7 @@ "version": "8.15.0", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.15.0.tgz", "integrity": "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg==", + "dev": true, "license": "MIT", "bin": { "acorn": "bin/acorn" @@ -6966,16 +6938,6 @@ "node": ">=0.4.0" } }, - "node_modules/acorn-globals": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-7.0.1.tgz", - "integrity": "sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q==", - "license": "MIT", - "dependencies": { - "acorn": "^8.1.0", - "acorn-walk": "^8.0.2" - } - }, "node_modules/acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", @@ -6990,6 +6952,7 @@ "version": "8.3.4", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.4.tgz", "integrity": "sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==", + "dev": true, "license": "MIT", "dependencies": { "acorn": "^8.11.0" @@ -7007,18 +6970,6 @@ "node": ">=12.0" } }, - "node_modules/agent-base": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", - "license": "MIT", - "dependencies": { - "debug": "4" - }, - "engines": { - "node": ">= 6.0.0" - } - }, "node_modules/aggregate-error": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-3.1.0.tgz", @@ -7274,15 +7225,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-flat-polyfill": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-flat-polyfill/-/array-flat-polyfill-1.0.1.tgz", - "integrity": "sha512-hfJmKupmQN0lwi0xG6FQ5U8Rd97RnIERplymOv/qpq8AoNKPPAnxJadjFA23FNWm88wykh9HmpLJUUwUtNU/iw==", - "license": "CC0-1.0", - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", @@ -7663,9 +7605,9 @@ "license": "MIT" }, "node_modules/baseline-browser-mapping": { - "version": "2.8.27", - "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.27.tgz", - "integrity": "sha512-2CXFpkjVnY2FT+B6GrSYxzYf65BJWEqz5tIRHCvNsZZ2F3CmsCB37h8SpYgKG7y9C4YAeTipIPWG7EmFmhAeXA==", + "version": "2.9.11", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.9.11.tgz", + "integrity": "sha512-Sg0xJUNDU1sJNGdfGWhVHX0kkZ+HWcvmVymJbj6NSgZZmW/8S9Y2HQ5euytnIgakgxN6papOAWiwDo1ctFDcoQ==", "dev": true, "license": "Apache-2.0", "bin": { @@ -7734,11 +7676,19 @@ "ieee754": "^1.1.13" } }, - "node_modules/block-elements": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/block-elements/-/block-elements-1.2.0.tgz", - "integrity": "sha512-4E+pnt4v8HSEEH3Dwe2Bcu8TIbdReez7b5Qjs11dJIdbGFaNSobDgphWxy9NtjYB9ZsZd7DzByDbeXy4DvYz5Q==", - "license": "MIT" + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } }, "node_modules/bluebird": { "version": "3.7.2", @@ -7747,23 +7697,23 @@ "license": "MIT" }, "node_modules/body-parser": { - "version": "1.20.3", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.3.tgz", - "integrity": "sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g==", + "version": "1.20.4", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.4.tgz", + "integrity": "sha512-ZTgYYLMOXY9qKU/57FAo8F+HA2dGX7bqGc71txDRC1rS4frdFI5R7NhluHxH6M0YItAP0sHB4uqAOcYKxO6uGA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", + "bytes": "~3.1.2", "content-type": "~1.0.5", "debug": "2.6.9", "depd": "2.0.0", - "destroy": "1.2.0", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "on-finished": "2.4.1", - "qs": "6.13.0", - "raw-body": "2.5.2", + "destroy": "~1.2.0", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "on-finished": "~2.4.1", + "qs": "~6.14.0", + "raw-body": "~2.5.3", "type-is": "~1.6.18", - "unpipe": "1.0.0" + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8", @@ -7785,25 +7735,10 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/body-parser/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/bowser": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.12.1.tgz", - "integrity": "sha512-z4rE2Gxh7tvshQ4hluIT7XcFrgLIQaw9X3A+kTTRdovCz5PMukm/0QC/BKSYPj3omF5Qfypn9O/c5kgpmvYUCw==", + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/bowser/-/bowser-2.13.1.tgz", + "integrity": "sha512-OHawaAbjwx6rqICCKgSG0SAnT05bzd7ppyKLVUITZpANBaaMFBAsaNkto3LoQ31tyFP5kNujE8Cdx85G9VzOkw==", "dev": true, "license": "MIT" }, @@ -7846,9 +7781,9 @@ "license": "ISC" }, "node_modules/browserslist": { - "version": "4.28.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.0.tgz", - "integrity": "sha512-tbydkR/CxfMwelN0vwdP/pLkDwyAASZ+VfWm4EOwlB6SWhx1sYnWLqo8N5j0rAzPfzfRaxt0mM/4wPU/Su84RQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.28.1.tgz", + "integrity": "sha512-ZC5Bd0LgJXgwGqUknZY/vkUQ04r8NXnJZ3yYi4vDmSiZmC/pdSN0NbNRPxZpbtO4uAfDUAFffO8IZoM3Gj8IkA==", "dev": true, "funding": [ { @@ -7866,11 +7801,11 @@ ], "license": "MIT", "dependencies": { - "baseline-browser-mapping": "^2.8.25", - "caniuse-lite": "^1.0.30001754", - "electron-to-chromium": "^1.5.249", + "baseline-browser-mapping": "^2.9.0", + "caniuse-lite": "^1.0.30001759", + "electron-to-chromium": "^1.5.263", "node-releases": "^2.0.27", - "update-browserslist-db": "^1.1.4" + "update-browserslist-db": "^1.2.0" }, "bin": { "browserslist": "cli.js" @@ -8150,9 +8085,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001754", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001754.tgz", - "integrity": "sha512-x6OeBXueoAceOmotzx3PO4Zpt4rzpeIFsSr6AAePTZxSkXiYDUmpypEl7e2+8NCd9bD7bXjqyef8CJYPC1jfxg==", + "version": "1.0.30001761", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001761.tgz", + "integrity": "sha512-JF9ptu1vP2coz98+5051jZ4PwQgd2ni8A+gYSN7EA7dPKIMf0pDlSUxhdmVOaV3/fYK5uWBkgSXJaRLr4+3A6g==", "dev": true, "funding": [ { @@ -8494,6 +8429,15 @@ "node": ">=0.10.0" } }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/cli-truncate/node_modules/string-width": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", @@ -8572,16 +8516,6 @@ "node": ">=0.10.0" } }, - "node_modules/collapse-whitespace": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/collapse-whitespace/-/collapse-whitespace-1.1.7.tgz", - "integrity": "sha512-24up1hbQSsnaDSGHPOvGQT84vmxvG0QUrI8tguiQpo9I5irrnypCKwddXindXMyXhoTe+9V6LYj3aFIhTQ4UCg==", - "license": "MIT", - "dependencies": { - "block-elements": "^1.0.0", - "void-elements": "^2.0.1" - } - }, "node_modules/collect-all": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/collect-all/-/collect-all-1.0.4.tgz", @@ -8604,13 +8538,13 @@ "license": "MIT" }, "node_modules/color": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/color/-/color-5.0.2.tgz", - "integrity": "sha512-e2hz5BzbUPcYlIRHo8ieAhYgoajrJr+hWoceg6E345TPsATMUKqDgzt8fSXZJJbxfpiPzkWyphz8yn8At7q3fA==", + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/color/-/color-5.0.3.tgz", + "integrity": "sha512-ezmVcLR3xAVp8kYOm4GS45ZLLgIE6SPAFoduLr6hTDajwb3KZ2F46gulK3XpcwRFb5KKGCSezCBAY4Dw4HsyXA==", "license": "MIT", "dependencies": { - "color-convert": "^3.0.1", - "color-string": "^2.0.0" + "color-convert": "^3.1.3", + "color-string": "^2.1.3" }, "engines": { "node": ">=18" @@ -8635,9 +8569,9 @@ "license": "MIT" }, "node_modules/color-string": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.2.tgz", - "integrity": "sha512-RxmjYxbWemV9gKu4zPgiZagUxbH3RQpEIO77XoSSX0ivgABDZ+h8Zuash/EMFLTI4N9QgFPOJ6JQpPZKFxa+dA==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-2.1.4.tgz", + "integrity": "sha512-Bb6Cq8oq0IjDOe8wJmi4JeNn763Xs9cfrBcaylK1tPypWzyoy2G3l90v9k64kjphl/ZJjPIShFztenRomi8WTg==", "license": "MIT", "dependencies": { "color-name": "^2.0.0" @@ -8656,9 +8590,9 @@ } }, "node_modules/color/node_modules/color-convert": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.2.tgz", - "integrity": "sha512-UNqkvCDXstVck3kdowtOTWROIJQwafjOfXSmddoDrXo4cewMKmusCeF22Q24zvjR8nwWib/3S/dfyzPItPEiJg==", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-3.1.3.tgz", + "integrity": "sha512-fasDH2ont2GqF5HpyO4w0+BcewlhHEZOFn9c1ckZdHpJ56Qb7MHhH/IcJZbBGgvdtwdwNbLvxiBEdg336iA9Sg==", "license": "MIT", "dependencies": { "color-name": "^2.0.0" @@ -8840,6 +8774,20 @@ "typedarray": "^0.0.6" } }, + "node_modules/concat-stream/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/conf": { "version": "10.2.0", "resolved": "https://registry.npmjs.org/conf/-/conf-10.2.0.tgz", @@ -8943,9 +8891,9 @@ } }, "node_modules/contentstack": { - "version": "3.26.2", - "resolved": "https://registry.npmjs.org/contentstack/-/contentstack-3.26.2.tgz", - "integrity": "sha512-q6JVBxAcQRuvpwzrT3XbsuCei/AKZXD4nK4fuc1AYg6PE6Rjnq1v5S5PjSFVCk7N4JCct7OQDQs0xmOSXyRyyQ==", + "version": "3.26.3", + "resolved": "https://registry.npmjs.org/contentstack/-/contentstack-3.26.3.tgz", + "integrity": "sha512-mN1/Z8YV1HoIw03oEgnoHlaX/ueOLZH4unbf3zJt6uOJSO51gDFfOQEnKsTfUfWkyks9xUmED3WzPMxpnxdqcQ==", "license": "MIT", "dependencies": { "@contentstack/utils": "^1.4.1", @@ -8965,28 +8913,28 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.1.tgz", - "integrity": "sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "license": "MIT", "engines": { "node": ">= 0.6" } }, "node_modules/cookie-signature": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", - "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.7.tgz", + "integrity": "sha512-NXdYc3dLr47pBkpUCHtKSwIOQXLVn8dZEuywboCOJY/osA0wFSLlSawr3KN8qXJEyX66FcONTH8EIlVuK0yyFA==", "license": "MIT" }, "node_modules/core-js-compat": { - "version": "3.46.0", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.46.0.tgz", - "integrity": "sha512-p9hObIIEENxSV8xIu+V68JjSeARg6UVMG5mR+JEUguG3sI6MsiS1njz2jHmyJDvA+8jX/sytkBHup6kxhM9law==", + "version": "3.47.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.47.0.tgz", + "integrity": "sha512-IGfuznZ/n7Kp9+nypamBhvwdwLsW6KC8IOaURw2doAK5e98AG3acVLdh0woOnEqCfUtS+Vu882JE4k/DAm3ItQ==", "dev": true, "license": "MIT", "dependencies": { - "browserslist": "^4.26.3" + "browserslist": "^4.28.0" }, "funding": { "type": "opencollective", @@ -9081,30 +9029,6 @@ "node": ">=8" } }, - "node_modules/cssom": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.5.0.tgz", - "integrity": "sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw==", - "license": "MIT" - }, - "node_modules/cssstyle": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-2.3.0.tgz", - "integrity": "sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A==", - "license": "MIT", - "dependencies": { - "cssom": "~0.3.6" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/cssstyle/node_modules/cssom": { - "version": "0.3.8", - "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", - "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", - "license": "MIT" - }, "node_modules/csv": { "version": "5.5.3", "resolved": "https://registry.npmjs.org/csv/-/csv-5.5.3.tgz", @@ -9146,20 +9070,6 @@ "node": ">=0.4.0" } }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/data-view-buffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", @@ -9258,12 +9168,6 @@ "node": ">=0.10.0" } }, - "node_modules/decimal.js": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.6.0.tgz", - "integrity": "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg==", - "license": "MIT" - }, "node_modules/decompress-response": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", @@ -9294,9 +9198,9 @@ } }, "node_modules/dedent": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.0.tgz", - "integrity": "sha512-HGFtf8yhuhGhqO07SV79tRp+br4MnbdjeVxotpn1QBl30pcLLCQjX5b2295ll0fv8RKDKsmWYrl05usHM9CewQ==", + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/dedent/-/dedent-1.7.1.tgz", + "integrity": "sha512-9JmrhGZpOlEgOLdQgSm0zxFaYoQon408V1v49aqTWuXENVlnCuY9JBZcXZiCsZQWDjTm5Qf/nIvAy77mXDAjEg==", "dev": true, "license": "MIT", "peerDependencies": { @@ -9549,19 +9453,6 @@ "node": ">=6.0.0" } }, - "node_modules/domexception": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/domexception/-/domexception-4.0.0.tgz", - "integrity": "sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw==", - "deprecated": "Use your platform's native DOMException instead", - "license": "MIT", - "dependencies": { - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/dot-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/dot-case/-/dot-case-3.0.4.tgz", @@ -9652,9 +9543,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.250", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.250.tgz", - "integrity": "sha512-/5UMj9IiGDMOFBnN4i7/Ry5onJrAGSbOGo3s9FEKmwobGq6xw832ccET0CE3CkkMBZ8GJSlUIesZofpyurqDXw==", + "version": "1.5.267", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.267.tgz", + "integrity": "sha512-0Drusm6MVRXSOJpGbaSVgcQsuB4hEkMpHXaVstcPmhu5LIedxs1xNK/nIxmQIU/RPC0+1/o0AVZfBTkTNJOdUw==", "dev": true, "license": "ISC" }, @@ -9712,9 +9603,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.18.3", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", - "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "version": "5.18.4", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.4.tgz", + "integrity": "sha512-LgQMM4WXU3QI+SYgEc2liRgznaD5ojbmY3sb8LxyguVkIg5FxdpTkvk72te2R38/TGKxH634oLxXRGY6d7AP+Q==", "dev": true, "license": "MIT", "dependencies": { @@ -9772,9 +9663,9 @@ } }, "node_modules/es-abstract": { - "version": "1.24.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.0.tgz", - "integrity": "sha512-WSzPgsdLtTcQwm4CROfS5ju2Wa1QQcVeT37jFjYzdFz1r9ahadC8B8/a4qxJxM+09F18iumCdRmlr96ZYkQvEg==", + "version": "1.24.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.24.1.tgz", + "integrity": "sha512-zHXBLhP+QehSSbsS9Pt23Gg964240DPd6QCf8WpkqEXxQ7fhdZzYsocOr5u7apWonsS5EjZDmTF+/slGMyasvw==", "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.2", @@ -9927,9 +9818,9 @@ "license": "MIT" }, "node_modules/esbuild": { - "version": "0.25.12", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.12.tgz", - "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", + "version": "0.27.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.27.2.tgz", + "integrity": "sha512-HyNQImnsOC7X9PMNaCIeAm4ISCQXs5a5YasTXVliKv4uuBo1dKrG0A+uQS8M5eXjVMnLg3WgXaKvprHlFJQffw==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -9940,32 +9831,32 @@ "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.25.12", - "@esbuild/android-arm": "0.25.12", - "@esbuild/android-arm64": "0.25.12", - "@esbuild/android-x64": "0.25.12", - "@esbuild/darwin-arm64": "0.25.12", - "@esbuild/darwin-x64": "0.25.12", - "@esbuild/freebsd-arm64": "0.25.12", - "@esbuild/freebsd-x64": "0.25.12", - "@esbuild/linux-arm": "0.25.12", - "@esbuild/linux-arm64": "0.25.12", - "@esbuild/linux-ia32": "0.25.12", - "@esbuild/linux-loong64": "0.25.12", - "@esbuild/linux-mips64el": "0.25.12", - "@esbuild/linux-ppc64": "0.25.12", - "@esbuild/linux-riscv64": "0.25.12", - "@esbuild/linux-s390x": "0.25.12", - "@esbuild/linux-x64": "0.25.12", - "@esbuild/netbsd-arm64": "0.25.12", - "@esbuild/netbsd-x64": "0.25.12", - "@esbuild/openbsd-arm64": "0.25.12", - "@esbuild/openbsd-x64": "0.25.12", - "@esbuild/openharmony-arm64": "0.25.12", - "@esbuild/sunos-x64": "0.25.12", - "@esbuild/win32-arm64": "0.25.12", - "@esbuild/win32-ia32": "0.25.12", - "@esbuild/win32-x64": "0.25.12" + "@esbuild/aix-ppc64": "0.27.2", + "@esbuild/android-arm": "0.27.2", + "@esbuild/android-arm64": "0.27.2", + "@esbuild/android-x64": "0.27.2", + "@esbuild/darwin-arm64": "0.27.2", + "@esbuild/darwin-x64": "0.27.2", + "@esbuild/freebsd-arm64": "0.27.2", + "@esbuild/freebsd-x64": "0.27.2", + "@esbuild/linux-arm": "0.27.2", + "@esbuild/linux-arm64": "0.27.2", + "@esbuild/linux-ia32": "0.27.2", + "@esbuild/linux-loong64": "0.27.2", + "@esbuild/linux-mips64el": "0.27.2", + "@esbuild/linux-ppc64": "0.27.2", + "@esbuild/linux-riscv64": "0.27.2", + "@esbuild/linux-s390x": "0.27.2", + "@esbuild/linux-x64": "0.27.2", + "@esbuild/netbsd-arm64": "0.27.2", + "@esbuild/netbsd-x64": "0.27.2", + "@esbuild/openbsd-arm64": "0.27.2", + "@esbuild/openbsd-x64": "0.27.2", + "@esbuild/openharmony-arm64": "0.27.2", + "@esbuild/sunos-x64": "0.27.2", + "@esbuild/win32-arm64": "0.27.2", + "@esbuild/win32-ia32": "0.27.2", + "@esbuild/win32-x64": "0.27.2" } }, "node_modules/escalade": { @@ -9995,27 +9886,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.1.0.tgz", - "integrity": "sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==", - "license": "BSD-2-Clause", - "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" - }, - "engines": { - "node": ">=6.0" - }, - "optionalDependencies": { - "source-map": "~0.6.1" - } - }, "node_modules/eslint": { "version": "8.57.1", "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.1.tgz", @@ -10090,14 +9960,14 @@ } }, "node_modules/eslint-config-oclif": { - "version": "6.0.116", - "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.116.tgz", - "integrity": "sha512-h1iKXrrOZFuGy7huGJ6u/rQNg8lVPVk7jNMqWR2ykla4/4IpXgjCtfXCoyv5vX9W3ufr0+acIV+e3D8Lau8eFg==", + "version": "6.0.127", + "resolved": "https://registry.npmjs.org/eslint-config-oclif/-/eslint-config-oclif-6.0.127.tgz", + "integrity": "sha512-ObIh5+hteGpRVXQCWl8AqjTVNrdKdFmBP3fSlcn06ScxLdsIZWAXznLvA5U3/F8WlCSSjwMHyfugu1JL2NViPw==", "dev": true, "license": "MIT", "dependencies": { "@eslint/compat": "^1.4.1", - "@eslint/eslintrc": "^3.3.1", + "@eslint/eslintrc": "^3.3.3", "@eslint/js": "^9.38.0", "@stylistic/eslint-plugin": "^3.1.0", "@typescript-eslint/eslint-plugin": "^8", @@ -10112,7 +9982,7 @@ "eslint-plugin-n": "^17.22.0", "eslint-plugin-perfectionist": "^4", "eslint-plugin-unicorn": "^56.0.1", - "typescript-eslint": "^8.46.3" + "typescript-eslint": "^8.50.0" }, "engines": { "node": ">=18.18.0" @@ -10506,9 +10376,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -10518,7 +10388,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -10530,9 +10400,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -10543,18 +10413,17 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", - "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz", + "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/type-utils": "8.46.4", - "@typescript-eslint/utils": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", - "graphemer": "^1.4.0", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/type-utils": "8.50.0", + "@typescript-eslint/utils": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" @@ -10567,7 +10436,7 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/parser": "^8.50.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } @@ -10583,16 +10452,16 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/parser": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", - "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz", + "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4" }, "engines": { @@ -10608,14 +10477,14 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10626,15 +10495,15 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/type-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", - "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz", + "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/utils": "8.50.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -10651,9 +10520,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -10665,21 +10534,20 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -10710,16 +10578,16 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -10734,13 +10602,13 @@ } }, "node_modules/eslint-config-oclif/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -10785,9 +10653,9 @@ } }, "node_modules/eslint-config-oclif/node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", "peer": true, @@ -10798,7 +10666,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", + "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -10944,14 +10812,14 @@ } }, "node_modules/eslint-config-oclif/node_modules/eslint-config-xo/node_modules/@stylistic/eslint-plugin": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.5.0.tgz", - "integrity": "sha512-IeZF+8H0ns6prg4VrkhgL+yrvDXWDH2cKchrbh80ejG9dQgZWp10epHMbgRuQvgchLII/lfh6Xn3lu6+6L86Hw==", + "version": "5.6.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-5.6.1.tgz", + "integrity": "sha512-JCs+MqoXfXrRPGbGmho/zGS/jMcn3ieKl/A8YImqib76C8kjgZwq5uUFzc30lJkMvcchuRn6/v8IApLxli3Jyw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.9.0", - "@typescript-eslint/types": "^8.46.1", + "@typescript-eslint/types": "^8.47.0", "eslint-visitor-keys": "^4.2.1", "espree": "^10.4.0", "estraverse": "^5.3.0", @@ -11514,14 +11382,14 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11532,9 +11400,9 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -11546,21 +11414,20 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -11575,16 +11442,16 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -11599,13 +11466,13 @@ } }, "node_modules/eslint-plugin-perfectionist/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -11868,6 +11735,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=4.0" @@ -11883,6 +11751,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true, "license": "BSD-2-Clause", "engines": { "node": ">=0.10.0" @@ -11961,39 +11830,39 @@ } }, "node_modules/express": { - "version": "4.21.2", - "resolved": "https://registry.npmjs.org/express/-/express-4.21.2.tgz", - "integrity": "sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA==", + "version": "4.22.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.22.1.tgz", + "integrity": "sha512-F2X8g9P1X7uCPZMA3MVf9wcTqlyNp7IhH5qPCI0izhaOIYXaW9L535tGA3qmjRzpH+bZczqq7hVKxTR4NWnu+g==", "license": "MIT", "dependencies": { "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.20.3", - "content-disposition": "0.5.4", + "body-parser": "~1.20.3", + "content-disposition": "~0.5.4", "content-type": "~1.0.4", - "cookie": "0.7.1", - "cookie-signature": "1.0.6", + "cookie": "~0.7.1", + "cookie-signature": "~1.0.6", "debug": "2.6.9", "depd": "2.0.0", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "finalhandler": "1.3.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "finalhandler": "~1.3.1", + "fresh": "~0.5.2", + "http-errors": "~2.0.0", "merge-descriptors": "1.0.3", "methods": "~1.1.2", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "path-to-regexp": "0.1.12", + "path-to-regexp": "~0.1.12", "proxy-addr": "~2.0.7", - "qs": "6.13.0", + "qs": "~6.14.0", "range-parser": "~1.2.1", "safe-buffer": "5.2.1", - "send": "0.19.0", - "serve-static": "1.16.2", + "send": "~0.19.0", + "serve-static": "~1.16.2", "setprototypeof": "1.2.0", - "statuses": "2.0.1", + "statuses": "~2.0.1", "type-is": "~1.6.18", "utils-merge": "1.0.1", "vary": "~1.1.2" @@ -12021,21 +11890,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/express/node_modules/qs": { - "version": "6.13.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.13.0.tgz", - "integrity": "sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==", - "license": "BSD-3-Clause", - "dependencies": { - "side-channel": "^1.0.6" - }, - "engines": { - "node": ">=0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/external-editor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", @@ -12350,17 +12204,17 @@ } }, "node_modules/finalhandler": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.1.tgz", - "integrity": "sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ==", + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.3.2.tgz", + "integrity": "sha512-aA4RyPcd3badbdABGDuTXCMTtOneUCAYH/gxoYRTZlIJdF0YPWuGqiAsIrhNnnqdXGswYk6dGujem4w80UJFhg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "encodeurl": "~2.0.0", "escape-html": "~1.0.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "parseurl": "~1.3.3", - "statuses": "2.0.1", + "statuses": "~2.0.2", "unpipe": "~1.0.0" }, "engines": { @@ -12634,42 +12488,6 @@ "readable-stream": "^2.0.0" } }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/fromentries": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/fromentries/-/fromentries-1.3.2.tgz", @@ -12692,9 +12510,9 @@ "license": "MIT" }, "node_modules/fs-extra": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.2.tgz", - "integrity": "sha512-Xr9F6z6up6Ws+NjzMCZc6WXg2YFRlrLP9NQDO3VQrWrfiojdhS56TzueT88ze0uBdCTwEIhQ3ptnmKeWGFAe0A==", + "version": "11.3.3", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-11.3.3.tgz", + "integrity": "sha512-VWSRii4t0AFm6ixFFmLLx1t7wS1gh+ckoa84aOeapGum0h+EZd1EhEumSB+ZdDLnEPuucsVB9oB7cxJHap6Afg==", "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", @@ -13405,18 +13223,6 @@ "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", "license": "ISC" }, - "node_modules/html-encoding-sniffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz", - "integrity": "sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA==", - "license": "MIT", - "dependencies": { - "whatwg-encoding": "^2.0.0" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/html-escaper": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", @@ -13464,33 +13270,23 @@ } }, "node_modules/http-errors": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.1.tgz", + "integrity": "sha512-4FbRdAX+bSdmo4AUFuS0WNiPz8NgFt+r8ThgNWmlrjQjt1Q7ZR9+zTlce2859x4KSXrwIsaeTqDoKQmtP8pLmQ==", "license": "MIT", "dependencies": { - "depd": "2.0.0", - "inherits": "2.0.4", - "setprototypeof": "1.2.0", - "statuses": "2.0.1", - "toidentifier": "1.0.1" + "depd": "~2.0.0", + "inherits": "~2.0.4", + "setprototypeof": "~1.2.0", + "statuses": "~2.0.2", + "toidentifier": "~1.0.1" }, "engines": { "node": ">= 0.8" - } - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", - "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" }, - "engines": { - "node": ">= 6" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/express" } }, "node_modules/http2-wrapper": { @@ -13507,19 +13303,6 @@ "node": ">=10.19.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", - "license": "MIT", - "dependencies": { - "agent-base": "6", - "debug": "4" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/human-signals": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", @@ -13587,16 +13370,6 @@ "node": ">= 4" } }, - "node_modules/immer": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/immer/-/immer-10.2.0.tgz", - "integrity": "sha512-d/+XTN3zfODyjr89gM3mPq1WNX2B8pYsu7eORitdwyA2sBubnTl3laYlBk4sXY5FUa5qTZGBDPJICVbvqzjlbw==", - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/immer" - } - }, "node_modules/import-fresh": { "version": "3.3.1", "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", @@ -14262,9 +14035,9 @@ } }, "node_modules/inquirer/node_modules/@types/node": { - "version": "24.10.1", - "resolved": "https://registry.npmjs.org/@types/node/-/node-24.10.1.tgz", - "integrity": "sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==", + "version": "25.0.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-25.0.3.tgz", + "integrity": "sha512-W609buLVRVmeW693xKfzHeIV6nJGGz98uCPfeXI1ELMLXVeKYZ9m15fAMSaUPBHYLGFsVRcMmSCksQOrZV9BYA==", "license": "MIT", "optional": true, "peer": true, @@ -14279,9 +14052,9 @@ "license": "MIT" }, "node_modules/inquirer/node_modules/iconv-lite": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.0.tgz", - "integrity": "sha512-cf6L2Ds3h57VVmkZe+Pn+5APsT7FpqJtEhhieDCvrE2MK5Qk9MyffgQyuxQTm6BChfeZNtcOLHp9IcWRVcIcBQ==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.7.1.tgz", + "integrity": "sha512-2Tth85cXwGFHfvRgZWszZSvdo+0Xsqmw8k8ZwxScfcBneNUraK+dxRxRm24nszx80Y0TVio8kKLt5sLE7ZCLlw==", "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" @@ -14294,66 +14067,6 @@ "url": "https://opencollective.com/express" } }, - "node_modules/inquirer/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/inquirer/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "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/inquirer/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "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/inquirer/node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -14712,15 +14425,12 @@ } }, "node_modules/is-interactive": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", - "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", + "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/is-map": { @@ -14848,21 +14558,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-potential-custom-element-name": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", - "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", - "license": "MIT" - }, "node_modules/is-promise": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/is-promise/-/is-promise-2.2.2.tgz", @@ -15001,12 +14696,12 @@ "license": "MIT" }, "node_modules/is-unicode-supported": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", - "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", + "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", "license": "MIT", "engines": { - "node": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -15078,9 +14773,9 @@ } }, "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", "license": "MIT" }, "node_modules/isexe": { @@ -15156,19 +14851,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-processinfo/node_modules/rimraf": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", @@ -16404,51 +16086,6 @@ "node": ">=8" } }, - "node_modules/jsdom": { - "version": "20.0.3", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-20.0.3.tgz", - "integrity": "sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ==", - "license": "MIT", - "dependencies": { - "abab": "^2.0.6", - "acorn": "^8.8.1", - "acorn-globals": "^7.0.0", - "cssom": "^0.5.0", - "cssstyle": "^2.3.0", - "data-urls": "^3.0.2", - "decimal.js": "^10.4.2", - "domexception": "^4.0.0", - "escodegen": "^2.0.0", - "form-data": "^4.0.0", - "html-encoding-sniffer": "^3.0.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.1", - "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.2", - "parse5": "^7.1.1", - "saxes": "^6.0.0", - "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.2", - "w3c-xmlserializer": "^4.0.0", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0", - "ws": "^8.11.0", - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - }, - "peerDependencies": { - "canvas": "^2.5.0" - }, - "peerDependenciesMeta": { - "canvas": { - "optional": true - } - } - }, "node_modules/jsesc": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", @@ -16548,15 +16185,6 @@ ], "license": "MIT" }, - "node_modules/jsonschema": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/jsonschema/-/jsonschema-1.5.0.tgz", - "integrity": "sha512-K+A9hhqbn0f3pJX17Q/7H6yQfD/5OXgdrR5UE12gMXCiN9D5Xq2o5mddV2QEcX/bjla99ASsAAQUyMCCRWAEhw==", - "license": "MIT", - "engines": { - "node": "*" - } - }, "node_modules/JSONStream": { "version": "1.3.5", "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", @@ -16583,6 +16211,7 @@ "version": "6.2.0", "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-6.2.0.tgz", "integrity": "sha512-cYofQu2Xpom82S6qD778jBDpwvvy39s1l/hrYij2u9AMdQcGRpaBu6kY4mVhuno5kJVi1DAz4aiphA2WI1/OAw==", + "dev": true, "license": "MIT" }, "node_modules/keyv": { @@ -16799,6 +16428,18 @@ "node": ">=4" } }, + "node_modules/listr-update-renderer/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "license": "MIT", + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/listr-update-renderer/node_modules/strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -16973,6 +16614,15 @@ "node": ">=0.10.0" } }, + "node_modules/listr/node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/localStorage": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/localStorage/-/localStorage-1.0.4.tgz", @@ -17011,24 +16661,12 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.clonedeep": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", - "integrity": "sha512-H5ZhCF25riFd9uB5UCkVKo61m3S/xZk1x4wA6yp/L3RFP6Z/eHH1ymQcGLo7J3GMPfm0V/7m1tryHuGVxpqEBQ==", - "license": "MIT" - }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", "integrity": "sha512-TM9YBvyC84ZxE3rgfefxUWiQKLilstD6k7PTGt6wfbtXF8ixIJLOL3VYyV/z+ZiPLsVxAsKAFVwWlWeb2Y8Yyw==", "license": "MIT" }, - "node_modules/lodash.flatten": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", - "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", - "license": "MIT" - }, "node_modules/lodash.flattendeep": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", @@ -17048,12 +16686,6 @@ "integrity": "sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==", "license": "MIT" }, - "node_modules/lodash.isempty": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.isempty/-/lodash.isempty-4.4.0.tgz", - "integrity": "sha512-oKMuF3xEeqDltrGMfDxAPGIVMSSRv8tbRSODbrs4KGsRRLEhrW8N8Rd4DRgB2+621hY8A8XwwrTVhXWpxFvMzg==", - "license": "MIT" - }, "node_modules/lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -17073,30 +16705,12 @@ "integrity": "sha512-up2Mzq3545mwVnMhTDMdfoG1OurpA/s5t88JmQX809eH3C8491iu2sfKhTfhQtKY78oPNhiaHJUpT/dUDAAtng==", "license": "MIT" }, - "node_modules/lodash.isobject": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/lodash.isobject/-/lodash.isobject-3.0.2.tgz", - "integrity": "sha512-3/Qptq2vr7WeJbB4KHUSKlq8Pl7ASXi3UG6CMbBm8WRtXi8+GHm7mKaU3urfpSEzWe2wCIChs6/sdocUsTKJiA==", - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", - "license": "MIT" - }, "node_modules/lodash.isundefined": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/lodash.isundefined/-/lodash.isundefined-3.0.1.tgz", "integrity": "sha512-MXB1is3s899/cD8jheYYE2V9qTHwKvt+npCwpD+1Sxm3Q3cECXCiYHjeHWXNwr6Q0SOBPrYUDxendrO6goVTEA==", "license": "MIT" }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", - "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", - "license": "MIT" - }, "node_modules/lodash.memoize": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", @@ -17132,121 +16746,61 @@ "license": "MIT" }, "node_modules/log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", + "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", "license": "MIT", "dependencies": { - "chalk": "^1.0.0" + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols/node_modules/ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", "license": "MIT", + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "license": "MIT", - "dependencies": { - "ansi-styles": "^2.2.1", - "escape-string-regexp": "^1.0.2", - "has-ansi": "^2.0.0", - "strip-ansi": "^3.0.0", - "supports-color": "^2.0.0" - }, "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/log-symbols/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-symbols/node_modules/strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^2.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/log-update": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/log-update/-/log-update-2.3.0.tgz", - "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", - "license": "MIT", - "dependencies": { - "ansi-escapes": "^3.0.0", - "cli-cursor": "^2.0.0", - "wrap-ansi": "^3.0.1" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/ansi-regex": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", - "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", - "license": "MIT", - "dependencies": { - "restore-cursor": "^2.0.0" - }, + "dependencies": { + "restore-cursor": "^2.0.0" + }, "engines": { "node": ">=4" } @@ -17827,36 +17381,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mocha/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/mocha/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "dev": true, - "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/mocha/node_modules/minimatch": { "version": "5.1.6", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", @@ -17974,6 +17498,7 @@ "version": "6.1.1", "resolved": "https://registry.npmjs.org/nise/-/nise-6.1.1.tgz", "integrity": "sha512-aMSAzLVY7LyeM60gvBS423nBmIPP+Wy7St7hsb+8/fc1HmeoHJfLO8CKse4u3BtOZvQLJghYPI2i/1WZrEj5/g==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", @@ -17987,6 +17512,7 @@ "version": "13.0.5", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" @@ -17996,6 +17522,7 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-8.3.0.tgz", "integrity": "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA==", + "dev": true, "license": "MIT", "funding": { "type": "opencollective", @@ -18047,28 +17574,6 @@ } } }, - "node_modules/node-fetch/node_modules/tr46": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", - "license": "MIT" - }, - "node_modules/node-fetch/node_modules/webidl-conversions": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", - "license": "BSD-2-Clause" - }, - "node_modules/node-fetch/node_modules/whatwg-url": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", - "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" - } - }, "node_modules/node-int64": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz", @@ -20665,12 +20170,6 @@ "node": ">=0.10.0" } }, - "node_modules/nwsapi": { - "version": "2.2.22", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.22.tgz", - "integrity": "sha512-ujSMe1OWVn55euT1ihwCI1ZcAaAU3nxUiDwfDQldc51ZXaB9m2AyOn6/jh1BLe2t/G8xd6uKG1UBF2aZJeg2SQ==", - "license": "MIT" - }, "node_modules/nyc": { "version": "15.1.0", "resolved": "https://registry.npmjs.org/nyc/-/nyc-15.1.0.tgz", @@ -20820,19 +20319,6 @@ "node": ">=8" } }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", - "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/nyc/node_modules/resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", @@ -21075,21 +20561,21 @@ } }, "node_modules/oclif": { - "version": "4.22.44", - "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.44.tgz", - "integrity": "sha512-/0xXjF/dt8qN8SuibVTVU/81gOy4nNprSXSFHVWvKm1Ms8EKsCA6C+4XRcRCCMaaE4t2GKjjRpEwqCQKFUtI/Q==", + "version": "4.22.59", + "resolved": "https://registry.npmjs.org/oclif/-/oclif-4.22.59.tgz", + "integrity": "sha512-Yq9R5mSSdDJAcCewEi+gipPNEvx0+0CyVmPAmamYRydc87I40o5YezVMWTjJ/0VzkdZZdmXl+EBlsXuNDqyhxg==", "dev": true, "license": "MIT", "dependencies": { - "@aws-sdk/client-cloudfront": "^3.927.0", - "@aws-sdk/client-s3": "^3.927.0", + "@aws-sdk/client-cloudfront": "^3.956.0", + "@aws-sdk/client-s3": "^3.956.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.34", - "@oclif/plugin-not-found": "^3.2.71", - "@oclif/plugin-warn-if-update-available": "^3.1.52", + "@oclif/plugin-help": "^6.2.36", + "@oclif/plugin-not-found": "^3.2.73", + "@oclif/plugin-warn-if-update-available": "^3.1.53", "ansis": "^3.16.0", "async-retry": "^1.3.3", "change-case": "^4", @@ -21148,18 +20634,6 @@ "node": ">= 4.0.0" } }, - "node_modules/omit-deep-lodash": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/omit-deep-lodash/-/omit-deep-lodash-1.1.7.tgz", - "integrity": "sha512-9m9gleSMoxq3YO8aCq5pGUrqG9rKF0w/P70JHQ1ymjUQA/3+fVa2Stju9XORJKLmyLYEO3zzX40MJYaYl5Og4w==", - "license": "MIT", - "dependencies": { - "lodash": "~4.17.21" - }, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/on-finished": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", @@ -21269,253 +20743,105 @@ "license": "MIT" }, "node_modules/ora": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", - "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", + "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", "license": "MIT", "dependencies": { - "chalk": "^5.3.0", - "cli-cursor": "^5.0.0", - "cli-spinners": "^2.9.2", - "is-interactive": "^2.0.0", - "is-unicode-supported": "^2.0.0", - "log-symbols": "^6.0.0", - "stdin-discarder": "^0.2.2", - "string-width": "^7.2.0", - "strip-ansi": "^7.1.0" + "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": ">=18" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "6.2.2", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", - "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/ora/node_modules/chalk": { - "version": "5.6.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", - "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "node_modules/otplib": { + "version": "12.0.1", + "resolved": "https://registry.npmjs.org/otplib/-/otplib-12.0.1.tgz", + "integrity": "sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==", "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "dependencies": { + "@otplib/core": "^12.0.1", + "@otplib/preset-default": "^12.0.1", + "@otplib/preset-v11": "^12.0.1" } }, - "node_modules/ora/node_modules/cli-cursor": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", - "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "node_modules/own-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", + "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", "license": "MIT", "dependencies": { - "restore-cursor": "^5.0.0" + "get-intrinsic": "^1.2.6", + "object-keys": "^1.1.1", + "safe-push-apply": "^1.0.0" }, "engines": { - "node": ">=18" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ora/node_modules/emoji-regex": { - "version": "10.6.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", - "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", - "license": "MIT" + "node_modules/p-cancelable": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", + "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.20" + } }, - "node_modules/ora/node_modules/log-symbols": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", - "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^5.3.0", - "is-unicode-supported": "^1.3.0" - }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/ora/node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "node_modules/p-is-promise": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", + "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ora/node_modules/onetime": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", - "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, "license": "MIT", "dependencies": { - "mimic-function": "^5.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/restore-cursor": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", - "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", - "license": "MIT", - "dependencies": { - "onetime": "^7.0.0", - "signal-exit": "^4.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/signal-exit": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", - "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", - "license": "ISC", - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/ora/node_modules/string-width": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", - "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", - "license": "MIT", - "dependencies": { - "emoji-regex": "^10.3.0", - "get-east-asian-width": "^1.0.0", - "strip-ansi": "^7.1.0" - }, - "engines": { - "node": ">=18" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", - "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", - "license": "MIT", - "dependencies": { - "ansi-regex": "^6.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" - } - }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/otplib": { - "version": "12.0.1", - "resolved": "https://registry.npmjs.org/otplib/-/otplib-12.0.1.tgz", - "integrity": "sha512-xDGvUOQjop7RDgxTQ+o4pOol0/3xSZzawTiPKRrHnQWAy0WjhNs/5HdIDJCrqC4MBynmjXgULc6YfioaxZeFgg==", - "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", - "resolved": "https://registry.npmjs.org/own-keys/-/own-keys-1.0.1.tgz", - "integrity": "sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==", - "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", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-3.0.0.tgz", - "integrity": "sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - } - }, - "node_modules/p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/p-is-promise": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/p-limit": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", - "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -21538,12 +20864,16 @@ } }, "node_modules/p-map": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-3.0.0.tgz", + "integrity": "sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==", + "dev": true, "license": "MIT", + "dependencies": { + "aggregate-error": "^3.0.0" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, "node_modules/p-try": { @@ -21643,30 +20973,6 @@ "dev": true, "license": "MIT" }, - "node_modules/parse5": { - "version": "7.3.0", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.3.0.tgz", - "integrity": "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==", - "license": "MIT", - "dependencies": { - "entities": "^6.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5/node_modules/entities": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/entities/-/entities-6.0.1.tgz", - "integrity": "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, "node_modules/parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -22039,9 +21345,9 @@ } }, "node_modules/pretty-format/node_modules/@types/yargs": { - "version": "15.0.19", - "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.19.tgz", - "integrity": "sha512-2XUaGVmyQjgyAZldf0D0c14vvo/yv0MhQBSTJcejMMaitsn3nxCB6TmH4G0ZQf+uxROOa9mpanoSm8h6SG/1ZA==", + "version": "15.0.20", + "resolved": "https://registry.npmjs.org/@types/yargs/-/yargs-15.0.20.tgz", + "integrity": "sha512-KIkX+/GgfFitlASYCGoSF+T4XRXhOubJLhkLVtSfsRTe9jWMmuM2g28zQ41BtPTG7TRBb2xHW+LCNVE9QR/vsg==", "dev": true, "license": "MIT", "dependencies": { @@ -22103,42 +21409,6 @@ "through2": "~2.0.3" } }, - "node_modules/progress-stream/node_modules/isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", - "license": "MIT" - }, - "node_modules/progress-stream/node_modules/readable-stream": { - "version": "2.3.8", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", - "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } - }, - "node_modules/progress-stream/node_modules/safe-buffer": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", - "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", - "license": "MIT" - }, - "node_modules/progress-stream/node_modules/string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } - }, "node_modules/progress-stream/node_modules/through2": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", @@ -22272,18 +21542,6 @@ "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", "license": "MIT" }, - "node_modules/psl": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", - "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", - "license": "MIT", - "dependencies": { - "punycode": "^2.3.1" - }, - "funding": { - "url": "https://github.com/sponsors/lupomontero" - } - }, "node_modules/pump": { "version": "3.0.3", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.3.tgz", @@ -22299,6 +21557,7 @@ "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", + "dev": true, "license": "MIT", "engines": { "node": ">=6" @@ -22346,12 +21605,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/querystringify": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", - "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", - "license": "MIT" - }, "node_modules/queue-microtask": { "version": "1.2.3", "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", @@ -22413,15 +21666,15 @@ } }, "node_modules/raw-body": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", - "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "version": "2.5.3", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.3.tgz", + "integrity": "sha512-s4VSOf6yN0rvbRZGxs8Om5CWj6seneMwK3oDb4lWDH0UPhWcxwOWw5+qk24bxq87szX1ydrwylIOp2uG1ojUpA==", "license": "MIT", "dependencies": { - "bytes": "3.1.2", - "http-errors": "2.0.0", - "iconv-lite": "0.4.24", - "unpipe": "1.0.0" + "bytes": "~3.1.2", + "http-errors": "~2.0.1", + "iconv-lite": "~0.4.24", + "unpipe": "~1.0.0" }, "engines": { "node": ">= 0.8" @@ -22586,19 +21839,26 @@ } }, "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", @@ -22922,12 +22182,6 @@ "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", "license": "ISC" }, - "node_modules/requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", - "license": "MIT" - }, "node_modules/requizzle": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.4.tgz", @@ -23089,9 +22343,9 @@ } }, "node_modules/rewire/node_modules/@eslint/eslintrc": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", - "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.3.tgz", + "integrity": "sha512-Kr+LPIUVKz2qkx1HAMH8q1q6azbqBAsXJUxBl/ODDuVPX45Z9DfwB8tPjTi6nNZ8BuM3nbJxC5zCAg5elnBUTQ==", "dev": true, "license": "MIT", "dependencies": { @@ -23101,7 +22355,7 @@ "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", + "js-yaml": "^4.1.1", "minimatch": "^3.1.2", "strip-json-comments": "^3.1.1" }, @@ -23113,9 +22367,9 @@ } }, "node_modules/rewire/node_modules/@eslint/js": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.1.tgz", - "integrity": "sha512-S26Stp4zCy88tH94QbBv3XCuzRQiZ9yXofEILmglYTh/Ug/a9/umqvgFtYBAo3Lp0nsI/5/qH1CCrbdK3AP1Tw==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.39.2.tgz", + "integrity": "sha512-q1mjIoW1VX4IvSocvM/vbTiveKC4k9eLrajNEuSsmjymSDEbpGddtpfOoN7YGAqBK3NG+uqo8ia4PDTt8buCYA==", "dev": true, "license": "MIT", "engines": { @@ -23154,9 +22408,9 @@ } }, "node_modules/rewire/node_modules/eslint": { - "version": "9.39.1", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.1.tgz", - "integrity": "sha512-BhHmn2yNOFA9H9JmmIVKJmd288g9hrVRDkdoIgRCRuSySRUHH7r/DI6aAXW9T1WwUuY3DFgrcaqB+deURBLR5g==", + "version": "9.39.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.39.2.tgz", + "integrity": "sha512-LEyamqS7W5HB3ujJyvi0HQK/dtVINZvd5mAAp9eT5S/ujByGjiZLCzPcHVzuXbpJDJF/cxwHlfceVUDZ2lnSTw==", "dev": true, "license": "MIT", "dependencies": { @@ -23166,7 +22420,7 @@ "@eslint/config-helpers": "^0.4.2", "@eslint/core": "^0.17.0", "@eslint/eslintrc": "^3.3.1", - "@eslint/js": "9.39.1", + "@eslint/js": "9.39.2", "@eslint/plugin-kit": "^0.4.1", "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", @@ -23353,9 +22607,9 @@ } }, "node_modules/rimraf/node_modules/glob": { - "version": "10.4.5", - "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", - "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "version": "10.5.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.5.0.tgz", + "integrity": "sha512-DfXN8DfhJ7NH3Oe7cFmu3NCu1wKbkReJ8TorzSAFbSKrlNaQSKfIzqYqVY8zlbs2NLBbWpRiU52GX2PbaBVNkg==", "license": "ISC", "dependencies": { "foreground-child": "^3.1.0", @@ -23394,9 +22648,9 @@ } }, "node_modules/rollup": { - "version": "4.53.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.53.2.tgz", - "integrity": "sha512-MHngMYwGJVi6Fmnk6ISmnk7JAHRNF0UkuucA0CUW3N3a4KnONPEZz+vUanQP/ZC/iY1Qkf3bwPWzyY84wEks1g==", + "version": "4.54.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.54.0.tgz", + "integrity": "sha512-3nk8Y3a9Ea8szgKhinMlGMhGMw89mqule3KWczxhIzqudyHdCIOHw8WJlj/r329fACjKLEh13ZSk7oE22kyeIw==", "license": "MIT", "dependencies": { "@types/estree": "1.0.8" @@ -23409,28 +22663,28 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.53.2", - "@rollup/rollup-android-arm64": "4.53.2", - "@rollup/rollup-darwin-arm64": "4.53.2", - "@rollup/rollup-darwin-x64": "4.53.2", - "@rollup/rollup-freebsd-arm64": "4.53.2", - "@rollup/rollup-freebsd-x64": "4.53.2", - "@rollup/rollup-linux-arm-gnueabihf": "4.53.2", - "@rollup/rollup-linux-arm-musleabihf": "4.53.2", - "@rollup/rollup-linux-arm64-gnu": "4.53.2", - "@rollup/rollup-linux-arm64-musl": "4.53.2", - "@rollup/rollup-linux-loong64-gnu": "4.53.2", - "@rollup/rollup-linux-ppc64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-gnu": "4.53.2", - "@rollup/rollup-linux-riscv64-musl": "4.53.2", - "@rollup/rollup-linux-s390x-gnu": "4.53.2", - "@rollup/rollup-linux-x64-gnu": "4.53.2", - "@rollup/rollup-linux-x64-musl": "4.53.2", - "@rollup/rollup-openharmony-arm64": "4.53.2", - "@rollup/rollup-win32-arm64-msvc": "4.53.2", - "@rollup/rollup-win32-ia32-msvc": "4.53.2", - "@rollup/rollup-win32-x64-gnu": "4.53.2", - "@rollup/rollup-win32-x64-msvc": "4.53.2", + "@rollup/rollup-android-arm-eabi": "4.54.0", + "@rollup/rollup-android-arm64": "4.54.0", + "@rollup/rollup-darwin-arm64": "4.54.0", + "@rollup/rollup-darwin-x64": "4.54.0", + "@rollup/rollup-freebsd-arm64": "4.54.0", + "@rollup/rollup-freebsd-x64": "4.54.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.54.0", + "@rollup/rollup-linux-arm-musleabihf": "4.54.0", + "@rollup/rollup-linux-arm64-gnu": "4.54.0", + "@rollup/rollup-linux-arm64-musl": "4.54.0", + "@rollup/rollup-linux-loong64-gnu": "4.54.0", + "@rollup/rollup-linux-ppc64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-gnu": "4.54.0", + "@rollup/rollup-linux-riscv64-musl": "4.54.0", + "@rollup/rollup-linux-s390x-gnu": "4.54.0", + "@rollup/rollup-linux-x64-gnu": "4.54.0", + "@rollup/rollup-linux-x64-musl": "4.54.0", + "@rollup/rollup-openharmony-arm64": "4.54.0", + "@rollup/rollup-win32-arm64-msvc": "4.54.0", + "@rollup/rollup-win32-ia32-msvc": "4.54.0", + "@rollup/rollup-win32-x64-gnu": "4.54.0", + "@rollup/rollup-win32-x64-msvc": "4.54.0", "fsevents": "~2.3.2" } }, @@ -23517,6 +22771,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-array-concat/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/safe-buffer": { "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", @@ -23553,6 +22813,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/safe-push-apply/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/safe-regex-test": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", @@ -23585,18 +22851,6 @@ "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", "license": "MIT" }, - "node_modules/saxes": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", - "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", - "license": "ISC", - "dependencies": { - "xmlchars": "^2.2.0" - }, - "engines": { - "node": ">=v12.22.7" - } - }, "node_modules/semver": { "version": "7.7.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.3.tgz", @@ -23610,24 +22864,24 @@ } }, "node_modules/send": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/send/-/send-0.19.0.tgz", - "integrity": "sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/send/-/send-0.19.2.tgz", + "integrity": "sha512-VMbMxbDeehAxpOtWJXlcUS5E8iXh6QmN+BkRX1GARS3wRaXEEgzCcB10gTQazO42tpNIya8xIyNx8fll1OFPrg==", "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "2.0.0", "destroy": "1.2.0", - "encodeurl": "~1.0.2", + "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "etag": "~1.8.1", - "fresh": "0.5.2", - "http-errors": "2.0.0", + "fresh": "~0.5.2", + "http-errors": "~2.0.1", "mime": "1.6.0", "ms": "2.1.3", - "on-finished": "2.4.1", + "on-finished": "~2.4.1", "range-parser": "~1.2.1", - "statuses": "2.0.1" + "statuses": "~2.0.2" }, "engines": { "node": ">= 0.8.0" @@ -23648,15 +22902,6 @@ "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "license": "MIT" }, - "node_modules/send/node_modules/encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/sentence-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/sentence-case/-/sentence-case-3.0.4.tgz", @@ -23680,15 +22925,15 @@ } }, "node_modules/serve-static": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.2.tgz", - "integrity": "sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw==", + "version": "1.16.3", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.16.3.tgz", + "integrity": "sha512-x0RTqQel6g5SY7Lg6ZreMmsOzncHFU7nhnRWkKgWuMTu5NN0DR5oruckMqRvacAN9d5w6ARnRBXl9xhDCgfMeA==", "license": "MIT", "dependencies": { "encodeurl": "~2.0.0", "escape-html": "~1.0.3", "parseurl": "~1.3.3", - "send": "0.19.0" + "send": "~0.19.1" }, "engines": { "node": ">= 0.8.0" @@ -24062,6 +23307,7 @@ "version": "19.0.5", "resolved": "https://registry.npmjs.org/sinon/-/sinon-19.0.5.tgz", "integrity": "sha512-r15s9/s+ub/d4bxNXqIUmwp6imVSdTorIRaxoecYjqTVLZ8RuoXr/4EDGwIBo6Waxn7f2gnURX9zuhAfCwaF6Q==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1", @@ -24080,6 +23326,7 @@ "version": "13.0.5", "resolved": "https://registry.npmjs.org/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz", "integrity": "sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@sinonjs/commons": "^3.0.1" @@ -24089,6 +23336,7 @@ "version": "7.0.0", "resolved": "https://registry.npmjs.org/diff/-/diff-7.0.0.tgz", "integrity": "sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==", + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.3.1" @@ -24098,6 +23346,7 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "license": "MIT", "dependencies": { "has-flag": "^4.0.0" @@ -24123,24 +23372,22 @@ "node": ">=8" } }, - "node_modules/slate": { - "version": "0.103.0", - "resolved": "https://registry.npmjs.org/slate/-/slate-0.103.0.tgz", - "integrity": "sha512-eCUOVqUpADYMZ59O37QQvUdnFG+8rin0OGQAXNHvHbQeVJ67Bu0spQbcy621vtf8GQUXTEQBlk6OP9atwwob4w==", - "license": "MIT", - "dependencies": { - "immer": "^10.0.3", - "is-plain-object": "^5.0.0", - "tiny-warning": "^1.0.3" - } - }, "node_modules/slice-ansi": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-0.0.4.tgz", - "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + }, "engines": { - "node": ">=0.10.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, "node_modules/smartwrap": { @@ -24368,7 +23615,7 @@ "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "devOptional": true, + "dev": true, "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" @@ -24579,9 +23826,9 @@ } }, "node_modules/statuses": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.2.tgz", + "integrity": "sha512-DvEy55V3DB7uknRo+4iOGT5fP1slR8wQohVdknigZPMpMstaKJQWhwiYBACJE3Ul2pTnATihhBYnRhZQHGBiRw==", "license": "MIT", "engines": { "node": ">= 0.8" @@ -24635,6 +23882,20 @@ "readable-stream": "^3.5.0" } }, + "node_modules/stream-browserify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/stream-connect": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/stream-connect/-/stream-connect-1.0.2.tgz", @@ -24682,14 +23943,20 @@ } }, "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "license": "MIT" + }, "node_modules/string-length": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/string-length/-/string-length-4.0.2.tgz", @@ -24871,9 +24138,9 @@ } }, "node_modules/strnum": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.1.tgz", - "integrity": "sha512-7ZvoFTiCnGxBtDqJ//Cu6fWtZtc7Y3x+QOirG15wztbdngGSkht27o2pyGWrVy0b4WAy3jbKmnoK6g5VlVNUUw==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/strnum/-/strnum-2.1.2.tgz", + "integrity": "sha512-l63NF9y/cLROq/yqKXSLtcMeeyOfnSQlfMSlzFt/K73oIaD8DGaQWd7Z34X9GPiKqP5rbSh84Hl4bOlLcjiSrQ==", "dev": true, "funding": [ { @@ -24919,12 +24186,6 @@ "node": ">=0.10" } }, - "node_modules/symbol-tree": { - "version": "3.2.4", - "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", - "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", - "license": "MIT" - }, "node_modules/table": { "version": "6.9.0", "resolved": "https://registry.npmjs.org/table/-/table-6.9.0.tgz", @@ -24972,24 +24233,6 @@ "node": ">=4" } }, - "node_modules/table/node_modules/slice-ansi": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", - "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", - "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/tapable": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.3.0.tgz", @@ -25153,12 +24396,6 @@ "dev": true, "license": "MIT" }, - "node_modules/tiny-warning": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz", - "integrity": "sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA==", - "license": "MIT" - }, "node_modules/tinyglobby": { "version": "0.2.15", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.15.tgz", @@ -25213,41 +24450,11 @@ "node": ">=0.6" } }, - "node_modules/tough-cookie": { - "version": "4.1.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", - "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", - "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", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", - "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", - "license": "MIT", - "engines": { - "node": ">= 4.0.0" - } - }, "node_modules/tr46": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-3.0.0.tgz", - "integrity": "sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==", - "license": "MIT", - "dependencies": { - "punycode": "^2.1.1" - }, - "engines": { - "node": ">=12" - } + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "license": "MIT" }, "node_modules/traverse": { "version": "0.6.11", @@ -25324,9 +24531,9 @@ } }, "node_modules/ts-jest": { - "version": "29.4.5", - "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.5.tgz", - "integrity": "sha512-HO3GyiWn2qvTQA4kTgjDcXiMwYQt68a1Y8+JuLRVpdIzm+UOLSHgl/XqR4c6nzJkq5rOkjc02O2I7P7l/Yof0Q==", + "version": "29.4.6", + "resolved": "https://registry.npmjs.org/ts-jest/-/ts-jest-29.4.6.tgz", + "integrity": "sha512-fSpWtOO/1AjSNQguk43hb/JCo16oJDnMJf3CdEGNkqsEX3t0KX96xvyX1D7PfLCpVoKu4MfVrqUkFyblYoY4lA==", "dev": true, "license": "MIT", "dependencies": { @@ -25519,13 +24726,13 @@ "license": "0BSD" }, "node_modules/tsx": { - "version": "4.20.6", - "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.20.6.tgz", - "integrity": "sha512-ytQKuwgmrrkDTFP4LjR0ToE2nqgy886GpvRSpU0JAnrdBYppuY5rLkRUYPU1yCryb24SsKBTL/hlDQAEFVwtZg==", + "version": "4.21.0", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-4.21.0.tgz", + "integrity": "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "~0.25.0", + "esbuild": "~0.27.0", "get-tsconfig": "^4.7.5" }, "bin": { @@ -25598,6 +24805,7 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.1.0.tgz", "integrity": "sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==", + "dev": true, "license": "MIT", "engines": { "node": ">=4" @@ -25754,16 +24962,16 @@ } }, "node_modules/typescript-eslint": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.46.4.tgz", - "integrity": "sha512-KALyxkpYV5Ix7UhvjTwJXZv76VWsHG+NjNlt/z+a17SOQSiOcBdUXdbJdyXi7RPxrBFECtFOiPwUJQusJuCqrg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.50.0.tgz", + "integrity": "sha512-Q1/6yNUmCpH94fbgMUMg2/BSAr/6U7GBk61kZTv1/asghQOWOjTlp9K8mixS5NcJmm2creY+UFfGeW/+OcA64A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.46.4", - "@typescript-eslint/parser": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4" + "@typescript-eslint/eslint-plugin": "8.50.0", + "@typescript-eslint/parser": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/utils": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25778,18 +24986,17 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.46.4.tgz", - "integrity": "sha512-R48VhmTJqplNyDxCyqqVkFSZIx1qX6PzwqgcXn1olLrzxcSBDlOsbtcnQuQhNtnNiJ4Xe5gREI1foajYaYU2Vg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.50.0.tgz", + "integrity": "sha512-O7QnmOXYKVtPrfYzMolrCTfkezCJS9+ljLdKW/+DCvRsc3UAz+sbH6Xcsv7p30+0OwUbeWfUDAQE0vpabZ3QLg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/type-utils": "8.46.4", - "@typescript-eslint/utils": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", - "graphemer": "^1.4.0", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/type-utils": "8.50.0", + "@typescript-eslint/utils": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "ignore": "^7.0.0", "natural-compare": "^1.4.0", "ts-api-utils": "^2.1.0" @@ -25802,22 +25009,22 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^8.46.4", + "@typescript-eslint/parser": "^8.50.0", "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <6.0.0" } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/parser": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.46.4.tgz", - "integrity": "sha512-tK3GPFWbirvNgsNKto+UmB/cRtn6TZfyw0D6IKrW55n6Vbs7KJoZtI//kpTKzE/DUmmnAFD8/Ca46s7Obs92/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.50.0.tgz", + "integrity": "sha512-6/cmF2piao+f6wSxUsJLZjck7OQsYyRtcOZS02k7XINSNlz93v6emM8WutDQSXnroG2xwYlEVHJI+cPA7CPM3Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4" }, "engines": { @@ -25833,14 +25040,14 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/scope-manager": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.46.4.tgz", - "integrity": "sha512-tMDbLGXb1wC+McN1M6QeDx7P7c0UWO5z9CXqp7J8E+xGcJuUuevWKxuG8j41FoweS3+L41SkyKKkia16jpX7CA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.50.0.tgz", + "integrity": "sha512-xCwfuCZjhIqy7+HKxBLrDVT5q/iq7XBVBXLn57RTIIpelLtEIZHXAF/Upa3+gaCpeV1NNS5Z9A+ID6jn50VD4A==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4" + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25851,15 +25058,15 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/type-utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.46.4.tgz", - "integrity": "sha512-V4QC8h3fdT5Wro6vANk6eojqfbv5bpwHuMsBcJUJkqs2z5XnYhJzyz9Y02eUmF9u3PgXEUiOt4w4KHR3P+z0PQ==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.50.0.tgz", + "integrity": "sha512-7OciHT2lKCewR0mFoBrvZJ4AXTMe/sYOe87289WAViOocEmDjjv8MvIOT2XESuKj9jp8u3SZYUSh89QA4S1kQw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4", - "@typescript-eslint/utils": "8.46.4", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0", + "@typescript-eslint/utils": "8.50.0", "debug": "^4.3.4", "ts-api-utils": "^2.1.0" }, @@ -25876,9 +25083,9 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/types": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.46.4.tgz", - "integrity": "sha512-USjyxm3gQEePdUwJBFjjGNG18xY9A2grDVGuk7/9AkjIF1L+ZrVnwR5VAU5JXtUnBL/Nwt3H31KlRDaksnM7/w==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.50.0.tgz", + "integrity": "sha512-iX1mgmGrXdANhhITbpp2QQM2fGehBse9LbTf0sidWK6yg/NE+uhV5dfU1g6EYPlcReYmkE9QLPq/2irKAmtS9w==", "dev": true, "license": "MIT", "engines": { @@ -25890,21 +25097,20 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.46.4.tgz", - "integrity": "sha512-7oV2qEOr1d4NWNmpXLR35LvCfOkTNymY9oyW+lUHkmCno7aOmIf/hMaydnJBUTBMRCOGZh8YjkFOc8dadEoNGA==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.50.0.tgz", + "integrity": "sha512-W7SVAGBR/IX7zm1t70Yujpbk+zdPq/u4soeFSknWFdXIFuWsBGBOUu/Tn/I6KHSKvSh91OiMuaSnYp3mtPt5IQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/project-service": "8.46.4", - "@typescript-eslint/tsconfig-utils": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/visitor-keys": "8.46.4", + "@typescript-eslint/project-service": "8.50.0", + "@typescript-eslint/tsconfig-utils": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/visitor-keys": "8.50.0", "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", "minimatch": "^9.0.4", "semver": "^7.6.0", + "tinyglobby": "^0.2.15", "ts-api-utils": "^2.1.0" }, "engines": { @@ -25919,16 +25125,16 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/utils": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.46.4.tgz", - "integrity": "sha512-AbSv11fklGXV6T28dp2Me04Uw90R2iJ30g2bgLz529Koehrmkbs1r7paFqr1vPCZi7hHwYxYtxfyQMRC8QaVSg==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.50.0.tgz", + "integrity": "sha512-87KgUXET09CRjGCi2Ejxy3PULXna63/bMYv72tCAlDJC3Yqwln0HiFJ3VJMst2+mEtNtZu5oFvX4qJGjKsnAgg==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.7.0", - "@typescript-eslint/scope-manager": "8.46.4", - "@typescript-eslint/types": "8.46.4", - "@typescript-eslint/typescript-estree": "8.46.4" + "@typescript-eslint/scope-manager": "8.50.0", + "@typescript-eslint/types": "8.50.0", + "@typescript-eslint/typescript-estree": "8.50.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -25943,13 +25149,13 @@ } }, "node_modules/typescript-eslint/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.46.4", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.46.4.tgz", - "integrity": "sha512-/++5CYLQqsO9HFGLI7APrxBJYo+5OCMpViuhV8q5/Qa3o5mMrF//eQHks+PXcsAVaLdn817fMuS7zqoXNNZGaw==", + "version": "8.50.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.50.0.tgz", + "integrity": "sha512-Xzmnb58+Db78gT/CCj/PVCvK+zxbnsw6F+O1oheYszJbBSdEjVhQi3C/Xttzxgi/GLmpvOggRs1RFpiJ8+c34Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.46.4", + "@typescript-eslint/types": "8.50.0", "eslint-visitor-keys": "^4.2.1" }, "engines": { @@ -26109,9 +25315,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.4.tgz", - "integrity": "sha512-q0SPT4xyU84saUX+tomz1WLkxUbuaJnR1xWt17M7fJtEJigJeWUNGUqrauFXsHnqev9y9JTRGwk13tFBuKby4A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.2.3.tgz", + "integrity": "sha512-Js0m9cx+qOgDxo0eMiFGEueWztz+d4+M3rGlmKPT+T4IS/jP4ylw3Nwpu6cpTTP8R1MAC1kF4VbdLt3ARf209w==", "dev": true, "funding": [ { @@ -26169,16 +25375,6 @@ "punycode": "^2.1.0" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", - "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" - } - }, "node_modules/util": { "version": "0.12.5", "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", @@ -26289,27 +25485,6 @@ "node": ">= 0.8" } }, - "node_modules/void-elements": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/void-elements/-/void-elements-2.0.1.tgz", - "integrity": "sha512-qZKX4RnBzH2ugr8Lxa7x+0V6XD9Sb/ouARtiasEQCHB1EVU4NXtmHsDDrx1dO4ne5fc3J6EW05BP1Dl0z0iung==", - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/w3c-xmlserializer": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", - "integrity": "sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw==", - "license": "MIT", - "dependencies": { - "xml-name-validator": "^4.0.0" - }, - "engines": { - "node": ">=14" - } - }, "node_modules/walk-back": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/walk-back/-/walk-back-5.1.1.tgz", @@ -26340,58 +25515,19 @@ } }, "node_modules/webidl-conversions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", - "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", - "license": "BSD-2-Clause", - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz", - "integrity": "sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==", - "license": "MIT", - "dependencies": { - "iconv-lite": "0.6.3" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/whatwg-encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", - "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", - "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/whatwg-mimetype": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz", - "integrity": "sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==", - "license": "MIT", - "engines": { - "node": ">=12" - } + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "license": "BSD-2-Clause" }, "node_modules/whatwg-url": { - "version": "11.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-11.0.0.tgz", - "integrity": "sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", "license": "MIT", "dependencies": { - "tr46": "^3.0.0", - "webidl-conversions": "^7.0.0" - }, - "engines": { - "node": ">=12" + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, "node_modules/which": { @@ -26455,6 +25591,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/which-builtin-type/node_modules/isarray": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", + "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", + "license": "MIT" + }, "node_modules/which-collection": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/which-collection/-/which-collection-1.0.2.tgz", @@ -26513,9 +25655,9 @@ } }, "node_modules/winston": { - "version": "3.18.3", - "resolved": "https://registry.npmjs.org/winston/-/winston-3.18.3.tgz", - "integrity": "sha512-NoBZauFNNWENgsnC9YpgyYwOVrl2m58PpQ8lNHjV3kosGs7KJ7Npk9pCUE+WJlawVSe8mykWDKWFSVfs3QO9ww==", + "version": "3.19.0", + "resolved": "https://registry.npmjs.org/winston/-/winston-3.19.0.tgz", + "integrity": "sha512-LZNJgPzfKR+/J3cHkxcpHKpKKvGfDZVPS4hfJCc4cCG0CgYzvlD6yE/S3CIL/Yt91ak327YCpiF/0MyeZHEHKA==", "license": "MIT", "dependencies": { "@colors/colors": "^1.6.0", @@ -26548,6 +25690,34 @@ "node": ">= 12.0.0" } }, + "node_modules/winston-transport/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/winston/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, "node_modules/word-wrap": { "version": "1.2.5", "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", @@ -26650,27 +25820,6 @@ "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/ws": { - "version": "8.18.3", - "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.3.tgz", - "integrity": "sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==", - "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", "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", @@ -26680,21 +25829,6 @@ "node": ">=8" } }, - "node_modules/xml-name-validator": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", - "integrity": "sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==", - "license": "Apache-2.0", - "engines": { - "node": ">=12" - } - }, - "node_modules/xmlchars": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", - "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", - "license": "MIT" - }, "node_modules/xmlcreate": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.4.tgz", @@ -26885,7 +26019,7 @@ "version": "2.0.0-beta.2", "license": "MIT", "dependencies": { - "@contentstack/cli-audit": "~1.16.0", + "@contentstack/cli-audit": "~2.0.0-beta.0", "@contentstack/cli-auth": "~1.6.2", "@contentstack/cli-cm-bootstrap": "~2.0.0-beta.2", "@contentstack/cli-cm-branches": "~1.6.1", @@ -26894,13 +26028,12 @@ "@contentstack/cli-cm-export": "~2.0.0-beta.2", "@contentstack/cli-cm-export-to-csv": "~1.10.0", "@contentstack/cli-cm-import": "~2.0.0-beta.2", - "@contentstack/cli-cm-import-setup": "1.7.0", - "@contentstack/cli-cm-migrate-rte": "~1.6.2", + "@contentstack/cli-cm-import-setup": "~2.0.0-beta.1", "@contentstack/cli-cm-seed": "~2.0.0-beta.2", "@contentstack/cli-command": "~1.6.2", "@contentstack/cli-config": "~1.15.3", "@contentstack/cli-launch": "^1.9.2", - "@contentstack/cli-migration": "~1.8.2", + "@contentstack/cli-migration": "~2.0.0-beta", "@contentstack/cli-utilities": "~1.15.0", "@contentstack/cli-variants": "~2.0.0-beta.2", "@contentstack/management": "~1.22.0", @@ -26956,7 +26089,7 @@ }, "packages/contentstack-audit": { "name": "@contentstack/cli-audit", - "version": "1.16.0", + "version": "2.0.0-beta.0", "license": "MIT", "dependencies": { "@contentstack/cli-command": "~1.6.1", @@ -27005,9 +26138,9 @@ "license": "MIT" }, "packages/contentstack-audit/node_modules/@types/node": { - "version": "20.19.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "dev": true, "license": "MIT", "dependencies": { @@ -27375,92 +26508,32 @@ "node": ">=12.0.0" } }, - "packages/contentstack-clone/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", + "packages/contentstack-clone/node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "packages/contentstack-clone/node_modules/wrap-ansi": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", + "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, "engines": { "node": ">=8" } }, - "packages/contentstack-clone/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/contentstack-clone/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/contentstack-clone/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "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" - } - }, - "packages/contentstack-clone/node_modules/rxjs": { - "version": "7.8.2", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", - "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", - "license": "Apache-2.0", - "dependencies": { - "tslib": "^2.1.0" - } - }, - "packages/contentstack-clone/node_modules/wrap-ansi": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", - "integrity": "sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "packages/contentstack-command": { - "name": "@contentstack/cli-command", - "version": "1.6.2", + "packages/contentstack-command": { + "name": "@contentstack/cli-command", + "version": "1.6.2", "license": "MIT", "dependencies": { "@contentstack/cli-utilities": "~1.15.0", @@ -27822,9 +26895,9 @@ } }, "packages/contentstack-dev-dependencies/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -28191,9 +27264,9 @@ } }, "packages/contentstack-export-to-csv/node_modules/js-yaml": { - "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "version": "3.14.2", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.2.tgz", + "integrity": "sha512-PMSmkqxr106Xa156c2M265Z+FTrPl+oxd/rgOQy2tijQeK5TxQ43psO1ZCwhVOSdnn+RzkzlRz/eY4BgJBYVpg==", "dev": true, "license": "MIT", "dependencies": { @@ -28370,7 +27443,7 @@ }, "packages/contentstack-import-setup": { "name": "@contentstack/cli-cm-import-setup", - "version": "1.7.0", + "version": "2.0.0-beta.1", "license": "MIT", "dependencies": { "@contentstack/cli-command": "~1.6.1", @@ -28411,33 +27484,41 @@ "node": ">=14.0.0" } }, - "packages/contentstack-migrate-rte": { - "name": "@contentstack/cli-cm-migrate-rte", - "version": "1.6.2", + "packages/contentstack-import/node_modules/@contentstack/cli-audit": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/@contentstack/cli-audit/-/cli-audit-1.16.1.tgz", + "integrity": "sha512-CRe92i7op3RlD5JQu+PY+KelITaTAb3lX22M//Cz7GzW356HyDTNtWydO5MOkPCTt6OkLNz0I9zYY2SPNCRAsw==", "license": "MIT", "dependencies": { - "@contentstack/cli-command": "~1.6.1", + "@contentstack/cli-command": "~1.7.0", "@contentstack/cli-utilities": "~1.15.0", - "@contentstack/json-rte-serializer": "~2.1.0", "@oclif/core": "^4.3.0", "@oclif/plugin-help": "^6.2.28", + "@oclif/plugin-plugins": "^5.4.54", "chalk": "^4.1.2", - "collapse-whitespace": "^1.1.7", - "jsdom": "^20.0.3", - "jsonschema": "^1.5.0", + "fast-csv": "^4.3.6", + "fs-extra": "^11.3.0", "lodash": "^4.17.21", - "nock": "^13.5.6", - "omit-deep-lodash": "^1.1.7", - "sinon": "^19.0.5" + "uuid": "^9.0.1", + "winston": "^3.17.0" }, - "devDependencies": { - "@oclif/test": "^4.1.13", - "chai": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.62", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.17.46" + "bin": { + "audit": "bin/run.js" + }, + "engines": { + "node": ">=16" + } + }, + "packages/contentstack-import/node_modules/@contentstack/cli-audit/node_modules/@contentstack/cli-command": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/@contentstack/cli-command/-/cli-command-1.7.0.tgz", + "integrity": "sha512-hhsGGa6wFcvHwkapu0vXB1yvOaOmJ1LaV2imyjUREVxvHYC5O4JS2H5VeXLq137Q/dOk5q6o9MjVS+9W4Ri4sw==", + "license": "MIT", + "dependencies": { + "@contentstack/cli-utilities": "~1.15.0", + "@oclif/core": "^4.3.0", + "@oclif/plugin-help": "^6.2.28", + "contentstack": "^3.25.3" }, "engines": { "node": ">=14.0.0" @@ -28445,7 +27526,7 @@ }, "packages/contentstack-migration": { "name": "@contentstack/cli-migration", - "version": "1.8.2", + "version": "2.0.0-beta", "license": "MIT", "dependencies": { "@contentstack/cli-command": "~1.6.1", @@ -28627,66 +27708,6 @@ "dev": true, "license": "MIT" }, - "packages/contentstack-utilities/node_modules/is-interactive": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-1.0.0.tgz", - "integrity": "sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "packages/contentstack-utilities/node_modules/is-unicode-supported": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz", - "integrity": "sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==", - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/contentstack-utilities/node_modules/log-symbols": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-4.1.0.tgz", - "integrity": "sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==", - "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/contentstack-utilities/node_modules/ora": { - "version": "5.4.1", - "resolved": "https://registry.npmjs.org/ora/-/ora-5.4.1.tgz", - "integrity": "sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==", - "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" - } - }, "packages/contentstack-variants": { "name": "@contentstack/cli-variants", "version": "2.0.0-beta.2", @@ -28711,9 +27732,9 @@ } }, "packages/contentstack-variants/node_modules/@types/node": { - "version": "20.19.25", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.25.tgz", - "integrity": "sha512-ZsJzA5thDQMSQO788d7IocwwQbI8B5OPzmqNvpf3NY/+MHDAS759Wo0gd2WQeXYt5AAAQjzcrTVC6SKCuYgoCQ==", + "version": "20.19.27", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.19.27.tgz", + "integrity": "sha512-N2clP5pJhB2YnZJ3PIHFk5RkygRX5WO/5f0WC08tp0wd+sv0rsJk3MqWn3CbNmT2J505a5336jaQj4ph1AdMug==", "dev": true, "license": "MIT", "dependencies": { @@ -28733,6 +27754,213 @@ "engines": { "node": ">=14.17" } + }, + "packages/contentstack/node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "packages/contentstack/node_modules/cli-cursor": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-5.0.0.tgz", + "integrity": "sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==", + "license": "MIT", + "dependencies": { + "restore-cursor": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/emoji-regex": { + "version": "10.6.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-10.6.0.tgz", + "integrity": "sha512-toUI84YS5YmxW219erniWD0CIVOo46xGKColeNQRgOzDorgBi1v4D71/OFzgD9GO2UGKIv1C3Sp8DAn0+j5w7A==", + "license": "MIT" + }, + "packages/contentstack/node_modules/is-interactive": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-interactive/-/is-interactive-2.0.0.tgz", + "integrity": "sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/is-unicode-supported": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz", + "integrity": "sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/log-symbols": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-6.0.0.tgz", + "integrity": "sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "is-unicode-supported": "^1.3.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/log-symbols/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/contentstack/node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", + "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/onetime": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-7.0.0.tgz", + "integrity": "sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==", + "license": "MIT", + "dependencies": { + "mimic-function": "^5.0.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/ora": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/ora/-/ora-8.2.0.tgz", + "integrity": "sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==", + "license": "MIT", + "dependencies": { + "chalk": "^5.3.0", + "cli-cursor": "^5.0.0", + "cli-spinners": "^2.9.2", + "is-interactive": "^2.0.0", + "is-unicode-supported": "^2.0.0", + "log-symbols": "^6.0.0", + "stdin-discarder": "^0.2.2", + "string-width": "^7.2.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/ora/node_modules/chalk": { + "version": "5.6.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.6.2.tgz", + "integrity": "sha512-7NzBL0rN6fMUW+f7A6Io4h40qQlG+xGmtMxfbnH/K7TAtt8JQWVQK+6g0UXKMeVJoyV5EkkNsErQ8pVD3bLHbA==", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "packages/contentstack/node_modules/restore-cursor": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-5.1.0.tgz", + "integrity": "sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==", + "license": "MIT", + "dependencies": { + "onetime": "^7.0.0", + "signal-exit": "^4.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "license": "ISC", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "packages/contentstack/node_modules/string-width": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-7.2.0.tgz", + "integrity": "sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==", + "license": "MIT", + "dependencies": { + "emoji-regex": "^10.3.0", + "get-east-asian-width": "^1.0.0", + "strip-ansi": "^7.1.0" + }, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/contentstack/node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "license": "MIT", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } } } } diff --git a/packages/contentstack-audit/README.md b/packages/contentstack-audit/README.md index 327e843014..562275eb58 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.14.2 darwin-arm64 node-v22.14.0 +@contentstack/cli-audit/2.0.0-beta.0 darwin-arm64 node-v22.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND @@ -273,7 +273,7 @@ USAGE $ csdx help [COMMAND...] [-n] ARGUMENTS - COMMAND... Command to show help for. + [COMMAND...] Command to show help for. FLAGS -n, --nested-commands Include all nested commands in the output. @@ -282,8 +282,7 @@ DESCRIPTION Display help for csdx. ``` -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.33/src/commands/help.ts)_ -_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.33/src/commands/help.ts)_ +_See code: [@oclif/plugin-help](https://github.com/oclif/plugin-help/blob/v6.2.36/src/commands/help.ts)_ ## `csdx plugins` @@ -306,7 +305,7 @@ EXAMPLES $ csdx plugins ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/index.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/index.ts)_ ## `csdx plugins:add PLUGIN` @@ -380,7 +379,7 @@ EXAMPLES $ csdx plugins:inspect myplugin ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/inspect.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/inspect.ts)_ ## `csdx plugins:install PLUGIN` @@ -429,7 +428,7 @@ EXAMPLES $ csdx plugins:install someuser/someplugin ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/install.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/install.ts)_ ## `csdx plugins:link PATH` @@ -460,7 +459,7 @@ EXAMPLES $ csdx plugins:link myplugin ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/link.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/link.ts)_ ## `csdx plugins:remove [PLUGIN]` @@ -471,7 +470,7 @@ USAGE $ csdx plugins:remove [PLUGIN...] [-h] [-v] ARGUMENTS - PLUGIN... plugin to uninstall + [PLUGIN...] plugin to uninstall FLAGS -h, --help Show CLI help. @@ -501,7 +500,7 @@ FLAGS --reinstall Reinstall all plugins after uninstalling. ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/reset.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/reset.ts)_ ## `csdx plugins:uninstall [PLUGIN]` @@ -512,7 +511,7 @@ USAGE $ csdx plugins:uninstall [PLUGIN...] [-h] [-v] ARGUMENTS - PLUGIN... plugin to uninstall + [PLUGIN...] plugin to uninstall FLAGS -h, --help Show CLI help. @@ -529,7 +528,7 @@ EXAMPLES $ csdx plugins:uninstall myplugin ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/uninstall.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/uninstall.ts)_ ## `csdx plugins:unlink [PLUGIN]` @@ -540,7 +539,7 @@ USAGE $ csdx plugins:unlink [PLUGIN...] [-h] [-v] ARGUMENTS - PLUGIN... plugin to uninstall + [PLUGIN...] plugin to uninstall FLAGS -h, --help Show CLI help. @@ -573,5 +572,5 @@ DESCRIPTION Update installed plugins. ``` -_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.49/src/commands/plugins/update.ts)_ +_See code: [@oclif/plugin-plugins](https://github.com/oclif/plugin-plugins/blob/v5.4.54/src/commands/plugins/update.ts)_ diff --git a/packages/contentstack-audit/package.json b/packages/contentstack-audit/package.json index f8d0eff690..34012b5ff6 100644 --- a/packages/contentstack-audit/package.json +++ b/packages/contentstack-audit/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-audit", - "version": "1.16.0", + "version": "2.0.0-beta.0", "description": "Contentstack audit plugin", "author": "Contentstack CLI", "homepage": "https://github.com/contentstack/cli", diff --git a/packages/contentstack-audit/src/audit-base-command.ts b/packages/contentstack-audit/src/audit-base-command.ts index c588581241..1eb63cfd49 100644 --- a/packages/contentstack-audit/src/audit-base-command.ts +++ b/packages/contentstack-audit/src/audit-base-command.ts @@ -5,7 +5,7 @@ import { v4 as uuid } from 'uuid'; import isEmpty from 'lodash/isEmpty'; import { join, resolve } from 'path'; import cloneDeep from 'lodash/cloneDeep'; -import { cliux, sanitizePath, TableFlags, TableHeader, log, configHandler } from '@contentstack/cli-utilities'; +import { cliux, sanitizePath, TableFlags, TableHeader, log, configHandler, CLIProgressManager, clearProgressModuleSetting } from '@contentstack/cli-utilities'; import { createWriteStream, existsSync, mkdirSync, readFileSync, writeFileSync, rmSync } from 'fs'; import config from './config'; import { print } from './util/log'; @@ -71,11 +71,23 @@ export abstract class AuditBaseCommand extends BaseCommand { this.currentCommand = command; + + // Set progress supported module and console logs setting BEFORE any log calls + // This ensures the logger respects the setting when it's initialized + const logConfig = configHandler.get('log') || {}; + // Default to false so progress bars are shown instead of console logs + if (logConfig.showConsoleLogs === undefined) { + configHandler.set('log.showConsoleLogs', false); + } + configHandler.set('log.progressSupportedModule', 'audit'); + // Initialize audit context this.auditContext = this.createAuditContext(); log.debug(`Starting audit command: ${command}`, this.auditContext); log.info(`Starting audit command: ${command}`, this.auditContext); - + + // Initialize global summary for progress tracking + CLIProgressManager.initializeGlobalSummary('AUDIT', '', 'Auditing content...'); await this.promptQueue(); await this.createBackUp(); @@ -163,6 +175,12 @@ export abstract class AuditBaseCommand extends BaseCommand = await new ModuleDataReader(cloneDeep(constructorParam)).run(); log.debug(`Data module wise: ${JSON.stringify(dataModuleWise)}`, this.auditContext); + + // Extract logConfig and showConsoleLogs once before the loop to reuse throughout + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? true; + for (const module of this.sharedConfig.flags.modules || this.sharedConfig.modules) { // Update audit context with current module this.auditContext = this.createAuditContext(module); log.debug(`Starting audit for module: ${module}`, this.auditContext); log.info(`Starting audit for module: ${module}`, this.auditContext); - print([ - { - bold: true, - color: 'whiteBright', - message: this.$t(this.messages.AUDIT_START_SPINNER, { module }), - }, - ]); + // Only show spinner message if console logs are enabled (compatible with line-by-line logs) + if (showConsoleLogs) { + print([ + { + bold: true, + color: 'whiteBright', + message: this.$t(this.messages.AUDIT_START_SPINNER, { module }), + }, + ]); + } constructorParam['moduleName'] = module; switch (module) { case 'assets': log.info('Executing assets audit', this.auditContext); - missingEnvLocalesInAssets = await new Assets(cloneDeep(constructorParam)).run(); + const assetsTotalCount = dataModuleWise['assets']?.Total || 0; + missingEnvLocalesInAssets = await new Assets(cloneDeep(constructorParam)).run(false, assetsTotalCount); await this.prepareReport(module, missingEnvLocalesInAssets); this.getAffectedData('assets', dataModuleWise['assets'], missingEnvLocalesInAssets); log.success(`Assets audit completed. Found ${Object.keys(missingEnvLocalesInAssets || {}).length} issues`, this.auditContext); break; case 'content-types': log.info('Executing content-types audit', this.auditContext); - missingCtRefs = await new ContentType(cloneDeep(constructorParam)).run(); + const contentTypesTotalCount = dataModuleWise['content-types']?.Total || 0; + missingCtRefs = await new ContentType(cloneDeep(constructorParam)).run(false, contentTypesTotalCount); await this.prepareReport(module, missingCtRefs); this.getAffectedData('content-types', dataModuleWise['content-types'], missingCtRefs); log.success(`Content-types audit completed. Found ${Object.keys(missingCtRefs || {}).length} issues`, this.auditContext); break; case 'global-fields': log.info('Executing global-fields audit', this.auditContext); - missingGfRefs = await new GlobalField(cloneDeep(constructorParam)).run(); + const globalFieldsTotalCount = dataModuleWise['global-fields']?.Total || 0; + missingGfRefs = await new GlobalField(cloneDeep(constructorParam)).run(false, globalFieldsTotalCount); await this.prepareReport(module, missingGfRefs); this.getAffectedData('global-fields', dataModuleWise['global-fields'], missingGfRefs); log.success(`Global-fields audit completed. Found ${Object.keys(missingGfRefs || {}).length} issues`, this.auditContext); break; case 'entries': log.info('Executing entries audit', this.auditContext); - missingEntry = await new Entries(cloneDeep(constructorParam)).run(); + const entriesTotalCount = dataModuleWise['entries']?.Total || 0; + missingEntry = await new Entries(cloneDeep(constructorParam)).run(entriesTotalCount); missingEntryRefs = missingEntry.missingEntryRefs ?? {}; missingSelectFeild = missingEntry.missingSelectFeild ?? {}; missingMandatoryFields = missingEntry.missingMandatoryFields ?? {}; @@ -286,12 +316,13 @@ export abstract class AuditBaseCommand extends BaseCommand { + await this.prerequisiteData(); + }); + + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating asset references...'); + } - log.debug('Starting asset Reference, Environment and Locale validation', this.config.auditContext); - await this.lookForReference(); + log.debug('Starting asset Reference, Environment and Locale validation', this.config.auditContext); + await this.lookForReference(); if (returnFixSchema) { log.debug(`Returning fixed schema with ${this.schema?.length || 0} items`, this.config.auditContext); @@ -86,9 +96,15 @@ export default class Assets { } } - const totalIssues = Object.keys(this.missingEnvLocales).length; - log.debug(`${this.moduleName} audit completed. Found ${totalIssues} assets with missing environment/locale references`, this.config.auditContext); - return this.missingEnvLocales; + const totalIssues = Object.keys(this.missingEnvLocales).length; + log.debug(`${this.moduleName} audit completed. Found ${totalIssues} assets with missing environment/locale references`, this.config.auditContext); + + this.completeProgress(true); + return this.missingEnvLocales; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Assets audit failed'); + throw error; + } } /** @@ -227,6 +243,11 @@ export default class Assets { const remainingPublishDetails = this.assets[assetUid].publish_details?.length || 0; log.debug(`Asset ${assetUid} now has ${remainingPublishDetails} valid publish details`, this.config.auditContext); + // Track progress for each asset processed + if (this.progressManager) { + this.progressManager.tick(true, `asset: ${assetUid}`, null); + } + if (this.fix) { log.debug(`Fixing asset ${assetUid}`, this.config.auditContext); log.info($t(auditFixMsg.ASSET_FIX, { uid: assetUid }), this.config.auditContext); diff --git a/packages/contentstack-audit/src/modules/base-class.ts b/packages/contentstack-audit/src/modules/base-class.ts new file mode 100644 index 0000000000..d1a8329cf1 --- /dev/null +++ b/packages/contentstack-audit/src/modules/base-class.ts @@ -0,0 +1,57 @@ +import { CLIProgressManager, configHandler } from '@contentstack/cli-utilities'; +import { ConfigType, ModuleConstructorParam } from '../types'; + +export default abstract class BaseClass { + protected progressManager: CLIProgressManager | null = null; + protected currentModuleName: string = ''; + public config: ConfigType; + + constructor({ config }: ModuleConstructorParam) { + this.config = config; + } + + /** + * Create simple progress manager + */ + protected createSimpleProgress(moduleName: string, total?: number): CLIProgressManager { + this.currentModuleName = moduleName; + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + this.progressManager = CLIProgressManager.createSimple(moduleName, total, showConsoleLogs); + return this.progressManager; + } + + /** + * Create nested progress manager + */ + protected createNestedProgress(moduleName: string): CLIProgressManager { + this.currentModuleName = moduleName; + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + this.progressManager = CLIProgressManager.createNested(moduleName, showConsoleLogs); + return this.progressManager; + } + + /** + * Complete progress manager + */ + protected completeProgress(success: boolean = true, error?: string): void { + this.progressManager?.complete(success, error); + this.progressManager = null; + } + + /** + * Execute action with loading spinner (if console logs are disabled) + */ + protected async withLoadingSpinner(message: string, action: () => Promise): Promise { + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + + if (showConsoleLogs) { + // If console logs are enabled, don't show spinner, just execute the action + return await action(); + } + return await CLIProgressManager.withLoadingSpinner(message, action); + } +} + diff --git a/packages/contentstack-audit/src/modules/content-types.ts b/packages/contentstack-audit/src/modules/content-types.ts index a4dd07edc2..479a1c19f9 100644 --- a/packages/contentstack-audit/src/modules/content-types.ts +++ b/packages/contentstack-audit/src/modules/content-types.ts @@ -7,7 +7,6 @@ import { existsSync, readFileSync, writeFileSync } from 'fs'; import { sanitizePath, cliux, log } from '@contentstack/cli-utilities'; import { - ConfigType, ModularBlockType, ContentTypeStruct, GroupFieldDataType, @@ -25,14 +24,14 @@ import { import auditConfig from '../config'; import { $t, auditFixMsg, auditMsg, commonMsg } from '../messages'; import { MarketplaceAppsInstallationData } from '../types/extension'; +import BaseClass from './base-class'; /* The `ContentType` class is responsible for scanning content types, looking for references, and generating a report in JSON and CSV formats. */ -export default class ContentType { +export default class ContentType extends BaseClass { protected fix: boolean; public fileName: string; - public config: ConfigType; public folderPath: string; public currentUid!: string; public currentTitle!: string; @@ -44,7 +43,7 @@ export default class ContentType { protected missingRefs: Record = {}; public moduleName: keyof typeof auditConfig.moduleConfig; constructor({ fix, config, moduleName, ctSchema, gfSchema }: ModuleConstructorParam & CtConstructorParam) { - this.config = config; + super({ config }); this.fix = fix ?? false; this.ctSchema = ctSchema; this.gfSchema = gfSchema; @@ -76,61 +75,84 @@ export default class ContentType { /** * The `run` function checks if a folder path exists, sets the schema based on the module name, * iterates over the schema and looks for references, and returns a list of missing references. + * @param returnFixSchema - If true, returns the fixed schema instead of missing references + * @param totalCount - Total number of items to process (for progress tracking) * @returns the `missingRefs` object. */ - async run(returnFixSchema = false) { - this.inMemoryFix = returnFixSchema; + async run(returnFixSchema = false, totalCount?: number) { + try { + this.inMemoryFix = returnFixSchema; + + if (!existsSync(this.folderPath)) { + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return returnFixSchema ? [] : {}; + } - if (!existsSync(this.folderPath)) { - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return returnFixSchema ? [] : {}; - } + this.schema = this.moduleName === 'content-types' ? this.ctSchema : this.gfSchema; + log.debug(`Found ${this.schema?.length || 0} ${this.moduleName} schemas to audit`, this.config.auditContext); - this.schema = this.moduleName === 'content-types' ? this.ctSchema : this.gfSchema; - log.debug(`Found ${this.schema?.length || 0} ${this.moduleName} schemas to audit`, this.config.auditContext); - - await this.prerequisiteData(); - - for (const schema of this.schema ?? []) { - this.currentUid = schema.uid; - this.currentTitle = schema.title; - this.missingRefs[this.currentUid] = []; - const { uid, title } = schema; - log.debug(`Auditing ${this.moduleName}: ${title} (${uid})`, this.config.auditContext); - await this.lookForReference([{ uid, name: title }], schema); - log.debug( - $t(auditMsg.SCAN_CT_SUCCESS_MSG, { title, module: this.config.moduleConfig[this.moduleName].name }), - this.config.auditContext, - ); - } + // Load prerequisite data with loading spinner + await this.withLoadingSpinner(`${this.moduleName.toUpperCase()}: Loading prerequisite data...`, async () => { + await this.prerequisiteData(); + }); - if (returnFixSchema) { - log.debug(`Returning fixed schema with ${this.schema?.length || 0} items`, this.config.auditContext); - return this.schema; - } + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating references...'); + } - if (this.fix) { - log.debug('Writing fix content to files', this.config.auditContext); - await this.writeFixContent(); - } + for (const schema of this.schema ?? []) { + this.currentUid = schema.uid; + this.currentTitle = schema.title; + this.missingRefs[this.currentUid] = []; + const { uid, title } = schema; + log.debug(`Auditing ${this.moduleName}: ${title} (${uid})`, this.config.auditContext); + await this.lookForReference([{ uid, name: title }], schema); + log.debug( + $t(auditMsg.SCAN_CT_SUCCESS_MSG, { title, module: this.config.moduleConfig[this.moduleName].name }), + this.config.auditContext, + ); + + // Track progress for each schema processed + if (this.progressManager) { + this.progressManager.tick(true, `${this.moduleName}: ${title}`, null); + } + } - log.debug('Cleaning up empty missing references', this.config.auditContext); - log.debug(`Total missing reference properties: ${Object.keys(this.missingRefs).length}`, this.config.auditContext); - - for (let propName in this.missingRefs) { - const refCount = this.missingRefs[propName].length; - log.debug(`Property ${propName}: ${refCount} missing references`, this.config.auditContext); + if (returnFixSchema) { + log.debug(`Returning fixed schema with ${this.schema?.length || 0} items`, this.config.auditContext); + return this.schema; + } + + if (this.fix) { + log.debug('Writing fix content to files', this.config.auditContext); + await this.writeFixContent(); + } + + log.debug('Cleaning up empty missing references', this.config.auditContext); + log.debug(`Total missing reference properties: ${Object.keys(this.missingRefs).length}`, this.config.auditContext); - if (!refCount) { - log.debug(`Removing empty property: ${propName}`, this.config.auditContext); - delete this.missingRefs[propName]; + for (let propName in this.missingRefs) { + const refCount = this.missingRefs[propName].length; + log.debug(`Property ${propName}: ${refCount} missing references`, this.config.auditContext); + + if (!refCount) { + log.debug(`Removing empty property: ${propName}`, this.config.auditContext); + delete this.missingRefs[propName]; + } } - } - const totalIssues = Object.keys(this.missingRefs).length; - log.debug(`${this.moduleName} audit completed. Found ${totalIssues} schemas with issues`, this.config.auditContext); - return this.missingRefs; + const totalIssues = Object.keys(this.missingRefs).length; + log.debug(`${this.moduleName} audit completed. Found ${totalIssues} schemas with issues`, this.config.auditContext); + + this.completeProgress(true); + return this.missingRefs; + } catch (error: any) { + this.completeProgress(false, error?.message || `${this.moduleName} audit failed`); + throw error; + } } /** diff --git a/packages/contentstack-audit/src/modules/custom-roles.ts b/packages/contentstack-audit/src/modules/custom-roles.ts index 8dfe08b878..8ae7a3cbf4 100644 --- a/packages/contentstack-audit/src/modules/custom-roles.ts +++ b/packages/contentstack-audit/src/modules/custom-roles.ts @@ -1,17 +1,17 @@ import { join, resolve } from 'path'; import { existsSync, readFileSync, writeFileSync } from 'fs'; import { cloneDeep } from 'lodash'; -import { ConfigType, CtConstructorParam, ModuleConstructorParam, CustomRole, Rule } from '../types'; +import { CtConstructorParam, ModuleConstructorParam, CustomRole, Rule } from '../types'; import { cliux, sanitizePath, log } from '@contentstack/cli-utilities'; import auditConfig from '../config'; import { $t, auditMsg, commonMsg } from '../messages'; import { values } from 'lodash'; +import BaseClass from './base-class'; -export default class CustomRoles { +export default class CustomRoles extends BaseClass { protected fix: boolean; public fileName: any; - public config: ConfigType; public folderPath: string; public customRoleSchema: CustomRole[]; public moduleName: keyof typeof auditConfig.moduleConfig; @@ -20,7 +20,7 @@ export default class CustomRoles { public isBranchFixDone: boolean; constructor({ fix, config, moduleName }: ModuleConstructorParam & Pick) { - this.config = config; + super({ config }); log.debug(`Initializing Custom Roles module`, this.config.auditContext); this.fix = fix ?? false; this.customRoleSchema = []; @@ -61,25 +61,34 @@ export default class CustomRoles { * From the ctSchema add all the content type UID into ctUidSet to check whether the content-type is present or not * @returns Array of object containing the custom role name, uid and content_types that are missing */ - async run() { - - if (!existsSync(this.folderPath)) { - log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return {}; - } + async run(totalCount?: number) { + try { + if (!existsSync(this.folderPath)) { + log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return {}; + } - this.customRolePath = join(this.folderPath, this.fileName); - log.debug(`Custom roles file path: ${this.customRolePath}`, this.config.auditContext); - - this.customRoleSchema = existsSync(this.customRolePath) - ? values(JSON.parse(readFileSync(this.customRolePath, 'utf8')) as CustomRole[]) - : []; - - log.debug(`Found ${this.customRoleSchema.length} custom roles to audit`, this.config.auditContext); + this.customRolePath = join(this.folderPath, this.fileName); + log.debug(`Custom roles file path: ${this.customRolePath}`, this.config.auditContext); + + // Load custom roles schema with loading spinner + await this.withLoadingSpinner('CUSTOM-ROLES: Loading custom roles schema...', async () => { + this.customRoleSchema = existsSync(this.customRolePath) + ? values(JSON.parse(readFileSync(this.customRolePath, 'utf8')) as CustomRole[]) + : []; + }); + + log.debug(`Found ${this.customRoleSchema.length} custom roles to audit`, this.config.auditContext); - for (let index = 0; index < this.customRoleSchema?.length; index++) { + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating custom roles...'); + } + + for (let index = 0; index < this.customRoleSchema?.length; index++) { const customRole = this.customRoleSchema[index]; log.debug(`Processing custom role: ${customRole.name} (${customRole.uid})`, this.config.auditContext); @@ -126,6 +135,11 @@ export default class CustomRoles { }), this.config.auditContext ); + + // Track progress for each custom role processed + if (this.progressManager) { + this.progressManager.tick(true, `custom-role: ${customRole.name}`, null); + } } log.debug(`Found ${this.missingFieldsInCustomRoles.length} custom roles with issues`, this.config.auditContext); @@ -141,7 +155,12 @@ export default class CustomRoles { } log.debug(`${this.moduleName} audit completed. Found ${this.missingFieldsInCustomRoles.length} custom roles with issues`, this.config.auditContext); - return this.missingFieldsInCustomRoles; + this.completeProgress(true); + return this.missingFieldsInCustomRoles; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Custom roles audit failed'); + throw error; + } } async fixCustomRoleSchema() { diff --git a/packages/contentstack-audit/src/modules/entries.ts b/packages/contentstack-audit/src/modules/entries.ts index 8b19434ea0..cb8e248c5c 100644 --- a/packages/contentstack-audit/src/modules/entries.ts +++ b/packages/contentstack-audit/src/modules/entries.ts @@ -9,9 +9,9 @@ import { existsSync, readFileSync, writeFileSync } from 'fs'; import auditConfig from '../config'; import ContentType from './content-types'; import { $t, auditFixMsg, auditMsg, commonMsg } from '../messages'; +import BaseClass from './base-class'; import { Locale, - ConfigType, EntryStruct, EntryFieldType, ModularBlockType, @@ -40,11 +40,10 @@ import GlobalField from './global-fields'; import { MarketplaceAppsInstallationData } from '../types/extension'; import { keys } from 'lodash'; -export default class Entries { +export default class Entries extends BaseClass { protected fix: boolean; public fileName: string; public locales!: Locale[]; - public config: ConfigType; public folderPath: string; public currentUid!: string; public currentTitle!: string; @@ -63,8 +62,7 @@ export default class Entries { public moduleName: keyof typeof auditConfig.moduleConfig = 'entries'; constructor({ fix, config, moduleName, ctSchema, gfSchema }: ModuleConstructorParam & CtConstructorParam) { - - this.config = config; + super({ config }); log.debug(`Initializing Entries module`, this.config.auditContext); this.fix = fix ?? false; this.ctSchema = ctSchema; @@ -96,27 +94,38 @@ export default class Entries { /** * The `run` function checks if a folder path exists, sets the schema based on the module name, * iterates over the schema and looks for references, and returns a list of missing references. + * @param totalCount - Total number of entries to process (for progress tracking) * @returns the `missingRefs` object. */ - async run() { - - if (!existsSync(this.folderPath)) { - log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return {}; - } + async run(totalCount?: number) { + try { + if (!existsSync(this.folderPath)) { + log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return {}; + } - log.debug(`Found ${this.ctSchema?.length || 0} content types to audit`, this.config.auditContext); - log.debug(`Found ${this.locales?.length || 0} locales to process`, this.config.auditContext); + log.debug(`Found ${this.ctSchema?.length || 0} content types to audit`, this.config.auditContext); + log.debug(`Found ${this.locales?.length || 0} locales to process`, this.config.auditContext); - log.debug('Preparing entry metadata', this.config.auditContext); - await this.prepareEntryMetaData(); - log.debug(`Entry metadata prepared: ${this.entryMetaData.length} entries found`, this.config.auditContext); + // Prepare entry metadata with loading spinner + await this.withLoadingSpinner('ENTRIES: Preparing entry metadata...', async () => { + await this.prepareEntryMetaData(); + }); + log.debug(`Entry metadata prepared: ${this.entryMetaData.length} entries found`, this.config.auditContext); + + // Fix prerequisite data with loading spinner + await this.withLoadingSpinner('ENTRIES: Fixing prerequisite data...', async () => { + await this.fixPrerequisiteData(); + }); + log.debug('Prerequisite data fix completed', this.config.auditContext); - log.debug('Fixing prerequisite data', this.config.auditContext); - await this.fixPrerequisiteData(); - log.debug('Prerequisite data fix completed', this.config.auditContext); + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating entries...'); + } log.debug(`Processing ${this.locales.length} locales and ${this.ctSchema.length} content types`, this.config.auditContext); for (const { code } of this.locales) { @@ -282,6 +291,11 @@ export default class Entries { }); log.debug(message, this.config.auditContext); log.info(message, this.config.auditContext); + + // Track progress for each entry processed + if (this.progressManager) { + this.progressManager.tick(true, `entry: ${title || uid}`, null); + } } if (this.fix) { @@ -305,15 +319,20 @@ export default class Entries { missingMultipleFields: this.missingMultipleField, }; - log.debug(`Entries audit completed. Found issues:`, this.config.auditContext); - log.debug(`- Missing references: ${Object.keys(this.missingRefs).length}`, this.config.auditContext); - log.debug(`- Missing select fields: ${Object.keys(this.missingSelectFeild).length}`, this.config.auditContext); - log.debug(`- Missing mandatory fields: ${Object.keys(this.missingMandatoryFields).length}`, this.config.auditContext); - log.debug(`- Missing title fields: ${Object.keys(this.missingTitleFields).length}`, this.config.auditContext); - log.debug(`- Missing environment/locale: ${Object.keys(this.missingEnvLocale).length}`, this.config.auditContext); - log.debug(`- Missing multiple fields: ${Object.keys(this.missingMultipleField).length}`, this.config.auditContext); - - return result; + log.debug(`Entries audit completed. Found issues:`, this.config.auditContext); + log.debug(`- Missing references: ${Object.keys(this.missingRefs).length}`, this.config.auditContext); + log.debug(`- Missing select fields: ${Object.keys(this.missingSelectFeild).length}`, this.config.auditContext); + log.debug(`- Missing mandatory fields: ${Object.keys(this.missingMandatoryFields).length}`, this.config.auditContext); + log.debug(`- Missing title fields: ${Object.keys(this.missingTitleFields).length}`, this.config.auditContext); + log.debug(`- Missing environment/locale: ${Object.keys(this.missingEnvLocale).length}`, this.config.auditContext); + log.debug(`- Missing multiple fields: ${Object.keys(this.missingMultipleField).length}`, this.config.auditContext); + + this.completeProgress(true); + return result; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Entries audit failed'); + throw error; + } } /** diff --git a/packages/contentstack-audit/src/modules/extensions.ts b/packages/contentstack-audit/src/modules/extensions.ts index 072036c358..3d25e8581a 100644 --- a/packages/contentstack-audit/src/modules/extensions.ts +++ b/packages/contentstack-audit/src/modules/extensions.ts @@ -1,17 +1,17 @@ import path, { join, resolve } from 'path'; import { existsSync, readFileSync, writeFileSync } from 'fs'; import { cloneDeep } from 'lodash'; -import { ConfigType, ContentTypeStruct, CtConstructorParam, ModuleConstructorParam, Extension } from '../types'; +import { ContentTypeStruct, CtConstructorParam, ModuleConstructorParam, Extension } from '../types'; import { sanitizePath, cliux, log } from '@contentstack/cli-utilities'; import auditConfig from '../config'; import { $t, auditMsg, commonMsg } from '../messages'; import { values } from 'lodash'; +import BaseClass from './base-class'; -export default class Extensions { +export default class Extensions extends BaseClass { protected fix: boolean; public fileName: any; - public config: ConfigType; public folderPath: string; public extensionsSchema: Extension[]; public ctSchema: ContentTypeStruct[]; @@ -27,7 +27,7 @@ export default class Extensions { moduleName, ctSchema, }: ModuleConstructorParam & Pick) { - this.config = config; + super({ config }); this.fix = fix ?? false; this.ctSchema = ctSchema; this.extensionsSchema = []; @@ -70,33 +70,42 @@ export default class Extensions { return 'extensions'; } - async run() { - log.debug(`Starting ${this.moduleName} audit process`, this.config.auditContext); - log.debug(`Extensions folder path: ${this.folderPath}`, this.config.auditContext); - log.debug(`Fix mode: ${this.fix}`, this.config.auditContext); - - if (!existsSync(this.folderPath)) { - log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return {}; - } + async run(totalCount?: number) { + try { + log.debug(`Starting ${this.moduleName} audit process`, this.config.auditContext); + log.debug(`Extensions folder path: ${this.folderPath}`, this.config.auditContext); + log.debug(`Fix mode: ${this.fix}`, this.config.auditContext); + + if (!existsSync(this.folderPath)) { + log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return {}; + } + + this.extensionsPath = path.join(this.folderPath, this.fileName); + log.debug(`Extensions file path: ${this.extensionsPath}`, this.config.auditContext); - this.extensionsPath = path.join(this.folderPath, this.fileName); - log.debug(`Extensions file path: ${this.extensionsPath}`, this.config.auditContext); + // Load extensions schema with loading spinner + await this.withLoadingSpinner('EXTENSIONS: Loading extensions schema...', async () => { + this.extensionsSchema = existsSync(this.extensionsPath) + ? values(JSON.parse(readFileSync(this.extensionsPath, 'utf-8')) as Extension[]) + : []; + }); + log.debug(`Loaded ${this.extensionsSchema.length} extensions`, this.config.auditContext); - log.debug(`Loading extensions schema from file`, this.config.auditContext); - this.extensionsSchema = existsSync(this.extensionsPath) - ? values(JSON.parse(readFileSync(this.extensionsPath, 'utf-8')) as Extension[]) - : []; - log.debug(`Loaded ${this.extensionsSchema.length} extensions`, this.config.auditContext); + log.debug(`Building content type UID set from ${this.ctSchema.length} content types`, this.config.auditContext); + this.ctSchema.map((ct) => this.ctUidSet.add(ct.uid)); + log.debug(`Content type UID set contains: ${Array.from(this.ctUidSet).join(', ')}`, this.config.auditContext); - log.debug(`Building content type UID set from ${this.ctSchema.length} content types`, this.config.auditContext); - this.ctSchema.map((ct) => this.ctUidSet.add(ct.uid)); - log.debug(`Content type UID set contains: ${Array.from(this.ctUidSet).join(', ')}`, this.config.auditContext); + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating extensions...'); + } - log.debug(`Processing ${this.extensionsSchema.length} extensions`, this.config.auditContext); - for (const ext of this.extensionsSchema) { + log.debug(`Processing ${this.extensionsSchema.length} extensions`, this.config.auditContext); + for (const ext of this.extensionsSchema) { const { title, uid, scope } = ext; log.debug(`Processing extension: ${title} (${uid})`, this.config.auditContext); log.debug(`Extension scope content types: ${scope?.content_types?.join(', ') || 'none'}`, this.config.auditContext); @@ -124,24 +133,35 @@ export default class Extensions { }), this.config.auditContext ); + + // Track progress for each extension processed + if (this.progressManager) { + this.progressManager.tick(true, `extension: ${title}`, null); + } } - log.debug(`Extensions audit completed. Found ${this.missingCtInExtensions.length} extensions with missing content types`, this.config.auditContext); - log.debug(`Total missing content types: ${this.missingCts.size}`, this.config.auditContext); + log.debug(`Extensions audit completed. Found ${this.missingCtInExtensions.length} extensions with missing content types`, this.config.auditContext); + log.debug(`Total missing content types: ${this.missingCts.size}`, this.config.auditContext); - if (this.fix && this.missingCtInExtensions.length) { - log.debug(`Fix mode enabled, fixing ${this.missingCtInExtensions.length} extensions`, this.config.auditContext); - await this.fixExtensionsScope(cloneDeep(this.missingCtInExtensions)); - this.missingCtInExtensions.forEach((ext) => { - log.debug(`Marking extension ${ext.title} as fixed`, this.config.auditContext); - ext.fixStatus = 'Fixed'; - }); - log.debug(`Extensions fix completed`, this.config.auditContext); + if (this.fix && this.missingCtInExtensions.length) { + log.debug(`Fix mode enabled, fixing ${this.missingCtInExtensions.length} extensions`, this.config.auditContext); + await this.fixExtensionsScope(cloneDeep(this.missingCtInExtensions)); + this.missingCtInExtensions.forEach((ext) => { + log.debug(`Marking extension ${ext.title} as fixed`, this.config.auditContext); + ext.fixStatus = 'Fixed'; + }); + log.debug(`Extensions fix completed`, this.config.auditContext); + this.completeProgress(true); + return this.missingCtInExtensions; + } + + log.debug(`Extensions audit completed without fixes`, this.config.auditContext); + this.completeProgress(true); return this.missingCtInExtensions; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Extensions audit failed'); + throw error; } - - log.debug(`Extensions audit completed without fixes`, this.config.auditContext); - return this.missingCtInExtensions; } async fixExtensionsScope(missingCtInExtensions: Extension[]) { diff --git a/packages/contentstack-audit/src/modules/field_rules.ts b/packages/contentstack-audit/src/modules/field_rules.ts index 07e52de0dc..f56e4f1e8c 100644 --- a/packages/contentstack-audit/src/modules/field_rules.ts +++ b/packages/contentstack-audit/src/modules/field_rules.ts @@ -5,7 +5,6 @@ import { existsSync, readFileSync, writeFileSync } from 'fs'; import { FsUtility, Locale, sanitizePath, cliux, log } from '@contentstack/cli-utilities'; import { - ConfigType, ModularBlockType, ContentTypeStruct, GroupFieldDataType, @@ -20,13 +19,13 @@ import auditConfig from '../config'; import { $t, auditFixMsg, auditMsg, commonMsg } from '../messages'; import { MarketplaceAppsInstallationData } from '../types/extension'; import { values } from 'lodash'; +import BaseClass from './base-class'; -/* The `ContentType` class is responsible for scanning content types, looking for references, and +/* The `FieldRule` class is responsible for scanning field rules, looking for references, and generating a report in JSON and CSV formats. */ -export default class FieldRule { +export default class FieldRule extends BaseClass { protected fix: boolean; public fileName: string; - public config: ConfigType; public folderPath: string; public currentUid!: string; public currentTitle!: string; @@ -46,7 +45,7 @@ export default class FieldRule { public entryMetaData: Record[] = []; public action: string[] = ['show', 'hide']; constructor({ fix, config, moduleName, ctSchema, gfSchema }: ModuleConstructorParam & CtConstructorParam) { - this.config = config; + super({ config }); this.fix = fix ?? false; this.ctSchema = ctSchema; this.gfSchema = gfSchema; @@ -90,31 +89,42 @@ export default class FieldRule { * iterates over the schema and looks for references, and returns a list of missing references. * @returns the `missingRefs` object. */ - async run() { - log.debug(`Starting ${this.moduleName} field rules audit process`, this.config.auditContext); - log.debug(`Field rules folder path: ${this.folderPath}`, this.config.auditContext); - log.debug(`Fix mode: ${this.fix}`, this.config.auditContext); - - if (!existsSync(this.folderPath)) { - log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return {}; - } + async run(totalCount?: number) { + try { + log.debug(`Starting ${this.moduleName} field rules audit process`, this.config.auditContext); + log.debug(`Field rules folder path: ${this.folderPath}`, this.config.auditContext); + log.debug(`Fix mode: ${this.fix}`, this.config.auditContext); + + if (!existsSync(this.folderPath)) { + log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return {}; + } - this.schema = this.moduleName === 'content-types' ? this.ctSchema : this.gfSchema; - log.debug(`Using ${this.moduleName} schema with ${this.schema?.length || 0} items`, this.config.auditContext); - - log.debug(`Loading prerequisite data`, this.config.auditContext); - await this.prerequisiteData(); - log.debug(`Loaded ${this.extensions.length} extensions`, this.config.auditContext); - - log.debug(`Preparing entry metadata`, this.config.auditContext); - await this.prepareEntryMetaData(); - log.debug(`Prepared metadata for ${this.entryMetaData.length} entries`, this.config.auditContext); - - log.debug(`Processing ${this.schema?.length || 0} schemas for field rules`, this.config.auditContext); - for (const schema of this.schema ?? []) { + this.schema = this.moduleName === 'content-types' ? this.ctSchema : this.gfSchema; + log.debug(`Using ${this.moduleName} schema with ${this.schema?.length || 0} items`, this.config.auditContext); + + // Load prerequisite data with loading spinner + await this.withLoadingSpinner('FIELD-RULES: Loading prerequisite data...', async () => { + await this.prerequisiteData(); + }); + log.debug(`Loaded ${this.extensions.length} extensions`, this.config.auditContext); + + // Prepare entry metadata with loading spinner + await this.withLoadingSpinner('FIELD-RULES: Preparing entry metadata...', async () => { + await this.prepareEntryMetaData(); + }); + log.debug(`Prepared metadata for ${this.entryMetaData.length} entries`, this.config.auditContext); + + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating field rules...'); + } + + log.debug(`Processing ${this.schema?.length || 0} schemas for field rules`, this.config.auditContext); + for (const schema of this.schema ?? []) { this.currentUid = schema.uid; this.currentTitle = schema.title; this.missingRefs[this.currentUid] = []; @@ -144,21 +154,27 @@ export default class FieldRule { ); } - if (this.fix) { - log.debug(`Fix mode enabled, writing fix content`, this.config.auditContext); - await this.writeFixContent(); - } + if (this.fix) { + log.debug(`Fix mode enabled, writing fix content`, this.config.auditContext); + await this.writeFixContent(); + } - log.debug(`Cleaning up empty missing references`, this.config.auditContext); - for (let propName in this.missingRefs) { - if (!this.missingRefs[propName].length) { - log.debug(`Removing empty missing references for: ${propName}`, this.config.auditContext); - delete this.missingRefs[propName]; + log.debug(`Cleaning up empty missing references`, this.config.auditContext); + for (let propName in this.missingRefs) { + if (!this.missingRefs[propName].length) { + log.debug(`Removing empty missing references for: ${propName}`, this.config.auditContext); + delete this.missingRefs[propName]; + } } - } - log.debug(`Field rules audit completed. Found ${Object.keys(this.missingRefs).length} schemas with issues`, this.config.auditContext); - return this.missingRefs; + log.debug(`Field rules audit completed. Found ${Object.keys(this.missingRefs).length} schemas with issues`, this.config.auditContext); + + this.completeProgress(true); + return this.missingRefs; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Field rules audit failed'); + throw error; + } } validateFieldRules(schema: Record): void { diff --git a/packages/contentstack-audit/src/modules/global-fields.ts b/packages/contentstack-audit/src/modules/global-fields.ts index 75ec2c24cf..71d3e5b553 100644 --- a/packages/contentstack-audit/src/modules/global-fields.ts +++ b/packages/contentstack-audit/src/modules/global-fields.ts @@ -6,15 +6,17 @@ export default class GlobalField extends ContentType { /** * The above function is an asynchronous function that runs a validation and returns any missing * references. + * @param returnFixSchema - If true, returns the fixed schema instead of missing references + * @param totalCount - Total number of items to process (for progress tracking) * @returns the value of the variable `missingRefs`. */ - async run(returnFixSchema = false) { + async run(returnFixSchema = false, totalCount?: number) { log.debug(`Starting GlobalField audit process`, this.config.auditContext); log.debug(`Return fix schema: ${returnFixSchema}`, this.config.auditContext); // NOTE add any validation if required log.debug(`Calling parent ContentType.run() method`, this.config.auditContext); - const missingRefs = await super.run(returnFixSchema); + const missingRefs = await super.run(returnFixSchema, totalCount); log.debug(`Parent method completed, found ${Object.keys(missingRefs || {}).length} missing references`, this.config.auditContext); log.debug(`GlobalField audit completed`, this.config.auditContext); diff --git a/packages/contentstack-audit/src/modules/index.ts b/packages/contentstack-audit/src/modules/index.ts index c76eca4a72..b9665abad7 100644 --- a/packages/contentstack-audit/src/modules/index.ts +++ b/packages/contentstack-audit/src/modules/index.ts @@ -7,5 +7,6 @@ import CustomRoles from './custom-roles'; import Assets from './assets'; import FieldRule from './field_rules'; import ModuleDataReader from './modulesData'; +import BaseClass from './base-class'; -export { Entries, GlobalField, ContentType, Workflows, Extensions, Assets, CustomRoles, FieldRule, ModuleDataReader }; +export { Entries, GlobalField, ContentType, Workflows, Extensions, Assets, CustomRoles, FieldRule, ModuleDataReader, BaseClass }; diff --git a/packages/contentstack-audit/src/modules/workflows.ts b/packages/contentstack-audit/src/modules/workflows.ts index f38783699a..69ebda0af7 100644 --- a/packages/contentstack-audit/src/modules/workflows.ts +++ b/packages/contentstack-audit/src/modules/workflows.ts @@ -1,17 +1,17 @@ import { join, resolve } from 'path'; import { existsSync, readFileSync, writeFileSync } from 'fs'; import { cloneDeep } from 'lodash'; -import { ConfigType, ContentTypeStruct, CtConstructorParam, ModuleConstructorParam, Workflow } from '../types'; +import { ContentTypeStruct, CtConstructorParam, ModuleConstructorParam, Workflow } from '../types'; import { cliux, sanitizePath, log } from '@contentstack/cli-utilities'; import auditConfig from '../config'; import { $t, auditMsg, commonMsg } from '../messages'; import { values } from 'lodash'; +import BaseClass from './base-class'; -export default class Workflows { +export default class Workflows extends BaseClass { protected fix: boolean; public fileName: any; - public config: ConfigType; public folderPath: string; public workflowSchema: Workflow[]; public ctSchema: ContentTypeStruct[]; @@ -28,7 +28,7 @@ export default class Workflows { moduleName, ctSchema, }: ModuleConstructorParam & Pick) { - this.config = config; + super({ config }); this.fix = fix ?? false; this.ctSchema = ctSchema; this.workflowSchema = []; @@ -78,30 +78,38 @@ export default class Workflows { * From the ctSchema add all the content type UID into ctUidSet to check whether the content-type is present or not * @returns Array of object containing the workflow name, uid and content_types that are missing */ - async run() { - - if (!existsSync(this.folderPath)) { - log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); - log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); - cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); - return {}; - } + async run(totalCount?: number) { + try { + if (!existsSync(this.folderPath)) { + log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); + log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); + cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); + return {}; + } - this.workflowPath = join(this.folderPath, this.fileName); - log.debug(`Workflows file path: ${this.workflowPath}`, this.config.auditContext); + this.workflowPath = join(this.folderPath, this.fileName); + log.debug(`Workflows file path: ${this.workflowPath}`, this.config.auditContext); - log.debug(`Loading workflows schema from file`, this.config.auditContext); - this.workflowSchema = existsSync(this.workflowPath) - ? values(JSON.parse(readFileSync(this.workflowPath, 'utf8')) as Workflow[]) - : []; - log.debug(`Loaded ${this.workflowSchema.length} workflows`, this.config.auditContext); + // Load workflows schema with loading spinner + await this.withLoadingSpinner('WORKFLOWS: Loading workflows schema...', async () => { + this.workflowSchema = existsSync(this.workflowPath) + ? values(JSON.parse(readFileSync(this.workflowPath, 'utf8')) as Workflow[]) + : []; + }); + log.debug(`Loaded ${this.workflowSchema.length} workflows`, this.config.auditContext); + + log.debug(`Building content type UID set from ${this.ctSchema.length} content types`, this.config.auditContext); + this.ctSchema.forEach((ct) => this.ctUidSet.add(ct.uid)); + log.debug(`Content type UID set contains: ${Array.from(this.ctUidSet).join(', ')}`, this.config.auditContext); - log.debug(`Building content type UID set from ${this.ctSchema.length} content types`, this.config.auditContext); - this.ctSchema.forEach((ct) => this.ctUidSet.add(ct.uid)); - log.debug(`Content type UID set contains: ${Array.from(this.ctUidSet).join(', ')}`, this.config.auditContext); + // Create progress manager if we have a total count + if (totalCount && totalCount > 0) { + const progress = this.createSimpleProgress(this.moduleName, totalCount); + progress.updateStatus('Validating workflows...'); + } - log.debug(`Processing ${this.workflowSchema.length} workflows`, this.config.auditContext); - for (const workflow of this.workflowSchema) { + log.debug(`Processing ${this.workflowSchema.length} workflows`, this.config.auditContext); + for (const workflow of this.workflowSchema) { const { name, uid } = workflow; log.debug(`Processing workflow: ${name} (${uid})`, this.config.auditContext); log.debug(`Workflow content types: ${workflow.content_types?.join(', ') || 'none'}`, this.config.auditContext); @@ -152,23 +160,29 @@ export default class Workflows { ); } - log.debug(`Workflows audit completed. Found ${this.missingCtInWorkflows.length} workflows with issues`, this.config.auditContext); - log.debug(`Total missing content types: ${this.missingCts.size}`, this.config.auditContext); - log.debug(`Branch fix needed: ${this.isBranchFixDone}`, this.config.auditContext); + log.debug(`Workflows audit completed. Found ${this.missingCtInWorkflows.length} workflows with issues`, this.config.auditContext); + log.debug(`Total missing content types: ${this.missingCts.size}`, this.config.auditContext); + log.debug(`Branch fix needed: ${this.isBranchFixDone}`, this.config.auditContext); - if (this.fix && (this.missingCtInWorkflows.length || this.isBranchFixDone)) { - log.debug(`Fix mode enabled, fixing ${this.missingCtInWorkflows.length} workflows`, this.config.auditContext); - await this.fixWorkflowSchema(); - this.missingCtInWorkflows.forEach((wf) => { - log.debug(`Marking workflow ${wf.name} as fixed`, this.config.auditContext); - wf.fixStatus = 'Fixed'; - }); - log.debug(`Workflows fix completed`, this.config.auditContext); + if (this.fix && (this.missingCtInWorkflows.length || this.isBranchFixDone)) { + log.debug(`Fix mode enabled, fixing ${this.missingCtInWorkflows.length} workflows`, this.config.auditContext); + await this.fixWorkflowSchema(); + this.missingCtInWorkflows.forEach((wf) => { + log.debug(`Marking workflow ${wf.name} as fixed`, this.config.auditContext); + wf.fixStatus = 'Fixed'; + }); + log.debug(`Workflows fix completed`, this.config.auditContext); + this.completeProgress(true); + return this.missingCtInWorkflows; + } + + log.debug(`Workflows audit completed without fixes`, this.config.auditContext); + this.completeProgress(true); return this.missingCtInWorkflows; + } catch (error: any) { + this.completeProgress(false, error?.message || 'Workflows audit failed'); + throw error; } - - log.debug(`Workflows audit completed without fixes`, this.config.auditContext); - return this.missingCtInWorkflows; } async fixWorkflowSchema() { diff --git a/packages/contentstack-audit/test/unit/audit-base-command.test.ts b/packages/contentstack-audit/test/unit/audit-base-command.test.ts index 255d47f02b..bffaf1bfd2 100644 --- a/packages/contentstack-audit/test/unit/audit-base-command.test.ts +++ b/packages/contentstack-audit/test/unit/audit-base-command.test.ts @@ -5,7 +5,7 @@ import { resolve } from 'path'; import { fancy } from 'fancy-test'; import { PassThrough } from 'stream'; import { expect } from 'chai'; -import { ux, cliux } from '@contentstack/cli-utilities'; +import { ux, cliux, CLIProgressManager, configHandler, clearProgressModuleSetting } from '@contentstack/cli-utilities'; import { AuditBaseCommand } from '../../src/audit-base-command'; import { @@ -370,4 +370,246 @@ describe('AuditBaseCommand class', () => { }); }); }); + + describe('Progress Manager Integration', () => { + let configHandlerStub: sinon.SinonStub; + let initializeGlobalSummarySpy: sinon.SinonSpy; + let printGlobalSummarySpy: sinon.SinonSpy; + + beforeEach(() => { + // Mock CLIProgressManager static methods + initializeGlobalSummarySpy = sinon.spy(CLIProgressManager, 'initializeGlobalSummary'); + printGlobalSummarySpy = sinon.spy(CLIProgressManager, 'printGlobalSummary'); + + // Mock configHandler + configHandlerStub = sinon.stub(configHandler, 'get').returns({}); + sinon.stub(configHandler, 'set'); + }); + + afterEach(() => { + try { + if (initializeGlobalSummarySpy && typeof initializeGlobalSummarySpy.restore === 'function') { + initializeGlobalSummarySpy.restore(); + } + } catch (e) { + // Ignore + } + + try { + if (printGlobalSummarySpy && typeof printGlobalSummarySpy.restore === 'function') { + printGlobalSummarySpy.restore(); + } + } catch (e) { + // Ignore + } + + try { + if (configHandlerStub && typeof configHandlerStub.restore === 'function') { + configHandlerStub.restore(); + } + } catch (e) { + // Ignore + } + + try { + CLIProgressManager.clearGlobalSummary(); + clearProgressModuleSetting(); + } catch (e) { + // Ignore + } + + try { + sinon.restore(); + } catch (e) { + // Ignore + } + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .stub(winston.transports, 'File', () => fsTransport) + .stub(winston, 'createLogger', createMockWinstonLogger) + .stub(fs, 'mkdirSync', () => {}) + .stub(fs, 'writeFileSync', () => {}) + .stub(cliux, 'table', () => {}) + .stub(ux.action, 'stop', () => {}) + .stub(ux.action, 'start', () => {}) + .stub(cliux, 'inquire', () => resolve(__dirname, 'mock', 'contents')) + .stub(AuditBaseCommand.prototype, 'scanAndFix', () => ({ + missingCtRefs: {}, + missingGfRefs: {}, + missingEntryRefs: {}, + missingCtRefsInExtensions: {}, + missingCtRefsInWorkflow: {}, + missingSelectFeild: {}, + missingMandatoryFields: {}, + missingTitleFields: {}, + missingRefInCustomRoles: {}, + missingEnvLocalesInAssets: {}, + missingEnvLocalesInEntries: {}, + missingFieldRules: {}, + missingMultipleFields: {}, + })) + .stub(AuditBaseCommand.prototype, 'showOutputOnScreenWorkflowsAndExtension', () => {}) + .stub(fs, 'createWriteStream', () => new PassThrough()) + .it('should initialize global summary when start is called', async () => { + await AuditCMD.run(['--data-dir', resolve(__dirname, 'mock', 'contents')]); + + expect(initializeGlobalSummarySpy.calledOnce).to.be.true; + expect(initializeGlobalSummarySpy.calledWith('AUDIT', '', 'Auditing content...')).to.be.true; + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .stub(winston.transports, 'File', () => fsTransport) + .stub(winston, 'createLogger', createMockWinstonLogger) + .stub(fs, 'mkdirSync', () => {}) + .stub(fs, 'writeFileSync', () => {}) + .stub(cliux, 'table', () => {}) + .stub(ux.action, 'stop', () => {}) + .stub(ux.action, 'start', () => {}) + .stub(cliux, 'inquire', () => resolve(__dirname, 'mock', 'contents')) + .stub(AuditBaseCommand.prototype, 'scanAndFix', () => ({ + missingCtRefs: {}, + missingGfRefs: {}, + missingEntryRefs: {}, + missingCtRefsInExtensions: {}, + missingCtRefsInWorkflow: {}, + missingSelectFeild: {}, + missingMandatoryFields: {}, + missingTitleFields: {}, + missingRefInCustomRoles: {}, + missingEnvLocalesInAssets: {}, + missingEnvLocalesInEntries: {}, + missingFieldRules: {}, + missingMultipleFields: {}, + })) + .stub(AuditBaseCommand.prototype, 'showOutputOnScreenWorkflowsAndExtension', () => {}) + .stub(fs, 'createWriteStream', () => new PassThrough()) + .it('should print global summary at the end of start method', async () => { + await AuditCMD.run(['--data-dir', resolve(__dirname, 'mock', 'contents')]); + + expect(printGlobalSummarySpy.calledOnce).to.be.true; + }); + + }); + + describe('Spinner Message Conditional Display', () => { + let printSpy: sinon.SinonSpy | undefined; + let configHandlerGetStub: sinon.SinonStub | undefined; + + beforeEach(() => { + // Clear any existing global summary + CLIProgressManager.clearGlobalSummary(); + + // Import print function from the correct path + const logModule = require('../../src/util/log'); + printSpy = sinon.spy(logModule, 'print'); + configHandlerGetStub = sinon.stub(configHandler, 'get'); + }); + + afterEach(() => { + try { + // Clear global summary first + CLIProgressManager.clearGlobalSummary(); + } catch (e) { + // Ignore errors + } + + try { + if (printSpy) { + printSpy.restore(); + } + } catch (e) { + // Ignore errors + } + + try { + if (configHandlerGetStub) { + configHandlerGetStub.restore(); + } + } catch (e) { + // Ignore errors + } + + try { + // Restore all sinon stubs + sinon.restore(); + } catch (e) { + // Ignore errors + } + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .stub(winston.transports, 'File', () => fsTransport) + .stub(winston, 'createLogger', createMockWinstonLogger) + .stub(fs, 'mkdirSync', () => {}) + .stub(fs, 'writeFileSync', () => {}) + .stub(cliux, 'table', () => {}) + .stub(ux.action, 'stop', () => {}) + .stub(ux.action, 'start', () => {}) + .stub(cliux, 'inquire', () => resolve(__dirname, 'mock', 'contents')) + .stub(Entries.prototype, 'run', () => ({ entry_1: {} })) + .stub(ContentType.prototype, 'run', () => ({ ct_1: {} })) + .stub(GlobalField.prototype, 'run', () => ({ gf_1: {} })) + .stub(Extensions.prototype, 'run', () => ({ ext_1: {} })) + .stub(Workflows.prototype, 'run', () => ({ wf_1: {} })) + .stub(CustomRoles.prototype, 'run', () => ({ cr_1: {} })) + .stub(Assets.prototype, 'run', () => ({ assets_1: {} })) + .stub(FieldRule.prototype, 'run', () => ({ fr_1: {} })) + .stub(AuditBaseCommand.prototype, 'showOutputOnScreenWorkflowsAndExtension', () => {}) + .stub(fs, 'createWriteStream', () => new PassThrough()) + .it('should hide spinner messages when showConsoleLogs is false', async function() { + this.timeout(5000); // Set timeout to 5 seconds + if (!configHandlerGetStub || !printSpy) { + throw new Error('Spies not initialized'); + } + configHandlerGetStub.returns({ showConsoleLogs: false }); + await AuditCMD.run(['--data-dir', resolve(__dirname, 'mock', 'contents')]); + + // Print should not be called for spinner messages when showConsoleLogs is false + const printCalls = printSpy.getCalls(); + const spinnerCalls = printCalls.filter((call: any) => + call.args[0]?.[0]?.message?.includes('scanning') + ); + expect(spinnerCalls.length).to.equal(0); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .stub(winston.transports, 'File', () => fsTransport) + .stub(winston, 'createLogger', createMockWinstonLogger) + .stub(fs, 'mkdirSync', () => {}) + .stub(fs, 'writeFileSync', () => {}) + .stub(cliux, 'table', () => {}) + .stub(ux.action, 'stop', () => {}) + .stub(ux.action, 'start', () => {}) + .stub(cliux, 'inquire', () => resolve(__dirname, 'mock', 'contents')) + .stub(Entries.prototype, 'run', () => ({ entry_1: {} })) + .stub(ContentType.prototype, 'run', () => ({ ct_1: {} })) + .stub(GlobalField.prototype, 'run', () => ({ gf_1: {} })) + .stub(Extensions.prototype, 'run', () => ({ ext_1: {} })) + .stub(Workflows.prototype, 'run', () => ({ wf_1: {} })) + .stub(CustomRoles.prototype, 'run', () => ({ cr_1: {} })) + .stub(Assets.prototype, 'run', () => ({ assets_1: {} })) + .stub(FieldRule.prototype, 'run', () => ({ fr_1: {} })) + .stub(AuditBaseCommand.prototype, 'showOutputOnScreenWorkflowsAndExtension', () => {}) + .stub(fs, 'createWriteStream', () => new PassThrough()) + .it('should show spinner messages when showConsoleLogs is true', async function() { + this.timeout(5000); // Set timeout to 5 seconds + if (!configHandlerGetStub || !printSpy) { + throw new Error('Spies not initialized'); + } + configHandlerGetStub.returns({ showConsoleLogs: true }); + await AuditCMD.run(['--data-dir', resolve(__dirname, 'mock', 'contents')]); + + // Print should be called for spinner messages when showConsoleLogs is true + const printCalls = printSpy.getCalls(); + const spinnerCalls = printCalls.filter((call: any) => + call.args[0]?.[0]?.message?.includes('scanning') + ); + expect(spinnerCalls.length).to.be.greaterThan(0); + }); + }); }); diff --git a/packages/contentstack-audit/test/unit/modules/base-class.test.ts b/packages/contentstack-audit/test/unit/modules/base-class.test.ts new file mode 100644 index 0000000000..dc0b5563c8 --- /dev/null +++ b/packages/contentstack-audit/test/unit/modules/base-class.test.ts @@ -0,0 +1,328 @@ +import { expect } from 'chai'; +import { fancy } from 'fancy-test'; +import sinon from 'sinon'; +import { resolve } from 'node:path'; +import { CLIProgressManager, configHandler } from '@contentstack/cli-utilities'; + +import config from '../../../src/config'; +import BaseClass from '../../../src/modules/base-class'; +import { ModuleConstructorParam } from '../../../src/types'; +import { mockLogger } from '../mock-logger'; + +// Mock ora and cli-progress to prevent real spinners/progress bars +const mockOraInstance = { + start: sinon.stub().returnsThis(), + stop: sinon.stub().returnsThis(), + succeed: sinon.stub().returnsThis(), + fail: sinon.stub().returnsThis(), + text: '', + color: 'cyan', + isSpinning: false, +}; + +const mockOra = sinon.stub().returns(mockOraInstance); +(mockOra as any).promise = sinon.stub().returns(mockOraInstance); + +const mockProgressBar = { + start: sinon.stub(), + stop: sinon.stub(), + increment: sinon.stub(), + update: sinon.stub(), +}; + +const mockMultiBar = { + create: sinon.stub().returns(mockProgressBar), + stop: sinon.stub(), +}; + +// Mock require to intercept ora and cli-progress +const Module = require('node:module'); +const originalRequire = Module.prototype.require; +Module.prototype.require = function (id: string) { + if (id === 'ora') { + return mockOra; + } + if (id === 'cli-progress') { + return { + SingleBar: function() { return mockProgressBar; }, + MultiBar: function() { return mockMultiBar; }, + Presets: { shades_classic: {} } + }; + } + return originalRequire.apply(this, arguments); +}; + +describe('BaseClass Progress Manager', () => { + class TestBaseClass extends BaseClass { + public testCreateSimpleProgress(moduleName: string, total?: number) { + return this.createSimpleProgress(moduleName, total); + } + + public testCreateNestedProgress(moduleName: string) { + return this.createNestedProgress(moduleName); + } + + public async testWithLoadingSpinner(message: string, action: () => Promise): Promise { + return this.withLoadingSpinner(message, action); + } + + public testCompleteProgress(success: boolean = true, error?: string) { + return this.completeProgress(success, error); + } + } + + let testInstance: TestBaseClass; + let constructorParam: ModuleConstructorParam; + + beforeEach(() => { + constructorParam = { + config: Object.assign(config, { + basePath: resolve(__dirname, '..', 'mock', 'contents'), + flags: {}, + auditContext: { + command: 'cm:stacks:audit', + module: 'test', + email: '', + sessionId: '', + authenticationMethod: '', + } + }), + }; + + // Mock the logger + sinon.stub(require('@contentstack/cli-utilities'), 'log').value(mockLogger); + + // Reset config + configHandler.set('log', {}); + + testInstance = new TestBaseClass(constructorParam); + }); + + afterEach(() => { + try { + // Complete any running progress managers + if (testInstance && testInstance['progressManager']) { + testInstance['progressManager'].stop(); + testInstance['progressManager'] = null; + } + } catch (e) { + // Ignore + } + + try { + // Stop mock ora instance + if (mockOraInstance.stop) { + mockOraInstance.stop(); + } + + // Quick console cleanup + if (process.stdout && process.stdout.clearLine) { + process.stdout.clearLine(0); + process.stdout.cursorTo(0); + process.stdout.write('\x1b[?25h\x1b[0m'); + } + } catch (e) { + // Ignore + } + + try { + CLIProgressManager.clearGlobalSummary(); + } catch (e) { + // Ignore + } + + sinon.restore(); + Module.prototype.require = originalRequire; + }); + + describe('createSimpleProgress', () => { + fancy.it('should create simple progress manager with total count', () => { + const progress = testInstance.testCreateSimpleProgress('test-module', 100); + expect(progress).to.be.instanceOf(CLIProgressManager); + expect(testInstance['progressManager']).to.equal(progress); + expect(testInstance['currentModuleName']).to.equal('test-module'); + + // Clean up + try { + progress.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + + fancy.it('should create simple progress manager without total count', () => { + const progress = testInstance.testCreateSimpleProgress('test-module'); + expect(progress).to.be.instanceOf(CLIProgressManager); + expect(testInstance['progressManager']).to.equal(progress); + + // Clean up + try { + progress.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + + fancy.it('should respect showConsoleLogs setting from config', () => { + configHandler.set('log.showConsoleLogs', true); + const progress1 = testInstance.testCreateSimpleProgress('test-module', 100); + expect(progress1).to.be.instanceOf(CLIProgressManager); + + configHandler.set('log.showConsoleLogs', false); + const progress2 = testInstance.testCreateSimpleProgress('test-module-2', 100); + expect(progress2).to.be.instanceOf(CLIProgressManager); + + // Clean up + try { + progress1.stop(); + progress2.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + + fancy.it('should default showConsoleLogs to false when not set', () => { + configHandler.set('log', {}); + const progress = testInstance.testCreateSimpleProgress('test-module', 100); + expect(progress).to.be.instanceOf(CLIProgressManager); + + // Clean up + try { + progress.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + }); + + describe('createNestedProgress', () => { + fancy.it('should create nested progress manager', () => { + const progress = testInstance.testCreateNestedProgress('test-module'); + expect(progress).to.be.instanceOf(CLIProgressManager); + expect(testInstance['progressManager']).to.equal(progress); + expect(testInstance['currentModuleName']).to.equal('test-module'); + + // Clean up + try { + progress.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + + fancy.it('should respect showConsoleLogs setting from config', () => { + configHandler.set('log.showConsoleLogs', false); + const progress = testInstance.testCreateNestedProgress('test-module'); + expect(progress).to.be.instanceOf(CLIProgressManager); + + // Clean up + try { + progress.stop(); + testInstance['progressManager'] = null; + } catch (e) { + // Ignore + } + }); + }); + + describe('withLoadingSpinner', () => { + fancy.it('should execute action directly when showConsoleLogs is true', async () => { + configHandler.set('log.showConsoleLogs', true); + const action = sinon.stub().resolves('result'); + + const result = await testInstance.testWithLoadingSpinner('Loading...', action); + + expect(result).to.equal('result'); + expect(action.calledOnce).to.be.true; + expect(mockOra.called).to.be.false; + }); + + fancy.it('should use spinner when showConsoleLogs is false', async () => { + configHandler.set('log.showConsoleLogs', false); + const action = sinon.stub().resolves('result'); + + const result = await testInstance.testWithLoadingSpinner('Loading...', action); + + expect(result).to.equal('result'); + expect(action.calledOnce).to.be.true; + }); + + fancy.it('should handle errors in action', async () => { + configHandler.set('log.showConsoleLogs', true); + const error = new Error('Test error'); + const action = sinon.stub().rejects(error); + + try { + await testInstance.testWithLoadingSpinner('Loading...', action); + expect.fail('Should have thrown error'); + } catch (e: any) { + expect(e).to.equal(error); + } + }); + }); + + describe('completeProgress', () => { + fancy.it('should complete progress successfully', () => { + const progress = testInstance.testCreateSimpleProgress('test-module', 100); + const completeSpy = sinon.spy(progress, 'complete'); + + testInstance.testCompleteProgress(true); + + expect(completeSpy.calledOnce).to.be.true; + expect(completeSpy.calledWith(true)).to.be.true; + expect(testInstance['progressManager']).to.be.null; + + // Ensure progress is stopped + try { + progress.stop(); + } catch (e) { + // Ignore + } + }); + + fancy.it('should complete progress with error', () => { + const progress = testInstance.testCreateSimpleProgress('test-module', 100); + const completeSpy = sinon.spy(progress, 'complete'); + + testInstance.testCompleteProgress(false, 'Test error'); + + expect(completeSpy.calledOnce).to.be.true; + expect(completeSpy.calledWith(false, 'Test error')).to.be.true; + expect(testInstance['progressManager']).to.be.null; + + // Ensure progress is stopped + try { + progress.stop(); + } catch (e) { + // Ignore + } + }); + + fancy.it('should handle completion when no progress manager exists', () => { + expect(() => testInstance.testCompleteProgress(true)).to.not.throw(); + }); + }); + + // Global after hook to ensure all spinners are cleaned up + after(() => { + try { + CLIProgressManager.clearGlobalSummary(); + if (mockOraInstance.stop) { + mockOraInstance.stop(); + } + if (process.stdout && process.stdout.clearLine) { + process.stdout.clearLine(0); + process.stdout.cursorTo(0); + process.stdout.write('\x1b[?25h\x1b[0m'); + } + } catch (e) { + // Ignore cleanup errors + } + }); +}); + diff --git a/packages/contentstack-import-setup/package.json b/packages/contentstack-import-setup/package.json index fa80aab692..d2b13452c8 100644 --- a/packages/contentstack-import-setup/package.json +++ b/packages/contentstack-import-setup/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-import-setup", "description": "Contentstack CLI plugin to setup the mappers and configurations for the import command", - "version": "1.7.0", + "version": "2.0.0-beta.1", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { diff --git a/packages/contentstack-import-setup/src/commands/cm/stacks/import-setup.ts b/packages/contentstack-import-setup/src/commands/cm/stacks/import-setup.ts index 00b6b3e471..af1e0dd937 100644 --- a/packages/contentstack-import-setup/src/commands/cm/stacks/import-setup.ts +++ b/packages/contentstack-import-setup/src/commands/cm/stacks/import-setup.ts @@ -9,6 +9,8 @@ import { ContentstackClient, pathValidator, formatError, + CLIProgressManager, + configHandler, } from '@contentstack/cli-utilities'; import { ImportConfig } from '../../../types'; @@ -71,9 +73,27 @@ export default class ImportSetupCommand extends Command { importSetupConfig.host = this.cmaHost; importSetupConfig.region = this.region; importSetupConfig.developerHubBaseUrl = this.developerHubUrl; + + // Prepare the context object + const context = this.createImportContext(importSetupConfig.apiKey, importSetupConfig.authenticationMethod); + importSetupConfig.context = { ...context }; + + if (flags.branch) { + CLIProgressManager.initializeGlobalSummary( + `IMPORT-SETUP-${flags.branch}`, + flags.branch, + `Setting up import for "${flags.branch}" branch...`, + ); + } else { + CLIProgressManager.initializeGlobalSummary(`IMPORT-SETUP`, flags.branch, 'Setting up import...'); + } + const managementAPIClient: ContentstackClient = await managementSDKClient(importSetupConfig); const importSetup = new ImportSetup(importSetupConfig, managementAPIClient); await importSetup.start(); + + CLIProgressManager.printGlobalSummary(); + log( importSetupConfig, `Backup folder and mapper files have been successfully created for the stack using the API key ${importSetupConfig.apiKey}.`, @@ -85,6 +105,7 @@ export default class ImportSetupCommand extends Command { 'success', ); } catch (error) { + CLIProgressManager.printGlobalSummary(); log( { data: '' } as ImportConfig, `Failed to create the backup folder and mapper files: ${formatError(error)}`, @@ -92,4 +113,16 @@ export default class ImportSetupCommand extends Command { ); } } + + private createImportContext(apiKey: string, authenticationMethod?: string): any { + return { + command: this.context?.info?.command || 'cm:stacks:import-setup', + module: '', + userId: configHandler.get('userUid') || '', + sessionId: this.context?.sessionId, + apiKey: apiKey || '', + orgId: configHandler.get('oauthOrgUid') || '', + authenticationMethod: authenticationMethod || 'Basic Auth', + }; + } } diff --git a/packages/contentstack-import-setup/src/import/modules/assets.ts b/packages/contentstack-import-setup/src/import/modules/assets.ts index e27081a1ae..70e3220304 100644 --- a/packages/contentstack-import-setup/src/import/modules/assets.ts +++ b/packages/contentstack-import-setup/src/import/modules/assets.ts @@ -5,6 +5,7 @@ import { AssetRecord, ImportConfig, ModuleClassParams } from '../../types'; import { isEmpty, orderBy, values } from 'lodash'; import { formatError, FsUtility, sanitizePath } from '@contentstack/cli-utilities'; import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; export default class AssetImportSetup extends BaseImportSetup { private assetsFilePath: string; @@ -20,6 +21,7 @@ export default class AssetImportSetup extends BaseImportSetup { constructor({ config, stackAPIClient, dependencies }: ModuleClassParams) { super({ config, stackAPIClient, dependencies }); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.ASSETS]; this.assetsFolderPath = join(sanitizePath(this.config.contentDir), 'assets'); this.assetsFilePath = join(sanitizePath(this.config.contentDir), 'assets', 'assets.json'); this.assetsConfig = config.modules.assets; @@ -39,10 +41,51 @@ export default class AssetImportSetup extends BaseImportSetup { */ async start() { try { + const progress = this.createNestedProgress(this.currentModuleName); + + // Analyze to get chunk count + const indexerCount = await this.withLoadingSpinner('ASSETS: Analyzing import data...', async () => { + const basePath = this.assetsFolderPath; + const fs = new FsUtility({ basePath, indexFileName: 'assets.json' }); + const indexer = fs.indexFileContent; + return values(indexer).length; + }); + + if (indexerCount === 0) { + log(this.config, 'No assets found in the content folder.', 'info'); + return; + } + + // Add processes - use a large number for total assets since we don't know exact count + // The progress will update as we process each asset + progress.addProcess(PROCESS_NAMES.ASSETS_MAPPER_GENERATION, 1); + progress.addProcess(PROCESS_NAMES.ASSETS_FETCH_AND_MAP, indexerCount * 10); // Estimate: ~10 assets per chunk + + // Create mapper directory + progress + .startProcess(PROCESS_NAMES.ASSETS_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.ASSETS_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.ASSETS_MAPPER_GENERATION, + ); fsUtil.makeDirectory(this.mapperDirPath); + this.progressManager?.tick(true, 'mapper directory created', null, PROCESS_NAMES.ASSETS_MAPPER_GENERATION); + progress.completeProcess(PROCESS_NAMES.ASSETS_MAPPER_GENERATION, true); + + // Fetch and map assets + progress + .startProcess(PROCESS_NAMES.ASSETS_FETCH_AND_MAP) + .updateStatus( + PROCESS_STATUS.ASSETS_FETCH_AND_MAP.FETCHING, + PROCESS_NAMES.ASSETS_FETCH_AND_MAP, + ); await this.fetchAndMapAssets(); + progress.completeProcess(PROCESS_NAMES.ASSETS_FETCH_AND_MAP, true); + + this.completeProgress(true); log(this.config, `The required setup files for the asset have been generated successfully.`, 'success'); } catch (error) { + this.completeProgress(false, error?.message || 'Assets mapper generation failed'); log(this.config, `Error occurred while generating the asset mapper: ${formatError(error)}.`, 'error'); } } @@ -67,17 +110,21 @@ export default class AssetImportSetup extends BaseImportSetup { if (items.length === 1) { this.assetUidMapper[uid] = items[0].uid; this.assetUrlMapper[url] = items[0].url; + this.progressManager?.tick(true, `asset: ${title}`, null, PROCESS_NAMES.ASSETS_FETCH_AND_MAP); log(this.config, `Mapped asset successfully: '${title}'`, 'info'); } else if (items.length > 1) { this.duplicateAssets[uid] = items.map((asset: any) => { return { uid: asset.uid, title: asset.title, url: asset.url }; }); + this.progressManager?.tick(true, `asset: ${title} (duplicate)`, null, PROCESS_NAMES.ASSETS_FETCH_AND_MAP); log(this.config, `Multiple assets found with the title '${title}'.`, 'info'); } else { + this.progressManager?.tick(false, `asset: ${title}`, 'Not found in stack', PROCESS_NAMES.ASSETS_FETCH_AND_MAP); log(this.config, `Asset with title '${title}' not found in the stack!`, 'info'); } }; const onReject = ({ error, apiData: { title } = undefined }: any) => { + this.progressManager?.tick(false, `asset: ${title}`, formatError(error), PROCESS_NAMES.ASSETS_FETCH_AND_MAP); log(this.config, `Failed to map the asset '${title}'.`, 'error'); log(this.config, formatError(error), 'error'); }; diff --git a/packages/contentstack-import-setup/src/import/modules/base-setup.ts b/packages/contentstack-import-setup/src/import/modules/base-setup.ts index 5385a0ea49..69bea1cde1 100644 --- a/packages/contentstack-import-setup/src/import/modules/base-setup.ts +++ b/packages/contentstack-import-setup/src/import/modules/base-setup.ts @@ -1,11 +1,14 @@ import { log, fsUtil } from '../../utils'; import { ApiOptions, CustomPromiseHandler, EnvType, ImportConfig, ModuleClassParams } from '../../types'; import { chunk, entries, isEmpty, isEqual, last } from 'lodash'; +import { CLIProgressManager, configHandler } from '@contentstack/cli-utilities'; export default class BaseImportSetup { public config: ImportConfig; public stackAPIClient: ModuleClassParams['stackAPIClient']; public dependencies: ModuleClassParams['dependencies']; + protected progressManager: CLIProgressManager | null = null; + protected currentModuleName: string = ''; constructor({ config, stackAPIClient, dependencies }: ModuleClassParams) { this.config = config; @@ -205,4 +208,48 @@ export default class BaseImportSetup { return Promise.resolve(); } } + + /** + * Create simple progress manager + */ + protected createSimpleProgress(moduleName: string, total?: number): CLIProgressManager { + this.currentModuleName = moduleName; + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + this.progressManager = CLIProgressManager.createSimple(moduleName, total, showConsoleLogs); + return this.progressManager; + } + + /** + * Create nested progress manager + */ + protected createNestedProgress(moduleName: string): CLIProgressManager { + this.currentModuleName = moduleName; + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + this.progressManager = CLIProgressManager.createNested(moduleName, showConsoleLogs); + return this.progressManager; + } + + /** + * Complete progress manager + */ + protected completeProgress(success: boolean = true, error?: string): void { + this.progressManager?.complete(success, error); + this.progressManager = null; + } + + /** + * Show a loading spinner before initializing progress + */ + protected async withLoadingSpinner(message: string, action: () => Promise): Promise { + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; + + if (showConsoleLogs) { + // If console logs are enabled, don't show spinner, just execute the action + return await action(); + } + return await CLIProgressManager.withLoadingSpinner(message, action); + } } diff --git a/packages/contentstack-import-setup/src/import/modules/content-types.ts b/packages/contentstack-import-setup/src/import/modules/content-types.ts index 476615481c..c06036a33c 100644 --- a/packages/contentstack-import-setup/src/import/modules/content-types.ts +++ b/packages/contentstack-import-setup/src/import/modules/content-types.ts @@ -4,17 +4,52 @@ import { join } from 'path'; import { ImportConfig, ModuleClassParams } from '../../types'; import ExtensionImportSetup from './extensions'; import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; export default class ContentTypesImportSetup extends BaseImportSetup { constructor(options: ModuleClassParams) { super(options); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.CONTENT_TYPES]; } async start() { try { - await this.setupDependencies(); + const progress = this.createNestedProgress(this.currentModuleName); + + // Add processes + progress.addProcess(PROCESS_NAMES.CONTENT_TYPES_DEPENDENCY_SETUP, this.dependencies?.length || 0); + progress.addProcess(PROCESS_NAMES.CONTENT_TYPES_MAPPER_GENERATION, 1); + + // Setup dependencies + if (this.dependencies && this.dependencies.length > 0) { + progress + .startProcess(PROCESS_NAMES.CONTENT_TYPES_DEPENDENCY_SETUP) + .updateStatus( + PROCESS_STATUS.CONTENT_TYPES_DEPENDENCY_SETUP.SETTING_UP, + PROCESS_NAMES.CONTENT_TYPES_DEPENDENCY_SETUP, + ); + + await this.setupDependencies(); + + this.progressManager?.tick(true, 'dependencies setup', null, PROCESS_NAMES.CONTENT_TYPES_DEPENDENCY_SETUP); + progress.completeProcess(PROCESS_NAMES.CONTENT_TYPES_DEPENDENCY_SETUP, true); + } + + // Mapper generation + progress + .startProcess(PROCESS_NAMES.CONTENT_TYPES_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.CONTENT_TYPES_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.CONTENT_TYPES_MAPPER_GENERATION, + ); + + this.progressManager?.tick(true, 'mapper generation', null, PROCESS_NAMES.CONTENT_TYPES_MAPPER_GENERATION); + progress.completeProcess(PROCESS_NAMES.CONTENT_TYPES_MAPPER_GENERATION, true); + + this.completeProgress(true); log(this.config, `The required setup files for content types have been generated successfully.`, 'success'); } catch (error) { + this.completeProgress(false, error?.message || 'Content types mapper generation failed'); log(this.config, `Error occurred while generating the content type mapper: ${error.message}.`, 'error'); } } diff --git a/packages/contentstack-import-setup/src/import/modules/entries.ts b/packages/contentstack-import-setup/src/import/modules/entries.ts index 93cde3ace8..412a5e6a76 100644 --- a/packages/contentstack-import-setup/src/import/modules/entries.ts +++ b/packages/contentstack-import-setup/src/import/modules/entries.ts @@ -1,17 +1,27 @@ import { log } from '../../utils'; import { ModuleClassParams } from '../../types'; import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; export default class EntriesImportSetup extends BaseImportSetup { constructor(options: ModuleClassParams) { super(options); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.ENTRIES]; } async start() { try { + const progress = this.createSimpleProgress(this.currentModuleName, 1); + + progress.updateStatus('Setting up dependencies...'); await this.setupDependencies(); + + this.progressManager?.tick(true, 'entries mapper setup', null); + this.completeProgress(true); + log(this.config, `The required setup files for entries have been generated successfully.`, 'success'); } catch (error) { + this.completeProgress(false, error?.message || 'Entries mapper generation failed'); log(this.config, `Error occurred while generating the entry mapper: ${error.message}.`, 'error'); } } diff --git a/packages/contentstack-import-setup/src/import/modules/extensions.ts b/packages/contentstack-import-setup/src/import/modules/extensions.ts index f6794bd70e..31e108d7f4 100644 --- a/packages/contentstack-import-setup/src/import/modules/extensions.ts +++ b/packages/contentstack-import-setup/src/import/modules/extensions.ts @@ -4,21 +4,19 @@ import { join } from 'path'; import { ImportConfig, ModuleClassParams } from '../../types'; import { isEmpty } from 'lodash'; import { formatError, sanitizePath } from '@contentstack/cli-utilities'; +import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; -export default class ExtensionImportSetup { - private config: ImportConfig; +export default class ExtensionImportSetup extends BaseImportSetup { private extensionsFilePath: string; private extensionMapper: Record; - private stackAPIClient: ModuleClassParams['stackAPIClient']; - private dependencies: ModuleClassParams['dependencies']; private extensionsConfig: ImportConfig['modules']['extensions']; - private mapperDirPath: string; private extensionsFolderPath: string; private extUidMapperPath: string; constructor({ config, stackAPIClient }: ModuleClassParams) { - this.config = config; - this.stackAPIClient = stackAPIClient; + super({ config, stackAPIClient, dependencies: [] }); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.EXTENSIONS]; this.extensionsFilePath = join(sanitizePath(this.config.contentDir), 'extensions', 'extensions.json'); this.extensionsConfig = config.modules.extensions; this.extUidMapperPath = join(sanitizePath(this.config.backupDir), 'mapper', 'extensions', 'uid-mapping.json'); @@ -32,28 +30,53 @@ export default class ExtensionImportSetup { */ async start() { try { - const extensions: any = await fsUtil.readFile(this.extensionsFilePath); + const extensions: any = await this.withLoadingSpinner('EXTENSIONS: Analyzing import data...', async () => { + return await fsUtil.readFile(this.extensionsFilePath); + }); + if (!isEmpty(extensions)) { - // 2. Create mapper directory + const extensionsArray = Object.values(extensions) as any[]; + const progress = this.createNestedProgress(this.currentModuleName); + + // Add process + progress.addProcess(PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION, extensionsArray.length); + + // Create mapper directory const mapperFilePath = join(sanitizePath(this.config.backupDir), 'mapper', 'extensions'); - fsUtil.makeDirectory(mapperFilePath); // Use fsUtil + fsUtil.makeDirectory(mapperFilePath); + + progress + .startProcess(PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.EXTENSIONS_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION, + ); - for (const extension of Object.values(extensions) as any) { - const targetExtension: any = await this.getExtension(extension); - if (!targetExtension) { - log(this.config, `Extension with the title '${extension.title}' not found in the stack.`, 'info'); - continue; + for (const extension of extensionsArray) { + try { + const targetExtension: any = await this.getExtension(extension); + if (!targetExtension) { + log(this.config, `Extension with the title '${extension.title}' not found in the stack.`, 'info'); + this.progressManager?.tick(false, `extension: ${extension.title}`, 'Not found in stack', PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION); + continue; + } + this.extensionMapper[extension.uid] = targetExtension.uid; + this.progressManager?.tick(true, `extension: ${extension.title}`, null, PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION); + } catch (error) { + this.progressManager?.tick(false, `extension: ${extension.title}`, formatError(error), PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION); } - this.extensionMapper[extension.uid] = targetExtension.uid; } await fsUtil.writeFile(this.extUidMapperPath, this.extensionMapper); + progress.completeProcess(PROCESS_NAMES.EXTENSIONS_MAPPER_GENERATION, true); + this.completeProgress(true); log(this.config, `The required setup files for extensions have been generated successfully.`, 'success'); } else { log(this.config, 'No extensions found in the content folder.', 'info'); } } catch (error) { + this.completeProgress(false, error?.message || 'Extensions mapper generation failed'); log(this.config, `Error occurred while generating the extension mapper: ${formatError(error)}.`, 'error'); } } diff --git a/packages/contentstack-import-setup/src/import/modules/global-fields.ts b/packages/contentstack-import-setup/src/import/modules/global-fields.ts index 6c3e9cc68e..1ade770000 100644 --- a/packages/contentstack-import-setup/src/import/modules/global-fields.ts +++ b/packages/contentstack-import-setup/src/import/modules/global-fields.ts @@ -3,17 +3,52 @@ import { log, fsUtil } from '../../utils'; import { join } from 'path'; import { ImportConfig, ModuleClassParams } from '../../types'; import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; export default class GlobalFieldsImportSetup extends BaseImportSetup { constructor(options: ModuleClassParams) { super(options); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.GLOBAL_FIELDS]; } async start() { try { - await this.setupDependencies(); + const progress = this.createNestedProgress(this.currentModuleName); + + // Add processes + progress.addProcess(PROCESS_NAMES.GLOBAL_FIELDS_DEPENDENCY_SETUP, this.dependencies?.length || 0); + progress.addProcess(PROCESS_NAMES.GLOBAL_FIELDS_MAPPER_GENERATION, 1); + + // Setup dependencies + if (this.dependencies && this.dependencies.length > 0) { + progress + .startProcess(PROCESS_NAMES.GLOBAL_FIELDS_DEPENDENCY_SETUP) + .updateStatus( + PROCESS_STATUS.GLOBAL_FIELDS_DEPENDENCY_SETUP.SETTING_UP, + PROCESS_NAMES.GLOBAL_FIELDS_DEPENDENCY_SETUP, + ); + + await this.setupDependencies(); + + this.progressManager?.tick(true, 'dependencies setup', null, PROCESS_NAMES.GLOBAL_FIELDS_DEPENDENCY_SETUP); + progress.completeProcess(PROCESS_NAMES.GLOBAL_FIELDS_DEPENDENCY_SETUP, true); + } + + // Mapper generation + progress + .startProcess(PROCESS_NAMES.GLOBAL_FIELDS_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.GLOBAL_FIELDS_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.GLOBAL_FIELDS_MAPPER_GENERATION, + ); + + this.progressManager?.tick(true, 'mapper generation', null, PROCESS_NAMES.GLOBAL_FIELDS_MAPPER_GENERATION); + progress.completeProcess(PROCESS_NAMES.GLOBAL_FIELDS_MAPPER_GENERATION, true); + + this.completeProgress(true); log(this.config, `The required setup files for global fields have been generated successfully.`, 'success'); } catch (error) { + this.completeProgress(false, error?.message || 'Global fields mapper generation failed'); log(this.config, `Error occurred while generating the global field mapper: ${error.message}.`, 'error'); } } diff --git a/packages/contentstack-import-setup/src/import/modules/marketplace-apps.ts b/packages/contentstack-import-setup/src/import/modules/marketplace-apps.ts index 4b379ddefa..7757a12acd 100644 --- a/packages/contentstack-import-setup/src/import/modules/marketplace-apps.ts +++ b/packages/contentstack-import-setup/src/import/modules/marketplace-apps.ts @@ -11,13 +11,12 @@ import { createDeveloperHubUrl, sanitizePath, } from '@contentstack/cli-utilities'; +import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; -export default class marketplaceAppImportSetup { - private config: ImportConfig; +export default class marketplaceAppImportSetup extends BaseImportSetup { private marketplaceAppsFilePath: string; private marketplaceAppMapper: any; - private stackAPIClient: ModuleClassParams['stackAPIClient']; - private dependencies: ModuleClassParams['dependencies']; private marketplaceAppsConfig: ImportConfig['modules']['marketplace-apps']; private mapperDirPath: string; private marketplaceAppsFolderPath: string; @@ -28,8 +27,8 @@ export default class marketplaceAppImportSetup { public appSdk: ContentstackMarketplaceClient; constructor({ config, stackAPIClient }: ModuleClassParams) { - this.config = config; - this.stackAPIClient = stackAPIClient; + super({ config, stackAPIClient, dependencies: [] }); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.MARKETPLACE_APPS]; this.marketplaceAppsFilePath = join( sanitizePath(this.config.contentDir), 'marketplace_apps', @@ -47,22 +46,57 @@ export default class marketplaceAppImportSetup { */ async start() { try { - const sourceMarketplaceApps: any = await fsUtil.readFile(this.marketplaceAppsFilePath); + const sourceMarketplaceApps: any = await this.withLoadingSpinner('MARKETPLACE APPS: Analyzing import data...', async () => { + return await fsUtil.readFile(this.marketplaceAppsFilePath); + }); + if (!isEmpty(sourceMarketplaceApps)) { - fsUtil.makeDirectory(this.marketplaceAppsUidMapperPath); // Use fsUtil + const appsArray = Array.isArray(sourceMarketplaceApps) ? sourceMarketplaceApps : Object.values(sourceMarketplaceApps); + const progress = this.createNestedProgress(this.currentModuleName); + + // Add processes + progress.addProcess(PROCESS_NAMES.MARKETPLACE_APPS_MAPPER_GENERATION, 1); + progress.addProcess(PROCESS_NAMES.MARKETPLACE_APPS_FETCH, appsArray.length); + + // Create mapper directory + progress + .startProcess(PROCESS_NAMES.MARKETPLACE_APPS_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.MARKETPLACE_APPS_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.MARKETPLACE_APPS_MAPPER_GENERATION, + ); + fsUtil.makeDirectory(this.marketplaceAppsUidMapperPath); + this.progressManager?.tick(true, 'mapper directory created', null, PROCESS_NAMES.MARKETPLACE_APPS_MAPPER_GENERATION); + progress.completeProcess(PROCESS_NAMES.MARKETPLACE_APPS_MAPPER_GENERATION, true); + + // Fetch marketplace apps + progress + .startProcess(PROCESS_NAMES.MARKETPLACE_APPS_FETCH) + .updateStatus( + PROCESS_STATUS.MARKETPLACE_APPS_FETCH.FETCHING, + PROCESS_NAMES.MARKETPLACE_APPS_FETCH, + ); + this.developerHubBaseUrl = this.config.developerHubBaseUrl || (await createDeveloperHubUrl(this.config.host)); // NOTE init marketplace app sdk const host = this.developerHubBaseUrl.split('://').pop(); this.appSdk = await marketplaceSDKClient({ host }); const targetMarketplaceApps: any = await this.getMarketplaceApps(); + + this.progressManager?.tick(true, 'marketplace apps fetched', null, PROCESS_NAMES.MARKETPLACE_APPS_FETCH); + this.createMapper(sourceMarketplaceApps, targetMarketplaceApps); await fsUtil.writeFile(join(this.marketplaceAppsUidMapperPath, 'uid-mapping.json'), this.marketplaceAppMapper); + + progress.completeProcess(PROCESS_NAMES.MARKETPLACE_APPS_FETCH, true); + this.completeProgress(true); log(this.config, `The required setup files for Marketplace apps have been generated successfully.`, 'success'); } else { log(this.config, 'No Marketplace apps found in the content folder.', 'info'); } } catch (error) { + this.completeProgress(false, error?.message || 'Marketplace apps mapper generation failed'); log(this.config, `Error occurred while generating the Marketplace app mapper: ${error.message}.`, 'error'); } } @@ -83,7 +117,9 @@ export default class marketplaceAppImportSetup { } createMapper(sourceMarketplaceApps: any, targetMarketplaceApps: any) { - sourceMarketplaceApps.forEach((sourceApp: any) => { + const appsArray = Array.isArray(sourceMarketplaceApps) ? sourceMarketplaceApps : Object.values(sourceMarketplaceApps); + + appsArray.forEach((sourceApp: any) => { // Find matching target item based on manifest.name // TBD: This logic is not foolproof, need to find a better way to match source and target apps // Reason: While importing apps, if an app exist in the target with the same name, it will be a conflict and will not be imported @@ -119,7 +155,9 @@ export default class marketplaceAppImportSetup { }); } }); + this.progressManager?.tick(true, `app: ${sourceAppName}`, null, PROCESS_NAMES.MARKETPLACE_APPS_FETCH); } else { + this.progressManager?.tick(false, `app: ${sourceAppName}`, 'Not found in target stack', PROCESS_NAMES.MARKETPLACE_APPS_FETCH); log(this.config, `No matching Marketplace app found in the target stack with name ${sourceAppName}`, 'info'); } }); diff --git a/packages/contentstack-import-setup/src/import/modules/taxonomies.ts b/packages/contentstack-import-setup/src/import/modules/taxonomies.ts index 38dcad4c9c..10e1f8cf56 100644 --- a/packages/contentstack-import-setup/src/import/modules/taxonomies.ts +++ b/packages/contentstack-import-setup/src/import/modules/taxonomies.ts @@ -5,13 +5,12 @@ import isEmpty from 'lodash/isEmpty'; import { log, fsUtil, fileHelper } from '../../utils'; import { ImportConfig, ModuleClassParams, TaxonomyQueryParams } from '../../types'; import { sanitizePath } from '@contentstack/cli-utilities'; +import BaseImportSetup from './base-setup'; +import { MODULE_NAMES, MODULE_CONTEXTS, PROCESS_NAMES, PROCESS_STATUS } from '../../utils'; -export default class TaxonomiesImportSetup { - private config: ImportConfig; +export default class TaxonomiesImportSetup extends BaseImportSetup { private taxonomiesFilePath: string; private taxonomiesFolderPath: string; - private stackAPIClient: ModuleClassParams['stackAPIClient']; - private dependencies: ModuleClassParams['dependencies']; private taxonomiesConfig: ImportConfig['modules']['taxonomies']; private termsSuccessPath: string; private taxSuccessPath: string; @@ -24,8 +23,8 @@ export default class TaxonomiesImportSetup { public masterLocaleFilePath: string; constructor({ config, stackAPIClient }: ModuleClassParams) { - this.config = config; - this.stackAPIClient = stackAPIClient; + super({ config, stackAPIClient, dependencies: [] }); + this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.TAXONOMIES]; this.taxonomiesFolderPath = join(sanitizePath(this.config.contentDir), 'taxonomies'); this.taxonomiesFilePath = join(this.taxonomiesFolderPath, 'taxonomies.json'); this.taxonomiesConfig = config.modules.taxonomies; @@ -55,23 +54,53 @@ export default class TaxonomiesImportSetup { */ async start(): Promise { try { - const taxonomies: any = fsUtil.readFile(this.taxonomiesFilePath); + const taxonomies: any = await this.withLoadingSpinner('TAXONOMIES: Analyzing import data...', async () => { + return fsUtil.readFile(this.taxonomiesFilePath); + }); + if (!isEmpty(taxonomies)) { - // 1. Detect locale-based structure + const taxonomiesArray = Object.values(taxonomies) as any[]; + const progress = this.createNestedProgress(this.currentModuleName); + + // Detect locale-based structure this.isLocaleBasedStructure = this.detectLocaleBasedStructure(); - // 2. Create mapper directory + // Add processes + progress.addProcess(PROCESS_NAMES.TAXONOMIES_MAPPER_GENERATION, 1); + progress.addProcess(PROCESS_NAMES.TAXONOMIES_FETCH, taxonomiesArray.length); + progress.addProcess(PROCESS_NAMES.TAXONOMIES_TERMS_FETCH, taxonomiesArray.length); + + // Create mapper directory + progress + .startProcess(PROCESS_NAMES.TAXONOMIES_MAPPER_GENERATION) + .updateStatus( + PROCESS_STATUS.TAXONOMIES_MAPPER_GENERATION.GENERATING, + PROCESS_NAMES.TAXONOMIES_MAPPER_GENERATION, + ); fsUtil.makeDirectory(this.taxonomiesMapperDirPath); fsUtil.makeDirectory(this.termsMapperDirPath); + this.progressManager?.tick(true, 'mapper directories created', null, PROCESS_NAMES.TAXONOMIES_MAPPER_GENERATION); + progress.completeProcess(PROCESS_NAMES.TAXONOMIES_MAPPER_GENERATION, true); + + // Fetch taxonomies + progress + .startProcess(PROCESS_NAMES.TAXONOMIES_FETCH) + .updateStatus( + PROCESS_STATUS.TAXONOMIES_FETCH.FETCHING, + PROCESS_NAMES.TAXONOMIES_FETCH, + ); if (this.isLocaleBasedStructure) { log(this.config, 'Detected locale-based folder structure for taxonomies', 'info'); - await this.setupTaxonomiesByLocale(taxonomies); + await this.setupTaxonomiesByLocale(taxonomies, progress); } else { log(this.config, 'Using legacy folder structure for taxonomies', 'info'); - await this.setupTaxonomiesLegacy(taxonomies); + await this.setupTaxonomiesLegacy(taxonomies, progress); } + progress.completeProcess(PROCESS_NAMES.TAXONOMIES_FETCH, true); + progress.completeProcess(PROCESS_NAMES.TAXONOMIES_TERMS_FETCH, true); + if (this.taxonomiesMapper !== undefined && !isEmpty(this.taxonomiesMapper)) { fsUtil.writeFile(this.taxSuccessPath, this.taxonomiesMapper); } @@ -79,11 +108,13 @@ export default class TaxonomiesImportSetup { fsUtil.writeFile(this.termsSuccessPath, this.termsMapper); } + this.completeProgress(true); log(this.config, `The required setup files for taxonomies have been generated successfully.`, 'success'); } else { log(this.config, 'No taxonomies found in the content folder.', 'info'); } } catch (error) { + this.completeProgress(false, error?.message || 'Taxonomies mapper generation failed'); log(this.config, `Error generating taxonomies mapper: ${error.message}`, 'error'); } } @@ -91,22 +122,31 @@ export default class TaxonomiesImportSetup { /** * Setup taxonomies using legacy format (root-level taxonomy files) */ - async setupTaxonomiesLegacy(taxonomies: any): Promise { + async setupTaxonomiesLegacy(taxonomies: any, progress: any): Promise { for (const taxonomy of Object.values(taxonomies) as any) { - let targetTaxonomy: any = await this.getTaxonomies(taxonomy); - if (!targetTaxonomy) { - log(this.config, `Taxonomies with uid '${taxonomy.uid}' not found in the stack!`, 'info'); - continue; - } - targetTaxonomy = this.sanitizeTaxonomyAttribs(targetTaxonomy); - this.taxonomiesMapper[taxonomy.uid] = targetTaxonomy; - const terms = await this.getAllTermsOfTaxonomy(targetTaxonomy); - if (Array.isArray(terms) && terms.length > 0) { - log(this.config, `Terms found for taxonomy '${taxonomy.uid}', processing...`, 'info'); - const sanitizedTerms = this.sanitizeTermsAttribs(terms); - this.termsMapper[taxonomy.uid] = sanitizedTerms; - } else { - log(this.config, `No terms found for taxonomy '${taxonomy.uid}', skipping...`, 'info'); + try { + let targetTaxonomy: any = await this.getTaxonomies(taxonomy); + if (!targetTaxonomy) { + this.progressManager?.tick(false, `taxonomy: ${taxonomy.uid}`, 'Not found in stack', PROCESS_NAMES.TAXONOMIES_FETCH); + log(this.config, `Taxonomies with uid '${taxonomy.uid}' not found in the stack!`, 'info'); + continue; + } + targetTaxonomy = this.sanitizeTaxonomyAttribs(targetTaxonomy); + this.taxonomiesMapper[taxonomy.uid] = targetTaxonomy; + this.progressManager?.tick(true, `taxonomy: ${taxonomy.uid}`, null, PROCESS_NAMES.TAXONOMIES_FETCH); + + const terms = await this.getAllTermsOfTaxonomy(targetTaxonomy); + if (Array.isArray(terms) && terms.length > 0) { + log(this.config, `Terms found for taxonomy '${taxonomy.uid}', processing...`, 'info'); + const sanitizedTerms = this.sanitizeTermsAttribs(terms); + this.termsMapper[taxonomy.uid] = sanitizedTerms; + this.progressManager?.tick(true, `terms: ${taxonomy.uid} (${terms.length})`, null, PROCESS_NAMES.TAXONOMIES_TERMS_FETCH); + } else { + log(this.config, `No terms found for taxonomy '${taxonomy.uid}', skipping...`, 'info'); + this.progressManager?.tick(true, `terms: ${taxonomy.uid} (none)`, null, PROCESS_NAMES.TAXONOMIES_TERMS_FETCH); + } + } catch (error) { + this.progressManager?.tick(false, `taxonomy: ${taxonomy.uid}`, error?.message || 'Failed to fetch', PROCESS_NAMES.TAXONOMIES_FETCH); } } } @@ -115,40 +155,49 @@ export default class TaxonomiesImportSetup { * Setup taxonomies using locale-based format (taxonomies organized by locale) * For locale-based structure, we query the target stack for each taxonomy+locale combination */ - async setupTaxonomiesByLocale(taxonomies: any): Promise { + async setupTaxonomiesByLocale(taxonomies: any, progress: any): Promise { const locales = this.loadAvailableLocales(); for (const localeCode of Object.keys(locales)) { log(this.config, `Processing taxonomies for locale: ${localeCode}`, 'info'); for (const taxonomy of Object.values(taxonomies) as any) { - // Query target stack for this taxonomy in this locale - let targetTaxonomy: any = await this.getTaxonomies(taxonomy, localeCode); - if (!targetTaxonomy) { - log(this.config, `Taxonomy '${taxonomy.uid}' not found in target stack for locale: ${localeCode}`, 'info'); - continue; - } - - targetTaxonomy = this.sanitizeTaxonomyAttribs(targetTaxonomy); - - // Store with composite key: taxonomyUID_locale - // const mapperKey = `${taxonomy.uid}_${localeCode}`; // TODO: Unsure about this required or not - this.taxonomiesMapper[taxonomy.uid] = targetTaxonomy; - const terms = await this.getAllTermsOfTaxonomy(targetTaxonomy, localeCode); - if (Array.isArray(terms) && terms.length > 0) { - log( - this.config, - `Terms found for taxonomy '${taxonomy.uid} for locale: ${localeCode}', processing...`, - 'info', - ); - const sanitizedTerms = this.sanitizeTermsAttribs(terms); - this.termsMapper[taxonomy.uid] = sanitizedTerms; - } else { - log( - this.config, - `No terms found for taxonomy '${taxonomy.uid} for locale: ${localeCode}', skipping...`, - 'info', - ); + try { + // Query target stack for this taxonomy in this locale + let targetTaxonomy: any = await this.getTaxonomies(taxonomy, localeCode); + if (!targetTaxonomy) { + this.progressManager?.tick(false, `taxonomy: ${taxonomy.uid} (${localeCode})`, 'Not found in stack', PROCESS_NAMES.TAXONOMIES_FETCH); + log(this.config, `Taxonomy '${taxonomy.uid}' not found in target stack for locale: ${localeCode}`, 'info'); + continue; + } + + targetTaxonomy = this.sanitizeTaxonomyAttribs(targetTaxonomy); + + // Store with composite key: taxonomyUID_locale + // const mapperKey = `${taxonomy.uid}_${localeCode}`; // TODO: Unsure about this required or not + this.taxonomiesMapper[taxonomy.uid] = targetTaxonomy; + this.progressManager?.tick(true, `taxonomy: ${taxonomy.uid} (${localeCode})`, null, PROCESS_NAMES.TAXONOMIES_FETCH); + + const terms = await this.getAllTermsOfTaxonomy(targetTaxonomy, localeCode); + if (Array.isArray(terms) && terms.length > 0) { + log( + this.config, + `Terms found for taxonomy '${taxonomy.uid} for locale: ${localeCode}', processing...`, + 'info', + ); + const sanitizedTerms = this.sanitizeTermsAttribs(terms); + this.termsMapper[taxonomy.uid] = sanitizedTerms; + this.progressManager?.tick(true, `terms: ${taxonomy.uid} (${localeCode}, ${terms.length})`, null, PROCESS_NAMES.TAXONOMIES_TERMS_FETCH); + } else { + log( + this.config, + `No terms found for taxonomy '${taxonomy.uid} for locale: ${localeCode}', skipping...`, + 'info', + ); + this.progressManager?.tick(true, `terms: ${taxonomy.uid} (${localeCode}, none)`, null, PROCESS_NAMES.TAXONOMIES_TERMS_FETCH); + } + } catch (error) { + this.progressManager?.tick(false, `taxonomy: ${taxonomy.uid} (${localeCode})`, error?.message || 'Failed to fetch', PROCESS_NAMES.TAXONOMIES_FETCH); } } } diff --git a/packages/contentstack-import-setup/src/types/import-config.ts b/packages/contentstack-import-setup/src/types/import-config.ts index f401d5f41a..5c68eb773c 100644 --- a/packages/contentstack-import-setup/src/types/import-config.ts +++ b/packages/contentstack-import-setup/src/types/import-config.ts @@ -10,6 +10,18 @@ export interface ExternalConfig { password?: string; } +export interface Context { + command: string; + module: string; + userId: string | undefined; + email?: string | undefined; + sessionId: string | undefined; + clientId?: string | undefined; + apiKey: string; + orgId: string; + authenticationMethod?: string; +} + export default interface ImportConfig extends DefaultConfig, ExternalConfig { cliLogsPath?: string; contentDir: string; @@ -39,7 +51,6 @@ export default interface ImportConfig extends DefaultConfig, ExternalConfig { authtoken?: string; destinationStackName?: string; org_uid?: string; - contentVersion: number; stackName?: string; branchName: string; selectedModules: Modules[]; @@ -47,6 +58,8 @@ export default interface ImportConfig extends DefaultConfig, ExternalConfig { backupDir: string; createBackupDir?: string; region: any; + authenticationMethod?: string; + context?: Context; } type branch = { diff --git a/packages/contentstack-import-setup/src/utils/constants.ts b/packages/contentstack-import-setup/src/utils/constants.ts new file mode 100644 index 0000000000..014e7d2ae8 --- /dev/null +++ b/packages/contentstack-import-setup/src/utils/constants.ts @@ -0,0 +1,132 @@ +export const PROCESS_NAMES = { + // Entries module + ENTRIES_MAPPER_GENERATION: 'Mapper Generation', + + // Content Types module + CONTENT_TYPES_MAPPER_GENERATION: 'Mapper Generation', + CONTENT_TYPES_DEPENDENCY_SETUP: 'Dependency Setup', + + // Global Fields module + GLOBAL_FIELDS_MAPPER_GENERATION: 'Mapper Generation', + GLOBAL_FIELDS_DEPENDENCY_SETUP: 'Dependency Setup', + + // Extensions module + EXTENSIONS_MAPPER_GENERATION: 'Mapper Generation', + + // Assets module + ASSETS_MAPPER_GENERATION: 'Mapper Generation', + ASSETS_FETCH_AND_MAP: 'Fetch and Map', + + // Custom Roles module + CUSTOM_ROLES_MAPPER_GENERATION: 'Mapper Generation', + + // Marketplace Apps module + MARKETPLACE_APPS_MAPPER_GENERATION: 'Mapper Generation', + MARKETPLACE_APPS_FETCH: 'Fetch Apps', + + // Taxonomies module + TAXONOMIES_MAPPER_GENERATION: 'Mapper Generation', + TAXONOMIES_FETCH: 'Fetch Taxonomies', + TAXONOMIES_TERMS_FETCH: 'Fetch Terms', +} as const; + +export const MODULE_CONTEXTS = { + ENTRIES: 'entries', + CONTENT_TYPES: 'content-types', + GLOBAL_FIELDS: 'global-fields', + EXTENSIONS: 'extensions', + ASSETS: 'assets', + CUSTOM_ROLES: 'custom-roles', + MARKETPLACE_APPS: 'marketplace-apps', + TAXONOMIES: 'taxonomies', +} as const; + +// Display names for modules to avoid scattering user-facing strings +export const MODULE_NAMES = { + [MODULE_CONTEXTS.ENTRIES]: 'Entries', + [MODULE_CONTEXTS.CONTENT_TYPES]: 'Content Types', + [MODULE_CONTEXTS.GLOBAL_FIELDS]: 'Global Fields', + [MODULE_CONTEXTS.EXTENSIONS]: 'Extensions', + [MODULE_CONTEXTS.ASSETS]: 'Assets', + [MODULE_CONTEXTS.CUSTOM_ROLES]: 'Custom Roles', + [MODULE_CONTEXTS.MARKETPLACE_APPS]: 'Marketplace Apps', + [MODULE_CONTEXTS.TAXONOMIES]: 'Taxonomies', +} as const; + +export const PROCESS_STATUS: Record> = { + // Entries + ENTRIES_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + + // Content Types + CONTENT_TYPES_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + CONTENT_TYPES_DEPENDENCY_SETUP: { + SETTING_UP: 'Setting up dependencies...', + FAILED: 'Failed to setup dependencies.', + }, + + // Global Fields + GLOBAL_FIELDS_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + GLOBAL_FIELDS_DEPENDENCY_SETUP: { + SETTING_UP: 'Setting up dependencies...', + FAILED: 'Failed to setup dependencies.', + }, + + // Extensions + EXTENSIONS_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + + // Assets + ASSETS_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + ASSETS_FETCH_AND_MAP: { + FETCHING: 'Fetching and mapping assets...', + FAILED: 'Failed to fetch and map assets.', + }, + + // Custom Roles + CUSTOM_ROLES_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + + // Marketplace Apps + MARKETPLACE_APPS_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + MARKETPLACE_APPS_FETCH: { + FETCHING: 'Fetching marketplace apps...', + FAILED: 'Failed to fetch marketplace apps.', + }, + + // Taxonomies + TAXONOMIES_MAPPER_GENERATION: { + GENERATING: 'Generating mapper files...', + FAILED: 'Failed to generate mapper files.', + }, + TAXONOMIES_FETCH: { + FETCHING: 'Fetching taxonomies...', + FAILED: 'Failed to fetch taxonomies.', + }, + TAXONOMIES_TERMS_FETCH: { + FETCHING: 'Fetching terms...', + FAILED: 'Failed to fetch terms.', + }, +} as const; + +export type ImportSetupProcessName = (typeof PROCESS_NAMES)[keyof typeof PROCESS_NAMES]; +export type ImportSetupModuleContext = (typeof MODULE_CONTEXTS)[keyof typeof MODULE_CONTEXTS]; + diff --git a/packages/contentstack-import-setup/src/utils/import-config-handler.ts b/packages/contentstack-import-setup/src/utils/import-config-handler.ts index 9949274beb..e099d43ae8 100644 --- a/packages/contentstack-import-setup/src/utils/import-config-handler.ts +++ b/packages/contentstack-import-setup/src/utils/import-config-handler.ts @@ -32,12 +32,6 @@ const setupConfig = async (importCmdFlags: any): Promise => { config.contentDir = path.resolve(config.contentDir); //Note to support the old key config.data = config.contentDir; - if (fileExistsSync(path.join(config.contentDir, 'export-info.json'))) { - config.contentVersion = - ((await readFile(path.join(config.contentDir, 'export-info.json'))) || {}).contentVersion || 2; - } else { - config.contentVersion = 1; - } const managementTokenAlias = importCmdFlags['management-token-alias'] || importCmdFlags['alias']; diff --git a/packages/contentstack-import-setup/src/utils/index.ts b/packages/contentstack-import-setup/src/utils/index.ts index e349a5225d..de35f72021 100644 --- a/packages/contentstack-import-setup/src/utils/index.ts +++ b/packages/contentstack-import-setup/src/utils/index.ts @@ -7,3 +7,4 @@ export { log, unlinkFileLogger } from './logger'; export * from './log'; export * from './common-helper'; export { setupBranchConfig } from './setup-branch'; +export { MODULE_CONTEXTS, MODULE_NAMES, PROCESS_NAMES, PROCESS_STATUS } from './constants'; diff --git a/packages/contentstack-import-setup/src/utils/log.ts b/packages/contentstack-import-setup/src/utils/log.ts index aac6d63457..7bacf4aea8 100644 --- a/packages/contentstack-import-setup/src/utils/log.ts +++ b/packages/contentstack-import-setup/src/utils/log.ts @@ -8,7 +8,7 @@ import { ImportConfig } from '../types'; let logger: Logger; export function isImportConfig(config: ImportConfig | MessageType): config is ImportConfig { - return (config as ImportConfig).data !== undefined && (config as ImportConfig)?.contentVersion !== undefined; + return (config as ImportConfig).data !== undefined; } export function log(entry: LogEntry): void; diff --git a/packages/contentstack-import-setup/test/unit/backup-handler.test.ts b/packages/contentstack-import-setup/test/unit/backup-handler.test.ts index b371864af6..03e85b250f 100644 --- a/packages/contentstack-import-setup/test/unit/backup-handler.test.ts +++ b/packages/contentstack-import-setup/test/unit/backup-handler.test.ts @@ -25,7 +25,6 @@ describe('Backup Handler', () => { branchName: '', selectedModules: ['entries'], backupDir: '', - contentVersion: 1, region: 'us', }; diff --git a/packages/contentstack-import-setup/test/unit/common-helper.test.ts b/packages/contentstack-import-setup/test/unit/common-helper.test.ts index d287219145..bcc50358c6 100644 --- a/packages/contentstack-import-setup/test/unit/common-helper.test.ts +++ b/packages/contentstack-import-setup/test/unit/common-helper.test.ts @@ -23,7 +23,6 @@ describe('Common Helper Utilities', () => { branchName: '', selectedModules: ['entries'], backupDir: '', - contentVersion: 1, region: 'us', }; diff --git a/packages/contentstack-import-setup/test/unit/import-config-handler.test.ts b/packages/contentstack-import-setup/test/unit/import-config-handler.test.ts index 082717ef77..6d05f440db 100644 --- a/packages/contentstack-import-setup/test/unit/import-config-handler.test.ts +++ b/packages/contentstack-import-setup/test/unit/import-config-handler.test.ts @@ -123,16 +123,6 @@ describe('Import Config Handler', () => { expect(config.branchName).to.equal('development'); }); - it('should set default content version to 1', async () => { - const flags = { - 'data-dir': contentDir, - }; - - const config = await setupConfig(flags); - - expect(config.contentVersion).to.equal(1); - }); - it('should ask for modules when none are provided', async () => { const flags = { 'data-dir': contentDir, diff --git a/packages/contentstack-import-setup/test/unit/import-setup.test.ts b/packages/contentstack-import-setup/test/unit/import-setup.test.ts index ee0eca6b6d..a35c1fc490 100644 --- a/packages/contentstack-import-setup/test/unit/import-setup.test.ts +++ b/packages/contentstack-import-setup/test/unit/import-setup.test.ts @@ -29,7 +29,6 @@ describe('ImportSetup', () => { branchName: '', selectedModules: ['entries'], backupDir: '', - contentVersion: 1, region: 'us', modules: { extensions: { @@ -58,6 +57,11 @@ describe('ImportSetup', () => { fileName: 'environments', dependencies: [], }, + locales: { + dirName: 'locales', + fileName: 'locales', + dependencies: [], + }, entries: { dirName: 'entries', fileName: 'entries', diff --git a/packages/contentstack-import-setup/test/unit/login-handler.test.ts b/packages/contentstack-import-setup/test/unit/login-handler.test.ts index dfdb08450c..d5f193ae24 100644 --- a/packages/contentstack-import-setup/test/unit/login-handler.test.ts +++ b/packages/contentstack-import-setup/test/unit/login-handler.test.ts @@ -1,186 +1,555 @@ import { expect } from 'chai'; -import { stub, restore, SinonStub } from 'sinon'; -import proxyquire from 'proxyquire'; +import sinon from 'sinon'; import loginHandler from '../../src/utils/login-handler'; import * as logger from '../../src/utils/logger'; import { ImportConfig } from '../../src/types'; describe('Login Handler', () => { - let managementSDKClientStub: SinonStub; - let clientLoginStub: SinonStub; - let stackStub: SinonStub; - let fetchStub: SinonStub; - let logStub: SinonStub; - let isAuthenticatedStub: SinonStub; - let mockStack: any; - - // Setup stubs for client methods - clientLoginStub = stub(); - fetchStub = stub(); - - mockStack = { - fetch: fetchStub, - }; - - stackStub = stub().returns(mockStack); - - // Create a mock client that will be returned by managementSDKClient - const mockClient = { - login: clientLoginStub, - stack: stackStub, - }; - - // Make managementSDKClient return our mock client - managementSDKClientStub = stub().resolves(mockClient); - isAuthenticatedStub = stub().returns(false); - - // Load the compiled JS version of your TS file - const { default: loginHandler } = proxyquire('../../src/utils/login-handler', { - '@contentstack/cli-utilities': { - managementSDKClient: managementSDKClientStub, - isAuthenticated: isAuthenticatedStub, - }, - }); - - // Base mock config that satisfies ImportConfig type - const baseConfig: Partial = { - contentDir: '/content/path', - data: '/content/path', - apiKey: 'test-api-key', - forceStopMarketplaceAppsPrompt: false, - master_locale: { code: 'en-us' }, - masterLocale: { code: 'en-us' }, - branchName: '', - selectedModules: ['entries'], - backupDir: '', - contentVersion: 1, - region: 'us', - }; + let sandbox: sinon.SinonSandbox; + let managementSDKClientStub: sinon.SinonStub; + let configHandlerGetStub: sinon.SinonStub; + let logStub: sinon.SinonStub; + let mockClient: any; + let mockStackAPIClient: any; beforeEach(() => { - restore(); - - logStub = stub(logger, 'log'); + sandbox = sinon.createSandbox(); + + // Mock stack API client + mockStackAPIClient = { + fetch: sandbox.stub(), + }; + + // Mock management SDK client + mockClient = { + login: sandbox.stub(), + stack: sandbox.stub().returns(mockStackAPIClient), + }; + + // Stub managementSDKClient using .value() pattern - ensure it returns the mock client + const cliUtilitiesModule = require('@contentstack/cli-utilities'); + sandbox.stub(cliUtilitiesModule, 'managementSDKClient').value(() => Promise.resolve(mockClient)); + + // Stub configHandler.get to control isAuthenticated() behavior + // isAuthenticated() internally checks configHandler.get('authorisationType') + // Returns 'OAUTH' or 'AUTH' for authenticated, undefined for not authenticated + const configHandler = require('@contentstack/cli-utilities').configHandler; + configHandlerGetStub = sandbox.stub(configHandler, 'get'); + // Default to undefined (not authenticated) - tests can override as needed + configHandlerGetStub.returns(undefined); + + // Stub logger + logStub = sandbox.stub(logger, 'log'); }); afterEach(() => { - restore(); + sandbox.restore(); }); - describe('with email and password', () => { - it('should login successfully and return updated config', async () => { - const mockConfig = { - ...baseConfig, + describe('Email/Password Authentication', () => { + it('should successfully login with email and password and set headers', async () => { + const config: ImportConfig = { email: 'test@example.com', - password: 'password123', - source_stack: 'test-stack-key', + password: 'testpassword', + source_stack: 'test-api-key', + access_token: 'test-access-token', + authtoken: 'test-auth-token', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + management_token: undefined, + target_stack: 'test-api-key', } as ImportConfig; - // Mock successful login - clientLoginStub.resolves({ + mockClient.login.resolves({ user: { - authtoken: 'test-auth-token', + authtoken: 'new-auth-token-123', }, }); - const result = await loginHandler(mockConfig); + const result = await loginHandler(config); + + expect(result).to.equal(config); + expect(config.headers).to.exist; + expect(config.headers!.api_key).to.equal('test-api-key'); + expect(config.headers!.access_token).to.equal('test-access-token'); + expect(config.headers!.authtoken).to.equal('test-auth-token'); + expect(config.headers!['X-User-Agent']).to.equal('contentstack-export/v'); + expect(mockClient.login.calledOnce).to.be.true; + expect(mockClient.login.calledWith({ email: 'test@example.com', password: 'testpassword' })).to.be.true; + expect(logStub.calledWith(config, 'Contentstack account authenticated successfully!', 'success')).to.be.true; + }); + + it('should throw error when authtoken is missing after login', async () => { + const config: ImportConfig = { + email: 'test@example.com', + password: 'testpassword', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + } as ImportConfig; + + mockClient.login.resolves({ + user: { + authtoken: null, + }, + }); - expect(managementSDKClientStub.calledOnce).to.be.true; - expect(clientLoginStub.calledOnce).to.be.true; - expect( - clientLoginStub.calledWith({ - email: 'test@example.com', - password: 'password123', - }), - ).to.be.true; + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error.message).to.equal('Invalid auth token received after login'); + } - expect(logStub.calledWith(result, 'Contentstack account authenticated successfully!', 'success')).to.be.true; + expect(mockClient.login.calledOnce).to.be.true; }); - it('should throw error when login fails', async () => { - const mockConfig = { - ...baseConfig, + it('should throw error when user object is missing authtoken property', async () => { + const config: ImportConfig = { email: 'test@example.com', - password: 'wrong-password', + password: 'testpassword', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', } as ImportConfig; - // Mock failed login - clientLoginStub.resolves({ + mockClient.login.resolves({ user: {}, }); try { - await loginHandler(mockConfig); + await loginHandler(config); expect.fail('Should have thrown an error'); - } catch (err: any) { - expect(err.message).to.equal('Invalid auth token received after login'); + } catch (error: any) { + expect(error.message).to.equal('Invalid auth token received after login'); } }); + + it('should throw error when user object is missing', async () => { + const config: ImportConfig = { + email: 'test@example.com', + password: 'testpassword', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + } as ImportConfig; + + mockClient.login.resolves({}); + + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error.message).to.equal('Invalid auth token received after login'); + } + }); + + it('should handle login API errors', async () => { + const config: ImportConfig = { + email: 'test@example.com', + password: 'testpassword', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + } as ImportConfig; + + const loginError = new Error('Login failed'); + mockClient.login.rejects(loginError); + + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error).to.equal(loginError); + } + + expect(mockClient.login.calledOnce).to.be.true; + }); + }); + + describe('Management Token Authentication', () => { + it('should return config when management_token is provided', async () => { + const config: ImportConfig = { + management_token: 'test-management-token', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + const result = await loginHandler(config); + + expect(result).to.equal(config); + expect(mockClient.login.called).to.be.false; + expect(mockStackAPIClient.fetch.called).to.be.false; + }); + + it('should return config when management_token is provided without email/password', async () => { + const config: ImportConfig = { + management_token: 'test-management-token', + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + const result = await loginHandler(config); + + // Management token path is used when email/password are not provided + expect(result).to.equal(config); + expect(mockClient.login.called).to.be.false; + }); }); - describe('with authentication', () => { - it('should handle stack api key error', async () => { - const mockConfig = { - ...baseConfig, - target_stack: 'invalid-stack-key', + describe('Existing Authentication', () => { + it('should validate stack access when user is already authenticated', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, } as ImportConfig; - // Set isAuthenticated to return true for this test - isAuthenticatedStub.returns(true); + // Reset stub completely to clear any previous behavior + configHandlerGetStub.reset(); + + // Make isAuthenticated() return true by returning 'OAUTH' for authorisationType + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + + // Reset fetch stub and mock stack response + mockStackAPIClient.fetch.reset(); + mockStackAPIClient.fetch.resolves({ + name: 'Test Stack Name', + }); + + // Ensure client.stack returns the mock stack client + mockClient.stack.reset(); + mockClient.stack.returns(mockStackAPIClient); + + const result = await loginHandler(config); + + expect(result).to.equal(config); + expect(config.destinationStackName).to.equal('Test Stack Name'); + // Verify stub was called - if stack was called, then isAuthenticated() returned true, which means the stub was called + expect(mockClient.stack.calledOnce).to.be.true; + expect(mockClient.stack.calledWith({ + api_key: 'test-api-key', + management_token: undefined, // This is what gets passed when management_token is not set + })).to.be.true; + expect(mockStackAPIClient.fetch.calledOnce).to.be.true; + }); - const error = { + it('should throw error when stack fetch fails with api_key error', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + const apiKeyError: any = { errors: { api_key: ['Invalid stack API key'], }, }; - fetchStub.rejects(error); + // Setup configHandler to return values that isAuthenticated() needs + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + // Return undefined for other keys + return undefined; + }); + mockStackAPIClient.fetch.reset(); + mockClient.stack.reset(); + mockClient.stack.returns(mockStackAPIClient); + mockStackAPIClient.fetch.rejects(apiKeyError); try { - await loginHandler(mockConfig); + await loginHandler(config); expect.fail('Should have thrown an error'); - } catch (err) { - expect(err).to.equal(error); + } catch (error: any) { + expect(error).to.exist; + expect(error.errors).to.deep.equal(apiKeyError.errors); expect(logStub.called).to.be.true; } + + expect(mockStackAPIClient.fetch.calledOnce).to.be.true; }); - it('should handle general fetch error', async () => { - const mockConfig = { - ...baseConfig, - target_stack: 'test-stack-key', + it('should throw error when stack fetch fails with errorMessage', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, } as ImportConfig; - // Set isAuthenticated to return true for this test - isAuthenticatedStub.returns(true); + const fetchError: any = { + errorMessage: 'Stack not found', + }; - const error: any = new Error('Network error'); - error.errorMessage = 'Failed to fetch stack'; + // Reset stubs + configHandlerGetStub.reset(); + mockStackAPIClient.fetch.reset(); + mockClient.stack.reset(); + + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + mockClient.stack.returns(mockStackAPIClient); + mockStackAPIClient.fetch.rejects(fetchError); - fetchStub.rejects(error); + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error).to.exist; + expect(error.errorMessage).to.equal(fetchError.errorMessage); + expect(logStub.calledWith(config, 'Stack not found', 'error')).to.be.true; + } + + expect(mockStackAPIClient.fetch.calledOnce).to.be.true; + }); + + it('should throw error when stack fetch fails with generic error', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + const genericError = new Error('Network error'); + + // Reset stubs + configHandlerGetStub.reset(); + mockStackAPIClient.fetch.reset(); + + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + mockClient.stack.reset(); + mockClient.stack.returns(mockStackAPIClient); + mockStackAPIClient.fetch.rejects(genericError); + + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + expect(error).to.exist; + expect(error.message).to.equal(genericError.message); + } + + expect(mockStackAPIClient.fetch.calledOnce).to.be.true; + }); + + it('should handle error when errorstack_key is empty array', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + const errorWithEmptyKey: any = { + errors: { + api_key: [], + }, + errorMessage: 'Stack fetch failed', + }; + + // Reset stubs + configHandlerGetStub.reset(); + mockStackAPIClient.fetch.reset(); + mockClient.stack.reset(); + + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + mockClient.stack.returns(mockStackAPIClient); + mockStackAPIClient.fetch.rejects(errorWithEmptyKey); try { - await loginHandler(mockConfig); + await loginHandler(config); expect.fail('Should have thrown an error'); - } catch (err) { - expect(err).to.equal(error); - expect(logStub.calledWith(mockConfig, 'Failed to fetch stack', 'error')).to.be.true; + } catch (error: any) { + expect(error).to.exist; + expect(error).to.have.property('errors'); + expect(error).to.have.property('errorMessage'); } }); }); - describe('without credentials', () => { - it('should return undefined when no login method is available', async () => { - const mockConfig = { - ...baseConfig, + describe('Authentication Priority', () => { + it('should prioritize email/password over existing auth when email and password are present', async () => { + const config: ImportConfig = { + email: 'test@example.com', + password: 'testpassword', + apiKey: 'test-api-key', + source_stack: 'test-api-key', + access_token: 'test-access-token', + authtoken: 'test-auth-token', + contentDir: '/test/content', + data: '/test/content', + management_token: undefined, + } as ImportConfig; + + // Reset configHandler stub for this test + configHandlerGetStub.reset(); + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + + // Reset and setup login mock + mockClient.login.reset(); + mockClient.login.resolves({ + user: { + authtoken: 'new-auth-token', + }, + }); + + const result = await loginHandler(config); + + expect(result).to.equal(config); + expect(mockClient.login.calledOnce).to.be.true; + expect(mockStackAPIClient.fetch.called).to.be.false; + }); + + it('should prioritize management_token over email/password', async () => { + // Reset stubs + configHandlerGetStub.reset(); + mockClient.login.reset(); + mockStackAPIClient.fetch.reset(); + + // Note: Based on the code logic, email/password is checked FIRST, then management_token + // So when both are present, email/password takes priority + // This test verifies that when management_token is provided without email/password, + // it uses management_token (not email/password auth) + const configForManagementToken: ImportConfig = { + management_token: 'test-management-token', + email: undefined, + password: undefined, + apiKey: 'test-api-key', + contentDir: '/test/content', + data: '/test/content', + } as ImportConfig; + + const result = await loginHandler(configForManagementToken); + + expect(result).to.equal(configForManagementToken); + expect(mockClient.login.called).to.be.false; + }); + + it('should check existing auth only when email/password and management_token are not provided', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, + email: undefined, + password: undefined, + contentDir: '/test/content', + data: '/test/content', } as ImportConfig; - // Set isAuthenticated to return false for this test - isAuthenticatedStub.returns(false); + // Reset stub completely to clear any previous behavior + configHandlerGetStub.reset(); + + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + + mockStackAPIClient.fetch.reset(); + mockStackAPIClient.fetch.resolves({ + name: 'Test Stack', + }); + + // Ensure mockClient.stack is set up (from beforeEach, but ensure it's correct) + mockClient.stack.reset(); + mockClient.stack.returns(mockStackAPIClient); + mockClient.login.reset(); - const result = await loginHandler(mockConfig); + const result = await loginHandler(config); + + expect(result).to.equal(config); + // Verify stub was called - if stack was called, then isAuthenticated() returned true, which means the stub was called + expect(mockClient.login.called).to.be.false; + }); - expect(result).to.be.undefined; + }); + + describe('Edge Cases', () => { + it('should handle null values in error object gracefully', async () => { + const config: ImportConfig = { + apiKey: 'test-api-key', + target_stack: 'test-api-key', + management_token: undefined, // NOT set - so it will check isAuthenticated() + contentDir: '/test/content', + data: '/test/content', + email: undefined, + password: undefined, + } as ImportConfig; + + // Reset stubs + configHandlerGetStub.reset(); + mockStackAPIClient.fetch.reset(); + + configHandlerGetStub.callsFake((key: string) => { + if (key === 'authorisationType') { + return 'OAUTH'; // This makes isAuthenticated() return true + } + return undefined; + }); + mockClient.stack.reset(); + mockClient.stack.returns(mockStackAPIClient); + mockStackAPIClient.fetch.rejects(null); + + try { + await loginHandler(config); + expect.fail('Should have thrown an error'); + } catch (error: any) { + // When error is null, it will still throw but we just verify it was thrown + expect(error).to.exist; + } }); }); }); diff --git a/packages/contentstack-import-setup/test/unit/modules/assets.test.ts b/packages/contentstack-import-setup/test/unit/modules/assets.test.ts index 5cd8d42838..bde556ac7f 100644 --- a/packages/contentstack-import-setup/test/unit/modules/assets.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/assets.test.ts @@ -24,7 +24,6 @@ describe('AssetImportSetup', () => { branchName: '', selectedModules: ['assets'], backupDir: '/path/to/backup', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, @@ -82,14 +81,25 @@ describe('AssetImportSetup', () => { // }); it('should log success message after setup', async () => { + // Stub withLoadingSpinner to return a non-zero indexerCount to avoid early return + stub(assetSetup as any, 'withLoadingSpinner').resolves(1); // Stub fetchAndMapAssets to avoid actual implementation stub(assetSetup as any, 'fetchAndMapAssets').resolves(); + // Stub createNestedProgress and completeProgress to avoid progress manager issues + stub(assetSetup as any, 'createNestedProgress').returns({ + addProcess: stub().returnsThis(), + startProcess: stub().returnsThis(), + updateStatus: stub().returnsThis(), + completeProcess: stub().returnsThis(), + }); + stub(assetSetup as any, 'completeProgress'); await assetSetup.start(); - expect(logStub.calledOnce).to.be.true; - expect(logStub.firstCall.args[1]).to.include('successfully'); - expect(logStub.firstCall.args[2]).to.equal('success'); + expect(logStub.called).to.be.true; + const successCall = logStub.getCalls().find((call) => call.args[1]?.includes('successfully')); + expect(successCall).to.exist; + expect(successCall?.args[2]).to.equal('success'); }); it('should handle errors during start process', async () => { diff --git a/packages/contentstack-import-setup/test/unit/modules/base-setup.test.ts b/packages/contentstack-import-setup/test/unit/modules/base-setup.test.ts index 9ce1a5d7f3..620ea95da7 100644 --- a/packages/contentstack-import-setup/test/unit/modules/base-setup.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/base-setup.test.ts @@ -3,6 +3,7 @@ import { stub, restore, SinonStub } from 'sinon'; import BaseImportSetup from '../../../src/import/modules/base-setup'; import * as loggerModule from '../../../src/utils/logger'; import { ImportConfig } from '../../../src/types'; +import { CLIProgressManager, configHandler } from '@contentstack/cli-utilities'; describe('BaseImportSetup', () => { let baseSetup: BaseImportSetup; @@ -19,7 +20,6 @@ describe('BaseImportSetup', () => { branchName: '', selectedModules: ['entries'], backupDir: '', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, @@ -40,7 +40,7 @@ describe('BaseImportSetup', () => { baseSetup = new BaseImportSetup({ config: baseConfig as ImportConfig, stackAPIClient: mockStackAPIClient, - dependencies: {} as any, + dependencies: [] as any, }); }); @@ -51,7 +51,7 @@ describe('BaseImportSetup', () => { it('should initialize with the provided config and client', () => { expect(baseSetup.config).to.equal(baseConfig); expect(baseSetup.stackAPIClient).to.equal(mockStackAPIClient); - expect(baseSetup.dependencies).to.deep.equal({} as any); + expect(baseSetup.dependencies).to.deep.equal([] as any); }); it('should delay execution for specified milliseconds', async () => { @@ -120,4 +120,191 @@ describe('BaseImportSetup', () => { await baseSetup.logMsgAndWaitIfRequired('test-process', Date.now() - 500, 5, 3, false); expect(logStub.called).to.be.false; }); + + describe('Progress Manager', () => { + let configHandlerGetStub: SinonStub; + let createSimpleStub: SinonStub; + let createNestedStub: SinonStub; + let withLoadingSpinnerStub: SinonStub; + let mockProgressManager: any; + + beforeEach(() => { + mockProgressManager = { + tick: stub(), + complete: stub(), + addProcess: stub().returnsThis(), + startProcess: stub().returnsThis(), + updateStatus: stub().returnsThis(), + completeProcess: stub().returnsThis(), + }; + + configHandlerGetStub = stub(configHandler, 'get'); + createSimpleStub = stub(CLIProgressManager, 'createSimple'); + createNestedStub = stub(CLIProgressManager, 'createNested'); + withLoadingSpinnerStub = stub(CLIProgressManager, 'withLoadingSpinner'); + }); + + afterEach(() => { + restore(); + }); + + describe('createSimpleProgress', () => { + it('should create a simple progress manager with default showConsoleLogs', () => { + configHandlerGetStub.returns({}); + createSimpleStub.returns(mockProgressManager); + + const result = (baseSetup as any).createSimpleProgress('test-module', 100); + + expect(configHandlerGetStub.calledWith('log')).to.be.true; + expect(createSimpleStub.calledOnce).to.be.true; + expect(createSimpleStub.firstCall.args[0]).to.equal('test-module'); + expect(createSimpleStub.firstCall.args[1]).to.equal(100); + expect(createSimpleStub.firstCall.args[2]).to.equal(false); + expect(result).to.equal(mockProgressManager); + expect((baseSetup as any).currentModuleName).to.equal('test-module'); + expect((baseSetup as any).progressManager).to.equal(mockProgressManager); + }); + + it('should create a simple progress manager with showConsoleLogs enabled', () => { + configHandlerGetStub.returns({ showConsoleLogs: true }); + createSimpleStub.returns(mockProgressManager); + + const result = (baseSetup as any).createSimpleProgress('test-module', 50); + + expect(createSimpleStub.firstCall.args[2]).to.equal(true); + expect(result).to.equal(mockProgressManager); + }); + + it('should create a simple progress manager without total count', () => { + configHandlerGetStub.returns({}); + createSimpleStub.returns(mockProgressManager); + + (baseSetup as any).createSimpleProgress('test-module'); + + expect(createSimpleStub.firstCall.args[1]).to.be.undefined; + }); + }); + + describe('createNestedProgress', () => { + it('should create a nested progress manager with default showConsoleLogs', () => { + configHandlerGetStub.returns({}); + createNestedStub.returns(mockProgressManager); + + const result = (baseSetup as any).createNestedProgress('test-module'); + + expect(configHandlerGetStub.calledWith('log')).to.be.true; + expect(createNestedStub.calledOnce).to.be.true; + expect(createNestedStub.firstCall.args[0]).to.equal('test-module'); + expect(createNestedStub.firstCall.args[1]).to.equal(false); + expect(result).to.equal(mockProgressManager); + expect((baseSetup as any).currentModuleName).to.equal('test-module'); + expect((baseSetup as any).progressManager).to.equal(mockProgressManager); + }); + + it('should create a nested progress manager with showConsoleLogs enabled', () => { + configHandlerGetStub.returns({ showConsoleLogs: true }); + createNestedStub.returns(mockProgressManager); + + const result = (baseSetup as any).createNestedProgress('test-module'); + + expect(createNestedStub.firstCall.args[1]).to.equal(true); + expect(result).to.equal(mockProgressManager); + }); + }); + + describe('completeProgress', () => { + it('should complete progress manager with success', () => { + (baseSetup as any).progressManager = mockProgressManager; + + (baseSetup as any).completeProgress(true); + + expect(mockProgressManager.complete.calledOnce).to.be.true; + expect(mockProgressManager.complete.firstCall.args[0]).to.equal(true); + expect(mockProgressManager.complete.firstCall.args[1]).to.be.undefined; + expect((baseSetup as any).progressManager).to.be.null; + }); + + it('should complete progress manager with error', () => { + (baseSetup as any).progressManager = mockProgressManager; + const errorMessage = 'Test error message'; + + (baseSetup as any).completeProgress(false, errorMessage); + + expect(mockProgressManager.complete.calledOnce).to.be.true; + expect(mockProgressManager.complete.firstCall.args[0]).to.equal(false); + expect(mockProgressManager.complete.firstCall.args[1]).to.equal(errorMessage); + expect((baseSetup as any).progressManager).to.be.null; + }); + + it('should handle null progress manager gracefully', () => { + (baseSetup as any).progressManager = null; + + expect(() => (baseSetup as any).completeProgress(true)).to.not.throw(); + }); + }); + + describe('withLoadingSpinner', () => { + it('should execute action directly when showConsoleLogs is enabled', async () => { + configHandlerGetStub.returns({ showConsoleLogs: true }); + const action = stub().resolves('result'); + + const result = await (baseSetup as any).withLoadingSpinner('Loading...', action); + + expect(action.calledOnce).to.be.true; + expect(withLoadingSpinnerStub.called).to.be.false; + expect(result).to.equal('result'); + }); + + it('should use CLIProgressManager.withLoadingSpinner when showConsoleLogs is disabled', async () => { + configHandlerGetStub.returns({ showConsoleLogs: false }); + const action = stub().resolves('result'); + withLoadingSpinnerStub.resolves('result'); + + const result = await (baseSetup as any).withLoadingSpinner('Loading...', action); + + expect(withLoadingSpinnerStub.calledOnce).to.be.true; + expect(withLoadingSpinnerStub.firstCall.args[0]).to.equal('Loading...'); + expect(withLoadingSpinnerStub.firstCall.args[1]).to.equal(action); + expect(result).to.equal('result'); + }); + + it('should use CLIProgressManager.withLoadingSpinner when log config is empty', async () => { + configHandlerGetStub.returns({}); + const action = stub().resolves('result'); + withLoadingSpinnerStub.resolves('result'); + + const result = await (baseSetup as any).withLoadingSpinner('Loading...', action); + + expect(withLoadingSpinnerStub.calledOnce).to.be.true; + expect(result).to.equal('result'); + }); + + it('should handle errors in action when showConsoleLogs is enabled', async () => { + configHandlerGetStub.returns({ showConsoleLogs: true }); + const error = new Error('Action failed'); + const action = stub().rejects(error); + + try { + await (baseSetup as any).withLoadingSpinner('Loading...', action); + expect.fail('Should have thrown an error'); + } catch (e) { + expect(e).to.equal(error); + } + }); + + it('should handle errors in action when showConsoleLogs is disabled', async () => { + configHandlerGetStub.returns({ showConsoleLogs: false }); + const error = new Error('Action failed'); + const action = stub().rejects(error); + withLoadingSpinnerStub.rejects(error); + + try { + await (baseSetup as any).withLoadingSpinner('Loading...', action); + expect.fail('Should have thrown an error'); + } catch (e) { + expect(e).to.equal(error); + } + }); + }); + }); }); diff --git a/packages/contentstack-import-setup/test/unit/modules/content-types.test.ts b/packages/contentstack-import-setup/test/unit/modules/content-types.test.ts index 3aecf108b0..8380440ce3 100644 --- a/packages/contentstack-import-setup/test/unit/modules/content-types.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/content-types.test.ts @@ -20,7 +20,6 @@ describe('ContentTypesImportSetup', () => { branchName: '', selectedModules: ['content-types'], backupDir: '', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, @@ -41,11 +40,19 @@ describe('ContentTypesImportSetup', () => { contentTypesSetup = new ContentTypesImportSetup({ config: baseConfig as ImportConfig, stackAPIClient: mockStackAPIClient, - dependencies: {} as any, + dependencies: ['extensions'] as any, }); // Stub the setupDependencies method to avoid actual imports setupDependenciesStub = stub(contentTypesSetup, 'setupDependencies').resolves(); + // Stub createNestedProgress and completeProgress to avoid progress manager issues + stub(contentTypesSetup as any, 'createNestedProgress').returns({ + addProcess: stub().returnsThis(), + startProcess: stub().returnsThis(), + updateStatus: stub().returnsThis(), + completeProcess: stub().returnsThis(), + }); + stub(contentTypesSetup as any, 'completeProgress'); }); afterEach(() => { @@ -55,7 +62,7 @@ describe('ContentTypesImportSetup', () => { it('should initialize with the provided config and client', () => { expect(contentTypesSetup.config).to.equal(baseConfig); expect(contentTypesSetup.stackAPIClient).to.equal(mockStackAPIClient); - expect(contentTypesSetup.dependencies).to.deep.equal({} as any); + expect(contentTypesSetup.dependencies).to.deep.equal(['extensions'] as any); }); it('should call setupDependencies during start', async () => { @@ -76,9 +83,10 @@ describe('ContentTypesImportSetup', () => { await contentTypesSetup.start(); - expect(logStub.calledOnce).to.be.true; - expect(logStub.firstCall.args[1]).to.include('Error occurred'); - expect(logStub.firstCall.args[1]).to.include('Test error'); - expect(logStub.firstCall.args[2]).to.equal('error'); + expect(logStub.called).to.be.true; + const errorCall = logStub.getCalls().find((call) => call.args[1]?.includes('Error occurred')); + expect(errorCall).to.exist; + expect(errorCall?.args[1]).to.include('Test error'); + expect(errorCall?.args[2]).to.equal('error'); }); }); diff --git a/packages/contentstack-import-setup/test/unit/modules/entries.test.ts b/packages/contentstack-import-setup/test/unit/modules/entries.test.ts index ba50f58434..c5eacd54de 100644 --- a/packages/contentstack-import-setup/test/unit/modules/entries.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/entries.test.ts @@ -20,7 +20,6 @@ describe('EntriesImportSetup', () => { branchName: '', selectedModules: ['entries'], backupDir: '', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, diff --git a/packages/contentstack-import-setup/test/unit/modules/extensions.test.ts b/packages/contentstack-import-setup/test/unit/modules/extensions.test.ts index 168efb51e5..fdd12fa38f 100644 --- a/packages/contentstack-import-setup/test/unit/modules/extensions.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/extensions.test.ts @@ -22,7 +22,6 @@ describe('ExtensionsImportSetup', () => { branchName: '', selectedModules: ['extensions'], backupDir: '/path/to/backup', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, diff --git a/packages/contentstack-import-setup/test/unit/modules/global-fields.test.ts b/packages/contentstack-import-setup/test/unit/modules/global-fields.test.ts index 605c2116a5..1416c7fb59 100644 --- a/packages/contentstack-import-setup/test/unit/modules/global-fields.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/global-fields.test.ts @@ -20,7 +20,6 @@ describe('GlobalFieldsImportSetup', () => { branchName: '', selectedModules: ['global-fields'], backupDir: '', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, @@ -41,11 +40,19 @@ describe('GlobalFieldsImportSetup', () => { globalFieldsSetup = new GlobalFieldsImportSetup({ config: baseConfig as ImportConfig, stackAPIClient: mockStackAPIClient, - dependencies: {} as any, + dependencies: ['extensions'] as any, }); // Stub the setupDependencies method to avoid actual imports setupDependenciesStub = stub(globalFieldsSetup, 'setupDependencies').resolves(); + // Stub createNestedProgress and completeProgress to avoid progress manager issues + stub(globalFieldsSetup as any, 'createNestedProgress').returns({ + addProcess: stub().returnsThis(), + startProcess: stub().returnsThis(), + updateStatus: stub().returnsThis(), + completeProcess: stub().returnsThis(), + }); + stub(globalFieldsSetup as any, 'completeProgress'); }); afterEach(() => { @@ -55,7 +62,7 @@ describe('GlobalFieldsImportSetup', () => { it('should initialize with the provided config and client', () => { expect((globalFieldsSetup as any).config).to.equal(baseConfig); expect((globalFieldsSetup as any).stackAPIClient).to.equal(mockStackAPIClient); - expect((globalFieldsSetup as any).dependencies).to.deep.equal({} as any); + expect((globalFieldsSetup as any).dependencies).to.deep.equal(['extensions'] as any); }); it('should call setupDependencies during start', async () => { @@ -76,9 +83,10 @@ describe('GlobalFieldsImportSetup', () => { await globalFieldsSetup.start(); - expect(logStub.calledOnce).to.be.true; - expect(logStub.firstCall.args[1]).to.include('Error occurred'); - expect(logStub.firstCall.args[1]).to.include('Test error'); - expect(logStub.firstCall.args[2]).to.equal('error'); + expect(logStub.called).to.be.true; + const errorCall = logStub.getCalls().find((call) => call.args[1]?.includes('Error occurred')); + expect(errorCall).to.exist; + expect(errorCall?.args[1]).to.include('Test error'); + expect(errorCall?.args[2]).to.equal('error'); }); }); diff --git a/packages/contentstack-import-setup/test/unit/modules/marketplace-apps.test.ts b/packages/contentstack-import-setup/test/unit/modules/marketplace-apps.test.ts index c829093ef0..6dafb1dd83 100644 --- a/packages/contentstack-import-setup/test/unit/modules/marketplace-apps.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/marketplace-apps.test.ts @@ -22,7 +22,6 @@ describe('MarketplaceAppsImportSetup', () => { branchName: '', selectedModules: ['marketplace-apps'], backupDir: '/path/to/backup', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, diff --git a/packages/contentstack-import-setup/test/unit/modules/taxonomies.test.ts b/packages/contentstack-import-setup/test/unit/modules/taxonomies.test.ts index cc092a99ba..fa67a6ba46 100644 --- a/packages/contentstack-import-setup/test/unit/modules/taxonomies.test.ts +++ b/packages/contentstack-import-setup/test/unit/modules/taxonomies.test.ts @@ -24,7 +24,6 @@ describe('TaxonomiesImportSetup', () => { branchName: '', selectedModules: ['taxonomies'], backupDir: '/path/to/backup', - contentVersion: 1, region: 'us', fetchConcurrency: 2, writeConcurrency: 1, diff --git a/packages/contentstack-migrate-rte/.eslintrc b/packages/contentstack-migrate-rte/.eslintrc deleted file mode 100644 index e56091ba65..0000000000 --- a/packages/contentstack-migrate-rte/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -{ - "extends": "oclif" -} diff --git a/packages/contentstack-migrate-rte/.gitignore b/packages/contentstack-migrate-rte/.gitignore deleted file mode 100644 index 80ee047d32..0000000000 --- a/packages/contentstack-migrate-rte/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -*-debug.log -*-error.log -/.nyc_output -/dist -/tmp -/logs -/yarn.lock -node_modules -/coverage diff --git a/packages/contentstack-migrate-rte/LICENSE b/packages/contentstack-migrate-rte/LICENSE deleted file mode 100644 index ffb4ad010b..0000000000 --- a/packages/contentstack-migrate-rte/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -MIT License - -Copyright (c) 2024 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-migrate-rte/README.md b/packages/contentstack-migrate-rte/README.md deleted file mode 100644 index c38cde1007..0000000000 --- a/packages/contentstack-migrate-rte/README.md +++ /dev/null @@ -1,156 +0,0 @@ -# @contentstack/cli-cm-migrate-rte - -It is Contentstack’s CLI plugin to migrate rte. Using this command, you can copy existing value of HTML RTE into JSON RTE. - - -* [@contentstack/cli-cm-migrate-rte](#contentstackcli-cm-migrate-rte) -* [Usage](#usage) -* [Commands](#commands) - - -# Usage - - -```sh-session -$ npm install -g @contentstack/cli-cm-migrate-rte -$ csdx COMMAND -running command... -$ csdx (--version) -@contentstack/cli-cm-migrate-rte/1.6.2 darwin-arm64 node-v22.14.0 -$ csdx --help [COMMAND] -USAGE - $ csdx COMMAND -... -``` - - -# Commands - - -* [`csdx cm:entries:migrate-html-rte`](#csdx-cmentriesmigrate-html-rte) -* [`csdx cm:migrate-rte`](#csdx-cmmigrate-rte) - -## `csdx cm:entries:migrate-html-rte` - -Migration script to migrate content from HTML RTE to JSON RTE - -``` -USAGE - $ csdx cm:entries:migrate-html-rte [-c ] [-a ] [--stack-api-key ] [--content-type ] - [--global-field] [-y] [--branch ] [--html-path --json-path ] [--delay ] [--locale - ] [--batch-limit ] - -FLAGS - -a, --alias= Enter the alias name. You must use either the --alias flag or the --stack-api-key flag. - -c, --config-path= Specify the path where your config file is located. - -y, --yes Avoids reconfirmation of your configuration. - --batch-limit= [default: 50] Provide batch limit for updating entries (default: 50). - --branch= The name of the branch to be used. - --content-type= Specify the UID of the content type for which you want to migrate HTML RTE content. - --delay= [default: 1000] To set the interval time between the migration of HTML RTE to JSON RTE in - subsequent entries of a content type. The default value is 1,000 milliseconds. - --global-field Checks whether the specified UID belongs to a content type or a global field. This flag - is set to false by default. - --html-path= Enter the path to the HTML RTE whose content you want to migrate. - --json-path= Enter the path to the JSON RTE to which you want to migrate the HTML RTE content. - --locale= The locale from which entries will be migrated. - --stack-api-key= API key of the source stack. You must use either the --stack-api-key flag or the --alias - flag. - -DESCRIPTION - Migration script to migrate content from HTML RTE to JSON RTE - -ALIASES - $ csdx cm:migrate-rte - -EXAMPLES - General Usage - - $ csdx cm:entries:migrate-html-rte --config-path path/to/config.json - - - - Using Flags - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path html-path --json-path json-path - - - - Nested RTE - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path modular_block_uid.block_uid.html_rte_uid --json-path modular_block_uid.block_uid.json_rte_uid - - - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path group_uid.html_rte_uid --json-path group_uid.json_rte_uid - - - - Global Field - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type global_field_uid --global-field --html-path html-path --json-path json-path -``` - -_See code: [src/commands/cm/entries/migrate-html-rte.js](https://github.com/contentstack/cli/blob/main/packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js)_ - -## `csdx cm:migrate-rte` - -Migration script to migrate content from HTML RTE to JSON RTE - -``` -USAGE - $ csdx cm:migrate-rte [-c ] [-a ] [--stack-api-key ] [--content-type ] - [--global-field] [-y] [--branch ] [--html-path --json-path ] [--delay ] [--locale - ] [--batch-limit ] - -FLAGS - -a, --alias= Enter the alias name. You must use either the --alias flag or the --stack-api-key flag. - -c, --config-path= Specify the path where your config file is located. - -y, --yes Avoids reconfirmation of your configuration. - --batch-limit= [default: 50] Provide batch limit for updating entries (default: 50). - --branch= The name of the branch to be used. - --content-type= Specify the UID of the content type for which you want to migrate HTML RTE content. - --delay= [default: 1000] To set the interval time between the migration of HTML RTE to JSON RTE in - subsequent entries of a content type. The default value is 1,000 milliseconds. - --global-field Checks whether the specified UID belongs to a content type or a global field. This flag - is set to false by default. - --html-path= Enter the path to the HTML RTE whose content you want to migrate. - --json-path= Enter the path to the JSON RTE to which you want to migrate the HTML RTE content. - --locale= The locale from which entries will be migrated. - --stack-api-key= API key of the source stack. You must use either the --stack-api-key flag or the --alias - flag. - -DESCRIPTION - Migration script to migrate content from HTML RTE to JSON RTE - -ALIASES - $ csdx cm:migrate-rte - -EXAMPLES - General Usage - - $ csdx cm:entries:migrate-html-rte --config-path path/to/config.json - - - - Using Flags - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path html-path --json-path json-path - - - - Nested RTE - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path modular_block_uid.block_uid.html_rte_uid --json-path modular_block_uid.block_uid.json_rte_uid - - - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path group_uid.html_rte_uid --json-path group_uid.json_rte_uid - - - - Global Field - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type global_field_uid --global-field --html-path html-path --json-path json-path -``` - diff --git a/packages/contentstack-migrate-rte/bin/run.cmd b/packages/contentstack-migrate-rte/bin/run.cmd deleted file mode 100644 index 968fc30758..0000000000 --- a/packages/contentstack-migrate-rte/bin/run.cmd +++ /dev/null @@ -1,3 +0,0 @@ -@echo off - -node "%~dp0\run" %* diff --git a/packages/contentstack-migrate-rte/bin/run.js b/packages/contentstack-migrate-rte/bin/run.js deleted file mode 100755 index 8baf302391..0000000000 --- a/packages/contentstack-migrate-rte/bin/run.js +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env node - -// eslint-disable-next-line unicorn/prefer-top-level-await -(async () => { - const oclif = await import('@oclif/core'); - await oclif.execute({ development: false, dir: __dirname }); -})(); diff --git a/packages/contentstack-migrate-rte/package.json b/packages/contentstack-migrate-rte/package.json deleted file mode 100644 index 85e867c762..0000000000 --- a/packages/contentstack-migrate-rte/package.json +++ /dev/null @@ -1,69 +0,0 @@ -{ - "name": "@contentstack/cli-cm-migrate-rte", - "description": "Contentstack CLI plugin to migrate HTML RTE to JSON RTE", - "version": "1.6.2", - "author": "contentstack", - "bugs": "https://github.com/contentstack/cli/issues", - "dependencies": { - "@contentstack/cli-command": "~1.6.1", - "@contentstack/cli-utilities": "~1.15.0", - "@contentstack/json-rte-serializer": "~2.1.0", - "@oclif/core": "^4.3.0", - "@oclif/plugin-help": "^6.2.28", - "collapse-whitespace": "^1.1.7", - "chalk": "^4.1.2", - "jsdom": "^20.0.3", - "jsonschema": "^1.5.0", - "lodash": "^4.17.21", - "nock": "^13.5.6", - "omit-deep-lodash": "^1.1.7", - "sinon": "^19.0.5" - }, - "devDependencies": { - "@oclif/test": "^4.1.13", - "chai": "^4.5.0", - "eslint": "^8.57.1", - "eslint-config-oclif": "^6.0.62", - "mocha": "^10.8.2", - "nyc": "^15.1.0", - "oclif": "^4.17.46" - }, - "engines": { - "node": ">=14.0.0" - }, - "files": [ - "/npm-shrinkwrap.json", - "/oclif.manifest.json", - "/src" - ], - "homepage": "https://github.com/contentstack/cli", - "keywords": [ - "contentstack", - "cli", - "plugin", - "JSON RTE" - ], - "license": "MIT", - "oclif": { - "commands": "./src/commands", - "bin": "csdx", - "repositoryPrefix": "<%- repo %>/blob/main/packages/contentstack-migrate-rte/<%- commandPath %>" - }, - "repository": "contentstack/cli", - "scripts": { - "postpack": "rm -f oclif.manifest.json", - "prepack": "oclif manifest && oclif readme", - "test": "nyc mocha --forbid-only \"test/**/*.test.js\"", - "version": "oclif readme && git add README.md", - "clean": "rm -rf ./node_modules tsconfig.build.tsbuildinfo" - }, - "csdxConfig": { - "expiredCommands": { - "cm:migrate-rte": "csdx cm:entries:migrate-html-rte" - }, - "shortCommandName": { - "cm:entries:migrate-html-rte": "MGRTRTE", - "cm:migrate-rte": "O-MGRTRTE" - } - } -} diff --git a/packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js b/packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js deleted file mode 100644 index 5a04309a1b..0000000000 --- a/packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js +++ /dev/null @@ -1,174 +0,0 @@ -const { Command } = require('@contentstack/cli-command'); -const { printFlagDeprecation, flags } = require('@contentstack/cli-utilities'); -const { isEmpty } = require('lodash'); -const chalk = require('chalk'); -let { - getStack, - getConfig, - getToken, - updateSingleContentTypeEntries, - updateContentTypeForGlobalField, - normalizeFlags, -} = require('../../../lib/util'); - -class JsonMigrationCommand extends Command { - async run() { - const { flags: migrateRteFlags } = await this.parse(JsonMigrationCommand); - try { - const normalizedFlags = normalizeFlags(migrateRteFlags); - let config = await getConfig(normalizedFlags); - if (isEmpty(config.paths)) { - throw new Error('No value provided for the "paths" property in config.'); - } - const stackOptions = { host: this.cmaHost }; - if (config.alias) { - stackOptions.token = getToken(config.alias) - } - if (config['stack-api-key']) { - stackOptions.stackApiKey = config['stack-api-key'] - } - if (config.branch) stackOptions.branch = config.branch; - let stack = await getStack(stackOptions); - config.entriesCount = 0; - config.contentTypeCount = 0; - config.errorEntriesUid = {}; - if (config['global-field']) { - await updateContentTypeForGlobalField(stack, config['content-type'], config); - } else { - await updateSingleContentTypeEntries(stack, config['content-type'], config); - } - console.log( - chalk.green(`\nUpdated ${config.contentTypeCount} Content Type(s) and ${config.entriesCount} Entrie(s)`), - ); - if (config.errorEntriesUid && Object.keys(config.errorEntriesUid).length > 0) { - const failedCTs = Object.keys(config.errorEntriesUid); - for (const failedCT of failedCTs) { - const locales = Object.keys(config.errorEntriesUid[failedCT]); - for (const locale of locales) { - console.log( - chalk.red( - `Faced issue while migrating some entrie(s) for "${failedCT}" Content-type in "${locale}" locale,"${config.errorEntriesUid[ - failedCT - ][locale].join(', ')}"`, - ), - ); - } - } - } - } catch (error) { - this.error(error.message, { exit: 2 }); - } - } -} - -JsonMigrationCommand.description = 'Migration script to migrate content from HTML RTE to JSON RTE'; - -JsonMigrationCommand.flags = { - 'config-path': flags.string({ - char: 'c', - description: 'Specify the path where your config file is located.', - required: false, - }), - alias: flags.string({ - char: 'a', - description: 'Enter the alias name. You must use either the --alias flag or the --stack-api-key flag.', - required: false, - }), - 'stack-api-key': flags.string({ - description: 'API key of the source stack. You must use either the --stack-api-key flag or the --alias flag.', - required: false, - }), - 'content-type': flags.string({ - description: 'Specify the UID of the content type for which you want to migrate HTML RTE content.', - required: false, - }), - 'global-field': flags.boolean({ - description: 'Checks whether the specified UID belongs to a content type or a global field. This flag is set to false by default.', - default: false, - required: false, - }), - yes: flags.boolean({ - char: 'y', - description: 'Avoids reconfirmation of your configuration.', - default: false, - required: false, - }), - branch: flags.string({ - description: 'The name of the branch to be used.', - required: false, - }), - 'html-path': flags.string({ - description: 'Enter the path to the HTML RTE whose content you want to migrate.', - dependsOn: ['json-path'], - required: false, - }), - 'json-path': flags.string({ - description: 'Enter the path to the JSON RTE to which you want to migrate the HTML RTE content.', - dependsOn: ['html-path'], - required: false, - }), - delay: flags.integer({ - description: 'To set the interval time between the migration of HTML RTE to JSON RTE in subsequent entries of a content type. The default value is 1,000 milliseconds.', - default: 1000, - required: false, - }), - locale: flags.string({ - description: 'The locale from which entries will be migrated.', - required: false, - }), - 'batch-limit': flags.integer({ - description: 'Provide batch limit for updating entries (default: 50).', - default: 50, - }), - - // To be deprecated - configPath: flags.string({ - char: 'p', - description: 'Path to the config file', - hidden: true, - parse: printFlagDeprecation(['-p', '--configPath'], ['-c', '--config-path']), - }), - content_type: flags.string({ - description: 'The content-type from which entries need to be migrated', - hidden: true, - parse: printFlagDeprecation(['-c', '--content_type'], ['--content-type']), - }), - isGlobalField: flags.boolean({ - char: 'g', - description: 'Indicates that the current content type is a global field (default: false)', - hidden: true, - parse: printFlagDeprecation(['-g', '--isGlobalField'], ['--global-field']), - }), - htmlPath: flags.string({ - char: 'h', - description: 'Provide the path of HTML RTE to migrate', - hidden: true, - parse: printFlagDeprecation(['-h', '--htmlPath'], ['--html-path']), - }), - jsonPath: flags.string({ - char: 'j', - description: 'Provide the path of JSON RTE to migrate', - hidden: true, - parse: printFlagDeprecation(['-j', '--jsonPath'], ['--json-path']), - }), -}; - -JsonMigrationCommand.examples = [ - 'General Usage', - 'csdx cm:entries:migrate-html-rte --config-path path/to/config.json', - '', - 'Using Flags', - 'csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path html-path --json-path json-path', - '', - 'Nested RTE', - 'csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path modular_block_uid.block_uid.html_rte_uid --json-path modular_block_uid.block_uid.json_rte_uid', - '', - 'csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path group_uid.html_rte_uid --json-path group_uid.json_rte_uid', - '', - 'Global Field', - 'csdx cm:entries:migrate-html-rte --alias alias --content-type global_field_uid --global-field --html-path html-path --json-path json-path', -]; - -JsonMigrationCommand.aliases = ['cm:migrate-rte']; - -module.exports = JsonMigrationCommand; diff --git a/packages/contentstack-migrate-rte/src/lib/util/config_schema.json b/packages/contentstack-migrate-rte/src/lib/util/config_schema.json deleted file mode 100644 index 81410c98a3..0000000000 --- a/packages/contentstack-migrate-rte/src/lib/util/config_schema.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "$schema": "http://json-schema.org/draft-07/schema", - "$id": "http://example.com/example.json", - "type": "object", - "title": "The root schema", - "description": "The root schema comprises the entire JSON document.", - "default": {}, - "examples": [ - { - "alias": "test1", - "content-type": "Migration Test", - "global-field": false, - "paths": [ - { - "from": "rich_text", - "to": "supercharged_rte" - } - ] - } - ], - "required": ["content-type", "paths"], - "properties": { - "alias": { - "$id": "#/properties/alias", - "type": "string", - "title": "The alias schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["test1"] - }, - "branch": { - "$id": "#/properties/branch", - "type": "string", - "title": "The branch schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["test1"] - }, - "stack-api-key": { - "$id": "#/properties/stack-api-key", - "type": "string", - "title": "The Stack api key", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["Migration Test"] - }, - "content-type": { - "$id": "#/properties/content-type", - "type": "string", - "title": "The content-type schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["Migration Test"] - }, - "global-field": { - "$id": "#/properties/global-field", - "type": "boolean", - "title": "The global-field schema", - "description": "An explanation about the purpose of this instance.", - "default": false, - "examples": [false] - }, - "paths": { - "$id": "#/properties/paths", - "type": "array", - "title": "The paths schema", - "description": "An explanation about the purpose of this instance.", - "default": [], - "examples": [ - [ - { - "from": "rich_text", - "to": "supercharged_rte" - } - ] - ], - "additionalItems": true, - "items": { - "$id": "#/properties/paths/items", - "anyOf": [ - { - "$id": "html-path and json-path are required", - "type": "object", - "title": "The first anyOf schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "from": "rich_text", - "to": "supercharged_rte" - } - ], - "required": ["from", "to"], - "properties": { - "from": { - "$id": "#/properties/paths/items/anyOf/0/properties/from", - "type": "string", - "title": "The from schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["rich_text"] - }, - "to": { - "$id": "#/properties/paths/items/anyOf/0/properties/to", - "type": "string", - "title": "The to schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["supercharged_rte"] - } - }, - "additionalProperties": true - } - ] - } - }, - "delay": { - "$id": "#/properties/delay", - "type": "integer", - "title": "The delay schema", - "description": "Provide delay in ms between two entry update", - "default": 1000, - "examples": [100] - }, - "failed-entries": { - "type": "array", - "default": [], - "title": "The failed-entries Schema", - "items": { - "type": "string", - "default": "", - "title": "A Schema", - "examples": [ - "blt1c37c346218e033e, blt6ed6d545cdc2064f, blt0594909c6f0a2e82, blt07fe0dc0d2f89e71, blt6d0d993a944947e8" - ] - }, - "examples": [ - ["blt1c37c346218e033e, blt6ed6d545cdc2064f, blt0594909c6f0a2e82, blt07fe0dc0d2f89e71, blt6d0d993a944947e8"] - ] - }, - "locale": { - "type": "array", - "default": [], - "title": "The locale Schema", - "items": { - "type": "string", - "default": "", - "title": "A Schema", - "examples": ["en-in"] - }, - "paths": { - "$id": "#/properties/paths", - "type": "array", - "title": "The paths schema", - "description": "An explanation about the purpose of this instance.", - "default": [], - "examples": [ - [ - { - "from": "rich_text", - "to": "supercharged_rte" - } - ] - ], - "additionalItems": true, - "items": { - "$id": "#/properties/paths/items", - "anyOf": [ - { - "$id": "#/properties/paths/items/anyOf/0", - "type": "object", - "title": "The first anyOf schema", - "description": "An explanation about the purpose of this instance.", - "default": {}, - "examples": [ - { - "from": "rich_text", - "to": "supercharged_rte" - } - ], - "required": ["from", "to"], - "properties": { - "from": { - "$id": "#/properties/paths/items/anyOf/0/properties/from", - "type": "string", - "title": "The from schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["rich_text"] - }, - "to": { - "$id": "#/properties/paths/items/anyOf/0/properties/to", - "type": "string", - "title": "The to schema", - "description": "An explanation about the purpose of this instance.", - "default": "", - "examples": ["supercharged_rte"] - } - }, - "additionalProperties": true - } - ] - } - }, - "delay": { - "$id": "#/properties/delay", - "type": "integer", - "title": "The delay schema", - "description": "Provide delay in ms between two entry update", - "default": 1000, - "examples": [100] - }, - "failed-entries": { - "type": "array", - "default": [], - "title": "The failed-entries Schema", - "items": { - "type": "string", - "default": "", - "title": "A Schema", - "examples": [ - "blt1c37c346218e033e, blt6ed6d545cdc2064f, blt0594909c6f0a2e82, blt07fe0dc0d2f89e71, blt6d0d993a944947e8" - ] - }, - "examples": [ - ["blt1c37c346218e033e, blt6ed6d545cdc2064f, blt0594909c6f0a2e82, blt07fe0dc0d2f89e71, blt6d0d993a944947e8"] - ] - }, - "locale": { - "type": "array", - "default": [], - "title": "The locale Schema", - "items": { - "type": "string", - "default": "", - "title": "A Schema", - "examples": ["en-in"] - }, - "examples": [["en-in"]] - }, - "batch-limit": { - "type": "integer", - "default": 50, - "title": "The batch-limit Schema", - "examples": [30], - "maximum": 100, - "minimum": 1 - } - }, - "batch-limit": { - "type": "integer", - "default": 50, - "title": "The batch-limit Schema", - "examples": [30], - "maximum": 100, - "minimum": 1 - } - }, - "oneOf": [ - { - "type": "object", - "title": "stack-api-key", - "required": ["stack-api-key"] - }, - { - "type": "object", - "title": "alias", - "required": ["alias"] - } - ], - "additionalProperties": true -} diff --git a/packages/contentstack-migrate-rte/src/lib/util/index.js b/packages/contentstack-migrate-rte/src/lib/util/index.js deleted file mode 100644 index fef9df0159..0000000000 --- a/packages/contentstack-migrate-rte/src/lib/util/index.js +++ /dev/null @@ -1,720 +0,0 @@ -const { Command } = require('@contentstack/cli-command'); -const command = new Command(); -const chalk = require('chalk'); -const { - isEmpty, - find, - get, - isArray, - isUndefined, - set, - flatten, - cloneDeep, - isNil, - isNull, - isPlainObject, -} = require('lodash'); -const Validator = require('jsonschema').Validator; -const configSchema = require('./config_schema.json'); -const { JSDOM } = require('jsdom'); -const collapseWithSpace = require('collapse-whitespace'); -const { htmlToJson } = require('@contentstack/json-rte-serializer'); -const nodePath = require('path'); -const { - cliux, - managementSDKClient, - isAuthenticated, - doesBranchExist, - pathValidator, -} = require('@contentstack/cli-utilities'); -const packageValue = require('../../../package.json'); -const isBlank = (variable) => { - return isNil(variable) || isEmpty(variable); -}; - -async function getStack(data) { - const stackOptions = {}; - const options = { - host: data.host, - application: `json-rte-migration/${packageValue.version}`, - timeout: 120000, - }; - if (data.token) { - const tokenDetails = data.token; - stackOptions['api_key'] = tokenDetails.apiKey; - options['management_token'] = tokenDetails.token; // need to pass management token so that the sdk doesn't get configured with authtoken (throws error in case of oauth, if the provided stack doesn't belong to the org selected while logging in with oauth) - stackOptions['management_token'] = tokenDetails.token; - } - if (data.stackApiKey) { - if (!isAuthenticated()) { - throw new Error( - 'Please login to proceed further. Or use `--alias` instead of `--stack-api-key` to proceed without logging in.', - ); - } - stackOptions['api_key'] = data.stackApiKey; - } - if (data.branch) options.branchName = data.branch; - const client = await managementSDKClient(options); - const stack = client.stack(stackOptions); - - stack.host = data.host; - if (data.branch) { - let branchData = await doesBranchExist(stack, data.branch); - if (branchData && branchData.errorCode) { - throw new Error(branchData.errorMessage); - } - } - return stack; -} - -const deprecatedFields = { - configPath: 'config-path', - content_type: 'content-type', - isGlobalField: 'global-field', - htmlPath: 'html-path', - jsonPath: 'json-path', -}; -function normalizeFlags(config) { - let normalizedConfig = cloneDeep(config); - Object.keys(deprecatedFields).forEach((key) => { - if (normalizedConfig.hasOwnProperty(key)) { - normalizedConfig[deprecatedFields[key]] = normalizedConfig[key]; - delete normalizedConfig[key]; - } - }); - return normalizedConfig; -} - -const customBar = cliux.progress({ - format: '{title} ' + '| {bar} | {value}/{total} Entries', - barCompleteChar: '\u2588', - barIncompleteChar: '\u2591', - stream: process.stdout, -}); -async function getConfig(flags) { - try { - let config; - if (flags['config-path']) { - const configPath = flags['config-path']; - config = require(pathValidator(configPath)); - } else { - config = { - 'content-type': flags['content-type'], - 'global-field': flags['global-field'], - paths: [ - { - from: flags['html-path'] || flags.htmlPath, - to: flags['json-path'] || flags.jsonPath, - }, - ], - delay: flags.delay, - 'batch-limit': flags['batch-limit'], - }; - if (flags.locale) { - config.locale = [flags.locale]; - } - if (flags.branch) { - config.branch = flags['branch']; - } - if (flags.alias) { - config.alias = flags.alias; - } - if (flags['stack-api-key']) { - config['stack-api-key'] = flags['stack-api-key']; - } - } - if (checkConfig(config)) { - let confirmed = await confirmConfig(config, flags.yes); - if (confirmed) { - return config; - } - throw new Error('User aborted the command.'); - } - } catch (error) { - if (error.code === 'ENOENT' || error.code === 'MODULE_NOT_FOUND') { - throw new Error('The specified path to config file does not exist.'); - } - if (error.schema && error.errors && error.errors[0]) { - throwConfigError(error.errors[0]); - } - throw error; - } -} -function getToken(alias) { - try { - return command.getToken(alias); - } catch (error) { - throw new Error('Invalid alias provided for the management token.'); - } -} -function getContentType(stack, contentTypeUid) { - return stack - .contentType(contentTypeUid) - .fetch({ include_global_field_schema: true }) - .then((content) => content) - .catch((error) => { - throw new Error(error.errorMessage || error.message); - }); -} -function getGlobalField(stack, globalFieldUid) { - return stack - .globalField(globalFieldUid) - .fetch({ include_content_types: true }) - .then((content) => content) - .catch((error) => { - throw new Error(error.errorMessage || error.message); - }); -} -function throwConfigError(error) { - const { name, path, argument } = error; - let fieldName = path.join('.'); - if (fieldName === '') { - fieldName = argument || 'Config'; - } - if (name === 'required') { - throw new Error(`${fieldName} is mandatory while defining config.`); - } else if (name === 'type') { - throw new Error(`Invalid key type. ${fieldName} must be of ${argument[0] || 'string'} type(s).`); - } else if (name === 'minimum' || name === 'maximum') { - throw new Error(`${fieldName} must be between 1 and 100.`); - } -} -function checkConfig(config) { - let v = new Validator(); - let res = v.validate(config, configSchema, { throwError: true, nestedErrors: true }); - return res.valid; -} -function prettyPrint(data) { - console.log(chalk.yellow('Configuration to be used for executing this command:')); - console.log(chalk.grey(JSON.stringify(data, null, 2))); - console.log('\n'); -} -async function confirmConfig(config, skipConfirmation) { - if (skipConfirmation) { - return Promise.resolve(true); - } - prettyPrint(config); - return await cliux.confirm('Do you want to continue with this configuration ? [yes or no]'); -} -const delay = (ms) => new Promise((res) => setTimeout(res, ms)); - -async function updateEntriesInBatch(contentType, config, skip = 0, retry = 0, locale = undefined) { - let title = `Migrating entries for ${contentType.uid}`; - let extraParams = {}; - if (locale) { - extraParams.locale = locale; - extraParams.query = { locale: locale }; - } - if (config['failed-entries'] && config['failed-entries'].length > 0) { - title = `Migrating failed entries for ${contentType.uid}`; - if (extraParams.query) { - extraParams.query['uid'] = { $in: config['failed-entries'] }; - } else { - extraParams = { query: { uid: { $in: config['failed-entries'] } } }; - } - } - let entryQuery = { - include_count: true, - ...extraParams, - skip: skip, - limit: config['batch-limit'] || 50, - }; - try { - await contentType - .entry() - .query(entryQuery) - .find() - .then(async (entriesResponse) => { - try { - customBar.start(entriesResponse.count, skip, { - title: title, - }); - } catch (error) {} - skip += entriesResponse.items.length; - let entries = entriesResponse.items; - - for (const entry of entries) { - try { - customBar.increment(); - } catch (error) {} - await updateSingleEntry(entry, contentType, config); - await delay(config.delay || 1000); - } - if (skip === entriesResponse.count) { - return Promise.resolve(); - } - await updateEntriesInBatch(contentType, config, skip, 0, locale); - }); - } catch (error) { - console.error(`Error while fetching batch of entries: ${error.message}`); - if (retry < 3) { - retry += 1; - console.error(`Retrying again in 5 seconds... (${retry}/3)`); - await delay(5000); - await updateEntriesInBatch(contentType, config, skip, retry, locale); - } else { - throw new Error(`Max retry exceeded: Error while fetching batch of entries: ${error.message}`); - } - } -} -async function updateSingleContentTypeEntries(stack, contentTypeUid, config) { - let contentType = await getContentType(stack, contentTypeUid); - let schema = contentType.schema; - for (const path of config.paths) { - if (!isEmpty(schema)) { - isPathValid(contentType.schema, path); - } else { - throw new Error(`The ${contentTypeUid} content type contains an empty schema.`); - } - } - if (config.locale && isArray(config.locale) && config.locale.length > 0) { - const locales = config.locale; - for (const locale of locales) { - console.log(`\nMigrating entries for "${contentTypeUid}" Content-type in "${locale}" locale`); - await updateEntriesInBatch(contentType, config, 0, 0, locale); - await delay(config.delay || 1000); - } - } else { - await updateEntriesInBatch(contentType, config); - } - config.contentTypeCount += 1; - try { - customBar.stop(); - } catch (error) {} -} -async function updateSingleContentTypeEntriesWithGlobalField(contentType, config) { - let schema = contentType.schema; - for (const path of config.paths) { - isPathValid(schema, path); - } - if (config.locale && isArray(config.locale) && config.locale.length > 0) { - const locales = config.locale; - for (const locale of locales) { - console.log(`\nMigrating entries for ${contentType.uid} in locale ${locale}`); - await updateEntriesInBatch(contentType, config, 0, 0, locale); - await delay(config.delay || 1000); - } - } else { - await updateEntriesInBatch(contentType, config); - } - config.contentTypeCount += 1; -} -async function updateSingleEntry(entry, contentType, config) { - let schema = contentType.schema; - let paths = config.paths; - let entryUploadPath = uploadPaths(schema); - entryUploadPath = Object.keys(entryUploadPath); - for (const path of paths) { - let htmlPath = path.from.split('.'); - let jsonPath = path.to.split('.'); - let htmlRteUid = htmlPath[htmlPath.length - 1]; - let jsonRteUid = jsonPath[jsonPath.length - 1]; - let parentPath = htmlPath.slice(0, htmlPath.length - 1).join('.'); - setEntryData(parentPath, entry, schema, { htmlRteUid, jsonRteUid }); - } - try { - for (const filePath of entryUploadPath) { - let fileFieldPath = filePath.split('.'); - let fileUid = fileFieldPath[fileFieldPath.length - 1]; - let parentFileFieldPath = fileFieldPath.slice(0, fileFieldPath.length - 1).join('.'); - unsetResolvedUploadData(parentFileFieldPath, entry, schema, { fileUid }); - } - } catch (error) { - console.error(`Error while unsetting resolved upload data: ${error.message}`); - } - await handleEntryUpdate(entry, config, 0); -} -async function handleEntryUpdate(entry, config, retry = 0) { - try { - await entry.update({ locale: entry.locale }); - config.entriesCount += 1; - } catch (error) { - console.log(chalk.red(`Error while updating '${entry.uid}' entry`)); - if (error.errors && isPlainObject(error.errors)) { - const errVal = Object.entries(error.errors); - errVal.forEach(([key, vals]) => { - console.log(chalk.red(` ${key}:- ${vals.join(',')}`)); - }); - } else { - console.log(chalk.red(`Error stack: ${error}`)); - } - if (retry < 3) { - retry += 1; - console.log(`Retrying again in 5 seconds... (${retry}/3)`); - await delay(5000); - await handleEntryUpdate(entry, config, retry); - } else { - if ( - config && - config.errorEntriesUid && - config.errorEntriesUid[entry.content_type_uid] && - config.errorEntriesUid[entry.content_type_uid][entry.locale] - ) { - config.errorEntriesUid[entry.content_type_uid][entry.locale].push(entry.uid); - } else { - set(config, ['errorEntriesUid', entry.content_type_uid, entry.locale], [entry.uid]); - } - } - } -} -function traverseSchemaForField(schema, path, field_uid) { - let paths = path.split('.'); - if (paths.length === 1) { - let field = find(schema, (o) => { - return o.uid === paths[0]; - }); - if (Boolean(field) && field.uid === field_uid) { - return field; - } - } else { - let fieldUid = paths.shift(); - let fieldSchema = find(schema, { uid: fieldUid }); - if (!isEmpty(fieldSchema)) { - if (fieldSchema.data_type === 'group' || fieldSchema.data_type === 'global_field') { - return traverseSchemaForField(fieldSchema.schema, paths.join('.'), field_uid); - } - if (fieldSchema.data_type === 'blocks') { - let blockUid = paths.shift(); - let block = find(fieldSchema.blocks, { uid: blockUid }); - if (!isEmpty(block) && block.schema) { - return traverseSchemaForField(block.schema, paths.join('.'), field_uid); - } - } - } - } - return {}; -} -function isPathValid(schema, path) { - let pathFrom = path.from.split('.'); - let htmlParentPath = pathFrom.slice(0, pathFrom.length - 1).join('.'); - const rteUid = pathFrom[pathFrom.length - 1]; - let rteSchema = traverseSchemaForField(schema, path.from, rteUid); - if (isEmpty(rteSchema)) { - throw new Error(`The specified path to ${rteUid} HTML RTE does not exist.`); - } - let ishtmlRteMultiple = rteSchema.multiple || false; - if (rteSchema.field_metadata && rteSchema.field_metadata.allow_rich_text) { - let pathTo = path.to.split('.'); - let jsonParentPath = pathTo.slice(0, pathTo.length - 1).join('.'); - - const jsonUid = pathTo[pathTo.length - 1]; - let jsonSchema = traverseSchemaForField(schema, path.to, jsonUid); - if (isEmpty(jsonSchema)) { - throw new Error(`The specified path to ${jsonUid} JSON RTE does not exist.`); - } - let isJSONRteMultiple = jsonSchema.multiple || false; - - if (jsonSchema.field_metadata && jsonSchema.field_metadata.allow_json_rte) { - if (htmlParentPath === jsonParentPath) { - if (ishtmlRteMultiple === isJSONRteMultiple) { - return true; - } - throw new Error( - `Cannot convert "${ishtmlRteMultiple ? 'Multiple' : 'Single'}" type HTML RTE to "${ - isJSONRteMultiple ? 'Multiple' : 'Single' - }" type JSON RTE.`, - ); - } else { - throw new Error( - 'To complete migration, HTML RTE and JSON RTE should be present at the same field depth level.', - ); - } - } else { - throw new Error(`The specified path to ${jsonUid} JSON RTE does not exist.`); - } - } else { - throw new Error(`The specified path to ${rteUid} HTML RTE does not exist.`); - } -} -function setEntryData(path, entry, schema, fieldMetaData) { - let paths = path.split('.'); - if (paths.length === 1 && paths[0] === '') { - paths.shift(); - } - if (paths.length > 0) { - let field = find(schema, { - uid: paths[0], - }); - if (field) { - if (field.data_type === 'group' || field.data_type === 'global_field') { - paths.shift(); - - let sub_entry_data = get(entry, field.uid); - if (isArray(sub_entry_data)) { - for (const sub_data of sub_entry_data) { - setEntryData(paths.join('.'), sub_data, field.schema, fieldMetaData); - } - } else { - setEntryData(paths.join('.'), sub_entry_data, field.schema, fieldMetaData); - } - } else if (field.data_type === 'blocks') { - if (field.blocks) { - let ModularBlockUid = paths.shift(); - let blockUid = paths.shift(); - let blockField = find(field.blocks, { uid: blockUid }); - if (blockField) { - let modularBlockDetails = get(entry, ModularBlockUid) || []; - for (const blocks of modularBlockDetails) { - let blockdata = get(blocks, blockUid); - if (blockdata) { - setEntryData(paths.join('.'), blockdata, blockField.schema, fieldMetaData); - } - } - } - } - } - } - } else if (paths.length === 0) { - if (entry) { - const { htmlRteUid, jsonRteUid } = fieldMetaData; - const htmlValue = get(entry, htmlRteUid); - // check if html field exist in traversed path - if (!isUndefined(htmlValue)) { - // if Rte field is multiple - if (isArray(htmlValue)) { - for (let i = 0; i < htmlValue.length; i++) { - let html = htmlValue[i]; - setJsonValue(html, entry, `${jsonRteUid}.${i}`); - } - } else { - setJsonValue(htmlValue, entry, jsonRteUid); - } - } - } - } -} - -function unsetResolvedUploadData(path, entry, schema, fieldMetaData) { - let paths = path.split('.'); - if (paths.length === 1 && paths[0] === '') { - paths.shift(); - } - if (paths.length > 0) { - let field = find(schema, { - uid: paths[0], - }); - if (field) { - if (field.data_type === 'group' || field.data_type === 'global_field') { - paths.shift(); - - let sub_entry_data = get(entry, field.uid); - if (isArray(sub_entry_data)) { - for (const sub_data of sub_entry_data) { - unsetResolvedUploadData(paths.join('.'), sub_data, field.schema, fieldMetaData); - } - } else { - unsetResolvedUploadData(paths.join('.'), sub_entry_data, field.schema, fieldMetaData); - } - } else if (field.data_type === 'blocks') { - if (field.blocks) { - let ModularBlockUid = paths.shift(); - let blockUid = paths.shift(); - let blockField = find(field.blocks, { uid: blockUid }); - if (blockField) { - let modularBlockDetails = get(entry, ModularBlockUid) || []; - for (const blocks of modularBlockDetails) { - let blockdata = get(blocks, blockUid); - if (blockdata) { - unsetResolvedUploadData(paths.join('.'), blockdata, blockField.schema, fieldMetaData); - } - } - } - } - } - } - } else if (paths.length === 0) { - if (entry) { - const { fileUid } = fieldMetaData; - const fieldValue = get(entry, fileUid); - if (!isUndefined(fieldValue) && !isNull(fieldValue)) { - if (isArray(fieldValue)) { - for (let i = 0; i < fieldValue.length; i++) { - const singleFile = fieldValue[i]; - if (!isUndefined(singleFile.uid)) { - set(entry, `${fileUid}.${i}`, singleFile.uid); - } - } - } else if (!isUndefined(fieldValue.uid)) { - set(entry, fileUid, fieldValue.uid); - } - } - } - } -} -function setJsonValue(html, entry, path) { - let doc = convertHtmlToJson(html); - set(entry, path, doc); -} -function convertHtmlToJson(html) { - const dom = new JSDOM(html); - let htmlDoc = dom.window.document.querySelector('body'); - collapseWithSpace(htmlDoc); - let doc; - try { - doc = htmlToJson(htmlDoc); - applyDirtyAttributesToBlock(doc); - } catch (error) { - throw new Error('Error while converting html '.concat(error.message)); - } - return doc; -} -function applyDirtyAttributesToBlock(block) { - if (block.hasOwnProperty('text')) { - return block; - } - let children = flatten([...(block.children || [])].map(applyDirtyAttributesToBlock)); - if (block.hasOwnProperty('type')) { - set(block, 'attrs.dirty', true); - } - block.children = children; - return block; -} -async function updateContentTypeForGlobalField(stack, global_field, config) { - const globalField = await getGlobalField(stack, global_field); - if (isEmpty(globalField.schema)) { - throw new Error(`The ${global_field} Global field contains an empty schema.`); - } - let allReferredContentTypes = globalField.referred_content_types; - if (!isEmpty(allReferredContentTypes)) { - for (const contentType of allReferredContentTypes) { - let contentTypeInstance = await getContentType(stack, contentType.uid); - const schema = contentTypeInstance.schema; - if (!isEmpty(schema) && !isUndefined(schema)) { - let globalFieldPaths = getGlobalFieldPath(contentTypeInstance.schema, global_field); - let newConfig = cloneDeep(config); - updateMigrationPath(globalFieldPaths, newConfig); - await updateSingleContentTypeEntriesWithGlobalField(contentTypeInstance, newConfig); - config.contentTypeCount = newConfig.contentTypeCount; - config.entriesCount = newConfig.entriesCount; - config.errorEntriesUid = newConfig.errorEntriesUid; - } else { - throw new Error(`The ${contentType.uid} content type referred in ${globalField.uid} contains an empty schema.`); - } - } - try { - customBar.stop(); - } catch (error) {} - } else { - throw new Error(`${globalField.uid} Global field is not referred in any content type.`); - } -} -function updateMigrationPath(globalFieldPaths, config) { - const newPath = []; - for (const path of config.paths) { - for (const globalFieldPath of globalFieldPaths) { - newPath.push({ from: globalFieldPath + '.' + path.from, to: globalFieldPath + '.' + path.to }); - } - } - config.paths = newPath; -} -function getGlobalFieldPath(schema, globalFieldUid) { - let paths = []; - - function genPath(prefix, path) { - return isEmpty(prefix) ? path : [prefix, path].join('.'); - } - - function traverse(fields, path) { - path = path || ''; - for (const field of fields) { - let currPath = genPath(path, field.uid); - if (field.data_type === 'group') { - traverse(field.schema, currPath); - } - - if ( - field.data_type === 'global_field' && - isUndefined(field.schema) === false && - isEmpty(field.schema) === false - ) { - if (field.reference_to === globalFieldUid) { - paths.push(currPath); - } - } - if (field.data_type === 'blocks') { - field.blocks.forEach(function (block) { - if (block.schema) { - if (block.reference_to && block.reference_to === globalFieldUid) { - paths.push(currPath + '.' + block.uid); - } - traverse(block.schema, currPath + '.' + block.uid); - } - }); - } - // experience_container - if (field.data_type === 'experience_container') { - if (field.variations) { - field.variations.forEach(function (variation) { - if (variation.schema) traverse(variation.schema, currPath + '.' + variation.uid); - }); - } - } - } - } - - if (!isEmpty(schema)) { - traverse(schema, ''); - } - - return paths; -} - -/* - Get the upload paths - */ -function uploadPaths(schema) { - return getPaths(schema, 'file'); -} - -/* -Generic function to get schema paths -*/ -function getPaths(schema, type) { - const paths = {}; - - function genPath(prefix, path) { - return isBlank(prefix) ? path : [prefix, path].join('.'); - } - - function traverse(fields, path) { - path = path || ''; - for (const element of fields) { - const field = element; - const currPath = genPath(path, field.uid); - - if (field.data_type === type) paths[currPath] = true; - - if (field.data_type === 'group') traverse(field.schema, currPath); - - if (field.data_type === 'global_field' && isUndefined(field.schema) === false && isEmpty(field.schema) === false) - traverse(field.schema, currPath); - if (field.data_type === 'blocks') { - field.blocks.forEach(function (block) { - if (block.schema) traverse(block.schema, currPath + '.' + block.uid); - }); - } - // experience_container - if (field.data_type === 'experience_container') { - field.variations.forEach(function (variation) { - if (variation.schema) traverse(variation.schema, currPath + '.' + variation.uid); - }); - } - } - } - - traverse(schema); - - return paths; -} - -module.exports = { - getStack, - getConfig, - getToken, - getContentType, - updateEntriesInBatch, - updateSingleContentTypeEntries, - updateContentTypeForGlobalField, - command, - normalizeFlags, -}; diff --git a/packages/contentstack-migrate-rte/test/commands/json-migration.test.js b/packages/contentstack-migrate-rte/test/commands/json-migration.test.js deleted file mode 100644 index ef7c7f4c0d..0000000000 --- a/packages/contentstack-migrate-rte/test/commands/json-migration.test.js +++ /dev/null @@ -1,940 +0,0 @@ -const { runCommand } = require('@oclif/test'); -const sinon = require('sinon'); -const qs = require('querystring'); -const nock = require('nock'); -const { cliux } = require('@contentstack/cli-utilities'); -const { expect } = require('chai'); -const { fancy } = require('fancy-test'); -const { - getToken, - getContentType, - getEntries, - getExpectedOutput, - getGlobalField, - getEntriesOnlyUID, - getEntry, -} = require('../utils'); -const omitDeep = require('omit-deep-lodash'); -const { isEqual, cloneDeep } = require('lodash'); -const { command } = require('../../src/lib/util'); - -describe('Migration Config validation', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback - .withArgs('test1') - .returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }) - .withArgs('invalidAlias') - .throws("Token with alias 'invalidAlias' was not found"); - - fancy - .stub(cliux, 'confirm', () => false) - .it('deny config confirmation', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('User aborted the command.'); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('throw error on Empty paths', async () => { - const {error} = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/configWithEmptyPath.json', '--yes'], - { root: process.cwd() }, - ); - expect(error.message).to.contain('No value provided for the "paths" property in config.'); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid config type', async () => { - const {error} = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', '../test/dummy/config/invalidConfig.json', '--yes'], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The specified path to config file does not exist.'); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .it('throw error on config without alias property', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('is not exactly one from "stack-api-key","alias"'); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalidAlias', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'invalidAlias', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('Invalid alias provided for the management token.'); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid config file', async () => { - const { error } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/configWithInvalidPath.json', '--yes'], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The specified path to config file does not exist.'); - }); -}); -describe('Content Type with Single RTE Field of Single Type', function () { - this.timeout(1000000); - let token = getToken('test1'); - beforeEach(() => { - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/content_types\/(\w)*/) - .query({ - include_global_field_schema: true, - }) - .reply((uri) => { - var match = uri.match(/\/v3\/content_types\/((\w)*)/); - return getContentType(match[1]); - }); - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/content_types\/((\w)*)\/entries/) - .query({ - include_count: true, - skip: 0, - limit: 100, - 'only[Base][]': 'uid', - }) - .reply(200, (uri) => { - var match = uri.match(/\/v3\/content_types\/((\w)*)\/entries/); - return getEntriesOnlyUID(match[1]); - }); - - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/content_types\/((\w)*)\/entries/) - .query(true) - .reply(200, function (uri) { - let query = this.req.options.search; - query = query.substring(1); - let locale = undefined; - query = qs.parse(query); - if (query.locale) { - locale = query.locale; - } - var match = uri.match(/\/v3\/content_types\/((\w)*)\/entries/); - return getEntries(match[1], locale); - }); - // mock get locale - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/content_types\/((\w)*)\/entries\/((\w)*)\/locale/) - .query({ - deleted: false, - }) - .reply(200, () => { - return { - locales: [ - { - code: 'en-in', - localized: true, - }, - { - code: 'en-us', - }, - ], - }; - }); - - // mock single entry fetch - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/content_types\/((\w)*)\/entries\/((\w)*)/) - .query(true) - .reply(200, (uri) => { - const query = this.queries; - let match = uri.match(/\/v3\/content_types\/((\w)*)\/entries\/((\w)*)/); - if (query.locale) { - return getEntry(match[1], match[3], query.locale); - } else { - return getEntry(match2[1], match2[3]); - } - }); - - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .put(/\/v3\/content_types\/((\w)*)\/entries/) - .reply((uri, body) => { - let match = uri.match(/\/v3\/content_types\/((\w)*)\/entries\/((\w)*)\?locale=((\w|-)*)/); - let responseModified = cloneDeep(omitDeep(body, ['uid'])); - let expectedResponse = omitDeep(getExpectedOutput(match[1], match[3], match[5]), ['uid']); - expectedResponse = cloneDeep(expectedResponse); - if (isEqual(responseModified, expectedResponse)) { - return [ - 200, - { - notice: 'Entry updated successfully.', - entry: {}, - }, - ]; - } - return [ - 400, - { - notice: 'Update Failed.', - error_message: 'Entry update failed.', - entry: {}, - }, - ]; - }); - }); - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file w/o locale', async () => { - const { stdout } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/config.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 2 Entrie(s)'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file w/ locale', async () => { - const { stdout } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/config_locale.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file w/ multiple locale', async () => { - const { stdout } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/config-locale-2.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 3 Entrie(s)'); - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using flags (w/o locale)', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 2 Entrie(s)'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using flags w/ locale', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--locale', - 'en-in', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid html rte path', async () => { - const { error } = await runCommand([ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor.invalidPath', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ],{ root: process.cwd() }); - expect(error.message).to.contain('The specified path to invalidPath HTML RTE does not exist.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid html rte field schema', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithinvalidhtmlrteschema', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The specified path to rich_text_editor HTML RTE does not exist.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid json rte field schema', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithinvalidjsonrteschema', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The specified path to supercharged_rte JSON RTE does not exist.'); - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid json rte path', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithsinglerte', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte.invalidPath', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The specified path to invalidPath JSON RTE does not exist.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on migration of Mutiple Html rte with single Json rte', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--config-path', - './test/dummy/config/configForInvalidContentType.json', - '--yes', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('Cannot convert "Multiple" type HTML RTE to "Single" type JSON RTE.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on content type with empty schema', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithemptyschema', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The contenttypewithemptyschema content type contains an empty schema.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on different level rte migration', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypedifferentlevelrte', - '--html-path', - 'group.rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain( - 'To complete migration, HTML RTE and JSON RTE should be present at the same field depth level.', - ); - }); - - fancy - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid contenttype', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'invalidContentType', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain("The Content Type 'invalidContentType' was not found. Please try again."); - }); - - fancy - .skip() - .stub(cliux, 'confirm', () => true) - .stub(command, 'getToken', getTokenCallback) - .it('notify user on entry update failed', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithentryupdateerror', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain( - `Faced issue while migrating some entrie(s) for "contenttypewithentryupdateerror" Content-type in "en-us" locale,"blta9b16ac2827c54ed, blta9b16ac2827c54e1"`, - ); - }); - - fancy - .skip() - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('should have proper json structure for images migrated from HTML RTE', async () => { - const { stdout } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/config-for-images-in-rte.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.match(/Updated \d+ Content Type\(s\) and \d+ Entrie\(s\)/); - }); -}); -describe('Global Field Migration', () => { - let token = getToken('test1'); - beforeEach(() => { - nock(`${command.cmaAPIUrl}`, { - reqheaders: { - api_key: token.apiKey, - authorization: token.token, - }, - }) - .persist() - .get(/\/v3\/global_fields\/([a-zA-Z_])*/) - .query({ - include_content_types: true, - }) - .reply((uri) => { - var match = uri.match(/\/v3\/global_fields\/(([a-zA-Z_])*)/); - return getGlobalField(match[1]); - }); - }); - - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file', async () => { - const { stdout } = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/configForGlobalField.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 2 Content Type(s) and 2 Entrie(s)'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on global field with empty referred content_types', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'globalfieldwithemptycontenttype', - '--global-field', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('globalfieldformigration Global field is not referred in any content type.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on global field with invalid content_type', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'globalfieldwithinvalidcontenttype', - '--global-field', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain( - 'The contenttypewithemptyschema content type referred in globalfieldformigration contains an empty schema.', - ); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on global field with empty schema', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'globalfieldwithemptyschema', - '--global-field', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain('The globalfieldwithemptyschema Global field contains an empty schema.'); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on global field with empty schema content_type', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'globalfieldwithemptyschemacontenttype', - '--global-field', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain( - 'The contenttypewithemptyschema content type referred in globalfieldwithemptyschemacontenttype contains an empty schema.', - ); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('throw error on invalid global_field uid', async () => { - const { error } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'invalidUidGlobalfield', - '--global-field', - '--html-path', - 'rich_text_editor', - '--json-path', - 'supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(error.message).to.contain("The Global Field 'invalidUidGlobalfield' was not found. Please try again."); - }); -}); - -describe('Content Type with single rte of multiple type', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file', async () => { - const {stdout} = await runCommand( - ['cm:entries:migrate-html-rte', '--config-path', './test/dummy/config/configForMultipleRte.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); -}); - -describe('Content Type with Single RTE inside modular block', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using Flags', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithmodularblock', - '--html-path', - 'modular_blocks.test1.rich_text_editor', - '--json-path', - 'modular_blocks.test1.supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); -}); - -describe('Content Type with Single RTE of type multiple inside group', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using Flags', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithgroup', - '--html-path', - 'group.rich_text_editor', - '--json-path', - 'group.supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); -}); - -describe('Content Type with Single RTE inside group of type multiple', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using Flags', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithmultiplegroup', - '--html-path', - 'group.rich_text_editor', - '--json-path', - 'group.supercharged_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); -}); - -// Check this one -describe('Content Type with multiple file field', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using Flags', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content-type', - 'contenttypewithfilefield', - '--html-path', - 'rich_text_editor', - '--json-path', - 'json_rte', - '--yes', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - expect(stdout).to.contain('Updated 1 Content Type(s) and 1 Entrie(s)'); - }); -}); - -describe('Migration with old flags and command', () => { - const getTokenCallback = sinon.stub(); - getTokenCallback.withArgs('test1').returns({ - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using config file w/o locale', async (ctx) => { - const { stdout } = await runCommand( - ['cm:migrate-rte', '--configPath', './test/dummy/config/config.json', '--yes'], - { root: process.cwd() }, - ); - expect(stdout).to.contain( - `WARNING!!! You're using the old (soon to be deprecated) Contentstack CLI flags (-p, --configPath). We recommend you to use the updated flags (-c, --config-path).`, - ); - }); - - fancy - .stub(cliux, 'confirm', () => 'yes') - .stub(command, 'getToken', getTokenCallback) - .it('execute using flags (w/o locale)', async () => { - const { stdout } = await runCommand( - [ - 'cm:entries:migrate-html-rte', - '--alias', - 'test1', - '--content_type', - 'contenttypewithsinglerte', - '--htmlPath', - 'rich_text_editor', - '--jsonPath', - 'supercharged_rte', - '--delay', - '50', - ], - { root: process.cwd() }, - ); - - expect(stdout).to.contain( - `WARNING!!! You're using the old (soon to be deprecated) Contentstack CLI flags (-c, --content_type). We recommend you to use the updated flags (--content-type).`, - ); - expect(stdout).to.contain( - `WARNING!!! You're using the old (soon to be deprecated) Contentstack CLI flags (-h, --htmlPath). We recommend you to use the updated flags (--html-path)`, - ); - expect(stdout).to.contain( - `WARNING!!! You're using the old (soon to be deprecated) Contentstack CLI flags (-j, --jsonPath). We recommend you to use the updated flags (--json-path).`, - ); - }); -}); diff --git a/packages/contentstack-migrate-rte/test/dummy/config/config-for-images-in-rte.json b/packages/contentstack-migrate-rte/test/dummy/config/config-for-images-in-rte.json deleted file mode 100644 index 4b12389ccc..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/config-for-images-in-rte.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": "test1", - "content-type": "rte_images", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/config-locale-2.json b/packages/contentstack-migrate-rte/test/dummy/config/config-locale-2.json deleted file mode 100644 index 9405011617..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/config-locale-2.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "alias": "test1", - "content-type": "contenttypewithsinglerte", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50, - "locale": ["en-in", "en-us"] -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/config-locale.json b/packages/contentstack-migrate-rte/test/dummy/config/config-locale.json deleted file mode 100644 index a54e527c80..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/config-locale.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "alias": "test1", - "content_type": "contenttypewithsinglerte", - "isGlobalField": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50, - "locale":["en-in"] -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/dummy/config/config.json b/packages/contentstack-migrate-rte/test/dummy/config/config.json deleted file mode 100644 index 337aa4d3ae..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/config.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": "test1", - "content-type": "contenttypewithsinglerte", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/configForGlobalField.json b/packages/contentstack-migrate-rte/test/dummy/config/configForGlobalField.json deleted file mode 100644 index 80c572f488..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/configForGlobalField.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": "test1", - "content-type": "globalfieldformigration", - "global-field": true, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/configForInvalidContentType.json b/packages/contentstack-migrate-rte/test/dummy/config/configForInvalidContentType.json deleted file mode 100644 index 3506c60cc4..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/configForInvalidContentType.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": "test1", - "content-type": "contenttypewithinvalidrtetype", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/configForMultipleRte.json b/packages/contentstack-migrate-rte/test/dummy/config/configForMultipleRte.json deleted file mode 100644 index a17c5bb5ba..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/configForMultipleRte.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": "test1", - "content-type": "contenttypewithmultiplerte", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/configWithEmptyPath.json b/packages/contentstack-migrate-rte/test/dummy/config/configWithEmptyPath.json deleted file mode 100644 index 0361c38197..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/configWithEmptyPath.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "alias": "test2", - "content-type": "contenttypewithsinglerte", - "global-field": false, - "paths": [], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/config_locale.json b/packages/contentstack-migrate-rte/test/dummy/config/config_locale.json deleted file mode 100644 index ffd4453468..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/config_locale.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "alias": "test1", - "content-type": "contenttypewithsinglerte", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "locale":["en-in"], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/config/invalidConfig.json b/packages/contentstack-migrate-rte/test/dummy/config/invalidConfig.json deleted file mode 100644 index 2f939adc07..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/config/invalidConfig.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "alias": 123, - "content-type": "contenttypewithsinglerte", - "global-field": false, - "paths": [ - { - "from": "rich_text_editor", - "to": "supercharged_rte" - } - ], - "delay": 50 -} diff --git a/packages/contentstack-migrate-rte/test/dummy/contentTypeResponse.json b/packages/contentstack-migrate-rte/test/dummy/contentTypeResponse.json deleted file mode 100644 index 16f5e630e8..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/contentTypeResponse.json +++ /dev/null @@ -1,3014 +0,0 @@ -{ - "contenttypewithsinglerte": { - "content_type": { - "created_at": "2021-06-18T08:28:40.550Z", - "updated_at": "2021-06-18T08:29:11.162Z", - "title": "ContentTypeWithSingleRTE", - "uid": "contenttypewithsinglerte", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithinvalidjsonrteschema": { - "content_type": { - "created_at": "2021-06-18T08:28:40.550Z", - "updated_at": "2021-06-18T08:29:11.162Z", - "title": "ContentTypeWithSingleRTE", - "uid": "contenttypewithsinglerte", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypedifferentlevelrte": { - "content_type": { - "created_at": "2021-06-22T11:35:00.339Z", - "updated_at": "2021-06-22T11:35:19.016Z", - "title": "contenttypedifferentlevelrte", - "uid": "contenttypedifferentlevelrte", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "group", - "display_name": "Group", - "field_metadata": { - "description": "", - "instruction": "" - }, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - } - ], - "uid": "group", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithinvalidhtmlrteschema": { - "content_type": { - "created_at": "2021-06-18T08:28:40.550Z", - "updated_at": "2021-06-18T08:29:11.162Z", - "title": "contenttypewithinvalidhtmlrteschema", - "uid": "contenttypewithinvalidhtmlrteschema", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttype1forglobalfield": { - "content_type": { - "created_at": "2021-06-21T09:35:10.023Z", - "updated_at": "2021-06-21T09:35:58.489Z", - "title": "contentType1ForglobalField", - "uid": "contenttype1forglobalfield", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "global_field", - "display_name": "Global", - "reference_to": "globalfieldformigration", - "field_metadata": { - "description": "" - }, - "uid": "global_field", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - } - ] - }, - { - "data_type": "group", - "display_name": "Group", - "field_metadata": { - "description": "", - "instruction": "" - }, - "schema": [ - { - "data_type": "global_field", - "display_name": "Global", - "reference_to": "globalfieldformigration", - "field_metadata": { - "description": "" - }, - "uid": "global_field", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - } - ] - } - ], - "uid": "group", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttype2forglobalfield": { - "content_type": { - "created_at": "2021-06-21T09:36:41.354Z", - "updated_at": "2021-06-21T09:37:19.970Z", - "title": "contenttype2forglobalfield", - "uid": "contenttype2forglobalfield", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "global_field", - "display_name": "Global", - "reference_to": "globalfieldformigration", - "field_metadata": { - "description": "" - }, - "uid": "global_field", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false, - "indexed": false, - "inbuilt_model": false - } - ] - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithinvalidrtetype": { - "content_type": { - "created_at": "2021-06-22T05:00:12.357Z", - "updated_at": "2021-06-22T05:01:53.175Z", - "title": "contenttypewithinvalidrtetype", - "uid": "contenttypewithinvalidrtetype", - "_version": 3, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "multiple": true, - "non_localizable": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithmultiplerte": { - "content_type": { - "created_at": "2021-06-22T05:18:50.239Z", - "updated_at": "2021-06-22T05:50:45.916Z", - "title": "contenttypewithmultiplerte", - "uid": "contenttypewithmultiplerte", - "_version": 3, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "multiple": true, - "non_localizable": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "multiple": true, - "non_localizable": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithemptyschema": { - "content_type": { - "created_at": "2021-06-22T05:18:50.239Z", - "updated_at": "2021-06-22T05:50:45.916Z", - "title": "contenttypewithemptyschema", - "uid": "contenttypewithemptyschema", - "_version": 3, - "inbuilt_class": false, - "schema": [], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithmodularblock": { - "content_type": { - "created_at": "2021-06-22T08:36:26.050Z", - "updated_at": "2021-06-22T09:55:52.105Z", - "title": "contenttypewithmodularblock", - "uid": "contenttypewithmodularblock", - "_version": 3, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "blocks", - "display_name": "Modular Blocks", - "blocks": [ - { - "title": "test1", - "uid": "test1", - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ] - } - ], - "multiple": true, - "uid": "modular_blocks", - "field_metadata": { - "instruction": "", - "description": "" - }, - "non_localizable": false, - "mandatory": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithgroup": { - "content_type": { - "created_at": "2021-06-22T10:18:54.177Z", - "updated_at": "2021-06-22T10:19:31.012Z", - "title": "contenttypewithgroup", - "uid": "contenttypewithgroup", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "group", - "display_name": "Group", - "field_metadata": { - "description": "", - "instruction": "" - }, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "multiple": true, - "non_localizable": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "multiple": true, - "non_localizable": false, - "unique": false - } - ], - "uid": "group", - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithmultiplegroup": { - "content_type": { - "created_at": "2021-06-22T10:35:26.275Z", - "updated_at": "2021-06-22T10:36:06.768Z", - "title": "contenttypewithmultiplegroup", - "uid": "contenttypewithmultiplegroup", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "group", - "display_name": "Group", - "field_metadata": { - "description": "", - "instruction": "" - }, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "uid": "group", - "multiple": true, - "non_localizable": false, - "mandatory": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithentryupdateerror": { - "content_type": { - "created_at": "2021-06-24T09:59:49.808Z", - "updated_at": "2021-06-24T10:01:00.908Z", - "title": "contenttypewithentryUpdateError", - "uid": "contenttypewithentryupdateerror", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - }, - "contenttypewithfilefield": { - "content_type": { - "created_at": "2021-08-11T08:48:38.491Z", - "updated_at": "2021-08-11T08:50:42.734Z", - "title": "contenttypewithfilefield", - "uid": "contenttypewithfilefield", - "_version": 3, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "file", - "display_name": "File", - "uid": "file", - "extensions": [], - "field_metadata": { - "description": "", - "rich_text_type": "standard" - }, - "mandatory": false, - "multiple": false, - "non_localizable": false, - "unique": false - }, - { - "data_type": "file", - "display_name": "File", - "uid": "asset", - "extensions": [], - "field_metadata": { - "description": "", - "rich_text_type": "standard" - }, - "mandatory": false, - "multiple": false, - "non_localizable": false, - "unique": false - }, - { - "data_type": "blocks", - "display_name": "Modular Blocks", - "blocks": [ - { - "title": "test1", - "uid": "test1", - "schema": [ - { - "data_type": "file", - "display_name": "File", - "uid": "file", - "extensions": [], - "field_metadata": { - "description": "", - "rich_text_type": "standard" - }, - "mandatory": false, - "multiple": true, - "non_localizable": false, - "unique": false - } - ] - } - ], - "multiple": true, - "uid": "modular_blocks", - "field_metadata": { - "instruction": "", - "description": "" - }, - "mandatory": false, - "non_localizable": false, - "unique": false - }, - { - "data_type": "group", - "display_name": "Group", - "field_metadata": { - "description": "", - "instruction": "" - }, - "schema": [ - { - "data_type": "file", - "display_name": "File", - "uid": "file", - "field_metadata": { - "description": "", - "rich_text_type": "standard", - "image": true - }, - "mandatory": false, - "multiple": false, - "non_localizable": false, - "unique": false, - "dimension": { - "width": { - "min": null, - "max": null - }, - "height": { - "min": null, - "max": null - } - } - } - ], - "uid": "group", - "mandatory": false, - "multiple": false, - "non_localizable": false, - "unique": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "mandatory": false, - "multiple": false, - "non_localizable": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "JSON Rich Text Editor", - "uid": "json_rte", - "field_metadata": { - "allow_json_rte": true, - "embed_entry": false, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "reference_to": [ - "sys_assets" - ], - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": true, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - }, - "extension_uids": [] - } - }, - "rte_images": { - "content_type": { - "created_at": "2021-06-18T08:28:40.550Z", - "updated_at": "2021-06-18T08:29:11.162Z", - "title": "ContentTypeWithSingleRTE", - "uid": "rte_images", - "_version": 2, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Title", - "field_metadata": { - "_default": true, - "version": 3 - }, - "mandatory": true, - "uid": "title", - "unique": true, - "non_localizable": false, - "multiple": false - }, - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "DEFAULT_ACL": { - "others": { - "read": false, - "create": false - }, - "users": [ - { - "uid": "bltd17749910d177e04", - "read": true, - "sub_acl": { - "read": true - } - } - ] - }, - "SYS_ACL": { - "roles": [ - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltbfe2abeba30ff382", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - }, - { - "uid": "bltfa739fdd274aa467", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - } - }, - { - "uid": "blt6cafb115ee0f0a25", - "read": true, - "sub_acl": { - "create": true, - "read": true, - "update": true, - "delete": true, - "publish": true - }, - "update": true, - "delete": true - } - ], - "others": { - "read": false, - "create": false, - "update": false, - "delete": false, - "sub_acl": { - "read": false, - "create": false, - "update": false, - "delete": false, - "publish": false - } - } - }, - "options": { - "is_page": false, - "singleton": false, - "sub_title": [], - "title": "title" - }, - "abilities": { - "get_one_object": true, - "get_all_objects": true, - "create_object": true, - "update_object": true, - "delete_object": true, - "delete_all_objects": true - } - } - } -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/dummy/defaultConfig.json b/packages/contentstack-migrate-rte/test/dummy/defaultConfig.json deleted file mode 100644 index 0eb5963a93..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/defaultConfig.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "apiEndpoint": "http://localhost:8000", - "cdnEndpoint": "https://cdn.contentstack.io", - "apiVersion": 3 -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/dummy/entriesResponse.json b/packages/contentstack-migrate-rte/test/dummy/entriesResponse.json deleted file mode 100644 index b313313f67..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/entriesResponse.json +++ /dev/null @@ -1,444 +0,0 @@ -{ - "contenttypewithsinglerte": { - "entries": [ - { - "title": "Entry 2", - "rich_text_editor": "

value 2

", - "tags": [], - "locale": "en-us", - "uid": "blt6168b6493a122849", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-18T10:10:35.292Z", - "updated_at": "2021-06-18T10:10:35.292Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - }, - { - "title": "Entry 2", - "rich_text_editor": "

value 2 en-in

", - "tags": [], - "locale": "en-in", - "uid": "blt6168b6493a122849", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-18T10:10:35.292Z", - "updated_at": "2021-06-18T10:10:35.292Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - }, - { - "title": "entry 1", - "rich_text_editor": "

value 1

", - "tags": [], - "locale": "en-us", - "uid": "blt94ab8cf0a7956243", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-18T10:01:47.035Z", - "updated_at": "2021-06-18T10:01:47.035Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 2 - }, - "contenttype1forglobalfield": { - "entries": [ - { - "title": "test1", - "global_field": { - "rich_text_editor": "

global => richtext

" - }, - "group": { - "global_field": { - "rich_text_editor": "

group => global => rte

" - } - }, - "tags": [], - "locale": "en-us", - "uid": "blt982804d4a39b0197", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-21T09:47:49.318Z", - "updated_at": "2021-06-21T09:47:49.318Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "contenttype2forglobalfield": { - "entries": [ - { - "title": "test1", - "global_field": { - "rich_text_editor": "

global => rte

" - }, - "tags": [], - "locale": "en-us", - "uid": "blta20a822fdd7bcc87", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-21T09:50:48.065Z", - "updated_at": "2021-06-21T09:50:48.065Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "contenttypewithmultiplerte": { - "entries": [ - { - "title": "test1", - "rich_text_editor": [ - "

multiple 1

", - "

mutiple 2

" - ], - "tags": [], - "locale": "en-us", - "uid": "blt55ac0aa11a1dafe9", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-22T05:28:36.417Z", - "updated_at": "2021-06-22T05:28:36.417Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "contenttypewithmodularblock": { - "entries": [ - { - "title": "", - "modular_blocks": [ - { - "test1": { - "rich_text_editor": "

M1

", - "_metadata": { - "uid": "csa15520723d8f9738" - } - } - }, - { - "test1": { - "rich_text_editor": "

m2

", - "_metadata": { - "uid": "csc3ccd3f10d8ceff6" - } - } - }, - { - "test1": { - "rich_text_editor": "

m3

", - "_metadata": { - "uid": "csf2355ddf2979a0a1" - } - } - } - ], - "tags": [], - "locale": "en-us", - "uid": "blte02628730f4d0c3c", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-22T08:37:47.911Z", - "updated_at": "2021-06-22T08:37:47.911Z", - "_version": 1, - "_in_progress": true - } - ], - "count": 1 - }, - "contenttypewithgroup": { - "entries": [ - { - "title": "test1", - "group": { - "rich_text_editor": [ - "

rte1

", - "

rte2

" - ] - }, - "tags": [], - "locale": "en-us", - "uid": "blt279161bdc0c77b2d", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-22T10:24:00.471Z", - "updated_at": "2021-06-22T10:24:00.471Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "contenttypewithmultiplegroup": { - "entries": [ - { - "title": "test1", - "group": [ - { - "rich_text_editor": "

instance 1

", - "_metadata": { - "uid": "cs46fbdc80bbb32699" - } - }, - { - "rich_text_editor": "

instance 2

", - "_metadata": { - "uid": "cs9fa775294fcb9aba" - } - } - ], - "tags": [], - "locale": "en-us", - "uid": "bltd939c78b885da314", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-22T10:38:00.168Z", - "updated_at": "2021-06-22T10:38:00.168Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "contenttypewithentryupdateerror": { - "entries": [ - { - "title": "sdsdsds", - "rich_text_editor": "

will give error

", - "tags": [], - "locale": "en-us", - "uid": "blta9b16ac2827c54ed", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-24T10:03:39.192Z", - "updated_at": "2021-06-24T10:03:44.173Z", - "_version": 2, - "_in_progress": false - }, - { - "title": "sdsdsdsds", - "rich_text_editor": "

will give error

", - "tags": [], - "locale": "en-us", - "uid": "blta9b16ac2827c54e1", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-24T10:03:39.192Z", - "updated_at": "2021-06-24T10:03:44.173Z", - "_version": 2, - "_in_progress": false - } - ], - "count": 2 - }, - "contenttypewithfilefield": { - "entries": [ - { - "title": "This is test", - "file": null, - "asset": { - "uid": "bltab83acc0e405b6f8", - "created_at": "2021-07-26T10:47:48.337Z", - "updated_at": "2021-08-05T06:30:56.359Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "content_type": "image/png", - "file_size": "344996", - "tags": [], - "filename": "image.png", - "url": "***REMOVED***bltab83acc0e405b6f8/60fe92d4fe65cc54a3e7e5c3/image.png", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 5, - "title": "image.png", - "description": "5", - "dimension": { - "height": 1080, - "width": 1920 - }, - "publish_details": [] - }, - "modular_blocks": [ - { - "test1": { - "file": [ - { - "uid": "bltb13b08635ebffdc4", - "created_at": "2021-03-10T12:51:20.447Z", - "updated_at": "2021-03-10T12:51:20.447Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "content_type": "image/jpeg", - "file_size": "7701", - "tags": [], - "filename": "48558898.jpeg", - "url": "***REMOVED***bltb13b08635ebffdc4/6048c0c887ab224351aab15f/48558898.jpeg", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 1, - "title": "48558898.jpeg", - "dimension": { - "height": 275, - "width": 183 - }, - "publish_details": [] - }, - { - "uid": "bltb85f710a4a984858", - "created_at": "2021-03-10T13:37:22.523Z", - "updated_at": "2021-07-22T12:20:20.026Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt6436c4ee410b7913", - "content_type": "image/jpeg", - "file_size": "5403", - "tags": [], - "filename": "download.jpeg", - "url": "***REMOVED***bltb85f710a4a984858/6049fa897477c27b7b34443d/download.jpeg", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 37, - "title": "This is test1", - "description": "test1", - "dimension": { - "height": 194, - "width": 259 - }, - "publish_details": [] - }, - { - "uid": "blt3d60320b8e0b9b0a", - "created_at": "2021-03-04T10:36:08.977Z", - "updated_at": "2021-03-04T10:36:08.977Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "content_type": "image/jpeg", - "file_size": "5906", - "tags": [], - "filename": "download_(2).jpeg", - "url": "***REMOVED***blt3d60320b8e0b9b0a/6040b819116a7015b467265e/download_(2).jpeg", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 1, - "title": "download_(2).jpeg", - "dimension": { - "height": 183, - "width": 275 - }, - "publish_details": [] - } - ], - "_metadata": { - "uid": "csd629a3435c480311" - } - } - }, - { - "test1": { - "file": [ - { - "uid": "bltab83acc0e405b6f8", - "created_at": "2021-07-26T10:47:48.337Z", - "updated_at": "2021-08-05T06:30:56.359Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "content_type": "image/png", - "file_size": "344996", - "tags": [], - "filename": "image.png", - "url": "***REMOVED***bltab83acc0e405b6f8/60fe92d4fe65cc54a3e7e5c3/image.png", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 5, - "title": "image.png", - "description": "5", - "dimension": { - "height": 1080, - "width": 1920 - }, - "publish_details": [] - } - ], - "_metadata": { - "uid": "cs2fc2c61d898700d9" - } - } - } - ], - "group": { - "file": { - "uid": "bltab83acc0e405b6f8", - "created_at": "2021-07-26T10:47:48.337Z", - "updated_at": "2021-08-05T06:30:56.359Z", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "content_type": "image/png", - "file_size": "344996", - "tags": [], - "filename": "image.png", - "url": "***REMOVED***bltab83acc0e405b6f8/60fe92d4fe65cc54a3e7e5c3/image.png", - "ACL": [], - "is_dir": false, - "parent_uid": null, - "_version": 5, - "title": "image.png", - "description": "5", - "dimension": { - "height": 1080, - "width": 1920 - }, - "publish_details": [] - } - }, - "rich_text_editor": "

This is test

", - "tags": [], - "locale": "en-us", - "uid": "bltcbf22e3759df80ef", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-08-11T08:57:28.614Z", - "updated_at": "2021-08-11T08:57:28.614Z", - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - }, - "rte_images": { - "entries": [ - { - "title": "Entry 2", - "rich_text_editor": "

", - "tags": [], - "locale": "en-us", - "uid": "blt6168b6493a122849", - "created_by": "blt3943ff6628403515", - "updated_by": "blt3943ff6628403515", - "created_at": "2021-06-18T10:10:35.292Z", - "updated_at": "2021-06-18T10:10:35.292Z", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - ], - "count": 1 - } -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json b/packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json deleted file mode 100644 index bfee8fe075..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/expectedEntriesResponse.json +++ /dev/null @@ -1,663 +0,0 @@ -{ - "contenttypewithsinglerte": { - "blt6168b6493a122849": { - "entry": { - "content_type_uid": "contenttypewithsinglerte", - "title": "Entry 2", - "rich_text_editor": "

value 2

", - "supercharged_rte": { - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "children": [ - { - "text": "value 2" - } - ] - } - ], - "type": "doc" - }, - "tags": [], - "locale": "en-us", - "uid": "blt6168b6493a122849", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - }, - "blt6168b6493a122849_en-in": { - "entry": { - "content_type_uid": "contenttypewithsinglerte", - "title": "Entry 2", - "rich_text_editor": "

value 2 en-in

", - "tags": [ - ], - "locale": "en-in", - "ACL": { - }, - "_version": 1, - "_in_progress": false, - "supercharged_rte": { - "type": "doc", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "children": [ - { - "text": "value 2 en-in" - } - ] - } - ] - } - } - }, - "blt94ab8cf0a7956243": { - "entry": { - "content_type_uid": "contenttypewithsinglerte", - "title": "entry 1", - "rich_text_editor": "

value 1

", - "supercharged_rte": { - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "children": [ - { - "text": "value 1" - } - ] - } - ], - "type": "doc" - }, - "tags": [], - "locale": "en-us", - "uid": "blt94ab8cf0a7956243", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - }, - "contenttype1forglobalfield": { - "blt982804d4a39b0197": { - "entry": { - "content_type_uid": "contenttype1forglobalfield", - "title": "test1", - "global_field": { - "rich_text_editor": "

global => richtext

", - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "global => richtext" - } - ] - } - ], - "type": "doc" - } - }, - "group": { - "global_field": { - "rich_text_editor": "

group => global => rte

", - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "group => global => rte" - } - ] - } - ], - "type": "doc" - } - } - }, - "tags": [], - "locale": "en-us", - "uid": "blt982804d4a39b0197", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - }, - "contenttype2forglobalfield": { - "blta20a822fdd7bcc87": { - "entry": { - "content_type_uid": "contenttype2forglobalfield", - "title": "test1", - "global_field": { - "rich_text_editor": "

global => rte

", - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "global => rte" - } - ] - } - ], - "type": "doc" - } - }, - "tags": [], - "locale": "en-us", - "uid": "blta20a822fdd7bcc87", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - }, - "contenttypewithmultiplerte": { - "blt55ac0aa11a1dafe9": { - "entry": { - "content_type_uid": "contenttypewithmultiplerte", - "title": "test1", - "rich_text_editor": [ - "

multiple 1

", - "

mutiple 2

" - ], - "tags": [], - "locale": "en-us", - "uid": "blt55ac0aa11a1dafe9", - "ACL": {}, - "_version": 1, - "_in_progress": false, - "supercharged_rte": [ - { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "multiple 1" - } - ] - } - ], - "type": "doc" - }, - { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "mutiple 2" - } - ] - } - ], - "type": "doc" - } - ] - } - } - }, - "contenttypewithmodularblock": { - "blte02628730f4d0c3c": { - "entry": { - "content_type_uid": "contenttypewithmodularblock", - "title": "", - "modular_blocks": [ - { - "test1": { - "rich_text_editor": "

M1

", - "_metadata": { - "uid": "csa15520723d8f9738" - }, - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "M1" - } - ] - } - ], - "type": "doc" - } - } - }, - { - "test1": { - "rich_text_editor": "

m2

", - "_metadata": { - "uid": "csc3ccd3f10d8ceff6" - }, - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "m2" - } - ] - } - ], - "type": "doc" - } - } - }, - { - "test1": { - "rich_text_editor": "

m3

", - "_metadata": { - "uid": "csf2355ddf2979a0a1" - }, - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "m3" - } - ] - } - ], - "type": "doc" - } - } - } - ], - "tags": [], - "locale": "en-us", - "uid": "blte02628730f4d0c3c", - "_version": 1, - "_in_progress": true - } - } - }, - "contenttypewithgroup": { - "blt279161bdc0c77b2d": { - "entry": { - "content_type_uid": "contenttypewithgroup", - "title": "test1", - "group": { - "rich_text_editor": [ - "

rte1

", - "

rte2

" - ], - "supercharged_rte": [ - { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "rte1" - } - ] - } - ], - "type": "doc" - }, - { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "rte2" - } - ] - } - ], - "type": "doc" - } - ] - }, - "tags": [], - "locale": "en-us", - "uid": "blt279161bdc0c77b2d", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - }, - "contenttypewithmultiplegroup": { - "bltd939c78b885da314": { - "entry": { - "content_type_uid": "contenttypewithmultiplegroup", - "title": "test1", - "group": [ - { - "rich_text_editor": "

instance 1

", - "_metadata": { - "uid": "cs46fbdc80bbb32699" - }, - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "instance 1" - } - ] - } - ], - "type": "doc" - } - }, - { - "rich_text_editor": "

instance 2

", - "_metadata": { - "uid": "cs9fa775294fcb9aba" - }, - "supercharged_rte": { - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "instance 2" - } - ] - } - ], - "type": "doc" - } - } - ], - "tags": [], - "locale": "en-us", - "uid": "bltd939c78b885da314", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - }, - "contenttypewithfilefield": { - "bltcbf22e3759df80ef": { - "entry": { - "content_type_uid": "contenttypewithfilefield", - "title": "This is test", - "file": null, - "asset": "bltab83acc0e405b6f8", - "modular_blocks": [ - { - "test1": { - "file": [ - "bltb13b08635ebffdc4", - "bltb85f710a4a984858", - "blt3d60320b8e0b9b0a" - ], - "_metadata": {} - } - }, - { - "test1": { - "file": [ - "bltab83acc0e405b6f8" - ], - "_metadata": {} - } - } - ], - "group": { - "file": "bltab83acc0e405b6f8" - }, - "rich_text_editor": "

This is test

", - "tags": [], - "locale": "en-us", - "_version": 1, - "_in_progress": false, - "json_rte": { - "type": "doc", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "children": [ - { - "text": "This is test" - } - ] - } - ] - } - } - } - }, - "rte_images": { - "blt6168b6493a122849": { - "entry": { - "content_type_uid": "rte_images", - "title": "Entry 2", - "rich_text_editor": "

", - "supercharged_rte": { - "type": "doc", - "uid": "***REMOVED***", - "attrs": { - "dirty": true - }, - "children": [ - { - "type": "p", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "" - } - ] - }, - { - "type": "reference", - "attrs": { - "asset-name": "landscape-3.jpg", - "content-type-uid": "sys_assets", - "asset-link": "***REMOVED***8e12437ac2679e/bltfea8157ddfb8e776/6329f1106a7f7364973c028c/landscape-3.jpg", - "asset-type": "image/jpg", - "display-type": "display", - "type": "asset", - "asset-uid": "bltfea8157ddfb8e776", - "style": { - "width": "194px", - "height": "auto" - }, - "redactor-attributes": { - "asset_uid": "bltfea8157ddfb8e776", - "height": "auto", - "src": "***REMOVED***8e12437ac2679e/bltfea8157ddfb8e776/6329f1106a7f7364973c028c/landscape-3.jpg", - "width": "194", - "max-width": "194", - "style": "width: 194px; height: auto;" - }, - "width": 194, - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "" - } - ] - }, - { - "type": "fragment", - "attrs": { - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": " " - } - ] - }, - { - "type": "img", - "attrs": { - "url": "***REMOVED***8e12437ac2679e/bltfea8157ddfb8e776/6329f1106a7f7364973c028c/landscape-3.jpg", - "style": { - "width": "194px", - "height": "auto" - }, - "redactor-attributes": { - "height": "auto", - "src": "***REMOVED***8e12437ac2679e/bltfea8157ddfb8e776/6329f1106a7f7364973c028c/landscape-3.jpg", - "width": "194", - "max-width": "194", - "style": "width: 194px; height: auto;" - }, - "width": 194, - "dirty": true - }, - "uid": "***REMOVED***", - "children": [ - { - "text": "" - } - ] - } - ] - }, - "tags": [], - "locale": "en-us", - "uid": "blt6168b6493a122849", - "ACL": {}, - "_version": 1, - "_in_progress": false - } - } - } -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/dummy/globalFieldResponse.json b/packages/contentstack-migrate-rte/test/dummy/globalFieldResponse.json deleted file mode 100644 index c482d60d4e..0000000000 --- a/packages/contentstack-migrate-rte/test/dummy/globalFieldResponse.json +++ /dev/null @@ -1,257 +0,0 @@ -{ - "globalfieldformigration": { - "global_field": { - "created_at": "2021-06-21T09:31:40.548Z", - "updated_at": "2021-06-21T09:31:40.548Z", - "title": "globalFieldForMigration", - "uid": "globalfieldformigration", - "_version": 1, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "referred_content_types": [ - { - "uid": "contenttype1forglobalfield", - "title": "contentType1ForglobalField" - }, - { - "uid": "contenttype2forglobalfield", - "title": "contenttype2forglobalfield" - } - ] - } - }, - "globalfieldwithemptyschema": { - "global_field": { - "created_at": "2021-06-21T09:31:40.548Z", - "updated_at": "2021-06-21T09:31:40.548Z", - "title": "globalfieldwithemptyschema", - "uid": "globalfieldwithemptyschema", - "_version": 1, - "inbuilt_class": false, - "schema": [], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "referred_content_types": [ - { - "uid": "contenttypewithemptyschema", - "title": "contenttypewithemptyschema" - } - ] - } - }, - "globalfieldwithemptyschemacontenttype": { - "global_field": { - "created_at": "2021-06-21T09:31:40.548Z", - "updated_at": "2021-06-21T09:31:40.548Z", - "title": "globalfieldwithemptyschemacontenttype", - "uid": "globalfieldwithemptyschemacontenttype", - "_version": 1, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "referred_content_types": [ - { - "uid": "contenttypewithemptyschema", - "title": "contenttypewithemptyschema" - } - ] - } - }, - "globalfieldwithemptycontenttype": { - "global_field": { - "created_at": "2021-06-21T09:31:40.548Z", - "updated_at": "2021-06-21T09:31:40.548Z", - "title": "globalFieldForMigration", - "uid": "globalfieldformigration", - "_version": 1, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "referred_content_types": [] - } - }, - "globalfieldwithinvalidcontenttype": { - "global_field": { - "created_at": "2021-06-21T09:31:40.548Z", - "updated_at": "2021-06-21T09:31:40.548Z", - "title": "globalFieldForMigration", - "uid": "globalfieldformigration", - "_version": 1, - "inbuilt_class": false, - "schema": [ - { - "data_type": "text", - "display_name": "Rich Text Editor", - "uid": "rich_text_editor", - "field_metadata": { - "allow_rich_text": true, - "description": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [], - "version": 3 - }, - "non_localizable": false, - "multiple": false, - "mandatory": false, - "unique": false - }, - { - "data_type": "json", - "display_name": "Supercharged RTE", - "uid": "supercharged_rte", - "field_metadata": { - "allow_json_rte": true, - "description": "", - "default_value": "", - "multiline": false, - "rich_text_type": "advanced", - "options": [] - }, - "format": "", - "error_messages": { - "format": "" - }, - "mandatory": false, - "non_localizable": false, - "multiple": false, - "unique": false - } - ], - "last_activity": {}, - "maintain_revisions": true, - "description": "", - "referred_content_types": [ - { - "uid": "contenttypewithemptyschema", - "title": "contenttypewithemptyschema" - } - ] - } - } -} \ No newline at end of file diff --git a/packages/contentstack-migrate-rte/test/mocha.opts b/packages/contentstack-migrate-rte/test/mocha.opts deleted file mode 100644 index c6d1cb290c..0000000000 --- a/packages/contentstack-migrate-rte/test/mocha.opts +++ /dev/null @@ -1,3 +0,0 @@ ---recursive ---reporter spec ---timeout 5000 diff --git a/packages/contentstack-migrate-rte/test/utils/index.js b/packages/contentstack-migrate-rte/test/utils/index.js deleted file mode 100644 index 2d10fe667f..0000000000 --- a/packages/contentstack-migrate-rte/test/utils/index.js +++ /dev/null @@ -1,140 +0,0 @@ -const { find } = require('lodash') -const contentTypeResponse = require('../dummy/contentTypeResponse.json') -const entriesResponse = require('../dummy/entriesResponse.json') -const expectedResponse = require('../dummy/expectedEntriesResponse.json') -const globalFieldResponse = require('../dummy/globalFieldResponse.json') -const dummyToken = { - test1: { - token: 'testManagementToken', - apiKey: 'testApiKey', - type: 'management', - }, -} -function getToken(alias) { - if (dummyToken[alias]) { - return dummyToken[alias] - } - throw new Error('Token with alias ' + "'" + alias + "'" + ' was not found') -} -function getGlobalField(uid) { - if (globalFieldResponse[uid]) { - return [200, globalFieldResponse[uid]] - } - return [422, { - error_message: `The Global Field '${uid}' was not found. Please try again.`, - error_code: 118, - errors: { - uid: [ - 'is not valid.', - ], - }, - }] -} -function getContentType(uid) { - if (contentTypeResponse[uid]) { - return [200, contentTypeResponse[uid]] - } - - return [422, { - error_message: `The Content Type '${uid}' was not found. Please try again.`, - error_code: 118, - errors: { - uid: [ - 'is not valid.', - ], - }, - }] -} -function getEntriesOnlyUID(contentstackTypeUid,locale = 'en-us') { - if (entriesResponse[contentstackTypeUid]) { - const entries = entriesResponse[contentstackTypeUid] - const allEntries = entries.entries.filter(entry => entry.locale === locale).map(entry => ({uid:entry.uid})) - return { - entries: allEntries, - count: allEntries.length - } - } - return { - error_message: `The Content Type '${contentstackTypeUid}' was not found. Please try again.`, - error_code: 118, - errors: { - uid: [ - 'is not valid.', - ], - }, - } -} -function getEntries(contentstackTypeUid,locale = "en-us") { - if (entriesResponse[contentstackTypeUid]) { - const entries = entriesResponse[contentstackTypeUid] - return { - entries: entries.entries.filter(entry => entry.locale === locale), - count: entries.entries.filter(entry => entry.locale === locale).length - } - } - return { - error_message: `The Content Type '${contentstackTypeUid}' was not found. Please try again.`, - error_code: 118, - errors: { - uid: [ - 'is not valid.', - ], - }, - } -} -function getEntry(contentstackTypeUid, entryUid, locale = "en-us") { - if (entriesResponse[contentstackTypeUid]) { - const entries = entriesResponse[contentstackTypeUid] - const entry = find(entries.entries, { uid: entryUid, locale }) - const masterEntry = find(entries.entries, { uid: entryUid, locale: 'en-us' }) - if (entry) { - return { - entry - } - } else { - if (masterEntry) { - return { - entry: masterEntry - } - } else { - return { - "error_message": "The requested object doesn't exist.", - "error_code": 141, - "errors": { - "uid": [ - "is not valid." - ] - } - } - } - } - } - return { - "error_message": "The requested object doesn't exist.", - "error_code": 141, - "errors": { - "uid": [ - "is not valid." - ] - } - } -} -function getExpectedOutput(contentTypeUid, entryUid,locale = "en-us") { - let entrySuffix = '' - if (locale !== 'en-us') { - entrySuffix = '_' + locale - } - if (expectedResponse[contentTypeUid] && expectedResponse[contentTypeUid][`${entryUid}${entrySuffix}`]) { - return expectedResponse[contentTypeUid][`${entryUid}${entrySuffix}`] - } - return {} -} -module.exports = { - getToken, - getContentType, - getEntries, - getExpectedOutput, - getGlobalField, - getEntriesOnlyUID, - getEntry -} diff --git a/packages/contentstack-migration/docs/api-reference.md b/packages/contentstack-migration/docs/api-reference.md index da8e9a473f..42a4d7a38e 100644 --- a/packages/contentstack-migration/docs/api-reference.md +++ b/packages/contentstack-migration/docs/api-reference.md @@ -474,4 +474,4 @@ migration.addTask(task) File | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s ----------|---------|----------|---------|---------|------------------- All files | 0 | 0 | 0 | 0 | -----------|---------|----------|---------|---------|------------------- +----------|---------|----------|---------|---------|------------------- \ No newline at end of file diff --git a/packages/contentstack-migration/examples/taxonomies/import-taxonomies.js b/packages/contentstack-migration/examples/taxonomies/import-taxonomies.js deleted file mode 100644 index 586224e3e0..0000000000 --- a/packages/contentstack-migration/examples/taxonomies/import-taxonomies.js +++ /dev/null @@ -1,152 +0,0 @@ -const fs = require('fs'); -const path = require('path'); -const fastcsv = require('fast-csv'); - -module.exports = ({ migration, stackSDKInstance, managementAPIClient, config }) => { - const dataDir = config['data-dir']; - const delimiter = config['delimiter'] ?? ','; // default comma - const locale = config['locale']; - const includeFallback = config['include_fallback'] ?? false; - //parent and child term pointer - let parentDetails = { taxonomy_uid: '' }; - let stack; - let depth = 1, - parentUID = null; - let taxonomies = {}; - - const stackClient = () => { - return managementAPIClient.stack({ api_key: stackSDKInstance.api_key }); - }; - - const pushTaxonomyDetails = async (apiData) => { - if (!taxonomies[apiData?.uid]) taxonomies[apiData?.uid] = { taxonomy: apiData }; - }; - - const pushTermDetails = async (apiData) => { - if (taxonomies[apiData?.taxonomy_uid]) { - const terms = (taxonomies[apiData.taxonomy_uid].terms ||= []); - terms.push({ uid: apiData.uid, name: apiData.name, parent_uid: apiData.parent_uid }); - } - }; - - function handleErrorMsg(err) { - let errMsg; - if (err?.errorMessage || err?.message) { - errMsg = - err?.errorMessage || err?.errors?.taxonomy || err?.errors?.term || JSON.stringify(err?.errors) || err?.message; - } - throw errMsg ?? err; - } - - const readCsv = (path, options) => { - return new Promise((resolve, reject) => { - const taxonomies = []; - fastcsv - .parseFile(path, options) - .on('error', reject) - .on('data', (data) => { - taxonomies.push(data); - }) - .on('end', () => { - resolve(taxonomies); - }); - }); - }; - - const importTaxonomies = async () => { - for (const taxonomyUID in taxonomies) { - const filePath = path.resolve(process.cwd(), `${taxonomyUID}.json`); - if (!fs.existsSync(filePath)) { - fs.writeFileSync(filePath, JSON.stringify(taxonomies[taxonomyUID])); - } - const queryParam = {}; - if (locale) { - queryParam.locale = locale; - queryParam.include_fallback = includeFallback; - } - - await stack - .taxonomy() - .import({ taxonomy: filePath }, queryParam) - .then(() => console.log(`Taxonomy ${taxonomyUID} migrated successfully!`)) - .catch((err) => { - handleErrorMsg(err); - }); - fs.unlinkSync(filePath); - } - }; - - const toSnakeCase = (str) => - str - .match(/[A-Z]{2,}(?=[A-Z][a-z]+[0-9]*|\b)|[A-Z]?[a-z]+[0-9]*|[A-Z]|[0-9]+/g) - .map((x) => x.toLowerCase()) - .join('_'); - - const createTaxonomyTask = (params) => { - return { - title: 'Create Taxonomies', - successMessage: 'Taxonomies created successfully!', - failedMessage: 'Failed to create taxonomies!', - task: async (params) => { - try { - stack = stackClient(); - if (!fs.existsSync(dataDir)) throw new Error(`No Taxonomies folder found! - ${dataDir}`); - const taxonomies = await readCsv(dataDir, { headers: true, delimiter }); - - if (!taxonomies?.length) throw new Error('No Taxonomies found!'); - - for (const taxDetails of taxonomies) { - const taxonomyName = taxDetails['Taxonomy Name'] ?? ''; - const taxonomyUID = taxDetails['Taxonomy Uid'] ?? ''; - const taxonomyDesc = taxDetails['Taxonomy Description'] ?? ''; - //taxonomy name required - if (taxonomyName) { - const reqTaxonomyObj = { - name: taxonomyName, - uid: taxonomyUID ?? toSnakeCase(taxonomyName), - description: taxonomyDesc, - }; - parentDetails = { taxonomy_uid: reqTaxonomyObj.uid }; - await pushTaxonomyDetails(reqTaxonomyObj); - } else if (!taxonomyName && parentDetails['taxonomy_uid']) { - const column = Object.keys(taxDetails).find((col) => taxDetails[col] !== ''); - if (!column) continue; - - const termLevel = (column.match(/Level \d+/) || [''])[0]; // Output:- Level 1/Level 2 - const termDepth = +termLevel.replace(/\D/g, ''); // fetch depth from header - const termName = taxDetails[`${termLevel} Term Name`] ?? ''; - - //term name required field to generate term uid - if (termName && termDepth) { - const termUID = taxDetails[`${termLevel} Term Uid`] || toSnakeCase(termName); - //Handled cases - //1.child term case 2.sibling term 3.different parent term parentUID = parentDetails[termDepth - 1] || null - //4.parent term -> parentUID = null & depth=1 - parentUID = parentDetails[termDepth - 1] || (termDepth === 1 ? null : parentUID); - depth = termDepth; - parentDetails[depth] = termUID; - const reqTermObj = { - uid: termUID, - name: termName, - parent_uid: parentUID, - taxonomy_uid: parentDetails['taxonomy_uid'], - }; - await pushTermDetails(reqTermObj); - } - } - } - - // create json file & remove it after migrating taxonomy - await importTaxonomies(); - } catch (error) { - throw error; - } - }, - }; - }; - if (config?.['data-dir']) { - migration.addTask(createTaxonomyTask()); - } else { - console.error('Please provide config using --config data-dir:""'); - } -}; diff --git a/packages/contentstack-migration/examples/taxonomies/test_taxonomies.csv b/packages/contentstack-migration/examples/taxonomies/test_taxonomies.csv deleted file mode 100644 index 67e9e2b36d..0000000000 --- a/packages/contentstack-migration/examples/taxonomies/test_taxonomies.csv +++ /dev/null @@ -1,21 +0,0 @@ -Taxonomy Name,Taxonomy Uid,Taxonomy Description,Taxonomy Locale, Level 1 Term Name,Level 1 Term Uid,Level 1 Term Locale,Level 2 Term Name,Level 2 Term Uid,Level 2 Term Locale,Level 3 Term Name,Level 3 Term Uid,Level 3 Term Locale,Level 4 Term Name,Level 4 Term Uid,Level 4 Term Locale,Level 5 Term Name,Level 5 Term Uid,Level 5 Term Locale,Level 6 Term Name,Level 6 Term Uid,Level 6 Term Locale,Level 7 Term Name,Level 7 Term Uid,Level 7 Term Locale,Level 8 Term Name,Level 8 Term Uid,Level 8 Term Locale,Level 9 Term Name,Level 9 Term Uid,Level 9 Term Locale,Level 10 Term Name,Level 10 Term Uid,Level 10 Term Locale -Regions,regions,A Taxonomy which focuses on the categorization of various regions & it's sub regions,en-us,,,,,,,,,,,,,,,,,,,, -,,,,EMEA,emea,en-us,,,,,,,,,,,,,,,,,, -,,,,,,,Europe,europe,en-us,,,,,,,,,,,,,,,, -,,,,,,,Middle East,middle_east,en-us,,,,,,,,,,,,,,,, -,,,,,,,Africa,africa,en-us,,,,,,,,,,,,,,,, -,,,,APAC,apac,en-us,,,,,,,,,,,,,,,,,, -,,,,,,,Asia,asia,en-us,,,,,,,,,,,,,,,, -,,,,,,,,,,Northeastern Asia,northeastern_asia,en-us,,,,,,,,,,,,,, -,,,,,,,,,,Central and South Asia,central_and_south_asia,en-us,,,,,,,,,,,,,, -,,,,,,,,,,,,,Central Asia,central_asia,en-us,,,,,,,,,,,, -,,,,,,,,,,,,,South Asia,south_asia,en-us,,,,,,,,,,,, -,,,,,,,,,,,,,India,india,en-us,,,,,,,,,, -,,,,,,,,,,,,,,,,Maharashtra,maharashtra,en-us,,,,,,,, -,,,,,,,,,,,,,,,,,,,Mumbai,mumbai,en-us,,,,,, -,,,,,,,,,,Southeastern Asia,southeastern_asia,en-us,,,,,,,,,,,,,, -,,,,,,,Pacific,pacific,en-us,,,,,,,,,,,,,,,, -clothes,clothes,categorization of various clothes,en-us,,,,,,,,,,,,,,,,,,,, -,,,,Casual wear,casual,en-us,,,,,,,,,,,,,,,,,, -,,,,Formal wear,formal,en-us,,,,,,,,,,,,,,,,,, -,,,,Sports wear,sports,en-us,,,,,,,,,,,,,,,,,, \ No newline at end of file diff --git a/packages/contentstack-migration/package.json b/packages/contentstack-migration/package.json index 03cdc2e4e9..16931f722d 100644 --- a/packages/contentstack-migration/package.json +++ b/packages/contentstack-migration/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-migration", - "version": "1.8.2", + "version": "2.0.0-beta", "author": "@contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { diff --git a/packages/contentstack-migration/src/modules/fields.js b/packages/contentstack-migration/src/modules/fields.js index 0b6e69f9e6..a534d099c9 100644 --- a/packages/contentstack-migration/src/modules/fields.js +++ b/packages/contentstack-migration/src/modules/fields.js @@ -336,4 +336,4 @@ class Field extends Base { } } -module.exports = Field; +module.exports = Field; \ No newline at end of file diff --git a/packages/contentstack-utilities/src/constants/logging.ts b/packages/contentstack-utilities/src/constants/logging.ts index b553006701..f3bfb3267f 100644 --- a/packages/contentstack-utilities/src/constants/logging.ts +++ b/packages/contentstack-utilities/src/constants/logging.ts @@ -16,4 +16,4 @@ export const levelColors = { debug: 'blue', }; -export const PROGRESS_SUPPORTED_MODULES = ['export', 'import'] as const; +export const PROGRESS_SUPPORTED_MODULES = ['export', 'import', 'audit', 'import-setup'] as const; diff --git a/packages/contentstack/README.md b/packages/contentstack/README.md index 61d3f6846f..8214a98e8c 100644 --- a/packages/contentstack/README.md +++ b/packages/contentstack/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli $ csdx COMMAND running command... $ csdx (--version|-v) -@contentstack/cli/2.0.0-beta.1 darwin-arm64 node-v22.14.0 +@contentstack/cli/2.0.0-beta.2 darwin-arm64 node-v22.14.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND @@ -57,7 +57,6 @@ USAGE * [`csdx cm:bulk-publish:revert`](#csdx-cmbulk-publishrevert) * [`csdx csdx cm:stacks:unpublish [-a ] [-e ] [-c ] [-y] [--locale ] [--branch ] [--retry-failed ] [--bulk-unpublish ] [--content-type ] [--delivery-token ] [--only-assets] [--only-entries]`](#csdx-csdx-cmstacksunpublish--a-value--e-value--c-value--y---locale-value---branch-value---retry-failed-value---bulk-unpublish-value---content-type-value---delivery-token-value---only-assets---only-entries) * [`csdx cm:entries:publish-only-unpublished [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-only-unpublished--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) -* [`csdx cm:entries:migrate-html-rte`](#csdx-cmentriesmigrate-html-rte) * [`csdx cm:entries:publish [-a ] [--retry-failed ] [--bulk-publish ] [--publish-all-content-types] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ] [--delivery-token ] [--source-env ] [--entry-uid ] [--include-variants]`](#csdx-cmentriespublish--a-value---retry-failed-value---bulk-publish-value---publish-all-content-types---content-types-value---locales-value--e-value--c-value--y---branch-value---delivery-token-value---source-env-value---entry-uid-value---include-variants) * [`csdx cm:entries:publish-modified [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-modified--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value---locales-value--e-value--c-value--y---branch-value) * [`csdx cm:entries:publish-non-localized-fields [-a ] [--retry-failed ] [--bulk-publish ] [--source-env ] [--content-types ] [-e ] [-c ] [-y] [--branch ]`](#csdx-cmentriespublish-non-localized-fields--a-value---retry-failed-value---bulk-publish-value---source-env-value---content-types-value--e-value--c-value--y---branch-value) @@ -68,7 +67,6 @@ USAGE * [`csdx cm:export-to-csv`](#csdx-cmexport-to-csv) * [`csdx cm:stacks:import [-c ] [-k ] [-d ] [-a ] [--module ] [--backup-dir ] [--branch ] [--import-webhook-status disable|current]`](#csdx-cmstacksimport--c-value--k-value--d-value--a-value---module-value---backup-dir-value---branch-value---import-webhook-status-disablecurrent) * [`csdx cm:stacks:import-setup [-k ] [-d ] [-a ] [--modules ]`](#csdx-cmstacksimport-setup--k-value--d-value--a-value---modules-valuevalue) -* [`csdx cm:migrate-rte`](#csdx-cmmigrate-rte) * [`csdx cm:stacks:migration [-k ] [-a ] [--file-path ] [--branch ] [--config-file ] [--config ] [--multiple]`](#csdx-cmstacksmigration--k-value--a-value---file-path-value---branch-value---config-file-value---config-value---multiple) * [`csdx cm:stacks:seed [--repo ] [--org ] [-k ] [-n ] [-y ] [-s ] [--locale ]`](#csdx-cmstacksseed---repo-value---org-value--k-value--n-value--y-value--s-value---locale-value) * [`csdx cm:stacks:clone [--source-branch ] [--target-branch ] [--source-management-token-alias ] [--destination-management-token-alias ] [-n ] [--type a|b] [--source-stack-api-key ] [--destination-stack-api-key ] [--import-webhook-status disable|current]`](#csdx-cmstacksclone---source-branch-value---target-branch-value---source-management-token-alias-value---destination-management-token-alias-value--n-value---type-ab---source-stack-api-key-value---destination-stack-api-key-value---import-webhook-status-disablecurrent) @@ -1596,69 +1594,6 @@ EXAMPLES $ csdx cm:entries:publish-only-unpublished -b --content-types [CONTENT TYPES] -e [ENVIRONMENTS] --locales LOCALE -a [MANAGEMENT TOKEN ALIAS] --stack-api-key [STACK API KEY] -source-env [SOURCE ENV] ``` -## `csdx cm:entries:migrate-html-rte` - -Migration script to migrate content from HTML RTE to JSON RTE - -``` -USAGE - $ csdx cm:entries:migrate-html-rte [-c ] [-a ] [--stack-api-key ] [--content-type ] - [--global-field] [-y] [--branch ] [--html-path --json-path ] [--delay ] [--locale - ] [--batch-limit ] - -FLAGS - -a, --alias= Enter the alias name. You must use either the --alias flag or the --stack-api-key flag. - -c, --config-path= Specify the path where your config file is located. - -y, --yes Avoids reconfirmation of your configuration. - --batch-limit= [default: 50] Provide batch limit for updating entries (default: 50). - --branch= The name of the branch to be used. - --content-type= Specify the UID of the content type for which you want to migrate HTML RTE content. - --delay= [default: 1000] To set the interval time between the migration of HTML RTE to JSON RTE in - subsequent entries of a content type. The default value is 1,000 milliseconds. - --global-field Checks whether the specified UID belongs to a content type or a global field. This flag - is set to false by default. - --html-path= Enter the path to the HTML RTE whose content you want to migrate. - --json-path= Enter the path to the JSON RTE to which you want to migrate the HTML RTE content. - --locale= The locale from which entries will be migrated. - --stack-api-key= API key of the source stack. You must use either the --stack-api-key flag or the --alias - flag. - -DESCRIPTION - Migration script to migrate content from HTML RTE to JSON RTE - -ALIASES - $ csdx cm:migrate-rte - -EXAMPLES - General Usage - - $ csdx cm:entries:migrate-html-rte --config-path path/to/config.json - - - - Using Flags - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path html-path --json-path json-path - - - - Nested RTE - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path modular_block_uid.block_uid.html_rte_uid --json-path modular_block_uid.block_uid.json_rte_uid - - - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type content_type_uid --html-path group_uid.html_rte_uid --json-path group_uid.json_rte_uid - - - - Global Field - - $ csdx cm:entries:migrate-html-rte --alias alias --content-type global_field_uid --global-field --html-path html-path --json-path json-path -``` - -_See code: [@contentstack/cli-cm-migrate-rte](https://github.com/contentstack/cli/blob/main/packages/contentstack-migrate-rte/src/commands/cm/entries/migrate-html-rte.js)_ - ## `csdx cm:entries:publish [-a ] [--retry-failed ] [--bulk-publish ] [--publish-all-content-types] [--content-types ] [--locales ] [-e ] [-c ] [-y] [--branch ] [--delivery-token ] [--source-env ] [--entry-uid ] [--include-variants]` Publish entries from multiple contenttypes to multiple environments and locales @@ -2392,8 +2327,6 @@ FLAGS extensions, marketplace-apps, global-fields, labels, locales, webhooks, workflows, custom-roles, personalize projects, and taxonomies. -y, --yes [optional] Force override all Marketplace prompts. - --branch-alias= Specify the branch alias where you want to import your content. If not - specified, the content is imported into the main branch by default. --branch-alias= Specify the branch alias where you want to import your content. If not specified, the content is imported into the main branch by default. --exclude-global-modules Excludes the branch-independent module from the import operation. @@ -2449,8 +2382,6 @@ FLAGS branches involved, then the path should point till the particular branch. For example, “-d "C:\Users\Name\Desktop\cli\content\branch_name" -k, --stack-api-key= API key of the target stack - --branch-alias= Specify the branch alias where you want to import your content. If not specified, the - content is imported into the main branch by default. --branch-alias= Specify the branch alias where you want to import your content. If not specified, the content is imported into the main branch by default. --module=