@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,10 +1,12 @@
1
- import chalk from 'chalk';
2
- import type { MigrationItem } from '../../core/index.js';
1
+ import chalk from "chalk";
2
+ import { MigrationToolkitError } from "../../core/models/error.models.js";
3
+ import type { MigrationItem } from "../../core/models/migration.models.js";
3
4
 
4
5
  export function throwErrorForMigrationItem(migrationItem: MigrationItem, message: string): never {
5
- throw Error(
6
- `Impot failed for item '${chalk.yellow(migrationItem.system.codename)}' in language '${chalk.cyan(
7
- migrationItem.system.language
8
- )}'. Reason: ${message}`
9
- );
6
+ throw new MigrationToolkitError(
7
+ "importFailedForItem",
8
+ `Import failed for item '${chalk.yellow(migrationItem.system.codename)}' in language '${chalk.cyan(
9
+ migrationItem.system.language,
10
+ )}'. Reason: ${message}`,
11
+ );
10
12
  }
package/lib/index.ts CHANGED
@@ -1,8 +1,12 @@
1
- // Public API
2
- export * from './core/index.js';
3
- export * from './export/index.js';
4
- export * from './file/index.js';
5
- export * from './import/index.js';
6
- export * from './toolkit/index.js';
7
- export * from './translation/index.js';
8
- export * from './zip/index.js';
1
+ // biome-ignore lint/performance/noBarrelFile: We need to export the public API
2
+ export { getDefaultLogger } from "./core/logs/loggers.js";
3
+ export { MigrationToolkitError, MissingAssetError, MissingItemError } from "./core/models/error.models.js";
4
+ export type { Logger, LogMessage, LogSpinnerData, LogSpinnerMessage } from "./core/models/log.models.js";
5
+ export * from "./core/models/migration.models.js";
6
+ export { defaultExternalIdGenerator, type ExternalIdGenerator } from "./core/utils/external-id.utils.js";
7
+ export type { SourceExportItem } from "./export/export.models.js";
8
+ export { elementsBuilder } from "./toolkit/elements-builder.js";
9
+ export { exportAsync } from "./toolkit/export.js";
10
+ export { extractAsync, storeAsync } from "./toolkit/file.js";
11
+ export { importAsync } from "./toolkit/import.js";
12
+ export { migrateAsync } from "./toolkit/migrate.js";
package/lib/metadata.ts CHANGED
@@ -1,6 +1,5 @@
1
-
2
1
  export const libMetadata = {
3
- name: '@kontent-ai/migration-toolkit',
4
- timestamp: 'Tue, 11 Nov 2025 14:54:34 GMT',
5
- version: '2.9.1'
2
+ name: "@kontent-ai/migration-toolkit",
3
+ timestamp: "Tue, 11 Nov 2025 14:54:34 GMT",
4
+ version: "2.9.1",
6
5
  };
@@ -1,45 +1,50 @@
1
- import { confirmExportAsync, defaultZipFilename, getDefaultLogger } from '../../../core/index.js';
2
- import { exportAsync, storeAsync } from '../../../toolkit/index.js';
3
- import type { CliArgumentsFetcher } from '../cli.models.js';
1
+ import { getDefaultLogger } from "../../../core/logs/loggers.js";
2
+ import { confirmExportAsync } from "../../../core/utils/confirm.utils.js";
3
+ import { defaultZipFilename } from "../../../core/utils/global.utils.js";
4
+ import { exportAsync } from "../../../toolkit/export.js";
5
+ import { storeAsync } from "../../../toolkit/file.js";
6
+ import type { CliArgumentsFetcher } from "../cli.models.js";
4
7
 
