@kontent-ai/migration-toolkit 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.npmignore +13 -0
- package/LICENSE.md +9 -0
- package/README.md +272 -0
- package/dist/es2022/core/helpers/workflow-helper.d.ts +37 -0
- package/dist/es2022/core/helpers/workflow-helper.js +67 -0
- package/dist/es2022/core/helpers/workflow-helper.js.map +1 -0
- package/dist/es2022/core/index.d.ts +15 -0
- package/dist/es2022/core/index.js +16 -0
- package/dist/es2022/core/index.js.map +1 -0
- package/dist/es2022/core/logs/loggers.d.ts +2 -0
- package/dist/es2022/core/logs/loggers.js +69 -0
- package/dist/es2022/core/logs/loggers.js.map +1 -0
- package/dist/es2022/core/models/core.models.d.ts +91 -0
- package/dist/es2022/core/models/core.models.js +2 -0
- package/dist/es2022/core/models/core.models.js.map +1 -0
- package/dist/es2022/core/models/log.models.d.ts +15 -0
- package/dist/es2022/core/models/log.models.js +2 -0
- package/dist/es2022/core/models/log.models.js.map +1 -0
- package/dist/es2022/core/models/migration.models.d.ts +136 -0
- package/dist/es2022/core/models/migration.models.js +2 -0
- package/dist/es2022/core/models/migration.models.js.map +1 -0
- package/dist/es2022/core/utils/array.utils.d.ts +5 -0
- package/dist/es2022/core/utils/array.utils.js +27 -0
- package/dist/es2022/core/utils/array.utils.js.map +1 -0
- package/dist/es2022/core/utils/binary-data.utils.d.ts +5 -0
- package/dist/es2022/core/utils/binary-data.utils.js +21 -0
- package/dist/es2022/core/utils/binary-data.utils.js.map +1 -0
- package/dist/es2022/core/utils/confirm.utils.d.ts +31 -0
- package/dist/es2022/core/utils/confirm.utils.js +73 -0
- package/dist/es2022/core/utils/confirm.utils.js.map +1 -0
- package/dist/es2022/core/utils/error.utils.d.ts +4 -0
- package/dist/es2022/core/utils/error.utils.js +50 -0
- package/dist/es2022/core/utils/error.utils.js.map +1 -0
- package/dist/es2022/core/utils/external-id.utils.d.ts +5 -0
- package/dist/es2022/core/utils/external-id.utils.js +5 -0
- package/dist/es2022/core/utils/external-id.utils.js.map +1 -0
- package/dist/es2022/core/utils/global.utils.d.ts +14 -0
- package/dist/es2022/core/utils/global.utils.js +45 -0
- package/dist/es2022/core/utils/global.utils.js.map +1 -0
- package/dist/es2022/core/utils/http.utils.d.ts +3 -0
- package/dist/es2022/core/utils/http.utils.js +29 -0
- package/dist/es2022/core/utils/http.utils.js.map +1 -0
- package/dist/es2022/core/utils/management-client-utils.d.ts +19 -0
- package/dist/es2022/core/utils/management-client-utils.js +129 -0
- package/dist/es2022/core/utils/management-client-utils.js.map +1 -0
- package/dist/es2022/core/utils/processing-utils.d.ts +12 -0
- package/dist/es2022/core/utils/processing-utils.js +39 -0
- package/dist/es2022/core/utils/processing-utils.js.map +1 -0
- package/dist/es2022/core/utils/run.utils.d.ts +10 -0
- package/dist/es2022/core/utils/run.utils.js +37 -0
- package/dist/es2022/core/utils/run.utils.js.map +1 -0
- package/dist/es2022/export/context/export-context-fetcher.d.ts +4 -0
- package/dist/es2022/export/context/export-context-fetcher.js +289 -0
- package/dist/es2022/export/context/export-context-fetcher.js.map +1 -0
- package/dist/es2022/export/export-manager.d.ts +5 -0
- package/dist/es2022/export/export-manager.js +167 -0
- package/dist/es2022/export/export-manager.js.map +1 -0
- package/dist/es2022/export/export.models.d.ts +55 -0
- package/dist/es2022/export/export.models.js +2 -0
- package/dist/es2022/export/export.models.js.map +1 -0
- package/dist/es2022/export/index.d.ts +2 -0
- package/dist/es2022/export/index.js +3 -0
- package/dist/es2022/export/index.js.map +1 -0
- package/dist/es2022/export/utils/export.utils.d.ts +2 -0
- package/dist/es2022/export/utils/export.utils.js +5 -0
- package/dist/es2022/export/utils/export.utils.js.map +1 -0
- package/dist/es2022/file/file-manager.d.ts +5 -0
- package/dist/es2022/file/file-manager.js +29 -0
- package/dist/es2022/file/file-manager.js.map +1 -0
- package/dist/es2022/file/index.d.ts +1 -0
- package/dist/es2022/file/index.js +2 -0
- package/dist/es2022/file/index.js.map +1 -0
- package/dist/es2022/import/comparers/asset-comparer.d.ts +12 -0
- package/dist/es2022/import/comparers/asset-comparer.js +65 -0
- package/dist/es2022/import/comparers/asset-comparer.js.map +1 -0
- package/dist/es2022/import/context/import-context-fetcher.d.ts +4 -0
- package/dist/es2022/import/context/import-context-fetcher.js +235 -0
- package/dist/es2022/import/context/import-context-fetcher.js.map +1 -0
- package/dist/es2022/import/import-manager.d.ts +4 -0
- package/dist/es2022/import/import-manager.js +80 -0
- package/dist/es2022/import/import-manager.js.map +1 -0
- package/dist/es2022/import/import.models.d.ts +45 -0
- package/dist/es2022/import/import.models.js +2 -0
- package/dist/es2022/import/import.models.js.map +1 -0
- package/dist/es2022/import/importers/assets-importer.d.ts +10 -0
- package/dist/es2022/import/importers/assets-importer.js +175 -0
- package/dist/es2022/import/importers/assets-importer.js.map +1 -0
- package/dist/es2022/import/importers/content-items-importer.d.ts +10 -0
- package/dist/es2022/import/importers/content-items-importer.js +97 -0
- package/dist/es2022/import/importers/content-items-importer.js.map +1 -0
- package/dist/es2022/import/importers/language-variant-importer.d.ts +11 -0
- package/dist/es2022/import/importers/language-variant-importer.js +215 -0
- package/dist/es2022/import/importers/language-variant-importer.js.map +1 -0
- package/dist/es2022/import/importers/workflow-importer.d.ts +18 -0
- package/dist/es2022/import/importers/workflow-importer.js +122 -0
- package/dist/es2022/import/importers/workflow-importer.js.map +1 -0
- package/dist/es2022/import/index.d.ts +2 -0
- package/dist/es2022/import/index.js +3 -0
- package/dist/es2022/import/index.js.map +1 -0
- package/dist/es2022/import/utils/import.utils.d.ts +2 -0
- package/dist/es2022/import/utils/import.utils.js +5 -0
- package/dist/es2022/import/utils/import.utils.js.map +1 -0
- package/dist/es2022/index.d.ts +8 -0
- package/dist/es2022/index.js +10 -0
- package/dist/es2022/index.js.map +1 -0
- package/dist/es2022/metadata.d.ts +5 -0
- package/dist/es2022/metadata.js +6 -0
- package/dist/es2022/metadata.js.map +1 -0
- package/dist/es2022/node/cli/actions/export-action.d.ts +2 -0
- package/dist/es2022/node/cli/actions/export-action.js +40 -0
- package/dist/es2022/node/cli/actions/export-action.js.map +1 -0
- package/dist/es2022/node/cli/actions/import-action.d.ts +2 -0
- package/dist/es2022/node/cli/actions/import-action.js +29 -0
- package/dist/es2022/node/cli/actions/import-action.js.map +1 -0
- package/dist/es2022/node/cli/actions/migrate-action.d.ts +2 -0
- package/dist/es2022/node/cli/actions/migrate-action.js +47 -0
- package/dist/es2022/node/cli/actions/migrate-action.js.map +1 -0
- package/dist/es2022/node/cli/app.d.ts +2 -0
- package/dist/es2022/node/cli/app.js +27 -0
- package/dist/es2022/node/cli/app.js.map +1 -0
- package/dist/es2022/node/cli/args/args-fetcher.d.ts +2 -0
- package/dist/es2022/node/cli/args/args-fetcher.js +46 -0
- package/dist/es2022/node/cli/args/args-fetcher.js.map +1 -0
- package/dist/es2022/node/cli/args/args-setter.d.ts +2 -0
- package/dist/es2022/node/cli/args/args-setter.js +31 -0
- package/dist/es2022/node/cli/args/args-setter.js.map +1 -0
- package/dist/es2022/node/cli/cli.models.d.ts +24 -0
- package/dist/es2022/node/cli/cli.models.js +2 -0
- package/dist/es2022/node/cli/cli.models.js.map +1 -0
- package/dist/es2022/node/cli/commands.d.ts +1 -0
- package/dist/es2022/node/cli/commands.js +157 -0
- package/dist/es2022/node/cli/commands.js.map +1 -0
- package/dist/es2022/toolkit/elements-builder.d.ts +14 -0
- package/dist/es2022/toolkit/elements-builder.js +69 -0
- package/dist/es2022/toolkit/elements-builder.js.map +1 -0
- package/dist/es2022/toolkit/export.d.ts +3 -0
- package/dist/es2022/toolkit/export.js +21 -0
- package/dist/es2022/toolkit/export.js.map +1 -0
- package/dist/es2022/toolkit/file.d.ts +12 -0
- package/dist/es2022/toolkit/file.js +50 -0
- package/dist/es2022/toolkit/file.js.map +1 -0
- package/dist/es2022/toolkit/import.d.ts +2 -0
- package/dist/es2022/toolkit/import.js +21 -0
- package/dist/es2022/toolkit/import.js.map +1 -0
- package/dist/es2022/toolkit/index.d.ts +5 -0
- package/dist/es2022/toolkit/index.js +6 -0
- package/dist/es2022/toolkit/index.js.map +1 -0
- package/dist/es2022/toolkit/migrate.d.ts +21 -0
- package/dist/es2022/toolkit/migrate.js +39 -0
- package/dist/es2022/toolkit/migrate.js.map +1 -0
- package/dist/es2022/translation/extraction/items-extraction.processor.d.ts +24 -0
- package/dist/es2022/translation/extraction/items-extraction.processor.js +108 -0
- package/dist/es2022/translation/extraction/items-extraction.processor.js.map +1 -0
- package/dist/es2022/translation/helpers/rich-text.processor.d.ts +22 -0
- package/dist/es2022/translation/helpers/rich-text.processor.js +209 -0
- package/dist/es2022/translation/helpers/rich-text.processor.js.map +1 -0
- package/dist/es2022/translation/index.d.ts +4 -0
- package/dist/es2022/translation/index.js +5 -0
- package/dist/es2022/translation/index.js.map +1 -0
- package/dist/es2022/translation/transforms/export-transforms.d.ts +3 -0
- package/dist/es2022/translation/transforms/export-transforms.js +196 -0
- package/dist/es2022/translation/transforms/export-transforms.js.map +1 -0
- package/dist/es2022/translation/transforms/import-transforms.d.ts +7 -0
- package/dist/es2022/translation/transforms/import-transforms.js +183 -0
- package/dist/es2022/translation/transforms/import-transforms.js.map +1 -0
- package/dist/es2022/zip/index.d.ts +4 -0
- package/dist/es2022/zip/index.js +5 -0
- package/dist/es2022/zip/index.js.map +1 -0
- package/dist/es2022/zip/zip-manager.d.ts +6 -0
- package/dist/es2022/zip/zip-manager.js +27 -0
- package/dist/es2022/zip/zip-manager.js.map +1 -0
- package/dist/es2022/zip/zip-packager.d.ts +3 -0
- package/dist/es2022/zip/zip-packager.js +69 -0
- package/dist/es2022/zip/zip-packager.js.map +1 -0
- package/dist/es2022/zip/zip-transformer.d.ts +6 -0
- package/dist/es2022/zip/zip-transformer.js +82 -0
- package/dist/es2022/zip/zip-transformer.js.map +1 -0
- package/dist/es2022/zip/zip.models.d.ts +13 -0
- package/dist/es2022/zip/zip.models.js +2 -0
- package/dist/es2022/zip/zip.models.js.map +1 -0
- package/lib/core/helpers/workflow-helper.ts +104 -0
- package/lib/core/index.ts +17 -0
- package/lib/core/logs/loggers.ts +80 -0
- package/lib/core/models/core.models.ts +134 -0
- package/lib/core/models/log.models.ts +31 -0
- package/lib/core/models/migration.models.ts +165 -0
- package/lib/core/utils/array.utils.ts +49 -0
- package/lib/core/utils/binary-data.utils.ts +29 -0
- package/lib/core/utils/confirm.utils.ts +139 -0
- package/lib/core/utils/error.utils.ts +65 -0
- package/lib/core/utils/external-id.utils.ts +9 -0
- package/lib/core/utils/global.utils.ts +59 -0
- package/lib/core/utils/http.utils.ts +35 -0
- package/lib/core/utils/management-client-utils.ts +182 -0
- package/lib/core/utils/processing-utils.ts +71 -0
- package/lib/core/utils/run.utils.ts +51 -0
- package/lib/export/context/export-context-fetcher.ts +475 -0
- package/lib/export/export-manager.ts +249 -0
- package/lib/export/export.models.ts +87 -0
- package/lib/export/index.ts +2 -0
- package/lib/export/utils/export.utils.ts +10 -0
- package/lib/file/file-manager.ts +37 -0
- package/lib/file/index.ts +1 -0
- package/lib/import/comparers/asset-comparer.ts +113 -0
- package/lib/import/context/import-context-fetcher.ts +367 -0
- package/lib/import/import-manager.ts +103 -0
- package/lib/import/import.models.ts +84 -0
- package/lib/import/importers/assets-importer.ts +239 -0
- package/lib/import/importers/content-items-importer.ts +142 -0
- package/lib/import/importers/language-variant-importer.ts +342 -0
- package/lib/import/importers/workflow-importer.ts +159 -0
- package/lib/import/index.ts +2 -0
- package/lib/import/utils/import.utils.ts +10 -0
- package/lib/index.ts +9 -0
- package/lib/metadata.ts +6 -0
- package/lib/node/cli/actions/export-action.ts +45 -0
- package/lib/node/cli/actions/import-action.ts +34 -0
- package/lib/node/cli/actions/migrate-action.ts +52 -0
- package/lib/node/cli/app.ts +29 -0
- package/lib/node/cli/args/args-fetcher.ts +61 -0
- package/lib/node/cli/args/args-setter.ts +35 -0
- package/lib/node/cli/cli.models.ts +28 -0
- package/lib/node/cli/commands.ts +161 -0
- package/lib/toolkit/elements-builder.ts +84 -0
- package/lib/toolkit/export.ts +21 -0
- package/lib/toolkit/file.ts +70 -0
- package/lib/toolkit/import.ts +21 -0
- package/lib/toolkit/index.ts +5 -0
- package/lib/toolkit/migrate.ts +71 -0
- package/lib/translation/extraction/items-extraction.processor.ts +181 -0
- package/lib/translation/helpers/rich-text.processor.ts +300 -0
- package/lib/translation/index.ts +4 -0
- package/lib/translation/transforms/export-transforms.ts +253 -0
- package/lib/translation/transforms/import-transforms.ts +215 -0
- package/lib/zip/index.ts +4 -0
- package/lib/zip/zip-manager.ts +33 -0
- package/lib/zip/zip-packager.ts +86 -0
- package/lib/zip/zip-transformer.ts +105 -0
- package/lib/zip/zip.models.ts +12 -0
- package/package.json +88 -0
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { extractErrorData, processItemsAsync, getBinaryDataFromUrlAsync, getDefaultLogger, isNotUndefined, getMigrationManagementClient, findRequired } from '../core/index.js';
|
|
3
|
+
import { exportTransforms } from '../translation/index.js';
|
|
4
|
+
import { exportContextFetcherAsync } from './context/export-context-fetcher.js';
|
|
5
|
+
export function exportManager(config) {
|
|
6
|
+
const logger = config.logger ?? getDefaultLogger();
|
|
7
|
+
const managementClient = getMigrationManagementClient(config);
|
|
8
|
+
const getMigrationItems = (context) => {
|
|
9
|
+
return context.exportItems.map((exportItem) => mapToMigrationItem(context, exportItem));
|
|
10
|
+
};
|
|
11
|
+
const mapToMigrationItem = (context, exportItem) => {
|
|
12
|
+
const migrationItem = {
|
|
13
|
+
system: {
|
|
14
|
+
name: exportItem.contentItem.name,
|
|
15
|
+
codename: exportItem.contentItem.codename,
|
|
16
|
+
language: { codename: exportItem.language.codename },
|
|
17
|
+
type: { codename: exportItem.contentType.contentTypeCodename },
|
|
18
|
+
collection: { codename: exportItem.collection.codename },
|
|
19
|
+
workflow: {
|
|
20
|
+
codename: exportItem.workflow.codename
|
|
21
|
+
}
|
|
22
|
+
},
|
|
23
|
+
versions: exportItem.versions.map((version) => {
|
|
24
|
+
return {
|
|
25
|
+
elements: getMigrationElements(context, exportItem.contentType, version.languageVariant.elements),
|
|
26
|
+
workflow_step: {
|
|
27
|
+
codename: version.workflowStepCodename
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
})
|
|
31
|
+
};
|
|
32
|
+
return migrationItem;
|
|
33
|
+
};
|
|
34
|
+
const mapToMigrationComponent = (context, component) => {
|
|
35
|
+
const componentType = context.environmentData.contentTypes.find((m) => m.contentTypeId === component.type.id);
|
|
36
|
+
if (!componentType) {
|
|
37
|
+
throw Error(`Could not find content type with id '${chalk.red(component.type.id)}' for component '${chalk.red(component.id)}'`);
|
|
38
|
+
}
|
|
39
|
+
const migrationItem = {
|
|
40
|
+
system: {
|
|
41
|
+
id: component.id,
|
|
42
|
+
type: {
|
|
43
|
+
codename: componentType.contentTypeCodename
|
|
44
|
+
}
|
|
45
|
+
},
|
|
46
|
+
elements: getMigrationElements(context, componentType, component.elements)
|
|
47
|
+
};
|
|
48
|
+
return migrationItem;
|
|
49
|
+
};
|
|
50
|
+
const getMigrationElements = (context, contentType, elements) => {
|
|
51
|
+
return contentType.elements
|
|
52
|
+
.toSorted((a, b) => {
|
|
53
|
+
if (a.codename < b.codename) {
|
|
54
|
+
return -1;
|
|
55
|
+
}
|
|
56
|
+
if (a.codename > b.codename) {
|
|
57
|
+
return 1;
|
|
58
|
+
}
|
|
59
|
+
return 0;
|
|
60
|
+
})
|
|
61
|
+
.reduce((model, typeElement) => {
|
|
62
|
+
const itemElement = findRequired(elements, (m) => m.element.id === typeElement.id, `Could not find element '${chalk.red(typeElement.codename)}'`);
|
|
63
|
+
model[typeElement.codename] = {
|
|
64
|
+
type: typeElement.type,
|
|
65
|
+
value: getValueToStoreFromElement({
|
|
66
|
+
context: context,
|
|
67
|
+
contentType: contentType,
|
|
68
|
+
exportElement: itemElement,
|
|
69
|
+
typeElement: typeElement
|
|
70
|
+
})
|
|
71
|
+
};
|
|
72
|
+
return model;
|
|
73
|
+
}, {});
|
|
74
|
+
};
|
|
75
|
+
const getValueToStoreFromElement = (data) => {
|
|
76
|
+
try {
|
|
77
|
+
return exportTransforms[data.typeElement.type]({
|
|
78
|
+
context: data.context,
|
|
79
|
+
typeElement: data.typeElement,
|
|
80
|
+
exportElement: {
|
|
81
|
+
components: data.exportElement.components.map((component) => mapToMigrationComponent(data.context, component)),
|
|
82
|
+
value: data.exportElement.value,
|
|
83
|
+
urlSlugMode: data.exportElement.mode
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
const errorData = extractErrorData(error);
|
|
89
|
+
let jsonValue = 'n/a';
|
|
90
|
+
try {
|
|
91
|
+
jsonValue = JSON.stringify(data.exportElement.value);
|
|
92
|
+
}
|
|
93
|
+
catch (jsonError) {
|
|
94
|
+
console.error(`Failed to convert json value`, jsonError);
|
|
95
|
+
}
|
|
96
|
+
throw new Error(`Failed to map value of element '${chalk.yellow(data.typeElement.codename)}' of type '${chalk.cyan(data.typeElement.type)}'. Value: ${chalk.bgMagenta(jsonValue)}. Message: ${errorData.message}`);
|
|
97
|
+
}
|
|
98
|
+
};
|
|
99
|
+
const exportAssetsAsync = async (context) => {
|
|
100
|
+
const assets = Array.from(context.referencedData.assetIds)
|
|
101
|
+
.map((assetId) => context.getAssetStateInSourceEnvironment(assetId).asset)
|
|
102
|
+
.filter(isNotUndefined);
|
|
103
|
+
return await getMigrationAssetsWithBinaryDataAsync(assets, context);
|
|
104
|
+
};
|
|
105
|
+
const getMigrationAssetsWithBinaryDataAsync = async (assets, context) => {
|
|
106
|
+
logger.log({
|
|
107
|
+
type: 'info',
|
|
108
|
+
message: `Preparing to download '${chalk.yellow(assets.length.toString())}' assets`
|
|
109
|
+
});
|
|
110
|
+
return await processItemsAsync({
|
|
111
|
+
action: 'Downloading assets',
|
|
112
|
+
logger: logger,
|
|
113
|
+
parallelLimit: 5,
|
|
114
|
+
itemInfo: (input) => {
|
|
115
|
+
return {
|
|
116
|
+
title: input.codename,
|
|
117
|
+
itemType: 'asset'
|
|
118
|
+
};
|
|
119
|
+
},
|
|
120
|
+
items: assets,
|
|
121
|
+
processAsync: async (asset, logSpinner) => {
|
|
122
|
+
const assetCollection = context.environmentData.collections.find((m) => m.id === asset.collection?.reference?.id);
|
|
123
|
+
logSpinner({
|
|
124
|
+
type: 'download',
|
|
125
|
+
message: `${asset.url}`
|
|
126
|
+
});
|
|
127
|
+
const binaryData = await getBinaryDataFromUrlAsync(asset.url);
|
|
128
|
+
const migrationAsset = {
|
|
129
|
+
filename: asset.fileName,
|
|
130
|
+
title: asset.title ?? '',
|
|
131
|
+
codename: asset.codename,
|
|
132
|
+
binaryData: binaryData.data,
|
|
133
|
+
collection: assetCollection ? { codename: assetCollection.codename } : undefined,
|
|
134
|
+
descriptions: asset.descriptions.map((description) => {
|
|
135
|
+
const language = findRequired(context.environmentData.languages, (language) => language.id === description.language.id, `Could not find language with id '${chalk.red(description.language.id)}' requested by asset '${chalk.red(asset.codename)}'`);
|
|
136
|
+
return {
|
|
137
|
+
description: description.description ?? undefined,
|
|
138
|
+
language: {
|
|
139
|
+
codename: language.codename
|
|
140
|
+
}
|
|
141
|
+
};
|
|
142
|
+
})
|
|
143
|
+
};
|
|
144
|
+
return migrationAsset;
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
};
|
|
148
|
+
return {
|
|
149
|
+
async exportAsync() {
|
|
150
|
+
const exportContext = await (await exportContextFetcherAsync({
|
|
151
|
+
exportItems: config.exportItems,
|
|
152
|
+
logger: logger,
|
|
153
|
+
managementClient: managementClient
|
|
154
|
+
})).getExportContextAsync();
|
|
155
|
+
const migrationData = {
|
|
156
|
+
items: getMigrationItems(exportContext),
|
|
157
|
+
assets: await exportAssetsAsync(exportContext)
|
|
158
|
+
};
|
|
159
|
+
logger.log({
|
|
160
|
+
type: 'completed',
|
|
161
|
+
message: `Finished export`
|
|
162
|
+
});
|
|
163
|
+
return migrationData;
|
|
164
|
+
}
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
//# sourceMappingURL=export-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export-manager.js","sourceRoot":"","sources":["../../../lib/export/export-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Logger, FlattenedContentType, AssetStateInSourceEnvironmentById, FlattenedContentTypeElement, ItemStateInSourceEnvironmentById, ReferencedDataInLanguageVariants, MigrationElementValue, MigrationComponent, MigrationUrlSlugMode, ManagementClientConfig } from '../core/index.js';
|
|
2
|
+
import { LanguageVariantModels, ContentItemModels, WorkflowModels, CollectionModels, LanguageModels, TaxonomyModels, ManagementClient, SharedModels } from '@kontent-ai/management-sdk';
|
|
3
|
+
export interface ExportContextEnvironmentData {
|
|
4
|
+
readonly languages: readonly Readonly<LanguageModels.LanguageModel>[];
|
|
5
|
+
readonly contentTypes: readonly Readonly<FlattenedContentType>[];
|
|
6
|
+
readonly collections: readonly Readonly<CollectionModels.Collection>[];
|
|
7
|
+
readonly workflows: readonly Readonly<WorkflowModels.Workflow>[];
|
|
8
|
+
readonly taxonomies: readonly Readonly<TaxonomyModels.Taxonomy>[];
|
|
9
|
+
}
|
|
10
|
+
export type ExportElementValue = string | number | SharedModels.ReferenceObject[] | undefined;
|
|
11
|
+
export interface ExportElement {
|
|
12
|
+
readonly value: ExportElementValue;
|
|
13
|
+
readonly components: readonly MigrationComponent[];
|
|
14
|
+
readonly urlSlugMode: MigrationUrlSlugMode | undefined;
|
|
15
|
+
}
|
|
16
|
+
export type ExportTransformFunc = (data: {
|
|
17
|
+
readonly typeElement: FlattenedContentTypeElement;
|
|
18
|
+
readonly exportElement: ExportElement;
|
|
19
|
+
readonly context: ExportContext;
|
|
20
|
+
}) => MigrationElementValue;
|
|
21
|
+
export interface ExportContext {
|
|
22
|
+
readonly environmentData: ExportContextEnvironmentData;
|
|
23
|
+
readonly referencedData: ReferencedDataInLanguageVariants;
|
|
24
|
+
readonly getItemStateInSourceEnvironment: (id: string) => ItemStateInSourceEnvironmentById;
|
|
25
|
+
readonly getAssetStateInSourceEnvironment: (id: string) => AssetStateInSourceEnvironmentById;
|
|
26
|
+
readonly exportItems: readonly ExportItem[];
|
|
27
|
+
readonly getElement: GetFlattenedElementByIds;
|
|
28
|
+
}
|
|
29
|
+
export interface SourceExportItem {
|
|
30
|
+
readonly itemCodename: string;
|
|
31
|
+
readonly languageCodename: string;
|
|
32
|
+
}
|
|
33
|
+
export interface ExportConfig extends ManagementClientConfig {
|
|
34
|
+
readonly exportItems: readonly SourceExportItem[];
|
|
35
|
+
readonly logger?: Logger;
|
|
36
|
+
}
|
|
37
|
+
export interface DefaultExportContextConfig {
|
|
38
|
+
readonly logger: Logger;
|
|
39
|
+
readonly exportItems: readonly SourceExportItem[];
|
|
40
|
+
readonly managementClient: Readonly<ManagementClient>;
|
|
41
|
+
}
|
|
42
|
+
export type GetFlattenedElementByIds = (contentTypeId: string, elementId: string) => FlattenedContentTypeElement;
|
|
43
|
+
export interface ExportItemVersion {
|
|
44
|
+
readonly workflowStepCodename: string;
|
|
45
|
+
readonly languageVariant: Readonly<LanguageVariantModels.ContentItemLanguageVariant>;
|
|
46
|
+
}
|
|
47
|
+
export interface ExportItem {
|
|
48
|
+
readonly requestItem: SourceExportItem;
|
|
49
|
+
readonly versions: readonly ExportItemVersion[];
|
|
50
|
+
readonly contentItem: Readonly<ContentItemModels.ContentItem>;
|
|
51
|
+
readonly collection: Readonly<CollectionModels.Collection>;
|
|
52
|
+
readonly language: Readonly<LanguageModels.LanguageModel>;
|
|
53
|
+
readonly workflow: Readonly<WorkflowModels.Workflow>;
|
|
54
|
+
readonly contentType: Readonly<FlattenedContentType>;
|
|
55
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.models.js","sourceRoot":"","sources":["../../../lib/export/export.models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/export/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAC;AACnC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
export function throwErrorForItemRequest(itemRequest, message) {
|
|
3
|
+
throw Error(`Export failed for item '${chalk.yellow(itemRequest.itemCodename)}' in language '${chalk.cyan(itemRequest.languageCodename)}'. Reason: ${message}`);
|
|
4
|
+
}
|
|
5
|
+
//# sourceMappingURL=export.utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"export.utils.js","sourceRoot":"","sources":["../../../../lib/export/utils/export.utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAG1B,MAAM,UAAU,wBAAwB,CAAC,WAA6B,EAAE,OAAe;IACnF,MAAM,KAAK,CACP,2BAA2B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,YAAY,CAAC,kBAAkB,KAAK,CAAC,IAAI,CACzF,WAAW,CAAC,gBAAgB,CAC/B,cAAc,OAAO,EAAE,CAC3B,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { promises } from 'fs';
|
|
3
|
+
export function fileManager(logger) {
|
|
4
|
+
const getFilePath = (filename) => {
|
|
5
|
+
return `./${filename}`;
|
|
6
|
+
};
|
|
7
|
+
const loadFileAsync = async (filename) => {
|
|
8
|
+
const filePath = getFilePath(filename);
|
|
9
|
+
logger.log({
|
|
10
|
+
type: 'readFs',
|
|
11
|
+
message: `Reading file '${chalk.yellow(filePath)}'`
|
|
12
|
+
});
|
|
13
|
+
const file = await promises.readFile(filePath);
|
|
14
|
+
return file;
|
|
15
|
+
};
|
|
16
|
+
const writeFileAsync = async (fileNameWithoutExtension, content) => {
|
|
17
|
+
const filePath = getFilePath(fileNameWithoutExtension);
|
|
18
|
+
logger.log({
|
|
19
|
+
type: 'writeFs',
|
|
20
|
+
message: `Storing file '${chalk.yellow(filePath)}'`
|
|
21
|
+
});
|
|
22
|
+
await promises.writeFile(filePath, content);
|
|
23
|
+
};
|
|
24
|
+
return {
|
|
25
|
+
loadFileAsync,
|
|
26
|
+
writeFileAsync
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
//# sourceMappingURL=file-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-manager.js","sourceRoot":"","sources":["../../../lib/file/file-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,QAAQ,EAAE,MAAM,IAAI,CAAC;AAE9B,MAAM,UAAU,WAAW,CAAC,MAAc;IACtC,MAAM,WAAW,GAAG,CAAC,QAAgB,EAAU,EAAE;QAC7C,OAAO,KAAK,QAAQ,EAAE,CAAC;IAC3B,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,QAAgB,EAAmB,EAAE;QAC9D,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAEvC,MAAM,CAAC,GAAG,CAAC;YACP,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,iBAAiB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;SACtD,CAAC,CAAC;QAEH,MAAM,IAAI,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAE/C,OAAO,IAAI,CAAC;IAChB,CAAC,CAAC;IAEF,MAAM,cAAc,GAAG,KAAK,EAAE,wBAAgC,EAAE,OAAwB,EAAiB,EAAE;QACvG,MAAM,QAAQ,GAAG,WAAW,CAAC,wBAAwB,CAAC,CAAC;QAEvD,MAAM,CAAC,GAAG,CAAC;YACP,IAAI,EAAE,SAAS;YACf,OAAO,EAAE,iBAAiB,KAAK,CAAC,MAAM,CAAC,QAAQ,CAAC,GAAG;SACtD,CAAC,CAAC;QACH,MAAM,QAAQ,CAAC,SAAS,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC,CAAC;IAEF,OAAO;QACH,aAAa;QACb,cAAc;KACjB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './file-manager.js';
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/file/index.ts"],"names":[],"mappings":"AAAA,cAAc,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AssetModels, CollectionModels, LanguageModels } from '@kontent-ai/management-sdk';
|
|
2
|
+
import { MigrationAsset } from '../../core/index.js';
|
|
3
|
+
export declare function shouldUpdateAsset(data: {
|
|
4
|
+
readonly migrationAsset: MigrationAsset;
|
|
5
|
+
readonly targetAsset: Readonly<AssetModels.Asset>;
|
|
6
|
+
readonly collections: readonly Readonly<CollectionModels.Collection>[];
|
|
7
|
+
readonly languages: readonly Readonly<LanguageModels.LanguageModel>[];
|
|
8
|
+
}): boolean;
|
|
9
|
+
export declare function shouldReplaceBinaryFile(data: {
|
|
10
|
+
readonly migrationAsset: MigrationAsset;
|
|
11
|
+
readonly targetAsset: Readonly<AssetModels.Asset>;
|
|
12
|
+
}): boolean;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import { findRequired, geSizeInBytes } from '../../core/index.js';
|
|
2
|
+
import deepEqual from 'deep-equal';
|
|
3
|
+
export function shouldUpdateAsset(data) {
|
|
4
|
+
if (!isInSameCollection(data)) {
|
|
5
|
+
return true;
|
|
6
|
+
}
|
|
7
|
+
if (!areDescriptionsIdentical(data)) {
|
|
8
|
+
return true;
|
|
9
|
+
}
|
|
10
|
+
if (!isTitleIdentical(data)) {
|
|
11
|
+
return true;
|
|
12
|
+
}
|
|
13
|
+
if (!isBinaryFileIdentical(data)) {
|
|
14
|
+
return true;
|
|
15
|
+
}
|
|
16
|
+
return false;
|
|
17
|
+
}
|
|
18
|
+
export function shouldReplaceBinaryFile(data) {
|
|
19
|
+
if (!isBinaryFileIdentical(data)) {
|
|
20
|
+
return true;
|
|
21
|
+
}
|
|
22
|
+
return false;
|
|
23
|
+
}
|
|
24
|
+
function isBinaryFileIdentical(data) {
|
|
25
|
+
const sourceFileSize = geSizeInBytes(data.migrationAsset.binaryData);
|
|
26
|
+
const targetFileSize = data.targetAsset.size;
|
|
27
|
+
const sourceFilename = data.migrationAsset.filename;
|
|
28
|
+
const targetFilename = data.targetAsset.fileName;
|
|
29
|
+
return sourceFileSize === targetFileSize && sourceFilename === targetFilename;
|
|
30
|
+
}
|
|
31
|
+
function isTitleIdentical(data) {
|
|
32
|
+
const sourceTitle = data.migrationAsset.title?.length ? data.migrationAsset.title : undefined;
|
|
33
|
+
const targetTitle = data.targetAsset.title?.length ? data.targetAsset.title : undefined;
|
|
34
|
+
return sourceTitle === targetTitle;
|
|
35
|
+
}
|
|
36
|
+
function isInSameCollection(data) {
|
|
37
|
+
return (data.collections.find((m) => m.id === data.targetAsset.collection?.reference?.id)?.codename ===
|
|
38
|
+
data.migrationAsset.collection?.codename);
|
|
39
|
+
}
|
|
40
|
+
function areDescriptionsIdentical(data) {
|
|
41
|
+
const sourceMigrationDescriptions = (data.migrationAsset.descriptions ?? [])
|
|
42
|
+
.map((description) => {
|
|
43
|
+
return {
|
|
44
|
+
description: description.description?.length ? description.description : undefined,
|
|
45
|
+
language: {
|
|
46
|
+
codename: description.language.codename
|
|
47
|
+
}
|
|
48
|
+
};
|
|
49
|
+
})
|
|
50
|
+
.toSorted();
|
|
51
|
+
const targetMigrationDescriptions = mapToMigrationDescriptions(data).toSorted();
|
|
52
|
+
return deepEqual(sourceMigrationDescriptions, targetMigrationDescriptions);
|
|
53
|
+
}
|
|
54
|
+
function mapToMigrationDescriptions(data) {
|
|
55
|
+
return data.targetAsset.descriptions.map((description) => {
|
|
56
|
+
const languageId = description.language.id;
|
|
57
|
+
return {
|
|
58
|
+
description: description.description?.length ? description.description : undefined,
|
|
59
|
+
language: {
|
|
60
|
+
codename: findRequired(data.languages, (language) => language.id === languageId, `Could not find language with id '${languageId}'`).codename
|
|
61
|
+
}
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
//# sourceMappingURL=asset-comparer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"asset-comparer.js","sourceRoot":"","sources":["../../../../lib/import/comparers/asset-comparer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,235 @@
|
|
|
1
|
+
import { findRequired, is404Error, isNotUndefined, managementClientUtils, processItemsAsync, runMapiRequestAsync, workflowHelper } from '../../core/index.js';
|
|
2
|
+
import { itemsExtractionProcessor } from '../../translation/index.js';
|
|
3
|
+
import chalk from 'chalk';
|
|
4
|
+
export async function importContextFetcherAsync(config) {
|
|
5
|
+
const getEnvironmentDataAsync = async () => {
|
|
6
|
+
const mapiUtils = managementClientUtils(config.managementClient, config.logger);
|
|
7
|
+
return await config.logger.logWithSpinnerAsync(async (spinnerData) => {
|
|
8
|
+
spinnerData({ type: 'info', message: `Loading environment data` });
|
|
9
|
+
const environmentData = {
|
|
10
|
+
collections: await mapiUtils.getAllCollectionsAsync(spinnerData),
|
|
11
|
+
languages: await mapiUtils.getAllLanguagesAsync(spinnerData),
|
|
12
|
+
workflows: await mapiUtils.getAllWorkflowsAsync(spinnerData),
|
|
13
|
+
types: await mapiUtils.getFlattenedContentTypesAsync(spinnerData)
|
|
14
|
+
};
|
|
15
|
+
spinnerData({ type: 'info', message: `Environmental data loaded` });
|
|
16
|
+
return environmentData;
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const environmentData = await getEnvironmentDataAsync();
|
|
20
|
+
const getElement = () => {
|
|
21
|
+
const getFlattenedElement = (contentTypeCodename, elementCodename, sourceType) => {
|
|
22
|
+
const contentType = findRequired(environmentData.types, (type) => type.contentTypeCodename === contentTypeCodename, `Content type with codename '${chalk.red(contentTypeCodename)}' was not found.`);
|
|
23
|
+
const element = findRequired(contentType.elements, (element) => element.codename === elementCodename, `Element type with codename '${chalk.red(elementCodename)}' was not found in content type '${chalk.red(contentTypeCodename)}'. Available elements are '${contentType.elements
|
|
24
|
+
.map((element) => chalk.yellow(element.codename))
|
|
25
|
+
.join(', ')}'`);
|
|
26
|
+
if (sourceType !== element.type) {
|
|
27
|
+
throw Error(`Element '${chalk.red(element.codename)}' in content type '${chalk.yellow(contentType.contentTypeCodename)}' is of type '${chalk.red(element.type)}', but source type is '${chalk.yellow(sourceType)}'.`);
|
|
28
|
+
}
|
|
29
|
+
return element;
|
|
30
|
+
};
|
|
31
|
+
return getFlattenedElement;
|
|
32
|
+
};
|
|
33
|
+
const getLanguageVariantsAsync = async (migrationItems) => {
|
|
34
|
+
return (await processItemsAsync({
|
|
35
|
+
action: 'Fetching language variants',
|
|
36
|
+
logger: config.logger,
|
|
37
|
+
parallelLimit: 1,
|
|
38
|
+
items: migrationItems,
|
|
39
|
+
itemInfo: (item) => {
|
|
40
|
+
return {
|
|
41
|
+
itemType: 'languageVariant',
|
|
42
|
+
title: `${item.system.codename} (${item.system.language.codename})`
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
processAsync: async (item, logSpinner) => {
|
|
46
|
+
try {
|
|
47
|
+
const languageVariant = await runMapiRequestAsync({
|
|
48
|
+
logger: config.logger,
|
|
49
|
+
func: async () => (await config.managementClient
|
|
50
|
+
.viewLanguageVariant()
|
|
51
|
+
.byItemCodename(item.system.codename)
|
|
52
|
+
.byLanguageCodename(item.system.language.codename)
|
|
53
|
+
.toPromise()).data,
|
|
54
|
+
action: 'view',
|
|
55
|
+
type: 'languageVariant',
|
|
56
|
+
logSpinner: logSpinner,
|
|
57
|
+
itemName: `codename -> ${item.system.codename} (${item.system.language.codename})`
|
|
58
|
+
});
|
|
59
|
+
return {
|
|
60
|
+
languageVariant: languageVariant,
|
|
61
|
+
migrationItem: item
|
|
62
|
+
};
|
|
63
|
+
}
|
|
64
|
+
catch (error) {
|
|
65
|
+
if (!is404Error(error)) {
|
|
66
|
+
throw error;
|
|
67
|
+
}
|
|
68
|
+
return undefined;
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
})).filter(isNotUndefined);
|
|
72
|
+
};
|
|
73
|
+
const getContentItemsByCodenamesAsync = async (itemCodenames) => {
|
|
74
|
+
return (await processItemsAsync({
|
|
75
|
+
action: 'Fetching content items',
|
|
76
|
+
logger: config.logger,
|
|
77
|
+
parallelLimit: 1,
|
|
78
|
+
items: Array.from(itemCodenames),
|
|
79
|
+
itemInfo: (codename) => {
|
|
80
|
+
return {
|
|
81
|
+
itemType: 'contentItem',
|
|
82
|
+
title: codename
|
|
83
|
+
};
|
|
84
|
+
},
|
|
85
|
+
processAsync: async (codename, logSpinner) => {
|
|
86
|
+
try {
|
|
87
|
+
return await runMapiRequestAsync({
|
|
88
|
+
logger: config.logger,
|
|
89
|
+
func: async () => (await config.managementClient.viewContentItem().byItemCodename(codename).toPromise()).data,
|
|
90
|
+
action: 'view',
|
|
91
|
+
type: 'contentItem',
|
|
92
|
+
logSpinner: logSpinner,
|
|
93
|
+
itemName: `codename -> ${codename}`
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
catch (error) {
|
|
97
|
+
if (!is404Error(error)) {
|
|
98
|
+
throw error;
|
|
99
|
+
}
|
|
100
|
+
return undefined;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
})).filter(isNotUndefined);
|
|
104
|
+
};
|
|
105
|
+
const getAssetsByCodenamesAsync = async (assetCodenames) => {
|
|
106
|
+
return (await processItemsAsync({
|
|
107
|
+
action: 'Fetching assets',
|
|
108
|
+
logger: config.logger,
|
|
109
|
+
parallelLimit: 1,
|
|
110
|
+
items: Array.from(assetCodenames),
|
|
111
|
+
itemInfo: (codename) => {
|
|
112
|
+
return {
|
|
113
|
+
itemType: 'asset',
|
|
114
|
+
title: codename
|
|
115
|
+
};
|
|
116
|
+
},
|
|
117
|
+
processAsync: async (codename, logSpinner) => {
|
|
118
|
+
try {
|
|
119
|
+
return await runMapiRequestAsync({
|
|
120
|
+
logger: config.logger,
|
|
121
|
+
func: async () => (await config.managementClient.viewAsset().byAssetCodename(codename).toPromise()).data,
|
|
122
|
+
action: 'view',
|
|
123
|
+
type: 'asset',
|
|
124
|
+
logSpinner: logSpinner,
|
|
125
|
+
itemName: `codename -> ${codename}`
|
|
126
|
+
});
|
|
127
|
+
}
|
|
128
|
+
catch (error) {
|
|
129
|
+
if (!is404Error(error)) {
|
|
130
|
+
throw error;
|
|
131
|
+
}
|
|
132
|
+
return undefined;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
})).filter(isNotUndefined);
|
|
136
|
+
};
|
|
137
|
+
const getVariantStatesAsync = async (migrationItems) => {
|
|
138
|
+
const variants = await getLanguageVariantsAsync(migrationItems);
|
|
139
|
+
return migrationItems.map((migrationItem) => {
|
|
140
|
+
const variant = variants.find((m) => m.migrationItem.system.codename === migrationItem.system.codename &&
|
|
141
|
+
m.migrationItem.system.language === migrationItem.system.language);
|
|
142
|
+
const variantWorkflowId = variant?.languageVariant?.workflow?.workflowIdentifier?.id;
|
|
143
|
+
const variantStepId = variant?.languageVariant?.workflow?.stepIdentifier?.id;
|
|
144
|
+
const workflow = environmentData.workflows.find((workflow) => workflow.id === variantWorkflowId);
|
|
145
|
+
return {
|
|
146
|
+
itemCodename: migrationItem.system.codename,
|
|
147
|
+
languageCodename: migrationItem.system.language.codename,
|
|
148
|
+
languageVariant: variant?.languageVariant,
|
|
149
|
+
workflow: workflow,
|
|
150
|
+
step: workflow
|
|
151
|
+
? workflowHelper(environmentData.workflows).getWorkflowStep(workflow, {
|
|
152
|
+
errorMessage: `Could not workflow step with id '${chalk.red(variantStepId)}' in workflow '${chalk.yellow(workflow.codename)}'`,
|
|
153
|
+
match: (step) => step.id == variantStepId
|
|
154
|
+
})
|
|
155
|
+
: undefined,
|
|
156
|
+
state: variant ? 'exists' : 'doesNotExists'
|
|
157
|
+
};
|
|
158
|
+
});
|
|
159
|
+
};
|
|
160
|
+
const getItemStatesAsync = async (itemCodenames) => {
|
|
161
|
+
const items = await getContentItemsByCodenamesAsync(itemCodenames);
|
|
162
|
+
return Array.from(itemCodenames).map((codename) => {
|
|
163
|
+
const item = items.find((m) => m.codename === codename);
|
|
164
|
+
return {
|
|
165
|
+
itemCodename: codename,
|
|
166
|
+
item: item,
|
|
167
|
+
state: item ? 'exists' : 'doesNotExists',
|
|
168
|
+
externalIdToUse: config.externalIdGenerator.contentItemExternalId(codename)
|
|
169
|
+
};
|
|
170
|
+
});
|
|
171
|
+
};
|
|
172
|
+
const getAssetStatesAsync = async (assetCodenames) => {
|
|
173
|
+
const assets = await getAssetsByCodenamesAsync(assetCodenames);
|
|
174
|
+
return Array.from(assetCodenames).map((codename) => {
|
|
175
|
+
const asset = assets.find((m) => m.codename === codename);
|
|
176
|
+
return {
|
|
177
|
+
assetCodename: codename,
|
|
178
|
+
asset: asset,
|
|
179
|
+
state: asset ? 'exists' : 'doesNotExists',
|
|
180
|
+
externalIdToUse: config.externalIdGenerator.assetExternalId(codename)
|
|
181
|
+
};
|
|
182
|
+
});
|
|
183
|
+
};
|
|
184
|
+
const getImportContextAsync = async () => {
|
|
185
|
+
const getElementByCodenames = getElement();
|
|
186
|
+
const referencedData = itemsExtractionProcessor().extractReferencedItemsFromMigrationItems(config.migrationData.items.reduce((items, item) => {
|
|
187
|
+
return [
|
|
188
|
+
...items,
|
|
189
|
+
...item.versions.map((version) => {
|
|
190
|
+
const extractionItem = {
|
|
191
|
+
contentTypeCodename: item.system.type.codename,
|
|
192
|
+
elements: version.elements
|
|
193
|
+
};
|
|
194
|
+
return extractionItem;
|
|
195
|
+
})
|
|
196
|
+
];
|
|
197
|
+
}, []), getElementByCodenames);
|
|
198
|
+
// fetch all items, including referenced items in content
|
|
199
|
+
const itemCodenamesToCheckInTargetEnv = new Set([
|
|
200
|
+
...referencedData.itemCodenames,
|
|
201
|
+
...config.migrationData.items.map((m) => m.system.codename)
|
|
202
|
+
]);
|
|
203
|
+
// fetch all assets, including referenced assets in content
|
|
204
|
+
const assetCodenamesToCheckInTargetEnv = new Set([
|
|
205
|
+
...referencedData.assetCodenames,
|
|
206
|
+
...config.migrationData.assets.map((m) => m.codename)
|
|
207
|
+
]);
|
|
208
|
+
// prepare state of objects in target environment
|
|
209
|
+
const itemStates = await getItemStatesAsync(itemCodenamesToCheckInTargetEnv);
|
|
210
|
+
const variantStates = await getVariantStatesAsync(config.migrationData.items);
|
|
211
|
+
const assetStates = await getAssetStatesAsync(assetCodenamesToCheckInTargetEnv);
|
|
212
|
+
return {
|
|
213
|
+
environmentData,
|
|
214
|
+
referencedData,
|
|
215
|
+
categorizedImportData: {
|
|
216
|
+
assets: config.migrationData.assets,
|
|
217
|
+
contentItems: config.migrationData.items
|
|
218
|
+
},
|
|
219
|
+
getItemStateInTargetEnvironment: (itemCodename) => {
|
|
220
|
+
return findRequired(itemStates, (state) => state.itemCodename === itemCodename, `Invalid state for item '${chalk.red(itemCodename)}'. It is expected that all item states will be initialized`);
|
|
221
|
+
},
|
|
222
|
+
getLanguageVariantStateInTargetEnvironment: (itemCodename, languageCodename) => {
|
|
223
|
+
return findRequired(variantStates, (state) => state.itemCodename === itemCodename && state.languageCodename === languageCodename, `Invalid state for language variant '${chalk.red(itemCodename)}' in language '${chalk.red(languageCodename)}'. It is expected that all variant states will be initialized`);
|
|
224
|
+
},
|
|
225
|
+
getAssetStateInTargetEnvironment: (assetCodename) => {
|
|
226
|
+
return findRequired(assetStates, (state) => state.assetCodename === assetCodename, `Invalid state for asset '${chalk.red(assetCodename)}'. It is expected that all asset states will be initialized`);
|
|
227
|
+
},
|
|
228
|
+
getElement: getElementByCodenames
|
|
229
|
+
};
|
|
230
|
+
};
|
|
231
|
+
return {
|
|
232
|
+
getImportContextAsync
|
|
233
|
+
};
|
|
234
|
+
}
|
|
235
|
+
//# sourceMappingURL=import-context-fetcher.js.map
|