@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,9 +1,10 @@
1
- import type { LanguageVariantElements, SharedContracts } from '@kontent-ai/management-sdk';
2
- import { LanguageVariantElementsBuilder } from '@kontent-ai/management-sdk';
3
- import type { MigrationElementTransformData, MigrationElementType, MigrationItem } from '../../core/index.js';
4
- import { isString, parseAsMigrationReferencesArray } from '../../core/index.js';
5
- import type { ImportContext, ImportTransformFunc } from '../../import/index.js';
6
- import { richTextProcessor } from '../helpers/rich-text.processor.js';
1
+ import type { LanguageVariantElements, SharedContracts } from "@kontent-ai/management-sdk";
2
+ import { LanguageVariantElementsBuilder } from "@kontent-ai/management-sdk";
3
+ import type { MigrationElementTransformData, MigrationElementType, MigrationItem } from "../../core/models/migration.models.js";
4
+ import { parseAsMigrationReferencesArray } from "../../core/utils/array.utils.js";
5
+ import { isString } from "../../core/utils/global.utils.js";
6
+ import type { ImportContext, ImportTransformFunc } from "../../import/import.models.js";
7
+ import { richTextProcessor } from "../helpers/rich-text.processor.js";
7
8
 
8
9
  const elementsBuilder = new LanguageVariantElementsBuilder();
9
10
 
@@ -12,202 +13,198 @@ const elementsBuilder = new LanguageVariantElementsBuilder();
12
13
  * Kontent.ai Management API understands
13
14
  */
