@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,183 @@
|
|
|
1
|
+
import { LanguageVariantElementsBuilder } from '@kontent-ai/management-sdk';
|
|
2
|
+
import { parseAsMigrationReferencesArray } from '../../core/index.js';
|
|
3
|
+
import { richTextProcessor } from '../helpers/rich-text.processor.js';
|
|
4
|
+
const elementsBuilder = new LanguageVariantElementsBuilder();
|
|
5
|
+
/**
|
|
6
|
+
* The purpose of import transform is to take the exported value and convert it to a value that
|
|
7
|
+
* Kontent.ai Management API understands
|
|
8
|
+
*/
|
|
9
|
+
export const importTransforms = {
|
|
10
|
+
subpages: (data) => {
|
|
11
|
+
return elementsBuilder.linkedItemsElement({
|
|
12
|
+
element: {
|
|
13
|
+
codename: data.elementCodename
|
|
14
|
+
},
|
|
15
|
+
value: parseAsMigrationReferencesArray(data.value).map((m) => {
|
|
16
|
+
return {
|
|
17
|
+
codename: m.codename
|
|
18
|
+
};
|
|
19
|
+
})
|
|
20
|
+
});
|
|
21
|
+
},
|
|
22
|
+
asset: (data) => {
|
|
23
|
+
const assetReferences = parseAsMigrationReferencesArray(data.value)
|
|
24
|
+
.map((reference) => reference.codename)
|
|
25
|
+
.map((codename) => {
|
|
26
|
+
const assetState = data.importContext.getAssetStateInTargetEnvironment(codename);
|
|
27
|
+
// only reference with external_id if item does not exist in target env
|
|
28
|
+
// API currently only supports referencing assets by ids only, not by codenames
|
|
29
|
+
return {
|
|
30
|
+
id: assetState.asset ? assetState.asset.id : undefined,
|
|
31
|
+
external_id: assetState.asset ? undefined : assetState.externalIdToUse
|
|
32
|
+
};
|
|
33
|
+
});
|
|
34
|
+
return elementsBuilder.assetElement({
|
|
35
|
+
element: {
|
|
36
|
+
codename: data.elementCodename
|
|
37
|
+
},
|
|
38
|
+
value: assetReferences
|
|
39
|
+
});
|
|
40
|
+
},
|
|
41
|
+
custom: (data) => {
|
|
42
|
+
return elementsBuilder.customElement({
|
|
43
|
+
element: {
|
|
44
|
+
codename: data.elementCodename
|
|
45
|
+
},
|
|
46
|
+
value: data.value?.toString() ?? ''
|
|
47
|
+
});
|
|
48
|
+
},
|
|
49
|
+
date_time: (data) => {
|
|
50
|
+
return elementsBuilder.dateTimeElement({
|
|
51
|
+
element: {
|
|
52
|
+
codename: data.elementCodename
|
|
53
|
+
},
|
|
54
|
+
value: data.value?.toString() ?? null
|
|
55
|
+
});
|
|
56
|
+
},
|
|
57
|
+
modular_content: (data) => {
|
|
58
|
+
const linkedItemReferences = parseAsMigrationReferencesArray(data.value)
|
|
59
|
+
.map((reference) => reference.codename)
|
|
60
|
+
.map((codename) => {
|
|
61
|
+
const itemState = data.importContext.getItemStateInTargetEnvironment(codename);
|
|
62
|
+
// only reference with external_id if item does not exist in target env
|
|
63
|
+
return {
|
|
64
|
+
codename: itemState.item ? itemState.item.codename : undefined,
|
|
65
|
+
external_id: itemState.item ? undefined : itemState.externalIdToUse
|
|
66
|
+
};
|
|
67
|
+
});
|
|
68
|
+
return elementsBuilder.linkedItemsElement({
|
|
69
|
+
element: {
|
|
70
|
+
codename: data.elementCodename
|
|
71
|
+
},
|
|
72
|
+
value: linkedItemReferences
|
|
73
|
+
});
|
|
74
|
+
},
|
|
75
|
+
multiple_choice: (data) => {
|
|
76
|
+
return elementsBuilder.multipleChoiceElement({
|
|
77
|
+
element: {
|
|
78
|
+
codename: data.elementCodename
|
|
79
|
+
},
|
|
80
|
+
value: parseAsMigrationReferencesArray(data.value).map((m) => {
|
|
81
|
+
return {
|
|
82
|
+
codename: m.codename
|
|
83
|
+
};
|
|
84
|
+
})
|
|
85
|
+
});
|
|
86
|
+
},
|
|
87
|
+
number: (data) => {
|
|
88
|
+
return elementsBuilder.numberElement({
|
|
89
|
+
element: {
|
|
90
|
+
codename: data.elementCodename
|
|
91
|
+
},
|
|
92
|
+
value: data.value ? +data.value : null
|
|
93
|
+
});
|
|
94
|
+
},
|
|
95
|
+
rich_text: (data) => {
|
|
96
|
+
const rteElementValue = data.value;
|
|
97
|
+
return elementsBuilder.richTextElement({
|
|
98
|
+
element: {
|
|
99
|
+
codename: data.elementCodename
|
|
100
|
+
},
|
|
101
|
+
components: mapComponents({
|
|
102
|
+
importContext: data.importContext,
|
|
103
|
+
migrationItems: data.migrationItems,
|
|
104
|
+
rteValue: rteElementValue
|
|
105
|
+
}),
|
|
106
|
+
value: processImportRichTextHtmlValue({
|
|
107
|
+
element: rteElementValue,
|
|
108
|
+
importContext: data.importContext,
|
|
109
|
+
migrationItems: data.migrationItems
|
|
110
|
+
}) ?? null
|
|
111
|
+
});
|
|
112
|
+
},
|
|
113
|
+
taxonomy: (data) => {
|
|
114
|
+
return elementsBuilder.taxonomyElement({
|
|
115
|
+
element: {
|
|
116
|
+
codename: data.elementCodename
|
|
117
|
+
},
|
|
118
|
+
value: parseAsMigrationReferencesArray(data.value).map((m) => {
|
|
119
|
+
return {
|
|
120
|
+
codename: m.codename
|
|
121
|
+
};
|
|
122
|
+
})
|
|
123
|
+
});
|
|
124
|
+
},
|
|
125
|
+
text: (data) => {
|
|
126
|
+
return elementsBuilder.textElement({
|
|
127
|
+
element: {
|
|
128
|
+
codename: data.elementCodename
|
|
129
|
+
},
|
|
130
|
+
value: data.value?.toString() ?? null
|
|
131
|
+
});
|
|
132
|
+
},
|
|
133
|
+
url_slug: (data) => {
|
|
134
|
+
const urlSlugElementValue = data.value;
|
|
135
|
+
return elementsBuilder.urlSlugElement({
|
|
136
|
+
element: {
|
|
137
|
+
codename: data.elementCodename
|
|
138
|
+
},
|
|
139
|
+
value: urlSlugElementValue.value?.toString() ?? '',
|
|
140
|
+
mode: urlSlugElementValue.mode
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
};
|
|
144
|
+
function mapComponents(data) {
|
|
145
|
+
return data.rteValue.components.map((component) => {
|
|
146
|
+
const mappedComponent = {
|
|
147
|
+
id: component.system.id,
|
|
148
|
+
type: {
|
|
149
|
+
codename: component.system.type.codename
|
|
150
|
+
},
|
|
151
|
+
elements: Object.entries(component.elements).map(([key, element]) => {
|
|
152
|
+
const transformedElementValue = importTransforms[element.type]({
|
|
153
|
+
elementCodename: key,
|
|
154
|
+
importContext: data.importContext,
|
|
155
|
+
migrationItems: data.migrationItems,
|
|
156
|
+
value: element.value
|
|
157
|
+
});
|
|
158
|
+
return transformedElementValue;
|
|
159
|
+
})
|
|
160
|
+
};
|
|
161
|
+
return mappedComponent;
|
|
162
|
+
});
|
|
163
|
+
}
|
|
164
|
+
function processImportRichTextHtmlValue(data) {
|
|
165
|
+
if (!data.element) {
|
|
166
|
+
return undefined;
|
|
167
|
+
}
|
|
168
|
+
let richTextHtml = data.element.value ?? '';
|
|
169
|
+
// replace item codenames with existing codename or external_id
|
|
170
|
+
richTextHtml = richTextProcessor().processItemCodenames(richTextHtml, (codename) => {
|
|
171
|
+
return data.importContext.getItemStateInTargetEnvironment(codename);
|
|
172
|
+
}).html;
|
|
173
|
+
// replace link item codenames with existing codename or external_id
|
|
174
|
+
richTextHtml = richTextProcessor().processLinkItemCodenames(richTextHtml, (codename) => {
|
|
175
|
+
return data.importContext.getItemStateInTargetEnvironment(codename);
|
|
176
|
+
}).html;
|
|
177
|
+
// replace asset codenames with existing codename or external_id
|
|
178
|
+
richTextHtml = richTextProcessor().processAssetCodenames(richTextHtml, (codename) => {
|
|
179
|
+
return data.importContext.getAssetStateInTargetEnvironment(codename);
|
|
180
|
+
}).html;
|
|
181
|
+
return richTextHtml;
|
|
182
|
+
}
|
|
183
|
+
//# sourceMappingURL=import-transforms.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"import-transforms.js","sourceRoot":"","sources":["../../../../lib/translation/transforms/import-transforms.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../lib/zip/index.ts"],"names":[],"mappings":"AAAA,cAAc,iBAAiB,CAAC;AAChC,cAAc,kBAAkB,CAAC;AACjC,cAAc,mBAAmB,CAAC;AAClC,cAAc,sBAAsB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { Logger, MigrationData } from '../core/index.js';
|
|
2
|
+
import { FileBinaryData } from './zip.models.js';
|
|
3
|
+
export declare function zipManager(logger?: Logger): {
|
|
4
|
+
createZipAsync: (migrationData: MigrationData) => Promise<FileBinaryData>;
|
|
5
|
+
parseZipAsync: (zipFile: Buffer) => Promise<MigrationData>;
|
|
6
|
+
};
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import JSZip from 'jszip';
|
|
2
|
+
import { getDefaultLogger } from '../core/index.js';
|
|
3
|
+
import { zipTransformer } from './zip-transformer.js';
|
|
4
|
+
import { zipPackager } from './zip-packager.js';
|
|
5
|
+
export function zipManager(logger) {
|
|
6
|
+
const loggerToUse = logger ?? getDefaultLogger();
|
|
7
|
+
const createZipAsync = async (migrationData) => {
|
|
8
|
+
loggerToUse.log({
|
|
9
|
+
type: 'info',
|
|
10
|
+
message: `Creating zip package`
|
|
11
|
+
});
|
|
12
|
+
return await zipTransformer(zipPackager(new JSZip()), loggerToUse).transformAsync(migrationData);
|
|
13
|
+
};
|
|
14
|
+
const parseZipAsync = async (zipFile) => {
|
|
15
|
+
loggerToUse.log({
|
|
16
|
+
type: 'info',
|
|
17
|
+
message: `Parsing zip file`
|
|
18
|
+
});
|
|
19
|
+
const zipPackage = zipPackager(await JSZip.loadAsync(zipFile, {}));
|
|
20
|
+
return await zipTransformer(zipPackage, loggerToUse).parseAsync();
|
|
21
|
+
};
|
|
22
|
+
return {
|
|
23
|
+
createZipAsync,
|
|
24
|
+
parseZipAsync
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=zip-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-manager.js","sourceRoot":"","sources":["../../../lib/zip/zip-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAyB,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAGhD,MAAM,UAAU,UAAU,CAAC,MAAe;IACtC,MAAM,WAAW,GAAG,MAAM,IAAI,gBAAgB,EAAE,CAAC;IAEjD,MAAM,cAAc,GAAG,KAAK,EAAE,aAA4B,EAA2B,EAAE;QACnF,WAAW,CAAC,GAAG,CAAC;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,sBAAsB;SAClC,CAAC,CAAC;QAEH,OAAO,MAAM,cAAc,CAAC,WAAW,CAAC,IAAI,KAAK,EAAE,CAAC,EAAE,WAAW,CAAC,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;IACrG,CAAC,CAAC;IAEF,MAAM,aAAa,GAAG,KAAK,EAAE,OAAe,EAA0B,EAAE;QACpE,WAAW,CAAC,GAAG,CAAC;YACZ,IAAI,EAAE,MAAM;YACZ,OAAO,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,MAAM,UAAU,GAAG,WAAW,CAAC,MAAM,KAAK,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACnE,OAAO,MAAM,cAAc,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC,UAAU,EAAE,CAAC;IACtE,CAAC,CAAC;IAEF,OAAO;QACH,cAAc;QACd,aAAa;KAChB,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { formatBytes, getCurrentEnvironment, exitProgram, getDefaultLogger } from '../core/index.js';
|
|
3
|
+
export function zipPackager(jsZip) {
|
|
4
|
+
const getZipOutputType = () => {
|
|
5
|
+
const currentEnv = getCurrentEnvironment();
|
|
6
|
+
if (currentEnv === 'browser') {
|
|
7
|
+
return 'blob';
|
|
8
|
+
}
|
|
9
|
+
if (currentEnv === 'node') {
|
|
10
|
+
return 'nodebuffer';
|
|
11
|
+
}
|
|
12
|
+
exitProgram({
|
|
13
|
+
message: `Unsupported context`
|
|
14
|
+
});
|
|
15
|
+
};
|
|
16
|
+
const getZipSizeInBytes = (zipData) => {
|
|
17
|
+
if (zipData instanceof Blob) {
|
|
18
|
+
return zipData.size;
|
|
19
|
+
}
|
|
20
|
+
else if (zipData instanceof Buffer) {
|
|
21
|
+
return zipData.byteLength;
|
|
22
|
+
}
|
|
23
|
+
exitProgram({
|
|
24
|
+
message: `Unrecognized zip data type '${typeof zipData}'`
|
|
25
|
+
});
|
|
26
|
+
};
|
|
27
|
+
return {
|
|
28
|
+
addFile(filePath, data) {
|
|
29
|
+
return jsZip.file(filePath, data);
|
|
30
|
+
},
|
|
31
|
+
addFolder(name) {
|
|
32
|
+
const folder = jsZip.folder(name);
|
|
33
|
+
if (!folder) {
|
|
34
|
+
throw Error(`Failed to add folder '${name}'`);
|
|
35
|
+
}
|
|
36
|
+
return zipPackager(folder);
|
|
37
|
+
},
|
|
38
|
+
async generateZipAsync(config) {
|
|
39
|
+
const logger = config.logger ?? getDefaultLogger();
|
|
40
|
+
const zipOutputType = getZipOutputType();
|
|
41
|
+
const compressionLevel = config.compressionLevel ?? 9;
|
|
42
|
+
logger.log({
|
|
43
|
+
type: 'info',
|
|
44
|
+
message: `Creating zip file using '${chalk.yellow(zipOutputType)}' with compression level '${chalk.yellow(compressionLevel.toString())}'`
|
|
45
|
+
});
|
|
46
|
+
const result = await jsZip.generateAsync({
|
|
47
|
+
type: zipOutputType,
|
|
48
|
+
compression: 'DEFLATE',
|
|
49
|
+
compressionOptions: {
|
|
50
|
+
level: compressionLevel
|
|
51
|
+
},
|
|
52
|
+
streamFiles: true
|
|
53
|
+
});
|
|
54
|
+
logger.log({
|
|
55
|
+
type: 'info',
|
|
56
|
+
message: `Zip successfully generated (${chalk.yellow(formatBytes(getZipSizeInBytes(result)))})`
|
|
57
|
+
});
|
|
58
|
+
return result;
|
|
59
|
+
},
|
|
60
|
+
async getBinaryDataAsync(filePath) {
|
|
61
|
+
const binaryData = await jsZip.file(filePath)?.async(getZipOutputType());
|
|
62
|
+
return binaryData;
|
|
63
|
+
},
|
|
64
|
+
async getFileContentAsync(filePath) {
|
|
65
|
+
return await jsZip.file(filePath)?.async('string');
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=zip-packager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-packager.js","sourceRoot":"","sources":["../../../lib/zip/zip-packager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAU,WAAW,EAAE,qBAAqB,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAC;AAG7G,MAAM,UAAU,WAAW,CAAC,KAAY;IACpC,MAAM,gBAAgB,GAAG,GAA0B,EAAE;QACjD,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;QAE3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;YACxB,OAAO,YAAY,CAAC;QACxB,CAAC;QAED,WAAW,CAAC;YACR,OAAO,EAAE,qBAAqB;SACjC,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,OAAuB,EAAU,EAAE;QAC1D,IAAI,OAAO,YAAY,IAAI,EAAE,CAAC;YAC1B,OAAO,OAAO,CAAC,IAAI,CAAC;QACxB,CAAC;aAAM,IAAI,OAAO,YAAY,MAAM,EAAE,CAAC;YACnC,OAAO,OAAO,CAAC,UAAU,CAAC;QAC9B,CAAC;QAED,WAAW,CAAC;YACR,OAAO,EAAE,+BAA+B,OAAO,OAAO,GAAG;SAC5D,CAAC,CAAC;IACP,CAAC,CAAC;IAEF,OAAO;QACH,OAAO,CAAC,QAAgB,EAAE,IAA6B;YACnD,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QACtC,CAAC;QACD,SAAS,CAAC,IAAY;YAClB,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAElC,IAAI,CAAC,MAAM,EAAE,CAAC;gBACV,MAAM,KAAK,CAAC,yBAAyB,IAAI,GAAG,CAAC,CAAC;YAClD,CAAC;YAED,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;QAC/B,CAAC;QACD,KAAK,CAAC,gBAAgB,CAAC,MAGtB;YACG,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,IAAI,gBAAgB,EAAE,CAAC;YACnD,MAAM,aAAa,GAAG,gBAAgB,EAAE,CAAC;YACzC,MAAM,gBAAgB,GAAwB,MAAM,CAAC,gBAAgB,IAAI,CAAC,CAAC;YAE3E,MAAM,CAAC,GAAG,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,4BAA4B,KAAK,CAAC,MAAM,CAC7C,aAAa,CAChB,6BAA6B,KAAK,CAAC,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,CAAC,GAAG;aAC7E,CAAC,CAAC;YAEH,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,aAAa,CAAC;gBACrC,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,SAAS;gBACtB,kBAAkB,EAAE;oBAChB,KAAK,EAAE,gBAAgB;iBAC1B;gBACD,WAAW,EAAE,IAAI;aACpB,CAAC,CAAC;YAEH,MAAM,CAAC,GAAG,CAAC;gBACP,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,+BAA+B,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC,GAAG;aAClG,CAAC,CAAC;YAEH,OAAO,MAAM,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,kBAAkB,CAAC,QAAgB;YACrC,MAAM,UAAU,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC;YACzE,OAAO,UAAU,CAAC;QACtB,CAAC;QACD,KAAK,CAAC,mBAAmB,CAAC,QAAgB;YACtC,OAAO,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAC;QACvD,CAAC;KACJ,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { FileBinaryData, ZipPackager } from './zip.models.js';
|
|
2
|
+
import { Logger, MigrationData } from '../core/index.js';
|
|
3
|
+
export declare function zipTransformer(zip: ZipPackager, logger?: Logger): {
|
|
4
|
+
transformAsync(data: MigrationData): Promise<FileBinaryData>;
|
|
5
|
+
parseAsync(): Promise<MigrationData>;
|
|
6
|
+
};
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import { getDefaultLogger, mapAsync } from '../core/index.js';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
export function zipTransformer(zip, logger) {
|
|
4
|
+
const loggerToUse = logger ?? getDefaultLogger();
|
|
5
|
+
const filename = 'items.json';
|
|
6
|
+
const assetsFilename = 'assets.json';
|
|
7
|
+
const assetsBinaryFolderName = 'binary_data';
|
|
8
|
+
const getAssetFolderConfig = (asset) => {
|
|
9
|
+
const codenamePartialFolder = asset.codename.slice(0, 2);
|
|
10
|
+
return {
|
|
11
|
+
partialColder: codenamePartialFolder,
|
|
12
|
+
fullPath: `${assetsBinaryFolderName}/${codenamePartialFolder}/${asset.codename}/${asset.filename}`
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
const transformItems = (items) => {
|
|
16
|
+
zip.addFile(filename, items.length ? JSON.stringify(items) : '[]');
|
|
17
|
+
};
|
|
18
|
+
const transformAssets = (assets) => {
|
|
19
|
+
const assetRecords = [];
|
|
20
|
+
const binaryDataFolder = zip.addFolder(assetsBinaryFolderName);
|
|
21
|
+
assets.forEach((asset) => {
|
|
22
|
+
const folderConfig = getAssetFolderConfig(asset);
|
|
23
|
+
const partialFolder = binaryDataFolder.addFolder(folderConfig.partialColder);
|
|
24
|
+
const codenameFolder = partialFolder.addFolder(asset.codename);
|
|
25
|
+
assetRecords.push({
|
|
26
|
+
_zipFilename: folderConfig.fullPath,
|
|
27
|
+
filename: asset.filename,
|
|
28
|
+
title: asset.title,
|
|
29
|
+
codename: asset.codename,
|
|
30
|
+
collection: asset.collection,
|
|
31
|
+
descriptions: asset.descriptions
|
|
32
|
+
});
|
|
33
|
+
if (asset.binaryData) {
|
|
34
|
+
codenameFolder.addFile(asset.filename, asset.binaryData);
|
|
35
|
+
}
|
|
36
|
+
});
|
|
37
|
+
zip.addFile(assetsFilename, JSON.stringify(assetRecords));
|
|
38
|
+
};
|
|
39
|
+
const parseItems = async () => {
|
|
40
|
+
const fileContent = await zip.getFileContentAsync(filename);
|
|
41
|
+
return fileContent ? JSON.parse(fileContent) : [];
|
|
42
|
+
};
|
|
43
|
+
const parseAssets = async () => {
|
|
44
|
+
const text = await zip.getFileContentAsync(assetsFilename);
|
|
45
|
+
if (!text) {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
const assetRecords = JSON.parse(text);
|
|
49
|
+
return await mapAsync(assetRecords, async (assetRecord) => {
|
|
50
|
+
const binaryFile = await zip.getBinaryDataAsync(`${assetRecord._zipFilename}`);
|
|
51
|
+
if (!binaryFile) {
|
|
52
|
+
throw Error(`Could not load binary data for file '${chalk.red(assetRecord._zipFilename)}'`);
|
|
53
|
+
}
|
|
54
|
+
const migrationAsset = {
|
|
55
|
+
codename: assetRecord.codename,
|
|
56
|
+
filename: assetRecord.filename,
|
|
57
|
+
collection: assetRecord.collection,
|
|
58
|
+
title: assetRecord.title,
|
|
59
|
+
descriptions: assetRecord.descriptions,
|
|
60
|
+
binaryData: binaryFile
|
|
61
|
+
};
|
|
62
|
+
return migrationAsset;
|
|
63
|
+
});
|
|
64
|
+
};
|
|
65
|
+
return {
|
|
66
|
+
async transformAsync(data) {
|
|
67
|
+
transformItems(data.items);
|
|
68
|
+
transformAssets(data.assets);
|
|
69
|
+
return await zip.generateZipAsync({ logger: loggerToUse });
|
|
70
|
+
},
|
|
71
|
+
async parseAsync() {
|
|
72
|
+
const items = await parseItems();
|
|
73
|
+
const assets = await parseAssets();
|
|
74
|
+
const migrationData = {
|
|
75
|
+
assets: assets,
|
|
76
|
+
items: items
|
|
77
|
+
};
|
|
78
|
+
return migrationData;
|
|
79
|
+
}
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=zip-transformer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip-transformer.js","sourceRoot":"","sources":["../../../lib/zip/zip-transformer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { Logger } from '../core/index.js';
|
|
2
|
+
export type FileBinaryData = Buffer | Blob;
|
|
3
|
+
export type ZipCompressionLevel = 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9;
|
|
4
|
+
export type ZipPackager = {
|
|
5
|
+
addFile(filePath: string, data: string | Blob | Buffer): void;
|
|
6
|
+
addFolder(name: string): ZipPackager;
|
|
7
|
+
generateZipAsync(config: {
|
|
8
|
+
logger?: Logger;
|
|
9
|
+
compressionLevel?: ZipCompressionLevel;
|
|
10
|
+
}): Promise<FileBinaryData>;
|
|
11
|
+
getBinaryDataAsync(filePath: string): Promise<FileBinaryData | undefined>;
|
|
12
|
+
getFileContentAsync(filePath: string): Promise<string | undefined>;
|
|
13
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"zip.models.js","sourceRoot":"","sources":["../../../lib/zip/zip.models.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { WorkflowModels } from '@kontent-ai/management-sdk';
|
|
2
|
+
import chalk from 'chalk';
|
|
3
|
+
import { findRequired } from '../utils/array.utils.js';
|
|
4
|
+
|
|
5
|
+
export type WorkflowStep = {
|
|
6
|
+
readonly codename: string;
|
|
7
|
+
readonly id: string;
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
type WorkflowMatcher = {
|
|
11
|
+
readonly match: (workflow: Readonly<WorkflowModels.Workflow>, index: number) => boolean;
|
|
12
|
+
readonly errorMessage: string;
|
|
13
|
+
};
|
|
14
|
+
type StepMatcher = {
|
|
15
|
+
readonly match: (step: WorkflowStep, index: number) => boolean;
|
|
16
|
+
readonly errorMessage: string;
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export function workflowHelper(workflows: readonly Readonly<WorkflowModels.Workflow>[]) {
|
|
20
|
+
const getWorkflowStep = (workflow: Readonly<WorkflowModels.Workflow>, stepMatcher: StepMatcher): WorkflowStep => {
|
|
21
|
+
return findRequired(
|
|
22
|
+
[...workflow.steps, workflow.archivedStep, workflow.publishedStep, workflow.scheduledStep],
|
|
23
|
+
stepMatcher.match,
|
|
24
|
+
stepMatcher.errorMessage
|
|
25
|
+
);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
const getWorkflow = (workflowMatcher: WorkflowMatcher): Readonly<WorkflowModels.Workflow> => {
|
|
29
|
+
return findRequired(workflows, workflowMatcher.match, workflowMatcher.errorMessage);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
const getWorkflowByCodename = (workflowCodename: string): Readonly<WorkflowModels.Workflow> => {
|
|
33
|
+
return getWorkflow({
|
|
34
|
+
errorMessage: [
|
|
35
|
+
`Workflow with codename '${chalk.red(workflowCodename)}' does not exist in target project`,
|
|
36
|
+
`Available workflows are (${workflows.length}): ${workflows
|
|
37
|
+
.map((m) => chalk.cyan(m.codename))
|
|
38
|
+
.join(', ')}`
|
|
39
|
+
].join(', '),
|
|
40
|
+
match: (workflow) => workflow.codename.toLowerCase() === workflowCodename.toLowerCase()
|
|
41
|
+
});
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
const getWorkflowStepByCodename = (
|
|
45
|
+
workflow: Readonly<WorkflowModels.Workflow>,
|
|
46
|
+
stepCodename: string
|
|
47
|
+
): WorkflowStep => {
|
|
48
|
+
return getWorkflowStep(workflow, {
|
|
49
|
+
errorMessage: [
|
|
50
|
+
`Workflow step with codename '${chalk.red(stepCodename)}' does not exist in target project`,
|
|
51
|
+
`Step in workflow '${chalk.yellow(workflow.codename)}' are (${workflows.length}): ${workflows
|
|
52
|
+
.map((m) => chalk.cyan(m.codename))
|
|
53
|
+
.join(', ')}`
|
|
54
|
+
].join(', '),
|
|
55
|
+
match: (step) => step.codename.toLowerCase() === stepCodename.toLowerCase()
|
|
56
|
+
});
|
|
57
|
+
};
|
|
58
|
+
|
|
59
|
+
const getWorkflowAndStep = (data: {
|
|
60
|
+
readonly workflowMatcher: WorkflowMatcher;
|
|
61
|
+
readonly stepMatcher: StepMatcher;
|
|
62
|
+
}): { step: WorkflowStep; workflow: Readonly<WorkflowModels.Workflow> } => {
|
|
63
|
+
const workflow = getWorkflow(data.workflowMatcher);
|
|
64
|
+
return {
|
|
65
|
+
workflow,
|
|
66
|
+
step: getWorkflowStep(workflow, data.stepMatcher)
|
|
67
|
+
};
|
|
68
|
+
};
|
|
69
|
+
|
|
70
|
+
const getWorkflowAndStepByCodenames = (data: {
|
|
71
|
+
readonly workflowCodename: string;
|
|
72
|
+
readonly stepCodename: string;
|
|
73
|
+
}): { step: WorkflowStep; workflow: Readonly<WorkflowModels.Workflow> } => {
|
|
74
|
+
const workflow = getWorkflowByCodename(data.workflowCodename);
|
|
75
|
+
return {
|
|
76
|
+
workflow,
|
|
77
|
+
step: getWorkflowStepByCodename(workflow, data.stepCodename)
|
|
78
|
+
};
|
|
79
|
+
};
|
|
80
|
+
|
|
81
|
+
const isPublishedStepByCodename = (stepCodename: string): boolean => {
|
|
82
|
+
return workflows.find((workflow) => workflow.publishedStep.codename === stepCodename) ? true : false;
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
const isArchivedStepByCodename = (stepCodename: string): boolean => {
|
|
86
|
+
return workflows.find((workflow) => workflow.archivedStep.codename === stepCodename) ? true : false;
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const isScheduledStepByCodename = (stepCodename: string): boolean => {
|
|
90
|
+
return workflows.find((workflow) => workflow.scheduledStep.codename === stepCodename) ? true : false;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
return {
|
|
94
|
+
getWorkflowByCodename,
|
|
95
|
+
getWorkflowStepByCodename,
|
|
96
|
+
getWorkflowAndStepByCodenames,
|
|
97
|
+
getWorkflowStep,
|
|
98
|
+
getWorkflowAndStep,
|
|
99
|
+
getWorkflow,
|
|
100
|
+
isPublishedStepByCodename,
|
|
101
|
+
isArchivedStepByCodename,
|
|
102
|
+
isScheduledStepByCodename
|
|
103
|
+
};
|
|
104
|
+
}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export * from './utils/global.utils.js';
|
|
2
|
+
export * from './utils/processing-utils.js';
|
|
3
|
+
export * from './utils/http.utils.js';
|
|
4
|
+
export * from './utils/confirm.utils.js';
|
|
5
|
+
export * from './utils/error.utils.js';
|
|
6
|
+
export * from './utils/run.utils.js';
|
|
7
|
+
export * from './utils/external-id.utils.js';
|
|
8
|
+
export * from './utils/binary-data.utils.js';
|
|
9
|
+
export * from './utils/array.utils.js';
|
|
10
|
+
export * from './utils/management-client-utils.js';
|
|
11
|
+
|
|
12
|
+
export * from './models/log.models.js';
|
|
13
|
+
export * from './models/core.models.js';
|
|
14
|
+
export * from './models/migration.models.js';
|
|
15
|
+
|
|
16
|
+
export * from './logs/loggers.js';
|
|
17
|
+
export * from './helpers/workflow-helper.js';
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
import chalk from 'chalk';
|
|
2
|
+
import { Logger, LogSpinnerMessage } from '../models/log.models.js';
|
|
3
|
+
import { getCurrentEnvironment } from '../utils/global.utils.js';
|
|
4
|
+
|
|
5
|
+
const originalWarn = console.warn;
|
|
6
|
+
|
|
7
|
+
export function getDefaultLogger(): Logger {
|
|
8
|
+
const currentEnv = getCurrentEnvironment();
|
|
9
|
+
|
|
10
|
+
if (currentEnv === 'node') {
|
|
11
|
+
return defaultNodeLogger;
|
|
12
|
+
}
|
|
13
|
+
if (currentEnv === 'browser') {
|
|
14
|
+
return defaultBrowserLogger;
|
|
15
|
+
}
|
|
16
|
+
throw Error(`Invalid environment`);
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
const defaultNodeLogger: Logger = {
|
|
20
|
+
log: (data) => console.log(getLogDataMessage(data)),
|
|
21
|
+
logWithSpinnerAsync: async (func) => {
|
|
22
|
+
const ora = await import('ora');
|
|
23
|
+
|
|
24
|
+
return await ora.oraPromise(async (spinner) => {
|
|
25
|
+
// patch global console to prevent disrupting ora instance
|
|
26
|
+
// this often happens when JS SDK logs console.warn for
|
|
27
|
+
// retried requests. Patching this ensures the flow is uninterrupted
|
|
28
|
+
global.console.warn = (m) => {
|
|
29
|
+
if (m) {
|
|
30
|
+
spinner.text = (m as unknown)?.toString() ?? 'Invalid warn value';
|
|
31
|
+
}
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const result = await func((data) => {
|
|
35
|
+
// remember last used prefix. This is useful as we don't have to pass prefix to every single function
|
|
36
|
+
// calling the spinner
|
|
37
|
+
if (data.prefix) {
|
|
38
|
+
spinner.prefixText = data.prefix ?? '';
|
|
39
|
+
}
|
|
40
|
+
spinner.text = getLogDataMessage(data);
|
|
41
|
+
});
|
|
42
|
+
|
|
43
|
+
// restore original warn
|
|
44
|
+
global.console.warn = originalWarn;
|
|
45
|
+
|
|
46
|
+
return result;
|
|
47
|
+
}, {});
|
|
48
|
+
}
|
|
49
|
+
};
|
|
50
|
+
|
|
51
|
+
const defaultBrowserLogger: Logger = {
|
|
52
|
+
log: (data) => console.log(getLogDataMessage(data)),
|
|
53
|
+
logWithSpinnerAsync: async (func) => {
|
|
54
|
+
return await func((data) => {
|
|
55
|
+
const prefix = data.prefix ? `${data.prefix}: ` : '';
|
|
56
|
+
console.log(`${prefix}${getLogDataMessage(data)}`);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
function getLogDataMessage(data: LogSpinnerMessage): string {
|
|
62
|
+
let typeColor = chalk.yellow;
|
|
63
|
+
|
|
64
|
+
if (data.type === 'info') {
|
|
65
|
+
typeColor = chalk.cyan;
|
|
66
|
+
} else if (
|
|
67
|
+
data.type === 'error' ||
|
|
68
|
+
data.type === 'errorData' ||
|
|
69
|
+
data.type === 'warning' ||
|
|
70
|
+
data.type === 'cancel'
|
|
71
|
+
) {
|
|
72
|
+
typeColor = chalk.red;
|
|
73
|
+
} else if (data.type === 'completed') {
|
|
74
|
+
typeColor = chalk.green;
|
|
75
|
+
} else if (data.type === 'skip') {
|
|
76
|
+
typeColor = chalk.gray;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
return `${typeColor(data.type)}: ${data.message}`;
|
|
80
|
+
}
|