@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.
Files changed (240) hide show
  1. package/.npmignore +13 -0
  2. package/LICENSE.md +9 -0
  3. package/README.md +272 -0
  4. package/dist/es2022/core/helpers/workflow-helper.d.ts +37 -0
  5. package/dist/es2022/core/helpers/workflow-helper.js +67 -0
  6. package/dist/es2022/core/helpers/workflow-helper.js.map +1 -0
  7. package/dist/es2022/core/index.d.ts +15 -0
  8. package/dist/es2022/core/index.js +16 -0
  9. package/dist/es2022/core/index.js.map +1 -0
  10. package/dist/es2022/core/logs/loggers.d.ts +2 -0
  11. package/dist/es2022/core/logs/loggers.js +69 -0
  12. package/dist/es2022/core/logs/loggers.js.map +1 -0
  13. package/dist/es2022/core/models/core.models.d.ts +91 -0
  14. package/dist/es2022/core/models/core.models.js +2 -0
  15. package/dist/es2022/core/models/core.models.js.map +1 -0
  16. package/dist/es2022/core/models/log.models.d.ts +15 -0
  17. package/dist/es2022/core/models/log.models.js +2 -0
  18. package/dist/es2022/core/models/log.models.js.map +1 -0
  19. package/dist/es2022/core/models/migration.models.d.ts +136 -0
  20. package/dist/es2022/core/models/migration.models.js +2 -0
  21. package/dist/es2022/core/models/migration.models.js.map +1 -0
  22. package/dist/es2022/core/utils/array.utils.d.ts +5 -0
  23. package/dist/es2022/core/utils/array.utils.js +27 -0
  24. package/dist/es2022/core/utils/array.utils.js.map +1 -0
  25. package/dist/es2022/core/utils/binary-data.utils.d.ts +5 -0
  26. package/dist/es2022/core/utils/binary-data.utils.js +21 -0
  27. package/dist/es2022/core/utils/binary-data.utils.js.map +1 -0
  28. package/dist/es2022/core/utils/confirm.utils.d.ts +31 -0
  29. package/dist/es2022/core/utils/confirm.utils.js +73 -0
  30. package/dist/es2022/core/utils/confirm.utils.js.map +1 -0
  31. package/dist/es2022/core/utils/error.utils.d.ts +4 -0
  32. package/dist/es2022/core/utils/error.utils.js +50 -0
  33. package/dist/es2022/core/utils/error.utils.js.map +1 -0
  34. package/dist/es2022/core/utils/external-id.utils.d.ts +5 -0
  35. package/dist/es2022/core/utils/external-id.utils.js +5 -0
  36. package/dist/es2022/core/utils/external-id.utils.js.map +1 -0
  37. package/dist/es2022/core/utils/global.utils.d.ts +14 -0
  38. package/dist/es2022/core/utils/global.utils.js +45 -0
  39. package/dist/es2022/core/utils/global.utils.js.map +1 -0
  40. package/dist/es2022/core/utils/http.utils.d.ts +3 -0
  41. package/dist/es2022/core/utils/http.utils.js +29 -0
  42. package/dist/es2022/core/utils/http.utils.js.map +1 -0
  43. package/dist/es2022/core/utils/management-client-utils.d.ts +19 -0
  44. package/dist/es2022/core/utils/management-client-utils.js +129 -0
  45. package/dist/es2022/core/utils/management-client-utils.js.map +1 -0
  46. package/dist/es2022/core/utils/processing-utils.d.ts +12 -0
  47. package/dist/es2022/core/utils/processing-utils.js +39 -0
  48. package/dist/es2022/core/utils/processing-utils.js.map +1 -0
  49. package/dist/es2022/core/utils/run.utils.d.ts +10 -0
  50. package/dist/es2022/core/utils/run.utils.js +37 -0
  51. package/dist/es2022/core/utils/run.utils.js.map +1 -0
  52. package/dist/es2022/export/context/export-context-fetcher.d.ts +4 -0
  53. package/dist/es2022/export/context/export-context-fetcher.js +289 -0
  54. package/dist/es2022/export/context/export-context-fetcher.js.map +1 -0
  55. package/dist/es2022/export/export-manager.d.ts +5 -0
  56. package/dist/es2022/export/export-manager.js +167 -0
  57. package/dist/es2022/export/export-manager.js.map +1 -0
  58. package/dist/es2022/export/export.models.d.ts +55 -0
  59. package/dist/es2022/export/export.models.js +2 -0
  60. package/dist/es2022/export/export.models.js.map +1 -0
  61. package/dist/es2022/export/index.d.ts +2 -0
  62. package/dist/es2022/export/index.js +3 -0
  63. package/dist/es2022/export/index.js.map +1 -0
  64. package/dist/es2022/export/utils/export.utils.d.ts +2 -0
  65. package/dist/es2022/export/utils/export.utils.js +5 -0
  66. package/dist/es2022/export/utils/export.utils.js.map +1 -0
  67. package/dist/es2022/file/file-manager.d.ts +5 -0
  68. package/dist/es2022/file/file-manager.js +29 -0
  69. package/dist/es2022/file/file-manager.js.map +1 -0
  70. package/dist/es2022/file/index.d.ts +1 -0
  71. package/dist/es2022/file/index.js +2 -0
  72. package/dist/es2022/file/index.js.map +1 -0
  73. package/dist/es2022/import/comparers/asset-comparer.d.ts +12 -0
  74. package/dist/es2022/import/comparers/asset-comparer.js +65 -0
  75. package/dist/es2022/import/comparers/asset-comparer.js.map +1 -0
  76. package/dist/es2022/import/context/import-context-fetcher.d.ts +4 -0
  77. package/dist/es2022/import/context/import-context-fetcher.js +235 -0
  78. package/dist/es2022/import/context/import-context-fetcher.js.map +1 -0
  79. package/dist/es2022/import/import-manager.d.ts +4 -0
  80. package/dist/es2022/import/import-manager.js +80 -0
  81. package/dist/es2022/import/import-manager.js.map +1 -0
  82. package/dist/es2022/import/import.models.d.ts +45 -0
  83. package/dist/es2022/import/import.models.js +2 -0
  84. package/dist/es2022/import/import.models.js.map +1 -0
  85. package/dist/es2022/import/importers/assets-importer.d.ts +10 -0
  86. package/dist/es2022/import/importers/assets-importer.js +175 -0
  87. package/dist/es2022/import/importers/assets-importer.js.map +1 -0
  88. package/dist/es2022/import/importers/content-items-importer.d.ts +10 -0
  89. package/dist/es2022/import/importers/content-items-importer.js +97 -0
  90. package/dist/es2022/import/importers/content-items-importer.js.map +1 -0
  91. package/dist/es2022/import/importers/language-variant-importer.d.ts +11 -0
  92. package/dist/es2022/import/importers/language-variant-importer.js +215 -0
  93. package/dist/es2022/import/importers/language-variant-importer.js.map +1 -0
  94. package/dist/es2022/import/importers/workflow-importer.d.ts +18 -0
  95. package/dist/es2022/import/importers/workflow-importer.js +122 -0
  96. package/dist/es2022/import/importers/workflow-importer.js.map +1 -0
  97. package/dist/es2022/import/index.d.ts +2 -0
  98. package/dist/es2022/import/index.js +3 -0
  99. package/dist/es2022/import/index.js.map +1 -0
  100. package/dist/es2022/import/utils/import.utils.d.ts +2 -0
  101. package/dist/es2022/import/utils/import.utils.js +5 -0
  102. package/dist/es2022/import/utils/import.utils.js.map +1 -0
  103. package/dist/es2022/index.d.ts +8 -0
  104. package/dist/es2022/index.js +10 -0
  105. package/dist/es2022/index.js.map +1 -0
  106. package/dist/es2022/metadata.d.ts +5 -0
  107. package/dist/es2022/metadata.js +6 -0
  108. package/dist/es2022/metadata.js.map +1 -0
  109. package/dist/es2022/node/cli/actions/export-action.d.ts +2 -0
  110. package/dist/es2022/node/cli/actions/export-action.js +40 -0
  111. package/dist/es2022/node/cli/actions/export-action.js.map +1 -0
  112. package/dist/es2022/node/cli/actions/import-action.d.ts +2 -0
  113. package/dist/es2022/node/cli/actions/import-action.js +29 -0
  114. package/dist/es2022/node/cli/actions/import-action.js.map +1 -0
  115. package/dist/es2022/node/cli/actions/migrate-action.d.ts +2 -0
  116. package/dist/es2022/node/cli/actions/migrate-action.js +47 -0
  117. package/dist/es2022/node/cli/actions/migrate-action.js.map +1 -0
  118. package/dist/es2022/node/cli/app.d.ts +2 -0
  119. package/dist/es2022/node/cli/app.js +27 -0
  120. package/dist/es2022/node/cli/app.js.map +1 -0
  121. package/dist/es2022/node/cli/args/args-fetcher.d.ts +2 -0
  122. package/dist/es2022/node/cli/args/args-fetcher.js +46 -0
  123. package/dist/es2022/node/cli/args/args-fetcher.js.map +1 -0
  124. package/dist/es2022/node/cli/args/args-setter.d.ts +2 -0
  125. package/dist/es2022/node/cli/args/args-setter.js +31 -0
  126. package/dist/es2022/node/cli/args/args-setter.js.map +1 -0
  127. package/dist/es2022/node/cli/cli.models.d.ts +24 -0
  128. package/dist/es2022/node/cli/cli.models.js +2 -0
  129. package/dist/es2022/node/cli/cli.models.js.map +1 -0
  130. package/dist/es2022/node/cli/commands.d.ts +1 -0
  131. package/dist/es2022/node/cli/commands.js +157 -0
  132. package/dist/es2022/node/cli/commands.js.map +1 -0
  133. package/dist/es2022/toolkit/elements-builder.d.ts +14 -0
  134. package/dist/es2022/toolkit/elements-builder.js +69 -0
  135. package/dist/es2022/toolkit/elements-builder.js.map +1 -0
  136. package/dist/es2022/toolkit/export.d.ts +3 -0
  137. package/dist/es2022/toolkit/export.js +21 -0
  138. package/dist/es2022/toolkit/export.js.map +1 -0
  139. package/dist/es2022/toolkit/file.d.ts +12 -0
  140. package/dist/es2022/toolkit/file.js +50 -0
  141. package/dist/es2022/toolkit/file.js.map +1 -0
  142. package/dist/es2022/toolkit/import.d.ts +2 -0
  143. package/dist/es2022/toolkit/import.js +21 -0
  144. package/dist/es2022/toolkit/import.js.map +1 -0
  145. package/dist/es2022/toolkit/index.d.ts +5 -0
  146. package/dist/es2022/toolkit/index.js +6 -0
  147. package/dist/es2022/toolkit/index.js.map +1 -0
  148. package/dist/es2022/toolkit/migrate.d.ts +21 -0
  149. package/dist/es2022/toolkit/migrate.js +39 -0
  150. package/dist/es2022/toolkit/migrate.js.map +1 -0
  151. package/dist/es2022/translation/extraction/items-extraction.processor.d.ts +24 -0
  152. package/dist/es2022/translation/extraction/items-extraction.processor.js +108 -0
  153. package/dist/es2022/translation/extraction/items-extraction.processor.js.map +1 -0
  154. package/dist/es2022/translation/helpers/rich-text.processor.d.ts +22 -0
  155. package/dist/es2022/translation/helpers/rich-text.processor.js +209 -0
  156. package/dist/es2022/translation/helpers/rich-text.processor.js.map +1 -0
  157. package/dist/es2022/translation/index.d.ts +4 -0
  158. package/dist/es2022/translation/index.js +5 -0
  159. package/dist/es2022/translation/index.js.map +1 -0
  160. package/dist/es2022/translation/transforms/export-transforms.d.ts +3 -0
  161. package/dist/es2022/translation/transforms/export-transforms.js +196 -0
  162. package/dist/es2022/translation/transforms/export-transforms.js.map +1 -0
  163. package/dist/es2022/translation/transforms/import-transforms.d.ts +7 -0
  164. package/dist/es2022/translation/transforms/import-transforms.js +183 -0
  165. package/dist/es2022/translation/transforms/import-transforms.js.map +1 -0
  166. package/dist/es2022/zip/index.d.ts +4 -0
  167. package/dist/es2022/zip/index.js +5 -0
  168. package/dist/es2022/zip/index.js.map +1 -0
  169. package/dist/es2022/zip/zip-manager.d.ts +6 -0
  170. package/dist/es2022/zip/zip-manager.js +27 -0
  171. package/dist/es2022/zip/zip-manager.js.map +1 -0
  172. package/dist/es2022/zip/zip-packager.d.ts +3 -0
  173. package/dist/es2022/zip/zip-packager.js +69 -0
  174. package/dist/es2022/zip/zip-packager.js.map +1 -0
  175. package/dist/es2022/zip/zip-transformer.d.ts +6 -0
  176. package/dist/es2022/zip/zip-transformer.js +82 -0
  177. package/dist/es2022/zip/zip-transformer.js.map +1 -0
  178. package/dist/es2022/zip/zip.models.d.ts +13 -0
  179. package/dist/es2022/zip/zip.models.js +2 -0
  180. package/dist/es2022/zip/zip.models.js.map +1 -0
  181. package/lib/core/helpers/workflow-helper.ts +104 -0
  182. package/lib/core/index.ts +17 -0
  183. package/lib/core/logs/loggers.ts +80 -0
  184. package/lib/core/models/core.models.ts +134 -0
  185. package/lib/core/models/log.models.ts +31 -0
  186. package/lib/core/models/migration.models.ts +165 -0
  187. package/lib/core/utils/array.utils.ts +49 -0
  188. package/lib/core/utils/binary-data.utils.ts +29 -0
  189. package/lib/core/utils/confirm.utils.ts +139 -0
  190. package/lib/core/utils/error.utils.ts +65 -0
  191. package/lib/core/utils/external-id.utils.ts +9 -0
  192. package/lib/core/utils/global.utils.ts +59 -0
  193. package/lib/core/utils/http.utils.ts +35 -0
  194. package/lib/core/utils/management-client-utils.ts +182 -0
  195. package/lib/core/utils/processing-utils.ts +71 -0
  196. package/lib/core/utils/run.utils.ts +51 -0
  197. package/lib/export/context/export-context-fetcher.ts +475 -0
  198. package/lib/export/export-manager.ts +249 -0
  199. package/lib/export/export.models.ts +87 -0
  200. package/lib/export/index.ts +2 -0
  201. package/lib/export/utils/export.utils.ts +10 -0
  202. package/lib/file/file-manager.ts +37 -0
  203. package/lib/file/index.ts +1 -0
  204. package/lib/import/comparers/asset-comparer.ts +113 -0
  205. package/lib/import/context/import-context-fetcher.ts +367 -0
  206. package/lib/import/import-manager.ts +103 -0
  207. package/lib/import/import.models.ts +84 -0
  208. package/lib/import/importers/assets-importer.ts +239 -0
  209. package/lib/import/importers/content-items-importer.ts +142 -0
  210. package/lib/import/importers/language-variant-importer.ts +342 -0
  211. package/lib/import/importers/workflow-importer.ts +159 -0
  212. package/lib/import/index.ts +2 -0
  213. package/lib/import/utils/import.utils.ts +10 -0
  214. package/lib/index.ts +9 -0
  215. package/lib/metadata.ts +6 -0
  216. package/lib/node/cli/actions/export-action.ts +45 -0
  217. package/lib/node/cli/actions/import-action.ts +34 -0
  218. package/lib/node/cli/actions/migrate-action.ts +52 -0
  219. package/lib/node/cli/app.ts +29 -0
  220. package/lib/node/cli/args/args-fetcher.ts +61 -0
  221. package/lib/node/cli/args/args-setter.ts +35 -0
  222. package/lib/node/cli/cli.models.ts +28 -0
  223. package/lib/node/cli/commands.ts +161 -0
  224. package/lib/toolkit/elements-builder.ts +84 -0
  225. package/lib/toolkit/export.ts +21 -0
  226. package/lib/toolkit/file.ts +70 -0
  227. package/lib/toolkit/import.ts +21 -0
  228. package/lib/toolkit/index.ts +5 -0
  229. package/lib/toolkit/migrate.ts +71 -0
  230. package/lib/translation/extraction/items-extraction.processor.ts +181 -0
  231. package/lib/translation/helpers/rich-text.processor.ts +300 -0
  232. package/lib/translation/index.ts +4 -0
  233. package/lib/translation/transforms/export-transforms.ts +253 -0
  234. package/lib/translation/transforms/import-transforms.ts +215 -0
  235. package/lib/zip/index.ts +4 -0
  236. package/lib/zip/zip-manager.ts +33 -0
  237. package/lib/zip/zip-packager.ts +86 -0
  238. package/lib/zip/zip-transformer.ts +105 -0
  239. package/lib/zip/zip.models.ts +12 -0
  240. 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,4 @@
1
+ export * from './zip.models.js';
2
+ export * from './zip-manager.js';
3
+ export * from './zip-packager.js';
4
+ export * from './zip-transformer.js';
@@ -0,0 +1,5 @@
1
+ export * from './zip.models.js';
2
+ export * from './zip-manager.js';
3
+ export * from './zip-packager.js';
4
+ export * from './zip-transformer.js';
5
+ //# sourceMappingURL=index.js.map
@@ -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,3 @@
1
+ import JSZip from 'jszip';
2
+ import { ZipPackager } from './zip.models.js';
3
+ export declare function zipPackager(jsZip: JSZip): ZipPackager;
@@ -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":"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"}
@@ -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,2 @@
1
+ export {};
2
+ //# sourceMappingURL=zip.models.js.map
@@ -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
+ }