5
8
  export async function exportActionAsync(cliFetcher: CliArgumentsFetcher): Promise<void> {
6
- const logger = getDefaultLogger();
7
- const language = cliFetcher.getRequiredArgumentValue('language');
8
- const environmentId = cliFetcher.getRequiredArgumentValue('sourceEnvironmentId');
9
- const apiKey = cliFetcher.getRequiredArgumentValue('sourceApiKey');
10
- const items = cliFetcher.getRequiredArgumentValue('items').split(',');
11
- const baseUrl = cliFetcher.getOptionalArgumentValue('baseUrl');
12
- const force = cliFetcher.getBooleanArgumentValue('force', false);
13
- const filename = cliFetcher.getOptionalArgumentValue('filename') ?? defaultZipFilename;
9
+ const logger = getDefaultLogger();
10
+ const language = cliFetcher.getRequiredArgumentValue("language");
11
+ const environmentId = cliFetcher.getRequiredArgumentValue("sourceEnvironmentId");
12
+ const apiKey = cliFetcher.getRequiredArgumentValue("sourceApiKey");
13
+ const items = cliFetcher.getRequiredArgumentValue("items").split(",");
14
+ const baseUrl = cliFetcher.getOptionalArgumentValue("baseUrl");
15
+ const force = cliFetcher.getBooleanArgumentValue("force", false);
16
+ const skipMissingReferences = cliFetcher.getBooleanArgumentValue("skipMissingReferences", false);
17
+ const filename = cliFetcher.getOptionalArgumentValue("filename") ?? defaultZipFilename;
14
18
 
15
- await confirmExportAsync({
16
- force: force,
17
- apiKey: apiKey,
18
- environmentId: environmentId,
19
- logger: logger,
20
- dataToExport: {
21
- itemsCount: items.length
22
- }
23
- });
19
+ await confirmExportAsync({
20
+ force,
21
+ apiKey,
22
+ environmentId,
23
+ logger,
24
+ dataToExport: {
25
+ itemsCount: items.length,
26
+ },
27
+ });
24
28
 
25
- const exportedData = await exportAsync({
26
- logger: logger,
27
- environmentId: environmentId,
28
- apiKey: apiKey,
29
- baseUrl: baseUrl,
30
- exportItems: items.map((m) => {
31
- return {
32
- itemCodename: m,
33
- languageCodename: language
34
- };
35
- })
36
- });
29
+ const exportedData = await exportAsync({
30
+ logger,
31
+ environmentId,
32
+ apiKey,
33
+ baseUrl,
34
+ exportItems: items.map((m) => {
35
+ return {
36
+ itemCodename: m,
37
+ languageCodename: language,
38
+ };
39
+ }),
40
+ skipMissingReferences,
41
+ });
37
42
 
38
- await storeAsync({
39
- data: exportedData,
40
- filename: filename,
41
- logger: logger
42
- });
43
+ await storeAsync({
44
+ data: exportedData,
45
+ filename: filename,
46
+ logger: logger,
47
+ });
43
48
 
44
- logger.log({ type: 'completed', message: `Export has been successful` });
49
+ logger.log({ type: "completed", message: `Export has been successful` });
45
50
  }
@@ -1,36 +1,39 @@
1
- import { confirmImportAsync, defaultZipFilename, getDefaultLogger } from '../../../core/index.js';
2
- import { extractAsync, importAsync } from '../../../toolkit/index.js';
3
- import type { CliArgumentsFetcher } from '../cli.models.js';
1
+ import { getDefaultLogger } from "../../../core/logs/loggers.js";
2
+ import { confirmImportAsync } from "../../../core/utils/confirm.utils.js";
3
+ import { defaultZipFilename } from "../../../core/utils/global.utils.js";
4
+ import { extractAsync } from "../../../toolkit/file.js";
5
+ import { importAsync } from "../../../toolkit/import.js";
6
+ import type { CliArgumentsFetcher } from "../cli.models.js";
4
7
 
