@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,392 +1,397 @@
1
- import type { LanguageVariantModels, ManagementClient, WorkflowModels } from '@kontent-ai/management-sdk';
2
- import { SharedModels } from '@kontent-ai/management-sdk';
3
- import { match } from 'ts-pattern';
4
- import type { Logger, LogSpinnerData, MigrationItem, MigrationItemVersion, ShortestPathResult, WorkflowStep } from '../../core/index.js';
5
- import { runMapiRequestAsync, workflowHelper as workflowHelperInit } from '../../core/index.js';
1
+ import type { LanguageVariantModels, ManagementClient, WorkflowModels } from "@kontent-ai/management-sdk";
2
+ import { SharedModels } from "@kontent-ai/management-sdk";
3
+ import { match } from "ts-pattern";
4
+ import { type ShortestPathResult, type WorkflowStep, workflowHelper as workflowHelperInit } from "../../core/helpers/workflow-helper.js";
5
+ import type { Logger, LogSpinnerData } from "../../core/models/log.models.js";
6
+ import type { MigrationItem, MigrationItemVersion } from "../../core/models/migration.models.js";
7
+ import { runMapiRequestAsync } from "../../core/utils/run.utils.js";
6
8
 
7
9
  export function workflowImporter(config: {
8
- readonly logger: Logger;
9
- readonly managementClient: Readonly<ManagementClient>;
10
- readonly workflows: readonly Readonly<WorkflowModels.Workflow>[];
10
+ readonly logger: Logger;
11
+ readonly managementClient: Readonly<ManagementClient>;
12
+ readonly workflows: readonly Readonly<WorkflowModels.Workflow>[];
11
13
  }) {
12
- const workflowHelper = workflowHelperInit(config.workflows);
14
+ const workflowHelper = workflowHelperInit(config.workflows);
13
15
 
14
- const publishLanguageVariantAsync = async (data: {
15
- readonly logSpinner: LogSpinnerData;
16
- readonly migrationItem: MigrationItem;
17
- readonly languageVariant: Readonly<LanguageVariantModels.ContentItemLanguageVariant>;
18
- readonly workflowCodename: string;
19
- readonly stepCodename: string;
20
- }): Promise<void> => {
21
- await runMapiRequestAsync({
22
- logger: config.logger,
23
- func: async () =>
24
- (
25
- await config.managementClient
26
- .publishLanguageVariant()
27
- .byItemCodename(data.migrationItem.system.codename)
28
- .byLanguageCodename(data.migrationItem.system.language.codename)
29
- .withoutData()
30
- .toPromise()
31
- ).data,
32
- action: 'publish',
33
- type: 'languageVariant',
34
- logSpinner: data.logSpinner,
35
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`
36
- });
37
- };
16
+ const publishLanguageVariantAsync = async (data: {
17
+ readonly logSpinner: LogSpinnerData;
18
+ readonly migrationItem: MigrationItem;
19
+ readonly languageVariant: Readonly<LanguageVariantModels.ContentItemLanguageVariant>;
20
+ readonly workflowCodename: string;
21
+ readonly stepCodename: string;
22
+ }): Promise<void> => {
23
+ await runMapiRequestAsync({
24
+ logger: config.logger,
25
+ func: async () =>
26
+ (
27
+ await config.managementClient
28
+ .publishLanguageVariant()
29
+ .byItemCodename(data.migrationItem.system.codename)
30
+ .byLanguageCodename(data.migrationItem.system.language.codename)
31
+ .withoutData()
32
+ .toPromise()
33
+ ).data,
34
+ action: "publish",
35
+ type: "languageVariant",
36
+ logSpinner: data.logSpinner,
37
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`,
38
+ });
39
+ };
38
40
 
39
- const getPreviousToPublishStep = (
40
- workflow: Readonly<WorkflowModels.Workflow>,
41
- variantStep: WorkflowStep,
42
- publishStep: WorkflowStep
43
- ): ShortestPathResult => {
44
- const steps = workflowHelper.findShortestPathBetweenSteps(workflow, variantStep, publishStep);
41
+ const getPreviousToPublishStep = (
42
+ workflow: Readonly<WorkflowModels.Workflow>,
43
+ variantStep: WorkflowStep,
44
+ publishStep: WorkflowStep,
45
+ ): ShortestPathResult | undefined => {
46
+ const steps = workflowHelper.findShortestPathBetweenSteps(workflow, variantStep, publishStep);
45
47
 
46
- return steps[steps.length - 2];
47
- };
48
+ if (steps.length < 2) {
49
+ return undefined;
50
+ }
51
+ return steps[steps.length - 2];
52
+ };
48
53
 
49
- const unpublishLanguageVariantAsync = async (data: {
50
- readonly logSpinner: LogSpinnerData;
51
- readonly migrationItem: MigrationItem;
52
- }): Promise<void> => {
53
- // unpublish the language variant first if published
54
- // there is no way to determine if language variant is published via MAPI
55
- // so we have to always try unpublishing first and catching possible errors
56
- try {
57
- await runMapiRequestAsync({
58
- logger: config.logger,
59
- func: async () =>
60
- (
61
- await config.managementClient
62
- .unpublishLanguageVariant()
63
- .byItemCodename(data.migrationItem.system.codename)
64
- .byLanguageCodename(data.migrationItem.system.language.codename)
65
- .withoutData()
66
- .toPromise()
67
- ).data,
68
- action: 'unpublish',
69
- type: 'languageVariant',
70
- logSpinner: data.logSpinner,
71
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`
72
- });
73
- } catch (error) {
74
- if (error instanceof SharedModels.ContentManagementBaseKontentError) {
75
- data.logSpinner({
76
- type: 'unpublish',
77
- message: `Unpublish failed, but this may be expected behavior as we cannot determine if there is a published version already. Error received: ${error.message}`
78
- });
79
- } else {
80
- throw error;
81
- }
82
- }
83
- };
54
+ const unpublishLanguageVariantAsync = async (data: {
55
+ readonly logSpinner: LogSpinnerData;
56
+ readonly migrationItem: MigrationItem;
57
+ }): Promise<void> => {
58
+ // unpublish the language variant first if published
59
+ // there is no way to determine if language variant is published via MAPI
60
+ // so we have to always try unpublishing first and catching possible errors
61
+ try {
62
+ await runMapiRequestAsync({
63
+ logger: config.logger,
64
+ func: async () =>
65
+ (
66
+ await config.managementClient
67
+ .unpublishLanguageVariant()
68
+ .byItemCodename(data.migrationItem.system.codename)
69
+ .byLanguageCodename(data.migrationItem.system.language.codename)
70
+ .withoutData()
71
+ .toPromise()
72
+ ).data,
73
+ action: "unpublish",
74
+ type: "languageVariant",
75
+ logSpinner: data.logSpinner,
76
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`,
77
+ });
78
+ } catch (error) {
79
+ if (error instanceof SharedModels.ContentManagementBaseKontentError) {
80
+ data.logSpinner({
81
+ type: "unpublish",
82
+ message: `Unpublish failed, but this may be expected behavior as we cannot determine if there is a published version already. Error received: ${error.message}`,
83
+ });
84
+ } else {
85
+ throw error;
86
+ }
87
+ }
88
+ };
84
89
 
85
- const schedulePublishLanguageVariantAsync = async (data: {
86
- readonly logSpinner: LogSpinnerData;
87
- readonly migrationItem: MigrationItem;
88
- readonly schedule: {
89
- readonly publish_time: string;
90
- readonly publish_display_timezone: string;
91
- };
92
- }): Promise<void> => {
93
- await runMapiRequestAsync({
94
- logger: config.logger,
95
- func: async () =>
96
- (
97
- await config.managementClient
98
- .publishLanguageVariant()
99
- .byItemCodename(data.migrationItem.system.codename)
100
- .byLanguageCodename(data.migrationItem.system.language.codename)
101
- .withData({
102
- scheduled_to: data.schedule.publish_time,
103
- display_timezone: data.schedule.publish_display_timezone
104
- })
105
- .toPromise()
106
- ).data,
107
- action: 'schedulePublish',
108
- type: 'languageVariant',
109
- logSpinner: data.logSpinner,
110
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`
111
- });
112
- };
90
+ const schedulePublishLanguageVariantAsync = async (data: {
91
+ readonly logSpinner: LogSpinnerData;
92
+ readonly migrationItem: MigrationItem;
93
+ readonly schedule: {
94
+ readonly publish_time: string;
95
+ readonly publish_display_timezone: string;
96
+ };
97
+ }): Promise<void> => {
98
+ await runMapiRequestAsync({
99
+ logger: config.logger,
100
+ func: async () =>
101
+ (
102
+ await config.managementClient
103
+ .publishLanguageVariant()
104
+ .byItemCodename(data.migrationItem.system.codename)
105
+ .byLanguageCodename(data.migrationItem.system.language.codename)
106
+ .withData({
107
+ scheduled_to: data.schedule.publish_time,
108
+ display_timezone: data.schedule.publish_display_timezone,
109
+ })
110
+ .toPromise()
111
+ ).data,
112
+ action: "schedulePublish",
113
+ type: "languageVariant",
114
+ logSpinner: data.logSpinner,
115
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`,
116
+ });
117
+ };
113
118
 
114
- const scheduleUnpublishLanguageVariantAsync = async (data: {
115
- readonly logSpinner: LogSpinnerData;
116
- readonly migrationItem: MigrationItem;
117
- readonly schedule: {
118
- readonly unpublish_time: string;
119
- readonly unpublish_display_timezone: string;
120
- };
121
- }): Promise<void> => {
122
- await runMapiRequestAsync({
123
- logger: config.logger,
124
- func: async () =>
125
- (
126
- await config.managementClient
127
- .unpublishLanguageVariant()
128
- .byItemCodename(data.migrationItem.system.codename)
129
- .byLanguageCodename(data.migrationItem.system.language.codename)
130
- .withData({
131
- scheduled_to: data.schedule.unpublish_time,
132
- display_timezone: data.schedule.unpublish_display_timezone
133
- })
134
- .toPromise()
135
- ).data,
136
- action: 'scheduleUnpublish',
137
- type: 'languageVariant',
138
- logSpinner: data.logSpinner,
139
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`
140
- });
141
- };
119
+ const scheduleUnpublishLanguageVariantAsync = async (data: {
120
+ readonly logSpinner: LogSpinnerData;
121
+ readonly migrationItem: MigrationItem;
122
+ readonly schedule: {
123
+ readonly unpublish_time: string;
124
+ readonly unpublish_display_timezone: string;
125
+ };
126
+ }): Promise<void> => {
127
+ await runMapiRequestAsync({
128
+ logger: config.logger,
129
+ func: async () =>
130
+ (
131
+ await config.managementClient
132
+ .unpublishLanguageVariant()
133
+ .byItemCodename(data.migrationItem.system.codename)
134
+ .byLanguageCodename(data.migrationItem.system.language.codename)
135
+ .withData({
136
+ scheduled_to: data.schedule.unpublish_time,
137
+ display_timezone: data.schedule.unpublish_display_timezone,
138
+ })
139
+ .toPromise()
140
+ ).data,
141
+ action: "scheduleUnpublish",
142
+ type: "languageVariant",
143
+ logSpinner: data.logSpinner,
144
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`,
145
+ });
146
+ };
142
147
 
143
- const archiveLanguageVariantAsync = async (data: {
144
- readonly logSpinner: LogSpinnerData;
145
- readonly workflowCodename: string;
146
- readonly migrationItem: MigrationItem;
147
- }): Promise<void> => {
148
- const workflow = workflowHelper.getWorkflowByCodename(data.workflowCodename);
149
- await runMapiRequestAsync({
150
- logger: config.logger,
151
- func: async () =>
152
- (
153
- await config.managementClient
154
- .changeWorkflowOfLanguageVariant()
155
- .byItemCodename(data.migrationItem.system.codename)
156
- .byLanguageCodename(data.migrationItem.system.language.codename)
157
- .withData({
158
- step_identifier: {
159
- codename: workflow.archivedStep.codename
160
- },
161
- workflow_identifier: {
162
- codename: workflow.codename
163
- }
164
- })
165
- .toPromise()
166
- ).data,
167
- action: 'archive',
168
- type: 'languageVariant',
169
- logSpinner: data.logSpinner,
170
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${workflow.archivedStep.codename}`
171
- });
172
- };
148
+ const archiveLanguageVariantAsync = async (data: {
149
+ readonly logSpinner: LogSpinnerData;
150
+ readonly workflowCodename: string;
151
+ readonly migrationItem: MigrationItem;
152
+ }): Promise<void> => {
153
+ const workflow = workflowHelper.getWorkflowByCodename(data.workflowCodename);
154
+ await runMapiRequestAsync({
155
+ logger: config.logger,
156
+ func: async () =>
157
+ (
158
+ await config.managementClient
159
+ .changeWorkflowOfLanguageVariant()
160
+ .byItemCodename(data.migrationItem.system.codename)
161
+ .byLanguageCodename(data.migrationItem.system.language.codename)
162
+ .withData({
163
+ step_identifier: {
164
+ codename: workflow.archivedStep.codename,
165
+ },
166
+ workflow_identifier: {
167
+ codename: workflow.codename,
168
+ },
169
+ })
170
+ .toPromise()
171
+ ).data,
172
+ action: "archive",
173
+ type: "languageVariant",
174
+ logSpinner: data.logSpinner,
175
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${workflow.archivedStep.codename}`,
176
+ });
177
+ };
173
178
 
174
- const changeWorkflowOfLanguageVariantAsync = async (data: {
175
- readonly logSpinner: LogSpinnerData;
176
- readonly workflowCodename: string;
177
- readonly stepCodename: string;
178
- readonly migrationItem: MigrationItem;
179
- }): Promise<void> => {
180
- const { workflow, step } = workflowHelper.getWorkflowAndStepByCodenames({
181
- workflowCodename: data.workflowCodename,
182
- stepCodename: data.stepCodename
183
- });
179
+ const changeWorkflowOfLanguageVariantAsync = async (data: {
180
+ readonly logSpinner: LogSpinnerData;
181
+ readonly workflowCodename: string;
182
+ readonly stepCodename: string;
183
+ readonly migrationItem: MigrationItem;
184
+ }): Promise<void> => {
185
+ const { workflow, step } = workflowHelper.getWorkflowAndStepByCodenames({
186
+ workflowCodename: data.workflowCodename,
187
+ stepCodename: data.stepCodename,
188
+ });
184
189
 
185
- await runMapiRequestAsync({
186
- logger: config.logger,
187
- func: async () =>
188
- (
189
- await config.managementClient
190
- .changeWorkflowOfLanguageVariant()
191
- .byItemCodename(data.migrationItem.system.codename)
192
- .byLanguageCodename(data.migrationItem.system.language.codename)
193
- .withData({
194
- step_identifier: {
195
- codename: step.codename
196
- },
197
- workflow_identifier: {
198
- codename: workflow.codename
199
- }
200
- })
201
- .toPromise()
202
- ).data,
203
- action: 'changeWorkflowStep',
204
- type: 'languageVariant',
205
- logSpinner: data.logSpinner,
206
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${step.codename}`
207
- });
208
- };
190
+ await runMapiRequestAsync({
191
+ logger: config.logger,
192
+ func: async () =>
193
+ (
194
+ await config.managementClient
195
+ .changeWorkflowOfLanguageVariant()
196
+ .byItemCodename(data.migrationItem.system.codename)
197
+ .byLanguageCodename(data.migrationItem.system.language.codename)
198
+ .withData({
199
+ step_identifier: {
200
+ codename: step.codename,
201
+ },
202
+ workflow_identifier: {
203
+ codename: workflow.codename,
204
+ },
205
+ })
206
+ .toPromise()
207
+ ).data,
208
+ action: "changeWorkflowStep",
209
+ type: "languageVariant",
210
+ logSpinner: data.logSpinner,
211
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${step.codename}`,
212
+ });
213
+ };
209
214
 
210
- const createNewVersionOfLanguageVariantAsync = async (data: {
211
- readonly logSpinner: LogSpinnerData;
212
- readonly migrationItem: MigrationItem;
213
- }): Promise<void> => {
214
- await runMapiRequestAsync({
215
- logger: config.logger,
216
- func: async () => {
217
- await config.managementClient
218
- .createNewVersionOfLanguageVariant()
219
- .byItemCodename(data.migrationItem.system.codename)
220
- .byLanguageCodename(data.migrationItem.system.language.codename)
221
- .toPromise();
222
- },
223
- action: 'createNewVersion',
224
- type: 'languageVariant',
225
- logSpinner: data.logSpinner,
226
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`
227
- });
228
- };
215
+ const createNewVersionOfLanguageVariantAsync = async (data: {
216
+ readonly logSpinner: LogSpinnerData;
217
+ readonly migrationItem: MigrationItem;
218
+ }): Promise<void> => {
219
+ await runMapiRequestAsync({
220
+ logger: config.logger,
221
+ func: async () => {
222
+ await config.managementClient
223
+ .createNewVersionOfLanguageVariant()
224
+ .byItemCodename(data.migrationItem.system.codename)
225
+ .byLanguageCodename(data.migrationItem.system.language.codename)
226
+ .toPromise();
227
+ },
228
+ action: "createNewVersion",
229
+ type: "languageVariant",
230
+ logSpinner: data.logSpinner,
231
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename})`,
232
+ });
233
+ };
229
234
 
230
- const cancelScheduledPublishAsync = async (data: {
231
- readonly logSpinner: LogSpinnerData;
232
- readonly migrationItem: MigrationItem;
233
- }): Promise<void> => {
234
- await runMapiRequestAsync({
235
- logger: config.logger,
236
- func: async () => {
237
- await config.managementClient
238
- .cancelSheduledPublishingOfLanguageVariant()
239
- .byItemCodename(data.migrationItem.system.codename)
240
- .byLanguageCodename(data.migrationItem.system.language.codename)
241
- .toPromise();
242
- },
243
- action: 'cancelScheduledPublish',
244
- type: 'languageVariant',
245
- logSpinner: data.logSpinner,
246
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> Cancel scheduled publish`
247
- });
248
- };
235
+ const cancelScheduledPublishAsync = async (data: {
236
+ readonly logSpinner: LogSpinnerData;
237
+ readonly migrationItem: MigrationItem;
238
+ }): Promise<void> => {
239
+ await runMapiRequestAsync({
240
+ logger: config.logger,
241
+ func: async () => {
242
+ await config.managementClient
243
+ .cancelSheduledPublishingOfLanguageVariant()
244
+ .byItemCodename(data.migrationItem.system.codename)
245
+ .byLanguageCodename(data.migrationItem.system.language.codename)
246
+ .toPromise();
247
+ },
248
+ action: "cancelScheduledPublish",
249
+ type: "languageVariant",
250
+ logSpinner: data.logSpinner,
251
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> Cancel scheduled publish`,
252
+ });
253
+ };
249
254
 
250
- const cancelScheduledUnpublishAsync = async (data: {
251
- readonly logSpinner: LogSpinnerData;
252
- readonly migrationItem: MigrationItem;
253
- }): Promise<void> => {
254
- await runMapiRequestAsync({
255
- logger: config.logger,
256
- func: async () => {
257
- await config.managementClient
258
- .cancelSheduledUnpublishingOfLanguageVariant()
259
- .byItemCodename(data.migrationItem.system.codename)
260
- .byLanguageCodename(data.migrationItem.system.language.codename)
261
- .toPromise();
262
- },
263
- action: 'cancelScheduledUnpublish',
264
- type: 'languageVariant',
265
- logSpinner: data.logSpinner,
266
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> Cancel scheduled unpublish`
267
- });
268
- };
255
+ const cancelScheduledUnpublishAsync = async (data: {
256
+ readonly logSpinner: LogSpinnerData;
257
+ readonly migrationItem: MigrationItem;
258
+ }): Promise<void> => {
259
+ await runMapiRequestAsync({
260
+ logger: config.logger,
261
+ func: async () => {
262
+ await config.managementClient
263
+ .cancelSheduledUnpublishingOfLanguageVariant()
264
+ .byItemCodename(data.migrationItem.system.codename)
265
+ .byLanguageCodename(data.migrationItem.system.language.codename)
266
+ .toPromise();
267
+ },
268
+ action: "cancelScheduledUnpublish",
269
+ type: "languageVariant",
270
+ logSpinner: data.logSpinner,
271
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> Cancel scheduled unpublish`,
272
+ });
273
+ };
269
274
 
270
- const moveToDraftStepAsync = async (data: {
271
- readonly logSpinner: LogSpinnerData;
272
- readonly migrationItem: MigrationItem;
273
- }): Promise<void> => {
274
- const workflow = workflowHelper.getWorkflowByCodename(data.migrationItem.system.workflow.codename);
275
- const firstWorkflowStep = workflow.steps?.[0];
275
+ const moveToDraftStepAsync = async (data: {
276
+ readonly logSpinner: LogSpinnerData;
277
+ readonly migrationItem: MigrationItem;
278
+ }): Promise<void> => {
279
+ const workflow = workflowHelper.getWorkflowByCodename(data.migrationItem.system.workflow.codename);
280
+ const firstWorkflowStep = workflow.steps.length ? workflow.steps[0] : undefined;
276
281
 
277
- if (firstWorkflowStep) {
278
- await runMapiRequestAsync({
279
- logger: config.logger,
280
- func: async () => {
281
- await config.managementClient
282
- .changeWorkflowOfLanguageVariant()
283
- .byItemCodename(data.migrationItem.system.codename)
284
- .byLanguageCodename(data.migrationItem.system.language.codename)
285
- .withData({
286
- workflow_identifier: {
287
- codename: workflow.codename
288
- },
289
- step_identifier: {
290
- codename: firstWorkflowStep.codename
291
- }
292
- })
293
- .toPromise();
294
- },
295
- action: 'changeWorkflowStep',
296
- type: 'languageVariant',
297
- logSpinner: data.logSpinner,
298
- itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${firstWorkflowStep.codename}`
299
- });
300
- }
301
- };
282
+ if (firstWorkflowStep) {
283
+ await runMapiRequestAsync({
284
+ logger: config.logger,
285
+ func: async () => {
286
+ await config.managementClient
287
+ .changeWorkflowOfLanguageVariant()
288
+ .byItemCodename(data.migrationItem.system.codename)
289
+ .byLanguageCodename(data.migrationItem.system.language.codename)
290
+ .withData({
291
+ workflow_identifier: {
292
+ codename: workflow.codename,
293
+ },
294
+ step_identifier: {
295
+ codename: firstWorkflowStep.codename,
296
+ },
297
+ })
298
+ .toPromise();
299
+ },
300
+ action: "changeWorkflowStep",
301
+ type: "languageVariant",
302
+ logSpinner: data.logSpinner,
303
+ itemName: `${data.migrationItem.system.codename} (${data.migrationItem.system.language.codename}) -> ${firstWorkflowStep.codename}`,
304
+ });
305
+ }
306
+ };
302
307
 
303
- const setScheduledStateOfLanguageVariantAsync = async (data: {
304
- readonly logSpinner: LogSpinnerData;
305
- readonly migrationItem: MigrationItem;
306
- readonly migrationItemVersion: MigrationItemVersion;
307
- }): Promise<void> => {
308
- if (!data.migrationItemVersion.schedule) {
309
- return;
310
- }
308
+ const setScheduledStateOfLanguageVariantAsync = async (data: {
309
+ readonly logSpinner: LogSpinnerData;
310
+ readonly migrationItem: MigrationItem;
311
+ readonly migrationItemVersion: MigrationItemVersion;
312
+ }): Promise<void> => {
313
+ if (!data.migrationItemVersion.schedule) {
314
+ return;
315
+ }
311
316
 
312
- // set scheduling
313
- if (data.migrationItemVersion.schedule.unpublish_time && data.migrationItemVersion.schedule.unpublish_display_timezone) {
314
- await scheduleUnpublishLanguageVariantAsync({
315
- logSpinner: data.logSpinner,
316
- migrationItem: data.migrationItem,
317
- schedule: {
318
- unpublish_time: data.migrationItemVersion.schedule.unpublish_time,
319
- unpublish_display_timezone: data.migrationItemVersion.schedule.unpublish_display_timezone
320
- }
321
- });
322
- }
317
+ // set scheduling
318
+ if (data.migrationItemVersion.schedule.unpublish_time && data.migrationItemVersion.schedule.unpublish_display_timezone) {
319
+ await scheduleUnpublishLanguageVariantAsync({
320
+ logSpinner: data.logSpinner,
321
+ migrationItem: data.migrationItem,
322
+ schedule: {
323
+ unpublish_time: data.migrationItemVersion.schedule.unpublish_time,
324
+ unpublish_display_timezone: data.migrationItemVersion.schedule.unpublish_display_timezone,
325
+ },
326
+ });
327
+ }
323
328
 
324
- if (data.migrationItemVersion.schedule.publish_time && data.migrationItemVersion.schedule.publish_display_timezone) {
325
- await schedulePublishLanguageVariantAsync({
326
- logSpinner: data.logSpinner,
327
- migrationItem: data.migrationItem,
328
- schedule: {
329
- publish_time: data.migrationItemVersion.schedule.publish_time,
330
- publish_display_timezone: data.migrationItemVersion.schedule.publish_display_timezone
331
- }
332
- });
333
- }
334
- };
329
+ if (data.migrationItemVersion.schedule.publish_time && data.migrationItemVersion.schedule.publish_display_timezone) {
330
+ await schedulePublishLanguageVariantAsync({
331
+ logSpinner: data.logSpinner,
332
+ migrationItem: data.migrationItem,
333
+ schedule: {
334
+ publish_time: data.migrationItemVersion.schedule.publish_time,
335
+ publish_display_timezone: data.migrationItemVersion.schedule.publish_display_timezone,
336
+ },
337
+ });
338
+ }
339
+ };
335
340
 
336
- const setWorkflowOfLanguageVariantAsync = async (data: {
337
- readonly logSpinner: LogSpinnerData;
338
- readonly workflowCodename: string;
339
- readonly stepCodename: string;
340
- readonly migrationItem: MigrationItem;
341
- readonly migrationItemVersion: MigrationItemVersion;
342
- readonly languageVariant: Readonly<LanguageVariantModels.ContentItemLanguageVariant>;
343
- }): Promise<void> => {
344
- return await match(data.stepCodename)
345
- .returnType<Promise<void>>()
346
- .when(
347
- (stepCodename) => workflowHelper.isPublishedStepByCodename(stepCodename),
348
- async () => {
349
- const { workflow, step: publishStep } = workflowHelper.getWorkflowAndStepByCodenames({
350
- workflowCodename: data.workflowCodename,
351
- stepCodename: data.stepCodename
352
- });
353
- const variantStep = workflowHelper.getWorkflowStepById(
354
- workflow,
355
- data.languageVariant.workflow.stepIdentifier.id as string
356
- );
357
- const previousToPublishStep = getPreviousToPublishStep(workflow, variantStep, publishStep);
341
+ const setWorkflowOfLanguageVariantAsync = async (data: {
342
+ readonly logSpinner: LogSpinnerData;
343
+ readonly workflowCodename: string;
344
+ readonly stepCodename: string;
345
+ readonly migrationItem: MigrationItem;
346
+ readonly migrationItemVersion: MigrationItemVersion;
347
+ readonly languageVariant: Readonly<LanguageVariantModels.ContentItemLanguageVariant>;
348
+ }): Promise<void> => {
349
+ return await match(data.stepCodename)
350
+ .returnType<Promise<void>>()
351
+ .when(
352
+ (stepCodename) => workflowHelper.isPublishedStepByCodename(stepCodename),
353
+ async () => {
354
+ const { workflow, step: publishStep } = workflowHelper.getWorkflowAndStepByCodenames({
355
+ workflowCodename: data.workflowCodename,
356
+ stepCodename: data.stepCodename,
357
+ });
358
+ const variantStep = workflowHelper.getWorkflowStepById(
359
+ workflow,
360
+ data.languageVariant.workflow.stepIdentifier.id as string,
361
+ );
362
+ const previousToPublishStep = getPreviousToPublishStep(workflow, variantStep, publishStep);
358
363
 
359
- if (previousToPublishStep) {
360
- await changeWorkflowOfLanguageVariantAsync({ ...data, stepCodename: previousToPublishStep.stepCodename });
361
- }
364
+ if (previousToPublishStep) {
365
+ await changeWorkflowOfLanguageVariantAsync({ ...data, stepCodename: previousToPublishStep.stepCodename });
366
+ }
362
367
 
363
- await publishLanguageVariantAsync(data);
364
- }
365
- )
366
- .when(
367
- (stepCodename) => workflowHelper.isArchivedStepByCodename(stepCodename),
368
- async () => await archiveLanguageVariantAsync(data)
369
- )
370
- .when(
371
- (stepCodename) => workflowHelper.isScheduledStepByCodename(stepCodename),
372
- async () => {
373
- // do nothing for scheduled step
374
- return await Promise.resolve();
375
- }
376
- )
377
- .otherwise(async () => await changeWorkflowOfLanguageVariantAsync(data));
378
- };
368
+ await publishLanguageVariantAsync(data);
369
+ },
370
+ )
371
+ .when(
372
+ (stepCodename) => workflowHelper.isArchivedStepByCodename(stepCodename),
373
+ async () => await archiveLanguageVariantAsync(data),
374
+ )
375
+ .when(
376
+ (stepCodename) => workflowHelper.isScheduledStepByCodename(stepCodename),
377
+ async () => {
378
+ // do nothing for scheduled step
379
+ return await Promise.resolve();
380
+ },
381
+ )
382
+ .otherwise(async () => await changeWorkflowOfLanguageVariantAsync(data));
383
+ };
379
384
 
380
- return {
381
- setScheduledStateOfLanguageVariantAsync,
382
- setWorkflowOfLanguageVariantAsync,
383
- publishLanguageVariantAsync,
384
- unpublishLanguageVariantAsync,
385
- archiveLanguageVariantAsync,
386
- changeWorkflowOfLanguageVariantAsync,
387
- moveToDraftStepAsync,
388
- createNewVersionOfLanguageVariantAsync,
389
- cancelScheduledPublishAsync,
390
- cancelScheduledUnpublishAsync
391
- };
385
+ return {
386
+ setScheduledStateOfLanguageVariantAsync,
387
+ setWorkflowOfLanguageVariantAsync,
388
+ publishLanguageVariantAsync,
389
+ unpublishLanguageVariantAsync,
390
+ archiveLanguageVariantAsync,
391
+ changeWorkflowOfLanguageVariantAsync,
392
+ moveToDraftStepAsync,
393
+ createNewVersionOfLanguageVariantAsync,
394
+ cancelScheduledPublishAsync,
395
+ cancelScheduledUnpublishAsync,
396
+ };
392
397
  }