@kontent-ai/migration-toolkit 2.9.1 → 3.0.0-1

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 (239) 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 +29 -22
  11. package/dist/core/models/error.models.d.ts +26 -0
  12. package/dist/core/models/error.models.js +104 -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 +17 -19
  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 +3 -1
  26. package/dist/core/utils/confirm.utils.js +92 -24
  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 +37 -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/core/utils/try.utils.d.ts +14 -0
  49. package/dist/core/utils/try.utils.js +18 -0
  50. package/dist/core/utils/try.utils.js.map +1 -0
  51. package/dist/export/context/export-context-fetcher.d.ts +1 -1
  52. package/dist/export/context/export-context-fetcher.js +92 -62
  53. package/dist/export/context/export-context-fetcher.js.map +1 -1
  54. package/dist/export/export-manager.d.ts +2 -2
  55. package/dist/export/export-manager.js +73 -59
  56. package/dist/export/export-manager.js.map +1 -1
  57. package/dist/export/export.models.d.ts +21 -2
  58. package/dist/export/utils/export.utils.d.ts +1 -1
  59. package/dist/export/utils/export.utils.js +3 -2
  60. package/dist/export/utils/export.utils.js.map +1 -1
  61. package/dist/file/file-manager.d.ts +2 -2
  62. package/dist/file/file-manager.js +7 -7
  63. package/dist/file/file-manager.js.map +1 -1
  64. package/dist/import/comparers/asset-comparer.d.ts +2 -2
  65. package/dist/import/comparers/asset-comparer.js +12 -11
  66. package/dist/import/comparers/asset-comparer.js.map +1 -1
  67. package/dist/import/context/import-context-fetcher.d.ts +1 -1
  68. package/dist/import/context/import-context-fetcher.js +77 -73
  69. package/dist/import/context/import-context-fetcher.js.map +1 -1
  70. package/dist/import/import-manager.d.ts +1 -1
  71. package/dist/import/import-manager.js +59 -56
  72. package/dist/import/import-manager.js.map +1 -1
  73. package/dist/import/import.models.d.ts +6 -2
  74. package/dist/import/importers/assets-importer.d.ts +3 -3
  75. package/dist/import/importers/assets-importer.js +46 -43
  76. package/dist/import/importers/assets-importer.js.map +1 -1
  77. package/dist/import/importers/content-items-importer.d.ts +3 -3
  78. package/dist/import/importers/content-items-importer.js +28 -25
  79. package/dist/import/importers/content-items-importer.js.map +1 -1
  80. package/dist/import/importers/language-variant-importer.d.ts +3 -3
  81. package/dist/import/importers/language-variant-importer.js +45 -45
  82. package/dist/import/importers/language-variant-importer.js.map +1 -1
  83. package/dist/import/importers/workflow-importer.d.ts +3 -2
  84. package/dist/import/importers/workflow-importer.js +58 -54
  85. package/dist/import/importers/workflow-importer.js.map +1 -1
  86. package/dist/import/utils/import.utils.d.ts +1 -1
  87. package/dist/import/utils/import.utils.js +3 -2
  88. package/dist/import/utils/import.utils.js.map +1 -1
  89. package/dist/index.d.ts +11 -7
  90. package/dist/index.js +10 -8
  91. package/dist/index.js.map +1 -1
  92. package/dist/metadata.js +3 -3
  93. package/dist/metadata.js.map +1 -1
  94. package/dist/node/cli/actions/export-action.d.ts +1 -1
  95. package/dist/node/cli/actions/export-action.js +29 -23
  96. package/dist/node/cli/actions/export-action.js.map +1 -1
  97. package/dist/node/cli/actions/import-action.d.ts +1 -1
  98. package/dist/node/cli/actions/import-action.js +15 -12
  99. package/dist/node/cli/actions/import-action.js.map +1 -1
  100. package/dist/node/cli/actions/migrate-action.d.ts +1 -1
  101. package/dist/node/cli/actions/migrate-action.js +26 -22
  102. package/dist/node/cli/actions/migrate-action.js.map +1 -1
  103. package/dist/node/cli/app.js +13 -12
  104. package/dist/node/cli/app.js.map +1 -1
  105. package/dist/node/cli/args/args-fetcher.d.ts +1 -1
  106. package/dist/node/cli/args/args-fetcher.js +14 -13
  107. package/dist/node/cli/args/args-fetcher.js.map +1 -1
  108. package/dist/node/cli/args/args-setter.d.ts +1 -1
  109. package/dist/node/cli/args/args-setter.js +8 -6
  110. package/dist/node/cli/args/args-setter.js.map +1 -1
  111. package/dist/node/cli/cli.models.d.ts +2 -2
  112. package/dist/node/cli/commands.js +68 -56
  113. package/dist/node/cli/commands.js.map +1 -1
  114. package/dist/toolkit/elements-builder.d.ts +1 -1
  115. package/dist/toolkit/elements-builder.js +12 -12
  116. package/dist/toolkit/elements-builder.js.map +1 -1
  117. package/dist/toolkit/export.d.ts +2 -2
  118. package/dist/toolkit/export.js +8 -8
  119. package/dist/toolkit/export.js.map +1 -1
  120. package/dist/toolkit/file.d.ts +2 -1
  121. package/dist/toolkit/file.js +18 -16
  122. package/dist/toolkit/file.js.map +1 -1
  123. package/dist/toolkit/import.d.ts +1 -1
  124. package/dist/toolkit/import.js +12 -12
  125. package/dist/toolkit/import.js.map +1 -1
  126. package/dist/toolkit/migrate.d.ts +13 -4
  127. package/dist/toolkit/migrate.js +15 -13
  128. package/dist/toolkit/migrate.js.map +1 -1
  129. package/dist/translation/extraction/items-extraction.processor.d.ts +5 -4
  130. package/dist/translation/extraction/items-extraction.processor.js +73 -35
  131. package/dist/translation/extraction/items-extraction.processor.js.map +1 -1
  132. package/dist/translation/helpers/export-placeholder.utils.d.ts +11 -0
  133. package/dist/translation/helpers/export-placeholder.utils.js +11 -0
  134. package/dist/translation/helpers/export-placeholder.utils.js.map +1 -0
  135. package/dist/translation/helpers/rich-text.processor.d.ts +6 -6
  136. package/dist/translation/helpers/rich-text.processor.js +38 -38
  137. package/dist/translation/helpers/rich-text.processor.js.map +1 -1
  138. package/dist/translation/transforms/export-transforms.d.ts +2 -2
  139. package/dist/translation/transforms/export-transforms.js +93 -67
  140. package/dist/translation/transforms/export-transforms.js.map +1 -1
  141. package/dist/translation/transforms/import-transforms.d.ts +2 -2
  142. package/dist/translation/transforms/import-transforms.js +38 -40
  143. package/dist/translation/transforms/import-transforms.js.map +1 -1
  144. package/dist/zip/zip-manager.d.ts +4 -3
  145. package/dist/zip/zip-manager.js +9 -9
  146. package/dist/zip/zip-manager.js.map +1 -1
  147. package/dist/zip/zip-packager.d.ts +2 -2
  148. package/dist/zip/zip-packager.js +19 -17
  149. package/dist/zip/zip-packager.js.map +1 -1
  150. package/dist/zip/zip-transformer.d.ts +3 -2
  151. package/dist/zip/zip-transformer.js +16 -15
  152. package/dist/zip/zip-transformer.js.map +1 -1
  153. package/dist/zip/zip.models.d.ts +2 -2
  154. package/lib/core/config.ts +6 -6
  155. package/lib/core/helpers/workflow-helper.ts +190 -185
  156. package/lib/core/logs/loggers.ts +52 -52
  157. package/lib/core/models/core.models.ts +130 -119
  158. package/lib/core/models/error.models.ts +148 -0
  159. package/lib/core/models/log.models.ts +20 -20
  160. package/lib/core/models/migration.models.ts +54 -57
  161. package/lib/core/models/migration.schema.ts +108 -108
  162. package/lib/core/utils/array.utils.ts +43 -42
  163. package/lib/core/utils/binary-data.utils.ts +16 -16
  164. package/lib/core/utils/confirm.utils.ts +184 -106
  165. package/lib/core/utils/error.utils.ts +69 -72
  166. package/lib/core/utils/external-id.utils.ts +4 -4
  167. package/lib/core/utils/global.utils.ts +81 -75
  168. package/lib/core/utils/http.utils.ts +23 -23
  169. package/lib/core/utils/management-client-utils.ts +189 -186
  170. package/lib/core/utils/processing-utils.ts +82 -82
  171. package/lib/core/utils/run.utils.ts +50 -50
  172. package/lib/core/utils/try.utils.ts +30 -0
  173. package/lib/export/context/export-context-fetcher.ts +472 -447
  174. package/lib/export/export-manager.ts +250 -232
  175. package/lib/export/export.models.ts +71 -56
  176. package/lib/export/utils/export.utils.ts +9 -7
  177. package/lib/file/file-manager.ts +28 -28
  178. package/lib/import/comparers/asset-comparer.ts +107 -106
  179. package/lib/import/context/import-context-fetcher.ts +462 -462
  180. package/lib/import/import-manager.ts +243 -240
  181. package/lib/import/import.models.ts +69 -67
  182. package/lib/import/importers/assets-importer.ts +240 -236
  183. package/lib/import/importers/content-items-importer.ts +126 -122
  184. package/lib/import/importers/language-variant-importer.ts +324 -328
  185. package/lib/import/importers/workflow-importer.ts +372 -367
  186. package/lib/import/utils/import.utils.ts +9 -7
  187. package/lib/index.ts +12 -8
  188. package/lib/metadata.ts +3 -4
  189. package/lib/node/cli/actions/export-action.ts +44 -38
  190. package/lib/node/cli/actions/import-action.ts +32 -29
  191. package/lib/node/cli/actions/migrate-action.ts +50 -46
  192. package/lib/node/cli/app.ts +21 -21
  193. package/lib/node/cli/args/args-fetcher.ts +55 -54
  194. package/lib/node/cli/args/args-setter.ts +34 -32
  195. package/lib/node/cli/cli.models.ts +17 -17
  196. package/lib/node/cli/commands.ts +165 -153
  197. package/lib/toolkit/elements-builder.ts +69 -69
  198. package/lib/toolkit/export.ts +21 -21
  199. package/lib/toolkit/file.ts +59 -53
  200. package/lib/toolkit/import.ts +32 -32
  201. package/lib/toolkit/migrate.ts +60 -49
  202. package/lib/translation/extraction/items-extraction.processor.ts +203 -173
  203. package/lib/translation/helpers/export-placeholder.utils.ts +10 -0
  204. package/lib/translation/helpers/rich-text.processor.ts +311 -311
  205. package/lib/translation/transforms/export-transforms.ts +313 -279
  206. package/lib/translation/transforms/import-transforms.ts +188 -191
  207. package/lib/zip/zip-manager.ts +28 -27
  208. package/lib/zip/zip-packager.ts +75 -73
  209. package/lib/zip/zip-transformer.ts +112 -107
  210. package/lib/zip/zip.models.ts +7 -7
  211. package/package.json +91 -84
  212. package/dist/core/index.d.ts +0 -16
  213. package/dist/core/index.js +0 -17
  214. package/dist/core/index.js.map +0 -1
  215. package/dist/export/index.d.ts +0 -2
  216. package/dist/export/index.js +0 -3
  217. package/dist/export/index.js.map +0 -1
  218. package/dist/file/index.d.ts +0 -1
  219. package/dist/file/index.js +0 -2
  220. package/dist/file/index.js.map +0 -1
  221. package/dist/import/index.d.ts +0 -2
  222. package/dist/import/index.js +0 -3
  223. package/dist/import/index.js.map +0 -1
  224. package/dist/toolkit/index.d.ts +0 -5
  225. package/dist/toolkit/index.js +0 -6
  226. package/dist/toolkit/index.js.map +0 -1
  227. package/dist/translation/index.d.ts +0 -4
  228. package/dist/translation/index.js +0 -5
  229. package/dist/translation/index.js.map +0 -1
  230. package/dist/zip/index.d.ts +0 -4
  231. package/dist/zip/index.js +0 -5
  232. package/dist/zip/index.js.map +0 -1
  233. package/lib/core/index.ts +0 -18
  234. package/lib/export/index.ts +0 -2
  235. package/lib/file/index.ts +0 -1
  236. package/lib/import/index.ts +0 -2
  237. package/lib/toolkit/index.ts +0 -5
  238. package/lib/translation/index.ts +0 -4
  239. package/lib/zip/index.ts +0 -4