14
15
  export const importTransforms: Readonly<Record<MigrationElementType, ImportTransformFunc>> = {
15
- subpages: (data) => {
16
- return elementsBuilder.linkedItemsElement({
17
- element: {
18
- codename: data.elementCodename
19
- },
20
- value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
21
- return {
22
- codename: m.codename
23
- };
24
- })
25
- });
26
- },
27
- asset: (data) => {
28
- const assetReferences = parseAsMigrationReferencesArray(data.elementData.value)
29
- .map((reference) => reference.codename)
30
- .map<Readonly<SharedContracts.IReferenceObjectContract>>((codename) => {
31
- const assetState = data.importContext.getAssetStateInTargetEnvironment(codename);
32
-
33
- // only reference with external_id if item does not exist in target env
34
- // API currently only supports referencing assets by ids only, not by codenames
35
- return {
36
- id: assetState.asset ? assetState.asset.id : undefined,
37
- external_id: assetState.asset ? undefined : assetState.externalIdToUse
38
- };
39
- });
40
-
41
- return elementsBuilder.assetElement({
42
- element: {
43
- codename: data.elementCodename
44
- },
45
- value: assetReferences
46
- });
47
- },
48
- custom: (data) => {
49
- return elementsBuilder.customElement({
50
- element: {
51
- codename: data.elementCodename
52
- },
53
- value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null
54
- });
55
- },
56
- date_time: (data) => {
57
- return elementsBuilder.dateTimeElement({
58
- element: {
59
- codename: data.elementCodename
60
- },
61
- value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
62
- display_timezone: data.elementData.display_timezone ?? null
63
- });
64
- },
65
- modular_content: (data) => {
66
- const linkedItemReferences = parseAsMigrationReferencesArray(data.elementData.value)
67
- .map((reference) => reference.codename)
68
- .map<Readonly<SharedContracts.IReferenceObjectContract>>((codename) => {
69
- const itemState = data.importContext.getItemStateInTargetEnvironment(codename);
70
-
71
- // only reference with external_id if item does not exist in target env
72
- return {
73
- codename: itemState.item ? itemState.item.codename : undefined,
74
- external_id: itemState.item ? undefined : itemState.externalIdToUse
75
- };
76
- });
77
-
78
- return elementsBuilder.linkedItemsElement({
79
- element: {
80
- codename: data.elementCodename
81
- },
82
- value: linkedItemReferences
83
- });
84
- },
85
- multiple_choice: (data) => {
86
- return elementsBuilder.multipleChoiceElement({
87
- element: {
88
- codename: data.elementCodename
89
- },
90
- value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
91
- return {
92
- codename: m.codename
93
- };
94
- })
95
- });
96
- },
97
- number: (data) => {
98
- return elementsBuilder.numberElement({
99
- element: {
100
- codename: data.elementCodename
101
- },
102
- value: data.elementData.value ? +data.elementData.value : null
103
- });
104
- },
105
- rich_text: (data) => {
106
- return elementsBuilder.richTextElement({
107
- element: {
108
- codename: data.elementCodename
109
- },
110
- components: mapComponents({
111
- importContext: data.importContext,
112
- migrationItems: data.migrationItems,
113
- elementData: data.elementData
114
- }),
115
- value:
116
- processImportRichTextHtmlValue({
117
- elementData: data.elementData,
118
- importContext: data.importContext,
119
- migrationItems: data.migrationItems
120
- }) ?? null
121
- });
122
- },
123
- taxonomy: (data) => {
124
- return elementsBuilder.taxonomyElement({
125
- element: {
126
- codename: data.elementCodename
127
- },
128
- value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
129
- return {
130
- codename: m.codename
131
- };
132
- })
133
- });
134
- },
135
- text: (data) => {
136
- return elementsBuilder.textElement({
137
- element: {
138
- codename: data.elementCodename
139
- },
140
- value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null
141
- });
142
- },
143
- url_slug: (data) => {
144
- return elementsBuilder.urlSlugElement({
145
- element: {
146
- codename: data.elementCodename
147
- },
148
- value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
149
- mode: data.elementData.mode ?? 'autogenerated'
150
- });
151
- }
16
+ subpages: (data) => {
17
+ return elementsBuilder.linkedItemsElement({
18
+ element: {
19
+ codename: data.elementCodename,
20
+ },
21
+ value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
22
+ return {
23
+ codename: m.codename,
24
+ };
25
+ }),
26
+ });
27
+ },
28
+ asset: (data) => {
29
+ const assetReferences = parseAsMigrationReferencesArray(data.elementData.value)
30
+ .map((reference) => reference.codename)
31
+ .map<Readonly<SharedContracts.IReferenceObjectContract>>((codename) => {
32
+ const assetState = data.importContext.getAssetStateInTargetEnvironment(codename);
33
+
34
+ // only reference with external_id if item does not exist in target env
35
+ // API currently only supports referencing assets by ids only, not by codenames
36
+ return {
37
+ id: assetState.asset ? assetState.asset.id : undefined,
38
+ external_id: assetState.asset ? undefined : assetState.externalIdToUse,
39
+ };
40
+ });
41
+
42
+ return elementsBuilder.assetElement({
43
+ element: {
44
+ codename: data.elementCodename,
45
+ },
46
+ value: assetReferences,
47
+ });
48
+ },
49
+ custom: (data) => {
50
+ return elementsBuilder.customElement({
51
+ element: {
52
+ codename: data.elementCodename,
53
+ },
54
+ value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
55
+ });
56
+ },
57
+ date_time: (data) => {
58
+ return elementsBuilder.dateTimeElement({
59
+ element: {
60
+ codename: data.elementCodename,
61
+ },
62
+ value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
63
+ display_timezone: data.elementData.display_timezone ?? null,
64
+ });
65
+ },
66
+ modular_content: (data) => {
67
+ const linkedItemReferences = parseAsMigrationReferencesArray(data.elementData.value)
68
+ .map((reference) => reference.codename)
69
+ .map<Readonly<SharedContracts.IReferenceObjectContract>>((codename) => {
70
+ const itemState = data.importContext.getItemStateInTargetEnvironment(codename);
71
+
72
+ // only reference with external_id if item does not exist in target env
73
+ return {
74
+ codename: itemState.item ? itemState.item.codename : undefined,
75
+ external_id: itemState.item ? undefined : itemState.externalIdToUse,
76
+ };
77
+ });
78
+
79
+ return elementsBuilder.linkedItemsElement({
80
+ element: {
81
+ codename: data.elementCodename,
82
+ },
83
+ value: linkedItemReferences,
84
+ });
85
+ },
86
+ multiple_choice: (data) => {
87
+ return elementsBuilder.multipleChoiceElement({
88
+ element: {
89
+ codename: data.elementCodename,
90
+ },
91
+ value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
92
+ return {
93
+ codename: m.codename,
94
+ };
95
+ }),
96
+ });
97
+ },
98
+ number: (data) => {
99
+ return elementsBuilder.numberElement({
100
+ element: {
101
+ codename: data.elementCodename,
102
+ },
103
+ value: data.elementData.value ? +data.elementData.value : null,
104
+ });
105
+ },
106
+ rich_text: (data) => {
107
+ return elementsBuilder.richTextElement({
108
+ element: {
109
+ codename: data.elementCodename,
110
+ },
111
+ components: mapComponents({
112
+ importContext: data.importContext,
113
+ migrationItems: data.migrationItems,
114
+ elementData: data.elementData,
115
+ }),
116
+ value:
117
+ processImportRichTextHtmlValue({
118
+ elementData: data.elementData,
119
+ importContext: data.importContext,
120
+ migrationItems: data.migrationItems,
121
+ }) ?? null,
122
+ });
123
+ },
124
+ taxonomy: (data) => {
125
+ return elementsBuilder.taxonomyElement({
126
+ element: {
127
+ codename: data.elementCodename,
128
+ },
129
+ value: parseAsMigrationReferencesArray(data.elementData.value).map((m) => {
130
+ return {
131
+ codename: m.codename,
132
+ };
133
+ }),
134
+ });
135
+ },
136
+ text: (data) => {
137
+ return elementsBuilder.textElement({
138
+ element: {
139
+ codename: data.elementCodename,
140
+ },
141
+ value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
142
+ });
143
+ },
144
+ url_slug: (data) => {
145
+ return elementsBuilder.urlSlugElement({
146
+ element: {
147
+ codename: data.elementCodename,
148
+ },
149
+ value: data.elementData.value && isString(data.elementData.value) ? data.elementData.value : null,
150
+ mode: data.elementData.mode ?? "autogenerated",
151
+ });
152
+ },
152
153
  };