5
8
  export async function importActionAsync(argsFetcher: CliArgumentsFetcher): Promise<void> {
6
- const log = getDefaultLogger();
7
- const environmentId = argsFetcher.getRequiredArgumentValue('targetEnvironmentId');
8
- const apiKey = argsFetcher.getRequiredArgumentValue('targetApiKey');
9
- const baseUrl = argsFetcher.getOptionalArgumentValue('baseUrl');
10
- const createReportFile = argsFetcher.getBooleanArgumentValue('createReportFile', false);
11
- const force = argsFetcher.getBooleanArgumentValue('force', false);
12
- const filename = argsFetcher.getOptionalArgumentValue('filename') ?? defaultZipFilename;
9
+ const log = getDefaultLogger();
10
+ const environmentId = argsFetcher.getRequiredArgumentValue("targetEnvironmentId");
11
+ const apiKey = argsFetcher.getRequiredArgumentValue("targetApiKey");
12
+ const baseUrl = argsFetcher.getOptionalArgumentValue("baseUrl");
13
+ const createReportFile = argsFetcher.getBooleanArgumentValue("createReportFile", false);
14
+ const force = argsFetcher.getBooleanArgumentValue("force", false);
15
+ const filename = argsFetcher.getOptionalArgumentValue("filename") ?? defaultZipFilename;
13
16
 
14
- await confirmImportAsync({
15
- force: force,
16
- apiKey: apiKey,
17
- environmentId: environmentId,
18
- logger: log
19
- });
17
+ await confirmImportAsync({
18
+ force: force,
19
+ apiKey: apiKey,
20
+ environmentId: environmentId,
21
+ logger: log,
22
+ });
20
23
 
21
- const importData = await extractAsync({
22
- logger: log,
23
- filename: filename
24
- });
24
+ const importData = await extractAsync({
25
+ logger: log,
26
+ filename: filename,
27
+ });
25
28
 
26
- await importAsync({
27
- logger: log,
28
- data: importData,
29
- baseUrl: baseUrl,
30
- environmentId: environmentId,
31
- apiKey: apiKey,
32
- createReportFile: createReportFile
33
- });
29
+ await importAsync({
30
+ logger: log,
31
+ data: importData,
32
+ baseUrl: baseUrl,
33
+ environmentId: environmentId,
34
+ apiKey: apiKey,
35
+ createReportFile: createReportFile,
36
+ });
34
37
 
35
- log.log({ type: 'completed', message: `Import has been successful` });
38
+ log.log({ type: "completed", message: `Import has been successful` });
36
39
  }
@@ -1,52 +1,55 @@
1
- import { confirmMigrateAsync, getDefaultLogger } from '../../../core/index.js';
2
- import type { SourceExportItem } from '../../../export/index.js';
3
- import { migrateAsync } from '../../../toolkit/index.js';
4
- import type { CliArgumentsFetcher } from '../cli.models.js';
1
+ import { getDefaultLogger } from "../../../core/logs/loggers.js";
2
+ import { confirmMigrateAsync } from "../../../core/utils/confirm.utils.js";
3
+ import type { SourceExportItem } from "../../../export/export.models.js";
4
+ import { migrateAsync } from "../../../toolkit/migrate.js";
5
+ import type { CliArgumentsFetcher } from "../cli.models.js";
5
6
 
6
7
  export async function migrateActionAsync(argsFetcher: CliArgumentsFetcher): Promise<void> {
7
- const log = getDefaultLogger();
8
- const sourceEnvironmentId = argsFetcher.getRequiredArgumentValue('sourceEnvironmentId');
9
- const sourceApiKey = argsFetcher.getRequiredArgumentValue('sourceApiKey');
10
- const targetEnvironmentId = argsFetcher.getRequiredArgumentValue('targetEnvironmentId');
11
- const targetApiKey = argsFetcher.getRequiredArgumentValue('targetApiKey');
12
- const force = argsFetcher.getBooleanArgumentValue('force', false);
13
- const items = argsFetcher.getRequiredArgumentValue('items')?.split(',');
14
- const language = argsFetcher.getRequiredArgumentValue('language');
15
- const migrateItems: readonly SourceExportItem[] = items.map((m) => {
16
- return {
17
- itemCodename: m,
18
- languageCodename: language
19
- };
20
- });
8
+ const logger = getDefaultLogger();
9
+ const sourceEnvironmentId = argsFetcher.getRequiredArgumentValue("sourceEnvironmentId");
10
+ const sourceApiKey = argsFetcher.getRequiredArgumentValue("sourceApiKey");
11
+ const targetEnvironmentId = argsFetcher.getRequiredArgumentValue("targetEnvironmentId");
12
+ const targetApiKey = argsFetcher.getRequiredArgumentValue("targetApiKey");
13
+ const force = argsFetcher.getBooleanArgumentValue("force", false);
14
+ const skipMissingReferences = argsFetcher.getBooleanArgumentValue("skipMissingReferences", false);
15
+ const items = argsFetcher.getRequiredArgumentValue("items").split(",");
16
+ const language = argsFetcher.getRequiredArgumentValue("language");
17
+ const migrateItems: readonly SourceExportItem[] = items.map((m) => {
18
+ return {
19
+ itemCodename: m,
20
+ languageCodename: language,
21
+ };
22
+ });
21
23
 
22
- await confirmMigrateAsync({
23
- force: force,
24
- sourceEnvironment: {
25
- apiKey: sourceApiKey,
26
- environmentId: sourceEnvironmentId
27
- },
28
- targetEnvironment: {
29
- apiKey: targetApiKey,
30
- environmentId: targetEnvironmentId
31
- },
32
- logger: log,
33
- dataToMigrate: {
34
- itemsCount: migrateItems.length
35
- }
36
- });
24
+ await confirmMigrateAsync({
25
+ force,
26
+ sourceEnvironment: {
27
+ apiKey: sourceApiKey,
28
+ environmentId: sourceEnvironmentId,
29
+ },
30
+ targetEnvironment: {
31
+ apiKey: targetApiKey,
32
+ environmentId: targetEnvironmentId,
33
+ },
34
+ logger,
35
+ dataToMigrate: {
36
+ itemsCount: migrateItems.length,
37
+ },
38
+ });
37
39
 
38
- await migrateAsync({
39
- logger: log,
40
- sourceEnvironment: {
41
- environmentId: sourceEnvironmentId,
42
- apiKey: sourceApiKey,
43
- items: migrateItems
44
- },
45
- targetEnvironment: {
46
- environmentId: targetEnvironmentId,
47
- apiKey: targetApiKey
48
- }
49
- });
40
+ await migrateAsync({
41
+ logger,
42
+ sourceEnvironment: {
43
+ environmentId: sourceEnvironmentId,
44
+ apiKey: sourceApiKey,
45
+ items: migrateItems,
46
+ skipMissingReferences,
47
+ },
48
+ targetEnvironment: {
49
+ environmentId: targetEnvironmentId,
50
+ apiKey: targetApiKey,
51
+ },
52
+ });
50
53
 
51
- log.log({ type: 'completed', message: `Migration has been successful` });
54
+ logger.log({ type: "completed", message: `Migration has been successful` });
52
55
  }