@@ -1,101 +1,101 @@
1
- import chalk from 'chalk';
2
- import pLimit from 'p-limit';
3
- import type { ItemInfo, ItemProcessingResult } from '../models/core.models.js';
4
- import type { LogSpinnerData, Logger } from '../models/log.models.js';
1
+ import chalk from "chalk";
2
+ import pLimit from "p-limit";
3
+ import type { ItemInfo, ItemProcessingResult } from "../models/core.models.js";
4
+ import type { Logger, LogSpinnerData } from "../models/log.models.js";
5
5
 
6
6
  type ProcessSetAction =
7
- | 'Fetching assets'
8
- | 'Downloading assets'
9
- | 'Fetching content items'
10
- | 'Preparing content items & language variants'
11
- | 'Importing content items'
12
- | 'Importing language variants'
13
- | 'Fetching language variants'
14
- | 'Upserting assets'
15
- | 'Uploading assets';
7
+ | "Fetching assets"
8
+ | "Downloading assets"
9
+ | "Fetching content items"
10
+ | "Preparing content items & language variants"
11
+ | "Importing content items"
12
+ | "Importing language variants"
13
+ | "Fetching language variants"
14
+ | "Upserting assets"
15
+ | "Uploading assets";
16
16
 
17
17
  export async function processItemsAsync<InputItem, OutputItem>(data: {
18
- readonly action: ProcessSetAction;
19
- readonly logger: Logger;
20
- readonly items: Readonly<InputItem[]>;
21
- readonly parallelLimit: number;
22
- readonly processAsync: (item: Readonly<InputItem>, logSpinner: LogSpinnerData) => Promise<Readonly<OutputItem> | '404'>;
23
- readonly itemInfo: (item: Readonly<InputItem>) => ItemInfo;
18
+ readonly action: ProcessSetAction;
19
+ readonly logger: Logger;
20
+ readonly items: Readonly<InputItem[]>;
21
+ readonly parallelLimit: number;
22
+ readonly processAsync: (item: Readonly<InputItem>, logSpinner: LogSpinnerData) => Promise<Readonly<OutputItem> | "404">;
23
+ readonly itemInfo: (item: Readonly<InputItem>) => ItemInfo;
24
24
  }): Promise<readonly ItemProcessingResult<InputItem, OutputItem>[]> {
25
- if (!data.items.length) {
26
- return [];
27
- }
25
+ if (!data.items.length) {
26
+ return [];
27
+ }
28
28
 
29
- const firstItemInfo = data.itemInfo(data.items[0]);
29
+ const firstItemInfo = data.itemInfo(data.items[0]);
30
30
 
31
- return await data.logger.logWithSpinnerAsync(async (logSpinner) => {
32
- const limit = pLimit(data.parallelLimit);
33
- let processedItemsCount: number = 1;
31
+ return await data.logger.logWithSpinnerAsync(async (logSpinner) => {
32
+ const limit = pLimit(data.parallelLimit);
33
+ let processedItemsCount: number = 1;
34
34
 
35
- const requests: readonly Promise<ItemProcessingResult<InputItem, OutputItem>>[] = data.items.map((item) =>
36
- limit(() => {
37
- return data
38
- .processAsync(item, logSpinner)
39
- .then<OutputItem | '404'>((output) => {
40
- const itemInfo = data.itemInfo(item);
41
- const prefix = getPercentagePrefix(processedItemsCount, data.items.length);
35
+ const requests: readonly Promise<ItemProcessingResult<InputItem, OutputItem>>[] = data.items.map((item) =>
36
+ limit(() => {
37
+ return data
38
+ .processAsync(item, logSpinner)
39
+ .then<OutputItem | "404">((output) => {
40
+ const itemInfo = data.itemInfo(item);
41
+ const prefix = getPercentagePrefix(processedItemsCount, data.items.length);
42
42
 
43
- logSpinner({
44
- prefix: prefix,
45
- message: itemInfo.title,
46
- type: itemInfo.itemType
47
- });
43
+ logSpinner({
44
+ prefix: prefix,
45
+ message: itemInfo.title,
46
+ type: itemInfo.itemType,
47
+ });
48
48
 
49
- processedItemsCount++;
50
- return output;
51
- })
52
- .then<ItemProcessingResult<InputItem, OutputItem>>((outputItem) => {
53
- if (outputItem === '404') {
54
- return {
55
- state: '404',
56
- inputItem: item
57
- };
58
- }
59
- return {
60
- inputItem: item,
61
- outputItem: outputItem,
62
- state: 'valid'
63
- };
64
- })
65
- .catch<ItemProcessingResult<InputItem, OutputItem>>((error) => {
66
- return {
67
- state: 'error',
68
- inputItem: item,
69
- error: error
70
- };
71
- });
72
- })
73
- );
49
+ processedItemsCount++;
50
+ return output;
51
+ })
52
+ .then<ItemProcessingResult<InputItem, OutputItem>>((outputItem) => {
53
+ if (outputItem === "404") {
54
+ return {
55
+ state: "404",
56
+ inputItem: item,
57
+ };
58
+ }
59
+ return {
60
+ inputItem: item,
61
+ outputItem: outputItem,
62
+ state: "valid",
63
+ };
64
+ })
65
+ .catch<ItemProcessingResult<InputItem, OutputItem>>((error) => {
66
+ return {
67
+ state: "error",
68
+ inputItem: item,
69
+ error: error,
70
+ };
71
+ });
72
+ }),
73
+ );
74
74
 
75
- // log processing of first item as progress is set after each item finishes
76
- logSpinner({
77
- prefix: getPercentagePrefix(0, data.items.length),
78
- message: firstItemInfo.title,
79
- type: firstItemInfo.itemType
80
- });
75
+ // log processing of first item as progress is set after each item finishes
76
+ logSpinner({
77
+ prefix: getPercentagePrefix(0, data.items.length),
78
+ message: firstItemInfo.title,
79
+ type: firstItemInfo.itemType,
80
+ });
81
81
 
82
- // Only '<parallelLimit>' promises at a time
83
- const resultItems = await Promise.all(requests);
82
+ // Only '<parallelLimit>' promises at a time
83
+ const resultItems = await Promise.all(requests);
84
84
 
85
- const failedItemsCount = resultItems.filter((m) => m.state === 'error').length;
86
- const failedText = failedItemsCount ? ` Failed '${chalk.red(failedItemsCount)}' items` : ``;
85
+ const failedItemsCount = resultItems.filter((m) => m.state === "error").length;
86
+ const failedText = failedItemsCount ? ` Failed '${chalk.red(failedItemsCount)}' items` : ``;
87
87
 
88
- logSpinner({
89
- type: 'info',
90
- message: `Completed '${chalk.yellow(data.action)}'. Successfully processed '${chalk.green(
91
- resultItems.filter((m) => m.state === 'valid').length
92
- )}' items.${failedText}`
93
- });
88
+ logSpinner({
89
+ type: "info",
90
+ message: `Completed '${chalk.yellow(data.action)}'. Successfully processed '${chalk.green(
91
+ resultItems.filter((m) => m.state === "valid").length,
92
+ )}' items.${failedText}`,
93
+ });
94
94
 
95
- return resultItems;
96
- });
95
+ return resultItems;
96
+ });
97
97
  }