153
154
 
154
155
  function mapComponents(data: {
155
- readonly elementData: MigrationElementTransformData;
156
- readonly importContext: ImportContext;
157
- readonly migrationItems: readonly MigrationItem[];
156
+ readonly elementData: MigrationElementTransformData;
157
+ readonly importContext: ImportContext;
158
+ readonly migrationItems: readonly MigrationItem[];
158
159
  }): LanguageVariantElements.IRichTextComponent[] {
159
- return (data.elementData.components ?? []).map((component) => {
160
- const mappedComponent: Readonly<LanguageVariantElements.IRichTextComponent> = {
161
- id: component.system.id,
162
- type: {
163
- codename: component.system.type.codename
164
- },
165
- elements: Object.entries(component.elements).map(([key, element]) => {
166
- const transformedElementValue = importTransforms[element.type]({
167
- elementCodename: key,
168
- importContext: data.importContext,
169
- migrationItems: data.migrationItems,
170
- elementData: element
171
- });
172
-
173
- return transformedElementValue;
174
- })
175
- };
176
-
177
- return mappedComponent;
178
- });
160
+ return (data.elementData.components ?? []).map((component) => {
161
+ const mappedComponent: Readonly<LanguageVariantElements.IRichTextComponent> = {
162
+ id: component.system.id,
163
+ type: {
164
+ codename: component.system.type.codename,
165
+ },
166
+ elements: Object.entries(component.elements).map(([key, element]) => {
167
+ const transformedElementValue = importTransforms[element.type]({
168
+ elementCodename: key,
169
+ importContext: data.importContext,
170
+ migrationItems: data.migrationItems,
171
+ elementData: element,
172
+ });
173
+
174
+ return transformedElementValue;
175
+ }),
176
+ };
177
+
178
+ return mappedComponent;
179
+ });
179
180
  }
180
181
 
