From 6d67aa749f4eb934236775b77eab223ff222291d Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Fri, 3 Jan 2025 12:25:55 +0530 Subject: [PATCH 01/15] Implemented nested global fields --- .../src/import/modules/content-types.ts | 30 +++++++++++++++++-- .../src/import/modules/global-fields.ts | 25 ++++++++++++---- 2 files changed, 47 insertions(+), 8 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/content-types.ts b/packages/contentstack-import/src/import/modules/content-types.ts index fefbcc4b43..5c9b16f87c 100644 --- a/packages/contentstack-import/src/import/modules/content-types.ts +++ b/packages/contentstack-import/src/import/modules/content-types.ts @@ -13,6 +13,13 @@ import BaseClass, { ApiOptions } from './base-class'; import { updateFieldRules } from '../../utils/content-type-helper'; import { sanitizePath } from '@contentstack/cli-utilities'; +type GlobalFieldData = { + uid: string; + title: string; + schema: Array<{ data_type: string }>; +}; +const nestedGlobalFieldsVersion = '3.2'; + export default class ContentTypesImport extends BaseClass { private cTsMapperPath: string; private cTsFolderPath: string; @@ -232,7 +239,7 @@ export default class ContentTypesImport extends BaseClass { log(this.importConfig, `Updated the global field ${uid} with content type references`, 'info'); }; const onReject = ({ error, apiData: { uid } = undefined }: any) => { - log(this.importConfig, `failed to update the global field '${uid}' ${formatError(error)}`, 'error'); + log(this.importConfig, `Failed to update the global field '${uid}' ${formatError(error)}`, 'error'); }; return await this.makeConcurrentCall({ processName: 'Update pending global fields', @@ -260,18 +267,35 @@ export default class ContentTypesImport extends BaseClass { apiData: { uid }, } = apiOptions; const globalField = find(this.gFs, { uid }); + const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); lookupExtension( this.importConfig, globalField.schema, this.importConfig.preserveStackVersion, this.installedExtensions, ); - apiOptions.apiData = globalField; - const globalFieldPayload = this.stack.globalField(uid); + const globalFieldPayload = this.stack.globalField( + uid, + hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined, + ); Object.assign(globalFieldPayload, cloneDeep(globalField)); apiOptions.apiData = globalFieldPayload; return apiOptions; } + + /** + * Check if a global field has nested global fields + * @param {GlobalFieldData} globalField The global field data + * @returns {boolean} True if nested global fields are present, otherwise false + */ + hasNestedGlobalFields(globalField: GlobalFieldData): boolean { + if (!globalField || !globalField.schema) { + return false; + } + // Check for nested global fields in the schema + return globalField.schema.some((field: any) => field.data_type === 'global_field'); + } + async updatePendingExtensions(): Promise { let apiContent = fsUtil.readFile(this.extPendingPath) as Record[]; diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index a4e32e95bb..c8659014b2 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -12,7 +12,7 @@ import { GlobalFieldData } from '@contentstack/management/types/stack/globalFiel import { fsUtil, log, formatError, fileHelper, lookupExtension, removeReferenceFields } from '../../utils'; import { ImportConfig, ModuleClassParams } from '../../types'; import BaseClass, { ApiOptions } from './base-class'; - +const nestedGlobalFieldsVersion = '3.2'; export default class ImportGlobalFields extends BaseClass { private gFsMapperPath: string; private gFsFolderPath: string; @@ -140,17 +140,18 @@ export default class ImportGlobalFields extends BaseClass { if (flag.supressed) { this.pendingGFs.push(globalField.uid); } + const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); return this.stack - .globalField() + .globalField(null, hasNested ? { api_version: nestedGlobalFieldsVersion} : undefined) .create({ global_field: globalField as GlobalFieldData }) - .then((response) => { + .then((response: GlobalFieldData) => { apiParams.resolve({ response, apiData: globalField, }); resolve(true); }) - .catch((error) => { + .catch((error: unknown) => { apiParams.reject({ error, apiData: globalField, @@ -192,6 +193,19 @@ export default class ImportGlobalFields extends BaseClass { ); } + /** + * Check if a global field has nested global fields + * @param {GlobalFieldData} globalField The global field data + * @returns {boolean} True if nested global fields are present, otherwise false + */ + hasNestedGlobalFields(globalField: GlobalFieldData): boolean { + if (!globalField || !globalField.schema) { + return false; + } + // Check for nested global fields in the schema + return globalField.schema.some((field: any) => field.data_type === 'global_field'); + } + /** * @method serializeUpdateGFs * @param {ApiOptions} apiOptions ApiOptions @@ -199,7 +213,8 @@ export default class ImportGlobalFields extends BaseClass { */ serializeReplaceGFs(apiOptions: ApiOptions): ApiOptions { const { apiData: globalField } = apiOptions; - const globalFieldPayload = this.stack.globalField(globalField.uid); + const hasNested = this.hasNestedGlobalFields(apiOptions.apiData as GlobalFieldData) + const globalFieldPayload = this.stack.globalField(globalField.uid, hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined); Object.assign(globalFieldPayload, cloneDeep(globalField), { stackHeaders: globalFieldPayload.stackHeaders, }); From 6b6b26a0b766406842cfda5ad72104cc5cc297c5 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Tue, 7 Jan 2025 11:10:20 +0530 Subject: [PATCH 02/15] Implemented nested global fields --- .../src/import/modules/global-fields.ts | 52 ++++++++++++++++++- 1 file changed, 51 insertions(+), 1 deletion(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index c8659014b2..69b2843db1 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -6,7 +6,7 @@ */ import * as path from 'path'; -import { isEmpty, cloneDeep } from 'lodash'; +import { isEmpty, cloneDeep, map, find } from 'lodash'; import { cliux, sanitizePath } from '@contentstack/cli-utilities'; import { GlobalFieldData } from '@contentstack/management/types/stack/globalField'; import { fsUtil, log, formatError, fileHelper, lookupExtension, removeReferenceFields } from '../../utils'; @@ -76,6 +76,10 @@ export default class ImportGlobalFields extends BaseClass { await this.importGFs(); fsUtil.writeFile(this.gFsPendingPath, this.pendingGFs); + await this.updatePendingGFs().catch((error) => { + log(this.importConfig, `Error while updating pending global field ${formatError(error)}`, 'error'); + }); + if (this.importConfig.replaceExisting && this.existingGFs.length > 0) { await this.replaceGFs().catch((error: Error) => { log(this.importConfig, `Error while replacing global fields ${formatError(error)}`, 'error'); @@ -161,6 +165,52 @@ export default class ImportGlobalFields extends BaseClass { }); } + async updatePendingGFs(): Promise { + this.pendingGFs = fsUtil.readFile(this.gFsPendingPath) as any; + this.gFs = fsUtil.readFile(path.resolve(this.gFsFolderPath, this.gFsConfig.fileName)) as Record[]; + const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { + log(this.importConfig, `Updated the global field ${uid} with content type references`, 'info'); + }; + const onReject = ({ error, apiData: { uid } = undefined }: any) => { + log(this.importConfig, `Failed to update the global field '${uid}' ${formatError(error)}`, 'error'); + }; + return await this.makeConcurrentCall({ + processName: 'Update pending global fields', + apiContent: map(this.pendingGFs, (uid: string) => { + return { uid }; + }), + apiParams: { + serializeData: this.serializeUpdateGFs.bind(this), + reject: onReject.bind(this), + resolve: onSuccess.bind(this), + entity: 'update-gfs', + includeParamOnCompletion: true, + }, + concurrencyLimit: this.reqConcurrency, + }); + } + + serializeUpdateGFs(apiOptions: ApiOptions): ApiOptions { + const { + apiData: { uid }, + } = apiOptions; + const globalField = find(this.gFs, { uid }); + const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); + lookupExtension( + this.importConfig, + globalField.schema, + this.importConfig.preserveStackVersion, + this.installedExtensions, + ); + const globalFieldPayload = this.stack.globalField( + uid, + hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined, + ); + Object.assign(globalFieldPayload, cloneDeep(globalField)); + apiOptions.apiData = globalFieldPayload; + return apiOptions; + } + async replaceGFs(): Promise { const onSuccess = ({ response: globalField, apiData: { uid } = { uid: null } }: any) => { this.createdGFs.push(globalField); From b6703e774ff3bc10f2ccee3585dc1d22aa9171a2 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Tue, 7 Jan 2025 13:25:38 +0530 Subject: [PATCH 03/15] Passed api version by default 3.2 --- .../src/import/modules/content-types.ts | 18 +----- .../src/import/modules/global-fields.ts | 60 ++++++++++--------- 2 files changed, 33 insertions(+), 45 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/content-types.ts b/packages/contentstack-import/src/import/modules/content-types.ts index 5c9b16f87c..24f5e3fb28 100644 --- a/packages/contentstack-import/src/import/modules/content-types.ts +++ b/packages/contentstack-import/src/import/modules/content-types.ts @@ -267,7 +267,6 @@ export default class ContentTypesImport extends BaseClass { apiData: { uid }, } = apiOptions; const globalField = find(this.gFs, { uid }); - const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); lookupExtension( this.importConfig, globalField.schema, @@ -275,27 +274,12 @@ export default class ContentTypesImport extends BaseClass { this.installedExtensions, ); const globalFieldPayload = this.stack.globalField( - uid, - hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined, + uid, { api_version: nestedGlobalFieldsVersion }, ); Object.assign(globalFieldPayload, cloneDeep(globalField)); apiOptions.apiData = globalFieldPayload; return apiOptions; } - - /** - * Check if a global field has nested global fields - * @param {GlobalFieldData} globalField The global field data - * @returns {boolean} True if nested global fields are present, otherwise false - */ - hasNestedGlobalFields(globalField: GlobalFieldData): boolean { - if (!globalField || !globalField.schema) { - return false; - } - // Check for nested global fields in the schema - return globalField.schema.some((field: any) => field.data_type === 'global_field'); - } - async updatePendingExtensions(): Promise { let apiContent = fsUtil.readFile(this.extPendingPath) as Record[]; diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 69b2843db1..5082c97d14 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -73,11 +73,11 @@ export default class ImportGlobalFields extends BaseClass { ((await fsUtil.readFile(this.marketplaceAppMapperPath)) as any) || { extension_uid: {} } ).extension_uid; - await this.importGFs(); + await this.seedGFs(); fsUtil.writeFile(this.gFsPendingPath, this.pendingGFs); - await this.updatePendingGFs().catch((error) => { - log(this.importConfig, `Error while updating pending global field ${formatError(error)}`, 'error'); + await this.updateGFs().catch((error) => { + log(this.importConfig, `Error while updating global field ${formatError(error)}`, 'error'); }); if (this.importConfig.replaceExisting && this.existingGFs.length > 0) { @@ -89,8 +89,8 @@ export default class ImportGlobalFields extends BaseClass { log(this.config, 'Global fields import has been completed!', 'info'); } - async importGFs() { - const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { + async seedGFs() { + const onSuccess = async ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; fsUtil.writeFile(this.gFsUidMapperPath, this.gFsUidMapper); @@ -128,6 +128,24 @@ export default class ImportGlobalFields extends BaseClass { ); } + async removeNestedGlobalFields(schema: any[], flag: { supressed: boolean }) { + if (!Array.isArray(schema)) { + return; + } + for (let i = schema.length - 1; i >= 0; i--) { + const field = schema[i]; + if (field.data_type === 'global_field') { + // Remove the field from the schema + schema.splice(i, 1); + flag.supressed = true; + } else if (field.schema) { + // Recursively check nested schemas + await this.removeNestedGlobalFields(field.schema, flag); + } + } + } + + async createGFs({ apiParams, element: globalField, @@ -141,12 +159,14 @@ export default class ImportGlobalFields extends BaseClass { lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); let flag = { supressed: false }; await removeReferenceFields(globalField.schema, flag, this.stack); + if (Array.isArray(globalField.schema)) { + await this.removeNestedGlobalFields(globalField.schema, flag); + } if (flag.supressed) { this.pendingGFs.push(globalField.uid); } - const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); return this.stack - .globalField(null, hasNested ? { api_version: nestedGlobalFieldsVersion} : undefined) + .globalField(null, { api_version: nestedGlobalFieldsVersion}) .create({ global_field: globalField as GlobalFieldData }) .then((response: GlobalFieldData) => { apiParams.resolve({ @@ -165,17 +185,17 @@ export default class ImportGlobalFields extends BaseClass { }); } - async updatePendingGFs(): Promise { + async updateGFs(): Promise { this.pendingGFs = fsUtil.readFile(this.gFsPendingPath) as any; this.gFs = fsUtil.readFile(path.resolve(this.gFsFolderPath, this.gFsConfig.fileName)) as Record[]; const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { - log(this.importConfig, `Updated the global field ${uid} with content type references`, 'info'); + log(this.importConfig, `Updated the global field ${uid}`, 'info'); }; const onReject = ({ error, apiData: { uid } = undefined }: any) => { log(this.importConfig, `Failed to update the global field '${uid}' ${formatError(error)}`, 'error'); }; return await this.makeConcurrentCall({ - processName: 'Update pending global fields', + processName: 'Update global fields', apiContent: map(this.pendingGFs, (uid: string) => { return { uid }; }), @@ -195,7 +215,6 @@ export default class ImportGlobalFields extends BaseClass { apiData: { uid }, } = apiOptions; const globalField = find(this.gFs, { uid }); - const hasNested = this.hasNestedGlobalFields(globalField as GlobalFieldData); lookupExtension( this.importConfig, globalField.schema, @@ -203,8 +222,7 @@ export default class ImportGlobalFields extends BaseClass { this.installedExtensions, ); const globalFieldPayload = this.stack.globalField( - uid, - hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined, + uid, { api_version: nestedGlobalFieldsVersion }, ); Object.assign(globalFieldPayload, cloneDeep(globalField)); apiOptions.apiData = globalFieldPayload; @@ -243,19 +261,6 @@ export default class ImportGlobalFields extends BaseClass { ); } - /** - * Check if a global field has nested global fields - * @param {GlobalFieldData} globalField The global field data - * @returns {boolean} True if nested global fields are present, otherwise false - */ - hasNestedGlobalFields(globalField: GlobalFieldData): boolean { - if (!globalField || !globalField.schema) { - return false; - } - // Check for nested global fields in the schema - return globalField.schema.some((field: any) => field.data_type === 'global_field'); - } - /** * @method serializeUpdateGFs * @param {ApiOptions} apiOptions ApiOptions @@ -263,8 +268,7 @@ export default class ImportGlobalFields extends BaseClass { */ serializeReplaceGFs(apiOptions: ApiOptions): ApiOptions { const { apiData: globalField } = apiOptions; - const hasNested = this.hasNestedGlobalFields(apiOptions.apiData as GlobalFieldData) - const globalFieldPayload = this.stack.globalField(globalField.uid, hasNested ? { api_version: nestedGlobalFieldsVersion } : undefined); + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: nestedGlobalFieldsVersion }); Object.assign(globalFieldPayload, cloneDeep(globalField), { stackHeaders: globalFieldPayload.stackHeaders, }); From b3ef4ab9696ab1db646d6fd2bbf82f7278c37038 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:24:20 +0530 Subject: [PATCH 04/15] Updated the implementation as same as the content type --- .../src/import/modules/base-class.ts | 2 + .../src/import/modules/global-fields.ts | 144 +++++------------- .../src/utils/global-field-helper.ts | 27 ++++ 3 files changed, 70 insertions(+), 103 deletions(-) create mode 100644 packages/contentstack-import/src/utils/global-field-helper.ts diff --git a/packages/contentstack-import/src/import/modules/base-class.ts b/packages/contentstack-import/src/import/modules/base-class.ts index d17fab7b2e..e3acbb18f8 100644 --- a/packages/contentstack-import/src/import/modules/base-class.ts +++ b/packages/contentstack-import/src/import/modules/base-class.ts @@ -315,6 +315,8 @@ export default abstract class BaseClass { return this.stack.contentType().create(apiData).then(onSuccess).catch(onReject); case 'update-cts': return apiData.update().then(onSuccess).catch(onReject); + case 'create-gfs': + return this.stack.globalField().create(apiData).then(onSuccess).catch(onReject); case 'update-gfs': return apiData.update().then(onSuccess).catch(onReject); case 'create-environments': diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 5082c97d14..a7a6f2fa0e 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -8,10 +8,12 @@ import * as path from 'path'; import { isEmpty, cloneDeep, map, find } from 'lodash'; import { cliux, sanitizePath } from '@contentstack/cli-utilities'; -import { GlobalFieldData } from '@contentstack/management/types/stack/globalField'; +import { GlobalFieldData, GlobalField } from '@contentstack/management/types/stack/globalField'; import { fsUtil, log, formatError, fileHelper, lookupExtension, removeReferenceFields } from '../../utils'; import { ImportConfig, ModuleClassParams } from '../../types'; import BaseClass, { ApiOptions } from './base-class'; +import { gfSchemaTemplate } from '../../utils/global-field-helper'; + const nestedGlobalFieldsVersion = '3.2'; export default class ImportGlobalFields extends BaseClass { private gFsMapperPath: string; @@ -31,6 +33,7 @@ export default class ImportGlobalFields extends BaseClass { private reqConcurrency: number; private installedExtensions: Record; private existingGFs: Record[]; + private fieldRules: Array>; private gFsConfig: { dirName: string; fileName: string; @@ -49,6 +52,7 @@ export default class ImportGlobalFields extends BaseClass { this.failedGFs = []; this.pendingGFs = []; this.existingGFs = []; + this.fieldRules = []; this.reqConcurrency = this.gFsConfig.writeConcurrency || this.config.writeConcurrency; this.gFsMapperPath = path.resolve(sanitizePath(this.config.data), 'mapper', 'global_fields'); this.gFsFolderPath = path.resolve(sanitizePath(this.config.data), sanitizePath(this.gFsConfig.dirName)); @@ -74,11 +78,15 @@ export default class ImportGlobalFields extends BaseClass { ).extension_uid; await this.seedGFs(); - fsUtil.writeFile(this.gFsPendingPath, this.pendingGFs); + if (this.seedGFs?.length) fsUtil.writeFile(this.gFsPendingPath, this.pendingGFs); + log(this.importConfig, 'Created Global Fields', 'success'); - await this.updateGFs().catch((error) => { - log(this.importConfig, `Error while updating global field ${formatError(error)}`, 'error'); - }); + await this.updateGFs(); + log(this.importConfig, 'Updated Global Fields', 'success'); + + // await this.updateGFs().catch((error) => { + // log(this.importConfig, `Error while updating global field ${formatError(error)}`, 'error'); + // }); if (this.importConfig.replaceExisting && this.existingGFs.length > 0) { await this.replaceGFs().catch((error: Error) => { @@ -89,12 +97,11 @@ export default class ImportGlobalFields extends BaseClass { log(this.config, 'Global fields import has been completed!', 'info'); } - async seedGFs() { + async seedGFs(): Promise { const onSuccess = async ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; - fsUtil.writeFile(this.gFsUidMapperPath, this.gFsUidMapper); - log(this.config, 'Global field ' + uid + ' created successfully', 'success'); + log(this.importConfig, `${uid} Global field seeded`, 'info'); }; const onReject = ({ error, apiData: globalField = undefined }: any) => { const uid = globalField.uid; @@ -111,83 +118,35 @@ export default class ImportGlobalFields extends BaseClass { this.failedGFs.push({ uid }); } }; - - return await this.makeConcurrentCall( - { - processName: 'Import global fields', - apiContent: this.gFs, - apiParams: { - reject: onReject.bind(this), - resolve: onSuccess.bind(this), - entity: 'create-gfs', - includeParamOnCompletion: true, - }, - concurrencyLimit: this.reqConcurrency, + return await this.makeConcurrentCall({ + processName: 'Import global fields', + apiContent: this.gFs, + apiParams: { + serializeData: this.serializeGFs.bind(this), + reject: onReject.bind(this), + resolve: onSuccess.bind(this), + entity: 'create-gfs', + includeParamOnCompletion: true, }, - this.createGFs.bind(this), - ); - } - - async removeNestedGlobalFields(schema: any[], flag: { supressed: boolean }) { - if (!Array.isArray(schema)) { - return; - } - for (let i = schema.length - 1; i >= 0; i--) { - const field = schema[i]; - if (field.data_type === 'global_field') { - // Remove the field from the schema - schema.splice(i, 1); - flag.supressed = true; - } else if (field.schema) { - // Recursively check nested schemas - await this.removeNestedGlobalFields(field.schema, flag); - } - } + concurrencyLimit: this.reqConcurrency, + }); } - - async createGFs({ - apiParams, - element: globalField, - isLastRequest, - }: { - apiParams: ApiOptions; - element: Record; - isLastRequest: boolean; - }) { - return new Promise(async (resolve, reject) => { - lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); - let flag = { supressed: false }; - await removeReferenceFields(globalField.schema, flag, this.stack); - if (Array.isArray(globalField.schema)) { - await this.removeNestedGlobalFields(globalField.schema, flag); - } - if (flag.supressed) { - this.pendingGFs.push(globalField.uid); - } - return this.stack - .globalField(null, { api_version: nestedGlobalFieldsVersion}) - .create({ global_field: globalField as GlobalFieldData }) - .then((response: GlobalFieldData) => { - apiParams.resolve({ - response, - apiData: globalField, - }); - resolve(true); - }) - .catch((error: unknown) => { - apiParams.reject({ - error, - apiData: globalField, - }); - reject(true); - }); - }); + /** + * @method serializeGFs + * @param {ApiOptions} apiOptions ApiOptions + * @returns {ApiOptions} ApiOptions + */ + serializeGFs(apiOptions: ApiOptions): ApiOptions { + const { apiData: globalField } = apiOptions; + const updatedGF = cloneDeep(gfSchemaTemplate); + updatedGF.global_field.uid = globalField.uid; + updatedGF.global_field.title = globalField.title; + apiOptions.apiData = updatedGF; + return apiOptions; } async updateGFs(): Promise { - this.pendingGFs = fsUtil.readFile(this.gFsPendingPath) as any; - this.gFs = fsUtil.readFile(path.resolve(this.gFsFolderPath, this.gFsConfig.fileName)) as Record[]; const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { log(this.importConfig, `Updated the global field ${uid}`, 'info'); }; @@ -195,12 +154,10 @@ export default class ImportGlobalFields extends BaseClass { log(this.importConfig, `Failed to update the global field '${uid}' ${formatError(error)}`, 'error'); }; return await this.makeConcurrentCall({ - processName: 'Update global fields', - apiContent: map(this.pendingGFs, (uid: string) => { - return { uid }; - }), + processName: 'Update Global Fields', + apiContent: this.gFs, apiParams: { - serializeData: this.serializeUpdateGFs.bind(this), + serializeData: this.serializeReplaceGFs.bind(this), reject: onReject.bind(this), resolve: onSuccess.bind(this), entity: 'update-gfs', @@ -210,25 +167,6 @@ export default class ImportGlobalFields extends BaseClass { }); } - serializeUpdateGFs(apiOptions: ApiOptions): ApiOptions { - const { - apiData: { uid }, - } = apiOptions; - const globalField = find(this.gFs, { uid }); - lookupExtension( - this.importConfig, - globalField.schema, - this.importConfig.preserveStackVersion, - this.installedExtensions, - ); - const globalFieldPayload = this.stack.globalField( - uid, { api_version: nestedGlobalFieldsVersion }, - ); - Object.assign(globalFieldPayload, cloneDeep(globalField)); - apiOptions.apiData = globalFieldPayload; - return apiOptions; - } - async replaceGFs(): Promise { const onSuccess = ({ response: globalField, apiData: { uid } = { uid: null } }: any) => { this.createdGFs.push(globalField); diff --git a/packages/contentstack-import/src/utils/global-field-helper.ts b/packages/contentstack-import/src/utils/global-field-helper.ts new file mode 100644 index 0000000000..fcd8b664ca --- /dev/null +++ b/packages/contentstack-import/src/utils/global-field-helper.ts @@ -0,0 +1,27 @@ +/** + * Global field utiles + * schema template + * remove reference fields + * suppress mandatory fields + */ + +export const gfSchemaTemplate = { + "global_field": { + "title": "Seed", + "uid": "", + "schema": [ + { + "display_name": "Title", + "uid": "title", + "data_type": "text", + "field_metadata": { + "_default": true + }, + "unique": false, + "mandatory": true, + "multiple": false + } + ], + "description": "Seed " + } + }; \ No newline at end of file From 8885fa587c2b106fd2526cbf24deb2a8a96f8706 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 13:26:26 +0530 Subject: [PATCH 05/15] Fixed PR comments --- .../contentstack-import/src/import/modules/global-fields.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index a7a6f2fa0e..5af9b748b9 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -98,7 +98,7 @@ export default class ImportGlobalFields extends BaseClass { } async seedGFs(): Promise { - const onSuccess = async ({ response: globalField, apiData: { uid } = undefined }: any) => { + const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; log(this.importConfig, `${uid} Global field seeded`, 'info'); From c37dab7de5b396b253f45316ea0730b6503d3307 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:28:42 +0530 Subject: [PATCH 06/15] Updated code --- .../src/import/modules/base-class.ts | 3 +- .../src/import/modules/global-fields.ts | 30 +++++++++++++++---- 2 files changed, 27 insertions(+), 6 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/base-class.ts b/packages/contentstack-import/src/import/modules/base-class.ts index e3acbb18f8..a842223adc 100644 --- a/packages/contentstack-import/src/import/modules/base-class.ts +++ b/packages/contentstack-import/src/import/modules/base-class.ts @@ -19,6 +19,7 @@ import { RoleData } from '@contentstack/management/types/stack/role'; import { log } from '../../utils'; import { ImportConfig, ModuleClassParams } from '../../types'; +const nestedGlobalFieldsVersion = '3.2'; export type AdditionalKeys = { backupDir: string; @@ -316,7 +317,7 @@ export default abstract class BaseClass { case 'update-cts': return apiData.update().then(onSuccess).catch(onReject); case 'create-gfs': - return this.stack.globalField().create(apiData).then(onSuccess).catch(onReject); + return this.stack.globalField({api_version: nestedGlobalFieldsVersion}).create(apiData).then(onSuccess).catch(onReject); case 'update-gfs': return apiData.update().then(onSuccess).catch(onReject); case 'create-environments': diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 5af9b748b9..215dd90475 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -33,7 +33,6 @@ export default class ImportGlobalFields extends BaseClass { private reqConcurrency: number; private installedExtensions: Record; private existingGFs: Record[]; - private fieldRules: Array>; private gFsConfig: { dirName: string; fileName: string; @@ -52,7 +51,6 @@ export default class ImportGlobalFields extends BaseClass { this.failedGFs = []; this.pendingGFs = []; this.existingGFs = []; - this.fieldRules = []; this.reqConcurrency = this.gFsConfig.writeConcurrency || this.config.writeConcurrency; this.gFsMapperPath = path.resolve(sanitizePath(this.config.data), 'mapper', 'global_fields'); this.gFsFolderPath = path.resolve(sanitizePath(this.config.data), sanitizePath(this.gFsConfig.dirName)); @@ -101,7 +99,7 @@ export default class ImportGlobalFields extends BaseClass { const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; - log(this.importConfig, `${uid} Global field seeded`, 'info'); + log(this.importConfig, `${globalField.uid} Global field seeded`, 'info'); }; const onReject = ({ error, apiData: globalField = undefined }: any) => { const uid = globalField.uid; @@ -110,7 +108,7 @@ export default class ImportGlobalFields extends BaseClass { this.existingGFs.push(globalField); } if (!this.importConfig.skipExisting) { - log(this.importConfig, `Global fields '${uid}' already exist`, 'info'); + log(this.importConfig, `Global fields '${globalField.uid}' already exist`, 'info'); } } else { log(this.importConfig, `Global fields '${uid}' failed to import`, 'error'); @@ -153,11 +151,12 @@ export default class ImportGlobalFields extends BaseClass { const onReject = ({ error, apiData: { uid } = undefined }: any) => { log(this.importConfig, `Failed to update the global field '${uid}' ${formatError(error)}`, 'error'); }; + return await this.makeConcurrentCall({ processName: 'Update Global Fields', apiContent: this.gFs, apiParams: { - serializeData: this.serializeReplaceGFs.bind(this), + serializeData: this.serializeUpdateGFs.bind(this), reject: onReject.bind(this), resolve: onSuccess.bind(this), entity: 'update-gfs', @@ -167,6 +166,27 @@ export default class ImportGlobalFields extends BaseClass { }); } + /** + * @method serializeUpdateGFs + * @param {ApiOptions} apiOptions ApiOptions + * @returns {ApiOptions} ApiOptions + */ + serializeUpdateGFs(apiOptions: ApiOptions): ApiOptions { + const { apiData: globalField } = apiOptions; + lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); + let flag = { supressed: false }; + removeReferenceFields(globalField.schema, flag, this.stack); + if (flag.supressed) { + this.pendingGFs.push(globalField.uid); + } + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: nestedGlobalFieldsVersion }); + Object.assign(globalFieldPayload, cloneDeep(globalField), { + stackHeaders: globalFieldPayload.stackHeaders, + }); + apiOptions.apiData = globalFieldPayload; + return apiOptions; + } + async replaceGFs(): Promise { const onSuccess = ({ response: globalField, apiData: { uid } = { uid: null } }: any) => { this.createdGFs.push(globalField); From 8d3278b98f55a53a61c20ee77e6b60f916f5e3ce Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 15:59:32 +0530 Subject: [PATCH 07/15] Fixed PR comments --- .../src/import/modules/base-class.ts | 3 +-- .../src/import/modules/global-fields.ts | 10 +++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/base-class.ts b/packages/contentstack-import/src/import/modules/base-class.ts index a842223adc..a02d2f9962 100644 --- a/packages/contentstack-import/src/import/modules/base-class.ts +++ b/packages/contentstack-import/src/import/modules/base-class.ts @@ -19,7 +19,6 @@ import { RoleData } from '@contentstack/management/types/stack/role'; import { log } from '../../utils'; import { ImportConfig, ModuleClassParams } from '../../types'; -const nestedGlobalFieldsVersion = '3.2'; export type AdditionalKeys = { backupDir: string; @@ -317,7 +316,7 @@ export default abstract class BaseClass { case 'update-cts': return apiData.update().then(onSuccess).catch(onReject); case 'create-gfs': - return this.stack.globalField({api_version: nestedGlobalFieldsVersion}).create(apiData).then(onSuccess).catch(onReject); + return this.stack.globalField({api_version: '3.2'}).create(apiData).then(onSuccess).catch(onReject); case 'update-gfs': return apiData.update().then(onSuccess).catch(onReject); case 'create-environments': diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 215dd90475..0e49ad49f1 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -14,7 +14,7 @@ import { ImportConfig, ModuleClassParams } from '../../types'; import BaseClass, { ApiOptions } from './base-class'; import { gfSchemaTemplate } from '../../utils/global-field-helper'; -const nestedGlobalFieldsVersion = '3.2'; + export default class ImportGlobalFields extends BaseClass { private gFsMapperPath: string; private gFsFolderPath: string; @@ -102,13 +102,13 @@ export default class ImportGlobalFields extends BaseClass { log(this.importConfig, `${globalField.uid} Global field seeded`, 'info'); }; const onReject = ({ error, apiData: globalField = undefined }: any) => { - const uid = globalField.uid; + const uid = globalField?.uid; if (error?.errors?.title) { if (this.importConfig.replaceExisting) { this.existingGFs.push(globalField); } if (!this.importConfig.skipExisting) { - log(this.importConfig, `Global fields '${globalField.uid}' already exist`, 'info'); + log(this.importConfig, `Global fields '${globalField?.global_field?.uid}' already exist`, 'info'); } } else { log(this.importConfig, `Global fields '${uid}' failed to import`, 'error'); @@ -179,7 +179,7 @@ export default class ImportGlobalFields extends BaseClass { if (flag.supressed) { this.pendingGFs.push(globalField.uid); } - const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: nestedGlobalFieldsVersion }); + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); Object.assign(globalFieldPayload, cloneDeep(globalField), { stackHeaders: globalFieldPayload.stackHeaders, }); @@ -226,7 +226,7 @@ export default class ImportGlobalFields extends BaseClass { */ serializeReplaceGFs(apiOptions: ApiOptions): ApiOptions { const { apiData: globalField } = apiOptions; - const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: nestedGlobalFieldsVersion }); + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); Object.assign(globalFieldPayload, cloneDeep(globalField), { stackHeaders: globalFieldPayload.stackHeaders, }); From 5cbbd04721a241eef1c309cf8453b423ca5c64e4 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:00:50 +0530 Subject: [PATCH 08/15] Fixed PR comments --- .../contentstack-import/src/import/modules/content-types.ts | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/content-types.ts b/packages/contentstack-import/src/import/modules/content-types.ts index 24f5e3fb28..d7effed730 100644 --- a/packages/contentstack-import/src/import/modules/content-types.ts +++ b/packages/contentstack-import/src/import/modules/content-types.ts @@ -18,7 +18,6 @@ type GlobalFieldData = { title: string; schema: Array<{ data_type: string }>; }; -const nestedGlobalFieldsVersion = '3.2'; export default class ContentTypesImport extends BaseClass { private cTsMapperPath: string; @@ -274,7 +273,7 @@ export default class ContentTypesImport extends BaseClass { this.installedExtensions, ); const globalFieldPayload = this.stack.globalField( - uid, { api_version: nestedGlobalFieldsVersion }, + uid, { api_version: '3.2' }, ); Object.assign(globalFieldPayload, cloneDeep(globalField)); apiOptions.apiData = globalFieldPayload; From fc2d743ddab87a04a8e108f317b996b4f6798767 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:02:25 +0530 Subject: [PATCH 09/15] Removed unused code --- .../contentstack-import/src/import/modules/global-fields.ts | 4 ---- 1 file changed, 4 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 0e49ad49f1..97326a3eb1 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -82,10 +82,6 @@ export default class ImportGlobalFields extends BaseClass { await this.updateGFs(); log(this.importConfig, 'Updated Global Fields', 'success'); - // await this.updateGFs().catch((error) => { - // log(this.importConfig, `Error while updating global field ${formatError(error)}`, 'error'); - // }); - if (this.importConfig.replaceExisting && this.existingGFs.length > 0) { await this.replaceGFs().catch((error: Error) => { log(this.importConfig, `Error while replacing global fields ${formatError(error)}`, 'error'); From 612cd36753468b86d53813612d415d85df1e8768 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:07:49 +0530 Subject: [PATCH 10/15] Updated display text. --- .../contentstack-import/src/import/modules/global-fields.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 97326a3eb1..b4a6129f24 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -95,7 +95,7 @@ export default class ImportGlobalFields extends BaseClass { const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; - log(this.importConfig, `${globalField.uid} Global field seeded`, 'info'); + log(this.importConfig, `Global field ${globalField.uid} created successfully`, 'success'); }; const onReject = ({ error, apiData: globalField = undefined }: any) => { const uid = globalField?.uid; From 093969ea4d1849e61496093b61379a283571f9b7 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Wed, 8 Jan 2025 16:43:02 +0530 Subject: [PATCH 11/15] Fixed PR comments --- .../src/import/modules/global-fields.ts | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index b4a6129f24..a193662c77 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -95,7 +95,7 @@ export default class ImportGlobalFields extends BaseClass { const onSuccess = ({ response: globalField, apiData: { uid } = undefined }: any) => { this.createdGFs.push(globalField); this.gFsUidMapper[uid] = globalField; - log(this.importConfig, `Global field ${globalField.uid} created successfully`, 'success'); + log(this.importConfig, `Global field ${globalField.uid} created successfully`, 'success'); }; const onReject = ({ error, apiData: globalField = undefined }: any) => { const uid = globalField?.uid; @@ -174,12 +174,15 @@ export default class ImportGlobalFields extends BaseClass { removeReferenceFields(globalField.schema, flag, this.stack); if (flag.supressed) { this.pendingGFs.push(globalField.uid); + apiOptions.entity = undefined; + } + else{ + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); + Object.assign(globalFieldPayload, cloneDeep(globalField), { + stackHeaders: globalFieldPayload.stackHeaders, + }); + apiOptions.apiData = globalFieldPayload; } - const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); - Object.assign(globalFieldPayload, cloneDeep(globalField), { - stackHeaders: globalFieldPayload.stackHeaders, - }); - apiOptions.apiData = globalFieldPayload; return apiOptions; } From 04528e58f8bfefa10da01cf1e9f5a9b2f51f39ed Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Thu, 9 Jan 2025 12:55:48 +0530 Subject: [PATCH 12/15] Fixed PR comments --- .../contentstack-import/src/import/modules/global-fields.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index a193662c77..5bca5482db 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -167,11 +167,11 @@ export default class ImportGlobalFields extends BaseClass { * @param {ApiOptions} apiOptions ApiOptions * @returns {ApiOptions} ApiOptions */ - serializeUpdateGFs(apiOptions: ApiOptions): ApiOptions { + async serializeUpdateGFs(apiOptions: ApiOptions): Promise { const { apiData: globalField } = apiOptions; lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); let flag = { supressed: false }; - removeReferenceFields(globalField.schema, flag, this.stack); + await removeReferenceFields(globalField.schema, flag, this.stack); if (flag.supressed) { this.pendingGFs.push(globalField.uid); apiOptions.entity = undefined; From cefdd24322990795f119ce19652fcb0e759824d0 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Thu, 16 Jan 2025 10:58:16 +0530 Subject: [PATCH 13/15] Fixed PR comments --- .../src/import/modules/global-fields.ts | 68 +++++++++++++++---- 1 file changed, 53 insertions(+), 15 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 5bca5482db..5e73e8133c 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -159,6 +159,52 @@ export default class ImportGlobalFields extends BaseClass { includeParamOnCompletion: true, }, concurrencyLimit: this.reqConcurrency, + }, + this.updateSerializedGFs.bind(this), + ); + } + + async updateSerializedGFs({ + apiParams, + element: globalField, + isLastRequest, + }: { + apiParams: ApiOptions; + element: Record; + isLastRequest: boolean; + }) { + return new Promise(async (resolve, reject) => { + lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); + let flag = { supressed: false }; + await removeReferenceFields(globalField.schema, flag, this.stack); + if (flag.supressed) { + this.pendingGFs.push(globalField.uid); + } + return this.stack + .globalField(globalField.uid, { api_version: '3.2' }) + .fetch() + .then((originalGlobalField) => { + Object.assign(originalGlobalField, { + title: globalField.title, + schema: globalField.schema, + description: globalField.description, + }); + return originalGlobalField.update() + }) + .then((response: GlobalField) => { + apiParams.resolve({ + response, + apiData: globalField, + }); + resolve(true); + }) + .catch((error: unknown) => { + apiParams.reject({ + error, + apiData: globalField, + }); + reject(true); + }); }); } @@ -169,20 +215,12 @@ export default class ImportGlobalFields extends BaseClass { */ async serializeUpdateGFs(apiOptions: ApiOptions): Promise { const { apiData: globalField } = apiOptions; - lookupExtension(this.config, globalField.schema, this.config.preserveStackVersion, this.installedExtensions); - let flag = { supressed: false }; - await removeReferenceFields(globalField.schema, flag, this.stack); - if (flag.supressed) { - this.pendingGFs.push(globalField.uid); - apiOptions.entity = undefined; - } - else{ - const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); - Object.assign(globalFieldPayload, cloneDeep(globalField), { - stackHeaders: globalFieldPayload.stackHeaders, - }); - apiOptions.apiData = globalFieldPayload; - } + const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); + Object.assign(globalFieldPayload, cloneDeep(globalField), { + stackHeaders: globalFieldPayload.stackHeaders, + }); + apiOptions.apiData = globalFieldPayload; + console.log('apiOptions', apiOptions); return apiOptions; } @@ -219,7 +257,7 @@ export default class ImportGlobalFields extends BaseClass { } /** - * @method serializeUpdateGFs + * @method serializeReplaceGFs * @param {ApiOptions} apiOptions ApiOptions * @returns {ApiOptions} ApiOptions */ From 48073575f93657318d3e6b8a6868b20d83dfcbc7 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Thu, 16 Jan 2025 15:31:32 +0530 Subject: [PATCH 14/15] Fixed PR comments --- .../src/import/modules/global-fields.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 5e73e8133c..3c4f6744e2 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -182,15 +182,7 @@ export default class ImportGlobalFields extends BaseClass { } return this.stack .globalField(globalField.uid, { api_version: '3.2' }) - .fetch() - .then((originalGlobalField) => { - Object.assign(originalGlobalField, { - title: globalField.title, - schema: globalField.schema, - description: globalField.description, - }); - return originalGlobalField.update() - }) + .update({ global_field: globalField }) .then((response: GlobalField) => { apiParams.resolve({ response, @@ -220,7 +212,6 @@ export default class ImportGlobalFields extends BaseClass { stackHeaders: globalFieldPayload.stackHeaders, }); apiOptions.apiData = globalFieldPayload; - console.log('apiOptions', apiOptions); return apiOptions; } From aab6daaa1adbc48a7b5f68871a3da250618cff83 Mon Sep 17 00:00:00 2001 From: sunil-lakshman <104969541+sunil-lakshman@users.noreply.github.com> Date: Mon, 20 Jan 2025 15:00:43 +0530 Subject: [PATCH 15/15] Fixed PR comments --- .../src/export/modules/global-fields.ts | 2 +- .../src/import/modules/content-types.ts | 6 ------ .../src/import/modules/global-fields.ts | 16 ---------------- 3 files changed, 1 insertion(+), 23 deletions(-) diff --git a/packages/contentstack-export/src/export/modules/global-fields.ts b/packages/contentstack-export/src/export/modules/global-fields.ts index 3085eeb3cd..a6d0368b1e 100644 --- a/packages/contentstack-export/src/export/modules/global-fields.ts +++ b/packages/contentstack-export/src/export/modules/global-fields.ts @@ -60,7 +60,7 @@ export default class GlobalFieldsExport extends BaseClass { if (skip) { this.qs.skip = skip; } - let globalFieldsFetchResponse = await this.stackAPIClient.globalField().query(this.qs).find(); + let globalFieldsFetchResponse = await this.stackAPIClient.globalField({api_version: '3.2'}).query(this.qs).find(); if (Array.isArray(globalFieldsFetchResponse.items) && globalFieldsFetchResponse.items.length > 0) { this.sanitizeAttribs(globalFieldsFetchResponse.items); skip += this.globalFieldsConfig.limit || 100; diff --git a/packages/contentstack-import/src/import/modules/content-types.ts b/packages/contentstack-import/src/import/modules/content-types.ts index d7effed730..ce04a2d6fc 100644 --- a/packages/contentstack-import/src/import/modules/content-types.ts +++ b/packages/contentstack-import/src/import/modules/content-types.ts @@ -13,12 +13,6 @@ import BaseClass, { ApiOptions } from './base-class'; import { updateFieldRules } from '../../utils/content-type-helper'; import { sanitizePath } from '@contentstack/cli-utilities'; -type GlobalFieldData = { - uid: string; - title: string; - schema: Array<{ data_type: string }>; -}; - export default class ContentTypesImport extends BaseClass { private cTsMapperPath: string; private cTsFolderPath: string; diff --git a/packages/contentstack-import/src/import/modules/global-fields.ts b/packages/contentstack-import/src/import/modules/global-fields.ts index 3c4f6744e2..05e8dab5ad 100644 --- a/packages/contentstack-import/src/import/modules/global-fields.ts +++ b/packages/contentstack-import/src/import/modules/global-fields.ts @@ -152,7 +152,6 @@ export default class ImportGlobalFields extends BaseClass { processName: 'Update Global Fields', apiContent: this.gFs, apiParams: { - serializeData: this.serializeUpdateGFs.bind(this), reject: onReject.bind(this), resolve: onSuccess.bind(this), entity: 'update-gfs', @@ -200,21 +199,6 @@ export default class ImportGlobalFields extends BaseClass { }); } - /** - * @method serializeUpdateGFs - * @param {ApiOptions} apiOptions ApiOptions - * @returns {ApiOptions} ApiOptions - */ - async serializeUpdateGFs(apiOptions: ApiOptions): Promise { - const { apiData: globalField } = apiOptions; - const globalFieldPayload = this.stack.globalField(globalField.uid, { api_version: '3.2' }); - Object.assign(globalFieldPayload, cloneDeep(globalField), { - stackHeaders: globalFieldPayload.stackHeaders, - }); - apiOptions.apiData = globalFieldPayload; - return apiOptions; - } - async replaceGFs(): Promise { const onSuccess = ({ response: globalField, apiData: { uid } = { uid: null } }: any) => { this.createdGFs.push(globalField);