98
98
 
99
99
  function getPercentagePrefix(processedItems: number, totalCount: number): string {
100
- return chalk.gray(`${Math.round((processedItems / totalCount) * 100)}%`);
100
+ return chalk.gray(`${Math.round((processedItems / totalCount) * 100)}%`);
101
101
  }
@@ -1,60 +1,60 @@
1
- import chalk from 'chalk';
2
- import { match } from 'ts-pattern';
3
- import type { MapiAction, MapiType } from '../models/core.models.js';
4
- import type { LogMessage, LogSpinnerData, Logger } from '../models/log.models.js';
1
+ import chalk from "chalk";
2
+ import { match } from "ts-pattern";
3
+ import type { MapiAction, MapiType } from "../models/core.models.js";
4
+ import type { Logger, LogMessage, LogSpinnerData } from "../models/log.models.js";
5
5
 
6
6
  export async function runMapiRequestAsync<TResult>(data: {
7
- readonly logger: Logger;
8
- readonly logSpinner?: LogSpinnerData;
9
- readonly action: MapiAction;
10
- readonly type: MapiType;
11
- readonly func: () => Promise<TResult>;
12
- readonly itemName?: string;
7
+ readonly logger: Logger;
8
+ readonly logSpinner?: LogSpinnerData;
9
+ readonly action: MapiAction;
10
+ readonly type: MapiType;
11
+ readonly func: () => Promise<TResult>;
12
+ readonly itemName?: string;
13
13
  }): Promise<TResult> {
14
- const logData: LogMessage = match(data)
15
- .returnType<LogMessage>()
16
- .when(
17
- (data) => data.action === 'list',
18
- (data) => {
19
- return {
20
- message: `Fetching objects of type '${chalk.yellow(data.type)}'`,
21
- type: data.action
22
- };
23
- }
24
- )
25
- .when(
26
- (data) => data.itemName,
27
- (data) => {
28
- return {
29
- message: `${data.type} -> ${data.itemName}`,
30
- type: data.action
31
- };
32
- }
33
- )
34
- .otherwise(() => {
35
- return {
36
- message: `${data.type}`,
37
- type: data.action
38
- };
39
- });
14
+ const logData: LogMessage = match(data)
15
+ .returnType<LogMessage>()
16
+ .when(
17
+ (data) => data.action === "list",
18
+ (data) => {
19
+ return {
20
+ message: `Fetching objects of type '${chalk.yellow(data.type)}'`,
21
+ type: data.action,
22
+ };
23
+ },
24
+ )
25
+ .when(
26
+ (data) => data.itemName,
27
+ (data) => {
28
+ return {
29
+ message: `${data.type} -> ${data.itemName}`,
30
+ type: data.action,
31
+ };
32
+ },
33
+ )
34
+ .otherwise(() => {
35
+ return {
36
+ message: `${data.type}`,
37
+ type: data.action,
38
+ };
39
+ });
40
40
 
41
- logSpinnerOrDefault({
42
- logSpinner: data.logSpinner,
43
- logger: data.logger,
44
- logData: logData
45
- });
41
+ logSpinnerOrDefault({
42
+ logSpinner: data.logSpinner,
43
+ logger: data.logger,
44
+ logData: logData,
45
+ });
46
46
 
47
- return await data.func();
47
+ return await data.func();
48
48
  }
