@kontent-ai/migration-toolkit 2.9.1 → 3.0.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.
Files changed (235) hide show
  1. package/README.md +19 -17
  2. package/dist/core/config.js +3 -3
  3. package/dist/core/config.js.map +1 -1
  4. package/dist/core/helpers/workflow-helper.d.ts +1 -1
  5. package/dist/core/helpers/workflow-helper.js +28 -26
  6. package/dist/core/helpers/workflow-helper.js.map +1 -1
  7. package/dist/core/logs/loggers.d.ts +1 -1
  8. package/dist/core/logs/loggers.js +15 -15
  9. package/dist/core/logs/loggers.js.map +1 -1
  10. package/dist/core/models/core.models.d.ts +27 -22
  11. package/dist/core/models/error.models.d.ts +14 -0
  12. package/dist/core/models/error.models.js +25 -0
  13. package/dist/core/models/error.models.js.map +1 -0
  14. package/dist/core/models/log.models.d.ts +2 -2
  15. package/dist/core/models/migration.models.d.ts +14 -14
  16. package/dist/core/models/migration.schema.d.ts +9 -9
  17. package/dist/core/models/migration.schema.js +28 -28
  18. package/dist/core/models/migration.schema.js.map +1 -1
  19. package/dist/core/utils/array.utils.d.ts +1 -1
  20. package/dist/core/utils/array.utils.js +4 -3
  21. package/dist/core/utils/array.utils.js.map +1 -1
  22. package/dist/core/utils/binary-data.utils.d.ts +1 -1
  23. package/dist/core/utils/binary-data.utils.js +6 -6
  24. package/dist/core/utils/binary-data.utils.js.map +1 -1
  25. package/dist/core/utils/confirm.utils.d.ts +1 -1
  26. package/dist/core/utils/confirm.utils.js +21 -20
  27. package/dist/core/utils/confirm.utils.js.map +1 -1
  28. package/dist/core/utils/error.utils.d.ts +1 -1
  29. package/dist/core/utils/error.utils.js +16 -14
  30. package/dist/core/utils/error.utils.js.map +1 -1
  31. package/dist/core/utils/external-id.utils.js +1 -1
  32. package/dist/core/utils/external-id.utils.js.map +1 -1
  33. package/dist/core/utils/global.utils.d.ts +3 -3
  34. package/dist/core/utils/global.utils.js +20 -18
  35. package/dist/core/utils/global.utils.js.map +1 -1
  36. package/dist/core/utils/http.utils.d.ts +2 -2
  37. package/dist/core/utils/http.utils.js +4 -4
  38. package/dist/core/utils/http.utils.js.map +1 -1
  39. package/dist/core/utils/management-client-utils.d.ts +4 -4
  40. package/dist/core/utils/management-client-utils.js +34 -34
  41. package/dist/core/utils/management-client-utils.js.map +1 -1
  42. package/dist/core/utils/processing-utils.d.ts +4 -4
  43. package/dist/core/utils/processing-utils.js +13 -13
  44. package/dist/core/utils/processing-utils.js.map +1 -1
  45. package/dist/core/utils/run.utils.d.ts +2 -2
  46. package/dist/core/utils/run.utils.js +7 -7
  47. package/dist/core/utils/run.utils.js.map +1 -1
  48. package/dist/export/context/export-context-fetcher.d.ts +1 -1
  49. package/dist/export/context/export-context-fetcher.js +92 -62
  50. package/dist/export/context/export-context-fetcher.js.map +1 -1
  51. package/dist/export/export-manager.d.ts +2 -2
  52. package/dist/export/export-manager.js +46 -37
  53. package/dist/export/export-manager.js.map +1 -1
  54. package/dist/export/export.models.d.ts +21 -2
  55. package/dist/export/utils/export.utils.d.ts +1 -1
  56. package/dist/export/utils/export.utils.js +3 -2
  57. package/dist/export/utils/export.utils.js.map +1 -1
  58. package/dist/file/file-manager.d.ts +2 -2
  59. package/dist/file/file-manager.js +7 -7
  60. package/dist/file/file-manager.js.map +1 -1
  61. package/dist/import/comparers/asset-comparer.d.ts +2 -2
  62. package/dist/import/comparers/asset-comparer.js +12 -11
  63. package/dist/import/comparers/asset-comparer.js.map +1 -1
  64. package/dist/import/context/import-context-fetcher.d.ts +1 -1
  65. package/dist/import/context/import-context-fetcher.js +77 -73
  66. package/dist/import/context/import-context-fetcher.js.map +1 -1
  67. package/dist/import/import-manager.d.ts +1 -1
  68. package/dist/import/import-manager.js +59 -56
  69. package/dist/import/import-manager.js.map +1 -1
  70. package/dist/import/import.models.d.ts +6 -2
  71. package/dist/import/importers/assets-importer.d.ts +3 -3
  72. package/dist/import/importers/assets-importer.js +46 -43
  73. package/dist/import/importers/assets-importer.js.map +1 -1
  74. package/dist/import/importers/content-items-importer.d.ts +3 -3
  75. package/dist/import/importers/content-items-importer.js +28 -25
  76. package/dist/import/importers/content-items-importer.js.map +1 -1
  77. package/dist/import/importers/language-variant-importer.d.ts +3 -3
  78. package/dist/import/importers/language-variant-importer.js +45 -45
  79. package/dist/import/importers/language-variant-importer.js.map +1 -1
  80. package/dist/import/importers/workflow-importer.d.ts +3 -2
  81. package/dist/import/importers/workflow-importer.js +58 -54
  82. package/dist/import/importers/workflow-importer.js.map +1 -1
  83. package/dist/import/utils/import.utils.d.ts +1 -1
  84. package/dist/import/utils/import.utils.js +3 -2
  85. package/dist/import/utils/import.utils.js.map +1 -1
  86. package/dist/index.d.ts +11 -7
  87. package/dist/index.js +10 -8
  88. package/dist/index.js.map +1 -1
  89. package/dist/metadata.js +3 -3
  90. package/dist/metadata.js.map +1 -1
  91. package/dist/node/cli/actions/export-action.d.ts +1 -1
  92. package/dist/node/cli/actions/export-action.js +28 -23
  93. package/dist/node/cli/actions/export-action.js.map +1 -1
  94. package/dist/node/cli/actions/import-action.d.ts +1 -1
  95. package/dist/node/cli/actions/import-action.js +15 -12
  96. package/dist/node/cli/actions/import-action.js.map +1 -1
  97. package/dist/node/cli/actions/migrate-action.d.ts +1 -1
  98. package/dist/node/cli/actions/migrate-action.js +25 -22
  99. package/dist/node/cli/actions/migrate-action.js.map +1 -1
  100. package/dist/node/cli/app.js +13 -12
  101. package/dist/node/cli/app.js.map +1 -1
  102. package/dist/node/cli/args/args-fetcher.d.ts +1 -1
  103. package/dist/node/cli/args/args-fetcher.js +14 -13
  104. package/dist/node/cli/args/args-fetcher.js.map +1 -1
  105. package/dist/node/cli/args/args-setter.d.ts +1 -1
  106. package/dist/node/cli/args/args-setter.js +8 -6
  107. package/dist/node/cli/args/args-setter.js.map +1 -1
  108. package/dist/node/cli/cli.models.d.ts +2 -2
  109. package/dist/node/cli/commands.js +68 -56
  110. package/dist/node/cli/commands.js.map +1 -1
  111. package/dist/toolkit/elements-builder.d.ts +1 -1
  112. package/dist/toolkit/elements-builder.js +12 -12
  113. package/dist/toolkit/elements-builder.js.map +1 -1
  114. package/dist/toolkit/export.d.ts +2 -2
  115. package/dist/toolkit/export.js +8 -8
  116. package/dist/toolkit/export.js.map +1 -1
  117. package/dist/toolkit/file.d.ts +2 -1
  118. package/dist/toolkit/file.js +18 -16
  119. package/dist/toolkit/file.js.map +1 -1
  120. package/dist/toolkit/import.d.ts +1 -1
  121. package/dist/toolkit/import.js +12 -12
  122. package/dist/toolkit/import.js.map +1 -1
  123. package/dist/toolkit/migrate.d.ts +13 -4
  124. package/dist/toolkit/migrate.js +15 -13
  125. package/dist/toolkit/migrate.js.map +1 -1
  126. package/dist/translation/extraction/items-extraction.processor.d.ts +5 -4
  127. package/dist/translation/extraction/items-extraction.processor.js +73 -35
  128. package/dist/translation/extraction/items-extraction.processor.js.map +1 -1
  129. package/dist/translation/helpers/export-placeholder.utils.d.ts +11 -0
  130. package/dist/translation/helpers/export-placeholder.utils.js +11 -0
  131. package/dist/translation/helpers/export-placeholder.utils.js.map +1 -0
  132. package/dist/translation/helpers/rich-text.processor.d.ts +6 -6
  133. package/dist/translation/helpers/rich-text.processor.js +38 -38
  134. package/dist/translation/helpers/rich-text.processor.js.map +1 -1
  135. package/dist/translation/transforms/export-transforms.d.ts +2 -2
  136. package/dist/translation/transforms/export-transforms.js +93 -67
  137. package/dist/translation/transforms/export-transforms.js.map +1 -1
  138. package/dist/translation/transforms/import-transforms.d.ts +2 -2
  139. package/dist/translation/transforms/import-transforms.js +38 -40
  140. package/dist/translation/transforms/import-transforms.js.map +1 -1
  141. package/dist/zip/zip-manager.d.ts +4 -3
  142. package/dist/zip/zip-manager.js +9 -9
  143. package/dist/zip/zip-manager.js.map +1 -1
  144. package/dist/zip/zip-packager.d.ts +2 -2
  145. package/dist/zip/zip-packager.js +19 -17
  146. package/dist/zip/zip-packager.js.map +1 -1
  147. package/dist/zip/zip-transformer.d.ts +3 -2
  148. package/dist/zip/zip-transformer.js +16 -15
  149. package/dist/zip/zip-transformer.js.map +1 -1
  150. package/dist/zip/zip.models.d.ts +2 -2
  151. package/lib/core/config.ts +6 -6
  152. package/lib/core/helpers/workflow-helper.ts +190 -185
  153. package/lib/core/logs/loggers.ts +52 -52
  154. package/lib/core/models/core.models.ts +128 -119
  155. package/lib/core/models/error.models.ts +41 -0
  156. package/lib/core/models/log.models.ts +20 -20
  157. package/lib/core/models/migration.models.ts +54 -54
  158. package/lib/core/models/migration.schema.ts +108 -108
  159. package/lib/core/utils/array.utils.ts +43 -42
  160. package/lib/core/utils/binary-data.utils.ts +16 -16
  161. package/lib/core/utils/confirm.utils.ts +106 -105
  162. package/lib/core/utils/error.utils.ts +69 -72
  163. package/lib/core/utils/external-id.utils.ts +4 -4
  164. package/lib/core/utils/global.utils.ts +81 -75
  165. package/lib/core/utils/http.utils.ts +23 -23
  166. package/lib/core/utils/management-client-utils.ts +186 -186
  167. package/lib/core/utils/processing-utils.ts +82 -82
  168. package/lib/core/utils/run.utils.ts +50 -50
  169. package/lib/export/context/export-context-fetcher.ts +472 -447
  170. package/lib/export/export-manager.ts +233 -232
  171. package/lib/export/export.models.ts +71 -56
  172. package/lib/export/utils/export.utils.ts +9 -7
  173. package/lib/file/file-manager.ts +28 -28
  174. package/lib/import/comparers/asset-comparer.ts +107 -106
  175. package/lib/import/context/import-context-fetcher.ts +462 -462
  176. package/lib/import/import-manager.ts +243 -240
  177. package/lib/import/import.models.ts +69 -67
  178. package/lib/import/importers/assets-importer.ts +240 -236
  179. package/lib/import/importers/content-items-importer.ts +126 -122
  180. package/lib/import/importers/language-variant-importer.ts +324 -328
  181. package/lib/import/importers/workflow-importer.ts +372 -367
  182. package/lib/import/utils/import.utils.ts +9 -7
  183. package/lib/index.ts +12 -8
  184. package/lib/metadata.ts +3 -4
  185. package/lib/node/cli/actions/export-action.ts +43 -38
  186. package/lib/node/cli/actions/import-action.ts +32 -29
  187. package/lib/node/cli/actions/migrate-action.ts +49 -46
  188. package/lib/node/cli/app.ts +21 -21
  189. package/lib/node/cli/args/args-fetcher.ts +55 -54
  190. package/lib/node/cli/args/args-setter.ts +34 -32
  191. package/lib/node/cli/cli.models.ts +17 -17
  192. package/lib/node/cli/commands.ts +165 -153
  193. package/lib/toolkit/elements-builder.ts +69 -69
  194. package/lib/toolkit/export.ts +21 -21
  195. package/lib/toolkit/file.ts +59 -53
  196. package/lib/toolkit/import.ts +32 -32
  197. package/lib/toolkit/migrate.ts +60 -49
  198. package/lib/translation/extraction/items-extraction.processor.ts +203 -173
  199. package/lib/translation/helpers/export-placeholder.utils.ts +10 -0
  200. package/lib/translation/helpers/rich-text.processor.ts +311 -311
  201. package/lib/translation/transforms/export-transforms.ts +313 -279
  202. package/lib/translation/transforms/import-transforms.ts +188 -191
  203. package/lib/zip/zip-manager.ts +28 -27
  204. package/lib/zip/zip-packager.ts +75 -73
  205. package/lib/zip/zip-transformer.ts +112 -107
  206. package/lib/zip/zip.models.ts +7 -7
  207. package/package.json +91 -84
  208. package/dist/core/index.d.ts +0 -16
  209. package/dist/core/index.js +0 -17
  210. package/dist/core/index.js.map +0 -1
  211. package/dist/export/index.d.ts +0 -2
  212. package/dist/export/index.js +0 -3
  213. package/dist/export/index.js.map +0 -1
  214. package/dist/file/index.d.ts +0 -1
  215. package/dist/file/index.js +0 -2
  216. package/dist/file/index.js.map +0 -1
  217. package/dist/import/index.d.ts +0 -2
  218. package/dist/import/index.js +0 -3
  219. package/dist/import/index.js.map +0 -1
  220. package/dist/toolkit/index.d.ts +0 -5
  221. package/dist/toolkit/index.js +0 -6
  222. package/dist/toolkit/index.js.map +0 -1
  223. package/dist/translation/index.d.ts +0 -4
  224. package/dist/translation/index.js +0 -5
  225. package/dist/translation/index.js.map +0 -1
  226. package/dist/zip/index.d.ts +0 -4
  227. package/dist/zip/index.js +0 -5
  228. package/dist/zip/index.js.map +0 -1
  229. package/lib/core/index.ts +0 -18
  230. package/lib/export/index.ts +0 -2
  231. package/lib/file/index.ts +0 -1
  232. package/lib/import/index.ts +0 -2
  233. package/lib/toolkit/index.ts +0 -5
  234. package/lib/translation/index.ts +0 -4
  235. package/lib/zip/index.ts +0 -4
