UNPKG

wip-backup-manager

Version:

This utility enables backup & restore of Kentico Kontent projects

84 lines (72 loc) 3.04 kB
import { IImportItemResult, ValidImportContract, ValidImportModel } from './core.models'; export class IdTranslateHelper { public replaceIdReferencesWithNewId( data: any, items: IImportItemResult<ValidImportContract, ValidImportModel>[], ): void { if (data) { if (Array.isArray(data)) { for (const arrayItem of data) { this.replaceIdReferencesWithNewId(arrayItem, items); } } else { for (const key of Object.keys(data)) { const val = (data as any)[key]; if (typeof val === 'string' && val.startsWith('<') && val.endsWith('>')) { // replace string with updated one const newData = this.replaceIdsInRichText(val, items); data[key] = newData; } if (key.toLowerCase() === 'id') { const id = (data as any).id; const newId = this.tryFindNewId(id, items); if (newId) { data.id = newId; } } if (typeof val === 'object' && val !== null) { this.replaceIdReferencesWithNewId(val, items); } } } } } private replaceIdsInRichText( text: string, items: IImportItemResult<ValidImportContract, ValidImportModel>[] ): string { const itemId = { regex: /data-item-id=\"(.*?)\"/g, attr: 'data-item-id' }; const assetId = { regex: /data-asset-id=\"(.*?)\"/g, attr: 'data-asset-id' }; const imageId = { regex: /data-image-id=\"(.*?)\"/g, attr: 'data-image-id' }; const dataId = { regex: /data-id=\"(.*?)\"/g, attr: 'data-id' }; text = this.replaceTextWithRegex(itemId.regex, text, itemId.attr, items); text = this.replaceTextWithRegex(assetId.regex, text, assetId.attr, items); text = this.replaceTextWithRegex(imageId.regex, text, imageId.attr, items); text = this.replaceTextWithRegex(dataId.regex, text, dataId.attr, items); return text; } private replaceTextWithRegex( regex: RegExp, text: string, replaceAttr: string, items: IImportItemResult<ValidImportContract, ValidImportModel>[] ): string { return text.replace(regex, (a, b) => { if (b) { const newId = this.tryFindNewId(b, items); if (newId) { return `${replaceAttr}="${newId}"`; } } return a; }); } private tryFindNewId( id: string, items: IImportItemResult<ValidImportContract, ValidImportModel>[] ): string | undefined { const item = items.find(m => m.originalId === id); return item?.importId; } } export const idTranslateHelper = new IdTranslateHelper();