@@ -1,32 +1,32 @@
1
1
  #!/usr/bin/env node
2
- import chalk from 'chalk';
3
-
4
- import { match } from 'ts-pattern';
5
- import { exitProgram, handleError } from '../../core/index.js';
6
- import { exportActionAsync } from './actions/export-action.js';
7
- import { importActionAsync } from './actions/import-action.js';
8
- import { migrateActionAsync } from './actions/migrate-action.js';
9
- import { argumentsFetcherAsync } from './args/args-fetcher.js';
10
- import { cliArgs } from './commands.js';
2
+ import chalk from "chalk";
3
+ import { match } from "ts-pattern";
4
+ import { handleError } from "../../core/utils/error.utils.js";
5
+ import { exitProgram } from "../../core/utils/global.utils.js";
6
+ import { exportActionAsync } from "./actions/export-action.js";
7
+ import { importActionAsync } from "./actions/import-action.js";
8
+ import { migrateActionAsync } from "./actions/migrate-action.js";
9
+ import { argumentsFetcherAsync } from "./args/args-fetcher.js";
10
+ import { cliArgs } from "./commands.js";
11
11
 
12
12
  // Need to register --help commands
13
13
  cliArgs.registerCommands();
14
14
 
15
15
  const run = async () => {
16
- const argsFetcher = await argumentsFetcherAsync();
17
- const action = argsFetcher.getCliAction();
16
+ const argsFetcher = await argumentsFetcherAsync();
17
+ const action = argsFetcher.getCliAction();
18
18
 
19
- return await match(action)
20
- .with('export', async () => await exportActionAsync(argsFetcher))
21
- .with('import', async () => await importActionAsync(argsFetcher))
22
- .with('migrate', async () => await migrateActionAsync(argsFetcher))
23
- .otherwise(() =>
24
- exitProgram({
25
- message: `Invalid action '${chalk.red(action)}'`
26
- })
27
- );
19
+ return await match(action)
20
+ .with("export", async () => await exportActionAsync(argsFetcher))
21
+ .with("import", async () => await importActionAsync(argsFetcher))
22
+ .with("migrate", async () => await migrateActionAsync(argsFetcher))
23
+ .otherwise(() =>
24
+ exitProgram({
25
+ message: `Invalid action '${chalk.red(action)}'`,
26
+ }),
27
+ );
28
28
  };
29
29
 
30
30
  run().catch((err) => {
31
- handleError(err);
31
+ handleError(err);
32
32
  });
