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
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import * as path from 'path';
import {
ContentstackClient,
handleAndLogError,
Expand Down Expand Up @@ -66,7 +65,7 @@ class ModuleExporter {
try {
this.exportConfig.branchName = targetBranch.uid;
this.stackAPIClient.stackHeaders.branch = targetBranch.uid;
this.exportConfig.branchDir = path.join(this.exportConfig.exportDir, targetBranch.uid);
this.exportConfig.branchDir = this.exportConfig.exportDir;

// Initialize progress manager for the target branch
CLIProgressManager.clearGlobalSummary();
Expand Down
5 changes: 2 additions & 3 deletions packages/contentstack-export/src/export/modules/assets.ts
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ import { PATH_CONSTANTS } from '../../constants';
import config from '../../config';
import { ModuleClassParams } from '../../types';
import BaseClass, { CustomPromiseHandler, CustomPromiseHandlerInput } from './base-class';
import { PROCESS_NAMES, MODULE_CONTEXTS, PROCESS_STATUS, MODULE_NAMES } from '../../utils';
import { getExportBasePath, PROCESS_NAMES, MODULE_CONTEXTS, PROCESS_STATUS, MODULE_NAMES } from '../../utils';

export default class ExportAssets extends BaseClass {
private assetsRootPath: string;
Expand All @@ -49,8 +49,7 @@ export default class ExportAssets extends BaseClass {

async start(): Promise<void> {
this.assetsRootPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.assetConfig.dirName,
);
log.debug(`Assets root path resolved to: ${this.assetsRootPath}`, this.exportConfig.context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import {
authenticationHandler,
} from '@contentstack/cli-utilities';

import { fsUtil, getOrgUid } from '../../utils';
import { fsUtil, getExportBasePath, getOrgUid } from '../../utils';
import { ModuleClassParams, ComposableStudioConfig, ExportConfig, ComposableStudioProject } from '../../types';

export default class ExportComposableStudio {
Expand Down Expand Up @@ -41,8 +41,7 @@ export default class ExportComposableStudio {
}

this.composableStudioPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.composableStudioConfig.dirName,
);
log.debug(`Studio folder path: ${this.composableStudioPath}`, this.exportConfig.context);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import { PATH_CONSTANTS } from '../../constants';

import BaseClass from './base-class';
import { ExportConfig, ModuleClassParams } from '../../types';
import { fsUtil, executeTask, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, executeTask, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ContentTypesExport extends BaseClass {
private stackAPIClient: ReturnType<ContentstackClient['stack']>;
Expand Down Expand Up @@ -48,8 +48,7 @@ export default class ContentTypesExport extends BaseClass {
this.applyQueryFilters(this.qs, 'content-types');

this.contentTypesDirPath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(getExportBasePath(exportConfig)),
sanitizePath(this.contentTypesConfig.dirName),
);
this.contentTypes = [];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit
import BaseClass from './base-class';
import {
fsUtil,
getExportBasePath,
PROCESS_NAMES,
MODULE_CONTEXTS,
PROCESS_STATUS,
Expand Down Expand Up @@ -43,8 +44,7 @@ export default class ExportCustomRoles extends BaseClass {
'CUSTOM-ROLES: Analyzing roles and locales...',
async () => {
this.rolesFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.customRolesConfig.dirName,
);

Expand Down
12 changes: 5 additions & 7 deletions packages/contentstack-export/src/export/modules/entries.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ import {
} from '@contentstack/cli-utilities';
import { PATH_CONSTANTS } from '../../constants';
import { Export, ExportProjects } from '@contentstack/cli-variants';
import { fsUtil, PROCESS_NAMES, MODULE_CONTEXTS, PROCESS_STATUS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, PROCESS_NAMES, MODULE_CONTEXTS, PROCESS_STATUS, MODULE_NAMES } from '../../utils';
import BaseClass, { ApiOptions } from './base-class';
import { ExportConfig, ModuleClassParams } from '../../types';

Expand Down Expand Up @@ -41,20 +41,18 @@ export default class EntriesExport extends BaseClass {
this.stackAPIClient = stackAPIClient;
this.exportConfig = exportConfig;
this.entriesConfig = exportConfig.modules.entries;
const basePath = getExportBasePath(exportConfig);
this.entriesDirPath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(basePath),
sanitizePath(this.entriesConfig.dirName),
);
this.localesFilePath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(basePath),
sanitizePath(exportConfig.modules.locales.dirName),
sanitizePath(exportConfig.modules.locales.fileName),
);
this.contentTypesDirPath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(basePath),
sanitizePath(exportConfig.modules.content_types.dirName),
);
this.projectInstance = new ExportProjects(this.exportConfig);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit

import BaseClass from './base-class';
import { EnvironmentConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ExportEnvironments extends BaseClass {
private environments: Record<string, unknown>;
Expand All @@ -32,8 +32,7 @@ export default class ExportEnvironments extends BaseClass {
// Setup with loading spinner
const [totalCount] = await this.withLoadingSpinner('ENVIRONMENTS: Analyzing environments...', async () => {
this.environmentsFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.environmentConfig.dirName,
);
await fsUtil.makeDirectory(this.environmentsFolderPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit

import BaseClass from './base-class';
import { ExtensionsConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ExportExtensions extends BaseClass {
private extensionsFolderPath: string;
Expand Down Expand Up @@ -33,8 +33,7 @@ export default class ExportExtensions extends BaseClass {
// Setup with loading spinner
const [totalCount] = await this.withLoadingSpinner('EXTENSIONS: Analyzing extensions...', async () => {
this.extensionsFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.extensionConfig.dirName,
);
await fsUtil.makeDirectory(this.extensionsFolderPath);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ContentstackClient, handleAndLogError, messageHandler, log, sanitizePat

import BaseClass from './base-class';
import { ExportConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class GlobalFieldsExport extends BaseClass {
private stackAPIClient: ReturnType<ContentstackClient['stack']>;
Expand Down Expand Up @@ -38,8 +38,7 @@ export default class GlobalFieldsExport extends BaseClass {
include_global_field_schema: true,
};
this.globalFieldsDirPath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(getExportBasePath(exportConfig)),
sanitizePath(this.globalFieldsConfig.dirName),
);
this.globalFields = [];
Expand Down
5 changes: 2 additions & 3 deletions packages/contentstack-export/src/export/modules/labels.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit

import BaseClass from './base-class';
import { LabelConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ExportLabels extends BaseClass {
private labels: Record<string, Record<string, string>>;
Expand All @@ -32,8 +32,7 @@ export default class ExportLabels extends BaseClass {
// Setup with loading spinner
const [totalCount] = await this.withLoadingSpinner('LABELS: Analyzing labels...', async () => {
this.labelsFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.labelConfig.dirName,
);

Expand Down
5 changes: 2 additions & 3 deletions packages/contentstack-export/src/export/modules/locales.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import { ContentstackClient, handleAndLogError, messageHandler, log, sanitizePat

import BaseClass from './base-class';
import { ExportConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class LocaleExport extends BaseClass {
private stackAPIClient: ReturnType<ContentstackClient['stack']>;
Expand Down Expand Up @@ -42,8 +42,7 @@ export default class LocaleExport extends BaseClass {
},
};
this.localesPath = path.resolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(getExportBasePath(exportConfig)),
sanitizePath(this.localeConfig.dirName),
);
this.locales = {};
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ import {
import BaseClass from './base-class';
import {
fsUtil,
getExportBasePath,
getOrgUid,
createNodeCryptoInstance,
getDeveloperHubUrl,
Expand Down Expand Up @@ -118,8 +119,7 @@ export default class ExportMarketplaceApps extends BaseClass {

async setupPaths(): Promise<void> {
this.marketplaceAppPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.marketplaceAppConfig.dirName,
);
log.debug(`Marketplace apps folder path: '${this.marketplaceAppPath}'`, this.exportConfig.context);
Expand Down
4 changes: 2 additions & 2 deletions packages/contentstack-export/src/export/modules/stack.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import { PATH_CONSTANTS } from '../../constants';
import BaseClass from './base-class';
import {
fsUtil,
getExportBasePath,
PROCESS_NAMES,
MODULE_CONTEXTS,
PROCESS_STATUS,
Expand All @@ -31,8 +32,7 @@ export default class ExportStack extends BaseClass {
this.stackConfig = exportConfig.modules.stack;
this.qs = { include_count: true };
this.stackFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.stackConfig.dirName,
);
this.exportConfig.context.module = MODULE_CONTEXTS.STACK;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import { handleAndLogError, messageHandler, log, sanitizePath } from '@contentst
import BaseClass from './base-class';
import {
fsUtil,
getExportBasePath,
PROCESS_NAMES,
MODULE_CONTEXTS,
PROCESS_STATUS,
Expand Down Expand Up @@ -43,8 +44,7 @@ export default class ExportTaxonomies extends BaseClass {
this.exportConfig.context.module = MODULE_CONTEXTS.TAXONOMIES;
this.currentModuleName = MODULE_NAMES[MODULE_CONTEXTS.TAXONOMIES];
this.localesFilePath = pResolve(
sanitizePath(exportConfig.exportDir),
sanitizePath(exportConfig.branchName || ''),
sanitizePath(getExportBasePath(exportConfig)),
sanitizePath(exportConfig.modules.locales.dirName),
sanitizePath(exportConfig.modules.locales.fileName),
);
Expand Down Expand Up @@ -98,8 +98,7 @@ export default class ExportTaxonomies extends BaseClass {
private async initializeExport(): Promise<number> {
return this.withLoadingSpinner('TAXONOMIES: Analyzing taxonomy structure...', async () => {
this.taxonomiesFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.taxonomiesConfig.dirName,
);
log.debug(`Taxonomies folder path: '${this.taxonomiesFolderPath}'`, this.exportConfig.context);
Expand Down
5 changes: 2 additions & 3 deletions packages/contentstack-export/src/export/modules/webhooks.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit

import BaseClass from './base-class';
import { WebhookConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ExportWebhooks extends BaseClass {
private webhooks: Record<string, Record<string, string>>;
Expand Down Expand Up @@ -33,8 +33,7 @@ export default class ExportWebhooks extends BaseClass {
// Setup with loading spinner
const [totalCount] = await this.withLoadingSpinner('WEBHOOKS: Analyzing webhooks...', async () => {
this.webhooksFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.webhookConfig.dirName,
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ import { handleAndLogError, messageHandler, log } from '@contentstack/cli-utilit

import BaseClass from './base-class';
import { WorkflowConfig, ModuleClassParams } from '../../types';
import { fsUtil, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';
import { fsUtil, getExportBasePath, MODULE_CONTEXTS, MODULE_NAMES } from '../../utils';

export default class ExportWorkFlows extends BaseClass {
private workflows: Record<string, Record<string, string>>;
Expand All @@ -32,8 +32,7 @@ export default class ExportWorkFlows extends BaseClass {
// Setup with loading spinner
const [totalCount] = await this.withLoadingSpinner('WORKFLOWS: Analyzing workflows...', async () => {
this.webhooksFolderPath = pResolve(
this.exportConfig.exportDir,
this.exportConfig.branchName || '',
getExportBasePath(this.exportConfig),
this.workflowConfig.dirName,
);

Expand Down
1 change: 1 addition & 0 deletions packages/contentstack-export/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ export * as fileHelper from './file-helper';
export { fsUtil } from './file-helper';
export { default as setupBranches } from './setup-branches';
export { default as setupExportDir } from './setup-export-dir';
export { getExportBasePath } from './path-helper';
export { log, unlinkFileLogger } from './logger';
export { default as login } from './basic-login';
export * from './common-helper';
Expand Down
9 changes: 9 additions & 0 deletions packages/contentstack-export/src/utils/path-helper.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
import { ExportConfig } from '../types';

/**
* Returns the base path under which module content should be exported.
* Content is always written directly under this path (no branch subfolder).
*/
export function getExportBasePath(exportConfig: ExportConfig): string {
return exportConfig.branchDir ?? exportConfig.exportDir;
}
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
import path from 'path';
import { sanitizePath } from '@contentstack/cli-utilities';

import { ExportConfig } from '../types';
import { makeDirectory } from './file-helper';

export default async function setupExportDir(exportConfig: ExportConfig) {
makeDirectory(exportConfig.exportDir);
if (exportConfig.branches) {
return Promise.all(
exportConfig.branches.map((branch) => makeDirectory(path.join(sanitizePath(exportConfig.exportDir), sanitizePath(branch.uid)))),
);
}
// Single-branch export: content goes directly under exportDir; no per-branch subdirs.
}
Loading
Loading