@@ -1,261 +1,262 @@
1
- import type { AssetFolderModels, AssetModels, CollectionModels, ElementModels } from '@kontent-ai/management-sdk';
2
- import chalk from 'chalk';
1
+ import type { AssetFolderModels, AssetModels, CollectionModels, ElementModels } from "@kontent-ai/management-sdk";
2
+ import chalk from "chalk";
3
+ import type { Writeable } from "zod/v3";
4
+ import { getDefaultLogger } from "../core/logs/loggers.js";
5
+ import type { FlattenedContentType, FlattenedContentTypeElement } from "../core/models/core.models.js";
6
+ import { MigrationToolkitError } from "../core/models/error.models.js";
3
7
  import type {
4
- FlattenedContentType,
5
- FlattenedContentTypeElement,
6
- MigrationAsset,
7
- MigrationComponent,
8
- MigrationData,
9
- MigrationElements,
10
- MigrationElementTransformData,
11
- MigrationItem,
12
- MigrationItemVersion,
13
- Writeable
14
- } from '../core/index.js';
15
- import {
16
- extractErrorData,
17
- findRequired,
18
- getBinaryDataFromUrlAsync,
19
- getDefaultLogger,
20
- getMigrationManagementClient,
21
- isNotUndefined,
22
- MigrationAssetsSchema,
23
- MigrationItemsSchema,
24
- processItemsAsync
25
- } from '../core/index.js';
26
- import { exportTransforms } from '../translation/index.js';
27
- import { exportContextFetcherAsync } from './context/export-context-fetcher.js';
28
- import type { ExportConfig, ExportContext, ExportItem } from './export.models.js';
8
+ MigrationAsset,
9
+ MigrationComponent,
10
+ MigrationData,
11
+ MigrationElements,
12
+ MigrationElementTransformData,
13
+ MigrationItem,
14
+ MigrationItemVersion,
15
+ } from "../core/models/migration.models.js";
16
+ import { MigrationAssetsSchema, MigrationItemsSchema } from "../core/models/migration.schema.js";
17
+ import { findRequired } from "../core/utils/array.utils.js";
18
+ import { getBinaryDataFromUrlAsync } from "../core/utils/binary-data.utils.js";
19
+ import { extractErrorData } from "../core/utils/error.utils.js";
20
+ import { isNotUndefined } from "../core/utils/global.utils.js";
21
+ import { getMigrationManagementClient } from "../core/utils/management-client-utils.js";
22
+ import { processItemsAsync } from "../core/utils/processing-utils.js";
23
+ import { exportTransforms } from "../translation/transforms/export-transforms.js";
24
+ import { exportContextFetcherAsync } from "./context/export-context-fetcher.js";
25
+ import type { ExportConfig, ExportContext, ExportItem } from "./export.models.js";
29
26
 