181
182
  function processImportRichTextHtmlValue(data: {
182
- readonly elementData: MigrationElementTransformData;
183
- readonly importContext: ImportContext;
184
- readonly migrationItems: readonly MigrationItem[];
183
+ readonly elementData: MigrationElementTransformData;
184
+ readonly importContext: ImportContext;
185
+ readonly migrationItems: readonly MigrationItem[];
185
186
  }): string | undefined {
186
- if (!data.elementData) {
187
- return undefined;
188
- }
189
-
190
- let richTextHtml: string = data.elementData.value && isString(data.elementData.value) ? data.elementData.value : '';
187
+ let richTextHtml: string = data.elementData.value && isString(data.elementData.value) ? data.elementData.value : "";
191
188
 
192
- // replace item codenames with existing codename or external_id
193
- richTextHtml = richTextProcessor().processItemCodenames(richTextHtml, (codename) => {
194
- return data.importContext.getItemStateInTargetEnvironment(codename);
195
- }).html;
189
+ // replace item codenames with existing codename or external_id
190
+ richTextHtml = richTextProcessor().processItemCodenames(richTextHtml, (codename) => {
191
+ return data.importContext.getItemStateInTargetEnvironment(codename);
192
+ }).html;
196
193
 
197
- // replace link item codenames with existing codename or external_id
198
- richTextHtml = richTextProcessor().processLinkItemCodenames(richTextHtml, (codename) => {
199
- return data.importContext.getItemStateInTargetEnvironment(codename);
200
- }).html;
194
+ // replace link item codenames with existing codename or external_id
195
+ richTextHtml = richTextProcessor().processLinkItemCodenames(richTextHtml, (codename) => {
196
+ return data.importContext.getItemStateInTargetEnvironment(codename);
197
+ }).html;
201
198
 
202
- // replace asset codenames with existing codename or external_id
203
- richTextHtml = richTextProcessor().processAssetCodenames(richTextHtml, (codename) => {
204
- return data.importContext.getAssetStateInTargetEnvironment(codename);
205
- }).html;
199
+ // replace asset codenames with existing codename or external_id
200
+ richTextHtml = richTextProcessor().processAssetCodenames(richTextHtml, (codename) => {
201
+ return data.importContext.getAssetStateInTargetEnvironment(codename);
202
+ }).html;
206
203
 
207
- // replace link asset codenames with existing codename or external_id
208
- richTextHtml = richTextProcessor().processLinkAssetCodenames(richTextHtml, (codename) => {
209
- return data.importContext.getAssetStateInTargetEnvironment(codename);
210
- }).html;
204
+ // replace link asset codenames with existing codename or external_id
205
+ richTextHtml = richTextProcessor().processLinkAssetCodenames(richTextHtml, (codename) => {
206
+ return data.importContext.getAssetStateInTargetEnvironment(codename);
207
+ }).html;
211
208
 
212
- return richTextHtml;
209
+ return richTextHtml;
213
210
  }
@@ -1,35 +1,36 @@
1
- import type { Buffer as BufferProxy } from 'buffer';
2
- import JSZip from 'jszip';
3
- import type { Logger, MigrationData } from '../core/index.js';
4
- import { getDefaultLogger } from '../core/index.js';
5
- import { zipPackager } from './zip-packager.js';
6
- import { zipTransformer } from './zip-transformer.js';
7
- import type { FileBinaryData } from './zip.models.js';
1
+ import type { Buffer as BufferProxy } from "buffer";
2
+ import JSZip from "jszip";
3
+ import { getDefaultLogger } from "../core/logs/loggers.js";
4
+ import type { Logger } from "../core/models/log.models.js";
5
+ import type { MigrationData } from "../core/models/migration.models.js";
6
+ import type { FileBinaryData } from "./zip.models.js";
7
+ import { zipPackager } from "./zip-packager.js";
8
+ import { zipTransformer } from "./zip-transformer.js";
8
9
 