@@ -1,60 +1,61 @@
1
- import chalk from 'chalk';
2
- import { match } from 'ts-pattern';
3
- import yargs from 'yargs';
4
- import { hideBin } from 'yargs/helpers';
5
- import type { CliAction, LiteralUnion } from '../../../core/index.js';
6
- import { exitProgram } from '../../../core/index.js';
7
- import type { CliArgumentsFetcher } from '../cli.models.js';
1
+ import chalk from "chalk";
2
+ import { match } from "ts-pattern";
3
+ import yargs from "yargs";
4
+ import { hideBin } from "yargs/helpers";
5
+ import type { CliAction, LiteralUnion } from "../../../core/models/core.models.js";
6
+ import { MigrationToolkitError } from "../../../core/models/error.models.js";
7
+ import { exitProgram } from "../../../core/utils/global.utils.js";
8
+ import type { CliArgumentsFetcher } from "../cli.models.js";
8
9
 
9
10
  type ArgvResult = {
10
- [x: string]: unknown;
11
- _: (string | number)[];
12
- $0: string;
11
+ [x: string]: unknown;
12
+ _: (string | number)[];
13
+ $0: string;
13
14
  };
14
15
 
15
16
  export async function argumentsFetcherAsync(): Promise<CliArgumentsFetcher> {
16
- const argv = yargs(hideBin(process.argv));
17
- const resolvedArgv: ArgvResult = await argv.argv;
18
-
19
- const getOptionalArgumentValue = (argName: string) => {
20
- return resolvedArgv[argName]?.toString();
21
- };
22
-
23
- return {
24
- getCliAction(): CliAction {
25
- const command = resolvedArgv._?.[0]?.toString()?.toLowerCase() as LiteralUnion<CliAction>;
26
-
27
- return match(command)
28
- .returnType<CliAction>()
29
- .with('export', () => 'export')
30
- .with('import', () => 'import')
31
- .with('migrate', () => 'migrate')
32
- .otherwise(() => {
33
- throw Error(`Unsupported command '${chalk.yellow(command)}'`);
34
- });
35
- },
36
- getOptionalArgumentValue(argName: string): string | undefined {
37
- return resolvedArgv[argName]?.toString();
38
- },
39
- getRequiredArgumentValue(argName: string): string {
40
- const value = getOptionalArgumentValue(argName);
41
-
42
- if (!value) {
43
- exitProgram({
44
- message: `Missing '${chalk.yellow(argName)}' argument value`
45
- });
46
- }
47
-
48
- return value;
49
- },
50
- getBooleanArgumentValue(argName: string, defaultValue: boolean): boolean {
51
- const value = getOptionalArgumentValue(argName);
52
-
53
- if (!value) {
54
- return defaultValue;
55
- }
56
-
57
- return value.toLowerCase() === 'true'.toLowerCase();
58
- }
59
- };
17
+ const argv = yargs(hideBin(process.argv));
18
+ const resolvedArgv: ArgvResult = await argv.argv;
19
+
20
+ const getOptionalArgumentValue = (argName: string) => {
21
+ return resolvedArgv[argName]?.toString();
22
+ };
23
+
24
+ return {
25
+ getCliAction(): CliAction {
26
+ const command = resolvedArgv._[0]?.toString()?.toLowerCase() as LiteralUnion<CliAction>;
27
+
28
+ return match(command)
29
+ .returnType<CliAction>()
30
+ .with("export", () => "export")
31
+ .with("import", () => "import")
32
+ .with("migrate", () => "migrate")
33
+ .otherwise(() => {
34
+ throw new MigrationToolkitError("unsupportedCommand", `Unsupported command '${chalk.yellow(command)}'`);
35
+ });
36
+ },
37
+ getOptionalArgumentValue(argName: string): string | undefined {
38
+ return resolvedArgv[argName]?.toString();
39
+ },
40
+ getRequiredArgumentValue(argName: string): string {
41
+ const value = getOptionalArgumentValue(argName);
42
+
43
+ if (!value) {
44
+ exitProgram({
45
+ message: `Missing '${chalk.yellow(argName)}' argument value`,
46
+ });
47
+ }
48
+
49
+ return value;
50
+ },
51
+ getBooleanArgumentValue(argName: string, defaultValue: boolean): boolean {
52
+ const value = getOptionalArgumentValue(argName);
53
+
54
+ if (!value) {
55
+ return defaultValue;
56
+ }
57
+
58
+ return value.toLowerCase() === "true".toLowerCase();
59
+ },
60
+ };
60
61
  }
