diff --git a/.talismanrc b/.talismanrc index b54938c5e..5a23dec13 100644 --- a/.talismanrc +++ b/.talismanrc @@ -1,4 +1,6 @@ fileignoreconfig: - filename: pnpm-lock.yaml - checksum: 8b5a2f43585d3191cdc71ad611f50c94b6d13fb7442cf4218ee0851a068af178 + checksum: 0efb2a2f86f58006abbacf7de17e0d498824c046d1d3cb58c6a64b7364e93ff5 + - filename: packages/contentstack-audit/src/modules/assets.ts + checksum: 968dde65ca1e6526d3a16766c86d4d9976752ba8589c27facbbb4df7a8f1f963 version: '1.0' diff --git a/packages/contentstack-audit/README.md b/packages/contentstack-audit/README.md index 9f2c53d70..4217deaaf 100644 --- a/packages/contentstack-audit/README.md +++ b/packages/contentstack-audit/README.md @@ -19,7 +19,7 @@ $ npm install -g @contentstack/cli-audit $ csdx COMMAND running command... $ csdx (--version|-v) -@contentstack/cli-audit/2.0.0-beta.6 darwin-arm64 node-v24.13.0 +@contentstack/cli-audit/2.0.0-beta.9 darwin-arm64 node-v22.13.1 $ csdx --help [COMMAND] USAGE $ csdx COMMAND diff --git a/packages/contentstack-audit/src/config/index.ts b/packages/contentstack-audit/src/config/index.ts index 457e5e59b..5e36e0d90 100644 --- a/packages/contentstack-audit/src/config/index.ts +++ b/packages/contentstack-audit/src/config/index.ts @@ -110,6 +110,7 @@ const config = { 'publish_locale', 'publish_environment', 'asset_uid', + 'space_id', 'selectedValue', 'ct_uid', 'action', diff --git a/packages/contentstack-audit/src/messages/index.ts b/packages/contentstack-audit/src/messages/index.ts index 3ac92d09e..76d7f3f3e 100644 --- a/packages/contentstack-audit/src/messages/index.ts +++ b/packages/contentstack-audit/src/messages/index.ts @@ -44,6 +44,7 @@ const auditMsg = { ENTRY_PUBLISH_DETAILS: `Removing the publish details for entry '{uid}' of ct '{ctuid}' in locale '{locale}' as locale '{publocale}' or environment '{environment}' does not exist`, CT_REFERENCE_FIELD: `The mentioned Reference field is not Array field reference is '{reference_to}' having display name '{display_name}''`, ASSET_NOT_EXIST: `The publish_details either does not exist or is not an array for asset uid '{uid}'`, + AUDITING_SPACE: `Auditing assets for space: '{spaceId}'`, ENTRY_PUBLISH_DETAILS_NOT_EXIST: `The publish_details either does not exist or is not an array for entry uid '{uid}'`, FIELD_RULE_CONDITION_ABSENT: `The operand field '{condition_field}' is not present in the schema of the content-type {ctUid}`, FIELD_RULE_TARGET_ABSENT: `The target field '{target_field}' is not present in the schema of the content-type {ctUid}`, diff --git a/packages/contentstack-audit/src/modules/assets.ts b/packages/contentstack-audit/src/modules/assets.ts index 6e84abc78..c6c1a637b 100644 --- a/packages/contentstack-audit/src/modules/assets.ts +++ b/packages/contentstack-audit/src/modules/assets.ts @@ -1,12 +1,7 @@ import { join, resolve } from 'path'; -import { existsSync, readFileSync, writeFileSync } from 'fs'; -import { FsUtility, sanitizePath, cliux, log } from '@contentstack/cli-utilities'; -import { - ContentTypeStruct, - CtConstructorParam, - ModuleConstructorParam, - EntryStruct, -} from '../types'; +import { existsSync, readFileSync, readdirSync, writeFileSync } from 'fs'; +import { FsUtility, sanitizePath, cliux, log, configHandler } from '@contentstack/cli-utilities'; +import { ContentTypeStruct, CtConstructorParam, ModuleConstructorParam, EntryStruct } from '../types'; import auditConfig from '../config'; import { $t, auditFixMsg, auditMsg, commonMsg } from '../messages'; import values from 'lodash/values'; @@ -28,6 +23,7 @@ export default class Assets extends BaseClass { protected missingEnvLocales: Record = {}; public moduleName: keyof typeof auditConfig.moduleConfig; private fixOverwriteConfirmed: boolean | null = null; + private resolvedBasePaths: Array<{ path: string; spaceId: string | null }> = []; constructor({ fix, config, moduleName }: ModuleConstructorParam & CtConstructorParam) { super({ config }); @@ -62,7 +58,8 @@ export default class Assets extends BaseClass { log.debug(`Data directory: ${this.folderPath}`, this.config.auditContext); log.debug(`Fix mode: ${this.fix}`, this.config.auditContext); - if (!existsSync(this.folderPath)) { + const spacesDir = join(this.config.basePath, 'spaces'); + if (!existsSync(this.folderPath) && !existsSync(spacesDir)) { log.debug(`Skipping ${this.moduleName} audit - path does not exist`, this.config.auditContext); log.warn(`Skipping ${this.moduleName} audit`, this.config.auditContext); cliux.print($t(auditMsg.NOT_VALID_PATH, { path: this.folderPath }), { color: 'yellow' }); @@ -80,26 +77,32 @@ export default class Assets extends BaseClass { progress.updateStatus('Validating asset references...'); } + this.resolvedBasePaths = this.resolveAssetBasePaths(); + log.debug(`Resolved ${this.resolvedBasePaths.length} asset base path(s)`, this.config.auditContext); + log.debug('Starting asset Reference, Environment and Locale validation', this.config.auditContext); await this.lookForReference(); - if (returnFixSchema) { - log.debug(`Returning fixed schema with ${this.schema?.length || 0} items`, this.config.auditContext); - return this.schema; - } + if (returnFixSchema) { + log.debug(`Returning fixed schema with ${this.schema?.length || 0} items`, this.config.auditContext); + return this.schema; + } - log.debug('Cleaning up empty missing environment/locale references', this.config.auditContext); - for (let propName in this.missingEnvLocales) { - if (Array.isArray(this.missingEnvLocales[propName])) { - if (!this.missingEnvLocales[propName].length) { - delete this.missingEnvLocales[propName]; + log.debug('Cleaning up empty missing environment/locale references', this.config.auditContext); + for (let propName in this.missingEnvLocales) { + if (Array.isArray(this.missingEnvLocales[propName])) { + if (!this.missingEnvLocales[propName].length) { + delete this.missingEnvLocales[propName]; + } } } - } const totalIssues = Object.keys(this.missingEnvLocales).length; - log.debug(`${this.moduleName} audit completed. Found ${totalIssues} assets with missing environment/locale references`, this.config.auditContext); - + log.debug( + `${this.moduleName} audit completed. Found ${totalIssues} assets with missing environment/locale references`, + this.config.auditContext, + ); + this.completeProgress(true); return this.missingEnvLocales; } catch (error: any) { @@ -120,11 +123,11 @@ export default class Assets extends BaseClass { const localesFolderPath = resolve(this.config.basePath, this.config.moduleConfig.locales.dirName); const localesPath = join(localesFolderPath, this.config.moduleConfig.locales.fileName); const masterLocalesPath = join(localesFolderPath, 'master-locale.json'); - + log.debug(`Loading locales from: ${localesFolderPath}`, this.config.auditContext); log.debug(`Master locales path: ${masterLocalesPath}`, this.config.auditContext); log.debug(`Locales path: ${localesPath}`, this.config.auditContext); - + this.locales = existsSync(masterLocalesPath) ? values(JSON.parse(readFileSync(masterLocalesPath, 'utf8'))) : []; log.debug(`Loaded ${this.locales.length} locales from master-locale.json`, this.config.auditContext); @@ -139,19 +142,53 @@ export default class Assets extends BaseClass { this.locales = this.locales.map((locale: any) => locale.code); log.debug(`Total locales loaded: ${this.locales.length}`, this.config.auditContext); log.debug(`Locale codes: ${this.locales.join(', ')}`, this.config.auditContext); - + const environmentPath = resolve( this.config.basePath, this.config.moduleConfig.environments.dirName, this.config.moduleConfig.environments.fileName, ); log.debug(`Loading environments from: ${environmentPath}`, this.config.auditContext); - + this.environments = existsSync(environmentPath) ? keys(JSON.parse(readFileSync(environmentPath, 'utf8'))) : []; log.debug(`Total environments loaded: ${this.environments.length}`, this.config.auditContext); log.debug(`Environment names: ${this.environments.join(', ')}`, this.config.auditContext); } + /** + * Detects whether the export uses the old flat structure (/assets/) or the new + * multi-space structure (/spaces//assets/) and returns a list of resolved + * asset base paths paired with their space IDs (null for old structure). + */ + private resolveAssetBasePaths(): Array<{ path: string; spaceId: string | null }> { + const spacesDir = join(this.config.basePath, 'spaces'); + + if (!existsSync(spacesDir)) { + log.debug('No spaces/ directory found — using flat asset structure', this.config.auditContext); + return [{ path: this.folderPath, spaceId: null }]; + } + + log.debug(`Multi-space directory found: ${spacesDir}`, this.config.auditContext); + const spaceDirs = readdirSync(spacesDir, { withFileTypes: true }).filter( + (entry) => entry.isDirectory() && existsSync(join(spacesDir, entry.name, 'assets')), + ); + + if (spaceDirs.length === 0) { + log.debug( + 'spaces/ directory exists but contains no valid space directories with assets/', + this.config.auditContext, + ); + return []; + } + + const paths = spaceDirs.map((entry) => ({ + path: join(spacesDir, entry.name, 'assets'), + spaceId: entry.name, + })); + log.debug(`Resolved ${paths.length} space(s): ${paths.map((p) => p.spaceId).join(', ')}`, this.config.auditContext); + return paths; + } + /** * The function checks if it can write the fix content to a file and if so, it writes the content as * JSON to the specified file path. @@ -169,7 +206,10 @@ export default class Assets extends BaseClass { canWrite = this.fixOverwriteConfirmed; log.debug(`Using cached overwrite confirmation: ${canWrite}`, this.config.auditContext); } else { - log.debug(`Asking user for confirmation to write fix content (--yes flag: ${this.config.flags.yes})`, this.config.auditContext); + log.debug( + `Asking user for confirmation to write fix content (--yes flag: ${this.config.flags.yes})`, + this.config.auditContext, + ); this.completeProgress(true); canWrite = await cliux.confirm(commonMsg.FIX_CONFIRMATION); this.fixOverwriteConfirmed = canWrite; @@ -188,85 +228,130 @@ export default class Assets extends BaseClass { } /** - * This function traverses over the publish details of the assets and removes the publish details where the locale or environment does not exist + * This function traverses over the publish details of the assets and removes the publish details where the locale or environment does not exist. + * Supports both the old flat structure (/assets/) and the new multi-space structure + * (/spaces//assets/) via this.resolvedBasePaths. */ async lookForReference(): Promise { log.debug('Starting asset reference validation', this.config.auditContext); - let basePath = join(this.folderPath); - log.debug(`Assets base path: ${basePath}`, this.config.auditContext); - - let fsUtility = new FsUtility({ basePath, indexFileName: 'assets.json' }); - let indexer = fsUtility.indexFileContent; - log.debug(`Found ${Object.keys(indexer).length} asset files to process`, this.config.auditContext); - - for (const fileIndex in indexer) { - log.debug(`Processing asset file: ${indexer[fileIndex]}`, this.config.auditContext); - const assets = (await fsUtility.readChunkFiles.next()) as Record; - this.assets = assets; - log.debug(`Loaded ${Object.keys(assets).length} assets from file`, this.config.auditContext); - - for (const assetUid in assets) { - log.debug(`Processing asset: ${assetUid}`, this.config.auditContext); - - 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' }); - this.assets[assetUid].publish_details = []; - } + const logConfig = configHandler.get('log') || {}; + const showConsoleLogs = logConfig.showConsoleLogs ?? false; - const publishDetails = this.assets[assetUid]?.publish_details; - log.debug(`Asset ${assetUid} has ${publishDetails?.length || 0} publish details`, this.config.auditContext); - - if (Array.isArray(this.assets[assetUid].publish_details)) { - this.assets[assetUid].publish_details = this.assets[assetUid].publish_details.filter((pd: any) => { - log.debug(`Checking publish detail: locale=${pd?.locale}, environment=${pd?.environment}`, this.config.auditContext); - - if (this.locales?.includes(pd?.locale) && this.environments?.includes(pd?.environment)) { - log.debug(`Publish detail valid for asset ${assetUid}: locale=${pd.locale}, environment=${pd.environment}`, this.config.auditContext); - return true; - } else { - log.debug(`Publish detail invalid for asset ${assetUid}: locale=${pd.locale}, environment=${pd.environment}`, this.config.auditContext); - cliux.print( - $t(auditMsg.SCAN_ASSET_WARN_MSG, { uid: assetUid, locale: pd.locale, environment: pd.environment }), - { color: 'yellow' }, - ); - if (!Object.keys(this.missingEnvLocales).includes(assetUid)) { - log.debug(`Creating new missing reference entry for asset ${assetUid}`, this.config.auditContext); - this.missingEnvLocales[assetUid] = [ - { asset_uid: assetUid, publish_locale: pd.locale, publish_environment: pd.environment }, - ]; - } else { - log.debug(`Adding to existing missing reference entry for asset ${assetUid}`, this.config.auditContext); - this.missingEnvLocales[assetUid].push({ - asset_uid: assetUid, - publish_locale: pd.locale, - publish_environment: pd.environment, - }); - } - return false; + if (!this.resolvedBasePaths.length) { + this.resolvedBasePaths = this.resolveAssetBasePaths(); + } + + for (const { path: spacePath, spaceId } of this.resolvedBasePaths) { + log.debug(`Processing asset path: ${spacePath} (spaceId=${spaceId ?? 'none'})`, this.config.auditContext); + + // Log UX: print a space header so output is clearly separated per space + if (showConsoleLogs && spaceId !== null) { + cliux.print(''); + cliux.print($t(auditMsg.AUDITING_SPACE, { spaceId }), { color: 'cyan' }); + } + + // Progress bar UX: update status label to reflect the current space + this.progressManager?.updateStatus?.(spaceId ? `Space: ${spaceId}` : 'Scanning assets...'); + + let fsUtility = new FsUtility({ basePath: spacePath, indexFileName: 'assets.json' }); + let indexer = fsUtility.indexFileContent; + log.debug(`Found ${Object.keys(indexer).length} asset files to process`, this.config.auditContext); + + for (const fileIndex in indexer) { + log.debug(`Processing asset file: ${indexer[fileIndex]}`, this.config.auditContext); + const assets = (await fsUtility.readChunkFiles.next()) as Record; + this.assets = assets; + log.debug(`Loaded ${Object.keys(assets).length} assets from file`, this.config.auditContext); + + for (const assetUid in assets) { + log.debug(`Processing asset: ${assetUid}`, this.config.auditContext); + + 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' }); + this.assets[assetUid].publish_details = []; + } + + const publishDetails = this.assets[assetUid]?.publish_details; + log.debug(`Asset ${assetUid} has ${publishDetails?.length || 0} publish details`, this.config.auditContext); + + if (Array.isArray(this.assets[assetUid].publish_details)) { + this.assets[assetUid].publish_details = this.assets[assetUid].publish_details.filter((pd: any) => { + log.debug( + `Checking publish detail: locale=${pd?.locale}, environment=${pd?.environment}`, + this.config.auditContext, + ); + + if (this.locales?.includes(pd?.locale) && this.environments?.includes(pd?.environment)) { + log.debug( + `Publish detail valid for asset ${assetUid}: locale=${pd.locale}, environment=${pd.environment}`, + this.config.auditContext, + ); + return true; + } else { + log.debug( + `Publish detail invalid for asset ${assetUid}: locale=${pd.locale}, environment=${pd.environment}`, + this.config.auditContext, + ); + cliux.print( + $t(auditMsg.SCAN_ASSET_WARN_MSG, { uid: assetUid, locale: pd.locale, environment: pd.environment }), + { color: 'yellow' }, + ); + if (!Object.keys(this.missingEnvLocales).includes(assetUid)) { + log.debug(`Creating new missing reference entry for asset ${assetUid}`, this.config.auditContext); + this.missingEnvLocales[assetUid] = [ + { + asset_uid: assetUid, + publish_locale: pd.locale, + publish_environment: pd.environment, + space_id: spaceId, + }, + ]; + } else { + log.debug( + `Adding to existing missing reference entry for asset ${assetUid}`, + this.config.auditContext, + ); + this.missingEnvLocales[assetUid].push({ + asset_uid: assetUid, + publish_locale: pd.locale, + publish_environment: pd.environment, + space_id: spaceId, + }); + } + return false; + } + }); + } + + log.info($t(auditMsg.SCAN_ASSET_SUCCESS_MSG, { uid: assetUid }), this.config.auditContext); + const remainingPublishDetails = this.assets[assetUid].publish_details?.length || 0; + log.debug( + `Asset ${assetUid} now has ${remainingPublishDetails} valid publish details`, + this.config.auditContext, + ); + + if (this.progressManager) { + this.progressManager.tick(true, `asset: ${assetUid}`, null); + } + + if (this.fix) { + log.debug(`Fixing asset ${assetUid}`, this.config.auditContext); + log.info($t(auditFixMsg.ASSET_FIX, { uid: assetUid }), this.config.auditContext); } - }); - } - log.info($t(auditMsg.SCAN_ASSET_SUCCESS_MSG, { uid: assetUid }), this.config.auditContext); - const remainingPublishDetails = this.assets[assetUid].publish_details?.length || 0; - log.debug(`Asset ${assetUid} now has ${remainingPublishDetails} valid publish details`, this.config.auditContext); - - // Track progress for each asset processed - if (this.progressManager) { - this.progressManager.tick(true, `asset: ${assetUid}`, null); } if (this.fix) { - log.debug(`Fixing asset ${assetUid}`, this.config.auditContext); - log.info($t(auditFixMsg.ASSET_FIX, { uid: assetUid }), this.config.auditContext); + await this.writeFixContent(`${spacePath}/${indexer[fileIndex]}`, this.assets); } } - - if (this.fix) { - 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); + + 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/modulesData.ts b/packages/contentstack-audit/src/modules/modulesData.ts index dc638c66c..8873dff29 100644 --- a/packages/contentstack-audit/src/modules/modulesData.ts +++ b/packages/contentstack-audit/src/modules/modulesData.ts @@ -1,5 +1,5 @@ import { join, resolve } from 'path'; -import { existsSync, readFileSync } from 'fs'; +import { existsSync, readFileSync, readdirSync } from 'fs'; import { FsUtility, sanitizePath, log } from '@contentstack/cli-utilities'; import { ConfigType, ContentTypeStruct, CtConstructorParam, ModuleConstructorParam } from '../types'; import { keys, values } from 'lodash'; @@ -46,10 +46,25 @@ export default class ModuleDataReader { break; case 'assets': { log.debug(`Counting assets`, this.config.auditContext); - const assetsPath = join(this.folderPath, 'assets'); - log.debug(`Assets path: ${assetsPath}`, this.config.auditContext); - count = (await this.readEntryAssetsModule(assetsPath, 'assets')) || 0; - log.debug(`Assets count: ${count}`, this.config.auditContext); + const spacesDir = join(this.folderPath, 'spaces'); + if (existsSync(spacesDir)) { + log.debug(`Multi-space structure detected at: ${spacesDir}`, this.config.auditContext); + const spaceDirs = readdirSync(spacesDir, { withFileTypes: true }).filter( + (entry) => entry.isDirectory() && existsSync(join(spacesDir, entry.name, 'assets')), + ); + for (const spaceDir of spaceDirs) { + const spaceAssetsPath = join(spacesDir, spaceDir.name, 'assets'); + log.debug(`Counting assets in space: ${spaceDir.name} at ${spaceAssetsPath}`, this.config.auditContext); + const spaceCount = (await this.readEntryAssetsModule(spaceAssetsPath, 'assets')) || 0; + log.debug(`Space ${spaceDir.name} asset count: ${spaceCount}`, this.config.auditContext); + count += spaceCount; + } + } else { + const assetsPath = join(this.folderPath, 'assets'); + log.debug(`Flat structure detected, assets path: ${assetsPath}`, this.config.auditContext); + count = (await this.readEntryAssetsModule(assetsPath, 'assets')) || 0; + } + log.debug(`Total assets count: ${count}`, this.config.auditContext); break; } case 'entries': diff --git a/packages/contentstack-audit/src/types/content-types.ts b/packages/contentstack-audit/src/types/content-types.ts index 2a27e92af..59cd78316 100644 --- a/packages/contentstack-audit/src/types/content-types.ts +++ b/packages/contentstack-audit/src/types/content-types.ts @@ -162,6 +162,7 @@ enum OutputColumn { 'publish_locale' = 'publish_locale', 'publish_environment' = 'publish_environment', 'asset_uid' = 'asset_uid', + 'space_id' = 'space_id', 'selectedValue' = 'selectedValue', 'fixStatus' = 'fixStatus', 'Content_type_uid' = 'ct_uid', diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 305076a6a..2200afe55 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -1348,8 +1348,8 @@ packages: resolution: {integrity: sha512-ZTlxhUTlMIX0t3orbh4bJ73KOyC0553CC/1I12GavnOcVEbtJ26YLj7IG20lO4vDo3KjgSs604X+e2yX/0g1aA==} engines: {node: '>=8.0.0'} - '@contentstack/marketplace-sdk@1.5.0': - resolution: {integrity: sha512-n2USMwswXBDtmVOg0t5FUks8X0d49u0UDFSrwxti09X/SONeP0P8wSqIDCjoB2gGRQc6fg/Fg2YPRvejUWeR4A==} + '@contentstack/marketplace-sdk@1.5.1': + resolution: {integrity: sha512-XoQODTWZ4cQeo7iIAcYcYLX9bSHvgeF1J230GTM2dVhN3w9aTylZ35zZttvsa76fDZWgRmZBO5AE99dVVq7xyA==} '@contentstack/utils@1.7.1': resolution: {integrity: sha512-b/0t1malpJeFCNd9+1uN3BuO8mRn2b5+aNtrYEZ6YlSNjYNRu9IjqSxZ5Clhs5267950UV1ayhgFE8z3qre2eQ==} @@ -4123,8 +4123,8 @@ packages: resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==} engines: {node: '>= 0.4'} - get-tsconfig@4.13.7: - resolution: {integrity: sha512-7tN6rFgBlMgpBML5j8typ92BKFi2sFQvIdpAqLA2beia5avZDrMs0FLZiM5etShWq5irVyGcGMEA1jcDaK7A/Q==} + get-tsconfig@4.14.0: + resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} git-hooks-list@3.2.0: resolution: {integrity: sha512-ZHG9a1gEhUMX1TvGrLdyWb9kDopCBbTnI8z4JgRMYxsijWipgjSEYoPWqBuIB0DnRnvqlQSEeVmzpeuPm7NdFQ==} @@ -7354,7 +7354,7 @@ snapshots: '@contentstack/cli-utilities@2.0.0-beta.6(@types/node@14.18.63)': dependencies: '@contentstack/management': 1.29.2(debug@4.4.3) - '@contentstack/marketplace-sdk': 1.5.0(debug@4.4.3) + '@contentstack/marketplace-sdk': 1.5.1(debug@4.4.3) '@oclif/core': 4.10.5 axios: 1.15.0(debug@4.4.3) chalk: 5.6.2 @@ -7389,7 +7389,7 @@ snapshots: '@contentstack/cli-utilities@2.0.0-beta.6(@types/node@14.18.63)(debug@4.4.3)': dependencies: '@contentstack/management': 1.29.2(debug@4.4.3) - '@contentstack/marketplace-sdk': 1.5.0(debug@4.4.3) + '@contentstack/marketplace-sdk': 1.5.1(debug@4.4.3) '@oclif/core': 4.10.5 axios: 1.15.0(debug@4.4.3) chalk: 5.6.2 @@ -7424,7 +7424,7 @@ snapshots: '@contentstack/cli-utilities@2.0.0-beta.6(@types/node@18.19.130)': dependencies: '@contentstack/management': 1.29.2(debug@4.4.3) - '@contentstack/marketplace-sdk': 1.5.0(debug@4.4.3) + '@contentstack/marketplace-sdk': 1.5.1(debug@4.4.3) '@oclif/core': 4.10.5 axios: 1.15.0(debug@4.4.3) chalk: 5.6.2 @@ -7459,7 +7459,7 @@ snapshots: '@contentstack/cli-utilities@2.0.0-beta.6(@types/node@20.19.39)': dependencies: '@contentstack/management': 1.29.2(debug@4.4.3) - '@contentstack/marketplace-sdk': 1.5.0(debug@4.4.3) + '@contentstack/marketplace-sdk': 1.5.1(debug@4.4.3) '@oclif/core': 4.10.5 axios: 1.15.0(debug@4.4.3) chalk: 5.6.2 @@ -7494,7 +7494,7 @@ snapshots: '@contentstack/cli-utilities@2.0.0-beta.6(@types/node@22.19.17)': dependencies: '@contentstack/management': 1.29.2(debug@4.4.3) - '@contentstack/marketplace-sdk': 1.5.0(debug@4.4.3) + '@contentstack/marketplace-sdk': 1.5.1(debug@4.4.3) '@oclif/core': 4.10.5 axios: 1.15.0(debug@4.4.3) chalk: 5.6.2 @@ -7541,7 +7541,7 @@ snapshots: transitivePeerDependencies: - debug - '@contentstack/marketplace-sdk@1.5.0(debug@4.4.3)': + '@contentstack/marketplace-sdk@1.5.1(debug@4.4.3)': dependencies: '@contentstack/utils': 1.9.1 axios: 1.15.0(debug@4.4.3) @@ -10808,7 +10808,7 @@ snapshots: '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1)(typescript@5.9.3) '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) eslint-config-xo-space: 0.35.0(eslint@8.57.1) - eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) eslint-plugin-mocha: 10.5.0(eslint@8.57.1) eslint-plugin-n: 15.7.0(eslint@8.57.1) @@ -10912,27 +10912,12 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1): - dependencies: - '@nolyfill/is-core-module': 1.0.39 - debug: 4.4.3(supports-color@8.1.1) - eslint: 8.57.1 - get-tsconfig: 4.13.7 - is-bun-module: 2.0.0 - stable-hash: 0.0.5 - tinyglobby: 0.2.16 - unrs-resolver: 1.11.1 - optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) - transitivePeerDependencies: - - supports-color - eslint-import-resolver-typescript@3.10.1(eslint-plugin-import@2.32.0(@typescript-eslint/parser@8.58.2(eslint@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1): dependencies: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.16 @@ -10947,24 +10932,24 @@ snapshots: '@nolyfill/is-core-module': 1.0.39 debug: 4.4.3(supports-color@8.1.1) eslint: 8.57.1 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 is-bun-module: 2.0.0 stable-hash: 0.0.5 tinyglobby: 0.2.16 unrs-resolver: 1.11.1 optionalDependencies: - eslint-plugin-import: 2.32.0(@typescript-eslint/parser@8.58.2(eslint@8.57.1)(typescript@4.9.5))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) + eslint-plugin-import: 2.32.0(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(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@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1): + eslint-module-utils@2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: '@typescript-eslint/parser': 6.21.0(eslint@8.57.1)(typescript@5.9.3) eslint: 8.57.1 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@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1) + eslint-import-resolver-typescript: 3.10.1(eslint-plugin-import@2.32.0)(eslint@8.57.1) transitivePeerDependencies: - supports-color @@ -11014,7 +10999,7 @@ snapshots: doctrine: 2.1.0 eslint: 8.57.1 eslint-import-resolver-node: 0.3.10 - eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(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@8.57.1)(typescript@5.9.3))(eslint@8.57.1))(eslint@8.57.1))(eslint@8.57.1) + eslint-module-utils: 2.12.1(@typescript-eslint/parser@6.21.0(eslint@8.57.1)(typescript@5.9.3))(eslint-import-resolver-node@0.3.10)(eslint-import-resolver-typescript@3.10.1)(eslint@8.57.1) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -11131,7 +11116,7 @@ snapshots: enhanced-resolve: 5.20.1 eslint: 8.57.1 eslint-plugin-es-x: 7.8.0(eslint@8.57.1) - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -11146,7 +11131,7 @@ snapshots: enhanced-resolve: 5.20.1 eslint: 8.57.1 eslint-plugin-es-x: 7.8.0(eslint@8.57.1) - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 globals: 15.15.0 globrex: 0.1.2 ignore: 5.3.2 @@ -11659,7 +11644,7 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.3.0 - get-tsconfig@4.13.7: + get-tsconfig@4.14.0: dependencies: resolve-pkg-maps: 1.0.0 @@ -14266,7 +14251,7 @@ snapshots: tsx@4.21.0: dependencies: esbuild: 0.27.7 - get-tsconfig: 4.13.7 + get-tsconfig: 4.14.0 optionalDependencies: fsevents: 2.3.3