9
10
  export function zipManager(logger?: Logger) {
10
- const loggerToUse = logger ?? getDefaultLogger();
11
+ const loggerToUse = logger ?? getDefaultLogger();
11
12
 
12
- const createZipAsync = async (migrationData: MigrationData): Promise<FileBinaryData> => {
13
- loggerToUse.log({
14
- type: 'info',
15
- message: `Creating zip package`
16
- });
13
+ const createZipAsync = async (migrationData: MigrationData): Promise<FileBinaryData> => {
14
+ loggerToUse.log({
15
+ type: "info",
16
+ message: `Creating zip package`,
17
+ });
17
18
 
18
- return await zipTransformer(zipPackager(new JSZip()), loggerToUse).transformAsync(migrationData);
19
- };
19
+ return await zipTransformer(zipPackager(new JSZip()), loggerToUse).transformAsync(migrationData);
20
+ };
20
21
 
21
- const parseZipAsync = async (zipFile: BufferProxy): Promise<MigrationData> => {
22
- loggerToUse.log({
23
- type: 'info',
24
- message: `Parsing zip file`
25
- });
22
+ const parseZipAsync = async (zipFile: BufferProxy): Promise<MigrationData> => {
23
+ loggerToUse.log({
24
+ type: "info",
25
+ message: `Parsing zip file`,
26
+ });
26
27
 
27
- const zipPackage = zipPackager(await JSZip.loadAsync(zipFile, {}));
28
- return await zipTransformer(zipPackage, loggerToUse).parseAsync();
29
- };
28
+ const zipPackage = zipPackager(await JSZip.loadAsync(zipFile, {}));
29
+ return await zipTransformer(zipPackage, loggerToUse).parseAsync();
30
+ };
30
31
 
31
- return {
32
- createZipAsync,
33
- parseZipAsync
34
- };
32
+ return {
33
+ createZipAsync,
34
+ parseZipAsync,
35
+ };
35
36
  }
@@ -1,85 +1,87 @@
1
- import { Buffer as BufferProxy } from 'buffer';
2
- import chalk from 'chalk';
3
- import type JSZip from 'jszip';
4
- import { match } from 'ts-pattern';
5
- import type { Logger } from '../core/index.js';
6
- import { exitProgram, formatBytes, getCurrentEnvironment, getDefaultLogger } from '../core/index.js';
7
- import type { FileBinaryData, ZipCompressionLevel, ZipPackager } from './zip.models.js';
1
+ import { Buffer as BufferProxy } from "buffer";
2
+ import chalk from "chalk";
3
+ import type JSZip from "jszip";
4
+ import { match } from "ts-pattern";
5
+ import { getDefaultLogger } from "../core/logs/loggers.js";
6
+ import { MigrationToolkitError } from "../core/models/error.models.js";
7
+ import type { Logger } from "../core/models/log.models.js";
8
+ import { exitProgram, formatBytes, getCurrentEnvironment } from "../core/utils/global.utils.js";
9
+ import type { FileBinaryData, ZipCompressionLevel, ZipPackager } from "./zip.models.js";
8
10
 
9
- type ZipOutputType = 'nodebuffer' | 'blob';
11
+ type ZipOutputType = "nodebuffer" | "blob";
10
12
 