@@ -1,38 +1,40 @@
1
- import yargs from 'yargs';
2
- import { hideBin } from 'yargs/helpers';
3
- import type { CliArgumentsSetter, Command, CommandOption } from '../cli.models.js';
1
+ import yargs from "yargs";
2
+ import { hideBin } from "yargs/helpers";
3
+ import type { CliArgumentsSetter, Command, CommandOption } from "../cli.models.js";
4
4
 
5
5
  export function argumentsSetter(): CliArgumentsSetter {
6
- const argv = yargs(hideBin(process.argv));
6
+ const argv = yargs(hideBin(process.argv));
7
7
 
8
- return {
9
- withCommand(command: Command): CliArgumentsSetter {
10
- argv.command(command.name, command.description, (yargs) => {
11
- command.examples.forEach((example) => yargs.example(command.name, example));
12
- command.options.forEach((option) => {
13
- yargs.positional(option.name, {
14
- alias: option.alias,
15
- describe: option.description,
16
- type: option.type,
17
- demandOption: option.isRequired
18
- });
19
- });
20
- });
8
+ return {
9
+ withCommand(command: Command): CliArgumentsSetter {
10
+ argv.command(command.name, command.description, (yargs) => {
11
+ command.examples.forEach((example) => {
12
+ yargs.example(command.name, example);
13
+ });
14
+ command.options.forEach((option) => {
15
+ yargs.positional(option.name, {
16
+ alias: option.alias,
17
+ describe: option.description,
18
+ type: option.type,
19
+ demandOption: option.isRequired,
20
+ });
21
+ });
22
+ });
21
23
 
22
- return this;
23
- },
24
- withOption(option: CommandOption): CliArgumentsSetter {
25
- argv.option(option.name, {
26
- alias: option.alias,
27
- description: option.description,
28
- type: option.type,
29
- demandOption: option.isRequired
30
- });
24
+ return this;
25
+ },
26
+ withOption(option: CommandOption): CliArgumentsSetter {
27
+ argv.option(option.name, {
28
+ alias: option.alias,
29
+ description: option.description,
30
+ type: option.type,
31
+ demandOption: option.isRequired,
32
+ });
31
33
 
32
- return this;
33
- },
34
- registerCommands(): void {
35
- argv.parseSync();
36
- }
37
- };
34
+ return this;
35
+ },
36
+ registerCommands(): void {
37
+ argv.parseSync();
38
+ },
39
+ };
38
40
  }
@@ -1,29 +1,29 @@
1
- import type { CliAction } from '../../core/index.js';
1
+ import type { CliAction } from "../../core/models/core.models.js";
2
2
 
3
3
  export interface Command {
4
- readonly name: string;
5
- readonly description: string;
6
- readonly options: readonly CommandOption[];
7
- readonly examples: string[];
4
+ readonly name: string;
5
+ readonly description: string;
6
+ readonly options: readonly CommandOption[];
7
+ readonly examples: string[];
8
8
  }
9
9
 
10
10
  export interface CommandOption {
11
- readonly name: string;
12
- readonly isRequired: boolean;
13
- readonly alias?: string;
14
- readonly description?: string;
15
- readonly type?: 'boolean' | 'number' | 'string';
11
+ readonly name: string;
12
+ readonly isRequired: boolean;
13
+ readonly alias?: string;
14
+ readonly description?: string;
15
+ readonly type?: "boolean" | "number" | "string";
16
16
  }
17
17
 
18
18
  export type CliArgumentsSetter = {
19
- withCommand(command: Command): CliArgumentsSetter;
20
- withOption(option: CommandOption): CliArgumentsSetter;
21
- registerCommands(): void;
19
+ withCommand(command: Command): CliArgumentsSetter;
20
+ withOption(option: CommandOption): CliArgumentsSetter;
21
+ registerCommands(): void;
22
22
  };
23
23
 
24
24
  export type CliArgumentsFetcher = {
25
- getCliAction(): CliAction;
26
- getOptionalArgumentValue(argName: string): string | undefined;
27
- getRequiredArgumentValue(argName: string): string;
28
- getBooleanArgumentValue(argName: string, defaultValue: boolean): boolean;
25
+ getCliAction(): CliAction;
26
+ getOptionalArgumentValue(argName: string): string | undefined;
27
+ getRequiredArgumentValue(argName: string): string;
28
+ getBooleanArgumentValue(argName: string, defaultValue: boolean): boolean;
29
29
  };