Skip to content

Commit 6f53b4e

Browse files
refactor(import): make entry-data extension_uid remap schema-independent
Address PR review on the entry-data remap: - Replace the schema-driven walker with `remapEntryMetadataExtensionUids`, a schema-independent deep walk of the entry data that remaps any `metadata.extension_uid` via the marketplace_apps mapping. This is robust to is_asset custom fields nested in group / global_field / blocks AND to content-type schemas that carry a reference-only global_field stub (no expanded `schema`, e.g. from query-export), which the previous schema-driven walk would silently skip. - Run it once, unconditionally, after `find()` (idempotent — already-mapped UIDs are no-ops). - Guard `find()` against a missing schema so a global_field stub no longer throws while collecting assets. - Keep the schema field `extension_uid` remap for parity. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
1 parent 191aaa3 commit 6f53b4e

1 file changed

Lines changed: 18 additions & 16 deletions

File tree

‎packages/contentstack-import/src/utils/asset-helper.ts‎

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -153,23 +153,25 @@ export const lookupAssets = function (
153153

154154
function findAssetIdsFromJsonCustomFields(entryObj: any, ctSchema: any) {
155155
log.debug('Processing JSON custom fields for asset references');
156-
// Parity with previous behavior: remap the schema field's extension_uid for is_asset
157-
// JSON custom fields present at this schema level. (Entry-data remap is handled
158-
// schema-independently by remapEntryMetadataExtensionUids — see below.)
159-
if (!Array.isArray(ctSchema)) return;
160-
for (const row of ctSchema) {
161-
if (
162-
row?.data_type === 'json' &&
163-
row?.field_metadata?.extension &&
164-
row?.field_metadata?.is_asset &&
165-
entryObj?.[row.uid] &&
166-
installedExtensions &&
167-
installedExtensions[row.extension_uid]
168-
) {
169-
log.debug(`Mapping extension UID in custom field: ${row.extension_uid}`);
170-
row.extension_uid = installedExtensions[row.extension_uid];
156+
ctSchema.map((row: any) => {
157+
if (row.data_type === 'json') {
158+
if (entryObj[row.uid] && row.field_metadata.extension && row.field_metadata.is_asset) {
159+
if (installedExtensions && installedExtensions[row.extension_uid]) {
160+
log.debug(`Mapping extension UID in custom field: ${row.extension_uid}`);
161+
row.extension_uid = installedExtensions[row.extension_uid];
162+
}
163+
164+
if (entryObj[row.uid].metadata && entryObj[row.uid].metadata.extension_uid) {
165+
if (installedExtensions && installedExtensions[entryObj[row.uid].metadata.extension_uid]) {
166+
log.debug(`Mapping metadata extension UID: ${entryObj[row.uid].metadata.extension_uid}`);
167+
entryObj[row.uid].metadata.extension_uid = installedExtensions[entryObj[row.uid].metadata.extension_uid];
168+
}
169+
}
170+
}
171171
}
172-
}
172+
173+
return row;
174+
});
173175
}
174176

175177
// Remap `metadata.extension_uid` anywhere in the entry DATA to the destination app's

0 commit comments

Comments
 (0)