diff --git a/.talismanrc b/.talismanrc index 58ae8ba6b..1ecf6680c 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,5 @@ fileignoreconfig: + - filename: pnpm-lock.yaml - checksum: 31e333d6769adbaae042c92ea0930fab168a0e06fc1bda406d49fd1042a7a9c7 -version: '1.0' + checksum: 90ca97ef1a06fb5b7d8071f1317e079de6a34fce91559f70f80d9d958b5a834e + version: '1.0' diff --git a/packages/contentstack-apps-cli/package.json b/packages/contentstack-apps-cli/package.json index 59b265e12..41946f0e9 100644 --- a/packages/contentstack-apps-cli/package.json +++ b/packages/contentstack-apps-cli/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/apps-cli", - "version": "1.7.3", + "version": "1.7.4", "description": "App ClI", "author": "Contentstack CLI", "homepage": "https://github.com/contentstack/cli-plugins/tree/main/packages/contentstack-apps-cli", @@ -24,8 +24,8 @@ "@apollo/client": "^3.14.1", "@contentstack/cli-command": "~1.8.5", "@contentstack/cli-launch": "^1.11.1", - "@contentstack/cli-utilities": "~1.19.0", - "adm-zip": "^0.5.17", + "@contentstack/cli-utilities": "~1.19.1", + "adm-zip": "^0.6.0", "chalk": "^4.1.2", "lodash": "^4.18.1", "shelljs": "^0.10.0", @@ -106,4 +106,4 @@ "app:deploy": "APDP" } } -} +} \ No newline at end of file diff --git a/packages/contentstack-audit/README.md b/packages/contentstack-audit/README.md index 0cbcc1f20..43ba0ad3b 100644 --- a/packages/contentstack-audit/README.md +++ b/packages/contentstack-audit/README.md @@ -16,7 +16,7 @@ $ npm install -g @contentstack/cli-audit $ csdx COMMAND running command... $ csdx (--version|-v) -@contentstack/cli-audit/1.19.5 darwin-arm64 node-v22.21.1 +@contentstack/cli-audit/1.21.0 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-audit/package.json b/packages/contentstack-audit/package.json index dbcdf02e5..039441212 100644 --- a/packages/contentstack-audit/package.json +++ b/packages/contentstack-audit/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-audit", - "version": "1.20.0", + "version": "1.21.0", "description": "Contentstack audit plugin", "author": "Contentstack CLI", "homepage": "https://github.com/contentstack/cli", @@ -19,7 +19,7 @@ ], "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "chalk": "^4.1.2", "fast-csv": "^4.3.6", diff --git a/packages/contentstack-audit/src/audit-base-command.ts b/packages/contentstack-audit/src/audit-base-command.ts index b78650a31..d86efb057 100644 --- a/packages/contentstack-audit/src/audit-base-command.ts +++ b/packages/contentstack-audit/src/audit-base-command.ts @@ -94,6 +94,8 @@ export abstract class AuditBaseCommand extends BaseCommand; missingEnvLocale?: Record; missingMultipleFields?: Record; + missingAssetRefs?: Record; } = {}, missingMandatoryFields, missingTitleFields, @@ -215,6 +228,8 @@ export abstract class AuditBaseCommand extends BaseCommand, ): Promise { log.debug(`Preparing report for module: ${moduleName}`, this.auditContext); @@ -656,7 +682,8 @@ export abstract class AuditBaseCommand extends BaseCommand, ): Promise { if (Object.keys(config.moduleConfig).includes(moduleName) || config.feild_level_modules.includes(moduleName)) { diff --git a/packages/contentstack-audit/src/config/index.ts b/packages/contentstack-audit/src/config/index.ts index e291554fa..b3f0e2553 100644 --- a/packages/contentstack-audit/src/config/index.ts +++ b/packages/contentstack-audit/src/config/index.ts @@ -55,6 +55,9 @@ const config = { name: 'assets', dirName: 'assets', fileName: 'assets.json', + // Asset scan statuses that must block import/reference; any other value (including + // 'not_scanned', 'clean', or the field being absent) is treated as safe. + blockingScanStatuses: ['pending', 'quarantined'], }, environments: { name: 'environments', @@ -110,6 +113,8 @@ const config = { 'publish_locale', 'publish_environment', 'asset_uid', + 'scan_status', + 'mandatory', 'selectedValue', 'ct_uid', 'action', @@ -129,6 +134,7 @@ const config = { Entry_Missing_Locale_and_Env: 'Entry_Missing_Locale_and_Env', Entry_Missing_Locale_and_Env_in_Publish_Details: 'Entry_Missing_Locale_and_Env_in_Publish_Details', Entry_Multiple_Fields: 'Entry_Multiple_Fields', + Entries_Asset_field: 'Entries_Asset_field', }, feild_level_modules: [ 'Entries_Title_field', @@ -137,6 +143,8 @@ const config = { 'Entry_Missing_Locale_and_Env_in_Publish_Details', 'field-rules', 'Entry_Multiple_Fields', + 'Entries_Asset_field', + 'asset-scan-status', 'Summary', ], fixSelectField: false, diff --git a/packages/contentstack-audit/src/messages/index.ts b/packages/contentstack-audit/src/messages/index.ts index a2b654128..dac9136f9 100644 --- a/packages/contentstack-audit/src/messages/index.ts +++ b/packages/contentstack-audit/src/messages/index.ts @@ -49,6 +49,8 @@ const auditMsg = { FIELD_RULE_TARGET_ABSENT: `The target field '{target_field}' is not present in the schema of the content-type {ctUid}`, FIELD_RULE_CONDITION_SCAN_MESSAGE: `Completed Scanning of Field Rule '{num}' condition of Content-type '{ctUid}'`, FIELD_RULE_TARGET_SCAN_MESSAGE: `Completed Scanning of Field Rule '{num}' target of Content-type '{ctUid}'`, + SCAN_ASSET_QUARANTINE_MSG: `Asset with UID '{uid}' has a non-clean scan status ('{status}') and will be excluded from import.`, + ENTRY_ASSET_REF_WARN_MSG: `Entry '{uid}' field '{field}' references asset '{asset_uid}' with scan status '{status}'; it will be removed on fix.`, }; const auditFixMsg = { @@ -63,6 +65,8 @@ const auditFixMsg = { ENTRY_SELECT_FIELD_FIX: `Adding the value '{value}' in the select field of entry UID '{uid}'...`, ASSET_FIX: `Fixed publish detials for Asset with UID '{uid}'`, FIELD_RULE_FIX_MESSAGE: `Fixed Field Rule '{num}' target of Content-type '{ctUid}`, + ASSET_SCAN_STATUS_FIX: `Removed asset with UID '{uid}' (scan status: '{status}') from assets.json.`, + ENTRY_ASSET_REF_FIX: `Removed reference to asset '{asset_uid}' from entry '{uid}' field '{field}'.`, }; const messages: typeof errors & diff --git a/packages/contentstack-audit/src/modules/assets.ts b/packages/contentstack-audit/src/modules/assets.ts index af00aa5bb..022af13f9 100644 --- a/packages/contentstack-audit/src/modules/assets.ts +++ b/packages/contentstack-audit/src/modules/assets.ts @@ -27,6 +27,7 @@ export default class Assets { public environments: string[] = []; protected schema: ContentTypeStruct[] = []; protected missingEnvLocales: Record = {}; + public missingScanStatusAssets: Record = {}; public moduleName: keyof typeof auditConfig.moduleConfig; constructor({ fix, config, moduleName }: ModuleConstructorParam & CtConstructorParam) { @@ -184,7 +185,24 @@ export default class Assets { for (const assetUid in assets) { log.debug(`Processing asset: ${assetUid}`, this.config.auditContext); - + + const scanStatus = this.assets[assetUid]?._asset_scan_status; + if (this.config.moduleConfig.assets.blockingScanStatuses.includes(scanStatus)) { + log.debug(`Asset ${assetUid} has a non-clean scan status: ${scanStatus}`, this.config.auditContext); + cliux.print($t(auditMsg.SCAN_ASSET_QUARANTINE_MSG, { uid: assetUid, status: scanStatus }), { + color: 'yellow', + }); + this.missingScanStatusAssets[assetUid] = [ + { asset_uid: assetUid, filename: this.assets[assetUid].filename, scan_status: scanStatus }, + ]; + + if (this.fix) { + log.info($t(auditFixMsg.ASSET_SCAN_STATUS_FIX, { uid: assetUid, status: scanStatus }), this.config.auditContext); + delete this.assets[assetUid]; + continue; + } + } + if (this.assets[assetUid]?.publish_details && !Array.isArray(this.assets[assetUid].publish_details)) { log.debug(`Asset ${assetUid} has invalid publish_details format`, this.config.auditContext); cliux.print($t(auditMsg.ASSET_NOT_EXIST, { uid: assetUid }), { color: 'red' }); @@ -226,15 +244,19 @@ 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); - + if (this.fix) { log.debug(`Fixing asset ${assetUid}`, this.config.auditContext); log.info($t(auditFixMsg.ASSET_FIX, { uid: assetUid }), this.config.auditContext); - await this.writeFixContent(`${basePath}/${indexer[fileIndex]}`, this.assets); } } + + if (this.fix) { + log.debug(`Writing fixed assets chunk to: ${basePath}/${indexer[fileIndex]}`, this.config.auditContext); + await this.writeFixContent(`${basePath}/${indexer[fileIndex]}`, this.assets); + } } - + log.debug(`Asset reference validation completed. Processed ${Object.keys(this.missingEnvLocales).length} assets with issues`, this.config.auditContext); } } diff --git a/packages/contentstack-audit/src/modules/entries.ts b/packages/contentstack-audit/src/modules/entries.ts index 02697d50b..6fc0ee144 100644 --- a/packages/contentstack-audit/src/modules/entries.ts +++ b/packages/contentstack-audit/src/modules/entries.ts @@ -58,8 +58,11 @@ export default class Entries { protected missingTitleFields: Record = {}; protected missingEnvLocale: Record = {}; protected missingMultipleField: Record = {}; + protected missingAssetRefs: Record = {}; public environments: string[] = []; public entryMetaData: Record[] = []; + public assetMetaData: Record = {}; + public assetsDataAvailable = false; public moduleName: keyof typeof auditConfig.moduleConfig = 'entries'; constructor({ fix, config, moduleName, ctSchema, gfSchema }: ModuleConstructorParam & CtConstructorParam) { @@ -154,6 +157,10 @@ export default class Entries { await this.prepareEntryMetaData(); log.debug(`Entry metadata prepared: ${this.entryMetaData.length} entries found`, this.config.auditContext); + log.debug('Preparing asset metadata', this.config.auditContext); + await this.prepareAssetMetaData(); + log.debug(`Asset metadata prepared: ${Object.keys(this.assetMetaData).length} assets found`, this.config.auditContext); + log.debug('Fixing prerequisite data', this.config.auditContext); await this.fixPrerequisiteData(); log.debug('Prerequisite data fix completed', this.config.auditContext); @@ -198,6 +205,10 @@ export default class Entries { if (!this.missingMandatoryFields[this.currentUid]) { this.missingMandatoryFields[this.currentUid] = []; } + + if (!this.missingAssetRefs[this.currentUid]) { + this.missingAssetRefs[this.currentUid] = []; + } if (this.fix) { log.debug(`Removing missing keys from entry ${uid}`, this.config.auditContext); this.removeMissingKeysOnEntry(ctSchema.schema as ContentTypeSchemaType[], this.entries[entryUid]); @@ -234,6 +245,14 @@ export default class Entries { }); } + if (this.missingAssetRefs[this.currentUid]?.length) { + log.debug(`Found ${this.missingAssetRefs[this.currentUid].length} missing/quarantined asset references for entry ${uid}`, this.config.auditContext); + this.missingAssetRefs[this.currentUid].forEach((entry: any) => { + entry.ct = ctSchema.uid; + entry.locale = code; + }); + } + const fields = this.missingMandatoryFields[uid]; const isPublished = entry.publish_details?.length > 0; log.debug(`Entry ${uid} published status: ${isPublished}, missing mandatory fields: ${fields?.length || 0}`, this.config.auditContext); @@ -343,6 +362,7 @@ export default class Entries { missingTitleFields: this.missingTitleFields, missingEnvLocale: this.missingEnvLocale, missingMultipleFields: this.missingMultipleField, + missingAssetRefs: this.missingAssetRefs, }; log.debug(`Entries audit completed. Found issues:`, this.config.auditContext); @@ -388,8 +408,17 @@ export default class Entries { removedMandatoryFields++; } } - - log.debug(`Cleanup completed: removed ${removedRefs} empty refs, ${removedSelectFields} empty select fields, ${removedMandatoryFields} empty mandatory fields`, this.config.auditContext); + + let removedAssetRefs = 0; + for (let propName in this.missingAssetRefs) { + if (!this.missingAssetRefs[propName].length) { + log.debug(`Removing empty missing asset references for entry: ${propName}`, this.config.auditContext); + delete this.missingAssetRefs[propName]; + removedAssetRefs++; + } + } + + log.debug(`Cleanup completed: removed ${removedRefs} empty refs, ${removedSelectFields} empty select fields, ${removedMandatoryFields} empty mandatory fields, ${removedAssetRefs} empty asset refs`, this.config.auditContext); } /** @@ -624,6 +653,16 @@ export default class Entries { entry[uid] as EntryGroupFieldDataType[], ); break; + case 'file': + log.debug(`Validating file/asset field: ${display_name}`, this.config.auditContext); + const assetRefResults = this.validateFileField( + [...tree, { uid: child.uid, name: child.display_name, field: uid }], + child, + entry[uid], + ); + this.missingAssetRefs[this.currentUid].push(...assetRefResults); + log.debug(`Found ${assetRefResults.length} quarantined/missing asset references in field: ${display_name}`, this.config.auditContext); + break; case 'text': case 'number': if (child.hasOwnProperty('display_type')) { @@ -888,6 +927,60 @@ export default class Entries { log.debug(`Group field validation completed for: ${fieldStructure.display_name}`); } + /** + * Returns true when the given asset uid should be treated as unusable — either it doesn't + * exist in the exported assets.json at all, or it exists but its scan status is one of + * config.moduleConfig.assets.blockingScanStatuses (e.g. 'pending'/'quarantined'). Any other + * status — including 'clean', 'not_scanned' (org has asset scanning disabled), or the field + * being absent — is not a blocking condition. Returns false (never flag) when asset metadata + * wasn't available at all, since we can't validate what we don't have data for. + */ + isAssetBad(uid?: string): boolean { + if (!this.assetsDataAvailable || !uid) return false; + const assetRecord = this.assetMetaData[uid]; + if (!assetRecord) return true; + return this.config.moduleConfig.assets.blockingScanStatuses.includes(assetRecord._asset_scan_status ?? ''); + } + + /** + * The function `validateFileField` checks a `data_type: 'file'` (asset reference) field's + * value(s) against the asset metadata index and returns an issue when any referenced asset is + * missing or has a non-clean scan status. + */ + validateFileField( + tree: Record[], + fieldStructure: { uid: string; data_type: string; display_name: string; mandatory?: boolean }, + field: any, + ): EntryRefErrorReturnType[] { + log.debug(`Validating file/asset field: ${fieldStructure.display_name}`, this.config.auditContext); + + const values = Array.isArray(field) ? field : field ? [field] : []; + const missingRefs = values + .filter((ref: any) => this.isAssetBad(ref?.uid)) + .map((ref: any) => ({ asset_uid: ref?.uid, filename: ref?.filename })); + + if (isEmpty(missingRefs)) { + log.debug('File/asset field validation completed: no issues found', this.config.auditContext); + return []; + } + + return [ + { + tree, + missingRefs, + uid: this.currentUid, + name: this.currentTitle, + data_type: fieldStructure.data_type, + display_name: fieldStructure.display_name, + mandatory: fieldStructure.mandatory, + treeStr: tree + .map(({ name }) => name) + .filter((val) => val) + .join(' ➜ '), + } as unknown as EntryRefErrorReturnType, + ]; + } + /** * The function `validateReferenceValues` checks if the references in a given field exist in the * provided tree and returns any missing references. @@ -1125,6 +1218,14 @@ export default class Entries { entry[uid] as EntryGroupFieldDataType[], ) as EntryGroupFieldDataType; break; + case 'file': + log.debug(`Fixing file/asset field: ${uid}`); + this.fixFileFieldReferences( + [...tree, { uid: field.uid, name: field.display_name, data_type: field.data_type }], + field, + entry, + ); + break; case 'text': case 'number': if (field.hasOwnProperty('display_type')) { @@ -1574,6 +1675,65 @@ export default class Entries { return field; } + /** + * The function `fixFileFieldReferences` strips references to missing/quarantined/pending-scan + * assets from a `data_type: 'file'` field. A single-object value with a bad asset uid is deleted + * from the entry entirely; a `multiple: true` array value has its bad entries filtered out, and + * the key itself is deleted if the array becomes empty as a result. + */ + fixFileFieldReferences( + tree: Record[], + field: { uid: string; data_type: string; display_name: string; mandatory?: boolean }, + entry: Record, + ) { + log.debug(`Fixing file/asset field: ${field.display_name}`); + const { uid, display_name, data_type, mandatory } = field; + const value = entry[uid]; + + if (value == null) { + return entry; + } + + const missingRefs: Record[] = []; + + if (Array.isArray(value)) { + entry[uid] = value.filter((ref: any) => { + if (this.isAssetBad(ref?.uid)) { + missingRefs.push({ asset_uid: ref?.uid, filename: ref?.filename }); + return false; + } + return true; + }); + if (!entry[uid].length) { + delete entry[uid]; + } + } else if (this.isAssetBad(value?.uid)) { + missingRefs.push({ asset_uid: value?.uid, filename: value?.filename }); + delete entry[uid]; + } + + if (!isEmpty(missingRefs)) { + log.debug(`Recording asset reference fix for entry: ${this.currentUid}`); + this.missingAssetRefs[this.currentUid].push({ + tree, + data_type, + missingRefs, + display_name, + mandatory, + fixStatus: 'Fixed', + uid: this.currentUid, + name: this.currentTitle, + treeStr: tree + .map(({ name }) => name) + .filter((val) => val) + .join(' ➜ '), + }); + } + + log.debug(`File/asset fix completed for: ${field.display_name}`); + return entry; + } + /** * The function `fixGroupField` takes in a tree, a field, and an entry, and if the field has a * schema, it runs a fix on the schema and returns the updated entry, otherwise it returns the @@ -1991,4 +2151,45 @@ export default class Entries { log.debug(`Entry metadata preparation completed: ${this.entryMetaData.length} entries processed`, this.config.auditContext); log.debug(`Missing title fields found: ${Object.keys(this.missingTitleFields).length}`, this.config.auditContext); } + + /** + * Builds an index of asset uid -> { uid, filename, _asset_scan_status } from the exported + * assets/assets.json, mirroring the FsUtility chunk-read pattern used in the Assets module + * (src/modules/assets.ts). If the assets data isn't present in this export at all, + * `assetsDataAvailable` stays false and `isAssetBad()` never flags anything — absence of data + * must not be treated as every file-field reference being broken. + */ + async prepareAssetMetaData() { + log.debug('Starting asset metadata preparation', this.config.auditContext); + + const assetsBasePath = resolve( + sanitizePath(this.config.basePath), + sanitizePath(this.config.moduleConfig.assets.dirName), + ); + const assetsIndexPath = join(assetsBasePath, this.config.moduleConfig.assets.fileName); + + if (!existsSync(assetsIndexPath)) { + log.debug(`No assets data found at: ${assetsIndexPath}`, this.config.auditContext); + this.assetsDataAvailable = false; + return; + } + + this.assetsDataAvailable = true; + const fsUtility = new FsUtility({ basePath: assetsBasePath, indexFileName: 'assets.json' }); + const indexer = fsUtility.indexFileContent; + log.debug(`Found ${Object.keys(indexer).length} asset files to process`, this.config.auditContext); + + for (const _ in indexer) { + const assets = (await fsUtility.readChunkFiles.next()) as Record; + for (const assetUid in assets) { + this.assetMetaData[assetUid] = { + uid: assetUid, + filename: assets[assetUid]?.filename, + _asset_scan_status: assets[assetUid]?._asset_scan_status, + }; + } + } + + log.debug(`Asset metadata preparation completed: ${Object.keys(this.assetMetaData).length} assets processed`, this.config.auditContext); + } } diff --git a/packages/contentstack-audit/src/types/content-types.ts b/packages/contentstack-audit/src/types/content-types.ts index 2a27e92af..bd723c42e 100644 --- a/packages/contentstack-audit/src/types/content-types.ts +++ b/packages/contentstack-audit/src/types/content-types.ts @@ -162,6 +162,8 @@ enum OutputColumn { 'publish_locale' = 'publish_locale', 'publish_environment' = 'publish_environment', 'asset_uid' = 'asset_uid', + 'scan_status' = 'scan_status', + 'mandatory' = 'mandatory', 'selectedValue' = 'selectedValue', 'fixStatus' = 'fixStatus', 'Content_type_uid' = 'ct_uid', diff --git a/packages/contentstack-audit/test/unit/mock/contents/assets/assets.json b/packages/contentstack-audit/test/unit/mock/contents/assets/assets.json new file mode 100644 index 000000000..825a196ea --- /dev/null +++ b/packages/contentstack-audit/test/unit/mock/contents/assets/assets.json @@ -0,0 +1 @@ +{"1":"chunk1-assets.json"} diff --git a/packages/contentstack-audit/test/unit/mock/contents/assets/chunk1-assets.json b/packages/contentstack-audit/test/unit/mock/contents/assets/chunk1-assets.json new file mode 100644 index 000000000..e3ddd99ba --- /dev/null +++ b/packages/contentstack-audit/test/unit/mock/contents/assets/chunk1-assets.json @@ -0,0 +1,41 @@ +{ + "blt-clean-asset": { + "uid": "blt-clean-asset", + "filename": "clean.jpg", + "url": "https://images.contentstack.io/v3/assets/blt/blt-clean-asset/clean.jpg", + "_version": 1, + "_asset_scan_status": "clean", + "publish_details": [] + }, + "blt-pending-asset": { + "uid": "blt-pending-asset", + "filename": "pending.zip", + "url": "https://assets.contentstack.io/v3/assets/blt/blt-pending-asset/pending.zip", + "_version": 1, + "_asset_scan_status": "pending", + "publish_details": [] + }, + "blt-quarantined-asset": { + "uid": "blt-quarantined-asset", + "filename": "quarantined.zip", + "url": "https://assets.contentstack.io/v3/assets/blt/blt-quarantined-asset/quarantined.zip", + "_version": 1, + "_asset_scan_status": "quarantined", + "publish_details": [] + }, + "blt-no-status-asset": { + "uid": "blt-no-status-asset", + "filename": "no-status.png", + "url": "https://images.contentstack.io/v3/assets/blt/blt-no-status-asset/no-status.png", + "_version": 1, + "publish_details": [] + }, + "blt-not-scanned-asset": { + "uid": "blt-not-scanned-asset", + "filename": "not-scanned.png", + "url": "https://images.contentstack.io/v3/assets/blt/blt-not-scanned-asset/not-scanned.png", + "_version": 1, + "_asset_scan_status": "not_scanned", + "publish_details": [] + } +} diff --git a/packages/contentstack-audit/test/unit/modules/assets.test.ts b/packages/contentstack-audit/test/unit/modules/assets.test.ts new file mode 100644 index 000000000..82409db87 --- /dev/null +++ b/packages/contentstack-audit/test/unit/modules/assets.test.ts @@ -0,0 +1,76 @@ +import fs from 'fs'; +import { resolve } from 'path'; +import { expect } from 'chai'; +import fancy from 'fancy-test'; +import Sinon from 'sinon'; +import config from '../../../src/config'; +import { Assets } from '../../../src/modules'; +import { ModuleConstructorParam, CtConstructorParam } from '../../../src/types'; +import { mockLogger } from '../mock-logger'; + +describe('Assets module', () => { + let constructorParam: ModuleConstructorParam & CtConstructorParam; + + beforeEach(() => { + constructorParam = { + moduleName: 'assets', + ctSchema: [], + gfSchema: [], + config: Object.assign(config, { basePath: resolve(__dirname, '..', 'mock', 'contents'), flags: {} }), + }; + + Sinon.stub(require('@contentstack/cli-utilities'), 'log').value(mockLogger); + }); + + afterEach(() => { + Sinon.restore(); + }); + + describe('lookForReference method (scan status)', () => { + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('flags assets with a non-clean scan status and leaves clean/no-status assets alone', async () => { + const assetsInstance = new Assets(constructorParam); + await assetsInstance.prerequisiteData(); + await assetsInstance.lookForReference(); + + expect(Object.keys(assetsInstance.missingScanStatusAssets)).to.have.members([ + 'blt-pending-asset', + 'blt-quarantined-asset', + ]); + expect(assetsInstance.missingScanStatusAssets['blt-pending-asset'][0]).to.deep.include({ + asset_uid: 'blt-pending-asset', + scan_status: 'pending', + }); + expect(assetsInstance.missingScanStatusAssets['blt-quarantined-asset'][0]).to.deep.include({ + asset_uid: 'blt-quarantined-asset', + scan_status: 'quarantined', + }); + expect(assetsInstance.missingScanStatusAssets).to.not.have.property('blt-clean-asset'); + expect(assetsInstance.missingScanStatusAssets).to.not.have.property('blt-no-status-asset'); + expect(assetsInstance.missingScanStatusAssets).to.not.have.property('blt-not-scanned-asset'); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .stub(fs, 'writeFileSync', () => {}) + .it('removes non-clean assets from the written-back chunk when fix mode is on', async () => { + const writeFileSyncStub = Sinon.spy(fs, 'writeFileSync'); + const assetsInstance = new Assets({ + ...constructorParam, + fix: true, + config: { ...constructorParam.config, flags: { yes: true } }, + }); + await assetsInstance.prerequisiteData(); + await assetsInstance.lookForReference(); + + expect(writeFileSyncStub.called).to.be.true; + const writtenContent = JSON.parse(writeFileSyncStub.firstCall.args[1] as string); + expect(writtenContent).to.not.have.property('blt-pending-asset'); + expect(writtenContent).to.not.have.property('blt-quarantined-asset'); + expect(writtenContent).to.have.property('blt-clean-asset'); + expect(writtenContent).to.have.property('blt-no-status-asset'); + expect(writtenContent).to.have.property('blt-not-scanned-asset'); + }); + }); +}); diff --git a/packages/contentstack-audit/test/unit/modules/entries.test.ts b/packages/contentstack-audit/test/unit/modules/entries.test.ts index 911ba3316..4c486db58 100644 --- a/packages/contentstack-audit/test/unit/modules/entries.test.ts +++ b/packages/contentstack-audit/test/unit/modules/entries.test.ts @@ -1540,4 +1540,254 @@ describe('Entries module', () => { expect(callHelper('sys_assets', ['ct1'])).to.be.true; }); }); + + describe('prepareAssetMetaData method', () => { + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('builds an asset metadata index from assets/assets.json when it exists', async () => { + const ctInstance = new Entries(constructorParam); + await ctInstance.prepareAssetMetaData(); + + expect(ctInstance.assetsDataAvailable).to.be.true; + expect(ctInstance.assetMetaData['blt-clean-asset']).to.deep.include({ + uid: 'blt-clean-asset', + _asset_scan_status: 'clean', + }); + expect(ctInstance.assetMetaData['blt-pending-asset']).to.deep.include({ + uid: 'blt-pending-asset', + _asset_scan_status: 'pending', + }); + expect(ctInstance.assetMetaData['blt-not-scanned-asset']).to.deep.include({ + uid: 'blt-not-scanned-asset', + _asset_scan_status: 'not_scanned', + }); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('leaves assetsDataAvailable false when no assets data exists in this export', async () => { + const ctInstance = new Entries({ + ...constructorParam, + config: { ...constructorParam.config, basePath: resolve(__dirname, '..', 'mock', 'contents-1') }, + }); + await ctInstance.prepareAssetMetaData(); + + expect(ctInstance.assetsDataAvailable).to.be.false; + expect(ctInstance.assetMetaData).to.deep.equal({}); + }); + }); + + describe('isAssetBad method', () => { + fancy.stdout({ print: process.env.PRINT === 'true' || false }).it('returns false when assets data is unavailable', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = false; + (ctInstance as any).assetMetaData = {}; + expect(ctInstance.isAssetBad('blt-unknown')).to.be.false; + }); + + fancy.stdout({ print: process.env.PRINT === 'true' || false }).it('returns false when uid is falsy', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = true; + expect(ctInstance.isAssetBad(undefined)).to.be.false; + }); + + fancy.stdout({ print: process.env.PRINT === 'true' || false }).it('returns true when the asset uid is not found in the index', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = {}; + expect(ctInstance.isAssetBad('blt-unknown')).to.be.true; + }); + + fancy.stdout({ print: process.env.PRINT === 'true' || false }).it('returns true when the asset scan status is non-clean', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { 'blt-1': { uid: 'blt-1', _asset_scan_status: 'quarantined' } }; + expect(ctInstance.isAssetBad('blt-1')).to.be.true; + }); + + fancy.stdout({ print: process.env.PRINT === 'true' || false }).it('returns false when the asset is clean or has no scan status', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { + 'blt-clean': { uid: 'blt-clean', _asset_scan_status: 'clean' }, + 'blt-legacy': { uid: 'blt-legacy' }, + }; + expect(ctInstance.isAssetBad('blt-clean')).to.be.false; + expect(ctInstance.isAssetBad('blt-legacy')).to.be.false; + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('returns false when the asset scan status is not_scanned (org has asset scanning disabled)', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { + 'blt-not-scanned': { uid: 'blt-not-scanned', _asset_scan_status: 'not_scanned' }, + }; + expect(ctInstance.isAssetBad('blt-not-scanned')).to.be.false; + }); + }); + + describe('validateFileField method', () => { + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('flags a single file-field value that references a quarantined asset', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).currentTitle = 'Test Entry'; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { + 'blt-quarantined': { uid: 'blt-quarantined', _asset_scan_status: 'quarantined' }, + }; + + const fieldStructure = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const value = { uid: 'blt-quarantined', filename: 'bad.zip' }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.validateFileField(tree, fieldStructure, value); + + expect(result).to.have.length(1); + expect(result[0].missingRefs).to.deep.equal([{ asset_uid: 'blt-quarantined', filename: 'bad.zip' }]); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('does not flag a single file-field value that references a clean asset', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { 'blt-clean': { uid: 'blt-clean', _asset_scan_status: 'clean' } }; + + const fieldStructure = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const value = { uid: 'blt-clean', filename: 'ok.jpg' }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.validateFileField(tree, fieldStructure, value); + + expect(result).to.have.length(0); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('flags only the bad entries within a multiple:true file-field array', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { 'blt-clean': { uid: 'blt-clean', _asset_scan_status: 'clean' } }; + + const fieldStructure = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const value = [ + { uid: 'blt-clean', filename: 'ok.jpg' }, + { uid: 'blt-pending', filename: 'bad.zip' }, + ]; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.validateFileField(tree, fieldStructure, value); + + expect(result).to.have.length(1); + expect(result[0].missingRefs).to.deep.equal([{ asset_uid: 'blt-pending', filename: 'bad.zip' }]); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('does not flag anything when asset metadata is unavailable', () => { + const ctInstance = new Entries(constructorParam); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).assetsDataAvailable = false; + + const fieldStructure = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const value = { uid: 'blt-unknown', filename: 'unknown.jpg' }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.validateFileField(tree, fieldStructure, value); + + expect(result).to.have.length(0); + }); + }); + + describe('fixFileFieldReferences method', () => { + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('deletes the field key when a single file-field value references a bad asset', () => { + const ctInstance = new Entries({ ...constructorParam, fix: true }); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).currentTitle = 'Test Entry'; + (ctInstance as any).missingAssetRefs = { 'test-entry': [] }; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { + 'blt-quarantined': { uid: 'blt-quarantined', _asset_scan_status: 'quarantined' }, + }; + + const field = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const entry: Record = { file_field: { uid: 'blt-quarantined', filename: 'bad.zip' } }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.fixFileFieldReferences(tree, field, entry); + + expect(result).to.not.have.property('file_field'); + expect((ctInstance as any).missingAssetRefs['test-entry']).to.have.length(1); + expect((ctInstance as any).missingAssetRefs['test-entry'][0].fixStatus).to.equal('Fixed'); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('leaves a single file-field value referencing a clean asset untouched', () => { + const ctInstance = new Entries({ ...constructorParam, fix: true }); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).missingAssetRefs = { 'test-entry': [] }; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = { 'blt-clean': { uid: 'blt-clean', _asset_scan_status: 'clean' } }; + + const field = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const entry: Record = { file_field: { uid: 'blt-clean', filename: 'ok.jpg' } }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + ctInstance.fixFileFieldReferences(tree, field, entry); + + expect(entry).to.have.property('file_field'); + expect((ctInstance as any).missingAssetRefs['test-entry']).to.have.length(0); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('filters bad entries out of a multiple:true array and deletes the key if it empties out', () => { + const ctInstance = new Entries({ ...constructorParam, fix: true }); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).missingAssetRefs = { 'test-entry': [] }; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = {}; + + const field = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: false }; + const entry: Record = { + file_field: [ + { uid: 'blt-1', filename: 'one.zip' }, + { uid: 'blt-2', filename: 'two.zip' }, + ], + }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + const result = ctInstance.fixFileFieldReferences(tree, field, entry); + + expect(result).to.not.have.property('file_field'); + expect((ctInstance as any).missingAssetRefs['test-entry'][0].missingRefs).to.have.length(2); + }); + + fancy + .stdout({ print: process.env.PRINT === 'true' || false }) + .it('records mandatory:true on the fix issue so a stripped required field stays visible in the report', () => { + const ctInstance = new Entries({ ...constructorParam, fix: true }); + (ctInstance as any).currentUid = 'test-entry'; + (ctInstance as any).missingAssetRefs = { 'test-entry': [] }; + (ctInstance as any).assetsDataAvailable = true; + (ctInstance as any).assetMetaData = {}; + + const field = { uid: 'file_field', display_name: 'File Field', data_type: 'file', mandatory: true }; + const entry: Record = { file_field: { uid: 'blt-missing', filename: 'gone.zip' } }; + const tree = [{ uid: 'test-entry', name: 'Test Entry' }]; + + ctInstance.fixFileFieldReferences(tree, field, entry); + + expect((ctInstance as any).missingAssetRefs['test-entry'][0].mandatory).to.be.true; + }); + }); }); diff --git a/packages/contentstack-bootstrap/README.md b/packages/contentstack-bootstrap/README.md index 2aadfdf45..c132a306a 100644 --- a/packages/contentstack-bootstrap/README.md +++ b/packages/contentstack-bootstrap/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-cm-bootstrap $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-bootstrap/1.19.7 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-bootstrap/1.19.9 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-bootstrap/package.json b/packages/contentstack-bootstrap/package.json index 3e736cf0e..3bbd5fa74 100644 --- a/packages/contentstack-bootstrap/package.json +++ b/packages/contentstack-bootstrap/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-bootstrap", "description": "Bootstrap contentstack apps", - "version": "1.19.8", + "version": "1.19.9", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "scripts": { @@ -17,10 +17,10 @@ "lint": "eslint \"src/**/*.ts\"" }, "dependencies": { - "@contentstack/cli-cm-seed": "~1.15.9", + "@contentstack/cli-cm-seed": "~1.15.10", "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-config": "~1.21.0", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-config": "~1.21.1", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "inquirer": "8.2.7", "mkdirp": "^2.1.6", diff --git a/packages/contentstack-branches/README.md b/packages/contentstack-branches/README.md index df8c50b78..087f61cc8 100755 --- a/packages/contentstack-branches/README.md +++ b/packages/contentstack-branches/README.md @@ -23,7 +23,7 @@ $ npm install -g @contentstack/cli-cm-branches $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-branches/1.8.3 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-branches/1.8.5 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-branches/package.json b/packages/contentstack-branches/package.json index 82ba544a2..0e62e6ac1 100644 --- a/packages/contentstack-branches/package.json +++ b/packages/contentstack-branches/package.json @@ -1,12 +1,12 @@ { "name": "@contentstack/cli-cm-branches", "description": "Contentstack CLI plugin to do branches operations", - "version": "1.8.4", + "version": "1.8.5", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "chalk": "^4.1.2", "just-diff": "^6.0.2", diff --git a/packages/contentstack-bulk-operations/package.json b/packages/contentstack-bulk-operations/package.json index d38cabe92..54bddf2b3 100644 --- a/packages/contentstack-bulk-operations/package.json +++ b/packages/contentstack-bulk-operations/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-bulk-operations", - "version": "1.2.3", + "version": "1.2.4", "description": "Contentstack CLI plugin for bulk operations", "author": "Contentstack CLI", "homepage": "https://github.com/contentstack/cli-plugins/tree/main/packages/contentstack-bulk-operations", @@ -21,7 +21,7 @@ ], "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@contentstack/delivery-sdk": "^5.4.0", "@contentstack/management": "^1.30.3", "lodash": "^4.18.1", diff --git a/packages/contentstack-bulk-publish/.mocharc.json b/packages/contentstack-bulk-publish/.mocharc.json index 50e4a6804..3d76d7307 100644 --- a/packages/contentstack-bulk-publish/.mocharc.json +++ b/packages/contentstack-bulk-publish/.mocharc.json @@ -5,7 +5,8 @@ "test/unit/commands/assets/unpublish.test.js", "test/unit/commands/bulk-publish/cross-publish.test.js", "test/unit/commands/entries/publish.test.js", - "test/unit/commands/entries/unpublish.test.js" + "test/unit/commands/entries/unpublish.test.js", + "test/unit/util/asset-scan.test.js" ], "reporter": "dot", "timeout": 60000, diff --git a/packages/contentstack-bulk-publish/README.md b/packages/contentstack-bulk-publish/README.md index 2f1726f24..a0604a625 100644 --- a/packages/contentstack-bulk-publish/README.md +++ b/packages/contentstack-bulk-publish/README.md @@ -18,7 +18,7 @@ $ npm install -g @contentstack/cli-cm-bulk-publish $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-bulk-publish/1.12.1 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-bulk-publish/1.13.0 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND @@ -29,11 +29,11 @@ USAGE # Commands -* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) +* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---backup-dir-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) * [`csdx cm:assets:unpublish`](#csdx-cmassetsunpublish) * [`csdx cm:bulk-publish`](#csdx-cmbulk-publish) * [`csdx cm:entries:update-and-publish [-a ] [--retry-failed ] [--bulk-publish ] [--content-types ] [-t ] [-e ] [-c ] [-y] [--locales ] [--branch ]`](#csdx-cmentriesupdate-and-publish--a-value---retry-failed-value---bulk-publish-value---content-types-value--t-value--e-value--c-value--y---locales-value---branch-value) -* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) +* [`csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]`](#csdx-cmassetspublish--a-value---retry-failed-value--e-value---folder-uid-value---backup-dir-value---bulk-publish-value--c-value--y---locales-value---branch-value---delivery-token-value---source-env-value) * [`csdx cm:bulk-publish:clear`](#csdx-cmbulk-publishclear) * [`csdx cm:bulk-publish:configure`](#csdx-cmbulk-publishconfigure) * [`csdx cm:bulk-publish:cross-publish [-a ] [--retry-failed ] [--bulk-publish ] [--content-type ] [--locales ] [--source-env ] [--environments ] [--delivery-token ] [-c ] [-y] [--branch ] [--onlyAssets] [--onlyEntries] [--include-variants]`](#csdx-cmbulk-publishcross-publish--a-value---retry-failed-value---bulk-publish-value---content-type-value---locales-value---source-env-value---environments-value---delivery-token-value--c-value--y---branch-value---onlyassets---onlyentries---include-variants) @@ -55,14 +55,15 @@ USAGE * [`csdx cm:stacks:publish-revert`](#csdx-cmstackspublish-revert) * [`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:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]` +## `csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]` Publish assets to the specified environments ``` USAGE - $ csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish - ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ] + $ csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir + ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token + ] [--source-env ] FLAGS -B, --branch= [default: main] The name of the branch where you want to perform the bulk publish @@ -80,6 +81,10 @@ FLAGS locales, specify the codes separated by spaces. -y, --yes Set it to true to process the command with the current configuration. --api-version= API version to be used. Values [Default: 3, Nested Reference Publishing: 3.2]. + --backup-dir= (optional) Path to the import backup directory. When set, each imported asset is + published only to the environments and locales it was published to in the source stack + (read from the backup’s publish details and asset UID mapping), with asset-scan gating + applied. Intended for the post-import publish flow. --bulk-publish= [default: true] Set this flag to use Contentstack’s Bulk Publish APIs. It is true, by default. --delivery-token= The delivery token of the source environment. @@ -139,6 +144,12 @@ EXAMPLES Using --stack-api-key flag $ csdx cm:assets:publish --environments [ENVIRONMENT 1] [ENVIRONMENT 2] --locales [LOCALE] --stack-api-key [STACK API KEY] + + + + Using --backup-dir flag (publish imported assets to their original environments after asset scanning) + + $ csdx cm:assets:publish --backup-dir [PATH TO IMPORT BACKUP DIR] --stack-api-key [STACK API KEY] ``` _See code: [src/commands/cm/assets/publish.js](https://github.com/contentstack/cli/blob/main/packages/contentstack-bulk-publish/src/commands/cm/assets/publish.js)_ @@ -311,15 +322,15 @@ EXAMPLES $ csdx cm:entries:update-and-publish --content-types [CONTENT TYPE 1] [CONTENT TYPE 2] -e [ENVIRONMENT 1] [ENVIRONMENT 2] --locales [LOCALE 1] [LOCALE 2] --stack-api-key [STACK API KEY] ``` -## `csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]` +## `csdx cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]` Publish assets to the specified environments ``` USAGE $ csdx cm:bulk-publish:assets cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] - [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] - [--source-env ] + [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] + [--delivery-token ] [--source-env ] FLAGS -B, --branch= [default: main] The name of the branch where you want to perform the bulk publish @@ -337,6 +348,10 @@ FLAGS locales, specify the codes separated by spaces. -y, --yes Set it to true to process the command with the current configuration. --api-version= API version to be used. Values [Default: 3, Nested Reference Publishing: 3.2]. + --backup-dir= (optional) Path to the import backup directory. When set, each imported asset is + published only to the environments and locales it was published to in the source stack + (read from the backup’s publish details and asset UID mapping), with asset-scan gating + applied. Intended for the post-import publish flow. --bulk-publish= [default: true] Set this flag to use Contentstack’s Bulk Publish APIs. It is true, by default. --delivery-token= The delivery token of the source environment. @@ -396,6 +411,12 @@ EXAMPLES Using --stack-api-key flag $ csdx cm:assets:publish --environments [ENVIRONMENT 1] [ENVIRONMENT 2] --locales [LOCALE] --stack-api-key [STACK API KEY] + + + + Using --backup-dir flag (publish imported assets to their original environments after asset scanning) + + $ csdx cm:assets:publish --backup-dir [PATH TO IMPORT BACKUP DIR] --stack-api-key [STACK API KEY] ``` ## `csdx cm:bulk-publish:clear` diff --git a/packages/contentstack-bulk-publish/package.json b/packages/contentstack-bulk-publish/package.json index 6c4f3bdb3..b67c31605 100644 --- a/packages/contentstack-bulk-publish/package.json +++ b/packages/contentstack-bulk-publish/package.json @@ -1,13 +1,13 @@ { "name": "@contentstack/cli-cm-bulk-publish", "description": "Contentstack CLI plugin for bulk publish actions", - "version": "1.12.2", + "version": "1.13.0", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-config": "~1.21.0", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-config": "~1.21.1", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "chalk": "^4.1.2", "dotenv": "^16.6.1", diff --git a/packages/contentstack-bulk-publish/src/commands/cm/assets/publish.js b/packages/contentstack-bulk-publish/src/commands/cm/assets/publish.js index a032678c0..b121906c9 100644 --- a/packages/contentstack-bulk-publish/src/commands/cm/assets/publish.js +++ b/packages/contentstack-bulk-publish/src/commands/cm/assets/publish.js @@ -15,10 +15,12 @@ class AssetsPublishCommand extends Command { assetsFlags.folderUid = assetsFlags['folder-uid'] || assetsFlags.folderUid; assetsFlags.bulkPublish = assetsFlags['bulk-publish'] || assetsFlags.bulkPublish; assetsFlags.apiVersion = assetsFlags['api-version'] || '3'; // setting default value for apiVersion + assetsFlags.backupDir = assetsFlags['backup-dir'] || assetsFlags.backupDir; delete assetsFlags['api-version']; delete assetsFlags['retry-failed']; delete assetsFlags['folder-uid']; delete assetsFlags['bulk-publish']; + delete assetsFlags['backup-dir']; let updatedFlags; try { @@ -111,12 +113,18 @@ class AssetsPublishCommand extends Command { } } - validate({ environments, retryFailed, locales, 'source-env': sourceEnv, 'delivery-token': deliveryToken }) { + validate({ environments, retryFailed, locales, backupDir, 'source-env': sourceEnv, 'delivery-token': deliveryToken }) { let missing = []; if (retryFailed) { return true; } + // In backup-dir mode, environments and locales are derived per-asset from the + // backup publish_details, so they are not required on the command line. + if (backupDir) { + return true; + } + if (sourceEnv && !deliveryToken) { this.error('Specify the source environment delivery token. Run --help for more details.', { exit: 2 }); } @@ -181,6 +189,11 @@ AssetsPublishCommand.flags = { '(optional) The UID of the Assets’ folder from which the assets need to be published. The default value is cs_root.', exclusive: ['source-env'], }), + 'backup-dir': flags.string({ + description: + '(optional) Path to the import backup directory. When set, each imported asset is published only to the environments and locales it was published to in the source stack (read from the backup’s publish details and asset UID mapping), with asset-scan gating applied. Intended for the post-import publish flow.', + exclusive: ['source-env', 'folder-uid', 'environments', 'locales'], + }), 'bulk-publish': flags.string({ description: 'Set this flag to use Contentstack’s Bulk Publish APIs. It is true, by default.', default: 'true', @@ -259,11 +272,14 @@ AssetsPublishCommand.examples = [ '', 'Using --stack-api-key flag', 'csdx cm:assets:publish --environments [ENVIRONMENT 1] [ENVIRONMENT 2] --locales [LOCALE] --stack-api-key [STACK API KEY]', + '', + 'Using --backup-dir flag (publish imported assets to their original environments after asset scanning)', + 'csdx cm:assets:publish --backup-dir [PATH TO IMPORT BACKUP DIR] --stack-api-key [STACK API KEY]', ]; AssetsPublishCommand.aliases = ['cm:bulk-publish:assets']; AssetsPublishCommand.usage = - 'cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]'; + 'cm:assets:publish [-a ] [--retry-failed ] [-e ] [--folder-uid ] [--backup-dir ] [--bulk-publish ] [-c ] [-y] [--locales ] [--branch ] [--delivery-token ] [--source-env ]'; module.exports = AssetsPublishCommand; diff --git a/packages/contentstack-bulk-publish/src/consumer/publish.js b/packages/contentstack-bulk-publish/src/consumer/publish.js index f466b250c..cea6392fd 100644 --- a/packages/contentstack-bulk-publish/src/consumer/publish.js +++ b/packages/contentstack-bulk-publish/src/consumer/publish.js @@ -61,12 +61,12 @@ function displayEntriesDetails(sanitizedData, action, mapping = []) { function displayAssetsDetails(sanitizedData, action, mapping) { if (action === 'bulk_publish') { sanitizedData.forEach((asset) => { - asset?.publish_details.forEach((pd) => { + asset?.publish_details?.forEach((pd) => { if (Object.keys(mapping).includes(pd.environment)) { console.log( chalk.green( `Asset UID: '${asset.uid}'${pd.version ? `, Version: '${pd.version}'` : ''}${ - asset.locale ? `, Locale: '${asset.locale}'` : '' + asset.locale ? `, Locale: '${asset.locale}'` : ''} }, Environment: ${pd.environment}`, ), ); diff --git a/packages/contentstack-bulk-publish/src/producer/publish-assets.js b/packages/contentstack-bulk-publish/src/producer/publish-assets.js index a9afbdd7c..85d0e648a 100644 --- a/packages/contentstack-bulk-publish/src/producer/publish-assets.js +++ b/packages/contentstack-bulk-publish/src/producer/publish-assets.js @@ -1,7 +1,10 @@ /* eslint-disable no-console */ /* eslint-disable new-cap */ /* eslint-disable camelcase */ -const { cliux } = require('@contentstack/cli-utilities'); +const path = require('path'); +const { existsSync } = require('fs'); +const chalk = require('chalk'); +const { cliux, FsUtility } = require('@contentstack/cli-utilities'); const { getQueue } = require('../util/queue'); const { performBulkPublish, publishAsset, initializeLogger } = require('../consumer/publish'); const retryFailedLogs = require('../util/retryfailed'); @@ -9,14 +12,28 @@ const { validateFile } = require('../util/fs'); const { isEmpty } = require('../util'); const { fetchBulkPublishLimit } = require('../util/common-utility'); const { generateBulkPublishStatusUrl } = require('../util/generate-bulk-publish-url'); +const { resolveInQueueAssets, fetchScanStatusBatch, ASSET_SCAN_STATUS } = require('../util/asset-scan'); const queue = getQueue(); +let config; let logFileName; let bulkPublishSet = []; +let pendingAssetsForRetry = []; +let scanSummary = { clean: 0, quarantined: 0, inQueue: 0, noStatus: 0 }; let filePath; /* eslint-disable no-param-reassign */ +function printScanSummary({ clean, noStatus, inQueue, quarantined }) { + const total = clean + noStatus + inQueue + quarantined; + if (total === 0) return; + console.log(chalk.bold(`\nAsset scan summary (${total} total):`)); + console.log(chalk.green(` ✓ Clean (publishing): ${clean}`)); + if (noStatus > 0) console.log(chalk.green(` ✓ No scan status (publishing): ${noStatus}`)); + if (inQueue > 0) console.log(chalk.yellow(` ⧖ In queue (retrying): ${inQueue}`)); + if (quarantined > 0) console.log(chalk.red(` ✗ Quarantined (skipped): ${quarantined}`)); +} + async function getAssets(stack, folder, bulkPublish, environments, locale, apiVersion, bulkPublishLimit, skip = 0) { return new Promise((resolve, reject) => { let queryParams = { @@ -25,6 +42,7 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe include_count: true, include_folders: true, include_publish_details: true, + include_asset_scan_status: true, }; stack .asset() @@ -34,7 +52,8 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe if (assetResponse && assetResponse.items.length > 0) { skip += assetResponse.items.length; let assets = assetResponse.items; - for (let index = 0; index < assetResponse.items.length; index++) { + + for (let index = 0; index < assets.length; index++) { if (assets[index].is_dir === true) { await getAssets( stack, @@ -48,6 +67,35 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe ); continue; } + + const scanStatus = assets[index]._asset_scan_status; + + // Quarantined assets are skipped permanently + if (scanStatus === ASSET_SCAN_STATUS.QUARANTINE) { + scanSummary.quarantined++; + console.log(chalk.yellow(`Skipped (quarantined): Asset UID '${assets[index].uid}'`)); + continue; + } + + // In-queue assets are deferred for retry after all pages are processed + if (scanStatus === ASSET_SCAN_STATUS.IN_QUEUE) { + scanSummary.inQueue++; + pendingAssetsForRetry.push({ + uid: assets[index].uid, + locale, + publish_details: assets[index].publish_details || [], + environments, + }); + continue; + } + + // Ready (clean) or no scan status — enqueue for publish + if (scanStatus === ASSET_SCAN_STATUS.READY) { + scanSummary.clean++; + } else { + scanSummary.noStatus++; + } + if (bulkPublish) { if (bulkPublishSet.length < bulkPublishLimit) { bulkPublishSet.push({ @@ -67,22 +115,6 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe }); bulkPublishSet = []; } - - if ( - assetResponse.items.length - 1 === index && - bulkPublishSet.length > 0 && - bulkPublishSet.length < bulkPublishLimit - ) { - await queue.Enqueue({ - assets: bulkPublishSet, - Type: 'asset', - environments: environments, - locale, - stack: stack, - apiVersion, - }); - bulkPublishSet = []; - } } else { await queue.Enqueue({ assetUid: assets[index].uid, @@ -94,6 +126,23 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe }); } } + + // Flush any partial bulk batch at the end of the page. + // Done outside the for-loop so it fires correctly even when some assets + // were skipped (quarantined/in-queue) and the last non-skipped asset is + // not at the final array index. + if (bulkPublish && bulkPublishSet.length > 0) { + await queue.Enqueue({ + assets: bulkPublishSet, + Type: 'asset', + environments: environments, + locale, + stack: stack, + apiVersion, + }); + bulkPublishSet = []; + } + if (skip === assetResponse.count) { return resolve(true); } @@ -109,6 +158,291 @@ async function getAssets(stack, folder, bulkPublish, environments, locale, apiVe }); } +/** + * After all pages/locales are scanned, retry any assets that were in-queue. + * Takes pendingItems explicitly — does not read from module-level state. + * Uses incremental backoff (see asset-scan.js SCAN_RETRY config). + */ +async function processPendingAssets(pendingItems, stack, bulkPublish, environments, apiVersion, bulkPublishLimit) { + if (pendingItems.length === 0) return; + + // Deduplicate UIDs across locales — scan status is per-asset, not per-locale. + // Resolving once avoids redundant retry loops for multi-locale runs. + const allUids = [...new Set(pendingItems.map((a) => a.uid))]; + const resolvedUids = await resolveInQueueAssets(stack, allUids); + + if (resolvedUids.length === 0) { + console.log(chalk.yellow('No in-queue assets resolved after retries.')); + return; + } + + const resolvedSet = new Set(resolvedUids); + + // Group resolved items by locale for correct enqueue context + const byLocale = {}; + for (const item of pendingItems) { + if (!resolvedSet.has(item.uid)) continue; + if (!byLocale[item.locale]) byLocale[item.locale] = []; + byLocale[item.locale].push(item); + } + + for (const locale of Object.keys(byLocale)) { + const resolvedItems = byLocale[locale]; + + if (bulkPublish) { + let batchSet = []; + for (const item of resolvedItems) { + batchSet.push({ uid: item.uid, locale, publish_details: item.publish_details }); + if (batchSet.length === bulkPublishLimit) { + await queue.Enqueue({ + assets: batchSet, + Type: 'asset', + environments, + locale, + stack, + apiVersion, + }); + batchSet = []; + } + } + if (batchSet.length > 0) { + await queue.Enqueue({ + assets: batchSet, + Type: 'asset', + environments, + locale, + stack, + apiVersion, + }); + } + } else { + for (const item of resolvedItems) { + await queue.Enqueue({ + assetUid: item.uid, + publish_details: item.publish_details, + environments, + Type: 'asset', + locale, + stack, + }); + } + } + } +} + +/** + * Publish assets from an import backup directory (post-import flow). + * + * Unlike getAssets (live folder scan), this drives publishing from the backup: + * each imported asset is published ONLY to the environments/locales it was + * published to in the source stack (from its publish_details), remapped to the + * target stack. Scan-status gating is applied to the target asset UIDs. + * + * Mirrors the publish_details/env-name resolution of contentstack-import's + * assets `publish()` (the bulk publish API resolves environment NAMES against + * the target stack, and import preserves env names, so source name == target + * name), and adds the clean/quarantined/in-queue scan gating that import skips. + * + * Source of truth split: + * - publish_details + environments come from the BACKUP (post-import flow): an + * asset's target environments are its source publish_details, gated by the + * environment uid-mapping (only environments actually imported into the target + * are publishable) — avoids doomed publish calls to envs never created there. + * - scan status comes from the LIVE target API (it is a runtime property of the + * freshly-imported assets and cannot exist in the backup). + * + * Streaming: asset chunks are processed and released one at a time and scan-gated + * per chunk, so memory does not scale with total asset count. The only structures + * retained across chunks are bounded (partial publish batches + the in-queue + * subset). The single in-memory floor is the asset uid-mapping file itself (same + * as import's publish()); for very large stacks raise Node's --max-old-space-size. + */ +async function getAssetsFromBackup(stack, backupDir, bulkPublish, apiVersion, bulkPublishLimit) { + const assetsPath = path.join(backupDir, 'assets'); + const assetsIndexPath = path.join(assetsPath, 'assets.json'); + const assetUidMapperPath = path.join(backupDir, 'mapper', 'assets', 'uid-mapping.json'); + const envUidMapperPath = path.join(backupDir, 'mapper', 'environments', 'uid-mapping.json'); + const environmentsPath = path.join(backupDir, 'environments', 'environments.json'); + + // A backup with no assets is a legitimate outcome of a successful import that + // had 0 assets (assets.json is never produced) — exit cleanly, not as a crash. + // A genuinely wrong --backup-dir surfaces via the uid-mapping/environments guards below. + if (!existsSync(assetsPath) || !existsSync(assetsIndexPath)) { + console.log(chalk.yellow('No assets found in backup — nothing to publish.')); + return; + } + if (!existsSync(assetUidMapperPath)) { + throw new Error( + `Asset UID mapping not found at '${assetUidMapperPath}'. Run import against this data dir before publishing.`, + ); + } + if (!existsSync(environmentsPath)) { + throw new Error(`Environments not found at '${environmentsPath}'. Cannot resolve target environments.`); + } + + const fsUtil = new FsUtility({ basePath: assetsPath, indexFileName: 'assets.json' }); + const assetUidMap = fsUtil.readFile(assetUidMapperPath, true) || {}; + // environments.json: { [sourceEnvUid]: { name, ... } } — source env definitions. + const environments = fsUtil.readFile(environmentsPath, true) || {}; + // uid-mapping.json: { [sourceEnvUid]: targetEnvUid } — only environments actually + // imported into the target. Used as the "is publishable" gate. Optional: older + // backups (or runs with no imported environments) may not have it. + const envUidMapping = existsSync(envUidMapperPath) ? fsUtil.readFile(envUidMapperPath, true) || {} : null; + if (!envUidMapping) { + console.log( + chalk.yellow( + `Environment UID mapping not found at '${envUidMapperPath}'. Falling back to environment names from ` + + `environments.json — ensure the target stack has environments with matching names.`, + ), + ); + } + const isEnvImported = (sourceEnvUid) => + !envUidMapping || Object.prototype.hasOwnProperty.call(envUidMapping, sourceEnvUid); + + // Resolve an asset's deduped, env-gated target (envName, locale) pairs from its + // publish_details. Env name comes from the backup; only environments actually + // imported into the target (per the env uid-mapping) are publishable. + const resolvePairs = (asset) => { + const seen = new Set(); + const pairs = []; + for (const pd of asset.publish_details) { + const env = environments[pd.environment]; + if (!env || !env.name) continue; // env not in the data dir — cannot resolve a name + if (!isEnvImported(pd.environment)) continue; // env not imported into target — skip + const key = `${env.name}||${pd.locale}`; + if (seen.has(key)) continue; + seen.add(key); + pairs.push({ envName: env.name, locale: pd.locale }); + } + return pairs; + }; + + // Bounded cross-chunk state only — nothing scales with total asset count: + // - `buffers`: partial publish batches, capped at envCount x localeCount x bulkPublishLimit. + // - `pending`: the in-queue (scanning) subset awaiting retry. + // The full asset universe is never held in memory; chunks are processed and + // released one at a time (same streaming shape as contentstack-import's publish()). + const buffers = new Map(); // "envName||locale" -> { envName, locale, uids: [] } + const pending = []; // { targetUid, pairs } for assets whose scan is still in queue + let skippedNoUidMapping = 0; // source asset was not imported (no asset uid mapping) + let skippedNoMappableEnv = 0; // asset has publish details, but none of its envs were imported + let publishableAssets = 0; // assets enqueued for publish (across all env/locale pairs) + + const enqueueBatch = async (envName, locale, uids) => { + if (uids.length === 0) return; + if (bulkPublish) { + const assets = uids.map((uid) => ({ uid, locale })); + await queue.Enqueue({ assets, Type: 'asset', environments: [envName], locale, stack, apiVersion }); + } else { + for (const uid of uids) { + await queue.Enqueue({ assetUid: uid, environments: [envName], Type: 'asset', locale, stack }); + } + } + }; + + // Add a publishable asset to its (env, locale) buffers, flushing any that fill up. + // Grouping by the exact pair keeps the bulk API from publishing an asset to a + // combo it was not published to in source. + const bufferAsset = async (targetUid, pairs) => { + publishableAssets++; + for (const { envName, locale } of pairs) { + const key = `${envName}||${locale}`; + let buf = buffers.get(key); + if (!buf) { + buf = { envName, locale, uids: [] }; + buffers.set(key, buf); + } + buf.uids.push(targetUid); + if (buf.uids.length >= bulkPublishLimit) { + await enqueueBatch(envName, locale, buf.uids); + buf.uids = []; + } + } + }; + + const indexer = fsUtil.indexFileContent; + + // NOTE: one readChunkFiles.next() call per index entry — the iteration count must + // equal the number of chunk files (same contract as contentstack-import's publish()). + for (const _index in indexer) { + const chunk = await fsUtil.readChunkFiles.next(); + const assetsArr = Object.values(chunk || {}); + + // Resolve this chunk's assets to publish targets (bounded by chunk size). + const resolved = []; + for (const asset of assetsArr) { + if (!asset || !Array.isArray(asset.publish_details) || asset.publish_details.length === 0) { + continue; + } + const targetUid = assetUidMap[asset.uid]; + if (!targetUid) { + skippedNoUidMapping++; + continue; + } + const pairs = resolvePairs(asset); + if (pairs.length === 0) { + skippedNoMappableEnv++; + continue; + } + resolved.push({ targetUid, pairs }); + } + if (resolved.length === 0) continue; + + // Scan status is a target-stack property of the freshly-imported assets, so it + // is fetched live (one batched read per chunk) — it is not in the backup. + const statusMap = await fetchScanStatusBatch( + stack, + resolved.map((r) => r.targetUid), + ); + + for (const { targetUid, pairs } of resolved) { + const status = statusMap.get(targetUid); + if (status === ASSET_SCAN_STATUS.QUARANTINE) { + scanSummary.quarantined++; + console.log(chalk.yellow(`Skipped (quarantined): Asset UID '${targetUid}'`)); + } else if (status === ASSET_SCAN_STATUS.IN_QUEUE) { + scanSummary.inQueue++; + pending.push({ targetUid, pairs }); + } else { + if (status === ASSET_SCAN_STATUS.READY) scanSummary.clean++; + else scanSummary.noStatus++; + await bufferAsset(targetUid, pairs); + } + } + } + + // Resolve in-queue assets once (incremental backoff); publish those that turn clean. + if (pending.length > 0) { + const resolvedUids = await resolveInQueueAssets( + stack, + pending.map((p) => p.targetUid), + ); + const resolvedSet = new Set(resolvedUids); + for (const { targetUid, pairs } of pending) { + if (resolvedSet.has(targetUid)) await bufferAsset(targetUid, pairs); + } + } + + // Flush remaining partial (env, locale) batches. + for (const { envName, locale, uids } of buffers.values()) { + await enqueueBatch(envName, locale, uids); + } + + if (skippedNoUidMapping > 0) { + console.log(chalk.yellow(`Skipped ${skippedNoUidMapping} asset(s): no UID mapping (not imported into target).`)); + } + if (skippedNoMappableEnv > 0) { + console.log( + chalk.yellow( + `Skipped ${skippedNoMappableEnv} asset(s): none of their published environments were imported into the target.`, + ), + ); + } + if (publishableAssets === 0) { + console.log(chalk.yellow('No publishable assets found in backup (no mapped assets with publishable environments).')); + } +} + function setConfig(conf, bp) { if (bp) { queue.consumer = performBulkPublish; @@ -120,10 +454,15 @@ function setConfig(conf, bp) { config = conf; queue.config = conf; filePath = initializeLogger(logFileName); + pendingAssetsForRetry = []; + scanSummary = { clean: 0, quarantined: 0, inQueue: 0, noStatus: 0 }; } -async function start({ retryFailed, bulkPublish, environments, folderUid, locales, apiVersion }, stack, config) { +async function start({ retryFailed, bulkPublish, environments, folderUid, locales, apiVersion, backupDir }, stack, config) { process.on('beforeExit', async () => { + // Print the scan summary here (not inline after enqueueing): + printScanSummary(scanSummary); + const isErrorLogEmpty = await isEmpty(`${filePath}.error`); const isSuccessLogEmpty = await isEmpty(`${filePath}.success`); if (!isErrorLogEmpty) { @@ -131,7 +470,7 @@ async function start({ retryFailed, bulkPublish, environments, folderUid, locale } else if (!isSuccessLogEmpty) { console.log(`The success log for this session is stored at ${filePath}.success`); } - + // Generate and display the bulk publish status link if (bulkPublish && stack && config) { const statusUrl = generateBulkPublishStatusUrl(stack, config); @@ -142,11 +481,12 @@ async function start({ retryFailed, bulkPublish, environments, folderUid, locale process.stdout.write('\n'); } } - + process.exit(0); }); if (retryFailed) { + console.log(chalk.yellow('Note: --retry-failed replays from log and skips asset scan status checks.')); if (!validateFile(retryFailed, ['publish-assets', 'bulk-publish-assets'])) { return false; } @@ -159,17 +499,31 @@ async function start({ retryFailed, bulkPublish, environments, folderUid, locale } else { await retryFailedLogs(retryFailed, { assetQueue: queue }, 'publish'); } + } else if (backupDir) { + // Post-import flow: publish each imported asset only to its original + // environments/locales (from backup publish_details), scan-gated. + setConfig(config, bulkPublish); + const bulkPublishLimit = fetchBulkPublishLimit(stack?.org_uid); + await getAssetsFromBackup(stack, backupDir, bulkPublish, apiVersion, bulkPublishLimit); } else if (folderUid) { setConfig(config, bulkPublish); const bulkPublishLimit = fetchBulkPublishLimit(stack?.org_uid); for (const locale of locales) { await getAssets(stack, folderUid, bulkPublish, environments, locale, apiVersion, bulkPublishLimit); } + + // Resolve in-queue assets with incremental retry; pass pendingAssetsForRetry explicitly + if (pendingAssetsForRetry.length > 0) { + await processPendingAssets(pendingAssetsForRetry, stack, bulkPublish, environments, apiVersion, bulkPublishLimit); + pendingAssetsForRetry = []; + } } } module.exports = { getAssets, + getAssetsFromBackup, setConfig, start, + processPendingAssets, }; diff --git a/packages/contentstack-bulk-publish/src/util/asset-scan.js b/packages/contentstack-bulk-publish/src/util/asset-scan.js new file mode 100644 index 000000000..27c3ffe77 --- /dev/null +++ b/packages/contentstack-bulk-publish/src/util/asset-scan.js @@ -0,0 +1,121 @@ +/* eslint-disable no-console */ +const chalk = require('chalk'); + +const ASSET_SCAN_STATUS = { + READY: 'clean', + QUARANTINE: 'quarantined', + IN_QUEUE: 'pending', +}; + +const SCAN_RETRY = { + MAX_RETRIES: 0, + INITIAL_WAIT_MS: 5000, + BACKOFF_FACTOR: 2, +}; + +function getIncrementalWaitMs(attempt) { + return SCAN_RETRY.INITIAL_WAIT_MS * Math.pow(SCAN_RETRY.BACKOFF_FACTOR, attempt); +} + +/** + * Batch-fetch asset scan statuses for a list of UIDs. + * Returns a Map. UIDs with no scan data map to undefined. + * Throws on API error — callers must not silently treat failures as "ready". + */ +async function fetchScanStatusBatch(stack, uids) { + const statusMap = new Map(); + if (!uids || uids.length === 0) return statusMap; + + const BATCH_SIZE = 100; + for (let i = 0; i < uids.length; i += BATCH_SIZE) { + const batch = uids.slice(i, i + BATCH_SIZE); + const response = await stack + .asset() + .query({ uid: { $in: batch }, include_asset_scan_status: true, limit: BATCH_SIZE }) + .find(); + for (const asset of response.items || []) { + statusMap.set(asset.uid, asset._asset_scan_status); + } + } + + return statusMap; +} + +/** + * Retry pending (in-queue) assets with incremental backoff until they become + * clean or max retries is reached. + * + * Wait series: 5s, 10s, 20s, 40s, 80s (5 attempts total, max 155s). + * + * @param {object} stack - Management SDK stack instance + * @param {string[]} pendingUids - UIDs currently in scan queue + * @returns {string[]} UIDs that became clean and are safe to publish + */ +async function resolveInQueueAssets(stack, pendingUids) { + if (!pendingUids || pendingUids.length === 0) return []; + + const totalWaitSec = + Array.from({ length: SCAN_RETRY.MAX_RETRIES }, (_, i) => getIncrementalWaitMs(i)).reduce( + (a, b) => a + b, + 0, + ) / 1000; + console.log( + chalk.yellow( + `Resolving ${pendingUids.length} in-queue asset(s). Max wait: ${totalWaitSec}s over ${SCAN_RETRY.MAX_RETRIES} retries.`, + ), + ); + + let remaining = [...pendingUids]; + const resolvedUids = []; + + for (let attempt = 0; attempt < SCAN_RETRY.MAX_RETRIES && remaining.length > 0; attempt++) { + const waitMs = getIncrementalWaitMs(attempt); + console.log( + chalk.yellow( + `Asset scan: ${remaining.length} asset(s) in queue. Waiting ${waitMs / 1000}s before retry ${attempt + 1}/${ + SCAN_RETRY.MAX_RETRIES + }...`, + ), + ); + + await new Promise((resolve) => setTimeout(resolve, waitMs)); + + const statusMap = await fetchScanStatusBatch(stack, remaining); + const stillPending = []; + + for (const uid of remaining) { + const status = statusMap.get(uid); + if (status === ASSET_SCAN_STATUS.QUARANTINE) { + console.log(chalk.red(`Skipped (quarantined after retry): Asset UID '${uid}'`)); + } else if (status === ASSET_SCAN_STATUS.IN_QUEUE) { + stillPending.push(uid); + } else { + // clean or undefined (scanning disabled) — publishable + resolvedUids.push(uid); + } + } + + remaining = stillPending; + } + + if (remaining.length > 0) { + console.warn( + chalk.red( + `Asset scan: ${remaining.length} asset(s) remained in queue after ${SCAN_RETRY.MAX_RETRIES} retries and will be skipped.`, + ), + ); + for (const uid of remaining) { + console.warn(chalk.red(`Skipped (max retries exceeded): Asset UID '${uid}'`)); + } + } + + return resolvedUids; +} + +module.exports = { + ASSET_SCAN_STATUS, + SCAN_RETRY, + getIncrementalWaitMs, + fetchScanStatusBatch, + resolveInQueueAssets, +}; diff --git a/packages/contentstack-bulk-publish/test/unit/util/asset-scan.test.js b/packages/contentstack-bulk-publish/test/unit/util/asset-scan.test.js new file mode 100644 index 000000000..83b430bde --- /dev/null +++ b/packages/contentstack-bulk-publish/test/unit/util/asset-scan.test.js @@ -0,0 +1,162 @@ +'use strict'; + +const { describe, it, beforeEach, afterEach } = require('mocha'); +const { expect } = require('chai'); + +const { + ASSET_SCAN_STATUS, + SCAN_RETRY, + getIncrementalWaitMs, + fetchScanStatusBatch, + resolveInQueueAssets, +} = require('../../../src/util/asset-scan'); + +// Minimal mock stack factory +function makeStack(items) { + return { + asset() { + return { + query() { + return { + find: async () => ({ items: items || [] }), + }; + }, + }; + }, + }; +} + +// Stack that throws on query +function makeErrorStack(errorMsg) { + return { + asset() { + return { + query() { + return { + find: async () => { + throw new Error(errorMsg); + }, + }; + }, + }; + }, + }; +} + +describe('asset-scan utilities', () => { + // ─── getIncrementalWaitMs ──────────────────────────────────────────────── + + describe('getIncrementalWaitMs', () => { + it('returns INITIAL_WAIT_MS for attempt 0', () => { + expect(getIncrementalWaitMs(0)).to.equal(SCAN_RETRY.INITIAL_WAIT_MS); + }); + + it('doubles on each subsequent attempt', () => { + const seq = [0, 1, 2, 3, 4].map(getIncrementalWaitMs); + for (let i = 1; i < seq.length; i++) { + expect(seq[i]).to.equal(seq[i - 1] * SCAN_RETRY.BACKOFF_FACTOR); + } + }); + + it('produces the correct 5-attempt sequence', () => { + const expected = [5000, 10000, 20000, 40000, 80000]; + expected.forEach((ms, attempt) => { + expect(getIncrementalWaitMs(attempt)).to.equal(ms); + }); + }); + }); + + // ─── fetchScanStatusBatch ─────────────────────────────────────────────── + + describe('fetchScanStatusBatch', () => { + it('returns empty Map when called with empty uid array', async () => { + const map = await fetchScanStatusBatch(makeStack([]), []); + expect(map.size).to.equal(0); + }); + + it('maps UIDs to their scan statuses', async () => { + const items = [ + { uid: 'a1', _asset_scan_status: 'clean' }, + { uid: 'a2', _asset_scan_status: 'quarantined' }, + { uid: 'a3', _asset_scan_status: 'pending' }, + ]; + const map = await fetchScanStatusBatch(makeStack(items), ['a1', 'a2', 'a3']); + expect(map.get('a1')).to.equal(ASSET_SCAN_STATUS.READY); + expect(map.get('a2')).to.equal(ASSET_SCAN_STATUS.QUARANTINE); + expect(map.get('a3')).to.equal(ASSET_SCAN_STATUS.IN_QUEUE); + }); + + it('maps UIDs with no scan field to undefined', async () => { + const items = [{ uid: 'a1' }]; + const map = await fetchScanStatusBatch(makeStack(items), ['a1']); + expect(map.get('a1')).to.equal(undefined); + }); + + it('throws on API error (fail fast — do not silently treat as ready)', async () => { + try { + await fetchScanStatusBatch(makeErrorStack('Network error'), ['a1']); + expect.fail('Expected fetchScanStatusBatch to throw'); + } catch (error) { + expect(error.message).to.equal('Network error'); + } + }); + }); + + // ─── resolveInQueueAssets ─────────────────────────────────────────────── + + describe('resolveInQueueAssets', () => { + let originalSetTimeout; + + beforeEach(() => { + // Replace setTimeout with an immediate resolver to avoid real waits + originalSetTimeout = global.setTimeout; + global.setTimeout = (fn) => fn(); + }); + + afterEach(() => { + global.setTimeout = originalSetTimeout; + }); + + it('returns empty array for empty input without calling stack', async () => { + const result = await resolveInQueueAssets(makeStack([]), []); + expect(result).to.deep.equal([]); + }); + + it('resolves UIDs that become clean on the first retry', async () => { + const items = [{ uid: 'a1', _asset_scan_status: 'clean' }]; + const result = await resolveInQueueAssets(makeStack(items), ['a1']); + expect(result).to.include('a1'); + }); + + it('excludes UIDs that become quarantined during retry', async () => { + const items = [{ uid: 'a1', _asset_scan_status: 'quarantined' }]; + const result = await resolveInQueueAssets(makeStack(items), ['a1']); + expect(result).to.not.include('a1'); + }); + + it('resolves UIDs with no scan status (scanning disabled)', async () => { + const items = [{ uid: 'a1' }]; // no _asset_scan_status field + const result = await resolveInQueueAssets(makeStack(items), ['a1']); + expect(result).to.include('a1'); + }); + + it('drops UIDs still pending after MAX_RETRIES', async () => { + // Always returns pending status + const items = [{ uid: 'a1', _asset_scan_status: 'pending' }]; + const result = await resolveInQueueAssets(makeStack(items), ['a1']); + expect(result).to.deep.equal([]); + }); + + it('handles mixed outcomes: clean, quarantined, and pending exhausted', async () => { + const items = [ + { uid: 'clean1', _asset_scan_status: 'clean' }, + { uid: 'quar1', _asset_scan_status: 'quarantined' }, + { uid: 'pend1', _asset_scan_status: 'pending' }, + ]; + const result = await resolveInQueueAssets(makeStack(items), ['clean1', 'quar1', 'pend1']); + expect(result).to.include('clean1'); + expect(result).to.not.include('quar1'); + expect(result).to.not.include('pend1'); + }); + }); +}); diff --git a/packages/contentstack-cli-cm-regex-validate/package.json b/packages/contentstack-cli-cm-regex-validate/package.json index 9283d45bb..d4d3557d3 100644 --- a/packages/contentstack-cli-cm-regex-validate/package.json +++ b/packages/contentstack-cli-cm-regex-validate/package.json @@ -1,7 +1,7 @@ { "name": "@contentstack/cli-cm-regex-validate", "description": "Validate Fields with Regex Property of Content Type and Global Field in a Stack", - "version": "1.0.2", + "version": "1.0.3", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli-cm-regex-validate/issues", "devDependencies": { @@ -66,7 +66,7 @@ }, "dependencies": { "@contentstack/cli-command": "^1.8.5", - "@contentstack/cli-utilities": "^1.19.0", + "@contentstack/cli-utilities": "^1.19.1", "@contentstack/management": "^1.30.4", "cli-table3": "^0.6.5", "cli-ux": "^6.0.9", diff --git a/packages/contentstack-cli-tsgen/package.json b/packages/contentstack-cli-tsgen/package.json index 74fa09c8c..311deba2d 100644 --- a/packages/contentstack-cli-tsgen/package.json +++ b/packages/contentstack-cli-tsgen/package.json @@ -1,12 +1,12 @@ { "name": "contentstack-cli-tsgen", "description": "Generate TypeScript typings from a Stack.", - "version": "4.10.2", + "version": "4.10.3", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli-plugins/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@contentstack/types-generator": "^3.10.2" }, "devDependencies": { diff --git a/packages/contentstack-clone/README.md b/packages/contentstack-clone/README.md index a24edc651..665f31bd7 100644 --- a/packages/contentstack-clone/README.md +++ b/packages/contentstack-clone/README.md @@ -16,7 +16,7 @@ $ npm install -g @contentstack/cli-cm-clone $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-clone/1.21.8 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-clone/1.21.11 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-clone/package.json b/packages/contentstack-clone/package.json index 3f4911dc6..5df132650 100644 --- a/packages/contentstack-clone/package.json +++ b/packages/contentstack-clone/package.json @@ -1,15 +1,15 @@ { "name": "@contentstack/cli-cm-clone", "description": "Contentstack stack clone plugin", - "version": "1.21.10", + "version": "1.21.11", "author": "Contentstack", "bugs": "https://github.com/rohitmishra209/cli-cm-clone/issues", "dependencies": { "@colors/colors": "^1.6.0", - "@contentstack/cli-cm-export": "~1.26.0", - "@contentstack/cli-cm-import": "~1.34.0", + "@contentstack/cli-cm-export": "~1.27.0", + "@contentstack/cli-cm-import": "~1.35.0", "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "chalk": "^4.1.2", "inquirer": "8.2.7", diff --git a/packages/contentstack-content-type/README.md b/packages/contentstack-content-type/README.md index 454362922..45ee71cf6 100644 --- a/packages/contentstack-content-type/README.md +++ b/packages/contentstack-content-type/README.md @@ -44,7 +44,7 @@ $ npm install -g contentstack-cli-content-type $ csdx COMMAND running command... $ csdx (--version) -contentstack-cli-content-type/1.5.1 darwin-arm64 node-v22.21.1 +contentstack-cli-content-type/1.5.4 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-content-type/package.json b/packages/contentstack-content-type/package.json index 14c81f2ff..762ec1660 100644 --- a/packages/contentstack-content-type/package.json +++ b/packages/contentstack-content-type/package.json @@ -1,21 +1,16 @@ { "name": "contentstack-cli-content-type", "description": "Retrieve information about Content Types in a Stack.", - "version": "1.5.3", + "version": "1.5.4", "author": "Contentstack Developer", "bugs": "https://github.com/contentstack/cli-plugins/issues", "dependencies": { "@contentstack/cli-command": "^1.8.5", - "@contentstack/cli-utilities": "^1.19.0", - "@types/diff2html": "^3.0.3", - "@types/git-diff": "^2.0.7", - "@types/hogan.js": "^3.0.5", - "@types/table": "^6.3.2", - "@types/tmp": "^0.2.6", + "@contentstack/cli-utilities": "^1.19.1", "axios": "^1.18.1", "cli-ux": "^6.0.9", + "diff": "^9.0.0", "diff2html": "^3.4.56", - "git-diff": "^2.0.7", "moment": "^2.30.1", "node-graphviz": "^0.1.1", "table": "^6.9.0", @@ -25,8 +20,11 @@ }, "devDependencies": { "@oclif/plugin-help": "^6.2.49", + "@types/diff2html": "^3.0.3", "@types/jest": "^29.5.14", "@types/node": "^22.19.19", + "@types/table": "^6.3.2", + "@types/tmp": "^0.2.6", "eslint": "^10.5.0", "eslint-config-oclif": "^6.0.162", "eslint-config-oclif-typescript": "^3.1.14", diff --git a/packages/contentstack-content-type/skills/code-review/SKILL.md b/packages/contentstack-content-type/skills/code-review/SKILL.md index 9d0809c5f..e5bc5316f 100644 --- a/packages/contentstack-content-type/skills/code-review/SKILL.md +++ b/packages/contentstack-content-type/skills/code-review/SKILL.md @@ -11,7 +11,7 @@ description: >- ## When to use - Reviewing a PR or diff before merge. -- Auditing dependency upgrades (axios, diff2html, git-diff, node-graphviz, tmp, cli-ux). +- Auditing dependency upgrades (axios, diff2html, diff, node-graphviz, tmp, cli-ux). - Changes touching compare HTML, temp files, diagram output, or `src/core/contentstack/`. ## Instructions @@ -24,7 +24,7 @@ Use **Critical** / **Important** / **Suggestion** when leaving feedback. - **Secrets**: Never approve logging of tokens, `authtoken` / `authorization` values, or raw management tokens. - **Compare / diagram**: Changes to [src/core/content-type/compare.ts](../../src/core/content-type/compare.ts) or [diagram.ts](../../src/core/content-type/diagram.ts) deserve extra scrutiny (temp files, browser open, paths, binary dependency). -- **Dependencies**: axios, diff2html, git-diff, node-graphviz, tmp, cli-ux—review changelog and supply-chain for version bumps. +- **Dependencies**: axios, diff2html, diff, node-graphviz, tmp, cli-ux—review changelog and supply-chain for version bumps. - **Quality**: TypeScript and **eslint-config-oclif-typescript** ([.eslintrc](../../.eslintrc)); behavioral changes should include or update **Jest** tests where appropriate. ### Security and privacy @@ -57,7 +57,7 @@ Use **Critical** / **Important** / **Suggestion** when leaving feedback. | Severity | Item | |----------|------| | Important | **axios**: security advisories; upgrade notes. | -| Important | **diff2html**, **git-diff**, **tmp**, **cli-ux**: behavior changes affecting compare UX. | +| Important | **diff2html**, **diff**, **tmp**, **cli-ux**: behavior changes affecting compare UX. | | Important | **node-graphviz**: compatibility with supported Node and system Graphviz. | | Suggestion | **moment** (if touched): prefer minimal churn; note maintenance status of dependencies. | diff --git a/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md b/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md index 4434d876d..aaf02cf86 100644 --- a/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md +++ b/packages/contentstack-content-type/skills/contentstack-cli-content-type/SKILL.md @@ -100,7 +100,7 @@ Errors: response `data.errors` → `ContentstackError`; optional suffix with sta ### Compare and diagram pipelines -- **Compare**: `core/content-type/compare.ts` builds a unified diff from two JSON snapshots (`git-diff`), parses with **diff2html**, writes a **temporary HTML** file, opens it in the browser (`cli-ux` / `cli.open`). Not a terminal table. +- **Compare**: `core/content-type/compare.ts` builds a unified diff from two JSON snapshots (`diff`), parses with **diff2html**, writes a **temporary HTML** file, opens it in the browser (`cli-ux` / `cli.open`). Not a terminal table. - **Diagram**: `core/content-type/diagram.ts` builds a DOT graph, runs **node-graphviz** (`graphviz` binary must be available on the system for SVG rendering). Output path is sanitized where utilities apply. ### Commands (flags and behavior) diff --git a/packages/contentstack-content-type/src/core/content-type/compare.ts b/packages/contentstack-content-type/src/core/content-type/compare.ts index 696335191..a98028b2b 100644 --- a/packages/contentstack-content-type/src/core/content-type/compare.ts +++ b/packages/contentstack-content-type/src/core/content-type/compare.ts @@ -2,7 +2,7 @@ import cli from 'cli-ux' import * as fs from 'fs' import * as tmp from 'tmp' import * as Diff2html from 'diff2html' -import gitDiff from 'git-diff' +import {createTwoFilesPatch} from 'diff' import {BuildOutput} from '../../types' export default async function buildOutput(contentTypeName: string, previous: any, current: any): Promise { @@ -30,10 +30,13 @@ export default async function buildOutput(contentTypeName: string, previous: any } function buildDiffString(previous: any, current: any) { - return ( - `--- ${previous.uid}\t${current.updated_at}\n` + - `+++ ${current.uid}\t${current.updated_at}\n` + - gitDiff(JSON.stringify(previous, null, 2), JSON.stringify(current, null, 2)) + return createTwoFilesPatch( + previous.uid, + current.uid, + JSON.stringify(previous, null, 2), + JSON.stringify(current, null, 2), + current.updated_at, + current.updated_at, ) } diff --git a/packages/contentstack-content-type/tests/core/content-type/compare.test.ts b/packages/contentstack-content-type/tests/core/content-type/compare.test.ts index d092d9e72..746f4576e 100644 --- a/packages/contentstack-content-type/tests/core/content-type/compare.test.ts +++ b/packages/contentstack-content-type/tests/core/content-type/compare.test.ts @@ -25,11 +25,8 @@ jest.mock('diff2html', () => ({ html: jest.fn(() => '
diff-html
'), })) -jest.mock('git-diff', () => - jest.fn(() => '@@ -1 +1 @@\n+changed') -) - import fs from 'fs' +import * as Diff2html from 'diff2html' import buildOutput from '../../../src/core/content-type/compare' @@ -53,4 +50,23 @@ describe('compare buildOutput', () => { expect(written).toContain('diff-html') expect(written).toContain('diff2html') }) + + it('feeds diff2html a unified patch with file headers and the changed lines', async () => { + await buildOutput('my-ct', prev, curr) + + const patch = (Diff2html.parse as jest.Mock).mock.calls[0][0] as string + expect(patch).toContain(`--- ${prev.uid}\t${curr.updated_at}`) + expect(patch).toContain(`+++ ${curr.uid}\t${curr.updated_at}`) + expect(patch).toMatch(/^@@ .* @@$/m) + expect(patch).toContain('- "updated_at": "2020-01-01"') + expect(patch).toContain('+ "updated_at": "2021-01-01"') + }) + + it('produces a patch with no hunks when both versions are identical', async () => { + await buildOutput('my-ct', prev, prev) + + const patch = (Diff2html.parse as jest.Mock).mock.calls[0][0] as string + expect(patch).not.toContain('@@') + expect(patch).not.toContain('undefined') + }) }) diff --git a/packages/contentstack-export-to-csv/README.md b/packages/contentstack-export-to-csv/README.md index 675c62160..8d1579a0e 100644 --- a/packages/contentstack-export-to-csv/README.md +++ b/packages/contentstack-export-to-csv/README.md @@ -23,7 +23,7 @@ $ npm install -g @contentstack/cli-cm-export-to-csv $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-export-to-csv/1.12.5 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-export-to-csv/1.12.8 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-export-to-csv/package.json b/packages/contentstack-export-to-csv/package.json index 77d832d29..73214ab74 100644 --- a/packages/contentstack-export-to-csv/package.json +++ b/packages/contentstack-export-to-csv/package.json @@ -1,12 +1,12 @@ { "name": "@contentstack/cli-cm-export-to-csv", "description": "Export entries, taxonomies, terms, or organization users to CSV", - "version": "1.12.7", + "version": "1.12.8", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "fast-csv": "^4.3.6", "inquirer": "8.2.7", diff --git a/packages/contentstack-export/README.md b/packages/contentstack-export/README.md index e587ae4e2..53ddf68d3 100755 --- a/packages/contentstack-export/README.md +++ b/packages/contentstack-export/README.md @@ -24,7 +24,7 @@ $ npm install -g @contentstack/cli-cm-export $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-export/1.25.2 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-export/1.27.0 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-export/messages/index.json b/packages/contentstack-export/messages/index.json index 21a72c884..73925c5fd 100644 --- a/packages/contentstack-export/messages/index.json +++ b/packages/contentstack-export/messages/index.json @@ -10,6 +10,8 @@ "ASSET_QUERY_FAILED": "Failed to query asset data from the API", "ASSET_VERSIONED_QUERY_FAILED": "Failed to query versioned asset data from the API", "ASSET_COUNT_QUERY_FAILED": "Failed to retrieve total asset count", + "ASSET_SCAN_SKIPPED": "Skipping download of asset '%s' (UID: %s) — scan status: %s", + "ASSET_SCAN_SKIP_SUMMARY": "%s asset(s) skipped due to a non-clean scan status (pending/quarantined). Re-run the export once scanning completes to download them.", "CONTENT_TYPE_EXPORT_COMPLETE": "Content types exported successfully", "CONTENT_TYPE_NO_TYPES": "No content types found", diff --git a/packages/contentstack-export/package.json b/packages/contentstack-export/package.json index db0a69ad0..c3b72d680 100644 --- a/packages/contentstack-export/package.json +++ b/packages/contentstack-export/package.json @@ -1,13 +1,13 @@ { "name": "@contentstack/cli-cm-export", "description": "Contentstack CLI plugin to export content from stack", - "version": "1.26.0", + "version": "1.27.0", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", - "@contentstack/cli-variants": "~1.6.1", + "@contentstack/cli-utilities": "~1.19.1", + "@contentstack/cli-variants": "~1.6.2", "@oclif/core": "^4.11.4", "async": "^3.2.6", "big-json": "^3.2.0", @@ -22,7 +22,7 @@ }, "devDependencies": { "@contentstack/cli-auth": "~1.8.5", - "@contentstack/cli-config": "~1.21.0", + "@contentstack/cli-config": "~1.21.1", "@contentstack/cli-dev-dependencies": "^1.3.1", "@oclif/plugin-help": "^6.2.28", "@oclif/test": "^4.1.18", @@ -93,7 +93,8 @@ "shortCommandName": { "cm:stacks:export": "EXPRT", "cm:export": "O-EXPRT" - } + }, + "planProtectedFeatures": ["assetsScan"] }, "repository": "https://github.com/contentstack/cli" -} +} \ No newline at end of file diff --git a/packages/contentstack-export/src/commands/cm/stacks/export.ts b/packages/contentstack-export/src/commands/cm/stacks/export.ts index 15f88c573..d7dd749e5 100644 --- a/packages/contentstack-export/src/commands/cm/stacks/export.ts +++ b/packages/contentstack-export/src/commands/cm/stacks/export.ts @@ -120,7 +120,7 @@ export default class ExportCommand extends Command { let exportDir: string = pathValidator('logs'); try { const { flags } = await this.parse(ExportCommand); - const exportConfig = await setupExportConfig(flags); + const exportConfig = await setupExportConfig(flags, this.context); // Store apiKey in configHandler for session.json (return value not needed) createLogContext( diff --git a/packages/contentstack-export/src/config/index.ts b/packages/contentstack-export/src/config/index.ts index 556764767..218ee56a8 100644 --- a/packages/contentstack-export/src/config/index.ts +++ b/packages/contentstack-export/src/config/index.ts @@ -118,6 +118,9 @@ const config: DefaultConfig = { displayExecutionTime: false, enableDownloadStatus: false, includeVersionedAssets: false, + // Asset scan statuses that must block download; any other value (including 'not_scanned', + // 'clean', or the field being absent) is treated as safe to download. + blockingScanStatuses: ['pending', 'quarantined'], }, content_types: { dirName: 'content_types', diff --git a/packages/contentstack-export/src/export/modules/assets.ts b/packages/contentstack-export/src/export/modules/assets.ts index 1a95d5f25..b3a37df90 100644 --- a/packages/contentstack-export/src/export/modules/assets.ts +++ b/packages/contentstack-export/src/export/modules/assets.ts @@ -135,6 +135,7 @@ export default class ExportAssets extends BaseClass { const queryParam = { ...this.commonQueryParam, include_publish_details: true, + include_asset_scan_status: true, except: { BASE: this.assetConfig.invalidKeys }, }; this.applyQueryFilters(queryParam, 'assets'); @@ -168,7 +169,10 @@ export default class ExportAssets extends BaseClass { indexFileName: 'assets.json', basePath: this.assetsRootPath, chunkFileSize: this.assetConfig.chunkFileSize, - metaPickKeys: merge(['uid', 'url', 'filename', 'parent_uid'], this.assetConfig.assetsMetaKeys), + metaPickKeys: merge( + ['uid', 'url', 'filename', 'parent_uid', '_asset_scan_status'], + this.assetConfig.assetsMetaKeys, + ), }); } if (!isEmpty(items)) { @@ -204,6 +208,7 @@ export default class ExportAssets extends BaseClass { const queryParam = { ...this.commonQueryParam, include_publish_details: true, + include_asset_scan_status: true, except: { BASE: this.assetConfig.invalidKeys }, }; @@ -243,7 +248,10 @@ export default class ExportAssets extends BaseClass { indexFileName: 'versioned-assets.json', chunkFileSize: this.assetConfig.chunkFileSize, basePath: pResolve(this.assetsRootPath, 'versions'), - metaPickKeys: merge(['uid', 'url', 'filename', '_version', 'parent_uid'], this.assetConfig.assetsMetaKeys), + metaPickKeys: merge( + ['uid', 'url', 'filename', '_version', 'parent_uid', '_asset_scan_status'], + this.assetConfig.assetsMetaKeys, + ), }); } if (!isEmpty(response)) { @@ -329,6 +337,19 @@ export default class ExportAssets extends BaseClass { listOfAssets = uniqBy(listOfAssets, 'url'); log.debug(`Total unique assets to download: ${listOfAssets.length}`, this.exportConfig.context); + const isNotClean = (asset: any) => this.assetConfig.blockingScanStatuses.includes(asset._asset_scan_status); + const skippedAssets = filter(listOfAssets, isNotClean); + listOfAssets = filter(listOfAssets, (asset: any) => !isNotClean(asset)); + + if (!isEmpty(skippedAssets)) { + for (const asset of skippedAssets) { + log.warn( + messageHandler.parse('ASSET_SCAN_SKIPPED', asset.filename, asset.uid, asset._asset_scan_status), + this.exportConfig.context, + ); + } + } + const apiBatches: Array = chunk(listOfAssets, this.assetConfig.downloadLimit); const downloadedAssetsDirs = await getDirectories(pResolve(this.assetsRootPath, 'files')); @@ -413,6 +434,9 @@ export default class ExportAssets extends BaseClass { promisifyHandler, ).then(() => { log.success(messageHandler.parse('ASSET_DOWNLOAD_COMPLETE'), this.exportConfig.context); + if (!isEmpty(skippedAssets)) { + log.warn(messageHandler.parse('ASSET_SCAN_SKIP_SUMMARY', skippedAssets.length), this.exportConfig.context); + } }); } } diff --git a/packages/contentstack-export/src/export/modules/base-class.ts b/packages/contentstack-export/src/export/modules/base-class.ts index 6379669e1..68fb1adb9 100644 --- a/packages/contentstack-export/src/export/modules/base-class.ts +++ b/packages/contentstack-export/src/export/modules/base-class.ts @@ -5,7 +5,7 @@ import chunk from 'lodash/chunk'; import isEmpty from 'lodash/isEmpty'; import entries from 'lodash/entries'; import isEqual from 'lodash/isEqual'; -import { log } from '@contentstack/cli-utilities'; +import { log, handleAndLogError } from '@contentstack/cli-utilities'; import { ExportConfig, ModuleClassParams } from '../../types'; @@ -115,7 +115,16 @@ export default abstract class BaseClass { } /* eslint-disable no-await-in-loop */ - await Promise.allSettled(allPromise); + const settledResults = await Promise.allSettled(allPromise); + settledResults.forEach((result) => { + if (result.status === 'rejected') { + handleAndLogError( + result.reason, + { ...this.exportConfig.context }, + `Unhandled rejection in '${module}' batch ${batchNo}`, + ); + } + }); /* eslint-disable no-await-in-loop */ await this.logMsgAndWaitIfRequired(module, start, batchNo); @@ -150,6 +159,30 @@ export default abstract class BaseClass { if (exeTime < 1000) await this.delay(1000 - exeTime); } + /** + * Wraps a caller-supplied resolve/reject callback so that if the callback itself throws + * (e.g. a bug while writing/logging the result), the failure is caught right here and + * always recorded via handleAndLogError, instead of turning into a rejected promise that + * a caller further up the chain may or may not notice. + */ + private guardCallback( + callback: (value: any) => void, + moduleName: ApiModuleType, + context: Record, + ): (value: any) => void { + return (value: any) => { + try { + callback(value); + } catch (error) { + handleAndLogError( + error, + { ...this.exportConfig.context, ...context }, + `Unhandled error while processing '${moduleName}' API result`, + ); + } + }; + } + /** * @method makeAPICall * @param {Record} options - Api related params @@ -160,32 +193,35 @@ export default abstract class BaseClass { { module: moduleName, reject, resolve, url = '', uid = '', additionalInfo, queryParam = {} }: ApiOptions, isLastRequest = false, ): Promise { + const safeResolve = this.guardCallback(resolve, moduleName, { uid, additionalInfo }); + const safeReject = this.guardCallback(reject, moduleName, { uid, additionalInfo }); + switch (moduleName) { case 'asset': return this.stack .asset(uid) .fetch(queryParam) - .then((response: any) => resolve({ response, isLastRequest, additionalInfo })) - .catch((error: Error) => reject({ error, isLastRequest, additionalInfo })); + .then((response: any) => safeResolve({ response, isLastRequest, additionalInfo })) + .catch((error: Error) => safeReject({ error, isLastRequest, additionalInfo })); case 'assets': return this.stack .asset() .query(queryParam) .find() - .then((response: any) => resolve({ response, isLastRequest, additionalInfo })) - .catch((error: Error) => reject({ error, isLastRequest, additionalInfo })); + .then((response: any) => safeResolve({ response, isLastRequest, additionalInfo })) + .catch((error: Error) => safeReject({ error, isLastRequest, additionalInfo })); case 'download-asset': return this.stack .asset() .download({ url, responseType: 'stream' }) - .then((response: any) => resolve({ response, isLastRequest, additionalInfo })) - .catch((error: any) => reject({ error, isLastRequest, additionalInfo })); + .then((response: any) => safeResolve({ response, isLastRequest, additionalInfo })) + .catch((error: any) => safeReject({ error, isLastRequest, additionalInfo })); case 'export-taxonomy': return this.stack .taxonomy(uid) .export(queryParam) - .then((response: any) => resolve({ response, uid })) - .catch((error: any) => reject({ error, uid })); + .then((response: any) => safeResolve({ response, uid })) + .catch((error: any) => safeReject({ error, uid })); default: return Promise.resolve(); } diff --git a/packages/contentstack-export/src/types/default-config.ts b/packages/contentstack-export/src/types/default-config.ts index 01cb84c89..3ea16980b 100644 --- a/packages/contentstack-export/src/types/default-config.ts +++ b/packages/contentstack-export/src/types/default-config.ts @@ -102,6 +102,7 @@ export default interface DefaultConfig { displayExecutionTime: boolean; enableDownloadStatus: boolean; includeVersionedAssets: boolean; + blockingScanStatuses: string[]; dependencies?: Modules[]; }; content_types: { diff --git a/packages/contentstack-export/src/types/export-config.ts b/packages/contentstack-export/src/types/export-config.ts index 8b0e1b37b..a6fd5fe4c 100644 --- a/packages/contentstack-export/src/types/export-config.ts +++ b/packages/contentstack-export/src/types/export-config.ts @@ -1,3 +1,4 @@ +import { FeatureStatus } from '@contentstack/cli-utilities'; import { Context, Modules, Region } from '.'; import DefaultConfig from './default-config'; @@ -36,6 +37,7 @@ export default interface ExportConfig extends DefaultConfig { skipStackSettings?: boolean; skipDependencies?: boolean; authenticationMethod?: string; + planStatus?: Record; } type branch = { diff --git a/packages/contentstack-export/src/utils/export-config-handler.ts b/packages/contentstack-export/src/utils/export-config-handler.ts index c67b6c12b..bf984f3da 100644 --- a/packages/contentstack-export/src/utils/export-config-handler.ts +++ b/packages/contentstack-export/src/utils/export-config-handler.ts @@ -1,6 +1,14 @@ import merge from 'merge'; import * as path from 'path'; -import { configHandler, isAuthenticated,cliux, sanitizePath, log } from '@contentstack/cli-utilities'; +import { + configHandler, + isAuthenticated, + cliux, + sanitizePath, + log, + FeatureCtx, + isFeatureEnabled, +} from '@contentstack/cli-utilities'; import defaultConfig from '../config'; import { readFile } from './file-helper'; import { askExportDir, askAPIKey } from './interactive'; @@ -8,7 +16,7 @@ import login from './basic-login'; import { filter, includes } from 'lodash'; import { ExportConfig } from '../types'; -const setupConfig = async (exportCmdFlags: any): Promise => { +const setupConfig = async (exportCmdFlags: any, context?: any): Promise => { let config = merge({}, defaultConfig); // Track authentication method @@ -97,7 +105,7 @@ const setupConfig = async (exportCmdFlags: any): Promise => { if (exportCmdFlags['branch-alias']) { config.branchAlias = exportCmdFlags['branch-alias']; - } + } if (exportCmdFlags['branch']) { config.branchName = exportCmdFlags['branch']; } @@ -133,10 +141,36 @@ const setupConfig = async (exportCmdFlags: any): Promise => { } } - // Add authentication details to config for context tracking + // Add authentication details to config for context tracking config.authenticationMethod = authenticationMethod; log.debug('Export configuration setup completed.', { ...config }); + // Deferred plan check — credentials now available after setupExportConfig + const deferredFeatures: string[] = context?.planCheckRequired ?? []; + if (deferredFeatures.length > 0) { + const planCtx: FeatureCtx = { + apiKey: config.apiKey, + managementToken: config.management_token, + authToken: config.auth_token, + }; + for (const featureUid of deferredFeatures) { + try { + const status = await isFeatureEnabled(featureUid, planCtx); + if (context) { + context.planStatus[featureUid] = status; + } + + log.debug(`[export] Deferred plan status fetched for "${featureUid}".`); + } catch (error) { + log.warn(`[export] Could not fetch deferred plan status for "${featureUid}": ${(error as Error).message}`); + } + } + } + + if (context?.planStatus) { + config.planStatus = context.planStatus; + } + return config; }; diff --git a/packages/contentstack-export/test/unit/export/modules/assets.test.ts b/packages/contentstack-export/test/unit/export/modules/assets.test.ts index 5509682a4..61a1375c9 100644 --- a/packages/contentstack-export/test/unit/export/modules/assets.test.ts +++ b/packages/contentstack-export/test/unit/export/modules/assets.test.ts @@ -142,6 +142,7 @@ describe('ExportAssets', () => { displayExecutionTime: false, enableDownloadStatus: false, includeVersionedAssets: false, + blockingScanStatuses: ['pending', 'quarantined'], }, content_types: { dirName: 'content_types', @@ -564,6 +565,46 @@ describe('ExportAssets', () => { expect(makeConcurrentCallStub.called).to.be.true; }); + + it('should skip assets with a non-clean scan status and download the rest', async () => { + getPlainMetaStub.returns({ + 'file-1': [ + { uid: 'clean-1', url: 'https://test.io/assets/clean-1.jpeg', filename: 'clean-1.jpeg', _asset_scan_status: 'clean' }, + { uid: 'pending-1', url: 'https://test.io/assets/pending-1.zip', filename: 'pending-1.zip', _asset_scan_status: 'pending' }, + { uid: 'quarantined-1', url: 'https://test.io/assets/quarantined-1.zip', filename: 'quarantined-1.zip', _asset_scan_status: 'quarantined' }, + ], + }); + + await exportAssets.downloadAssets(); + + expect(makeConcurrentCallStub.called).to.be.true; + // Only the 'clean' asset should be handed off for download; pending/quarantined are skipped. + expect(makeConcurrentCallStub.firstCall.args[0].totalCount).to.equal(1); + }); + + it('should download assets with no scan status field (stacks without asset scanning enabled)', async () => { + getPlainMetaStub.returns({ + 'file-1': [{ uid: 'legacy-1', url: 'https://test.io/assets/legacy-1.jpeg', filename: 'legacy-1.jpeg' }], + }); + + await exportAssets.downloadAssets(); + + // Missing _asset_scan_status must not be treated as non-clean, or every export would break. + expect(makeConcurrentCallStub.firstCall.args[0].totalCount).to.equal(1); + }); + + it('should download assets with a not_scanned status (org has asset scanning disabled)', async () => { + getPlainMetaStub.returns({ + 'file-1': [ + { uid: 'not-scanned-1', url: 'https://test.io/assets/not-scanned-1.jpeg', filename: 'not-scanned-1.jpeg', _asset_scan_status: 'not_scanned' }, + ], + }); + + await exportAssets.downloadAssets(); + + // 'not_scanned' means scanning is off for the org, not that the asset is unsafe. + expect(makeConcurrentCallStub.firstCall.args[0].totalCount).to.equal(1); + }); }); describe('Edge Cases', () => { diff --git a/packages/contentstack-export/test/unit/export/modules/base-class.test.ts b/packages/contentstack-export/test/unit/export/modules/base-class.test.ts index 7fbdc6f74..2741963a0 100644 --- a/packages/contentstack-export/test/unit/export/modules/base-class.test.ts +++ b/packages/contentstack-export/test/unit/export/modules/base-class.test.ts @@ -160,6 +160,7 @@ describe('BaseClass', () => { displayExecutionTime: false, enableDownloadStatus: false, includeVersionedAssets: false, + blockingScanStatuses: ['pending', 'quarantined'], }, content_types: { dirName: 'content_types', diff --git a/packages/contentstack-export/test/unit/export/modules/stack.test.ts b/packages/contentstack-export/test/unit/export/modules/stack.test.ts index 8fa749c72..62bef40cb 100644 --- a/packages/contentstack-export/test/unit/export/modules/stack.test.ts +++ b/packages/contentstack-export/test/unit/export/modules/stack.test.ts @@ -151,7 +151,8 @@ describe('ExportStack', () => { securedAssets: false, displayExecutionTime: false, enableDownloadStatus: false, - includeVersionedAssets: false + includeVersionedAssets: false, + blockingScanStatuses: ['pending', 'quarantined'] }, content_types: { dirName: 'content_types', diff --git a/packages/contentstack-external-migrate/package.json b/packages/contentstack-external-migrate/package.json index 24c2aff43..e693f0112 100644 --- a/packages/contentstack-external-migrate/package.json +++ b/packages/contentstack-external-migrate/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-external-migrate", - "version": "1.0.0-alpha.6", + "version": "1.0.0-alpha.7", "description": "Migrate from external source to Contentstack", "author": "Contentstack", "license": "MIT", @@ -23,7 +23,7 @@ }, "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@contentstack/json-rte-serializer": "~2.1.0", "@contentstack/marketplace-sdk": "~1.5.3", "@oclif/core": "^4.8.0", diff --git a/packages/contentstack-external-migrate/tsconfig.tsbuildinfo b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo new file mode 100644 index 000000000..758731050 --- /dev/null +++ b/packages/contentstack-external-migrate/tsconfig.tsbuildinfo @@ -0,0 +1 @@ +{"root":["./src/index.ts","./src/adapters/registry.ts","./src/adapters/types.ts","./src/adapters/contentful/convert.ts","./src/adapters/contentful/export.ts","./src/adapters/contentful/index.ts","./src/adapters/contentful/validator.ts","./src/commands/migrate/audit.ts","./src/commands/migrate/convert.ts","./src/commands/migrate/create.ts","./src/commands/migrate/export.ts","./src/commands/migrate/import.ts","./src/commands/migrate/status.ts","./src/lib/bundle.ts","./src/lib/clear-import-state.ts","./src/lib/contentful-cli-spawn.ts","./src/lib/conversion-summary.ts","./src/lib/create-stack.ts","./src/lib/csdx-spawn.ts","./src/lib/helpers.ts","./src/lib/local-date.ts","./src/lib/log.ts","./src/lib/manifest.ts","./src/lib/parse-json-loose.ts","./src/services/contentful/config.ts","./src/services/contentful/constants.ts","./src/services/contentful/content-type-creator.ts","./src/services/contentful/contentful.service.ts","./src/services/contentful/extension.service.ts","./src/services/contentful/market-app.utils.ts","./src/services/contentful/marketplace.service.ts","./src/services/contentful/releases.ts","./src/services/contentful/scheduled.ts","./src/services/contentful/tasks.ts","./src/services/contentful/types.ts","./src/services/contentful/users.ts","./src/services/contentful/workflows.ts","./src/services/contentful/contentful/jsonrte.ts","./src/services/contentful/contentful/markdown.ts","./src/services/contentful/contentful/roles.ts","./src/services/contentful/contentful/taxonomy.service.ts","./src/services/contentful/mapper/write.ts","./src/services/contentful/migration-contentful/index.js","./src/services/contentful/migration-contentful/libs/contenttypemapper.js","./src/services/contentful/migration-contentful/libs/createinitialmapper.js","./src/services/contentful/migration-contentful/libs/extractcontenttypes.js","./src/services/contentful/migration-contentful/libs/extractlocale.js","./src/services/contentful/migration-contentful/libs/extracttaxonomy.js","./src/services/contentful/migration-contentful/utils/helper.js","./src/services/contentful/prompts/master-locale.ts","./src/services/contentful/utils/custom-logger.utils.ts","./src/services/contentful/utils/index.ts"],"version":"5.9.3"} \ No newline at end of file diff --git a/packages/contentstack-import-setup/README.md b/packages/contentstack-import-setup/README.md index b7f0f9884..7fcf07388 100644 --- a/packages/contentstack-import-setup/README.md +++ b/packages/contentstack-import-setup/README.md @@ -23,7 +23,7 @@ $ npm install -g @contentstack/cli-cm-import-setup $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-import-setup/1.8.5 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-import-setup/1.8.8 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-import-setup/package.json b/packages/contentstack-import-setup/package.json index 6f3e03a1c..4d3c7d480 100644 --- a/packages/contentstack-import-setup/package.json +++ b/packages/contentstack-import-setup/package.json @@ -1,12 +1,12 @@ { "name": "@contentstack/cli-cm-import-setup", "description": "Contentstack CLI plugin to setup the mappers and configurations for the import command", - "version": "1.8.7", + "version": "1.8.8", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "big-json": "^3.2.0", "chalk": "^4.1.2", diff --git a/packages/contentstack-import/README.md b/packages/contentstack-import/README.md index eb49bcea3..19c133211 100644 --- a/packages/contentstack-import/README.md +++ b/packages/contentstack-import/README.md @@ -24,7 +24,7 @@ $ npm install -g @contentstack/cli-cm-import $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-import/1.33.4 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-import/1.35.0 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-import/package.json b/packages/contentstack-import/package.json index 05a623db0..5d929524e 100644 --- a/packages/contentstack-import/package.json +++ b/packages/contentstack-import/package.json @@ -1,14 +1,14 @@ { "name": "@contentstack/cli-cm-import", "description": "Contentstack CLI plugin to import content into stack", - "version": "1.34.0", + "version": "1.35.0", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { - "@contentstack/cli-audit": "~1.20.0", + "@contentstack/cli-audit": "~1.21.0", "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", - "@contentstack/cli-variants": "~1.6.1", + "@contentstack/cli-utilities": "~1.19.1", + "@contentstack/cli-variants": "~1.6.2", "@oclif/core": "^4.11.4", "big-json": "^3.2.0", "bluebird": "^3.7.2", @@ -85,7 +85,8 @@ "shortCommandName": { "cm:stacks:import": "IMPRT", "cm:import": "O-IMPRT" - } + }, + "planProtectedFeatures": ["assetsScan"] }, "repository": "https://github.com/contentstack/cli" -} +} \ No newline at end of file diff --git a/packages/contentstack-import/src/commands/cm/stacks/import.ts b/packages/contentstack-import/src/commands/cm/stacks/import.ts index 74217cf45..0d795b66b 100644 --- a/packages/contentstack-import/src/commands/cm/stacks/import.ts +++ b/packages/contentstack-import/src/commands/cm/stacks/import.ts @@ -154,7 +154,7 @@ export default class ImportCommand extends Command { let importConfig: ImportConfig; try { const { flags } = await this.parse(ImportCommand); - importConfig = await setupImportConfig(flags); + importConfig = await setupImportConfig(flags, this.context); // Prepare the context object createLogContext( this.context?.info?.command || 'cm:stacks:export', @@ -187,6 +187,23 @@ export default class ImportCommand extends Command { log.success(`The log has been stored at: ${getLogPath()}`, importConfig.context); log.info(`The backup content has been stored at: ${backupDir}`, importConfig.context); + + // Closing reminder: when assets were imported but not published inline + // (asset scanning enabled, or --skip-assets-publish), point the user to + // cm:assets:publish with the backup dir and stack pre-filled so the note + // isn't lost in the per-module logs above. + const assetsImported = importConfig.moduleName + ? importConfig.moduleName === 'assets' + : importConfig.modules?.types?.includes('assets'); + // Mirror the publish gate in assets.ts (`!skipAssetsPublish`): assets are + // left unpublished exactly when skipAssetsPublish is set — which also + // covers the scanning case, since detecting scanning sets skipAssetsPublish. + if (!result?.noSuccessMsg && assetsImported && importConfig.skipAssetsPublish) { + log.info( + `Note: assets were imported but not published asset scanning is enabled and must complete first. To publish them, run:\n csdx cm:assets:publish --backup-dir ${backupDir} --stack-api-key ${importConfig.apiKey}`, + importConfig.context, + ); + } } catch (error) { handleAndLogError(error); log.info(`The log has been stored at '${getLogPath()}'`); diff --git a/packages/contentstack-import/src/import/modules/assets.ts b/packages/contentstack-import/src/import/modules/assets.ts index e8b792f0b..bdc36b38f 100644 --- a/packages/contentstack-import/src/import/modules/assets.ts +++ b/packages/contentstack-import/src/import/modules/assets.ts @@ -4,7 +4,6 @@ import filter from 'lodash/filter'; import unionBy from 'lodash/unionBy'; import orderBy from 'lodash/orderBy'; import isEmpty from 'lodash/isEmpty'; -import uniq from 'lodash/uniq'; import { existsSync } from 'node:fs'; import includes from 'lodash/includes'; import { resolve as pResolve, join } from 'node:path'; @@ -53,11 +52,15 @@ export default class ImportAssets extends BaseClass { */ async start(): Promise { try { - // NOTE Step 1: Import folders and create uid mapping file + if (this.importConfig.assetScanningEnabled) { + log.info('Assets Scanning is enabled in this stack', this.importConfig.context); + log.warn('Assets publishing will be skipped', this.importConfig.context); + } + // NOTE Step 1: Import folders and create uid mapping file log.debug('Starting folder import process...', this.importConfig.context); await this.importFolders(); - // NOTE Step 2: Import versioned assets and create it mapping files (uid, url) + // NOTE Step 2: Import versioned assets and create it mapping files (uid, url) if (this.assetConfig.includeVersionedAssets) { const versionsPath = `${this.assetsPath}/versions`; if (existsSync(versionsPath)) { @@ -68,17 +71,31 @@ export default class ImportAssets extends BaseClass { } } - // NOTE Step 3: Import Assets and create it mapping files (uid, url) + // NOTE Step 3: Import Assets and create it mapping files (uid, url) log.debug('Starting assets import...', this.importConfig.context); await this.importAssets(); - // NOTE Step 4: Publish assets + // NOTE Step 4: Publish assets if (!this.importConfig.skipAssetsPublish) { log.debug('Starting assets publishing...', this.importConfig.context); await this.publish(); } log.success('Assets imported successfully!', this.importConfig.context); + + // Only surface the "publish later" guidance when assets were actually + // imported. With 0 assets, assetsUidMap is empty and the backup has no + // assets to publish — printing the guidance would send the user to run + // cm:assets:publish against an empty backup. + if (this.importConfig.assetScanningEnabled && !isEmpty(this.assetsUidMap)) { + log.info('Asset Scanning is enabled for this stack.', this.importConfig.context); + log.info('Assets cannot be published immediately — scanning must complete first.', this.importConfig.context); + log.info('Once scanning is done, publish your assets using:', this.importConfig.context); + log.info( + `csdx cm:assets:publish --backup-dir ${this.importConfig.backupDir} --stack-api-key [STACK API KEY]`, + this.importConfig.context, + ); + } } catch (error) { handleAndLogError(error, { ...this.importConfig.context }); } @@ -301,6 +318,47 @@ export default class ImportAssets extends BaseClass { return apiOptions; } + /** + * Groups already-filtered `publish_details` into publish payloads that preserve the source + * env↔locale pairing. Entries are grouped by environment, then environments sharing an + * identical locale set are coalesced into one payload. Each returned group is a rectangle + * (its environments × its locales), so the CMA env×locale cross-product reproduces exactly + * the source pairs — never a phantom combination (the DX-9772 over-publish). + * + * A fully-rectangular input (every env published to the same locales) collapses to a single + * group, so behavior is unchanged for the common case; a ragged input fans out into one group + * per distinct locale set. Only environments present in `this.environments` are kept, so the + * env-name lookup is always safe — this preserves the DX-1656 invalid-environment guard. + */ + private buildPublishGroups( + publishDetails: Record[], + ): { environments: string[]; locales: string[] }[] { + const localesByEnv = new Map>(); + for (const { environment, locale } of publishDetails || []) { + if (!locale || !this.environments?.hasOwnProperty(environment)) continue; + let set = localesByEnv.get(environment); + if (!set) { + set = new Set(); + localesByEnv.set(environment, set); + } + set.add(locale); + } + + // Coalesce environments with an identical locale set into a single payload. + const groups = new Map(); + for (const [envUid, localeSet] of localesByEnv) { + const locales = [...localeSet].sort(); + const signature = locales.join(' '); + const existing = groups.get(signature); + if (existing) { + existing.environments.push(this.environments[envUid].name); + } else { + groups.set(signature, { environments: [this.environments[envUid].name], locales }); + } + } + return [...groups.values()]; + } + /** * @method publish * @returns {Promise} Promise @@ -325,49 +383,31 @@ export default class ImportAssets extends BaseClass { handleAndLogError(error, { ...this.importConfig.context, uid, title }); }; + // apiData is a pre-expanded sub-item ({ uid, title, publishDetails }); one per env-locale-set + // group (see below). Pairing is already preserved, so this only resolves the destination UID. const serializeData = (apiOptions: ApiOptions) => { - const { apiData: asset } = apiOptions; - const publishDetails = filter(asset.publish_details, ({ environment }) => { - return this.environments?.hasOwnProperty(environment); - }); - - if (publishDetails.length) { - const environments = uniq(map(publishDetails, ({ environment }) => this.environments[environment].name)); - const locales = uniq(map(publishDetails, 'locale')); - - if (environments.length === 0 || locales.length === 0) { - log.debug( - `Skipping publish for asset ${asset.uid}: no valid environments/locales`, - this.importConfig.context, - ); - apiOptions.entity = undefined; - return apiOptions; - } - - asset.locales = locales; - asset.environments = environments; - apiOptions.apiData.publishDetails = { locales, environments }; - log.debug(`Prepared publish details for asset ${asset.uid}`, this.importConfig.context); - } - - apiOptions.uid = this.assetsUidMap[asset.uid] as string; - + const { apiData } = apiOptions; + apiOptions.uid = this.assetsUidMap[apiData.uid] as string; if (!apiOptions.uid) { - log.debug(`Skipping publish for asset ${asset.uid}: no UID mapping found.`, this.importConfig.context); + log.debug(`Skipping publish for asset ${apiData.uid}: no UID mapping found.`, this.importConfig.context); apiOptions.entity = undefined; } - return apiOptions; }; for (const index in indexer) { log.debug(`Processing publish chunk ${index} of ${indexerCount}`, this.importConfig.context); - const apiContent = filter( - values(await fs.readChunkFiles.next()), - ({ publish_details }) => !isEmpty(publish_details), + // Expand each asset into one sub-item per env-locale-set group, so each makeConcurrentCall + // item is a single-rectangle publish (preserves env↔locale pairing). + const apiContent = values(await fs.readChunkFiles.next()).flatMap((asset: Record) => + this.buildPublishGroups(asset.publish_details).map((publishDetails) => ({ + uid: asset.uid, + title: asset.title, + publishDetails, + })), ); - log.debug(`Found ${apiContent.length} publishable assets in chunk`, this.importConfig.context); + log.debug(`Found ${apiContent.length} asset publish calls in chunk`, this.importConfig.context); await this.makeConcurrentCall({ apiContent, diff --git a/packages/contentstack-import/src/types/import-config.ts b/packages/contentstack-import/src/types/import-config.ts index 2c4c9a000..80805ae2c 100644 --- a/packages/contentstack-import/src/types/import-config.ts +++ b/packages/contentstack-import/src/types/import-config.ts @@ -1,3 +1,4 @@ +import { FeatureStatus } from '@contentstack/cli-utilities'; import { Context, Modules, Region } from '.'; import DefaultConfig from './default-config'; @@ -15,6 +16,7 @@ export default interface ImportConfig extends DefaultConfig, ExternalConfig { skipAssetsPublish?: boolean; skipEntriesPublish?: boolean; cliLogsPath: string; + assetScanningEnabled?: boolean; canCreatePrivateApp: boolean; contentDir: string; data: string; @@ -59,6 +61,7 @@ export default interface ImportConfig extends DefaultConfig, ExternalConfig { personalizeProjectName?: string; 'exclude-global-modules': false; context: Context; + planStatus?: Record; } type branch = { diff --git a/packages/contentstack-import/src/utils/import-config-handler.ts b/packages/contentstack-import/src/utils/import-config-handler.ts index 9df8a1bbd..e25a93034 100644 --- a/packages/contentstack-import/src/utils/import-config-handler.ts +++ b/packages/contentstack-import/src/utils/import-config-handler.ts @@ -7,6 +7,8 @@ import { cliux, sanitizePath, log, + isFeatureEnabled, + FeatureCtx, } from '@contentstack/cli-utilities'; import defaultConfig from '../config'; import { readFile, fileExistsSync } from './file-helper'; @@ -14,7 +16,7 @@ import { askContentDir, askAPIKey } from './interactive'; import login from './login-handler'; import { ImportConfig } from '../types'; -const setupConfig = async (importCmdFlags: any): Promise => { +const setupConfig = async (importCmdFlags: any, context?: any): Promise => { let config: ImportConfig = merge({}, defaultConfig); // Track authentication method let authenticationMethod = 'unknown'; @@ -139,6 +141,33 @@ const setupConfig = async (importCmdFlags: any): Promise => { config.authenticationMethod = authenticationMethod; log.debug('Import configuration setup completed.', { ...config }); + // Deferred plan check — credentials now available after setupImportConfig + const deferredFeatures: string[] = context?.planCheckRequired ?? []; + if (deferredFeatures.length > 0) { + const planCtx: FeatureCtx = { + apiKey: config.apiKey, + managementToken: config.management_token, + authToken: config.auth_token, + }; + for (const featureUid of deferredFeatures) { + try { + const status = await isFeatureEnabled(featureUid, planCtx); + if (context) context.planStatus[featureUid] = status; + log.debug(`[import] Deferred plan status fetched for "${featureUid}".`); + } catch (error) { + log.warn(`[import] Could not fetch deferred plan status for "${featureUid}": ${(error as Error).message}`); + } + } + } + + if (context?.planStatus) { + config.planStatus = context.planStatus; + if (config.planStatus['assetsScan']?.is_part_of_plan) { + config.assetScanningEnabled = true; + config.skipAssetsPublish = true; + } + } + return config; }; diff --git a/packages/contentstack-import/test/unit/import/modules/assets.test.ts b/packages/contentstack-import/test/unit/import/modules/assets.test.ts index 9cb43df50..c171af5b3 100644 --- a/packages/contentstack-import/test/unit/import/modules/assets.test.ts +++ b/packages/contentstack-import/test/unit/import/modules/assets.test.ts @@ -651,101 +651,145 @@ describe('ImportAssets', () => { expect(makeConcurrentCallStub.called).to.be.true; }); - it('should filter publish_details by valid environments', async () => { - importAssets['environments'] = { 'env-1': { name: 'production' } }; + it('should skip publish when no UID mapping found', async () => { + importAssets['assetsUidMap'] = {}; makeConcurrentCallStub.callsFake(async (options: any) => { const serializeData = options.apiParams.serializeData; + // apiData is now a pre-grouped sub-item. const result = serializeData({ apiData: { - uid: 'asset-1', - publish_details: [ - { environment: 'env-1', locale: 'en-us' }, - { environment: 'env-invalid', locale: 'en-us' } - ] + uid: 'asset-unknown', + publishDetails: { environments: ['production'], locales: ['en-us'] } } }); - - expect(result.apiData.environments).to.deep.equal(['production']); - expect(result.apiData.locales).to.deep.equal(['en-us']); + + expect(result.entity).to.be.undefined; }); await (importAssets as any).publish(); }); - it('should skip publish when no valid environments', async () => { + it('should set correct UID from mapping and preserve the grouped payload', async () => { + importAssets['assetsUidMap'] = { 'asset-1': 'mapped-asset-1' }; + makeConcurrentCallStub.callsFake(async (options: any) => { const serializeData = options.apiParams.serializeData; const result = serializeData({ apiData: { uid: 'asset-1', - publish_details: [ - { environment: 'env-invalid', locale: 'en-us' } - ] + publishDetails: { environments: ['production'], locales: ['en-us'] } } }); - - expect(result.entity).to.be.undefined; + + expect(result.uid).to.equal('mapped-asset-1'); + // serializeData no longer flattens — it leaves the pre-grouped payload untouched. + expect(result.apiData.publishDetails).to.deep.equal({ environments: ['production'], locales: ['en-us'] }); }); await (importAssets as any).publish(); }); - it('should skip publish when no UID mapping found', async () => { - importAssets['assetsUidMap'] = {}; + it('preserves env-locale pairing for a RAGGED asset (DX-9772) — no phantom pairs', async () => { + // production published only in en-us; preview published only in fr-fr. + importAssets['assetsUidMap'] = { 'asset-1': 'new-asset-1' }; + importAssets['environments'] = { 'env-1': { name: 'production' }, 'env-2': { name: 'preview' } }; + Object.defineProperty(FsUtility.prototype, 'readChunkFiles', { + get: sinon.stub().returns({ + next: sinon.stub().resolves([ + { + uid: 'asset-1', + title: 'ragged.jpg', + publish_details: [ + { environment: 'env-1', locale: 'en-us' }, + { environment: 'env-2', locale: 'fr-fr' } + ] + } + ]) + }), + configurable: true + }); + let apiContent: any[] = []; makeConcurrentCallStub.callsFake(async (options: any) => { - const serializeData = options.apiParams.serializeData; - const result = serializeData({ - apiData: { - uid: 'asset-unknown', - publish_details: [{ environment: 'env-1', locale: 'en-us' }] - } - }); - - expect(result.entity).to.be.undefined; + apiContent = options.apiContent; }); await (importAssets as any).publish(); + + // Two separate publish calls, each a single-rectangle payload — never a cartesian. + expect(apiContent).to.have.lengthOf(2); + const payloads = apiContent.map((i) => i.publishDetails); + expect(payloads).to.deep.include.members([ + { environments: ['production'], locales: ['en-us'] }, + { environments: ['preview'], locales: ['fr-fr'] } + ]); + for (const p of payloads) { + const hasPhantom = + (p.environments.includes('production') && p.locales.includes('fr-fr')) || + (p.environments.includes('preview') && p.locales.includes('en-us')); + expect(hasPhantom, `phantom pair in ${JSON.stringify(p)}`).to.be.false; + } }); + }); - it('should set correct UID from mapping', async () => { - importAssets['assetsUidMap'] = { 'asset-1': 'mapped-asset-1' }; + describe('buildPublishGroups() method', () => { + it('collapses a RECTANGULAR asset to a single publish call (behavior-preserving)', () => { + importAssets['environments'] = { + 'e1': { name: 'production' }, + 'e2': { name: 'preview' }, + 'e3': { name: 'development' } + }; + const pd = ['e1', 'e2', 'e3'].flatMap((environment) => [ + { environment, locale: 'en-us' }, + { environment, locale: 'fr-fr' } + ]); - makeConcurrentCallStub.callsFake(async (options: any) => { - const serializeData = options.apiParams.serializeData; - const result = serializeData({ - apiData: { - uid: 'asset-1', - publish_details: [{ environment: 'env-1', locale: 'en-us' }] - } - }); - - expect(result.uid).to.equal('mapped-asset-1'); - }); + const groups = (importAssets as any).buildPublishGroups(pd); - await (importAssets as any).publish(); + expect(groups).to.have.lengthOf(1); + expect(groups[0].locales).to.deep.equal(['en-us', 'fr-fr']); + expect(groups[0].environments).to.have.members(['production', 'preview', 'development']); }); - it('should extract unique locales from publish_details', async () => { - makeConcurrentCallStub.callsFake(async (options: any) => { - const serializeData = options.apiParams.serializeData; - const result = serializeData({ - apiData: { - uid: 'asset-1', - publish_details: [ - { environment: 'env-1', locale: 'en-us' }, - { environment: 'env-1', locale: 'en-us' }, - { environment: 'env-1', locale: 'fr-fr' } - ] - } - }); - - expect(result.apiData.locales).to.have.lengthOf(2); - expect(result.apiData.locales).to.include.members(['en-us', 'fr-fr']); - }); + it('fans a RAGGED asset out into one group per distinct locale set (DX-9772)', () => { + importAssets['environments'] = { 'e1': { name: 'new' }, 'e2': { name: 'blt5795' } }; + const pd = [ + { environment: 'e2', locale: 'en-us' }, + { environment: 'e1', locale: 'en-us' }, + { environment: 'e1', locale: 'ar' } + ]; - await (importAssets as any).publish(); + const groups = (importAssets as any).buildPublishGroups(pd); + + expect(groups).to.have.lengthOf(2); + expect(groups).to.deep.include.members([ + { environments: ['new'], locales: ['ar', 'en-us'] }, + { environments: ['blt5795'], locales: ['en-us'] } + ]); + const blt5795 = groups.find((g: any) => g.environments.includes('blt5795')); + expect(blt5795.locales).to.not.include('ar'); + }); + + it('handles a single env-locale pair (1×1) as one group', () => { + importAssets['environments'] = { 'e1': { name: 'production' } }; + const groups = (importAssets as any).buildPublishGroups([{ environment: 'e1', locale: 'en-us' }]); + expect(groups).to.deep.equal([{ environments: ['production'], locales: ['en-us'] }]); + }); + + it('drops environments absent from the destination (preserves DX-1656 guard)', () => { + importAssets['environments'] = { 'e1': { name: 'production' } }; + const groups = (importAssets as any).buildPublishGroups([ + { environment: 'e1', locale: 'en-us' }, + { environment: 'gone', locale: 'en-us' } + ]); + expect(groups).to.deep.equal([{ environments: ['production'], locales: ['en-us'] }]); + }); + + it('returns [] for empty publish_details', () => { + importAssets['environments'] = { 'e1': { name: 'production' } }; + expect((importAssets as any).buildPublishGroups([])).to.deep.equal([]); + expect((importAssets as any).buildPublishGroups(undefined)).to.deep.equal([]); }); }); diff --git a/packages/contentstack-migrate-rte/package.json b/packages/contentstack-migrate-rte/package.json index 5b66a127c..ca9abb13c 100644 --- a/packages/contentstack-migrate-rte/package.json +++ b/packages/contentstack-migrate-rte/package.json @@ -1,14 +1,14 @@ { "name": "@contentstack/cli-cm-migrate-rte", "description": "Contentstack CLI plugin to migrate HTML RTE to JSON RTE", - "version": "1.7.3", + "version": "1.7.4", "author": "contentstack", "bugs": { "url": "https://github.com/contentstack/cli-plugins/issues" }, "dependencies": { "@contentstack/cli-command": "1.8.5", - "@contentstack/cli-utilities": "1.19.0", + "@contentstack/cli-utilities": "1.19.1", "@contentstack/json-rte-serializer": "~2.1.0", "@oclif/core": "^4.12.0", "@oclif/plugin-help": "^6.2.53", diff --git a/packages/contentstack-migration/README.md b/packages/contentstack-migration/README.md index a2ba7d349..caa67d5fb 100644 --- a/packages/contentstack-migration/README.md +++ b/packages/contentstack-migration/README.md @@ -21,7 +21,7 @@ $ npm install -g @contentstack/cli-migration $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-migration/1.12.4 darwin-arm64 node-v22.21.1 +@contentstack/cli-migration/1.12.6 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-migration/package.json b/packages/contentstack-migration/package.json index 31e949af9..eb2b92437 100644 --- a/packages/contentstack-migration/package.json +++ b/packages/contentstack-migration/package.json @@ -1,11 +1,11 @@ { "name": "@contentstack/cli-migration", - "version": "1.12.5", + "version": "1.12.6", "author": "@contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "async": "^3.2.6", "callsites": "^3.1.0", diff --git a/packages/contentstack-query-export/package.json b/packages/contentstack-query-export/package.json index 7f4f8dba7..bcfbba299 100644 --- a/packages/contentstack-query-export/package.json +++ b/packages/contentstack-query-export/package.json @@ -1,14 +1,14 @@ { "name": "@contentstack/cli-cm-export-query", "description": "Contentstack CLI plugin to export content from stack", - "version": "1.0.6", + "version": "1.0.7", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { - "@contentstack/cli-cm-export": "~1.26.0", + "@contentstack/cli-cm-export": "~1.27.0", "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", - "@contentstack/cli-variants": "~1.6.1", + "@contentstack/cli-utilities": "~1.19.1", + "@contentstack/cli-variants": "~1.6.2", "@oclif/core": "^4.11.4", "async": "^3.2.6", "big-json": "^3.2.0", @@ -98,4 +98,4 @@ } }, "repository": "https://github.com/contentstack/cli" -} +} \ No newline at end of file diff --git a/packages/contentstack-seed/README.md b/packages/contentstack-seed/README.md index 6004904c5..48ac38f64 100644 --- a/packages/contentstack-seed/README.md +++ b/packages/contentstack-seed/README.md @@ -15,7 +15,7 @@ $ npm install -g @contentstack/cli-cm-seed $ csdx COMMAND running command... $ csdx (--version) -@contentstack/cli-cm-seed/1.15.7 darwin-arm64 node-v22.21.1 +@contentstack/cli-cm-seed/1.15.10 darwin-arm64 node-v24.18.0 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-seed/package.json b/packages/contentstack-seed/package.json index 6caa4768c..2cf29abbb 100644 --- a/packages/contentstack-seed/package.json +++ b/packages/contentstack-seed/package.json @@ -1,13 +1,13 @@ { "name": "@contentstack/cli-cm-seed", "description": "create a Stack from existing content types, entries, assets, etc.", - "version": "1.15.9", + "version": "1.15.10", "author": "Contentstack", "bugs": "https://github.com/contentstack/cli/issues", "dependencies": { - "@contentstack/cli-cm-import": "~1.34.0", + "@contentstack/cli-cm-import": "~1.35.0", "@contentstack/cli-command": "~1.8.5", - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "inquirer": "8.2.7", "mkdirp": "^1.0.4", "tar": "^7.5.19", diff --git a/packages/contentstack-variants/package.json b/packages/contentstack-variants/package.json index c3f86bdb4..ea97d776a 100644 --- a/packages/contentstack-variants/package.json +++ b/packages/contentstack-variants/package.json @@ -1,6 +1,6 @@ { "name": "@contentstack/cli-variants", - "version": "1.6.1", + "version": "1.6.2", "description": "Variants plugin", "main": "lib/index.js", "types": "lib/index.d.ts", @@ -28,7 +28,7 @@ "typescript": "^5.8.3" }, "dependencies": { - "@contentstack/cli-utilities": "~1.19.0", + "@contentstack/cli-utilities": "~1.19.1", "@oclif/core": "^4.11.4", "lodash": "^4.18.1", "mkdirp": "^1.0.4", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c641a7a66..ff53ea72f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,10 +8,10 @@ overrides: tmp: 0.2.7 uuid: 14.0.1 lodash: 4.18.1 - brace-expansion: 5.0.8 - js-yaml: 5.2.2 - fast-uri: 4.1.1 - ws: 8.21.1 + brace-expansion: 5.0.9 + js-yaml: 5.2.3 + fast-uri: 4.1.2 + ws: 8.21.2 importers: @@ -36,11 +36,11 @@ importers: specifier: ^1.11.1 version: 1.11.1(@types/node@20.19.43)(tslib@2.8.1)(typescript@5.9.3) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) adm-zip: - specifier: ^0.5.17 - version: 0.5.18 + specifier: ^0.6.0 + version: 0.6.0 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -59,7 +59,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/adm-zip': specifier: ^0.5.8 version: 0.5.8 @@ -68,7 +68,7 @@ importers: version: 4.3.20 '@types/lodash': specifier: ^4.17.24 - version: 4.17.24 + version: 4.17.25 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -83,13 +83,13 @@ importers: version: 0.2.6 '@typescript-eslint/eslint-plugin': specifier: ^8.58.2 - version: 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) + version: 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.58.2 - version: 8.65.0(eslint@10.8.0)(typescript@5.9.3) + version: 8.66.0(eslint@10.8.0)(typescript@5.9.3) axios: specifier: ^1.16.1 - version: 1.18.1(debug@4.4.3) + version: 1.19.0(debug@4.4.3) chai: specifier: ^4.5.0 version: 4.5.0 @@ -133,11 +133,11 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@20.19.43) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -156,7 +156,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/chai': specifier: ^4.3.20 version: 4.3.20 @@ -206,20 +206,20 @@ importers: packages/contentstack-bootstrap: dependencies: '@contentstack/cli-cm-seed': - specifier: ~1.15.9 + specifier: ~1.15.10 version: link:../contentstack-seed '@contentstack/cli-command': specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-config': - specifier: ~1.21.0 - version: 1.21.0(@types/node@14.18.63) + specifier: ~1.21.1 + version: 1.21.1(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 inquirer: specifier: 8.2.7 version: 8.2.7(@types/node@14.18.63) @@ -232,7 +232,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/inquirer': specifier: ^9.0.8 version: 9.0.10 @@ -273,11 +273,11 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@22.20.1) + specifier: ~1.19.1 + version: 1.19.1(@types/node@22.20.1) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -328,14 +328,14 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@20.19.43) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@contentstack/delivery-sdk': specifier: ^5.4.0 - version: 5.5.0 + version: 5.5.1 '@contentstack/management': specifier: ^1.30.3 - version: 1.31.0 + version: 1.31.1 lodash: specifier: 4.18.1 version: 4.18.1 @@ -351,7 +351,7 @@ importers: version: 5.2.3 '@types/lodash': specifier: ^4.17.24 - version: 4.17.24 + version: 4.17.25 '@types/mocha': specifier: ^10.0.10 version: 10.0.10 @@ -363,10 +363,10 @@ importers: version: 21.0.1 '@typescript-eslint/eslint-plugin': specifier: ^8.59.2 - version: 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) + version: 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) '@typescript-eslint/parser': specifier: ^8.59.2 - version: 8.65.0(eslint@10.8.0)(typescript@6.0.3) + version: 8.66.0(eslint@10.8.0)(typescript@6.0.3) chai: specifier: ^6.2.2 version: 6.2.2 @@ -396,10 +396,10 @@ importers: version: 9.1.7 lint-staged: specifier: ^17.0.2 - version: 17.2.0 + version: 17.3.0 mocha: specifier: ^11.7.5 - version: 11.7.6 + version: 11.8.0 nyc: specifier: ^18.0.0 version: 18.0.0 @@ -431,14 +431,14 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-config': - specifier: ~1.21.0 - version: 1.21.0(@types/node@22.20.1) + specifier: ~1.21.1 + version: 1.21.1(@types/node@22.20.1) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@22.20.1) + specifier: ~1.19.1 + version: 1.19.1(@types/node@22.20.1) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -457,7 +457,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) chai: specifier: ^4.5.0 version: 4.5.0 @@ -483,11 +483,11 @@ importers: specifier: ^1.8.5 version: 1.8.5(@types/node@18.19.130) '@contentstack/cli-utilities': - specifier: ^1.19.0 - version: 1.19.0(@types/node@18.19.130) + specifier: ^1.19.1 + version: 1.19.1(@types/node@18.19.130) '@contentstack/management': specifier: ^1.30.4 - version: 1.31.0 + version: 1.31.1 cli-table3: specifier: ^0.6.5 version: 0.6.5 @@ -512,7 +512,7 @@ importers: version: 7.29.7(@babel/core@7.29.7) '@oclif/plugin-help': specifier: ^6.2.52 - version: 6.2.55 + version: 6.2.56 '@oclif/test': specifier: ^3.2.15 version: 3.2.15 @@ -536,7 +536,7 @@ importers: version: 1.1.6 '@typescript-eslint/eslint-plugin': specifier: ^8.59.2 - version: 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) + version: 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) chai: specifier: ^4.5.0 version: 4.5.0 @@ -586,18 +586,18 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@22.20.1) + specifier: ~1.19.1 + version: 1.19.1(@types/node@22.20.1) '@contentstack/types-generator': specifier: ^3.10.2 version: 3.10.2(graphql@16.14.2) devDependencies: '@oclif/plugin-help': specifier: ^6.2.49 - version: 6.2.55 + version: 6.2.56 '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/jest': specifier: ^29.5.14 version: 29.5.14 @@ -606,10 +606,10 @@ importers: version: 22.20.1 '@typescript-eslint/eslint-plugin': specifier: ^8.59.3 - version: 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) + version: 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) '@typescript-eslint/parser': specifier: ^8.59.3 - version: 8.65.0(eslint@10.8.0)(typescript@5.9.3) + version: 8.66.0(eslint@10.8.0)(typescript@5.9.3) dotenv: specifier: ^16.6.1 version: 16.6.1 @@ -641,20 +641,20 @@ importers: specifier: ^1.6.0 version: 1.6.0 '@contentstack/cli-cm-export': - specifier: ~1.26.0 + specifier: ~1.27.0 version: link:../contentstack-export '@contentstack/cli-cm-import': - specifier: ~1.34.0 + specifier: ~1.35.0 version: link:../contentstack-import '@contentstack/cli-command': specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -679,7 +679,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/chai': specifier: ^4.3.0 version: 4.3.20 @@ -694,7 +694,7 @@ importers: version: 10.0.20 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) + version: 5.62.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) chai: specifier: ^4.5.0 version: 4.5.0 @@ -729,35 +729,20 @@ importers: specifier: ^1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-utilities': - specifier: ^1.19.0 - version: 1.19.0(@types/node@22.20.1) - '@types/diff2html': - specifier: ^3.0.3 - version: 3.0.3 - '@types/git-diff': - specifier: ^2.0.7 - version: 2.0.7 - '@types/hogan.js': - specifier: ^3.0.5 - version: 3.0.5 - '@types/table': - specifier: ^6.3.2 - version: 6.3.2 - '@types/tmp': - specifier: ^0.2.6 - version: 0.2.6 + specifier: ^1.19.1 + version: 1.19.1(@types/node@22.20.1) axios: specifier: ^1.18.1 - version: 1.18.1(debug@4.4.3) + version: 1.19.0(debug@4.4.3) cli-ux: specifier: ^6.0.9 version: 6.0.9 + diff: + specifier: ^9.0.0 + version: 9.0.0 diff2html: specifier: ^3.4.56 version: 3.4.56 - git-diff: - specifier: ^2.0.7 - version: 2.0.7 moment: specifier: ^2.30.1 version: 2.30.1 @@ -779,13 +764,22 @@ importers: devDependencies: '@oclif/plugin-help': specifier: ^6.2.49 - version: 6.2.55 + version: 6.2.56 + '@types/diff2html': + specifier: ^3.0.3 + version: 3.0.3 '@types/jest': specifier: ^29.5.14 version: 29.5.14 '@types/node': specifier: ^22.19.19 version: 22.20.1 + '@types/table': + specifier: ^6.3.2 + version: 6.3.2 + '@types/tmp': + specifier: ^0.2.6 + version: 0.2.6 eslint: specifier: ^10.5.0 version: 10.8.0 @@ -820,14 +814,14 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@22.20.1) + specifier: ~1.19.1 + version: 1.19.1(@types/node@22.20.1) '@contentstack/cli-variants': - specifier: ~1.6.1 + specifier: ~1.6.2 version: link:../contentstack-variants '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 async: specifier: ^3.2.6 version: 3.2.6 @@ -863,17 +857,17 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@22.20.1) '@contentstack/cli-config': - specifier: ~1.21.0 - version: 1.21.0(@types/node@22.20.1) + specifier: ~1.21.1 + version: 1.21.1(@types/node@22.20.1) '@contentstack/cli-dev-dependencies': specifier: ^1.3.1 version: 1.3.1 '@oclif/plugin-help': specifier: ^6.2.28 - version: 6.2.55 + version: 6.2.56 '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/big-json': specifier: ^3.2.5 version: 3.2.5 @@ -932,11 +926,11 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@20.19.43) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 fast-csv: specifier: ^4.3.6 version: 4.3.6 @@ -949,7 +943,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/chai': specifier: ^4.3.20 version: 4.3.20 @@ -999,8 +993,8 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@20.19.43) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@contentstack/json-rte-serializer': specifier: ~2.1.0 version: 2.1.0 @@ -1009,10 +1003,10 @@ importers: version: 1.5.4(debug@4.4.3) '@oclif/core': specifier: ^4.8.0 - version: 4.13.2 + version: 4.13.3 axios: specifier: ^1.18.1 - version: 1.18.1(debug@4.4.3) + version: 1.19.0(debug@4.4.3) chalk: specifier: ^4.1.2 version: 4.1.2 @@ -1040,7 +1034,7 @@ importers: version: 21.1.7 '@types/lodash': specifier: ^4.17.0 - version: 4.17.24 + version: 4.17.25 '@types/mkdirp': specifier: ^1.0.2 version: 1.0.2 @@ -1067,25 +1061,25 @@ importers: version: 5.9.3 vitest: specifier: ^4.1.9 - version: 4.1.10(@types/node@20.19.43)(jsdom@23.2.0)(vite@8.1.5(@types/node@20.19.43)(yaml@2.9.0)) + version: 4.1.10(@types/node@20.19.43)(jsdom@23.2.0)(vite@8.2.0(@types/node@20.19.43)(yaml@2.9.0)) packages/contentstack-import: dependencies: '@contentstack/cli-audit': - specifier: ~1.20.0 + specifier: ~1.21.0 version: link:../contentstack-audit '@contentstack/cli-command': specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63)(debug@4.4.3) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63)(debug@4.4.3) '@contentstack/cli-variants': - specifier: ~1.6.1 + specifier: ~1.6.2 version: link:../contentstack-variants '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 big-json: specifier: ^3.2.0 version: 3.2.0 @@ -1122,7 +1116,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/big-json': specifier: ^3.2.5 version: 3.2.5 @@ -1143,7 +1137,7 @@ importers: version: 14.18.63 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) + version: 5.62.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) eslint: specifier: ^10.5.0 version: 10.8.0 @@ -1172,11 +1166,11 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 big-json: specifier: ^3.2.0 version: 3.2.0 @@ -1219,7 +1213,7 @@ importers: version: 14.18.63 '@typescript-eslint/eslint-plugin': specifier: ^5.62.0 - version: 5.62.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) + version: 5.62.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) chai: specifier: ^4.5.0 version: 4.5.0 @@ -1246,19 +1240,19 @@ importers: dependencies: '@contentstack/cli-command': specifier: 1.8.5 - version: 1.8.5(@types/node@18.19.130) + version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: 1.19.0 - version: 1.19.0(@types/node@18.19.130) + specifier: 1.19.1 + version: 1.19.1(@types/node@14.18.63) '@contentstack/json-rte-serializer': specifier: ~2.1.0 version: 2.1.0 '@oclif/core': specifier: ^4.12.0 - version: 4.13.2 + version: 4.13.3 '@oclif/plugin-help': specifier: ^6.2.53 - version: 6.2.55 + version: 6.2.56 chalk: specifier: ^4.1.2 version: 4.1.2 @@ -1280,7 +1274,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) chai: specifier: ^4.5.0 version: 4.5.0 @@ -1318,11 +1312,11 @@ importers: specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 async: specifier: ^3.2.6 version: 3.2.6 @@ -1347,7 +1341,7 @@ importers: devDependencies: '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/mocha': specifier: ^8.2.3 version: 8.2.3 @@ -1394,20 +1388,20 @@ importers: packages/contentstack-query-export: dependencies: '@contentstack/cli-cm-export': - specifier: ~1.26.0 + specifier: ~1.27.0 version: link:../contentstack-export '@contentstack/cli-command': specifier: ~1.8.5 version: 1.8.5(@types/node@20.19.43) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@contentstack/cli-variants': - specifier: ~1.6.1 + specifier: ~1.6.2 version: link:../contentstack-variants '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 async: specifier: ^3.2.6 version: 3.2.6 @@ -1444,10 +1438,10 @@ importers: version: 1.3.1 '@oclif/plugin-help': specifier: ^6.2.44 - version: 6.2.55 + version: 6.2.56 '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/big-json': specifier: ^3.2.5 version: 3.2.5 @@ -1509,14 +1503,14 @@ importers: packages/contentstack-seed: dependencies: '@contentstack/cli-cm-import': - specifier: ~1.34.0 + specifier: ~1.35.0 version: link:../contentstack-import '@contentstack/cli-command': specifier: ~1.8.5 version: 1.8.5(@types/node@14.18.63) '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@14.18.63)(debug@4.4.3) + specifier: ~1.19.1 + version: 1.19.1(@types/node@14.18.63) inquirer: specifier: 8.2.7 version: 8.2.7(@types/node@14.18.63) @@ -1576,11 +1570,11 @@ importers: packages/contentstack-variants: dependencies: '@contentstack/cli-utilities': - specifier: ~1.19.0 - version: 1.19.0(@types/node@20.19.43) + specifier: ~1.19.1 + version: 1.19.1(@types/node@20.19.43) '@oclif/core': specifier: ^4.11.4 - version: 4.13.2 + version: 4.13.3 lodash: specifier: 4.18.1 version: 4.18.1 @@ -1596,7 +1590,7 @@ importers: version: 1.3.1 '@oclif/test': specifier: ^4.1.18 - version: 4.1.21(@oclif/core@4.13.2) + version: 4.1.21(@oclif/core@4.13.3) '@types/node': specifier: ^20.19.39 version: 20.19.43 @@ -1639,68 +1633,68 @@ packages: '@asamuzakjp/dom-selector@2.0.2': resolution: {integrity: sha512-x1KXOatwofR6ZAYzXRBL5wrdV0vwNxlTCK9NCuLqAzQYARqGcvFwiJA6A1ERuh+dgeA4Dxm3JBYictIes+SqUQ==} - '@aws-sdk/checksums@3.1000.22': - resolution: {integrity: sha512-YsSac72lcCOSjk5X4fMc20SjltkGUDjckB2vYZcEd/RpgB+huzeQwVZrOWxUvLVo+5D7X9sURgmAAPmErgCQ7w==} + '@aws-sdk/checksums@3.1000.25': + resolution: {integrity: sha512-zUjEceMw6vhAxMayAlF/vkkKqP9gHbENqvz11t4FbfDlxB/WtW/Az1orJAQ00Pc/yORLQJXKE24w11Ktu/XBcg==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-cloudfront@3.1097.0': - resolution: {integrity: sha512-YZrDIvdLqd53NcodnOQFgLZloA9WB7wj4NHSrf7VAnEaF4VPaw+0iYCLDNwzqk2GuEq4F02Yr+if8I58nukSsA==} + '@aws-sdk/client-cloudfront@3.1102.0': + resolution: {integrity: sha512-CYuujR/3k0Y3+tCG3yscYi49gIGJjl10HyUzIMiIYrTrsJHBgGLzCk+t5sR+uJrvWTHavtM513kgyhmrNKT0kA==} engines: {node: '>=20.0.0'} - '@aws-sdk/client-s3@3.1097.0': - resolution: {integrity: sha512-iCBD95hrynpxiOzD301pUW9H3mxKcEfMErLqdg58WcIZnEqJuOd7JwcARsV3/y6OWj1t6j2tpS9lGt6X4OnPFw==} + '@aws-sdk/client-s3@3.1102.0': + resolution: {integrity: sha512-VQL/oWlt0+Rj2QZcAnp3+hMHW/T01EmkPQXf9ise2gz6d95U82eVE1dPBpMlnv4aDiz99TrMR0DHmceCjCkCmA==} engines: {node: '>=20.0.0'} - '@aws-sdk/core@3.977.2': - resolution: {integrity: sha512-8sT/M5vDcagx5/iM0Bfx7f6i3mfVOQkA34+GTMwp0lIWZb6ma+bjkzDS/r9yqU2yTPBqqMBFPT3+d9kUuuNDJA==} + '@aws-sdk/core@3.977.5': + resolution: {integrity: sha512-O5otOc1c6UZh5HsHAaPdYBcUUR9HL6mtnKqvc8nxN/CKDGUBUpsdh0q8K04Uz/dd1i0TaGyIQuQNqoO7+ad2TQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-env@3.972.63': - resolution: {integrity: sha512-VSS9dftt7r7GiZ4gs8z0PNaMLVAaSj/MXVr6WQBtsrQQB9miJo7I6lQuJND1/ugFwK9x7OHCYZDkLSYh0FIZtA==} + '@aws-sdk/credential-provider-env@3.972.66': + resolution: {integrity: sha512-bOzP2+zdJ0XrghywB4FaJXtGZCx9yS0AGps+VJ5yEgg30wVyHNmVDBwVDXcRypzQY5iLGCS3NSn0nsuISqjFCQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-http@3.972.65': - resolution: {integrity: sha512-SH/ec7p1J0CfC28+ypH38IwGENd7tQEvTpmuRSlinthiGxKlwzJbXGXxIMAhn0/lpxnIxudNmCsw3Cy0PDRoAg==} + '@aws-sdk/credential-provider-http@3.972.68': + resolution: {integrity: sha512-lkunS8X+H6V76WE+t/uGQm/U8v0JXK5mLfNFTUAMlE1kqaCjwlmqKJrgCVtqjK/vqnlrSWsLK4Lr4NANBWlfTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-ini@3.973.8': - resolution: {integrity: sha512-alkQpDUHsjHGVXvlV0XFXpPfh9+aTMmN6UYRky0Qky8SbvdxoQdDHftT4uugq8XShP6WtDQW7bo5YQ0SfNSxRQ==} + '@aws-sdk/credential-provider-ini@3.973.11': + resolution: {integrity: sha512-KoDEolYtLHG/8C+IiZpXbJWyBOMkrHV+j66Kb9PBXmLv5euGb7aELvuCmLenoGAV6gBW2wM7TsG/1e5iulH4kA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-login@3.972.70': - resolution: {integrity: sha512-JlUjK6bYJAxN9PkWWCI/TiOYEdvXNKq61x2DTaEKxRMxAOYNk2LX8m4wVtDFxTZwyXx7Tpmxb49dNprkW/uqXQ==} + '@aws-sdk/credential-provider-login@3.972.73': + resolution: {integrity: sha512-tjsxMkTAFkmiV9ycmymapb9nLECWVOwFs0bZMQ9gB9bnbY8/HwfukHZlWbXZZp7qkPU6EXAfOcMm3DioFFEywA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-node@3.972.74': - resolution: {integrity: sha512-V+7pzT0OzROL2uKcQ2+MpnfwKONvozYojmdn8RguAMX9o48gtSVvt+7aCkwWCH2thDXOnUPCN6qn4kiFDelZWA==} + '@aws-sdk/credential-provider-node@3.972.77': + resolution: {integrity: sha512-l4nitYCN/Ls57vtUfdextCjTjW41JD7lQiAnuR0RTbdByFc/6OmEAzwGd+lrp6CUtiXGQL1FCaYiamfHASrwBw==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-process@3.972.63': - resolution: {integrity: sha512-lPt2oGMcvP3uPhhxX5EquHrzBI/ZgJce+CHKcOGZl2ZQAXLLSxu7k/Cgo0HIktyi9dmDFljbOkj4XAnXD93YVQ==} + '@aws-sdk/credential-provider-process@3.972.66': + resolution: {integrity: sha512-YOnX6bIhdjx0QfaENu2PB0eFm5MEc9ft8XNGQ+NxMfeLSq9aE+XjWCwDupEnV4UWv5ZFpBLJbTREIx7KNOoqpQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-sso@3.973.7': - resolution: {integrity: sha512-FR2b+7QNXP/q+eslVzrCjGKvso8Lcr/B18BvFyD2iLNhq42XSo+wnh8FfX6mtqgaVsL1vuB27uGXuY+xUTa7pg==} + '@aws-sdk/credential-provider-sso@3.973.10': + resolution: {integrity: sha512-IsXnQ35j5VE+3ZK6aIhT5ypB+Jim3zRwVz0nYuVwyBKZyu/SYx+O2/LQpng8c2EiuwyqceabsDlYrICHDlJPsA==} engines: {node: '>=20.0.0'} - '@aws-sdk/credential-provider-web-identity@3.972.69': - resolution: {integrity: sha512-RWNTKGXRkzMJe8bgIAdlz9q0N97m7fThD9KOjBt2CSY+/xnIbrA1/Dnm/ZEz8ZeQ1Of5D+fLaPeoD3lGt6AU4Q==} + '@aws-sdk/credential-provider-web-identity@3.972.72': + resolution: {integrity: sha512-nj9Zlsy7ya+fy+jhWTJwgfr7YdtDM4xHyZvgKuftuny0UgROVx9lxwvsWJSLvpKk4lig0m0tHng3k1fEnt0LeA==} engines: {node: '>=20.0.0'} - '@aws-sdk/middleware-sdk-s3@3.972.68': - resolution: {integrity: sha512-JA/LRxCSXQAsFHyIZzgncYdcTQTOL3ZS8R7EAeDwoSoWcNG8yxDAacrwFTZIyVSMvkogvlKHRvmrMU68UyQbkw==} + '@aws-sdk/middleware-sdk-s3@3.972.71': + resolution: {integrity: sha512-5fpExT7JOIZSIWExXCgJVbZzbaOlNrS/rE5Eoesnp0ONMbnCtiyYsCkahNIdlXtKrO6XHqXI6ceqssVWMYKmWQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/nested-clients@3.997.37': - resolution: {integrity: sha512-vfDmA6APjX1LWxvt6/zcAmTCgRXCj35M+bC9Ujmy40QxYs9Fa9bE7oblOB3ODZ4mdN9R5osU0hTzoJjJlQqqTg==} + '@aws-sdk/nested-clients@3.997.40': + resolution: {integrity: sha512-hEdHT0PBR4fkGxWhwKG5EtEYKnAM7HKkp0vD10ufk4YcXejH4r4q6G/XhPzjUc6Yxo5kBS2vHg7llj4ViR9VTQ==} engines: {node: '>=20.0.0'} - '@aws-sdk/signature-v4-multi-region@3.996.42': - resolution: {integrity: sha512-DBV4naZP6HYBlAvPpoQzOP12Wvfou/5rN8yJPXjBTBylU5qwCbh/tXr2MddHoIjgoRkEl/eS+IljiUqvmwey1Q==} + '@aws-sdk/signature-v4-multi-region@3.996.43': + resolution: {integrity: sha512-lKekx8bLBXSv4O+cslk9Zfnw2XKSkWBs3uWL5QGhH2ZAQfNS7FE0vcSSN2vD/AhxX54ZTywWxR4STThoeOXlBA==} engines: {node: '>=20.0.0'} - '@aws-sdk/token-providers@3.1097.0': - resolution: {integrity: sha512-EIsdmy/f5IGc5r01RjKWNvrbBra6z0xudQM0D6Wf8DeGuPoRlubkLqr7VgWijFucO4kg0mtev9H3RX/ZOubUhg==} + '@aws-sdk/token-providers@3.1102.0': + resolution: {integrity: sha512-Ua700vVvM1q105yABSUQWkCK6FeTrNfU6ORGetJe5BzkZWY7QhkF7SVTOlmDGWRDNd6jbyY0Dv5e+E4bMBEmLg==} engines: {node: '>=20.0.0'} '@aws-sdk/types@3.974.2': @@ -1734,8 +1728,8 @@ packages: '@babel/core': ^7.11.0 eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 - '@babel/generator@7.29.7': - resolution: {integrity: sha512-DkXD5OJQaAQIdZ1bt3UZdEnHAn9Imd3IVBdX03UFe+ony9Ojw5pzr9YVKGDY1jt+Gcn/FnGkNf8r+Vj5NOJWtQ==} + '@babel/generator@7.29.8': + resolution: {integrity: sha512-gZbepsdh3WDtgZKWL+vTPh71LSBrm/Y4/QDZBVCcYfmeTEEuoOYwlSy+G1StfJg+/Zy550u/3TATbm7qDbbMtg==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.29.7': @@ -1825,8 +1819,8 @@ packages: resolution: {integrity: sha512-1k2lAGRMfHTcwuNYcCNUmaUffmQv8KWMfh2iJUUeRlwlwH4FdNG7mfPI10NPfLHJFThE4Tyr4mv7kTNZOiPuBg==} engines: {node: '>=6.9.0'} - '@babel/parser@7.29.7': - resolution: {integrity: sha512-hnORnjP/1P/zFEndoeX+n+t1RwWRJiJpM/jO7FW32Kn9r5+sJB2JWOdYo4L6k78j15eCwY3Gm/7364B1EMwtNg==} + '@babel/parser@7.29.8': + resolution: {integrity: sha512-E8lTAYNB1KW+FH+VGJuZM1ioAx2E6oVlvQFRrf5P8ZZmsiJXYAD9vTFV7yyEURNzgh1dFqMZuO6tUwcARbqFCA==} engines: {node: '>=6.0.0'} hasBin: true @@ -2125,8 +2119,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.29.7': - resolution: {integrity: sha512-TM2ZcQLoG2/y4HODiStCo10DibYhWhGWAwVv+EQKmG/7GFl0N+AAmUiXOMKM+aiJ9XBJ9AHVZBvTzMnJ2sM3cQ==} + '@babel/plugin-transform-modules-systemjs@7.29.8': + resolution: {integrity: sha512-6iSnEK0zlkLKU4heofK/AdmRD4e2SHVpJMtrwnTCzhnaM98ria4rTrOXBBi45BTTYnJtO8txnPsX4fChYXkmeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2209,8 +2203,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.29.7': - resolution: {integrity: sha512-rNNFV0DBAJp988xW2DOntfDoYn1eR8GGF5AT5vYc+rjyfaQkM242c9tZUHHPe7KYaiJizXPWhQTzzdbXySyhBw==} + '@babel/plugin-transform-regenerator@7.29.8': + resolution: {integrity: sha512-0UpIXPtdDtMXfnV2OJAVMLpj3H/92vmkA6lpSRakmycJvj3VUy6Xs1dM8tXRugupykr5WB+LpiVl0J8LMVg2mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2233,8 +2227,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.29.7': - resolution: {integrity: sha512-/u5K1QWada7tbYNqTjMh96718g9NTwh9tfPJMsSmVsQwGT447FskV+KcfeXkXq2GWki4EM/MuTdmBec+hOuVTQ==} + '@babel/plugin-transform-spread@7.29.8': + resolution: {integrity: sha512-4S9ksMGVWUshvgK0mKfvZky7leuG5/uoFVwMpAomJ8bMoDJiNHRVmc1EglwW/CmGVSqqWpEbXm9FmbRit22qoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -2296,12 +2290,12 @@ packages: resolution: {integrity: sha512-puq+Gf35oI24FeN11LkoUQFqv9uwNeWpxXZi/Ji3rRIoKAzKnxRaZ+Gkj0vKS9ZCiTESfng1N9LyOyXvo+m+Gg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.29.7': - resolution: {integrity: sha512-EhlfNQtZ+NK22w5BM61ciuiq1m58ed33Wr1Xan//ZRTy6hgjnwyCffRYwzsGXdASJSUJ1guZILsErh1eQcl+zw==} + '@babel/traverse@7.29.8': + resolution: {integrity: sha512-I5z7H3bf/41ktsNVLtpN0wAa336HkqIHQ5BuPLEhTkt1jVSyZpeNKIzTgEWmlxjdg81R0IgUCcaE+Ok3NvrfZg==} engines: {node: '>=6.9.0'} - '@babel/types@7.29.7': - resolution: {integrity: sha512-4zBIxpPzowiZpusoFkyGVwakdRJUyuH5PxQ/PrqghfdFWWasvnCdPfQXHrenDai+gyLARulZjZowCOj6fjT4pA==} + '@babel/types@7.29.8': + resolution: {integrity: sha512-Vj1jF3cPfxg7OAfoI7QnVKLoILlm2JF9pnVHrX8qx7AHMiYWT+NDAA7jChlNgRS4WTLc/fD1lXLmPixluj+3Gg==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -2323,8 +2317,8 @@ packages: resolution: {integrity: sha512-gwg04KOYZUDdr5vgjRfGSdIVIPZ/Qfnyv0tG+9ihpZwVl7JxsJ9Rpg8olAtw1oy+LqjYZzc6cx0uaCFO3c/Skg==} engines: {node: '>=22.0.0'} - '@contentstack/cli-config@1.21.0': - resolution: {integrity: sha512-vxSuMf7qjAzxrAIkdsYX4YGDOxq1dlX0RMFwLbzMuEBINOuxGr6WsryXxeR/5QCkD1kb07qh2puq4FxBjPn4HQ==} + '@contentstack/cli-config@1.21.1': + resolution: {integrity: sha512-T7acgZVgIv2Q7rkSpuYqHHHJJ1RyS4tmaegQFAamQbUfrVOz/eYf3Oo3YXYDQn8lFPdmr5zHAbVykLZIp1PLBQ==} engines: {node: '>=22.0.0'} '@contentstack/cli-dev-dependencies@1.3.1': @@ -2335,14 +2329,14 @@ packages: engines: {node: '>=22.0.0'} hasBin: true - '@contentstack/cli-utilities@1.19.0': - resolution: {integrity: sha512-QkQ2KakgMLYt2oa7bov1RHb4N1YjJqGqGDkh3oiTfgN+c5FvqoyaRUrngQCjefat3GLd2MY2SOmgILcBCghTpw==} + '@contentstack/cli-utilities@1.19.1': + resolution: {integrity: sha512-gf7nWljHzsEIV+sOZra4pY3M5wojad2Iy3gPDFKl/F2VeH6GynGERVyz7hKjQgefBBitV6MGZKNIN+TVtR4gVA==} - '@contentstack/core@1.4.1': - resolution: {integrity: sha512-QfLa8WUwquWSwvF8EltLyzQTkeNE2I9b9PBkPe21w0d5PnHOagxFzDNCYN4VO/zuJ52sNtKLFIFUcvLsOPk9ww==} + '@contentstack/core@1.5.0': + resolution: {integrity: sha512-GTNjPYqi49EFpdGp+6UGdY55OoM48Rc7UyCUTYPdzcmrvYlmiL0JKqyozShEVaqrDMdaNBQZu8PRvRA7TpDVNA==} - '@contentstack/delivery-sdk@5.5.0': - resolution: {integrity: sha512-X6inqsDh0Bcz6YO3QhN+H7TPiZ9PNx31DsVOWP+w4T5ohPqM2EYh53rbl6gOXQG9JJ9ihpDzdoQRcM4ld2Vglw==} + '@contentstack/delivery-sdk@5.5.1': + resolution: {integrity: sha512-ZGsv0ibgaeV32uhu86+CdgNIDtXYQxqgL+0EXphyIs0KH0VK7KxCvGjgvrTV2ZVHcwLLUbKlNH8vIHgML/mj6w==} engines: {node: '>=18'} '@contentstack/json-rte-serializer@2.1.0': @@ -2352,8 +2346,8 @@ packages: resolution: {integrity: sha512-wFmHxf2WfPVXD8uvFpaxdY882ELqYhdPu1aQM9VM/UYUtJg+7uCj9k785ujYfgbSKgxfY6APgwI++n59v3Entg==} engines: {node: '>=8.0.0'} - '@contentstack/management@1.31.0': - resolution: {integrity: sha512-Ejk7ozH0lDxa0Ozniii2hsNLr8u0XfBRNHYmLw7DFQZDuRopaIxCb+Udn2O+uP/4ffKSYVv/RVu6/GhACdtWFg==} + '@contentstack/management@1.31.1': + resolution: {integrity: sha512-tl0Egw40B7DC+rpPDpGM4CU79m9lQKDtkHxtqEfwdC86K4b0xOUt2ZYwOlrwyr9ShE/QB8Q33abC1a9+1823uQ==} engines: {node: '>=8.0.0'} '@contentstack/marketplace-sdk@1.5.4': @@ -2415,21 +2409,12 @@ packages: '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} - '@emnapi/core@1.11.1': - resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==} - '@emnapi/runtime@1.10.0': resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==} - '@emnapi/runtime@1.11.1': - resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==} - '@emnapi/wasi-threads@1.2.1': resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==} - '@emnapi/wasi-threads@1.2.2': - resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==} - '@es-joy/jsdoccomment@0.50.2': resolution: {integrity: sha512-YAdE/IJSpwbOTiaURNCKECdAwqrJuFiZhylmesBcIRawtYKnBR2wxPhoIewMg+Yu+QuYvHfJNReWpoxGBKOChA==} engines: {node: '>=18'} @@ -2910,12 +2895,18 @@ packages: resolution: {integrity: sha512-TuB0x50EoAvEX/UEWITd8Mkn3WhiTjSvbTMCLj0BhsQEl5iUzjXdA0bETEVpTk+5TGTLR6QktI9H4hLviVeaAQ==} engines: {node: '>=v12.0.0'} - '@napi-rs/wasm-runtime@1.2.0': - resolution: {integrity: sha512-kDoONqMa+VnZ4vvvu/ZUurpJ4gkZU57e7g69qpNgWhYcZFPUHZM2CEMKm+cG6ufDVALbjMvfmMjFVqaK7uEMnA==} + '@napi-rs/lzma-linux-x64-gnu@1.5.1': + resolution: {integrity: sha512-oTXEIha4SsuXdTA4Iyskj0kpdx2yVXdhd75c2v3xGrHFfVMsbhTPZU/nMPL4sWKo4pBHm3aucLaqGlF696dTyQ==} + engines: {node: ^22.20 || ^24.12 || >=25} + cpu: [x64] + os: [linux] + + '@napi-rs/wasm-runtime@1.2.2': + resolution: {integrity: sha512-JfB4kuJQjaoHuCTseIINHtHWeJnvgEcxjwA5t/Y00ZgaOO1Crz3fjT/p8kT28zA/Caz7oiUMn3d6H2yOVCVwuw==} engines: {node: ^20.19.0 || ^22.13.0 || >=23.5.0} peerDependencies: - '@emnapi/core': ^2.0.0-alpha.3 - '@emnapi/runtime': ^2.0.0-alpha.3 + '@emnapi/core': ^1.7.1 || ^2.0.0-alpha.3 + '@emnapi/runtime': ^1.7.1 || ^2.0.0-alpha.3 '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -2944,23 +2935,23 @@ packages: resolution: {integrity: sha512-Fg93aNFvXzBq5L7ztVHFP2nYwWU1oTCq48G0TjF/qC1UN36KWa2H5Hsm72kERd5x/sjy2M2Tn4kDEorUlpXOlw==} engines: {node: '>=18.0.0'} - '@oclif/core@4.13.2': - resolution: {integrity: sha512-YWQs0JvESCliWopKtCZqPLgEB1e3oqR+KYecMReseYWbo7E73Rz2tFwQDFQtAp48VLMiAsiTPKKQaZAo+ghzLw==} + '@oclif/core@4.13.3': + resolution: {integrity: sha512-wBp2igI2KVwq2ZmpnfmGtOROo7aXZIr3OEtAS16g1wHFBqyEuswL+9K50NJWJvlpAmxd+4dVj/ycawXESU3wQQ==} engines: {node: '>=18.0.0'} '@oclif/linewrap@1.0.0': resolution: {integrity: sha512-Ups2dShK52xXa8w6iBWLgcjPJWjais6KPJQq3gQ/88AY6BXoTX+MIGFPrWQO1KLMiQfoTpcLnUwloN4brrVUHw==} - '@oclif/plugin-help@6.2.55': - resolution: {integrity: sha512-IamFqLPoD8KTZbGSAu24EFe2kNibMrL/WA8+4EvnbdkYqZGUcizVqeXUIxzns3SES99wgqOtsK3DtLB3V3kIJQ==} + '@oclif/plugin-help@6.2.56': + resolution: {integrity: sha512-0LkCjFGRGY7AaZb5p8gDcSPNkFrn+vNLKvGe1f7j/Z6U9Uy1cV6R2eWVsjuZTGQ3RvBvjquFPwLy1jTgR5l87w==} engines: {node: '>=18.0.0'} - '@oclif/plugin-not-found@3.2.90': - resolution: {integrity: sha512-fkt81o7n2ciXTWxx/rfgO2rbZehHMfs5evLJgSOYF8ziEx+mTOz8Ci/kPfytYOwTbMe57qIbGpPbQeYMjQGEKQ==} + '@oclif/plugin-not-found@3.2.91': + resolution: {integrity: sha512-ICFrUeotKD3gsBOZR5mrgz2y1QDPM/C6hcu1i2tFjfW7AVnKINvsgANFou0ObLJGkslNS+6uX+1qcny37vJcyg==} engines: {node: '>=18.0.0'} - '@oclif/plugin-warn-if-update-available@3.1.70': - resolution: {integrity: sha512-rmgljRATcqu3OFstilpra0DHUbUXO4IsV5l1kC9j3PERn1y9X4EQ+EmI7bK21QVjzQbaIYcUNQ8TYEHGstL5iA==} + '@oclif/plugin-warn-if-update-available@3.1.71': + resolution: {integrity: sha512-oEw6vtA55w82CkSX9PyVC3V7Ac4UAIlMMUcc8ACOTeOTm7wwg+p5+HjiYozNOV+W7UU3VZy4jzOV1ap8Osdnyw==} engines: {node: '>=18.0.0'} '@oclif/screen@1.0.4': @@ -3001,8 +2992,8 @@ packages: '@otplib/preset-v11@12.0.1': resolution: {integrity: sha512-9hSetMI7ECqbFiKICrNa4w70deTUfArtwXykPUvSHWOdzOlfa9ajglu7mNCntlvxycTiOAXkQGwjQCzzDEMRMg==} - '@oxc-project/types@0.139.0': - resolution: {integrity: sha512-r9gHphtCs+1M7J0pw6Sn/hh/Wpa/iQrOOkrNAlVLF/gHq+/CJmHIWKKUUhdWjcD6CIa8idarspCsASiXCXvFUw==} + '@oxc-project/types@0.142.0': + resolution: {integrity: sha512-7W+2q5AKQVU36fkaryontrHn3YDt1RyUYXatw9i5H8ocYe2sPKSFB6eS8WNPeRKiN1qAWWZUPm7gwFzJGrccqQ==} '@pkgjs/parseargs@0.11.0': resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} @@ -3028,91 +3019,86 @@ packages: resolution: {integrity: sha512-pmNVGuooS30Mm7YbZd5T7E5zYVO6D5Ct91sn4T39mUvMUc3sCGridcnhAufL1/Bz2QzAtzEn0agNrdk3+5yWzw==} hasBin: true - '@rolldown/binding-android-arm64@1.1.5': - resolution: {integrity: sha512-lZg8fqIv2v7FF237bwMgzGZEJvGL79/s5knJ/i6FmsGF4XXlzccZ4jb+TrFIxtSSxFtIpdsgrPZeMk1I9AFcyQ==} + '@rolldown/binding-android-arm64@1.2.2': + resolution: {integrity: sha512-l7x215OGvo1s52JWmR8U/DAVzEDWBCIbTm28aeJV/WDTSHgcKXaZTuBT0hJMs5NggilfJTW3clZVvd24yfKJxA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [android] - '@rolldown/binding-darwin-arm64@1.1.5': - resolution: {integrity: sha512-51Bnx9pNiMRKSUNtBfySkNJ9vMU9Hh3I1ozDd6gyPPYzaXCfnptUcEZxXGYFn+ul2dtcMUiqGR1Yai2K10uoTw==} + '@rolldown/binding-darwin-arm64@1.2.2': + resolution: {integrity: sha512-9u9Xv6c1AJZT0FfwH5vrMG5Jjcwhc1MlyrPu0XfTqkzsmqfks2M6W/o5XwAJgVVN/jHpqqngC1WevHKKTIUtIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [darwin] - '@rolldown/binding-darwin-x64@1.1.5': - resolution: {integrity: sha512-Tm+gbfC0aHu1tBA/JvKQh32S0K6YgCHkiAF4/W6xX0K0RmNuc94VeK419dJoE65R5aRxmo+noZQSWrAMF6yb6g==} + '@rolldown/binding-darwin-x64@1.2.2': + resolution: {integrity: sha512-9W1mbGZAfW3oqd85bhBkmpyHCCzL1TeG/zFFP3vg7b0rlly8cxOcre5nXwz+LHazCwac2MNWgPdPCHndABjpWQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [darwin] - '@rolldown/binding-freebsd-x64@1.1.5': - resolution: {integrity: sha512-JMzDKCCXq93YccG5gz3hvOs1oXRKAf0XYpfOS88e+wZrC8Iugj6j68867vrYZkvpDDpKn/KoKORThmchMpF6TA==} + '@rolldown/binding-freebsd-x64@1.2.2': + resolution: {integrity: sha512-0p1lhiCSCyaerFwtrdZQUx7NqGk6LQnaRKWX7tFQqwQgvX0rjM15cIkm3pax1UpEakK14C4mOxx/jSqCBdBRqQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [freebsd] - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': - resolution: {integrity: sha512-uML21j2K5TfPGutKxub+M+nLjZIrWjXQ5Grx4lCe/nimTj9B4L63zHpjXLl4y0L3mcm2htEQIb06oCG/szerNw==} + '@rolldown/binding-linux-arm-gnueabihf@1.2.2': + resolution: {integrity: sha512-e+cOJXrJ2L3zx6YzqPg+f6Wbk3V1cKB8bOhbaYdVYN3DdquzNdRAmrbETz1qnt5yp/c7JNlNjmITiA2cVneQ7w==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm] os: [linux] - '@rolldown/binding-linux-arm64-gnu@1.1.5': - resolution: {integrity: sha512-navSiuTMogvnQoZoM/v+l3ZWo50/NTwSHSzheABx/RCnmUPaKwq9qSo4Br2OYRs21+Fz8uFqITZM3H4opOB0/Q==} + '@rolldown/binding-linux-arm64-gnu@1.2.2': + resolution: {integrity: sha512-JsSMsj6sNat/MuhG5fnBD7QgbtpHKVe30x5/bAVirDHdhoQRXJkF6xc0Jqk8O4fiCUQAzMOoH9wZi3m60c8wtg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-arm64-musl@1.1.5': - resolution: {integrity: sha512-lAryqH7IteztmCXQXk0etKj4wBQ7Gx5S6LjKhsgp9zb8I5bsuvU/2llH1hDQcjsFeqIsovMVN339/8pUDDBXxA==} + '@rolldown/binding-linux-arm64-musl@1.2.2': + resolution: {integrity: sha512-B5G/zJdHaoJn9vD50eGHWkiWfmq8Uhi3IiLPJTzmZTrAalk1bztUikSXo0qga18ibE0IXboyeMUnhPjhAJ45wQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - '@rolldown/binding-linux-ppc64-gnu@1.1.5': - resolution: {integrity: sha512-fsK/sNBnxzBlL4O1JNrZakVQxPspqpED5dLtNsZS9oOKmtSpdNIzxH2kkol5HYTWJN47sE20ztMJPxfZ89qGOg==} + '@rolldown/binding-linux-ppc64-gnu@1.2.2': + resolution: {integrity: sha512-6mC/awzKka8W6EoekjegpfGkjz8jXWDX63pqu/HYVpyKtZfu65Jsh4QAH3Kej3CAv/c1oGX7psTmFEbr0mDxLA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - '@rolldown/binding-linux-s390x-gnu@1.1.5': - resolution: {integrity: sha512-gLYb4BIadlfTOYT5gO503n8zQjXflgzpD0FcyKh0Mzx3rqCZKnHoJWV9xe1KXUJ5lx2JfcSHr/mhzS0PC/McAA==} + '@rolldown/binding-linux-s390x-gnu@1.2.2': + resolution: {integrity: sha512-412MX9fJLdA1IK28EZnc8jYv2HRTleOZgfLQumJ5zy7OeJLZlg/CETwFaXjNmGVxG51cFHpKLqb5LKvBC+HsHA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - '@rolldown/binding-linux-x64-gnu@1.1.5': - resolution: {integrity: sha512-FjcpEKUyJygHgs1o50VYNvkt5+7Le/VEdYt0AkRpkL33MnyQfwr8l5mXwMmfmTbyMPr5vJLC+8/Gd9gXnwU1QQ==} + '@rolldown/binding-linux-x64-gnu@1.2.2': + resolution: {integrity: sha512-Q/+HI/ToJafZ1iCqGgVQXUEkIjufHCTF0gBQ2a5o3cg7GJ2h0qyq3nvvSmU+bGda2/7ygXpTY4TM6gO9OhQ0ZA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-linux-x64-musl@1.1.5': - resolution: {integrity: sha512-Me+PfPI2TMeOQk0gYWfLQZtTktrmzbr8cDboqX83XKc7UrgAi55gF+2dUkWdxd19n55Essp2yeca+O9N5rBxHg==} + '@rolldown/binding-linux-x64-musl@1.2.2': + resolution: {integrity: sha512-ZKp/w41n6wCvxzxQHtQSbuphfX3Y4cCvbjkKHusrLx4lh+JWLTU7StSltO/DKARISzbj368d+qUaCjI8K2wzXw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - '@rolldown/binding-openharmony-arm64@1.1.5': - resolution: {integrity: sha512-yc5WrLzXks6zCQfn9Oxr8pORKyl/pF+QjHmW/Qx3qu0oyrrNC+y2JLTU1E2rcWYAmzlnqngWXHQjy51VzW70Vw==} + '@rolldown/binding-openharmony-arm64@1.2.2': + resolution: {integrity: sha512-pxE6xD4KS3eAROkKK5yrhB9/3+vhlhVGMvlQLbdpzrBGDbKrnzx3RLwPaHvasLo6jgaiBLn7e04Df9C4tYhjmA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [openharmony] - '@rolldown/binding-wasm32-wasi@1.1.5': - resolution: {integrity: sha512-VbQGPX2b4r48TAMIM2cjgluIM1HYutm4pcTEJsle7iEP7sB1dFqtPLBVbdLAZCxy1txCcPxf4QFf4v8uvltPqA==} - engines: {node: ^20.19.0 || >=22.12.0} - cpu: [wasm32] - - '@rolldown/binding-win32-arm64-msvc@1.1.5': - resolution: {integrity: sha512-gHv82k63z4qpV5+Q1y/12KrK0ltWBukVDI8nZcbT7Tt/ZlOIVwppazneq0F93oDxTo3IgAMEDIoQh3E2n6mVsw==} + '@rolldown/binding-win32-arm64-msvc@1.2.2': + resolution: {integrity: sha512-4MqEue5re+xIZzAWsB8sj0P1kqZySWqIuN4t6QaIO/YA6SFwySOLruvWQFzfmqk8LBK2P30KCSJwf6mJCZZ5/A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [win32] - '@rolldown/binding-win32-x64-msvc@1.1.5': - resolution: {integrity: sha512-tTZuDBPw85tEN5PQi1pnEBzDy0Z49HtScLAbD5t6hyeU92A95pRWaSMw1GZZi/RwgSgUIl0xrSlXIT/9QzvYSA==} + '@rolldown/binding-win32-x64-msvc@1.2.2': + resolution: {integrity: sha512-NweNxxD0Nf9t8v7kodun45Ijp3EIwYY+uydPP6qBEYvfBqhIjN6dZMzlQja3tqX/aLs3F3Uz+AxDpKgRhpOZQg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [win32] @@ -3169,128 +3155,128 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.62.3': - resolution: {integrity: sha512-c0wdcekXtQvvn5Tsrk/+op/gUArrbWaFduBnTLP2l1cKLSQs4diMWjJw3m6A0DdzT8dAAX95KpkJ3qynCePbmw==} + '@rollup/rollup-android-arm-eabi@4.62.4': + resolution: {integrity: sha512-RrPokAb7dmbxFoeO3TloqHyOjgye8RkBhSqmp4aJMIex4c9r46ZstPnleDQOq1t46VOVjwIuwNogIqbodV1Vvg==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.62.3': - resolution: {integrity: sha512-3YjElDdWN+qXAFbJ/CzPV+0wspLqh54k/I6GfdYtEJRqg7buSgc1yPM3B+93j1M4neobtkATHZTmxK2AMVGfnA==} + '@rollup/rollup-android-arm64@4.62.4': + resolution: {integrity: sha512-JKuJc+pnpks2pjy7L/N3v/cAkZxYlnmuZoD840ldbMI5KDbC4iO9NKwPKYdjYFCMAIIlBzYSFHxIJVYzRo2/8A==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.62.3': - resolution: {integrity: sha512-Pch2pFNOxxz1hTjypIdPyRTR6riiwRl84+VcN9djS680fw+Co1nAJINrdpqp7KV0NvyuU8ilZXZCjd7ykJl1GQ==} + '@rollup/rollup-darwin-arm64@4.62.4': + resolution: {integrity: sha512-krw5uS2STmvJ02x0uTXHbqQNuz+9eZ1iw+qXk9dmW2gvV4jV7O2hEoOnuhFrpOPiel1mBFtqbxYZZtC46hXLOw==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.62.3': - resolution: {integrity: sha512-LEuncFUHFiF8t4yZVZvvZA1wk0pjAscRnsrn1EfTEmN4HXotBi2YtcnLRyaK6UbuczW7xZS5ES+81Rdz8Z0T6g==} + '@rollup/rollup-darwin-x64@4.62.4': + resolution: {integrity: sha512-wsTxtgApb4PrOsNJIm0FZ1h3WvCC+k9uxLJ4ad75hgoS4NiRes2SoJFlDAyMwiUY8IssDqGcHbXuN0sx1tfF1A==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.62.3': - resolution: {integrity: sha512-zvBUvsQUpOWALdDsk6qbS8bXf2VxmPisuudNDrY7x0p0jBdsoZl8HsHczIOgkQiZldmcacMKtBzpoGVNeIe2bQ==} + '@rollup/rollup-freebsd-arm64@4.62.4': + resolution: {integrity: sha512-GUOnQlyZe3yAXhWOtOMsn5Qkrv5E5mZXa0thbARWi5Ei2szlVXJFQhddZ4HbAzh8q92w5twp+CQvs/eFanz9YQ==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.62.3': - resolution: {integrity: sha512-C2KmNrcSem/AMg984H/dev+si0lieQGdXdR/lYGJnuumXnFb9Y7QdiI62obFdLlxRYLBv4P0eUVIDbD4c1vVvw==} + '@rollup/rollup-freebsd-x64@4.62.4': + resolution: {integrity: sha512-/Y7f3QuxjzPKsjA/rfEDa3+0vXqyjmJ50Ln8dPpCmWkKTrUoWHG1cWhTqaAMLob2m2nESWuC7yGrREz019Ztqg==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.62.3': - resolution: {integrity: sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==} + '@rollup/rollup-linux-arm-gnueabihf@4.62.4': + resolution: {integrity: sha512-81wiiX3v7aqy+T+bT61TJ78yJjRquqFFTTbAPt08imfQQzkPIW8t6aJbkTagtCCrXMNc9D66+geqlK7ydLPNqA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.62.3': - resolution: {integrity: sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==} + '@rollup/rollup-linux-arm-musleabihf@4.62.4': + resolution: {integrity: sha512-9kmDIvNZqdoHOBZgNtpTBeLWYO/LVipM3H/j62P8848/l/VPEQL6N3uxU9pvP1oZAsXyC2MEnFP3ovRjo7WYNQ==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.62.3': - resolution: {integrity: sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==} + '@rollup/rollup-linux-arm64-gnu@4.62.4': + resolution: {integrity: sha512-CcnXHWnXg69g+DX5VWL3FHts3qMRN2uVEHX+BZvGLdd07/gXkn3ePjYtO1LDJvxkGKVHMclKBRa1QUTH+6toYQ==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.62.3': - resolution: {integrity: sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==} + '@rollup/rollup-linux-arm64-musl@4.62.4': + resolution: {integrity: sha512-iFOibiHnTRuhrWLlRsOQFdZJJIa7S8OwkneJr4ocALP16u5yk6lWLINFwhHaEqBFMsKDUZofLkGos7+CPzGB3g==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loong64-gnu@4.62.3': - resolution: {integrity: sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==} + '@rollup/rollup-linux-loong64-gnu@4.62.4': + resolution: {integrity: sha512-XnWYMI7euHlb5a871xPja+Gm7DRCFU+FGRrtS2sMq9N8FvqtpagUy6gD4YOemC5MRk9xbh8+jYMEJbigFQwsgA==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-loong64-musl@4.62.3': - resolution: {integrity: sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==} + '@rollup/rollup-linux-loong64-musl@4.62.4': + resolution: {integrity: sha512-qGDAlO0U8xedCcsdRm9oaoQY8DAx/QT7uIxJWhCdx0ceIWX783UC9QSYkdpzAe29wNiVfp24+bZdQmn49o45SQ==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-ppc64-gnu@4.62.3': - resolution: {integrity: sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==} + '@rollup/rollup-linux-ppc64-gnu@4.62.4': + resolution: {integrity: sha512-ru4H6ezD7ysA5EiEK6qkkaEb4modH8CTej6kUy/gQi20u3kB3G7Zn8snXXkeJSCOFKG/rbPPtM/+9Wgas1961w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-ppc64-musl@4.62.3': - resolution: {integrity: sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==} + '@rollup/rollup-linux-ppc64-musl@4.62.4': + resolution: {integrity: sha512-2W4MO5WQVJnbJaZdvDb9rhBDuFU1nKIepPFpJUBsTh2k1YY2g+ODViaWuyOAjQ5cOP7NvrvLzt3wvHOoiAvc7w==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.62.3': - resolution: {integrity: sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==} + '@rollup/rollup-linux-riscv64-gnu@4.62.4': + resolution: {integrity: sha512-+fxjfuoAmVMCYV5QyjoIpu0cp5DOiOTeqYFk1AVaxGr+/ravWLX89XfQmptsoWcaVy/TGf2hexzbUOrCQIL1CQ==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-riscv64-musl@4.62.3': - resolution: {integrity: sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==} + '@rollup/rollup-linux-riscv64-musl@4.62.4': + resolution: {integrity: sha512-jTn8JfHGL4djjFxPuM06LmNUJDsst2jeVlsd9OmIH6zc5sC9K6rIuO4YajXatLUpBmBKl6b35ro1QZocLi+tcA==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.62.3': - resolution: {integrity: sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==} + '@rollup/rollup-linux-s390x-gnu@4.62.4': + resolution: {integrity: sha512-oCJCJL4pXsoDcP2QZ+JVlPTIRc6266zsIaeJJsWImmF7HO0W8nb6HuSgZlMWxJwaPf8ehbSw8yo0EUw925hKsA==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.62.3': - resolution: {integrity: sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==} + '@rollup/rollup-linux-x64-gnu@4.62.4': + resolution: {integrity: sha512-W69hukhZ3KKNRCaMIEzKvcFye42hh0FE1+YoYaf5+Ikacuftoco6yO/xouz0hc5d5W/s3yBro5jRiuEE/Q5vUw==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.62.3': - resolution: {integrity: sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==} + '@rollup/rollup-linux-x64-musl@4.62.4': + resolution: {integrity: sha512-qiXbGG2jkjXhzXpsFZSR2Xpb8DN/UaxYsbb/STbuR/6fpaDgRmmaq1B/LmtF2wQFOFOSsK2jdE0RZ3a0zHn4QA==} cpu: [x64] os: [linux] - '@rollup/rollup-openbsd-x64@4.62.3': - resolution: {integrity: sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==} + '@rollup/rollup-openbsd-x64@4.62.4': + resolution: {integrity: sha512-nWeM//hxv8mIo6jD7Hu4o48DVmV9pbV6gsKaWU+4NFyqHoPKwrkRiZGLKUhOBk8qNmDmpwFtPKg80Bo/Tn4xiQ==} cpu: [x64] os: [openbsd] - '@rollup/rollup-openharmony-arm64@4.62.3': - resolution: {integrity: sha512-+2Cy/ldweGBLlPIKsQLF8U5N44a0KDdbrk1rAjHOM9M2K+kGdIVjHLmmrZIcx+9Ny3ke/1JomCsDI1ocb11+sg==} + '@rollup/rollup-openharmony-arm64@4.62.4': + resolution: {integrity: sha512-s62SQ/vgsRSvMwDkOEfTqfgASF0f26ZNaQuTA6Aok5lrikf89yI2W0gFHvZb2Jpgc6N8JnOKZgCK2iciO3CsxQ==} cpu: [arm64] os: [openharmony] - '@rollup/rollup-win32-arm64-msvc@4.62.3': - resolution: {integrity: sha512-dtZvzc8BedpSaFNy75x6uiWwAGTH+aZHDtdrqP6qk+WcLJrfti6sGje1ZJ9UxyzDLF23d/mV+PaMwuC0hL7UVA==} + '@rollup/rollup-win32-arm64-msvc@4.62.4': + resolution: {integrity: sha512-J6wGf8TVGbXJq+HH+ttTvrcfNKPbuZecV6KT1B8I18BC5IURUh5kl4Yl5OEP5eFIUoI5BWxCsyYMhFsDx8kekw==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.62.3': - resolution: {integrity: sha512-Rj8Ra4noo+aYy7sKBggCx0407mws34kAb1ySyWuq5DAtFBQdkSwnsjCgPrhPe9cvgBKZIukpE+CVHvORCS93kQ==} + '@rollup/rollup-win32-ia32-msvc@4.62.4': + resolution: {integrity: sha512-zmfrQd/0wu6oJs8Vq8KwY/YtsKSsLtKe/HwAP4Wqy8LhWjeT55fHRAkOhYQ12wI3ayS4Tt12d5CDRD7N96SAYQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-gnu@4.62.3': - resolution: {integrity: sha512-vp7N084ew/odXn2gi/mzm9mUkQu9l6AiN6dt4IeUM2Uvm9o+cVmP+YkqbMOteLbiGgqBBlJZjIMYVCfOOIVbVQ==} + '@rollup/rollup-win32-x64-gnu@4.62.4': + resolution: {integrity: sha512-qPzHqdj9rfUD+w79dtE07zi/kFwKyCJqplp5K5ygeLTp7jLpAoc16OAH39HSmRC9UpozaecsleI8uAdEj6v2yw==} cpu: [x64] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.62.3': - resolution: {integrity: sha512-MOG/3gTOn4Fwf574RVOaY61I5o6P90legkFADiTyn1hyjNydT+cerU2rLUwPdZkKKyJ+iT+K9p7WXK4LM1Ka6g==} + '@rollup/rollup-win32-x64-msvc@4.62.4': + resolution: {integrity: sha512-zD6NdeWEByGE9QF9vCrlJ5YQB4oq9q91kPZS37Jwj5hOkvR1lTBSpsKhKDw4IJtbQ35LsTS1HD9DZYGKIshU1Q==} cpu: [x64] os: [win32] @@ -3354,24 +3340,24 @@ packages: Deprecated: no longer maintained and no longer used by Sinon packages. See https://github.com/sinonjs/nise/issues/243 for replacement details. - '@smithy/core@3.31.0': - resolution: {integrity: sha512-sylYk2l9d7CmRv8ts8p0SDQUr3VO+HMeS1nrjL6+UtbO8ktJHTOeQ1McX+aAyvGGccp5aZX9eNtdcXrSwzoZaw==} + '@smithy/core@3.31.1': + resolution: {integrity: sha512-CyogUINxvi7C7LDsh8Syo6hVJOT9ckz4rG8dRZfTJ8r91HkMY59PnNooaj7WcHyxEkxPfBAmbgztZU+xTo76lg==} engines: {node: '>=18.0.0'} - '@smithy/credential-provider-imds@4.4.15': - resolution: {integrity: sha512-xYVGrisQqTJWhOnScUhbx8s9H63TMtoxzuUoxG6mP8J+B/YbX3vZxVsgV0xDf43abJnJP0fjP7BkQh7OESwuRA==} + '@smithy/credential-provider-imds@4.4.16': + resolution: {integrity: sha512-QfuLWAkLzptffFW980AFeHZFdqds2B64rpEd3uJ6lgs3xVn9QegGMUgUcj+4d7dRrAsya3r58ZKpku97WcFb4w==} engines: {node: '>=18.0.0'} - '@smithy/fetch-http-handler@5.6.12': - resolution: {integrity: sha512-OpQgP6IGH4j0NJ2zjfYZLjQL85ai+Wi/q51EmZJovXsEwKSvu89qiXUq77Q6EmwZ/hSl7fKpn2Z9mhiDN6OM+Q==} + '@smithy/fetch-http-handler@5.6.13': + resolution: {integrity: sha512-4fW86pEUOMbrD5nkbyl/tTvPHHWJFbuB2odl6ps9lWfHoXf9HWh3Q/Smh59qH1g7+c/BSZghX6bbUk4gsiMs8A==} engines: {node: '>=18.0.0'} - '@smithy/node-http-handler@4.9.12': - resolution: {integrity: sha512-dWW5KRt4mnEvjNzbGqGeCuAvgum85Y9ZoyuMQqcTEfapndyVJ1k9BEHK7kdXJZ32enyRmmwcFjMwlB/KgLKI3Q==} + '@smithy/node-http-handler@4.9.13': + resolution: {integrity: sha512-Nmd/Nl35zfYrd+a6OO2cDJb3GPh9bgTjIUhcM+JFfjpp8/osCgboDV5nCT1I01Pv6R13eSKDKLSoVa5ZB6Zsfw==} engines: {node: '>=18.0.0'} - '@smithy/signature-v4@5.6.11': - resolution: {integrity: sha512-7HsspeiNCZvZHEJ22vV5L/QYuJdTyJvPJvMrYD3AgkM3IJB0pkln4jkjPvtpTWRMkHXbO8WKwNjoVdVlBFwHmw==} + '@smithy/signature-v4@5.6.12': + resolution: {integrity: sha512-I6KLtq3H0qqSuV9vLglfi8puHqzygzWHOnI4z/Rdoo+q50vvo18vBRdPAvvEtcaKROz7Zn6qnPa14kRfPH6PcQ==} engines: {node: '>=18.0.0'} '@smithy/types@4.16.1': @@ -3473,15 +3459,9 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} - '@types/git-diff@2.0.7': - resolution: {integrity: sha512-hipFAUcmf3c+45+Y8+J/xk7gT+0HBuT3O8OTtrnoP6R9gI0r2xESZNdYiA0pj7kQyPCwmkgbnxmfwQ9Ld2lZLQ==} - '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} - '@types/hogan.js@3.0.5': - resolution: {integrity: sha512-/uRaY3HGPWyLqOyhgvW9Aa43BNnLZrNeQxl2p8wqId4UHMfPKolSB+U7BlZyO1ng7MkLnyEAItsBzCG0SDhqrA==} - '@types/http-cache-semantics@4.2.0': resolution: {integrity: sha512-L3LgimLHXtGkWikKnsPg0/VFx9OGZaC+eN1u4r+OB1XRqH3meBIAVC2zr1WdMH+RHmnRkqliQAOHNJ/E0j/e0Q==} @@ -3527,8 +3507,8 @@ packages: '@types/linkify-it@5.0.0': resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} - '@types/lodash@4.17.24': - resolution: {integrity: sha512-gIW7lQLZbue7lRSWEFql49QJJWThrTFFeIMJdp3eH4tKoxm1OvEPg02rm4wCCSHS0cL3/Fizimb35b7k8atwsQ==} + '@types/lodash@4.17.25': + resolution: {integrity: sha512-+K1NIO8I+F9/wNulfVvu23QYd0Pe9/OCqRrim4NoYIf1VoEDL90Ve4ClzpyqBLc7NpGGWRvYNCKZ1BE/Jpf8dQ==} '@types/markdown-it@14.1.2': resolution: {integrity: sha512-promo4eFwuiW+TfGxhi+0x3czqTYJkG8qB17ZUJiVF10Xm7NLVRSLUsfRTU/6h1e24VvRnXCx+hG7li58lkzog==} @@ -3581,8 +3561,8 @@ packages: '@types/safe-regex@1.1.6': resolution: {integrity: sha512-CQ/uPB9fLOPKwDsrTeVbNIkwfUthTWOx0l6uIGwVFjZxv7e68pCW5gtTYFzdJi3EBJp8h8zYhJbTasAbX7gEMQ==} - '@types/semver@7.7.1': - resolution: {integrity: sha512-FmgJfu+MOcQ370SD0ev7EI8TlCAfKYU+B4m5T3yXc1CiRN94g/SZPtsCkk506aUDtlMnFZvasDwHHUcZUEaYuA==} + '@types/semver@7.8.0': + resolution: {integrity: sha512-1mAINjtQCXXeLkJ9ehXkwOcBpqtLxiVtKhpUf83DdRNdQKV0iXZpaHYqRr7nj+wvxuJzoAmAwXI+sCNMv1CzLQ==} '@types/send@0.17.6': resolution: {integrity: sha512-Uqt8rPBE8SY0RK8JB1EzVOIZ32uqy8HwdxCnoCOsYrvnswqmFZ/k+9Ikidlk/ImhsdvBsloHbAlewb2IEBV/Og==} @@ -3667,11 +3647,11 @@ packages: typescript: optional: true - '@typescript-eslint/eslint-plugin@8.65.0': - resolution: {integrity: sha512-IEgob78X12rHpUmtcwFsXhZdVGJtwTVP8FiCLZkR6GlYVrl2PcuB+KhCE5BlVC/eQpQnu8WXRtkHZuPar+gCRA==} + '@typescript-eslint/eslint-plugin@8.66.0': + resolution: {integrity: sha512-p088eaGrzYz1s+7cov0aMOCkNGTJlVxF4jgubf28c8L0Cv9Rloj8YBHnv4hXLq6IIEE1AsjNWavO+k+8kP2Y0A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^8.65.0 + '@typescript-eslint/parser': ^8.66.0 eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' @@ -3685,15 +3665,15 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.65.0': - resolution: {integrity: sha512-CZ4nMxWwgu1HEEFNkeaCptra9QCtkmKdgf3sWh1rl1trIhmxLilgTV4cwcbQ4wemnT4sWQN8CaKOmdYx+g2gMA==} + '@typescript-eslint/parser@8.66.0': + resolution: {integrity: sha512-X6ypGChaWYk6PBtUg2BwuTZEFFcHJAtGTVJ9/lCTOufhZ4i9fNolQNnktq+kkMCwMj7V8Svsq7+TxSDslmhE0g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 typescript: '>=4.8.4 <6.1.0' - '@typescript-eslint/project-service@8.65.0': - resolution: {integrity: sha512-SxnPhbTsGahizDgbu7oqFH/xVtzIqMd/s+WtnSxNxJZJpLbdT5IPdzg8EZxO3+PoKahXmwJLeNQOpKJb3/bi7Q==} + '@typescript-eslint/project-service@8.66.0': + resolution: {integrity: sha512-7MthGPTt4BP69lSryqpqq8HQqxuzynssckL/jyDyk3+TNMQ3y2jFWkptCrktWvBrP+EH787Nl5N5Qpw7WZg+5g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' @@ -3710,12 +3690,12 @@ packages: resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/scope-manager@8.65.0': - resolution: {integrity: sha512-Esbl8OSYiVxBokYgWPf7VVWg/BE798wXhimnn9ML9Pt5qoDf8bfQlgjlKXR/k98+AcNzlLKYrpCcrcuZ9DZLgg==} + '@typescript-eslint/scope-manager@8.66.0': + resolution: {integrity: sha512-8TGcH25j9zqJ/IULB/ppyhRvxA8QYfFEZ7nfbg6/BN9spDgb8fPWQXlE5l8TWBL50EtUx007uZ1o9VOwrq2/9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/tsconfig-utils@8.65.0': - resolution: {integrity: sha512-j6GzGqCiRdA7Qhur2VVmKZAkBLfnHFQfx4TaJGL9RMveZqCo48jSHHO0DTgizEnGhtWnqmbtCUSrqSkdiY/0Hg==} + '@typescript-eslint/tsconfig-utils@8.66.0': + resolution: {integrity: sha512-9D5gLYZG4rOjcoag8MQ/fWI8WqA9wcPDyOGyWtWFhvM1lHRbliqUSPIY5J3zqCU1tvSwzXxnnjhQhz5Ne7mJ4g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' @@ -3740,8 +3720,8 @@ packages: typescript: optional: true - '@typescript-eslint/type-utils@8.65.0': - resolution: {integrity: sha512-YjaZ7PRI5qY7ax2L3PbvX0rRyGtipAReCWs0mhhDBHjH/vl0g0BonaGXrKdKpMbIIsMIwDgbk/xzkBTyAltS5g==} + '@typescript-eslint/type-utils@8.66.0': + resolution: {integrity: sha512-LG2dWfjZQQp0ADtAu/EWJVayefGL2UEZ3CDeI44D9v3rXB/WYUqE/jpO28KrEKul5AySrmI+Zh1v6v+xW2U9+g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3759,8 +3739,8 @@ packages: resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@8.65.0': - resolution: {integrity: sha512-JSSwWNy+H0E/01jJEM+hrX6N0OFDzFzeIhHFSAS01tlVaevpG8cFyYRPhS5yjGOvBUx3sqQHVMjCL1CAZZMxBg==} + '@typescript-eslint/types@8.66.0': + resolution: {integrity: sha512-H6gcYaSDOyvL3AD/jHUtUFo2jqGgn/F6nuyuZSu0QTesxL+cP4dQoIMrODRofuJC09g64+WgZ6tE19Y1N2YIFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': @@ -3790,8 +3770,8 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@8.65.0': - resolution: {integrity: sha512-JboAE2swaYt4tb1fHhHTABE2K+OLy09XfcTbhnk4Pw96f9dd2e9iYsJ28gBggHlo5z5x1rkyWvcPoTuNTd4oGg==} + '@typescript-eslint/typescript-estree@8.66.0': + resolution: {integrity: sha512-8/x4INiiQb10jGgXYD7116/zQ+OL84ZIFn0za68wwFHCanT/VLbBEroWht8RV8fn0/ZCAoazHLQgwUC0UQcDfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <6.1.0' @@ -3814,8 +3794,8 @@ packages: peerDependencies: eslint: ^8.56.0 - '@typescript-eslint/utils@8.65.0': - resolution: {integrity: sha512-gXiwIHsYreboxeJucHKPvgwl7dXt50mF8s1/c00cP/WoVTyWKFdtfhRWwZiXYFU5H2O8vVoSLNrexFZjYS/SGA==} + '@typescript-eslint/utils@8.66.0': + resolution: {integrity: sha512-jasearZPolBw5NJNYGMwxzHMF83niVWmMU1VdHzG1CyfI2VS7f7nZltnKtHcg20hW+7Uo5GfK4MeDPoU3qI8EA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -3833,8 +3813,8 @@ packages: resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@8.65.0': - resolution: {integrity: sha512-8C71BQkGjiMmXtop7pHVJu1l2NNShFdkCyD6a2ezzs5vU/L3LRtb69EtcteFwz0mYMPzIgOw0n6OV4VBUWZd7A==} + '@typescript-eslint/visitor-keys@8.66.0': + resolution: {integrity: sha512-dkKR8q+lKciskj1Y3vthHktl+3cMLWGyVUP23bRiPZ5O9BRT++4EqDDV+TVeIKBL1VXVEqrJlz8MYbcnvJcAlg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.3.3': @@ -4027,6 +4007,10 @@ packages: resolution: {integrity: sha512-ufJnssQGbxzLNS1Ho9bCtX4rQKCCvoVuDLHoJyc3F9dOGDB4BkWs2Ci0kv53lqocAEQ/Cbi+I2XCsNYGqVYqng==} engines: {node: '>=12.0'} + adm-zip@0.6.0: + resolution: {integrity: sha512-XleryMhbuksdKtofnWZ9Sk+4CUTbms4Mb/EU32SZwToAyZ5RgVos/ki8n+yr0LWHOGKuakbXTuuYNHLQjhddgg==} + engines: {node: '>=14.0'} + agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -4267,8 +4251,8 @@ packages: axios@1.18.0: resolution: {integrity: sha512-E32NzpYKp++W7XRe52rHiXV2ehxmh3wbdgO7MHeFM+vqxLBYHzt0ElkiImtOBxtOmyp0yoC8C6uESVV84Y2/hw==} - axios@1.18.1: - resolution: {integrity: sha512-3nTvFlvpn9Zu/RkHUqtc7/+al4UpRW5az71ap5zccp6e8RAYEzhMTecX8Dz1wWDYrPpUoB1HAQEGEAEvUr7S9g==} + axios@1.19.0: + resolution: {integrity: sha512-ht/iuYZXEjFxLH/Hkezgd7m6JKlHHXEUSneaDz8uZe1Gj5QZtCnpyDsckvAiEnT89OEbCLmnte4R4sn7P0EKFw==} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -4337,8 +4321,8 @@ packages: base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} - baseline-browser-mapping@2.11.6: - resolution: {integrity: sha512-69D/imtToCsIcAl8WBS2YaRwA4jO/j0HhU+hELqMEu9f54MoUtI6+XH5mrKU8rEFNEk/Ui1I2MK4/JkWacclGw==} + baseline-browser-mapping@2.11.12: + resolution: {integrity: sha512-r7WnVImvVCeFpf2DOXfy41aPWzeNg3H/A2X4dKmy1QL0MSyyk/e7z8ihJ3N6Nn2PsdhkVlqnEfnUE4a05P2aTA==} engines: {node: '>=6.0.0'} hasBin: true @@ -4368,8 +4352,8 @@ packages: bowser@2.14.1: resolution: {integrity: sha512-tzPjzCxygAKWFOJP011oxFHs57HzIhOEracIgAePE4pqB3LikALKnSzUyU4MGs9/iCEUuHlAJTjTc5M+u7YEGg==} - brace-expansion@5.0.8: - resolution: {integrity: sha512-JZyDyq3D4AUifKTPOB7DELf6XsB3WdPuNxCtob1vFXPsSXhdAiHBWJ/tJ8HAc9aH84BK+5JFZLNkJKx3G9kzQg==} + brace-expansion@5.0.9: + resolution: {integrity: sha512-ScQ4IuvIEF1TMlP7Zt+vjJ//9zlPb2SDcxWxM3bk8s6t6GGdJ7KO1dCcTidOPJKePW30LE/2cT7wCyPho9/Wxg==} engines: {node: 20 || >=22} braces@3.0.3: @@ -5013,10 +4997,6 @@ packages: resolution: {integrity: sha512-u9gfn+BlbHcyO7vItCIC4z49LJDUt31tODzOfAuJ5R1E7IdlRL6KjugcB9zOpejD+XiR+dDZbsnHSQ3g6A/u8A==} engines: {node: '>=12'} - diff@3.5.1: - resolution: {integrity: sha512-Z3u54A8qGyqFOSr2pk0ijYs8mOE9Qz8kTvtKeBI+upoG9j04Sq+oI7W8zAJiQybDcESET8/uIdHzs0p3k4fZlw==} - engines: {node: '>=0.3.1'} - diff@4.0.4: resolution: {integrity: sha512-X07nttJQkwkfKfvTPG/KSnE2OMdcUCao6+eXF3wmnIQRn2aPAHH3VxDbDOdegkd6JbPsXqShpvEOHfAT+nCNwQ==} engines: {node: '>=0.3.1'} @@ -5087,8 +5067,8 @@ packages: engines: {node: '>=0.10.0'} hasBin: true - electron-to-chromium@1.5.398: - resolution: {integrity: sha512-AsvhAxopJGh6museTDMIjn6JpDYOfgu4RLlygomt87MUwBUqTfd/1EiPtx10/LZE8xpTvkP2E9Gafq7lkLtodQ==} + electron-to-chromium@1.5.400: + resolution: {integrity: sha512-96EWDNjM59SYflgeV5Ylsf4EMiq1a25YjCnJH7cxn/AF2H3pILRweaUnoLax0yKHWdpOzY6JKEu45e8irqZIHA==} elegant-spinner@1.0.1: resolution: {integrity: sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==} @@ -5114,8 +5094,8 @@ packages: end-of-stream@1.4.5: resolution: {integrity: sha512-ooEGc6HP26xXq/N+GCGOT0JKCLDGrq2bQUZrQ7gyrJiZANJ/8YDTxTpQBXGMn+WbIQXNVpyWymm7KYVICQnyOg==} - enhanced-resolve@5.24.4: - resolution: {integrity: sha512-GVoi+ICHocoOIU7qVVM48wOJziRsqrsyqlI0Ce0LdowRn6v3bcH2zUa9kp85ncx0nwIb9/HOCOLS3fdThDG/XQ==} + enhanced-resolve@5.24.5: + resolution: {integrity: sha512-L1l8TNvomm6UVW5B253AGxQagSQr+vGwhMlrrfRS2qmhx46AMpMVJKQYLvWYbysTMY8VoicOvzHzoHMbyzB+4A==} engines: {node: '>=10.13.0'} entities@4.5.0: @@ -5578,8 +5558,8 @@ packages: fast-levenshtein@3.0.0: resolution: {integrity: sha512-hKKNajm46uNmTlhHSyZkmToAc56uZJwYq7yrciZjqOxnlfQwERDQJmHPUp7m1m9wx8vgOe8IaCKZ5Kv2k1DdCQ==} - fast-uri@4.1.1: - resolution: {integrity: sha512-YPOs1zD5TG2+EZt+r88LwF6mclA7TPkpwMP7ZN3TO2HiHS8TXvq7QA/17iJsV9dubcLo/f8eEYqMBruyQV21hQ==} + fast-uri@4.1.2: + resolution: {integrity: sha512-TyGmBcbDTZXcb2cj5MV89DrF42DKvb3y5DDUNh95iO+IMeAzMkVSxK1PZRrRIpc9yg8U2GhGdbofNa0LS/a4Bw==} fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} @@ -5678,8 +5658,8 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - flatted@3.4.3: - resolution: {integrity: sha512-/zipXxyO6rGvuNGDiULY9MvEGSkb2gaG4GGH4ygMi0ZZzyMHdUZBmntJmx5x1G2VuPytCwGN4xsJP6cw+sK+vQ==} + flatted@3.4.4: + resolution: {integrity: sha512-5+ybhBZANEJxaH3X5evAFatUxLfEHSr7n6kYJ+1Qd0mUqr4eu9gIf6GDbWHf8RJijHrjjO8G+la14SlL2SeS1Q==} fn.name@1.1.0: resolution: {integrity: sha512-GRnmB5gPyJpAhTQdSZTSp9uaPSvl09KoYcMQtsB9rQoOmzs9dH6ffeccH+Z+cv6P68Hu5bC6JjRh4Ah/mHSNRw==} @@ -5805,12 +5785,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.14.0: - resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} - - git-diff@2.0.7: - resolution: {integrity: sha512-/+vyWaKNUJLcVT+tm5Hsly2xDcIs49EkZstxqW7ap1ZiZ0BECviLK1iv9/f4cGhlKBokeAf61QkTDnL88H+Uhg==} - engines: {node: '>= 4.8.0'} + get-tsconfig@4.14.1: + resolution: {integrity: sha512-Dz/6HxkrxgNehhxLVeyv8sad9UzF2xBVeaKBQNDfJ5XiSXmp2gTR0eO0RWiT2NCKS5aGP9jjkOMggTN90qU50A==} git-raw-commits@5.0.1: resolution: {integrity: sha512-Y+csSm2GD/PCSh6Isd/WiMjNAydu0VBiG9J7EdQsNA5P9uXvLayqjmTsNlK5Gs9IhblFZqOU0yid5Il5JPoLiQ==} @@ -6673,8 +6649,8 @@ packages: js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} - js-yaml@5.2.2: - resolution: {integrity: sha512-dayzUzKkJ1MkuUtZglSebU43utNXH0OWQByK9rKOOuYIO8M5TV1y+n8ALMdG0rdzBnfNkOmZEqrURepb0ejqBw==} + js-yaml@5.2.3: + resolution: {integrity: sha512-n+mUVyUX5bVv7G/G2zyIHOhdxfuU1dY2NOFzTQUWiMUbFss8b57NFlgCCaggU78wSw5KVS9cllzeLyzyR+n5nw==} hasBin: true js2xmlparser@4.0.2: @@ -6888,8 +6864,8 @@ packages: linkify-it@5.0.2: resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} - lint-staged@17.2.0: - resolution: {integrity: sha512-FchGnFe4i4B1C/a35SPU9bNGPEHSC1+1iV0plLjzBmKVe9klZrlRfSgK6Cw4VeHyqOXbJUXP0vON61uRftNQ0A==} + lint-staged@17.3.0: + resolution: {integrity: sha512-woZS3vNe3UKqBaLPvbLOtKRY4tLANpWQhom12MGWqC8Mh1lCOO+WgSwmX2amjJAqTY9BkXYW87fCUH5H9Ph6xw==} engines: {node: '>=22.22.1'} hasBin: true @@ -7007,10 +6983,6 @@ packages: resolution: {integrity: sha512-TFYA4jnP7PVbmlBIfhlSe+WKxs9dklXMTEGcBCIvLhE/Tn3H6Gk1norupVW7m5Cnd4bLcr08AytbyV/xj7f/kQ==} engines: {node: '>= 12.0.0'} - loglevel@1.9.2: - resolution: {integrity: sha512-HgMmCqIJSAKqo68l0rS2AanEWfkxaZ5wNiEFb5ggm08lDs9Xl2KxBlX3PTcaD2chBM1gXAYf491/M2Rv8Jwayg==} - engines: {node: '>= 0.6.0'} - loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true @@ -7202,8 +7174,8 @@ packages: engines: {node: '>= 14.0.0'} hasBin: true - mocha@11.7.6: - resolution: {integrity: sha512-nS9xOGbw2I3cjCpxwZAEJ9xK9lmJ08vEkQvLtz4du9ZrF9UrjRpeJGiIgl2Z+Qs++pmB4ecDe48Fwsh+j+j7xA==} + mocha@11.8.0: + resolution: {integrity: sha512-VyCeUdGN3A9lmCTTgG4yuvY9ixxaDk+xt2R/7/+1AP6EqNG+G9OKkzBwhVtVYoNX8YsxNSgAl8mOv3IAeOpFbw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true @@ -7236,8 +7208,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.16: - resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} + nanoid@3.3.17: + resolution: {integrity: sha512-xQLf0A3HOMlgHq0n247/LRuAOYmB7dXJ/DvAxGvsSBij45XtBSmQycu+F8ODbHwns/XyFZagyL1+J0Offw1E0g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -7305,8 +7277,8 @@ packages: resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} engines: {node: '>=8'} - node-releases@2.0.51: - resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} + node-releases@2.0.52: + resolution: {integrity: sha512-MRlTqhAfoMx/4mhEbPo3Hi02g9LJZaJkka69V6h67Cb1gjrAG0jsTE4CZX1eptNx+VCAwJmfpnDIF4P0Nh1A7A==} engines: {node: '>=18'} nopt@1.0.10: @@ -7631,8 +7603,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss@8.5.24: - resolution: {integrity: sha512-8RyVklq0owXUTa4xlpzu4l9AaVKIdQvAcOHZWaMh98HgySsUtxRVf/chRe3dsSLqb6i40BzGRzEUddRaI+9TSw==} + postcss@8.5.25: + resolution: {integrity: sha512-DTPx3RWSSnWyzLxQnlH0rJP+EW5ekl16ZU4/psbIhA0e53kJfdgaN5vKM+xP7yJtXVu+nfdVFmlgFDEKAe4Pyw==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -7991,13 +7963,13 @@ packages: engines: {node: 20 || >=22} hasBin: true - rolldown@1.1.5: - resolution: {integrity: sha512-t9z29cJjXf/vxQ8dyhCSpt6H6aSwHTk8cT5I3iy6SMXuFpk5mB6PL6XfC8PCwrPTx93udwKUm9HRteAlTGBLiA==} + rolldown@1.2.2: + resolution: {integrity: sha512-opwpo1tQBAcpSUJDt94B7hhLNGOKjCdE//XXjeLrnx9b83bjnw45tXdg1b09yEw/VLFBJGZpwRULMmOZo7ol+A==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true - rollup@4.62.3: - resolution: {integrity: sha512-Gu0c0iH9FzgX1L1t7ByIbbS3Vmdz+6KHm/EsqmmC71gUQ82yvZRkTK6XzrFObSka91WUVdynqp6nsfilzr5k6Q==} + rollup@4.62.4: + resolution: {integrity: sha512-RXOqwaPsBGjMNMa4sQjDjHieHEZDFoj/Rdr46l2MU5DfEs16wHJPC2RPTPHWhNl+M3aI472LLqFkFKut4SblOg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -8124,19 +8096,10 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shelljs.exec@1.1.8: - resolution: {integrity: sha512-vFILCw+lzUtiwBAHV8/Ex8JsFjelFMdhONIsgKNLgTzeRckp2AOYRQtHJE/9LhNvdMmE27AGtzWx0+DHpwIwSw==} - engines: {node: '>= 4.0.0'} - shelljs@0.10.0: resolution: {integrity: sha512-Jex+xw5Mg2qMZL3qnzXIfaxEtBaC4n7xifqaqtrZDdlheR70OGkydrPJWT0V1cA1k3nanC86x9FwAmQl6w3Klw==} engines: {node: '>=18'} - shelljs@0.8.5: - resolution: {integrity: sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow==} - engines: {node: '>=4'} - hasBin: true - shelljs@0.9.2: resolution: {integrity: sha512-S3I64fEiKgTZzKCC46zT/Ib9meqofLrQVbpSswtjFfAVDW+AZ54WTnAM/3/yENoxz/V1Cy6u3kiiEbQ4DNphvw==} engines: {node: '>=18'} @@ -8505,8 +8468,8 @@ packages: tinybench@2.9.0: resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} - tinyexec@1.2.4: - resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==} + tinyexec@1.3.0: + resolution: {integrity: sha512-QKAl9m8gWWGHV8jZcPeym6j+XULi6tOf1mT83WYJ4Lk2ytW/uwAWkrP0uFsdoYMdueVJ0qs26wZ+23xeB4ibNQ==} engines: {node: '>=18'} tinyglobby@0.2.17: @@ -8705,8 +8668,8 @@ packages: typedarray@0.0.6: resolution: {integrity: sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==} - typescript-eslint@8.65.0: - resolution: {integrity: sha512-/ggrHAwyjENDusvyxbuqxAC2dTnZg/Z8F+fgQtYIz+L6n/9HfSlEZcFGV/NsMNa6CkGk0xUjUAFwC0vHOflvIA==} + typescript-eslint@8.66.0: + resolution: {integrity: sha512-QlEbBPz/RuJ1XUHj29nm3t0F/O/cSlEnntozqPOYHnnTGAXFamnMBu5i9Vn6vhUPHGAjR+Vl+5J8vPN/BMUrJw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 || ^10.0.0 @@ -8855,13 +8818,13 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vite@8.1.5: - resolution: {integrity: sha512-7ULLwsCdYx/nRyrpiEwvqb5TFHrMVZyBt+rg/OAXT7rgj/z+DtTDyKFeLAdDkubDVDKD8jOsndmy7m55XcfUsw==} + vite@8.2.0: + resolution: {integrity: sha512-pn+CFpM0lwDeKwmOq1ZaBK/9sjorZcgqxki6MbY/jPEVd9vichIlmlD4HmQ5wdP5EgqQCFRaACBxMC7uEGc6lQ==} engines: {node: ^20.19.0 || >=22.12.0} hasBin: true peerDependencies: '@types/node': ^20.19.0 || >=22.12.0 - '@vitejs/devtools': ^0.3.0 + '@vitejs/devtools': ^0.4.0 esbuild: ^0.27.0 || ^0.28.0 jiti: '>=1.21.0' less: ^4.0.0 @@ -9085,8 +9048,8 @@ packages: resolution: {integrity: sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} - ws@8.21.1: - resolution: {integrity: sha512-+0NTnW77fFN/DjQi6k/Sq/Yvk4Sgajw7urW8V+asjXnRgDs9gyGkdb7EzgfhA4goXsRIZKE28fzIXBHEzhuiWw==} + ws@8.21.2: + resolution: {integrity: sha512-54dMVAo4WIe6SKy3vBgN+9bJZqqQ8IMRevAkOLQALhi49qkkQDQfWdAZ8KQlXiEabw88ARXXdUrlvtbKQX+aKw==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -9215,167 +9178,167 @@ snapshots: css-tree: 2.3.1 is-potential-custom-element-name: 1.0.1 - '@aws-sdk/checksums@3.1000.22': + '@aws-sdk/checksums@3.1000.25': dependencies: - '@aws-sdk/core': 3.977.2 + '@aws-sdk/core': 3.977.5 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-cloudfront@3.1097.0': + '@aws-sdk/client-cloudfront@3.1102.0': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/credential-provider-node': 3.972.74 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/credential-provider-node': 3.972.77 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/fetch-http-handler': 5.6.12 - '@smithy/node-http-handler': 4.9.12 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/client-s3@3.1097.0': + '@aws-sdk/client-s3@3.1102.0': dependencies: - '@aws-sdk/checksums': 3.1000.22 - '@aws-sdk/core': 3.977.2 - '@aws-sdk/credential-provider-node': 3.972.74 - '@aws-sdk/middleware-sdk-s3': 3.972.68 - '@aws-sdk/signature-v4-multi-region': 3.996.42 + '@aws-sdk/checksums': 3.1000.25 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/credential-provider-node': 3.972.77 + '@aws-sdk/middleware-sdk-s3': 3.972.71 + '@aws-sdk/signature-v4-multi-region': 3.996.43 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/fetch-http-handler': 5.6.12 - '@smithy/node-http-handler': 4.9.12 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/core@3.977.2': + '@aws-sdk/core@3.977.5': dependencies: '@aws-sdk/types': 3.974.2 '@aws-sdk/xml-builder': 3.972.37 '@aws/lambda-invoke-store': 0.3.0 - '@smithy/core': 3.31.0 - '@smithy/signature-v4': 5.6.11 + '@smithy/core': 3.31.1 + '@smithy/signature-v4': 5.6.12 '@smithy/types': 4.16.1 bowser: 2.14.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-env@3.972.63': + '@aws-sdk/credential-provider-env@3.972.66': dependencies: - '@aws-sdk/core': 3.977.2 + '@aws-sdk/core': 3.977.5 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-http@3.972.65': + '@aws-sdk/credential-provider-http@3.972.68': dependencies: - '@aws-sdk/core': 3.977.2 + '@aws-sdk/core': 3.977.5 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/fetch-http-handler': 5.6.12 - '@smithy/node-http-handler': 4.9.12 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-ini@3.973.8': + '@aws-sdk/credential-provider-ini@3.973.11': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/credential-provider-env': 3.972.63 - '@aws-sdk/credential-provider-http': 3.972.65 - '@aws-sdk/credential-provider-login': 3.972.70 - '@aws-sdk/credential-provider-process': 3.972.63 - '@aws-sdk/credential-provider-sso': 3.973.7 - '@aws-sdk/credential-provider-web-identity': 3.972.69 - '@aws-sdk/nested-clients': 3.997.37 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/credential-provider-env': 3.972.66 + '@aws-sdk/credential-provider-http': 3.972.68 + '@aws-sdk/credential-provider-login': 3.972.73 + '@aws-sdk/credential-provider-process': 3.972.66 + '@aws-sdk/credential-provider-sso': 3.973.10 + '@aws-sdk/credential-provider-web-identity': 3.972.72 + '@aws-sdk/nested-clients': 3.997.40 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/credential-provider-imds': 4.4.15 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-login@3.972.70': + '@aws-sdk/credential-provider-login@3.972.73': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/nested-clients': 3.997.37 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-node@3.972.74': + '@aws-sdk/credential-provider-node@3.972.77': dependencies: - '@aws-sdk/credential-provider-env': 3.972.63 - '@aws-sdk/credential-provider-http': 3.972.65 - '@aws-sdk/credential-provider-ini': 3.973.8 - '@aws-sdk/credential-provider-process': 3.972.63 - '@aws-sdk/credential-provider-sso': 3.973.7 - '@aws-sdk/credential-provider-web-identity': 3.972.69 + '@aws-sdk/credential-provider-env': 3.972.66 + '@aws-sdk/credential-provider-http': 3.972.68 + '@aws-sdk/credential-provider-ini': 3.973.11 + '@aws-sdk/credential-provider-process': 3.972.66 + '@aws-sdk/credential-provider-sso': 3.973.10 + '@aws-sdk/credential-provider-web-identity': 3.972.72 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/credential-provider-imds': 4.4.15 + '@smithy/core': 3.31.1 + '@smithy/credential-provider-imds': 4.4.16 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-process@3.972.63': + '@aws-sdk/credential-provider-process@3.972.66': dependencies: - '@aws-sdk/core': 3.977.2 + '@aws-sdk/core': 3.977.5 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-sso@3.973.7': + '@aws-sdk/credential-provider-sso@3.973.10': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/nested-clients': 3.997.37 - '@aws-sdk/token-providers': 3.1097.0 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 + '@aws-sdk/token-providers': 3.1102.0 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/credential-provider-web-identity@3.972.69': + '@aws-sdk/credential-provider-web-identity@3.972.72': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/nested-clients': 3.997.37 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/middleware-sdk-s3@3.972.68': + '@aws-sdk/middleware-sdk-s3@3.972.71': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/signature-v4-multi-region': 3.996.42 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/signature-v4-multi-region': 3.996.43 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/nested-clients@3.997.37': + '@aws-sdk/nested-clients@3.997.40': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/signature-v4-multi-region': 3.996.42 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/signature-v4-multi-region': 3.996.43 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 - '@smithy/fetch-http-handler': 5.6.12 - '@smithy/node-http-handler': 4.9.12 + '@smithy/core': 3.31.1 + '@smithy/fetch-http-handler': 5.6.13 + '@smithy/node-http-handler': 4.9.13 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/signature-v4-multi-region@3.996.42': + '@aws-sdk/signature-v4-multi-region@3.996.43': dependencies: '@aws-sdk/types': 3.974.2 - '@smithy/signature-v4': 5.6.11 + '@smithy/signature-v4': 5.6.12 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@aws-sdk/token-providers@3.1097.0': + '@aws-sdk/token-providers@3.1102.0': dependencies: - '@aws-sdk/core': 3.977.2 - '@aws-sdk/nested-clients': 3.997.37 + '@aws-sdk/core': 3.977.5 + '@aws-sdk/nested-clients': 3.997.40 '@aws-sdk/types': 3.974.2 - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 @@ -9402,14 +9365,14 @@ snapshots: '@babel/core@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/remapping': 2.3.5 convert-source-map: 2.0.0 debug: 4.4.3(supports-color@8.1.1) @@ -9427,17 +9390,17 @@ snapshots: eslint-visitor-keys: 2.1.0 semver: 6.3.1 - '@babel/generator@7.29.7': + '@babel/generator@7.29.8': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 jsesc: 3.1.0 '@babel/helper-annotate-as-pure@7.29.7': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@babel/helper-compilation-targets@7.29.7': dependencies: @@ -9455,7 +9418,7 @@ snapshots: '@babel/helper-optimise-call-expression': 7.29.7 '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) '@babel/helper-skip-transparent-expression-wrappers': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 semver: 6.3.1 transitivePeerDependencies: - supports-color @@ -9482,15 +9445,15 @@ snapshots: '@babel/helper-member-expression-to-functions@7.29.7': dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-module-imports@7.29.7': dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -9499,13 +9462,13 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-module-imports': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-optimise-call-expression@7.29.7': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@babel/helper-plugin-utils@7.29.7': {} @@ -9514,7 +9477,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-annotate-as-pure': 7.29.7 '@babel/helper-wrap-function': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9523,14 +9486,14 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-member-expression-to-functions': 7.29.7 '@babel/helper-optimise-call-expression': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helper-skip-transparent-expression-wrappers@7.29.7': dependencies: - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color @@ -9543,25 +9506,25 @@ snapshots: '@babel/helper-wrap-function@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 + '@babel/traverse': 7.29.8 + '@babel/types': 7.29.8 transitivePeerDependencies: - supports-color '@babel/helpers@7.29.7': dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 - '@babel/parser@7.29.7': + '@babel/parser@7.29.8': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.29.7(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9596,7 +9559,7 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9710,7 +9673,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-remap-async-to-generator': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9757,7 +9720,7 @@ snapshots: '@babel/helper-globals': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9771,7 +9734,7 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9828,7 +9791,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-compilation-targets': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9868,13 +9831,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-modules-systemjs@7.29.8(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) '@babel/helper-plugin-utils': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9914,7 +9877,7 @@ snapshots: '@babel/helper-plugin-utils': 7.29.7 '@babel/plugin-transform-destructuring': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-parameters': 7.29.7(@babel/core@7.29.7) - '@babel/traverse': 7.29.7 + '@babel/traverse': 7.29.8 transitivePeerDependencies: - supports-color @@ -9966,7 +9929,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-regenerator@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-regenerator@7.29.8(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 @@ -9987,7 +9950,7 @@ snapshots: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/plugin-transform-spread@7.29.7(@babel/core@7.29.7)': + '@babel/plugin-transform-spread@7.29.8(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 @@ -10075,7 +10038,7 @@ snapshots: '@babel/plugin-transform-member-expression-literals': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-modules-amd': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-modules-commonjs': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-modules-systemjs': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-modules-systemjs': 7.29.8(@babel/core@7.29.7) '@babel/plugin-transform-modules-umd': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-named-capturing-groups-regex': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-new-target': 7.29.7(@babel/core@7.29.7) @@ -10089,11 +10052,11 @@ snapshots: '@babel/plugin-transform-private-methods': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-private-property-in-object': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-property-literals': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-regenerator': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-regenerator': 7.29.8(@babel/core@7.29.7) '@babel/plugin-transform-regexp-modifiers': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-reserved-words': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-shorthand-properties': 7.29.7(@babel/core@7.29.7) - '@babel/plugin-transform-spread': 7.29.7(@babel/core@7.29.7) + '@babel/plugin-transform-spread': 7.29.8(@babel/core@7.29.7) '@babel/plugin-transform-sticky-regex': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-template-literals': 7.29.7(@babel/core@7.29.7) '@babel/plugin-transform-typeof-symbol': 7.29.7(@babel/core@7.29.7) @@ -10114,28 +10077,28 @@ snapshots: dependencies: '@babel/core': 7.29.7 '@babel/helper-plugin-utils': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 esutils: 2.0.3 '@babel/template@7.29.7': dependencies: '@babel/code-frame': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 - '@babel/traverse@7.29.7': + '@babel/traverse@7.29.8': dependencies: '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/helper-globals': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: - supports-color - '@babel/types@7.29.7': + '@babel/types@7.29.8': dependencies: '@babel/helper-string-parser': 7.29.7 '@babel/helper-validator-identifier': 7.29.7 @@ -10149,8 +10112,8 @@ snapshots: '@contentstack/cli-auth@1.8.5(@types/node@22.20.1)': dependencies: '@contentstack/cli-command': 1.8.5(@types/node@22.20.1) - '@contentstack/cli-utilities': 1.19.0(@types/node@22.20.1) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@22.20.1) + '@oclif/core': 4.13.3 otplib: 12.0.1 transitivePeerDependencies: - '@types/node' @@ -10159,8 +10122,8 @@ snapshots: '@contentstack/cli-command@1.8.5(@types/node@14.18.63)': dependencies: - '@contentstack/cli-utilities': 1.19.0(@types/node@14.18.63) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@14.18.63) + '@oclif/core': 4.13.3 contentstack: 3.27.1 transitivePeerDependencies: - '@types/node' @@ -10169,8 +10132,8 @@ snapshots: '@contentstack/cli-command@1.8.5(@types/node@14.18.63)(debug@4.4.3)': dependencies: - '@contentstack/cli-utilities': 1.19.0(@types/node@14.18.63)(debug@4.4.3) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@14.18.63)(debug@4.4.3) + '@oclif/core': 4.13.3 contentstack: 3.27.1 transitivePeerDependencies: - '@types/node' @@ -10179,8 +10142,8 @@ snapshots: '@contentstack/cli-command@1.8.5(@types/node@18.19.130)': dependencies: - '@contentstack/cli-utilities': 1.19.0(@types/node@18.19.130) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@18.19.130) + '@oclif/core': 4.13.3 contentstack: 3.27.1 transitivePeerDependencies: - '@types/node' @@ -10189,8 +10152,8 @@ snapshots: '@contentstack/cli-command@1.8.5(@types/node@20.19.43)': dependencies: - '@contentstack/cli-utilities': 1.19.0(@types/node@20.19.43) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@20.19.43) + '@oclif/core': 4.13.3 contentstack: 3.27.1 transitivePeerDependencies: - '@types/node' @@ -10199,31 +10162,31 @@ snapshots: '@contentstack/cli-command@1.8.5(@types/node@22.20.1)': dependencies: - '@contentstack/cli-utilities': 1.19.0(@types/node@22.20.1) - '@oclif/core': 4.13.2 + '@contentstack/cli-utilities': 1.19.1(@types/node@22.20.1) + '@oclif/core': 4.13.3 contentstack: 3.27.1 transitivePeerDependencies: - '@types/node' - debug - supports-color - '@contentstack/cli-config@1.21.0(@types/node@14.18.63)': + '@contentstack/cli-config@1.21.1(@types/node@14.18.63)': dependencies: '@contentstack/cli-command': 1.8.5(@types/node@14.18.63) - '@contentstack/cli-utilities': 1.19.0(@types/node@14.18.63) + '@contentstack/cli-utilities': 1.19.1(@types/node@14.18.63) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 transitivePeerDependencies: - '@types/node' - debug - supports-color - '@contentstack/cli-config@1.21.0(@types/node@22.20.1)': + '@contentstack/cli-config@1.21.1(@types/node@22.20.1)': dependencies: '@contentstack/cli-command': 1.8.5(@types/node@22.20.1) - '@contentstack/cli-utilities': 1.19.0(@types/node@22.20.1) + '@contentstack/cli-utilities': 1.19.1(@types/node@22.20.1) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 transitivePeerDependencies: - '@types/node' - debug @@ -10231,8 +10194,8 @@ snapshots: '@contentstack/cli-dev-dependencies@1.3.1': dependencies: - '@oclif/core': 4.13.2 - '@oclif/test': 4.1.21(@oclif/core@4.13.2) + '@oclif/core': 4.13.3 + '@oclif/test': 4.1.21(@oclif/core@4.13.3) fancy-test: 2.0.42 lodash: 4.18.1 transitivePeerDependencies: @@ -10242,13 +10205,13 @@ snapshots: dependencies: '@apollo/client': 3.14.1(graphql@16.14.2) '@contentstack/cli-command': 1.8.5(@types/node@20.19.43) - '@contentstack/cli-utilities': 1.19.0(@types/node@20.19.43) - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@rollup/plugin-commonjs': 28.0.9(rollup@4.62.3) - '@rollup/plugin-json': 6.1.0(rollup@4.62.3) - '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.3) - '@rollup/plugin-typescript': 12.3.0(rollup@4.62.3)(tslib@2.8.1)(typescript@5.9.3) + '@contentstack/cli-utilities': 1.19.1(@types/node@20.19.43) + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@rollup/plugin-commonjs': 28.0.9(rollup@4.62.4) + '@rollup/plugin-json': 6.1.0(rollup@4.62.4) + '@rollup/plugin-node-resolve': 16.0.3(rollup@4.62.4) + '@rollup/plugin-typescript': 12.3.0(rollup@4.62.4)(tslib@2.8.1)(typescript@5.9.3) '@types/express': 4.17.25 '@types/express-serve-static-core': 4.19.9 adm-zip: 0.5.18 @@ -10261,7 +10224,7 @@ snapshots: ini: 3.0.1 lodash: 4.18.1 open: 8.4.2 - rollup: 4.62.3 + rollup: 4.62.4 winston: 3.19.0 transitivePeerDependencies: - '@types/node' @@ -10276,13 +10239,13 @@ snapshots: - tslib - typescript - '@contentstack/cli-utilities@1.19.0(@types/node@14.18.63)': + '@contentstack/cli-utilities@1.19.1(@types/node@14.18.63)': dependencies: '@contentstack/management': 1.30.4(debug@4.4.3) '@contentstack/marketplace-sdk': 1.5.4(debug@4.4.3) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 - axios: 1.18.1(debug@4.4.3) + '@oclif/core': 4.13.3 + axios: 1.19.0(debug@4.4.3) chalk: 4.1.2 cli-cursor: 3.1.0 cli-progress: 3.12.0 @@ -10293,7 +10256,7 @@ snapshots: inquirer: 8.2.7(@types/node@14.18.63) inquirer-search-checkbox: 1.0.0 inquirer-search-list: 1.2.6 - js-yaml: 5.2.2 + js-yaml: 5.2.3 klona: 2.0.6 lodash: 4.18.1 mkdirp: 1.0.4 @@ -10314,13 +10277,13 @@ snapshots: - debug - supports-color - '@contentstack/cli-utilities@1.19.0(@types/node@14.18.63)(debug@4.4.3)': + '@contentstack/cli-utilities@1.19.1(@types/node@14.18.63)(debug@4.4.3)': dependencies: '@contentstack/management': 1.30.4(debug@4.4.3) '@contentstack/marketplace-sdk': 1.5.4(debug@4.4.3) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 - axios: 1.18.1(debug@4.4.3) + '@oclif/core': 4.13.3 + axios: 1.19.0(debug@4.4.3) chalk: 4.1.2 cli-cursor: 3.1.0 cli-progress: 3.12.0 @@ -10331,7 +10294,7 @@ snapshots: inquirer: 8.2.7(@types/node@14.18.63) inquirer-search-checkbox: 1.0.0 inquirer-search-list: 1.2.6 - js-yaml: 5.2.2 + js-yaml: 5.2.3 klona: 2.0.6 lodash: 4.18.1 mkdirp: 1.0.4 @@ -10352,13 +10315,13 @@ snapshots: - debug - supports-color - '@contentstack/cli-utilities@1.19.0(@types/node@18.19.130)': + '@contentstack/cli-utilities@1.19.1(@types/node@18.19.130)': dependencies: '@contentstack/management': 1.30.4(debug@4.4.3) '@contentstack/marketplace-sdk': 1.5.4(debug@4.4.3) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 - axios: 1.18.1(debug@4.4.3) + '@oclif/core': 4.13.3 + axios: 1.19.0(debug@4.4.3) chalk: 4.1.2 cli-cursor: 3.1.0 cli-progress: 3.12.0 @@ -10369,7 +10332,7 @@ snapshots: inquirer: 8.2.7(@types/node@18.19.130) inquirer-search-checkbox: 1.0.0 inquirer-search-list: 1.2.6 - js-yaml: 5.2.2 + js-yaml: 5.2.3 klona: 2.0.6 lodash: 4.18.1 mkdirp: 1.0.4 @@ -10390,13 +10353,13 @@ snapshots: - debug - supports-color - '@contentstack/cli-utilities@1.19.0(@types/node@20.19.43)': + '@contentstack/cli-utilities@1.19.1(@types/node@20.19.43)': dependencies: '@contentstack/management': 1.30.4(debug@4.4.3) '@contentstack/marketplace-sdk': 1.5.4(debug@4.4.3) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 - axios: 1.18.1(debug@4.4.3) + '@oclif/core': 4.13.3 + axios: 1.19.0(debug@4.4.3) chalk: 4.1.2 cli-cursor: 3.1.0 cli-progress: 3.12.0 @@ -10407,7 +10370,7 @@ snapshots: inquirer: 8.2.7(@types/node@20.19.43) inquirer-search-checkbox: 1.0.0 inquirer-search-list: 1.2.6 - js-yaml: 5.2.2 + js-yaml: 5.2.3 klona: 2.0.6 lodash: 4.18.1 mkdirp: 1.0.4 @@ -10428,13 +10391,13 @@ snapshots: - debug - supports-color - '@contentstack/cli-utilities@1.19.0(@types/node@22.20.1)': + '@contentstack/cli-utilities@1.19.1(@types/node@22.20.1)': dependencies: '@contentstack/management': 1.30.4(debug@4.4.3) '@contentstack/marketplace-sdk': 1.5.4(debug@4.4.3) '@contentstack/utils': 1.9.1 - '@oclif/core': 4.13.2 - axios: 1.18.1(debug@4.4.3) + '@oclif/core': 4.13.3 + axios: 1.19.0(debug@4.4.3) chalk: 4.1.2 cli-cursor: 3.1.0 cli-progress: 3.12.0 @@ -10445,7 +10408,7 @@ snapshots: inquirer: 8.2.7(@types/node@22.20.1) inquirer-search-checkbox: 1.0.0 inquirer-search-list: 1.2.6 - js-yaml: 5.2.2 + js-yaml: 5.2.3 klona: 2.0.6 lodash: 4.18.1 mkdirp: 1.0.4 @@ -10466,10 +10429,10 @@ snapshots: - debug - supports-color - '@contentstack/core@1.4.1': + '@contentstack/core@1.5.0': dependencies: - axios: 1.18.1(debug@4.4.3) - axios-mock-adapter: 2.1.0(axios@1.18.1) + axios: 1.19.0(debug@4.4.3) + axios-mock-adapter: 2.1.0(axios@1.19.0) lodash: 4.18.1 qs: 6.15.2 tslib: 2.8.1 @@ -10477,11 +10440,11 @@ snapshots: - debug - supports-color - '@contentstack/delivery-sdk@5.5.0': + '@contentstack/delivery-sdk@5.5.1': dependencies: - '@contentstack/core': 1.4.1 + '@contentstack/core': 1.5.0 '@contentstack/utils': 1.9.1 - axios: 1.18.1(debug@4.4.3) + axios: 1.19.0(debug@4.4.3) humps: 2.0.1 transitivePeerDependencies: - debug @@ -10506,7 +10469,7 @@ snapshots: dependencies: '@contentstack/utils': 1.9.1 assert: 2.1.0 - axios: 1.18.1(debug@4.4.3) + axios: 1.19.0(debug@4.4.3) buffer: 6.0.3 form-data: 4.0.6 husky: 9.1.7 @@ -10518,11 +10481,11 @@ snapshots: - debug - supports-color - '@contentstack/management@1.31.0': + '@contentstack/management@1.31.1': dependencies: '@contentstack/utils': 1.9.1 assert: 2.1.0 - axios: 1.18.1(debug@4.4.3) + axios: 1.19.0(debug@4.4.3) buffer: 6.0.3 form-data: 4.0.6 husky: 9.1.7 @@ -10537,14 +10500,14 @@ snapshots: '@contentstack/marketplace-sdk@1.5.4(debug@4.4.3)': dependencies: '@contentstack/utils': 1.9.1 - axios: 1.18.1(debug@4.4.3) + axios: 1.19.0(debug@4.4.3) transitivePeerDependencies: - debug - supports-color '@contentstack/types-generator@3.10.2(graphql@16.14.2)': dependencies: - '@contentstack/delivery-sdk': 5.5.0 + '@contentstack/delivery-sdk': 5.5.1 '@gql2ts/from-schema': 2.0.0-4(graphql@16.14.2) async: 3.2.6 axios: 1.18.0 @@ -10602,36 +10565,20 @@ snapshots: tslib: 2.8.1 optional: true - '@emnapi/core@1.11.1': - dependencies: - '@emnapi/wasi-threads': 1.2.2 - tslib: 2.8.1 - optional: true - '@emnapi/runtime@1.10.0': dependencies: tslib: 2.8.1 optional: true - '@emnapi/runtime@1.11.1': - dependencies: - tslib: 2.8.1 - optional: true - '@emnapi/wasi-threads@1.2.1': dependencies: tslib: 2.8.1 optional: true - '@emnapi/wasi-threads@1.2.2': - dependencies: - tslib: 2.8.1 - optional: true - '@es-joy/jsdoccomment@0.50.2': dependencies: '@types/estree': 1.0.9 - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/types': 8.66.0 comment-parser: 1.4.1 esquery: 1.7.0 jsdoc-type-pratt-parser: 4.1.0 @@ -10696,7 +10643,7 @@ snapshots: globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.1 - js-yaml: 5.2.2 + js-yaml: 5.2.3 minimatch: 3.1.5 strip-json-comments: 3.1.1 transitivePeerDependencies: @@ -11115,16 +11062,16 @@ snapshots: '@inquirer/prompts@7.10.1': dependencies: - '@inquirer/checkbox': 4.3.2(@types/node@18.19.130) - '@inquirer/confirm': 5.1.21(@types/node@18.19.130) - '@inquirer/editor': 4.2.23(@types/node@18.19.130) - '@inquirer/expand': 4.0.23(@types/node@18.19.130) - '@inquirer/input': 4.3.1(@types/node@18.19.130) - '@inquirer/number': 3.0.23(@types/node@18.19.130) - '@inquirer/password': 4.0.23(@types/node@18.19.130) - '@inquirer/rawlist': 4.1.11(@types/node@18.19.130) - '@inquirer/search': 3.2.2(@types/node@18.19.130) - '@inquirer/select': 4.4.2(@types/node@18.19.130) + '@inquirer/checkbox': 4.3.2(@types/node@14.18.63) + '@inquirer/confirm': 5.1.21(@types/node@14.18.63) + '@inquirer/editor': 4.2.23(@types/node@14.18.63) + '@inquirer/expand': 4.0.23(@types/node@14.18.63) + '@inquirer/input': 4.3.1(@types/node@14.18.63) + '@inquirer/number': 3.0.23(@types/node@14.18.63) + '@inquirer/password': 4.0.23(@types/node@14.18.63) + '@inquirer/rawlist': 4.1.11(@types/node@14.18.63) + '@inquirer/search': 3.2.2(@types/node@14.18.63) + '@inquirer/select': 4.4.2(@types/node@14.18.63) '@inquirer/prompts@7.10.1(@types/node@14.18.63)': dependencies: @@ -11344,7 +11291,7 @@ snapshots: camelcase: 5.3.1 find-up: 4.1.0 get-package-type: 0.1.0 - js-yaml: 5.2.2 + js-yaml: 5.2.3 resolve-from: 5.0.0 '@istanbuljs/schema@0.1.6': {} @@ -11795,17 +11742,13 @@ snapshots: dependencies: lodash: 4.18.1 - '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': - dependencies: - '@emnapi/core': 1.10.0 - '@emnapi/runtime': 1.10.0 - '@tybys/wasm-util': 0.10.3 + '@napi-rs/lzma-linux-x64-gnu@1.5.1': optional: true - '@napi-rs/wasm-runtime@1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)': + '@napi-rs/wasm-runtime@1.2.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)': dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 + '@emnapi/core': 1.10.0 + '@emnapi/runtime': 1.10.0 '@tybys/wasm-util': 0.10.3 optional: true @@ -11845,7 +11788,7 @@ snapshots: hyperlinker: 1.0.0 indent-string: 4.0.0 is-wsl: 2.2.0 - js-yaml: 5.2.2 + js-yaml: 5.2.3 natural-orderby: 2.0.3 object-treeify: 1.1.33 password-prompt: 1.1.3 @@ -11875,7 +11818,7 @@ snapshots: hyperlinker: 1.0.0 indent-string: 4.0.0 is-wsl: 2.2.0 - js-yaml: 5.2.2 + js-yaml: 5.2.3 minimatch: 9.0.9 natural-orderby: 2.0.3 object-treeify: 1.1.33 @@ -11889,7 +11832,7 @@ snapshots: wordwrap: 1.0.0 wrap-ansi: 7.0.0 - '@oclif/core@4.13.2': + '@oclif/core@4.13.3': dependencies: ansi-escapes: 4.3.2 ansis: 3.17.0 @@ -11912,58 +11855,58 @@ snapshots: '@oclif/linewrap@1.0.0': {} - '@oclif/plugin-help@6.2.55': + '@oclif/plugin-help@6.2.56': dependencies: - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 - '@oclif/plugin-not-found@3.2.90': + '@oclif/plugin-not-found@3.2.91': dependencies: '@inquirer/prompts': 7.10.1 - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - '@oclif/plugin-not-found@3.2.90(@types/node@14.18.63)': + '@oclif/plugin-not-found@3.2.91(@types/node@14.18.63)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@14.18.63) - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - '@oclif/plugin-not-found@3.2.90(@types/node@18.19.130)': + '@oclif/plugin-not-found@3.2.91(@types/node@18.19.130)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@18.19.130) - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - '@oclif/plugin-not-found@3.2.90(@types/node@20.19.43)': + '@oclif/plugin-not-found@3.2.91(@types/node@20.19.43)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@20.19.43) - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - '@oclif/plugin-not-found@3.2.90(@types/node@22.20.1)': + '@oclif/plugin-not-found@3.2.91(@types/node@22.20.1)': dependencies: '@inquirer/prompts': 7.10.1(@types/node@22.20.1) - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 fast-levenshtein: 3.0.0 transitivePeerDependencies: - '@types/node' - '@oclif/plugin-warn-if-update-available@3.1.70': + '@oclif/plugin-warn-if-update-available@3.1.71': dependencies: - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 debug: 4.4.3(supports-color@8.1.1) http-call: 5.3.0 @@ -11984,9 +11927,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@oclif/test@4.1.21(@oclif/core@4.13.2)': + '@oclif/test@4.1.21(@oclif/core@4.13.3)': dependencies: - '@oclif/core': 4.13.2 + '@oclif/core': 4.13.3 ansis: 3.17.0 debug: 4.4.3(supports-color@8.1.1) transitivePeerDependencies: @@ -12015,7 +11958,7 @@ snapshots: '@otplib/plugin-crypto': 12.0.1 '@otplib/plugin-thirty-two': 12.0.1 - '@oxc-project/types@0.139.0': {} + '@oxc-project/types@0.142.0': {} '@pkgjs/parseargs@0.11.0': optional: true @@ -12038,60 +11981,53 @@ snapshots: dependencies: nopt: 1.0.10 - '@rolldown/binding-android-arm64@1.1.5': + '@rolldown/binding-android-arm64@1.2.2': optional: true - '@rolldown/binding-darwin-arm64@1.1.5': + '@rolldown/binding-darwin-arm64@1.2.2': optional: true - '@rolldown/binding-darwin-x64@1.1.5': + '@rolldown/binding-darwin-x64@1.2.2': optional: true - '@rolldown/binding-freebsd-x64@1.1.5': + '@rolldown/binding-freebsd-x64@1.2.2': optional: true - '@rolldown/binding-linux-arm-gnueabihf@1.1.5': + '@rolldown/binding-linux-arm-gnueabihf@1.2.2': optional: true - '@rolldown/binding-linux-arm64-gnu@1.1.5': + '@rolldown/binding-linux-arm64-gnu@1.2.2': optional: true - '@rolldown/binding-linux-arm64-musl@1.1.5': + '@rolldown/binding-linux-arm64-musl@1.2.2': optional: true - '@rolldown/binding-linux-ppc64-gnu@1.1.5': + '@rolldown/binding-linux-ppc64-gnu@1.2.2': optional: true - '@rolldown/binding-linux-s390x-gnu@1.1.5': + '@rolldown/binding-linux-s390x-gnu@1.2.2': optional: true - '@rolldown/binding-linux-x64-gnu@1.1.5': + '@rolldown/binding-linux-x64-gnu@1.2.2': optional: true - '@rolldown/binding-linux-x64-musl@1.1.5': + '@rolldown/binding-linux-x64-musl@1.2.2': optional: true - '@rolldown/binding-openharmony-arm64@1.1.5': + '@rolldown/binding-openharmony-arm64@1.2.2': optional: true - '@rolldown/binding-wasm32-wasi@1.1.5': - dependencies: - '@emnapi/core': 1.11.1 - '@emnapi/runtime': 1.11.1 - '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1) - optional: true - - '@rolldown/binding-win32-arm64-msvc@1.1.5': + '@rolldown/binding-win32-arm64-msvc@1.2.2': optional: true - '@rolldown/binding-win32-x64-msvc@1.1.5': + '@rolldown/binding-win32-x64-msvc@1.2.2': optional: true '@rolldown/pluginutils@1.0.1': {} - '@rollup/plugin-commonjs@28.0.9(rollup@4.62.3)': + '@rollup/plugin-commonjs@28.0.9(rollup@4.62.4)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.62.3) + '@rollup/pluginutils': 5.4.0(rollup@4.62.4) commondir: 1.0.1 estree-walker: 2.0.2 fdir: 6.5.0(picomatch@4.0.5) @@ -12099,114 +12035,114 @@ snapshots: magic-string: 0.30.21 picomatch: 4.0.5 optionalDependencies: - rollup: 4.62.3 + rollup: 4.62.4 - '@rollup/plugin-json@6.1.0(rollup@4.62.3)': + '@rollup/plugin-json@6.1.0(rollup@4.62.4)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.62.3) + '@rollup/pluginutils': 5.4.0(rollup@4.62.4) optionalDependencies: - rollup: 4.62.3 + rollup: 4.62.4 - '@rollup/plugin-node-resolve@16.0.3(rollup@4.62.3)': + '@rollup/plugin-node-resolve@16.0.3(rollup@4.62.4)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.62.3) + '@rollup/pluginutils': 5.4.0(rollup@4.62.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.12 optionalDependencies: - rollup: 4.62.3 + rollup: 4.62.4 - '@rollup/plugin-typescript@12.3.0(rollup@4.62.3)(tslib@2.8.1)(typescript@5.9.3)': + '@rollup/plugin-typescript@12.3.0(rollup@4.62.4)(tslib@2.8.1)(typescript@5.9.3)': dependencies: - '@rollup/pluginutils': 5.4.0(rollup@4.62.3) + '@rollup/pluginutils': 5.4.0(rollup@4.62.4) resolve: 1.22.12 typescript: 5.9.3 optionalDependencies: - rollup: 4.62.3 + rollup: 4.62.4 tslib: 2.8.1 - '@rollup/pluginutils@5.4.0(rollup@4.62.3)': + '@rollup/pluginutils@5.4.0(rollup@4.62.4)': dependencies: '@types/estree': 1.0.9 estree-walker: 2.0.2 picomatch: 4.0.5 optionalDependencies: - rollup: 4.62.3 + rollup: 4.62.4 - '@rollup/rollup-android-arm-eabi@4.62.3': + '@rollup/rollup-android-arm-eabi@4.62.4': optional: true - '@rollup/rollup-android-arm64@4.62.3': + '@rollup/rollup-android-arm64@4.62.4': optional: true - '@rollup/rollup-darwin-arm64@4.62.3': + '@rollup/rollup-darwin-arm64@4.62.4': optional: true - '@rollup/rollup-darwin-x64@4.62.3': + '@rollup/rollup-darwin-x64@4.62.4': optional: true - '@rollup/rollup-freebsd-arm64@4.62.3': + '@rollup/rollup-freebsd-arm64@4.62.4': optional: true - '@rollup/rollup-freebsd-x64@4.62.3': + '@rollup/rollup-freebsd-x64@4.62.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.62.3': + '@rollup/rollup-linux-arm-gnueabihf@4.62.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.62.3': + '@rollup/rollup-linux-arm-musleabihf@4.62.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.62.3': + '@rollup/rollup-linux-arm64-gnu@4.62.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.62.3': + '@rollup/rollup-linux-arm64-musl@4.62.4': optional: true - '@rollup/rollup-linux-loong64-gnu@4.62.3': + '@rollup/rollup-linux-loong64-gnu@4.62.4': optional: true - '@rollup/rollup-linux-loong64-musl@4.62.3': + '@rollup/rollup-linux-loong64-musl@4.62.4': optional: true - '@rollup/rollup-linux-ppc64-gnu@4.62.3': + '@rollup/rollup-linux-ppc64-gnu@4.62.4': optional: true - '@rollup/rollup-linux-ppc64-musl@4.62.3': + '@rollup/rollup-linux-ppc64-musl@4.62.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.62.3': + '@rollup/rollup-linux-riscv64-gnu@4.62.4': optional: true - '@rollup/rollup-linux-riscv64-musl@4.62.3': + '@rollup/rollup-linux-riscv64-musl@4.62.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.62.3': + '@rollup/rollup-linux-s390x-gnu@4.62.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.62.3': + '@rollup/rollup-linux-x64-gnu@4.62.4': optional: true - '@rollup/rollup-linux-x64-musl@4.62.3': + '@rollup/rollup-linux-x64-musl@4.62.4': optional: true - '@rollup/rollup-openbsd-x64@4.62.3': + '@rollup/rollup-openbsd-x64@4.62.4': optional: true - '@rollup/rollup-openharmony-arm64@4.62.3': + '@rollup/rollup-openharmony-arm64@4.62.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.62.3': + '@rollup/rollup-win32-arm64-msvc@4.62.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.62.3': + '@rollup/rollup-win32-ia32-msvc@4.62.4': optional: true - '@rollup/rollup-win32-x64-gnu@4.62.3': + '@rollup/rollup-win32-x64-gnu@4.62.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.62.3': + '@rollup/rollup-win32-x64-msvc@4.62.4': optional: true '@rtsao/scc@1.1.0': {} @@ -12263,32 +12199,32 @@ snapshots: '@sinonjs/text-encoding@0.7.3': {} - '@smithy/core@3.31.0': + '@smithy/core@3.31.1': dependencies: '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/credential-provider-imds@4.4.15': + '@smithy/credential-provider-imds@4.4.16': dependencies: - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/fetch-http-handler@5.6.12': + '@smithy/fetch-http-handler@5.6.13': dependencies: - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/node-http-handler@4.9.12': + '@smithy/node-http-handler@4.9.13': dependencies: - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 - '@smithy/signature-v4@5.6.11': + '@smithy/signature-v4@5.6.12': dependencies: - '@smithy/core': 3.31.0 + '@smithy/core': 3.31.1 '@smithy/types': 4.16.1 tslib: 2.8.1 @@ -12305,7 +12241,7 @@ snapshots: '@stylistic/eslint-plugin@3.1.0(eslint@10.8.0)(typescript@4.9.5)': dependencies: - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) eslint: 10.8.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -12317,7 +12253,7 @@ snapshots: '@stylistic/eslint-plugin@3.1.0(eslint@10.8.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) eslint: 10.8.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -12329,7 +12265,7 @@ snapshots: '@stylistic/eslint-plugin@3.1.0(eslint@10.8.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) eslint: 10.8.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -12342,7 +12278,7 @@ snapshots: '@stylistic/eslint-plugin@5.10.0(eslint@10.8.0)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/types': 8.66.0 eslint: 10.8.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 @@ -12372,24 +12308,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.28.0 '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 + '@babel/parser': 7.29.8 + '@babel/types': 7.29.8 '@types/babel__traverse@7.28.0': dependencies: - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@types/big-json@3.2.5': dependencies: @@ -12446,14 +12382,10 @@ snapshots: '@types/jsonfile': 6.1.4 '@types/node': 20.19.43 - '@types/git-diff@2.0.7': {} - '@types/graceful-fs@4.1.9': dependencies: '@types/node': 20.19.43 - '@types/hogan.js@3.0.5': {} - '@types/http-cache-semantics@4.2.0': {} '@types/http-errors@2.0.5': {} @@ -12508,7 +12440,7 @@ snapshots: '@types/linkify-it@5.0.0': {} - '@types/lodash@4.17.24': {} + '@types/lodash@4.17.25': {} '@types/markdown-it@14.1.2': dependencies: @@ -12559,7 +12491,7 @@ snapshots: '@types/safe-regex@1.1.6': {} - '@types/semver@7.7.1': {} + '@types/semver@7.8.0': {} '@types/send@0.17.6': dependencies: @@ -12630,10 +12562,10 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/type-utils': 5.62.0(eslint@10.8.0)(typescript@4.9.5) '@typescript-eslint/utils': 5.62.0(eslint@10.8.0)(typescript@4.9.5) @@ -12709,14 +12641,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5)': + '@typescript-eslint/eslint-plugin@8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/type-utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.66.0 eslint: 10.8.0 ignore: 7.0.6 natural-compare: 1.4.0 @@ -12725,14 +12657,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3)': + '@typescript-eslint/eslint-plugin@8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/type-utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.66.0 eslint: 10.8.0 ignore: 7.0.6 natural-compare: 1.4.0 @@ -12741,14 +12673,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/eslint-plugin@8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3)': + '@typescript-eslint/eslint-plugin@8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3)': dependencies: '@eslint-community/regexpp': 4.12.2 - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/type-utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/type-utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.66.0 eslint: 10.8.0 ignore: 7.0.6 natural-compare: 1.4.0 @@ -12796,64 +12728,64 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5)': + '@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5)': dependencies: - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@4.9.5) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@4.9.5) + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3)': + '@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@5.9.3) + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3)': + '@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@6.0.3) + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 typescript: 6.0.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.65.0(typescript@4.9.5)': + '@typescript-eslint/project-service@8.66.0(typescript@4.9.5)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@4.9.5) - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@4.9.5) + '@typescript-eslint/types': 8.66.0 debug: 4.4.3(supports-color@8.1.1) typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.65.0(typescript@5.9.3)': + '@typescript-eslint/project-service@8.66.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.9.3) - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@5.9.3) + '@typescript-eslint/types': 8.66.0 debug: 4.4.3(supports-color@8.1.1) typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/project-service@8.65.0(typescript@6.0.3)': + '@typescript-eslint/project-service@8.66.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@6.0.3) + '@typescript-eslint/types': 8.66.0 debug: 4.4.3(supports-color@8.1.1) typescript: 6.0.3 transitivePeerDependencies: @@ -12874,20 +12806,20 @@ snapshots: '@typescript-eslint/types': 7.18.0 '@typescript-eslint/visitor-keys': 7.18.0 - '@typescript-eslint/scope-manager@8.65.0': + '@typescript-eslint/scope-manager@8.66.0': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 - '@typescript-eslint/tsconfig-utils@8.65.0(typescript@4.9.5)': + '@typescript-eslint/tsconfig-utils@8.66.0(typescript@4.9.5)': dependencies: typescript: 4.9.5 - '@typescript-eslint/tsconfig-utils@8.65.0(typescript@5.9.3)': + '@typescript-eslint/tsconfig-utils@8.66.0(typescript@5.9.3)': dependencies: typescript: 5.9.3 - '@typescript-eslint/tsconfig-utils@8.65.0(typescript@6.0.3)': + '@typescript-eslint/tsconfig-utils@8.66.0(typescript@6.0.3)': dependencies: typescript: 6.0.3 @@ -12939,11 +12871,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0)(typescript@4.9.5)': + '@typescript-eslint/type-utils@8.66.0(eslint@10.8.0)(typescript@4.9.5)': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@4.9.5) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 ts-api-utils: 2.5.0(typescript@4.9.5) @@ -12951,11 +12883,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0)(typescript@5.9.3)': + '@typescript-eslint/type-utils@8.66.0(eslint@10.8.0)(typescript@5.9.3)': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 ts-api-utils: 2.5.0(typescript@5.9.3) @@ -12963,11 +12895,11 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/type-utils@8.65.0(eslint@10.8.0)(typescript@6.0.3)': + '@typescript-eslint/type-utils@8.66.0(eslint@10.8.0)(typescript@6.0.3)': dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 ts-api-utils: 2.5.0(typescript@6.0.3) @@ -12981,7 +12913,7 @@ snapshots: '@typescript-eslint/types@7.18.0': {} - '@typescript-eslint/types@8.65.0': {} + '@typescript-eslint/types@8.66.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@4.9.5)': dependencies: @@ -13087,12 +13019,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.65.0(typescript@4.9.5)': + '@typescript-eslint/typescript-estree@8.66.0(typescript@4.9.5)': dependencies: - '@typescript-eslint/project-service': 8.65.0(typescript@4.9.5) - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@4.9.5) - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/project-service': 8.66.0(typescript@4.9.5) + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@4.9.5) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 @@ -13102,12 +13034,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.65.0(typescript@5.9.3)': + '@typescript-eslint/typescript-estree@8.66.0(typescript@5.9.3)': dependencies: - '@typescript-eslint/project-service': 8.65.0(typescript@5.9.3) - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@5.9.3) - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/project-service': 8.66.0(typescript@5.9.3) + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@5.9.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 @@ -13117,12 +13049,12 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@8.65.0(typescript@6.0.3)': + '@typescript-eslint/typescript-estree@8.66.0(typescript@6.0.3)': dependencies: - '@typescript-eslint/project-service': 8.65.0(typescript@6.0.3) - '@typescript-eslint/tsconfig-utils': 8.65.0(typescript@6.0.3) - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/visitor-keys': 8.65.0 + '@typescript-eslint/project-service': 8.66.0(typescript@6.0.3) + '@typescript-eslint/tsconfig-utils': 8.66.0(typescript@6.0.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/visitor-keys': 8.66.0 debug: 4.4.3(supports-color@8.1.1) minimatch: 10.2.6 semver: 7.8.5 @@ -13136,7 +13068,7 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.1 + '@types/semver': 7.8.0 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@4.9.5) @@ -13151,7 +13083,7 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.1 + '@types/semver': 7.8.0 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@4.9.5) @@ -13165,7 +13097,7 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.1 + '@types/semver': 7.8.0 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.9.3) @@ -13179,7 +13111,7 @@ snapshots: dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) '@types/json-schema': 7.0.15 - '@types/semver': 7.7.1 + '@types/semver': 7.8.0 '@typescript-eslint/scope-manager': 6.21.0 '@typescript-eslint/types': 6.21.0 '@typescript-eslint/typescript-estree': 6.21.0(typescript@6.0.3) @@ -13222,34 +13154,34 @@ snapshots: - supports-color - typescript - '@typescript-eslint/utils@8.65.0(eslint@10.8.0)(typescript@4.9.5)': + '@typescript-eslint/utils@8.66.0(eslint@10.8.0)(typescript@4.9.5)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@4.9.5) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@4.9.5) eslint: 10.8.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.65.0(eslint@10.8.0)(typescript@5.9.3)': + '@typescript-eslint/utils@8.66.0(eslint@10.8.0)(typescript@5.9.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@5.9.3) eslint: 10.8.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.65.0(eslint@10.8.0)(typescript@6.0.3)': + '@typescript-eslint/utils@8.66.0(eslint@10.8.0)(typescript@6.0.3)': dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - '@typescript-eslint/scope-manager': 8.65.0 - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) + '@typescript-eslint/scope-manager': 8.66.0 + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/typescript-estree': 8.66.0(typescript@6.0.3) eslint: 10.8.0 typescript: 6.0.3 transitivePeerDependencies: @@ -13270,9 +13202,9 @@ snapshots: '@typescript-eslint/types': 7.18.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@8.65.0': + '@typescript-eslint/visitor-keys@8.66.0': dependencies: - '@typescript-eslint/types': 8.65.0 + '@typescript-eslint/types': 8.66.0 eslint-visitor-keys: 5.0.1 '@ungap/structured-clone@1.3.3': {} @@ -13335,7 +13267,7 @@ snapshots: dependencies: '@emnapi/core': 1.10.0 '@emnapi/runtime': 1.10.0 - '@napi-rs/wasm-runtime': 1.2.0(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) + '@napi-rs/wasm-runtime': 1.2.2(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0) optional: true '@unrs/resolver-binding-win32-arm64-msvc@1.12.2': @@ -13356,13 +13288,13 @@ snapshots: chai: 6.2.2 tinyrainbow: 3.1.1 - '@vitest/mocker@4.1.10(vite@8.1.5(@types/node@20.19.43)(yaml@2.9.0))': + '@vitest/mocker@4.1.10(vite@8.2.0(@types/node@20.19.43)(yaml@2.9.0))': dependencies: '@vitest/spy': 4.1.10 estree-walker: 3.0.3 magic-string: 0.30.21 optionalDependencies: - vite: 8.1.5(@types/node@20.19.43)(yaml@2.9.0) + vite: 8.2.0(@types/node@20.19.43)(yaml@2.9.0) '@vitest/pretty-format@4.1.10': dependencies: @@ -13430,6 +13362,8 @@ snapshots: adm-zip@0.5.18: {} + adm-zip@0.6.0: {} + agent-base@6.0.2: dependencies: debug: 4.4.3(supports-color@8.1.1) @@ -13457,7 +13391,7 @@ snapshots: ajv@8.20.0: dependencies: fast-deep-equal: 3.1.3 - fast-uri: 4.1.1 + fast-uri: 4.1.2 json-schema-traverse: 1.0.0 require-from-string: 2.0.2 @@ -13636,9 +13570,9 @@ snapshots: dependencies: possible-typed-array-names: 1.1.0 - axios-mock-adapter@2.1.0(axios@1.18.1): + axios-mock-adapter@2.1.0(axios@1.19.0): dependencies: - axios: 1.18.1(debug@4.4.3) + axios: 1.19.0(debug@4.4.3) fast-deep-equal: 3.1.3 is-buffer: 2.0.5 @@ -13652,7 +13586,7 @@ snapshots: - debug - supports-color - axios@1.18.1(debug@4.4.3): + axios@1.19.0(debug@4.4.3): dependencies: follow-redirects: 1.16.0(debug@4.4.3) form-data: 4.0.6 @@ -13711,7 +13645,7 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: '@babel/template': 7.29.7 - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.28.0 @@ -13778,7 +13712,7 @@ snapshots: base64-js@1.5.1: {} - baseline-browser-mapping@2.11.6: {} + baseline-browser-mapping@2.11.12: {} bidi-js@1.0.3: dependencies: @@ -13824,7 +13758,7 @@ snapshots: bowser@2.14.1: {} - brace-expansion@5.0.8: + brace-expansion@5.0.9: dependencies: balanced-match: 4.0.4 @@ -13840,10 +13774,10 @@ snapshots: browserslist@4.28.7: dependencies: - baseline-browser-mapping: 2.11.6 + baseline-browser-mapping: 2.11.12 caniuse-lite: 1.0.30001806 - electron-to-chromium: 1.5.398 - node-releases: 2.0.51 + electron-to-chromium: 1.5.400 + node-releases: 2.0.52 update-browserslist-db: 1.2.3(browserslist@4.28.7) bs-logger@0.2.6: @@ -14081,7 +14015,7 @@ snapshots: hyperlinker: 1.0.0 indent-string: 4.0.0 is-wsl: 2.2.0 - js-yaml: 5.2.2 + js-yaml: 5.2.3 lodash: 4.18.1 natural-orderby: 2.0.3 object-treeify: 1.1.33 @@ -14564,8 +14498,6 @@ snapshots: optionalDependencies: highlight.js: 11.11.1 - diff@3.5.1: {} - diff@4.0.4: {} diff@5.2.2: {} @@ -14634,7 +14566,7 @@ snapshots: dependencies: jake: 10.9.4 - electron-to-chromium@1.5.398: {} + electron-to-chromium@1.5.400: {} elegant-spinner@1.0.1: {} @@ -14652,7 +14584,7 @@ snapshots: dependencies: once: 1.4.0 - enhanced-resolve@5.24.4: + enhanced-resolve@5.24.5: dependencies: graceful-fs: 4.2.11 tapable: 2.3.3 @@ -14806,8 +14738,8 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) eslint-config-xo-space: 0.35.0(eslint@10.8.0) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 15.7.0(eslint@10.8.0) eslint-plugin-perfectionist: 2.11.0(eslint@10.8.0)(typescript@5.9.3) @@ -14859,18 +14791,18 @@ snapshots: '@eslint/eslintrc': 3.3.6 '@eslint/js': 9.39.5 '@stylistic/eslint-plugin': 3.1.0(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) eslint-config-xo: 0.49.0(eslint@10.8.0) eslint-config-xo-space: 0.35.0(eslint@10.8.0) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) eslint-plugin-jsdoc: 50.8.0(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 17.24.0(eslint@10.8.0)(typescript@4.9.5) eslint-plugin-perfectionist: 4.15.1(eslint@10.8.0)(typescript@4.9.5) eslint-plugin-unicorn: 56.0.1(eslint@10.8.0) - typescript-eslint: 8.65.0(eslint@10.8.0)(typescript@4.9.5) + typescript-eslint: 8.66.0(eslint@10.8.0)(typescript@4.9.5) transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -14884,18 +14816,18 @@ snapshots: '@eslint/eslintrc': 3.3.6 '@eslint/js': 9.39.5 '@stylistic/eslint-plugin': 3.1.0(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@5.9.3) eslint-config-xo: 0.49.0(eslint@10.8.0) eslint-config-xo-space: 0.35.0(eslint@10.8.0) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) eslint-plugin-jsdoc: 50.8.0(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 17.24.0(eslint@10.8.0)(typescript@5.9.3) eslint-plugin-perfectionist: 4.15.1(eslint@10.8.0)(typescript@5.9.3) eslint-plugin-unicorn: 56.0.1(eslint@10.8.0) - typescript-eslint: 8.65.0(eslint@10.8.0)(typescript@5.9.3) + typescript-eslint: 8.66.0(eslint@10.8.0)(typescript@5.9.3) transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -14909,18 +14841,18 @@ snapshots: '@eslint/eslintrc': 3.3.6 '@eslint/js': 9.39.5 '@stylistic/eslint-plugin': 3.1.0(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@6.0.3) eslint-config-xo: 0.49.0(eslint@10.8.0) eslint-config-xo-space: 0.35.0(eslint@10.8.0) eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) eslint-plugin-jsdoc: 50.8.0(eslint@10.8.0) eslint-plugin-mocha: 10.5.0(eslint@10.8.0) eslint-plugin-n: 17.24.0(eslint@10.8.0)(typescript@6.0.3) eslint-plugin-perfectionist: 4.15.1(eslint@10.8.0)(typescript@6.0.3) eslint-plugin-unicorn: 56.0.1(eslint@10.8.0) - typescript-eslint: 8.65.0(eslint@10.8.0)(typescript@6.0.3) + typescript-eslint: 8.66.0(eslint@10.8.0)(typescript@6.0.3) transitivePeerDependencies: - eslint - eslint-import-resolver-webpack @@ -14969,18 +14901,33 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0): + dependencies: + '@nolyfill/is-core-module': 1.0.39 + debug: 4.4.3(supports-color@8.1.1) + eslint: 10.8.0 + get-tsconfig: 4.14.1 + is-bun-module: 2.0.0 + stable-hash: 0.0.5 + tinyglobby: 0.2.17 + unrs-resolver: 1.12.2 + optionalDependencies: + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) + transitivePeerDependencies: + - supports-color + eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) eslint: 10.8.0 - get-tsconfig: 4.14.0 + get-tsconfig: 4.14.1 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.17 unrs-resolver: 1.12.2 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) transitivePeerDependencies: - supports-color @@ -14995,6 +14942,17 @@ snapshots: transitivePeerDependencies: - supports-color + eslint-module-utils@2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): + dependencies: + debug: 3.2.7 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) + eslint: 10.8.0 + eslint-import-resolver-node: 0.3.10 + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0) + transitivePeerDependencies: + - supports-color + eslint-module-utils@2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: debug: 3.2.7 @@ -15006,33 +14964,33 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@5.9.3) eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0) transitivePeerDependencies: - supports-color - eslint-module-utils@2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-module-utils@2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@6.0.3) eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@10.8.0) @@ -15087,6 +15045,35 @@ snapshots: - eslint-import-resolver-webpack - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): + dependencies: + '@rtsao/scc': 1.1.0 + array-includes: 3.1.9 + array.prototype.findlastindex: 1.2.6 + array.prototype.flat: 1.3.3 + array.prototype.flatmap: 1.3.3 + debug: 3.2.7 + doctrine: 2.1.0 + eslint: 10.8.0 + eslint-import-resolver-node: 0.3.10 + eslint-module-utils: 2.14.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) + hasown: 2.0.4 + is-core-module: 2.16.2 + is-glob: 4.0.3 + minimatch: 3.1.5 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 + object.values: 1.2.1 + semver: 6.3.1 + string.prototype.trimend: 1.0.10 + tsconfig-paths: 3.15.0 + optionalDependencies: + '@typescript-eslint/parser': 6.21.0(eslint@10.8.0)(typescript@5.9.3) + transitivePeerDependencies: + - eslint-import-resolver-typescript + - eslint-import-resolver-webpack + - supports-color + eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 @@ -15116,7 +15103,7 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15127,7 +15114,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -15139,13 +15126,13 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15156,7 +15143,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0))(eslint@10.8.0))(eslint@10.8.0) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -15168,13 +15155,13 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@5.9.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): + eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.9 @@ -15185,7 +15172,7 @@ snapshots: doctrine: 2.1.0 eslint: 10.8.0 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) + eslint-module-utils: 2.14.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@10.8.0) hasown: 2.0.4 is-core-module: 2.16.2 is-glob: 4.0.3 @@ -15197,7 +15184,7 @@ snapshots: string.prototype.trimend: 1.0.10 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@6.0.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -15247,10 +15234,10 @@ snapshots: eslint-plugin-n@17.24.0(eslint@10.8.0)(typescript@4.9.5): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - enhanced-resolve: 5.24.4 + enhanced-resolve: 5.24.5 eslint: 10.8.0 eslint-plugin-es-x: 7.8.0(eslint@10.8.0) - get-tsconfig: 4.14.0 + get-tsconfig: 4.14.1 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -15262,10 +15249,10 @@ snapshots: eslint-plugin-n@17.24.0(eslint@10.8.0)(typescript@5.9.3): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - enhanced-resolve: 5.24.4 + enhanced-resolve: 5.24.5 eslint: 10.8.0 eslint-plugin-es-x: 7.8.0(eslint@10.8.0) - get-tsconfig: 4.14.0 + get-tsconfig: 4.14.1 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -15277,10 +15264,10 @@ snapshots: eslint-plugin-n@17.24.0(eslint@10.8.0)(typescript@6.0.3): dependencies: '@eslint-community/eslint-utils': 4.10.1(eslint@10.8.0) - enhanced-resolve: 5.24.4 + enhanced-resolve: 5.24.5 eslint: 10.8.0 eslint-plugin-es-x: 7.8.0(eslint@10.8.0) - get-tsconfig: 4.14.0 + get-tsconfig: 4.14.1 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -15331,8 +15318,8 @@ snapshots: eslint-plugin-perfectionist@4.15.1(eslint@10.8.0)(typescript@4.9.5): dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) eslint: 10.8.0 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -15341,8 +15328,8 @@ snapshots: eslint-plugin-perfectionist@4.15.1(eslint@10.8.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) eslint: 10.8.0 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -15351,8 +15338,8 @@ snapshots: eslint-plugin-perfectionist@4.15.1(eslint@10.8.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/types': 8.65.0 - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/types': 8.66.0 + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) eslint: 10.8.0 natural-orderby: 5.0.0 transitivePeerDependencies: @@ -15632,7 +15619,7 @@ snapshots: fancy-test@2.0.42: dependencies: '@types/chai': 4.3.20 - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.25 '@types/node': 20.19.43 '@types/sinon': 17.0.4 lodash: 4.18.1 @@ -15645,7 +15632,7 @@ snapshots: fancy-test@3.0.16: dependencies: '@types/chai': 4.3.20 - '@types/lodash': 4.17.24 + '@types/lodash': 4.17.25 '@types/node': 20.19.43 '@types/sinon': 17.0.4 lodash: 4.18.1 @@ -15681,7 +15668,7 @@ snapshots: dependencies: fastest-levenshtein: 1.0.16 - fast-uri@4.1.1: {} + fast-uri@4.1.2: {} fastest-levenshtein@1.0.16: {} @@ -15775,12 +15762,12 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.4.3 + flatted: 3.4.4 keyv: 4.5.4 flat@5.0.2: {} - flatted@3.4.3: {} + flatted@3.4.4: {} fn.name@1.1.0: {} @@ -15907,18 +15894,10 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.14.0: + get-tsconfig@4.14.1: dependencies: resolve-pkg-maps: 1.0.0 - git-diff@2.0.7: - dependencies: - chalk: 2.4.2 - diff: 3.5.1 - loglevel: 1.9.2 - shelljs: 0.8.5 - shelljs.exec: 1.1.8 - git-raw-commits@5.0.1(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0): dependencies: '@conventional-changelog/git-client': 2.7.0(conventional-commits-filter@5.0.0)(conventional-commits-parser@6.4.0) @@ -16571,7 +16550,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -16581,7 +16560,7 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: '@babel/core': 7.29.7 - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@istanbuljs/schema': 0.1.6 istanbul-lib-coverage: 3.2.2 semver: 7.8.5 @@ -17353,10 +17332,10 @@ snapshots: jest-snapshot@29.7.0: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 @@ -17378,10 +17357,10 @@ snapshots: jest-snapshot@30.4.1: dependencies: '@babel/core': 7.29.7 - '@babel/generator': 7.29.7 + '@babel/generator': 7.29.8 '@babel/plugin-syntax-jsx': 7.29.7(@babel/core@7.29.7) '@babel/plugin-syntax-typescript': 7.29.7(@babel/core@7.29.7) - '@babel/types': 7.29.7 + '@babel/types': 7.29.8 '@jest/expect-utils': 30.4.1 '@jest/get-type': 30.1.0 '@jest/snapshot-utils': 30.4.1 @@ -17525,7 +17504,7 @@ snapshots: js-tokens@4.0.0: {} - js-yaml@5.2.2: + js-yaml@5.2.3: dependencies: argparse: 2.0.1 @@ -17571,7 +17550,7 @@ snapshots: jsdoc@4.0.5: dependencies: - '@babel/parser': 7.29.7 + '@babel/parser': 7.29.8 '@jsdoc/salty': 0.2.12 '@types/markdown-it': 14.1.2 bluebird: 3.7.2 @@ -17608,7 +17587,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.21.1 + ws: 8.21.2 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -17743,11 +17722,11 @@ snapshots: dependencies: uc.micro: 2.1.0 - lint-staged@17.2.0: + lint-staged@17.3.0: dependencies: picomatch: 4.0.5 string-argv: 0.3.2 - tinyexec: 1.2.4 + tinyexec: 1.3.0 optionalDependencies: yaml: 2.9.0 @@ -17868,8 +17847,6 @@ snapshots: safe-stable-stringify: 2.5.0 triple-beam: 1.4.1 - loglevel@1.9.2: {} - loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 @@ -17975,23 +17952,23 @@ snapshots: minimatch@10.2.6: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimatch@3.1.5: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimatch@5.1.9: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimatch@9.0.3: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimatch@9.0.9: dependencies: - brace-expansion: 5.0.8 + brace-expansion: 5.0.9 minimist@1.2.8: {} @@ -18022,7 +17999,7 @@ snapshots: find-up: 5.0.0 glob: 8.1.0 he: 1.2.0 - js-yaml: 5.2.2 + js-yaml: 5.2.3 log-symbols: 4.1.0 minimatch: 5.1.9 ms: 2.1.3 @@ -18034,7 +18011,7 @@ snapshots: yargs-parser: 20.2.9 yargs-unparser: 2.0.0 - mocha@11.7.6: + mocha@11.8.0: dependencies: browser-stdout: 1.3.1 chokidar: 4.0.3 @@ -18045,7 +18022,7 @@ snapshots: glob: 10.5.0 he: 1.2.0 is-path-inside: 3.0.3 - js-yaml: 5.2.2 + js-yaml: 5.2.3 log-symbols: 4.1.0 minimatch: 9.0.9 ms: 2.1.3 @@ -18076,7 +18053,7 @@ snapshots: mute-stream@2.0.0: {} - nanoid@3.3.16: {} + nanoid@3.3.17: {} napi-postinstall@0.3.4: {} @@ -18141,7 +18118,7 @@ snapshots: dependencies: process-on-spawn: 1.1.0 - node-releases@2.0.51: {} + node-releases@2.0.52: {} nopt@1.0.10: dependencies: @@ -18295,15 +18272,15 @@ snapshots: oclif@4.23.29: dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 + '@aws-sdk/client-cloudfront': 3.1102.0 + '@aws-sdk/client-s3': 3.1102.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90 - '@oclif/plugin-warn-if-update-available': 3.1.70 + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@oclif/plugin-not-found': 3.2.91 + '@oclif/plugin-warn-if-update-available': 3.1.71 ansis: 3.17.0 async-retry: 1.3.3 change-case: 4.1.2 @@ -18324,15 +18301,15 @@ snapshots: oclif@4.23.29(@types/node@14.18.63): dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 + '@aws-sdk/client-cloudfront': 3.1102.0 + '@aws-sdk/client-s3': 3.1102.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90(@types/node@14.18.63) - '@oclif/plugin-warn-if-update-available': 3.1.70 + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@oclif/plugin-not-found': 3.2.91(@types/node@14.18.63) + '@oclif/plugin-warn-if-update-available': 3.1.71 ansis: 3.17.0 async-retry: 1.3.3 change-case: 4.1.2 @@ -18353,15 +18330,15 @@ snapshots: oclif@4.23.29(@types/node@18.19.130): dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 + '@aws-sdk/client-cloudfront': 3.1102.0 + '@aws-sdk/client-s3': 3.1102.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90(@types/node@18.19.130) - '@oclif/plugin-warn-if-update-available': 3.1.70 + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@oclif/plugin-not-found': 3.2.91(@types/node@18.19.130) + '@oclif/plugin-warn-if-update-available': 3.1.71 ansis: 3.17.0 async-retry: 1.3.3 change-case: 4.1.2 @@ -18382,15 +18359,15 @@ snapshots: oclif@4.23.29(@types/node@20.19.43): dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 + '@aws-sdk/client-cloudfront': 3.1102.0 + '@aws-sdk/client-s3': 3.1102.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90(@types/node@20.19.43) - '@oclif/plugin-warn-if-update-available': 3.1.70 + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@oclif/plugin-not-found': 3.2.91(@types/node@20.19.43) + '@oclif/plugin-warn-if-update-available': 3.1.71 ansis: 3.17.0 async-retry: 1.3.3 change-case: 4.1.2 @@ -18411,15 +18388,15 @@ snapshots: oclif@4.23.29(@types/node@22.20.1): dependencies: - '@aws-sdk/client-cloudfront': 3.1097.0 - '@aws-sdk/client-s3': 3.1097.0 + '@aws-sdk/client-cloudfront': 3.1102.0 + '@aws-sdk/client-s3': 3.1102.0 '@inquirer/confirm': 3.2.0 '@inquirer/input': 2.3.0 '@inquirer/select': 2.5.0 - '@oclif/core': 4.13.2 - '@oclif/plugin-help': 6.2.55 - '@oclif/plugin-not-found': 3.2.90(@types/node@22.20.1) - '@oclif/plugin-warn-if-update-available': 3.1.70 + '@oclif/core': 4.13.3 + '@oclif/plugin-help': 6.2.56 + '@oclif/plugin-not-found': 3.2.91(@types/node@22.20.1) + '@oclif/plugin-warn-if-update-available': 3.1.71 ansis: 3.17.0 async-retry: 1.3.3 change-case: 4.1.2 @@ -18664,9 +18641,9 @@ snapshots: possible-typed-array-names@1.1.0: {} - postcss@8.5.24: + postcss@8.5.25: dependencies: - nanoid: 3.3.16 + nanoid: 3.3.17 picocolors: 1.1.1 source-map-js: 1.2.1 @@ -19020,56 +18997,56 @@ snapshots: glob: 13.0.6 package-json-from-dist: 1.0.1 - rolldown@1.1.5: + rolldown@1.2.2: dependencies: - '@oxc-project/types': 0.139.0 + '@oxc-project/types': 0.142.0 '@rolldown/pluginutils': 1.0.1 optionalDependencies: - '@rolldown/binding-android-arm64': 1.1.5 - '@rolldown/binding-darwin-arm64': 1.1.5 - '@rolldown/binding-darwin-x64': 1.1.5 - '@rolldown/binding-freebsd-x64': 1.1.5 - '@rolldown/binding-linux-arm-gnueabihf': 1.1.5 - '@rolldown/binding-linux-arm64-gnu': 1.1.5 - '@rolldown/binding-linux-arm64-musl': 1.1.5 - '@rolldown/binding-linux-ppc64-gnu': 1.1.5 - '@rolldown/binding-linux-s390x-gnu': 1.1.5 - '@rolldown/binding-linux-x64-gnu': 1.1.5 - '@rolldown/binding-linux-x64-musl': 1.1.5 - '@rolldown/binding-openharmony-arm64': 1.1.5 - '@rolldown/binding-wasm32-wasi': 1.1.5 - '@rolldown/binding-win32-arm64-msvc': 1.1.5 - '@rolldown/binding-win32-x64-msvc': 1.1.5 - - rollup@4.62.3: + '@rolldown/binding-android-arm64': 1.2.2 + '@rolldown/binding-darwin-arm64': 1.2.2 + '@rolldown/binding-darwin-x64': 1.2.2 + '@rolldown/binding-freebsd-x64': 1.2.2 + '@rolldown/binding-linux-arm-gnueabihf': 1.2.2 + '@rolldown/binding-linux-arm64-gnu': 1.2.2 + '@rolldown/binding-linux-arm64-musl': 1.2.2 + '@rolldown/binding-linux-ppc64-gnu': 1.2.2 + '@rolldown/binding-linux-s390x-gnu': 1.2.2 + '@rolldown/binding-linux-x64-gnu': 1.2.2 + '@rolldown/binding-linux-x64-musl': 1.2.2 + '@rolldown/binding-openharmony-arm64': 1.2.2 + '@rolldown/binding-win32-arm64-msvc': 1.2.2 + '@rolldown/binding-win32-x64-msvc': 1.2.2 + + rollup@4.62.4: dependencies: '@types/estree': 1.0.9 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.62.3 - '@rollup/rollup-android-arm64': 4.62.3 - '@rollup/rollup-darwin-arm64': 4.62.3 - '@rollup/rollup-darwin-x64': 4.62.3 - '@rollup/rollup-freebsd-arm64': 4.62.3 - '@rollup/rollup-freebsd-x64': 4.62.3 - '@rollup/rollup-linux-arm-gnueabihf': 4.62.3 - '@rollup/rollup-linux-arm-musleabihf': 4.62.3 - '@rollup/rollup-linux-arm64-gnu': 4.62.3 - '@rollup/rollup-linux-arm64-musl': 4.62.3 - '@rollup/rollup-linux-loong64-gnu': 4.62.3 - '@rollup/rollup-linux-loong64-musl': 4.62.3 - '@rollup/rollup-linux-ppc64-gnu': 4.62.3 - '@rollup/rollup-linux-ppc64-musl': 4.62.3 - '@rollup/rollup-linux-riscv64-gnu': 4.62.3 - '@rollup/rollup-linux-riscv64-musl': 4.62.3 - '@rollup/rollup-linux-s390x-gnu': 4.62.3 - '@rollup/rollup-linux-x64-gnu': 4.62.3 - '@rollup/rollup-linux-x64-musl': 4.62.3 - '@rollup/rollup-openbsd-x64': 4.62.3 - '@rollup/rollup-openharmony-arm64': 4.62.3 - '@rollup/rollup-win32-arm64-msvc': 4.62.3 - '@rollup/rollup-win32-ia32-msvc': 4.62.3 - '@rollup/rollup-win32-x64-gnu': 4.62.3 - '@rollup/rollup-win32-x64-msvc': 4.62.3 + '@napi-rs/lzma-linux-x64-gnu': 1.5.1 + '@rollup/rollup-android-arm-eabi': 4.62.4 + '@rollup/rollup-android-arm64': 4.62.4 + '@rollup/rollup-darwin-arm64': 4.62.4 + '@rollup/rollup-darwin-x64': 4.62.4 + '@rollup/rollup-freebsd-arm64': 4.62.4 + '@rollup/rollup-freebsd-x64': 4.62.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.62.4 + '@rollup/rollup-linux-arm-musleabihf': 4.62.4 + '@rollup/rollup-linux-arm64-gnu': 4.62.4 + '@rollup/rollup-linux-arm64-musl': 4.62.4 + '@rollup/rollup-linux-loong64-gnu': 4.62.4 + '@rollup/rollup-linux-loong64-musl': 4.62.4 + '@rollup/rollup-linux-ppc64-gnu': 4.62.4 + '@rollup/rollup-linux-ppc64-musl': 4.62.4 + '@rollup/rollup-linux-riscv64-gnu': 4.62.4 + '@rollup/rollup-linux-riscv64-musl': 4.62.4 + '@rollup/rollup-linux-s390x-gnu': 4.62.4 + '@rollup/rollup-linux-x64-gnu': 4.62.4 + '@rollup/rollup-linux-x64-musl': 4.62.4 + '@rollup/rollup-openbsd-x64': 4.62.4 + '@rollup/rollup-openharmony-arm64': 4.62.4 + '@rollup/rollup-win32-arm64-msvc': 4.62.4 + '@rollup/rollup-win32-ia32-msvc': 4.62.4 + '@rollup/rollup-win32-x64-gnu': 4.62.4 + '@rollup/rollup-win32-x64-msvc': 4.62.4 fsevents: 2.3.3 rrweb-cssom@0.6.0: {} @@ -19214,19 +19191,11 @@ snapshots: shebang-regex@3.0.0: {} - shelljs.exec@1.1.8: {} - shelljs@0.10.0: dependencies: execa: 5.1.1 fast-glob: 3.3.3 - shelljs@0.8.5: - dependencies: - glob: 7.2.3 - interpret: 1.4.0 - rechoir: 0.6.2 - shelljs@0.9.2: dependencies: execa: 1.0.0 @@ -19655,7 +19624,7 @@ snapshots: tinybench@2.9.0: {} - tinyexec@1.2.4: {} + tinyexec@1.3.0: {} tinyglobby@0.2.17: dependencies: @@ -20057,34 +20026,34 @@ snapshots: typedarray@0.0.6: {} - typescript-eslint@8.65.0(eslint@10.8.0)(typescript@4.9.5): + typescript-eslint@8.66.0(eslint@10.8.0)(typescript@4.9.5): dependencies: - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@4.9.5) - '@typescript-eslint/typescript-estree': 8.65.0(typescript@4.9.5) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@4.9.5))(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@4.9.5) + '@typescript-eslint/typescript-estree': 8.66.0(typescript@4.9.5) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@4.9.5) eslint: 10.8.0 typescript: 4.9.5 transitivePeerDependencies: - supports-color - typescript-eslint@8.65.0(eslint@10.8.0)(typescript@5.9.3): + typescript-eslint@8.66.0(eslint@10.8.0)(typescript@5.9.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@5.9.3) - '@typescript-eslint/typescript-estree': 8.65.0(typescript@5.9.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@5.9.3))(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@5.9.3) + '@typescript-eslint/typescript-estree': 8.66.0(typescript@5.9.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@5.9.3) eslint: 10.8.0 typescript: 5.9.3 transitivePeerDependencies: - supports-color - typescript-eslint@8.65.0(eslint@10.8.0)(typescript@6.0.3): + typescript-eslint@8.66.0(eslint@10.8.0)(typescript@6.0.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.65.0(@typescript-eslint/parser@8.65.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/parser': 8.65.0(eslint@10.8.0)(typescript@6.0.3) - '@typescript-eslint/typescript-estree': 8.65.0(typescript@6.0.3) - '@typescript-eslint/utils': 8.65.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/eslint-plugin': 8.66.0(@typescript-eslint/parser@8.66.0(eslint@10.8.0)(typescript@6.0.3))(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/parser': 8.66.0(eslint@10.8.0)(typescript@6.0.3) + '@typescript-eslint/typescript-estree': 8.66.0(typescript@6.0.3) + '@typescript-eslint/utils': 8.66.0(eslint@10.8.0)(typescript@6.0.3) eslint: 10.8.0 typescript: 6.0.3 transitivePeerDependencies: @@ -20228,22 +20197,22 @@ snapshots: vary@1.1.2: {} - vite@8.1.5(@types/node@20.19.43)(yaml@2.9.0): + vite@8.2.0(@types/node@20.19.43)(yaml@2.9.0): dependencies: lightningcss: 1.33.0 picomatch: 4.0.5 - postcss: 8.5.24 - rolldown: 1.1.5 + postcss: 8.5.25 + rolldown: 1.2.2 tinyglobby: 0.2.17 optionalDependencies: '@types/node': 20.19.43 fsevents: 2.3.3 yaml: 2.9.0 - vitest@4.1.10(@types/node@20.19.43)(jsdom@23.2.0)(vite@8.1.5(@types/node@20.19.43)(yaml@2.9.0)): + vitest@4.1.10(@types/node@20.19.43)(jsdom@23.2.0)(vite@8.2.0(@types/node@20.19.43)(yaml@2.9.0)): dependencies: '@vitest/expect': 4.1.10 - '@vitest/mocker': 4.1.10(vite@8.1.5(@types/node@20.19.43)(yaml@2.9.0)) + '@vitest/mocker': 4.1.10(vite@8.2.0(@types/node@20.19.43)(yaml@2.9.0)) '@vitest/pretty-format': 4.1.10 '@vitest/runner': 4.1.10 '@vitest/snapshot': 4.1.10 @@ -20257,10 +20226,10 @@ snapshots: picomatch: 4.0.5 std-env: 4.2.0 tinybench: 2.9.0 - tinyexec: 1.2.4 + tinyexec: 1.3.0 tinyglobby: 0.2.17 tinyrainbow: 3.1.1 - vite: 8.1.5(@types/node@20.19.43)(yaml@2.9.0) + vite: 8.2.0(@types/node@20.19.43)(yaml@2.9.0) why-is-node-running: 2.3.0 optionalDependencies: '@types/node': 20.19.43 @@ -20450,7 +20419,7 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 4.1.0 - ws@8.21.1: {} + ws@8.21.2: {} xdg-basedir@4.0.0: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 5db7677a6..94cd8fe3b 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -4,7 +4,7 @@ overrides: tmp: 0.2.7 uuid: 14.0.1 lodash: 4.18.1 - brace-expansion: 5.0.8 - js-yaml: 5.2.2 - fast-uri: 4.1.1 - ws: 8.21.1 + brace-expansion: 5.0.9 + js-yaml: 5.2.3 + fast-uri: 4.1.2 + ws: 8.21.2