Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions .talismanrc
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@ fileignoreconfig:
- filename: pnpm-lock.yaml
checksum: 0942b9ee7e4b284bfd9f0a2258ca8281cf8569b60dd293e08abf64373db12d59
- filename: packages/contentstack-import/src/types/index.ts
checksum: 0fd8f3f82bd754848b1ab90980c0c1316b62eddfe5d2a6e6216e0ff8429591ca
checksum: d61bcc581f6d7f684caa75a5880fb740af12404d271d4e8429610f856154089f
- filename: packages/contentstack-import/test/unit/utils/extension-helper.test.ts
checksum: 569e0b434372b8b97d3d4db906cf3e9e56eb546899f490e008e2d3107285e1f3
checksum: c61c823716710a29248bba5fdae199af949876f06308b878e3cf8f3d89e13b48
- filename: packages/contentstack-import/test/unit/import/modules/locales.test.ts
checksum: 55e481f09920dcf4d5d6cfe50fb8e20caffb2fd80673b3e08507192f76b46700
checksum: bd7f0036cb0a853848876a3664c599f8538a1d84a02fe50fb6bdbdad8d70b49e
- filename: packages/contentstack-import/src/config/index.ts
checksum: 5939e3cb57b9b2046072dcc144c9526831a9b8088ef30289d0de605ca46f97c4
checksum: 53e460b7ff7f7c9dae29d0b551352f3f89da0c5b08f753865ce73165a06259e5
- filename: packages/contentstack-variants/src/types/export-config.ts
checksum: e6df2394b6acb1f1ff30ed18baca686ba5b36c9de03b529f9980acbec4c8c8fc
- filename: packages/contentstack-export/src/config/index.ts
checksum: 0a800b44643b5cb808c575b5d029fae1769a8f16aa3ead06246da293400b82db
checksum: 5dddd4e482975bdb65f3d94383438f09c43fcc8a8d50753d9be4af73b5a171aa
- filename: packages/contentstack-import/src/import/modules/publishing-rules.ts
checksum: 429a803bc18e691db93bae3df1714071d0face6441b82cb938a83e8bf94ae14c
- filename: packages/contentstack-import/src/types/default-config.ts
checksum: c117d060d6979540a1bb6ae20ad6ad6d43e9b15a6909291f76ed60b11e5f793d
checksum: 84589b06580c88dc6722abd663c4b7bb352d1bcfa1f870f4237f6f97b2166f3d
- filename: packages/contentstack-import/test/unit/import/modules/publishing-rules.test.ts
checksum: 0fcbff5dab2f9e594fe2a316c3c96e8d86bcd5d72e7c1f9eb35c0e3458f87817
- filename: packages/contentstack-export/src/types/default-config.ts
checksum: 18d499426bec295034b6012d934c6ac82933656add43b3ca48c1f81a2fd98245
checksum: 70c9ca7400c447f2b54f48a07965c7ba34706deee97d68951d6229d523c7e4b0
- filename: packages/contentstack-export/src/types/index.ts
checksum: 71f02ac11507c61222a661caf228dfd54ffdc6c57e4cc631f66598ecd617852b
checksum: 4d895dc8355b94847e3e1746d65eb51d5b9434de307ddcd91c0a33083b97b9ef
version: '1.0'
9 changes: 5 additions & 4 deletions packages/contentstack-asset-management/package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@contentstack/cli-asset-management",
"version": "1.0.0-beta.0",
"description": "Asset Management 2.0 API adapter for export and import",
"description": "Contentstack Assets API adapter for export and import",
"main": "lib/index.js",
"types": "lib/index.d.ts",
"files": [
Expand All @@ -24,7 +24,8 @@
},
"keywords": [
"contentstack",
"asset-management",
"cs-assets",
"contentstack-assets",
"cli"
],
"license": "MIT",
Expand All @@ -37,7 +38,7 @@
"devPlugins": [
"@oclif/plugin-help"
],
"repositoryPrefix": "<%- repo %>/blob/main/packages/contentstack-asset-management/<%- commandPath %>"
"repositoryPrefix": "<%- repo %>/blob/main/packages/contentstack-cs-assets/<%- commandPath %>"
},
"devDependencies": {
"@types/chai": "^4.3.11",
Expand All @@ -55,4 +56,4 @@
"ts-node": "^10.9.2",
"typescript": "^5.8.3"
}
}
}
10 changes: 6 additions & 4 deletions packages/contentstack-asset-management/src/constants/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -29,13 +29,15 @@ export const FALLBACK_ASSET_TYPES_IMPORT_INVALID_KEYS = [
export const CHUNK_FILE_SIZE_MB = FALLBACK_AM_CHUNK_FILE_SIZE_MB;

/**
* Main process name for Asset Management 2.0 export (single progress bar).
* Main process name for Contentstack Assets export (single progress bar).
* Use this when adding/starting the process and for all ticks.
*/
export const AM_MAIN_PROCESS_NAME = 'Asset Management 2.0';
export const CS_ASSETS_MAIN_PROCESS_NAME = 'Contentstack Assets';
/** @deprecated Use CS_ASSETS_MAIN_PROCESS_NAME */
export const AM_MAIN_PROCESS_NAME = CS_ASSETS_MAIN_PROCESS_NAME;

/**
* Process names for Asset Management 2.0 export/import progress.
* Process names for Contentstack Assets export/import progress.
*
* In the new per-space layout each entry below corresponds to a single row in
* the multibar:
Expand Down Expand Up @@ -70,7 +72,7 @@ const SPACE_PROCESS_NAME_PREFIX = 'Space ';
const SPACE_PROCESS_NAME_MAX_UID_LEN = 14;

/**
* Returns the multibar row label for a single AM 2.0 space.
* Returns the multibar row label for a single CS Assets space.
* The label is bounded so CLIProgressManager.formatProcessName doesn't truncate
* it mid-string; the full uid is still used for tick item labels and structured
* logs, only the row label itself is shortened for display.
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig } from '../types/asset-management-api';
import type { CSAssetsAPIConfig } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AssetManagementExportAdapter } from './base';
import { CSAssetsExportAdapter } from './base';
import { getArrayFromResponse } from '../utils/export-helpers';
import { PROCESS_NAMES } from '../constants/index';

export default class ExportAssetTypes extends AssetManagementExportAdapter {
export default class ExportAssetTypes extends CSAssetsExportAdapter {
protected processName: string = PROCESS_NAMES.AM_ASSET_TYPES;

constructor(apiConfig: AssetManagementAPIConfig, exportContext: ExportContext) {
constructor(apiConfig: CSAssetsAPIConfig, exportContext: ExportContext) {
super(apiConfig, exportContext);
}

Expand Down
8 changes: 4 additions & 4 deletions packages/contentstack-asset-management/src/export/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,15 +3,15 @@ import { Readable } from 'node:stream';
import { mkdir, writeFile } from 'node:fs/promises';
import { configHandler, log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig, LinkedWorkspace } from '../types/asset-management-api';
import type { CSAssetsAPIConfig, LinkedWorkspace } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AssetManagementExportAdapter } from './base';
import { CSAssetsExportAdapter } from './base';
import { getAssetItems, writeStreamToFile } from '../utils/export-helpers';
import { runInBatches } from '../utils/concurrent-batch';
import { PROCESS_NAMES, PROCESS_STATUS } from '../constants/index';

export default class ExportAssets extends AssetManagementExportAdapter {
constructor(apiConfig: AssetManagementAPIConfig, exportContext: ExportContext) {
export default class ExportAssets extends CSAssetsExportAdapter {
constructor(apiConfig: CSAssetsAPIConfig, exportContext: ExportContext) {
super(apiConfig, exportContext);
}

Expand Down
14 changes: 7 additions & 7 deletions packages/contentstack-asset-management/src/export/base.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,25 +2,25 @@ import { resolve as pResolve } from 'node:path';
import { writeFile } from 'node:fs/promises';
import { FsUtility, log, CLIProgressManager, configHandler } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig } from '../types/asset-management-api';
import type { CSAssetsAPIConfig } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AssetManagementAdapter } from '../utils/asset-management-api-adapter';
import { AM_MAIN_PROCESS_NAME, FALLBACK_AM_API_CONCURRENCY, FALLBACK_AM_CHUNK_FILE_SIZE_MB } from '../constants/index';
import { CSAssetsAdapter } from '../utils/cs-assets-api-adapter';
import { CS_ASSETS_MAIN_PROCESS_NAME, FALLBACK_AM_API_CONCURRENCY, FALLBACK_AM_CHUNK_FILE_SIZE_MB } from '../constants/index';

export type { ExportContext };

/**
* Base class for export modules. Extends the API adapter and adds export context,
* internal progress management, and shared write helpers.
*/
export class AssetManagementExportAdapter extends AssetManagementAdapter {
protected readonly apiConfig: AssetManagementAPIConfig;
export class CSAssetsExportAdapter extends CSAssetsAdapter {
protected readonly apiConfig: CSAssetsAPIConfig;
protected readonly exportContext: ExportContext;
protected progressManager: CLIProgressManager | null = null;
protected parentProgressManager: CLIProgressManager | null = null;
protected processName: string = AM_MAIN_PROCESS_NAME;
protected processName: string = CS_ASSETS_MAIN_PROCESS_NAME;

constructor(apiConfig: AssetManagementAPIConfig, exportContext: ExportContext) {
constructor(apiConfig: CSAssetsAPIConfig, exportContext: ExportContext) {
super(apiConfig);
this.apiConfig = apiConfig;
this.exportContext = exportContext;
Expand Down
8 changes: 4 additions & 4 deletions packages/contentstack-asset-management/src/export/fields.ts
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
import { log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig } from '../types/asset-management-api';
import type { CSAssetsAPIConfig } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AssetManagementExportAdapter } from './base';
import { CSAssetsExportAdapter } from './base';
import { getArrayFromResponse } from '../utils/export-helpers';
import { PROCESS_NAMES } from '../constants/index';

export default class ExportFields extends AssetManagementExportAdapter {
export default class ExportFields extends CSAssetsExportAdapter {
protected processName: string = PROCESS_NAMES.AM_FIELDS;

constructor(apiConfig: AssetManagementAPIConfig, exportContext: ExportContext) {
constructor(apiConfig: CSAssetsAPIConfig, exportContext: ExportContext) {
super(apiConfig, exportContext);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,5 @@ export { default as ExportAssetTypes } from './asset-types';
export { default as ExportFields } from './fields';
export { default as ExportAssets } from './assets';
export { default as ExportWorkspace } from './workspaces';
export { AssetManagementExportAdapter } from './base';
export { CSAssetsExportAdapter } from './base';
export type { ExportContext } from './base';
28 changes: 14 additions & 14 deletions packages/contentstack-asset-management/src/export/spaces.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,15 +2,15 @@ import { resolve as pResolve } from 'node:path';
import { mkdir } from 'node:fs/promises';
import { log, CLIProgressManager, configHandler, handleAndLogError } from '@contentstack/cli-utilities';

import type { AssetManagementExportOptions, AssetManagementAPIConfig } from '../types/asset-management-api';
import type { AssetManagementExportOptions, CSAssetsAPIConfig } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AM_MAIN_PROCESS_NAME, PROCESS_NAMES, getSpaceProcessName } from '../constants/index';
import { CS_ASSETS_MAIN_PROCESS_NAME, PROCESS_NAMES, getSpaceProcessName } from '../constants/index';
import ExportAssetTypes from './asset-types';
import ExportFields from './fields';
import ExportWorkspace from './workspaces';

/**
* Orchestrates the full Asset Management 2.0 export: shared asset types and fields,
* Orchestrates the full Contentstack Assets export: shared asset types and fields,
* then per-workspace metadata and assets (including internal download).
* Progress and download are fully owned by this package.
*/
Expand All @@ -32,7 +32,7 @@ export class ExportSpaces {
linkedWorkspaces,
exportDir,
branchName,
assetManagementUrl,
csAssetsUrl,
org_uid,
apiKey,
context,
Expand All @@ -45,9 +45,9 @@ export class ExportSpaces {
return;
}

log.debug('Starting Asset Management export process...', context);
log.info('Started Asset Management export', context);
log.debug(`Exporting Asset Management 2.0 (${linkedWorkspaces.length} space(s))`, context);
log.debug('Starting Contentstack Assets export process...', context);
log.info('Started Contentstack Assets export', context);
log.debug(`Exporting Contentstack Assets (${linkedWorkspaces.length} space(s))`, context);
log.debug(`Spaces: ${linkedWorkspaces.map((ws) => ws.space_uid).join(', ')}`, context);

const spacesRootPath = pResolve(exportDir, 'spaces');
Expand All @@ -67,8 +67,8 @@ export class ExportSpaces {
progress.addProcess(spaceProcess, 1);
}

const apiConfig: AssetManagementAPIConfig = {
baseURL: assetManagementUrl,
const apiConfig: CSAssetsAPIConfig = {
baseURL: csAssetsUrl,
headers: { organization_uid: org_uid },
context,
};
Expand Down Expand Up @@ -135,11 +135,11 @@ export class ExportSpaces {

log.info(
anySpaceFailed
? 'Asset Management export completed with errors in one or more spaces'
: 'Asset Management export completed successfully',
? 'Contentstack Assets export completed with errors in one or more spaces'
: 'Contentstack Assets export completed successfully',
context,
);
log.debug('Asset Management 2.0 export completed', context);
log.debug('Contentstack Assets export completed', context);
} catch (err) {
if (!bootstrapFailed) {
// Mark any spaces that hadn't been processed as failed so the multibar
Expand All @@ -148,7 +148,7 @@ export class ExportSpaces {
progress.completeProcess(spaceProcess, false);
}
}
handleAndLogError(err, { ...(context as Record<string, unknown>) }, 'Asset Management export failed');
handleAndLogError(err, { ...(context as Record<string, unknown>) }, 'Contentstack Assets export failed');
throw err;
}
}
Expand All @@ -160,7 +160,7 @@ export class ExportSpaces {
}
const logConfig = configHandler.get('log') || {};
const showConsoleLogs = logConfig.showConsoleLogs ?? false;
this.progressManager = CLIProgressManager.createNested(AM_MAIN_PROCESS_NAME, showConsoleLogs);
this.progressManager = CLIProgressManager.createNested(CS_ASSETS_MAIN_PROCESS_NAME, showConsoleLogs);
return this.progressManager;
}
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ import { resolve as pResolve } from 'node:path';
import { mkdir, writeFile } from 'node:fs/promises';
import { log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig, LinkedWorkspace } from '../types/asset-management-api';
import type { CSAssetsAPIConfig, LinkedWorkspace } from '../types/cs-assets-api';
import type { ExportContext } from '../types/export-types';
import { AssetManagementExportAdapter } from './base';
import { CSAssetsExportAdapter } from './base';
import ExportAssets from './assets';

export default class ExportWorkspace extends AssetManagementExportAdapter {
constructor(apiConfig: AssetManagementAPIConfig, exportContext: ExportContext) {
export default class ExportWorkspace extends CSAssetsExportAdapter {
constructor(apiConfig: CSAssetsAPIConfig, exportContext: ExportContext) {
super(apiConfig, exportContext);
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@ import omit from 'lodash/omit';
import isEqual from 'lodash/isEqual';
import { log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig, ImportContext } from '../types/asset-management-api';
import { AssetManagementImportAdapter } from './base';
import type { CSAssetsAPIConfig, ImportContext } from '../types/cs-assets-api';
import { CSAssetsImportAdapter } from './base';
import { FALLBACK_ASSET_TYPES_IMPORT_INVALID_KEYS, PROCESS_NAMES, PROCESS_STATUS } from '../constants/index';
import { runInBatches } from '../utils/concurrent-batch';
import { forEachChunkedJsonStore } from '../utils/chunked-json-reader';
Expand All @@ -23,13 +23,13 @@ type AssetTypeToCreate = { uid: string; payload: Record<string, unknown> };
* 4. If uid already exists and definition matches → silently skip.
* 5. Strip read-only/computed keys from the POST body before creating new asset types.
*/
export default class ImportAssetTypes extends AssetManagementImportAdapter {
export default class ImportAssetTypes extends CSAssetsImportAdapter {
protected processName: string = PROCESS_NAMES.AM_IMPORT_ASSET_TYPES;
private successCount = 0;
private failureCount = 0;
private skippedCount = 0;

constructor(apiConfig: AssetManagementAPIConfig, importContext: ImportContext) {
constructor(apiConfig: CSAssetsAPIConfig, importContext: ImportContext) {
super(apiConfig, importContext);
}

Expand Down
8 changes: 4 additions & 4 deletions packages/contentstack-asset-management/src/import/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2,8 +2,8 @@ import { resolve as pResolve, join } from 'node:path';
import { existsSync, readFileSync } from 'node:fs';
import { FsUtility, log } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig, ImportContext } from '../types/asset-management-api';
import { AssetManagementImportAdapter } from './base';
import type { CSAssetsAPIConfig, ImportContext } from '../types/cs-assets-api';
import { CSAssetsImportAdapter } from './base';
import { getArrayFromResponse } from '../utils/export-helpers';
import { runInBatches } from '../utils/concurrent-batch';
import { forEachChunkRecordsFromFs } from '../utils/chunked-json-reader';
Expand Down Expand Up @@ -40,8 +40,8 @@ type UploadJob = {
* - Builds UID and URL mapper entries for entries.ts consumption
* Mirrors ExportAssets.
*/
export default class ImportAssets extends AssetManagementImportAdapter {
constructor(apiConfig: AssetManagementAPIConfig, importContext: ImportContext) {
export default class ImportAssets extends CSAssetsImportAdapter {
constructor(apiConfig: CSAssetsAPIConfig, importContext: ImportContext) {
super(apiConfig, importContext);
}

Expand Down
18 changes: 9 additions & 9 deletions packages/contentstack-asset-management/src/import/base.ts
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
import { resolve as pResolve } from 'node:path';
import { CLIProgressManager, configHandler } from '@contentstack/cli-utilities';

import type { AssetManagementAPIConfig, ImportContext } from '../types/asset-management-api';
import { AssetManagementAdapter } from '../utils/asset-management-api-adapter';
import { AM_MAIN_PROCESS_NAME, FALLBACK_AM_API_CONCURRENCY } from '../constants/index';
import type { CSAssetsAPIConfig, ImportContext } from '../types/cs-assets-api';
import { CSAssetsAdapter } from '../utils/cs-assets-api-adapter';
import { CS_ASSETS_MAIN_PROCESS_NAME, FALLBACK_AM_API_CONCURRENCY } from '../constants/index';

export type { ImportContext };

/**
* Base class for all AM 2.0 import modules. Mirrors AssetManagementExportAdapter
* Base class for all CS Assets import modules. Mirrors CSAssetsExportAdapter
* but carries ImportContext (spacesRootPath, apiKey, host, etc.) instead of ExportContext.
*/
export class AssetManagementImportAdapter extends AssetManagementAdapter {
protected readonly apiConfig: AssetManagementAPIConfig;
export class CSAssetsImportAdapter extends CSAssetsAdapter {
protected readonly apiConfig: CSAssetsAPIConfig;
protected readonly importContext: ImportContext;
protected progressManager: CLIProgressManager | null = null;
protected parentProgressManager: CLIProgressManager | null = null;
protected processName: string = AM_MAIN_PROCESS_NAME;
protected processName: string = CS_ASSETS_MAIN_PROCESS_NAME;

constructor(apiConfig: AssetManagementAPIConfig, importContext: ImportContext) {
constructor(apiConfig: CSAssetsAPIConfig, importContext: ImportContext) {
super(apiConfig);
this.apiConfig = apiConfig;
this.importContext = importContext;
Expand Down Expand Up @@ -70,7 +70,7 @@ export class AssetManagementImportAdapter extends AssetManagementAdapter {
return this.importContext.spacesRootPath;
}

/** Parallel AM API limit for import batches. */
/** Parallel CS Assets API limit for import batches. */
protected get apiConcurrency(): number {
return this.importContext.apiConcurrency ?? FALLBACK_AM_API_CONCURRENCY;
}
Expand Down
Loading
Loading