11
13
  export function zipPackager(jsZip: JSZip): ZipPackager {
12
- const getZipOutputType = (): 'nodebuffer' | 'blob' => {
13
- return match(getCurrentEnvironment())
14
- .returnType<ZipOutputType>()
15
- .with('browser', () => 'blob')
16
- .with('node', () => 'nodebuffer')
17
- .exhaustive();
18
- };
14
+ const getZipOutputType = (): "nodebuffer" | "blob" => {
15
+ return match(getCurrentEnvironment())
16
+ .returnType<ZipOutputType>()
17
+ .with("browser", () => "blob")
18
+ .with("node", () => "nodebuffer")
19
+ .exhaustive();
20
+ };
19
21
 
20
- const getZipSizeInBytes = (zipData: FileBinaryData): number => {
21
- return match(zipData)
22
- .when(
23
- (data) => data instanceof Blob,
24
- (data) => data.size
25
- )
26
- .when(
27
- (data) => data instanceof BufferProxy,
28
- (data) => data.byteLength
29
- )
30
- .otherwise(() => {
31
- exitProgram({
32
- message: `Unrecognized zip data type '${typeof zipData}'`
33
- });
34
- });
35
- };
22
+ const getZipSizeInBytes = (zipData: FileBinaryData): number => {
23
+ return match(zipData)
24
+ .when(
25
+ (data) => data instanceof Blob,
26
+ (data) => data.size,
27
+ )
28
+ .when(
29
+ (data) => data instanceof BufferProxy,
30
+ (data) => data.byteLength,
31
+ )
32
+ .otherwise(() => {
33
+ exitProgram({
34
+ message: `Unrecognized zip data type '${typeof zipData}'`,
35
+ });
36
+ });
37
+ };
36
38
 
37
- return {
38
- addFile(filePath: string, data: string | FileBinaryData): JSZip {
39
- return jsZip.file(filePath, data);
40
- },
41
- addFolder(name: string): ZipPackager {
42
- const folder = jsZip.folder(name);
39
+ return {
40
+ addFile(filePath: string, data: string | FileBinaryData): JSZip {
41
+ return jsZip.file(filePath, data);
42
+ },
43
+ addFolder(name: string): ZipPackager {
44
+ const folder = jsZip.folder(name);
43
45
 
44
- if (!folder) {
45
- throw Error(`Failed to add folder '${name}'`);
46
- }
46
+ if (!folder) {
47
+ throw new MigrationToolkitError("invalidFolder", `Failed to add folder '${name}'`);
48
+ }
47
49
 
48
- return zipPackager(folder);
49
- },
50
- async generateZipAsync(config: { logger?: Logger; compressionLevel?: ZipCompressionLevel }): Promise<FileBinaryData> {
51
- const logger = config.logger ?? getDefaultLogger();
52
- const zipOutputType = getZipOutputType();
53
- const compressionLevel: ZipCompressionLevel = config.compressionLevel ?? 9;
50
+ return zipPackager(folder);
51
+ },
52
+ async generateZipAsync(config: { logger?: Logger; compressionLevel?: ZipCompressionLevel }): Promise<FileBinaryData> {
53
+ const logger = config.logger ?? getDefaultLogger();
54
+ const zipOutputType = getZipOutputType();
55
+ const compressionLevel: ZipCompressionLevel = config.compressionLevel ?? 9;
54
56
 
55
- logger.log({
56
- type: 'info',
57
- message: `Creating zip file using '${chalk.yellow(zipOutputType)}' with compression level '${chalk.yellow(
58
- compressionLevel.toString()
59
- )}'`
60
- });
57
+ logger.log({
58
+ type: "info",
59
+ message: `Creating zip file using '${chalk.yellow(zipOutputType)}' with compression level '${chalk.yellow(
60
+ compressionLevel.toString(),
61
+ )}'`,
62
+ });
61
63
 
62
- const result = await jsZip.generateAsync({
63
- type: zipOutputType,
64
- compression: 'DEFLATE',
65
- compressionOptions: {
66
- level: compressionLevel
67
- },
68
- streamFiles: true
69
- });
64
+ const result = await jsZip.generateAsync({
65
+ type: zipOutputType,
66
+ compression: "DEFLATE",
67
+ compressionOptions: {
68
+ level: compressionLevel,
69
+ },
70
+ streamFiles: true,
71
+ });
70
72
 
71
- logger.log({
72
- type: 'info',
73
- message: `Zip successfully generated (${chalk.yellow(formatBytes(getZipSizeInBytes(result)))})`
74
- });
73
+ logger.log({
74
+ type: "info",
75
+ message: `Zip successfully generated (${chalk.yellow(formatBytes(getZipSizeInBytes(result)))})`,
76
+ });
75
77
 
76
- return result;
77
- },
78
- async getBinaryDataAsync(filePath: string): Promise<FileBinaryData | undefined> {
79
- return await jsZip.file(filePath)?.async(getZipOutputType());
80
- },
81
- async getFileContentAsync(filePath: string): Promise<string | undefined> {
82
- return await jsZip.file(filePath)?.async('string');
83
- }
84
- };
78
+ return result;
79
+ },
80
+ async getBinaryDataAsync(filePath: string): Promise<FileBinaryData | undefined> {
81
+ return await jsZip.file(filePath)?.async(getZipOutputType());
82
+ },
83
+ async getFileContentAsync(filePath: string): Promise<string | undefined> {
84
+ return await jsZip.file(filePath)?.async("string");
85
+ },
86
+ };
85
87
  }