49
49
 
50
50
  function logSpinnerOrDefault(data: {
51
- readonly logSpinner: LogSpinnerData | undefined;
52
- readonly logData: LogMessage;
53
- readonly logger: Logger;
51
+ readonly logSpinner: LogSpinnerData | undefined;
52
+ readonly logData: LogMessage;
53
+ readonly logger: Logger;
54
54
  }): void {
55
- if (data.logSpinner) {
56
- data.logSpinner(data.logData);
57
- } else {
58
- data.logger.log(data.logData);
59
- }
55
+ if (data.logSpinner) {
56
+ data.logSpinner(data.logData);
57
+ } else {
58
+ data.logger.log(data.logData);
59
+ }
60
60
  }
@@ -0,0 +1,30 @@
1
+ type Success<TData> = {
2
+ readonly success: true;
3
+ readonly data: TData;
4
+ readonly error?: never;
5
+ };
6
+
7
+ type Failure<TError = unknown> = {
8
+ readonly success: false;
9
+ readonly data?: never;
10
+ readonly error: TError;
11
+ };
12
+
13
+ export type Result<TData, TError = unknown> = Success<TData> | Failure<TError>;
14
+
15
+ export async function tryCatchAsync<T>(fn: () => Promise<T>): Promise<Result<T>> {
16
+ try {
17
+ const data = await fn();
18
+ return { success: true, data };
19
+ } catch (error) {
20
+ return { success: false, error };
21
+ }
22
+ }
23
+
24
+ export function tryCatch<T>(fn: () => T): Result<T> {
25
+ try {
26
+ return { success: true, data: fn() };
27
+ } catch (error) {
28
+ return { success: false, error };
29
+ }
30
+ }