30
27
  export function exportManager(config: ExportConfig) {
31
- const logger = config.logger ?? getDefaultLogger();
32
- const managementClient = getMigrationManagementClient(config);
28
+ const logger = config.logger ?? getDefaultLogger();
29
+ const managementClient = getMigrationManagementClient(config);
33
30
 
34
- const getMigrationItems = (context: ExportContext): readonly MigrationItem[] => {
35
- return context.exportItems.map<MigrationItem>((exportItem) => mapToMigrationItem(context, exportItem));
36
- };
31
+ const getMigrationItems = (context: ExportContext): readonly MigrationItem[] => {
32
+ return context.exportItems.map<MigrationItem>((exportItem) => mapToMigrationItem(context, exportItem));
33
+ };
37
34
 
38
- const mapToMigrationItem = (context: ExportContext, exportItem: ExportItem): Readonly<MigrationItem> => {
39
- const migrationItem: MigrationItem = {
40
- system: {
41
- name: exportItem.contentItem.name,
42
- codename: exportItem.contentItem.codename,
43
- language: { codename: exportItem.language.codename },
44
- type: { codename: exportItem.contentType.contentTypeCodename },
45
- collection: { codename: exportItem.collection.codename },
46
- workflow: {
47
- codename: exportItem.workflow.codename
48
- }
49
- },
50
- versions: exportItem.versions.map<MigrationItemVersion>((version) => {
51
- return {
52
- elements: getMigrationElements(context, exportItem.contentType, version.languageVariant.elements),
53
- schedule: {
54
- publish_time: version.languageVariant.schedule.publishTime ?? undefined,
55
- publish_display_timezone: version.languageVariant.schedule.publishDisplayTimezone ?? undefined,
56
- unpublish_display_timezone: version.languageVariant.schedule.unpublishDisplayTimezone ?? undefined,
57
- unpublish_time: version.languageVariant.schedule.unpublishTime ?? undefined
58
- },
59
- workflow_step: {
60
- codename: version.workflowStepCodename
61
- }
62
- };
63
- })
64
- };
35
+ const mapToMigrationItem = (context: ExportContext, exportItem: ExportItem): Readonly<MigrationItem> => {
36
+ const migrationItem: MigrationItem = {
37
+ system: {
38
+ name: exportItem.contentItem.name,
39
+ codename: exportItem.contentItem.codename,
40
+ language: { codename: exportItem.language.codename },
41
+ type: { codename: exportItem.contentType.contentTypeCodename },
42
+ collection: { codename: exportItem.collection.codename },
43
+ workflow: {
44
+ codename: exportItem.workflow.codename,
45
+ },
46
+ },
47
+ versions: exportItem.versions.map<MigrationItemVersion>((version) => {
48
+ return {
49
+ elements: getMigrationElements(context, exportItem.contentType, version.languageVariant.elements),
50
+ schedule: {
51
+ publish_time: version.languageVariant.schedule.publishTime ?? undefined,
52
+ publish_display_timezone: version.languageVariant.schedule.publishDisplayTimezone ?? undefined,
53
+ unpublish_display_timezone: version.languageVariant.schedule.unpublishDisplayTimezone ?? undefined,
54
+ unpublish_time: version.languageVariant.schedule.unpublishTime ?? undefined,
55
+ },
56
+ workflow_step: {
57
+ codename: version.workflowStepCodename,
58
+ },
59
+ };
60
+ }),
61
+ };
65
62
 
66
- return migrationItem;
67
- };
63
+ return migrationItem;
64
+ };
68
65
 
69
- const mapToMigrationComponent = (
70
- context: ExportContext,
71
- component: Readonly<ElementModels.ContentItemElementComponent>
72
- ): MigrationComponent => {
73
- const componentType = context.environmentData.contentTypes.find((m) => m.contentTypeId === component.type.id);
66
+ const mapToMigrationComponent = (
67
+ context: ExportContext,
68
+ component: Readonly<ElementModels.ContentItemElementComponent>,
69
+ ): MigrationComponent => {
70
+ const componentType = context.environmentData.contentTypes.find((m) => m.contentTypeId === component.type.id);
74
71
 
75
- if (!componentType) {
76
- throw Error(`Could not find content type with id '${chalk.red(component.type.id)}' for component '${chalk.red(component.id)}'`);
77
- }
72
+ if (!componentType) {
73
+ throw new MigrationToolkitError(
74
+ "missingContentType",
75
+ `Could not find content type with id '${chalk.red(component.type.id)}' for component '${chalk.red(component.id)}'`,
76
+ );
77
+ }
78
78
 
79
- const migrationItem: MigrationComponent = {
80
- system: {
81
- id: component.id,
82
- type: {
83
- codename: componentType.contentTypeCodename
84
- }
85
- },
86
- elements: getMigrationElements(context, componentType, component.elements)
87
- };
79
+ const migrationItem: MigrationComponent = {
80
+ system: {
81
+ id: component.id,
82
+ type: {
83
+ codename: componentType.contentTypeCodename,
84
+ },
85
+ },
86
+ elements: getMigrationElements(context, componentType, component.elements),
87
+ };
88
88
 
89
- return migrationItem;
90
- };
89
+ return migrationItem;
90
+ };
91
91
 
92
- const getMigrationElements = (
93
- context: ExportContext,
94
- contentType: FlattenedContentType,
95
- elements: readonly Readonly<ElementModels.ContentItemElement>[]
96
- ): MigrationElements => {
97
- return contentType.elements
98
- .toSorted((a, b) => {
99
- if (a.codename < b.codename) {
100
- return -1;
101
- }
102
- if (a.codename > b.codename) {
103
- return 1;
104
- }
105
- return 0;
106
- })
107
- .reduce<Writeable<MigrationElements>>((model, typeElement) => {
108
- const itemElement = findRequired(
109
- elements,
110
- (m) => m.element.id === typeElement.id,
111
- `Could not find element '${chalk.red(typeElement.codename)}'`
112
- );
92
+ const getMigrationElements = (
93
+ context: ExportContext,
94
+ contentType: FlattenedContentType,
95
+ elements: readonly Readonly<ElementModels.ContentItemElement>[],
96
+ ): MigrationElements => {
97
+ return contentType.elements
98
+ .toSorted((a, b) => {
99
+ if (a.codename < b.codename) {
100
+ return -1;
101
+ }
102
+ if (a.codename > b.codename) {
103
+ return 1;
104
+ }
105
+ return 0;
106
+ })
107
+ .reduce<Writeable<MigrationElements>>((model, typeElement) => {
108
+ const itemElement = findRequired(
109
+ elements,
110
+ (m) => m.element.id === typeElement.id,
111
+ `Could not find element '${chalk.red(typeElement.codename)}'`,
112
+ );
113
113
 
114
- model[typeElement.codename] = {
115
- type: typeElement.type,
116
- ...getMigrationElementToStore({
117
- context: context,
118
- contentType: contentType,
119
- exportElement: itemElement,
120
- typeElement: typeElement
121
- })
122
- };
114
+ model[typeElement.codename] = {
115
+ type: typeElement.type,
116
+ ...getMigrationElementToStore({
117
+ context: context,
118
+ contentType: contentType,
119
+ exportElement: itemElement,
120
+ typeElement: typeElement,
121
+ }),
122
+ };
123
123
 
124
- return model;
125
- }, {});
126
- };
124
+ return model;
125
+ }, {});
126
+ };
127
127
 
128
- const getMigrationElementToStore = (data: {
129
- readonly context: ExportContext;
130
- readonly contentType: FlattenedContentType;
131
- readonly typeElement: FlattenedContentTypeElement;
132
- readonly exportElement: ElementModels.ContentItemElement;
133
- }): MigrationElementTransformData => {
134
- try {
135
- return exportTransforms[data.typeElement.type]({
136
- context: data.context,
137
- typeElement: data.typeElement,
138
- exportElement: {
139
- components: data.exportElement.components.map((component) => mapToMigrationComponent(data.context, component)),
140
- value: data.exportElement.value,
141
- urlSlugMode: data.exportElement.mode,
142
- displayTimezone: data.exportElement.display_timezone ?? undefined
143
- }
144
- });
145
- } catch (error) {
146
- const errorData = extractErrorData(error);
147
- let jsonValue = 'n/a';
128
+ const getMigrationElementToStore = (data: {
129
+ readonly context: ExportContext;
130
+ readonly contentType: FlattenedContentType;
131
+ readonly typeElement: FlattenedContentTypeElement;
132
+ readonly exportElement: ElementModels.ContentItemElement;
133
+ }): MigrationElementTransformData => {
134
+ try {
135
+ return exportTransforms[data.typeElement.type]({
136
+ context: data.context,
137
+ typeElement: data.typeElement,
138
+ exportElement: {
139
+ components: data.exportElement.components.map((component) => mapToMigrationComponent(data.context, component)),
140
+ value: data.exportElement.value,
141
+ urlSlugMode: data.exportElement.mode,
142
+ displayTimezone: data.exportElement.display_timezone ?? undefined,
143
+ },
144
+ });
145
+ } catch (error) {
146
+ const errorData = extractErrorData(error);
147
+ let jsonValue = "n/a";
148
148
 
149
- try {
150
- jsonValue = JSON.stringify(data.exportElement.value);
151
- } catch (jsonError) {
152
- console.error(`Failed to convert json value`, jsonError);
153
- }
149
+ try {
150
+ jsonValue = JSON.stringify(data.exportElement.value);
151
+ } catch (jsonError) {
152
+ console.error(`Failed to convert json value`, jsonError);
153
+ }
154
154
 
155
- throw new Error(
156
- `Failed to map value of element '${chalk.yellow(data.typeElement.codename)}' of type '${chalk.cyan(
157
- data.typeElement.type
158
- )}'. Value: ${chalk.bgMagenta(jsonValue)}. Message: ${errorData.message}`
159
- );
160
- }
161
- };
155
+ throw new Error(
156
+ `Failed to map value of element '${chalk.yellow(data.typeElement.codename)}' of type '${chalk.cyan(
157
+ data.typeElement.type,
158
+ )}'. Value: ${chalk.bgMagenta(jsonValue)}. Message: ${errorData.message}`,
159
+ );
160
+ }
161
+ };
162
162
 
163
- const exportAssetsAsync = async (context: ExportContext): Promise<readonly Readonly<MigrationAsset>[]> => {
164
- const assets = Array.from(context.referencedData.assetIds)
165
- .map<Readonly<AssetModels.Asset> | undefined>((assetId) => context.getAssetStateInSourceEnvironment(assetId).asset)
166
- .filter(isNotUndefined);
163
+ const exportAssetsAsync = async (context: ExportContext): Promise<readonly Readonly<MigrationAsset>[]> => {
164
+ const assets = Array.from(context.referencedData.assetIds)
165
+ .map<Readonly<AssetModels.Asset> | undefined>((assetId) => context.getAssetStateInSourceEnvironment(assetId).data)
166
+ .filter(isNotUndefined);
167
167
 
168
- return await getMigrationAssetsWithBinaryDataAsync(assets, context);
169
- };
168
+ return await getMigrationAssetsWithBinaryDataAsync(assets, context);
169
+ };
170
170
 
171
- const getMigrationAssetsWithBinaryDataAsync = async (
172
- assets: readonly Readonly<AssetModels.Asset>[],
173
- context: ExportContext
174
- ): Promise<readonly MigrationAsset[]> => {
175
- logger.log({
176
- type: 'info',
177
- message: `Preparing to download '${chalk.yellow(assets.length.toString())}' assets`
178
- });
171
+ const getMigrationAssetsWithBinaryDataAsync = async (
172
+ assets: readonly Readonly<AssetModels.Asset>[],
173
+ context: ExportContext,
174
+ ): Promise<readonly MigrationAsset[]> => {
175
+ logger.log({
176
+ type: "info",
177
+ message: `Preparing to download '${chalk.yellow(assets.length.toString())}' assets`,
178
+ });
179
179
 
180
- return (
181
- await processItemsAsync<Readonly<AssetModels.Asset>, MigrationAsset>({
182
- action: 'Downloading assets',
183
- logger: logger,
184
- parallelLimit: 5,
185
- itemInfo: (input) => {
186
- return {
187
- title: input.codename,
188
- itemType: 'asset'
189
- };
190
- },
191
- items: assets,
192
- processAsync: async (asset, logSpinner) => {
193
- const assetCollection: Readonly<CollectionModels.Collection> | undefined = context.environmentData.collections.find(
194
- (m) => m.id === asset.collection?.reference?.id
195
- );
196
- const assetFolder: Readonly<AssetFolderModels.AssetFolder> | undefined = context.environmentData.assetFolders.find(
197
- (m) => m.id === asset.folder?.id
198
- );
180
+ return (
181
+ await processItemsAsync<Readonly<AssetModels.Asset>, MigrationAsset>({
182
+ action: "Downloading assets",
183
+ logger: logger,
184
+ parallelLimit: 5,
185
+ itemInfo: (input) => {
186
+ return {
187
+ title: input.codename,
188
+ itemType: "asset",
189
+ };
190
+ },
191
+ items: assets,
192
+ processAsync: async (asset, logSpinner) => {
193
+ const assetCollection: Readonly<CollectionModels.Collection> | undefined = context.environmentData.collections.find(
194
+ (m) => m.id === asset.collection?.reference?.id,
195
+ );
196
+ const assetFolder: Readonly<AssetFolderModels.AssetFolder> | undefined = context.environmentData.assetFolders.find(
197
+ (m) => m.id === asset.folder?.id,
198
+ );
199
199
 
200
- logSpinner({
201
- type: 'download',
202
- message: `${asset.url}`
203
- });
200
+ logSpinner({
201
+ type: "download",
202
+ message: `${asset.url}`,
203
+ });
204
204
 
205
- const migrationAsset: MigrationAsset = {
206
- filename: asset.fileName,
207
- title: asset.title ?? '',
208
- codename: asset.codename,
209
- binary_data: (await getBinaryDataFromUrlAsync(asset.url)).data,
210
- collection: assetCollection ? { codename: assetCollection.codename } : undefined,
211
- folder: assetFolder ? { codename: assetFolder.codename } : undefined,
212
- descriptions: asset.descriptions.map((description) => {
213
- const language = findRequired(
214
- context.environmentData.languages,
215
- (language) => language.id === description.language.id,
216
- `Could not find language with id '${chalk.red(description.language.id)}' requested by asset '${chalk.red(
217
- asset.codename
218
- )}'`
219
- );
205
+ const migrationAsset: MigrationAsset = {
206
+ filename: asset.fileName,
207
+ title: asset.title ?? "",
208
+ codename: asset.codename,
209
+ binary_data: (await getBinaryDataFromUrlAsync(asset.url)).data,
210
+ collection: assetCollection ? { codename: assetCollection.codename } : undefined,
211
+ folder: assetFolder ? { codename: assetFolder.codename } : undefined,
212
+ descriptions: asset.descriptions.map((description) => {
213
+ const language = findRequired(
214
+ context.environmentData.languages,
215
+ (language) => language.id === description.language.id,
216
+ `Could not find language with id '${chalk.red(description.language.id)}' requested by asset '${chalk.red(
217
+ asset.codename,
218
+ )}'`,
219
+ );
220
220
 
221
- return {
222
- description: description.description ?? undefined,
223
- language: {
224
- codename: language.codename
225
- }
226
- };
227
- })
228
- };
221
+ return {
222
+ description: description.description ?? undefined,
223
+ language: {
224
+ codename: language.codename,
225
+ },
226
+ };
227
+ }),
228
+ };
229
229
 
230
- return migrationAsset;
231
- }
232
- })
233
- )
234
- .filter((m) => m.state === 'valid')
235
- .map((m) => m.outputItem);
236
- };
230
+ return migrationAsset;
231
+ },
232
+ })
233
+ )
234
+ .filter((m) => m.state === "valid")
235
+ .map((m) => m.outputItem);
236
+ };
237
237
 
238
- return {
239
- async exportAsync(): Promise<MigrationData> {
240
- const exportContext = await (
241
- await exportContextFetcherAsync({
242
- exportItems: config.exportItems,
243
- logger: logger,
244
- managementClient: managementClient
245
- })
246
- ).getExportContextAsync();
238
+ return {
239
+ async exportAsync(): Promise<MigrationData> {
240
+ const exportContext = await (
241
+ await exportContextFetcherAsync({
242
+ exportItems: config.exportItems,
243
+ logger: logger,
244
+ managementClient: managementClient,
245
+ skipMissingReferences: config.skipMissingReferences ?? false,
246
+ })
247
+ ).getExportContextAsync();
247
248
 
248
- const migrationData: MigrationData = {
249
- items: MigrationItemsSchema.parse(getMigrationItems(exportContext)),
250
- assets: MigrationAssetsSchema.parse(await exportAssetsAsync(exportContext))
251
- };
249
+ const migrationData: MigrationData = {
250
+ items: MigrationItemsSchema.parse(getMigrationItems(exportContext)),
251
+ assets: MigrationAssetsSchema.parse(await exportAssetsAsync(exportContext)),
252
+ };
252
253
 
253
- logger.log({
254
- type: 'completed',
255
- message: `Finished export`
256
- });
254
+ logger.log({
255
+ type: "completed",
256
+ message: `Finished export`,
257
+ });
257
258
 
258
- return migrationData;
259
- }
260
- };
259
+ return migrationData;
260
+ },
261
+ };
261
262
  }