@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.
- package/README.md +19 -17
- package/dist/core/config.js +3 -3
- package/dist/core/config.js.map +1 -1
- package/dist/core/helpers/workflow-helper.d.ts +1 -1
- package/dist/core/helpers/workflow-helper.js +28 -26
- package/dist/core/helpers/workflow-helper.js.map +1 -1
- package/dist/core/logs/loggers.d.ts +1 -1
- package/dist/core/logs/loggers.js +15 -15
- package/dist/core/logs/loggers.js.map +1 -1
- package/dist/core/models/core.models.d.ts +27 -22
- package/dist/core/models/error.models.d.ts +14 -0
- package/dist/core/models/error.models.js +25 -0
- package/dist/core/models/error.models.js.map +1 -0
- package/dist/core/models/log.models.d.ts +2 -2
- package/dist/core/models/migration.models.d.ts +14 -14
- package/dist/core/models/migration.schema.d.ts +9 -9
- package/dist/core/models/migration.schema.js +28 -28
- package/dist/core/models/migration.schema.js.map +1 -1
- package/dist/core/utils/array.utils.d.ts +1 -1
- package/dist/core/utils/array.utils.js +4 -3
- package/dist/core/utils/array.utils.js.map +1 -1
- package/dist/core/utils/binary-data.utils.d.ts +1 -1
- package/dist/core/utils/binary-data.utils.js +6 -6
- package/dist/core/utils/binary-data.utils.js.map +1 -1
- package/dist/core/utils/confirm.utils.d.ts +1 -1
- package/dist/core/utils/confirm.utils.js +21 -20
- package/dist/core/utils/confirm.utils.js.map +1 -1
- package/dist/core/utils/error.utils.d.ts +1 -1
- package/dist/core/utils/error.utils.js +16 -14
- package/dist/core/utils/error.utils.js.map +1 -1
- package/dist/core/utils/external-id.utils.js +1 -1
- package/dist/core/utils/external-id.utils.js.map +1 -1
- package/dist/core/utils/global.utils.d.ts +3 -3
- package/dist/core/utils/global.utils.js +20 -18
- package/dist/core/utils/global.utils.js.map +1 -1
- package/dist/core/utils/http.utils.d.ts +2 -2
- package/dist/core/utils/http.utils.js +4 -4
- package/dist/core/utils/http.utils.js.map +1 -1
- package/dist/core/utils/management-client-utils.d.ts +4 -4
- package/dist/core/utils/management-client-utils.js +34 -34
- package/dist/core/utils/management-client-utils.js.map +1 -1
- package/dist/core/utils/processing-utils.d.ts +4 -4
- package/dist/core/utils/processing-utils.js +13 -13
- package/dist/core/utils/processing-utils.js.map +1 -1
- package/dist/core/utils/run.utils.d.ts +2 -2
- package/dist/core/utils/run.utils.js +7 -7
- package/dist/core/utils/run.utils.js.map +1 -1
- package/dist/export/context/export-context-fetcher.d.ts +1 -1
- package/dist/export/context/export-context-fetcher.js +92 -62
- package/dist/export/context/export-context-fetcher.js.map +1 -1
- package/dist/export/export-manager.d.ts +2 -2
- package/dist/export/export-manager.js +46 -37
- package/dist/export/export-manager.js.map +1 -1
- package/dist/export/export.models.d.ts +21 -2
- package/dist/export/utils/export.utils.d.ts +1 -1
- package/dist/export/utils/export.utils.js +3 -2
- package/dist/export/utils/export.utils.js.map +1 -1
- package/dist/file/file-manager.d.ts +2 -2
- package/dist/file/file-manager.js +7 -7
- package/dist/file/file-manager.js.map +1 -1
- package/dist/import/comparers/asset-comparer.d.ts +2 -2
- package/dist/import/comparers/asset-comparer.js +12 -11
- package/dist/import/comparers/asset-comparer.js.map +1 -1
- package/dist/import/context/import-context-fetcher.d.ts +1 -1
- package/dist/import/context/import-context-fetcher.js +77 -73
- package/dist/import/context/import-context-fetcher.js.map +1 -1
- package/dist/import/import-manager.d.ts +1 -1
- package/dist/import/import-manager.js +59 -56
- package/dist/import/import-manager.js.map +1 -1
- package/dist/import/import.models.d.ts +6 -2
- package/dist/import/importers/assets-importer.d.ts +3 -3
- package/dist/import/importers/assets-importer.js +46 -43
- package/dist/import/importers/assets-importer.js.map +1 -1
- package/dist/import/importers/content-items-importer.d.ts +3 -3
- package/dist/import/importers/content-items-importer.js +28 -25
- package/dist/import/importers/content-items-importer.js.map +1 -1
- package/dist/import/importers/language-variant-importer.d.ts +3 -3
- package/dist/import/importers/language-variant-importer.js +45 -45
- package/dist/import/importers/language-variant-importer.js.map +1 -1
- package/dist/import/importers/workflow-importer.d.ts +3 -2
- package/dist/import/importers/workflow-importer.js +58 -54
- package/dist/import/importers/workflow-importer.js.map +1 -1
- package/dist/import/utils/import.utils.d.ts +1 -1
- package/dist/import/utils/import.utils.js +3 -2
- package/dist/import/utils/import.utils.js.map +1 -1
- package/dist/index.d.ts +11 -7
- package/dist/index.js +10 -8
- package/dist/index.js.map +1 -1
- package/dist/metadata.js +3 -3
- package/dist/metadata.js.map +1 -1
- package/dist/node/cli/actions/export-action.d.ts +1 -1
- package/dist/node/cli/actions/export-action.js +28 -23
- package/dist/node/cli/actions/export-action.js.map +1 -1
- package/dist/node/cli/actions/import-action.d.ts +1 -1
- package/dist/node/cli/actions/import-action.js +15 -12
- package/dist/node/cli/actions/import-action.js.map +1 -1
- package/dist/node/cli/actions/migrate-action.d.ts +1 -1
- package/dist/node/cli/actions/migrate-action.js +25 -22
- package/dist/node/cli/actions/migrate-action.js.map +1 -1
- package/dist/node/cli/app.js +13 -12
- package/dist/node/cli/app.js.map +1 -1
- package/dist/node/cli/args/args-fetcher.d.ts +1 -1
- package/dist/node/cli/args/args-fetcher.js +14 -13
- package/dist/node/cli/args/args-fetcher.js.map +1 -1
- package/dist/node/cli/args/args-setter.d.ts +1 -1
- package/dist/node/cli/args/args-setter.js +8 -6
- package/dist/node/cli/args/args-setter.js.map +1 -1
- package/dist/node/cli/cli.models.d.ts +2 -2
- package/dist/node/cli/commands.js +68 -56
- package/dist/node/cli/commands.js.map +1 -1
- package/dist/toolkit/elements-builder.d.ts +1 -1
- package/dist/toolkit/elements-builder.js +12 -12
- package/dist/toolkit/elements-builder.js.map +1 -1
- package/dist/toolkit/export.d.ts +2 -2
- package/dist/toolkit/export.js +8 -8
- package/dist/toolkit/export.js.map +1 -1
- package/dist/toolkit/file.d.ts +2 -1
- package/dist/toolkit/file.js +18 -16
- package/dist/toolkit/file.js.map +1 -1
- package/dist/toolkit/import.d.ts +1 -1
- package/dist/toolkit/import.js +12 -12
- package/dist/toolkit/import.js.map +1 -1
- package/dist/toolkit/migrate.d.ts +13 -4
- package/dist/toolkit/migrate.js +15 -13
- package/dist/toolkit/migrate.js.map +1 -1
- package/dist/translation/extraction/items-extraction.processor.d.ts +5 -4
- package/dist/translation/extraction/items-extraction.processor.js +73 -35
- package/dist/translation/extraction/items-extraction.processor.js.map +1 -1
- package/dist/translation/helpers/export-placeholder.utils.d.ts +11 -0
- package/dist/translation/helpers/export-placeholder.utils.js +11 -0
- package/dist/translation/helpers/export-placeholder.utils.js.map +1 -0
- package/dist/translation/helpers/rich-text.processor.d.ts +6 -6
- package/dist/translation/helpers/rich-text.processor.js +38 -38
- package/dist/translation/helpers/rich-text.processor.js.map +1 -1
- package/dist/translation/transforms/export-transforms.d.ts +2 -2
- package/dist/translation/transforms/export-transforms.js +93 -67
- package/dist/translation/transforms/export-transforms.js.map +1 -1
- package/dist/translation/transforms/import-transforms.d.ts +2 -2
- package/dist/translation/transforms/import-transforms.js +38 -40
- package/dist/translation/transforms/import-transforms.js.map +1 -1
- package/dist/zip/zip-manager.d.ts +4 -3
- package/dist/zip/zip-manager.js +9 -9
- package/dist/zip/zip-manager.js.map +1 -1
- package/dist/zip/zip-packager.d.ts +2 -2
- package/dist/zip/zip-packager.js +19 -17
- package/dist/zip/zip-packager.js.map +1 -1
- package/dist/zip/zip-transformer.d.ts +3 -2
- package/dist/zip/zip-transformer.js +16 -15
- package/dist/zip/zip-transformer.js.map +1 -1
- package/dist/zip/zip.models.d.ts +2 -2
- package/lib/core/config.ts +6 -6
- package/lib/core/helpers/workflow-helper.ts +190 -185
- package/lib/core/logs/loggers.ts +52 -52
- package/lib/core/models/core.models.ts +128 -119
- package/lib/core/models/error.models.ts +41 -0
- package/lib/core/models/log.models.ts +20 -20
- package/lib/core/models/migration.models.ts +54 -54
- package/lib/core/models/migration.schema.ts +108 -108
- package/lib/core/utils/array.utils.ts +43 -42
- package/lib/core/utils/binary-data.utils.ts +16 -16
- package/lib/core/utils/confirm.utils.ts +106 -105
- package/lib/core/utils/error.utils.ts +69 -72
- package/lib/core/utils/external-id.utils.ts +4 -4
- package/lib/core/utils/global.utils.ts +81 -75
- package/lib/core/utils/http.utils.ts +23 -23
- package/lib/core/utils/management-client-utils.ts +186 -186
- package/lib/core/utils/processing-utils.ts +82 -82
- package/lib/core/utils/run.utils.ts +50 -50
- package/lib/export/context/export-context-fetcher.ts +472 -447
- package/lib/export/export-manager.ts +233 -232
- package/lib/export/export.models.ts +71 -56
- package/lib/export/utils/export.utils.ts +9 -7
- package/lib/file/file-manager.ts +28 -28
- package/lib/import/comparers/asset-comparer.ts +107 -106
- package/lib/import/context/import-context-fetcher.ts +462 -462
- package/lib/import/import-manager.ts +243 -240
- package/lib/import/import.models.ts +69 -67
- package/lib/import/importers/assets-importer.ts +240 -236
- package/lib/import/importers/content-items-importer.ts +126 -122
- package/lib/import/importers/language-variant-importer.ts +324 -328
- package/lib/import/importers/workflow-importer.ts +372 -367
- package/lib/import/utils/import.utils.ts +9 -7
- package/lib/index.ts +12 -8
- package/lib/metadata.ts +3 -4
- package/lib/node/cli/actions/export-action.ts +43 -38
- package/lib/node/cli/actions/import-action.ts +32 -29
- package/lib/node/cli/actions/migrate-action.ts +49 -46
- package/lib/node/cli/app.ts +21 -21
- package/lib/node/cli/args/args-fetcher.ts +55 -54
- package/lib/node/cli/args/args-setter.ts +34 -32
- package/lib/node/cli/cli.models.ts +17 -17
- package/lib/node/cli/commands.ts +165 -153
- package/lib/toolkit/elements-builder.ts +69 -69
- package/lib/toolkit/export.ts +21 -21
- package/lib/toolkit/file.ts +59 -53
- package/lib/toolkit/import.ts +32 -32
- package/lib/toolkit/migrate.ts +60 -49
- package/lib/translation/extraction/items-extraction.processor.ts +203 -173
- package/lib/translation/helpers/export-placeholder.utils.ts +10 -0
- package/lib/translation/helpers/rich-text.processor.ts +311 -311
- package/lib/translation/transforms/export-transforms.ts +313 -279
- package/lib/translation/transforms/import-transforms.ts +188 -191
- package/lib/zip/zip-manager.ts +28 -27
- package/lib/zip/zip-packager.ts +75 -73
- package/lib/zip/zip-transformer.ts +112 -107
- package/lib/zip/zip.models.ts +7 -7
- package/package.json +91 -84
- package/dist/core/index.d.ts +0 -16
- package/dist/core/index.js +0 -17
- package/dist/core/index.js.map +0 -1
- package/dist/export/index.d.ts +0 -2
- package/dist/export/index.js +0 -3
- package/dist/export/index.js.map +0 -1
- package/dist/file/index.d.ts +0 -1
- package/dist/file/index.js +0 -2
- package/dist/file/index.js.map +0 -1
- package/dist/import/index.d.ts +0 -2
- package/dist/import/index.js +0 -3
- package/dist/import/index.js.map +0 -1
- package/dist/toolkit/index.d.ts +0 -5
- package/dist/toolkit/index.js +0 -6
- package/dist/toolkit/index.js.map +0 -1
- package/dist/translation/index.d.ts +0 -4
- package/dist/translation/index.js +0 -5
- package/dist/translation/index.js.map +0 -1
- package/dist/zip/index.d.ts +0 -4
- package/dist/zip/index.js +0 -5
- package/dist/zip/index.js.map +0 -1
- package/lib/core/index.ts +0 -18
- package/lib/export/index.ts +0 -2
- package/lib/file/index.ts +0 -1
- package/lib/import/index.ts +0 -2
- package/lib/toolkit/index.ts +0 -5
- package/lib/translation/index.ts +0 -4
- package/lib/zip/index.ts +0 -4
|
@@ -1,155 +1,155 @@
|
|
|
1
|
-
import { Buffer as BufferProxy } from
|
|
2
|
-
import { z } from
|
|
1
|
+
import { Buffer as BufferProxy } from "buffer";
|
|
2
|
+
import { z } from "zod";
|
|
3
3
|
|
|
4
4
|
interface Elements {
|
|
5
|
-
|
|
5
|
+
readonly [key: string]: Element;
|
|
6
6
|
}
|
|
7
7
|
|
|
8
|
-
type UrlSlugMode =
|
|
8
|
+
type UrlSlugMode = "autogenerated" | "custom";
|
|
9
9
|
type Reference = { readonly codename: string };
|
|
10
10
|
|
|
11
11
|
type Component = {
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
12
|
+
readonly system: {
|
|
13
|
+
readonly id: string;
|
|
14
|
+
readonly type: Reference;
|
|
15
|
+
};
|
|
16
|
+
readonly elements: Elements;
|
|
17
17
|
};
|
|
18
18
|
|
|
19
19
|
type ElementValue = string | undefined | number | Reference[];
|
|
20
20
|
|
|
21
21
|
type Element = {
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
22
|
+
readonly type: ElementType;
|
|
23
|
+
readonly value?: ElementValue;
|
|
24
|
+
readonly display_timezone?: string;
|
|
25
|
+
readonly components?: readonly Component[];
|
|
26
|
+
readonly mode?: UrlSlugMode;
|
|
27
27
|
};
|
|
28
28
|
|
|
29
29
|
type ElementType =
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
export const MigrationUrlSlugModeSchema = z.enum([
|
|
30
|
+
| "text"
|
|
31
|
+
| "rich_text"
|
|
32
|
+
| "number"
|
|
33
|
+
| "multiple_choice"
|
|
34
|
+
| "date_time"
|
|
35
|
+
| "asset"
|
|
36
|
+
| "modular_content"
|
|
37
|
+
| "taxonomy"
|
|
38
|
+
| "url_slug"
|
|
39
|
+
| "custom"
|
|
40
|
+
| "subpages";
|
|
41
|
+
|
|
42
|
+
export const MigrationUrlSlugModeSchema = z.enum(["autogenerated", "custom"]).readonly();
|
|
43
43
|
export const MigrationElementTypeSchema = z
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
44
|
+
.enum([
|
|
45
|
+
"text",
|
|
46
|
+
"rich_text",
|
|
47
|
+
"number",
|
|
48
|
+
"multiple_choice",
|
|
49
|
+
"date_time",
|
|
50
|
+
"asset",
|
|
51
|
+
"modular_content",
|
|
52
|
+
"taxonomy",
|
|
53
|
+
"url_slug",
|
|
54
|
+
"custom",
|
|
55
|
+
"subpages",
|
|
56
|
+
])
|
|
57
|
+
.readonly();
|
|
58
58
|
|
|
59
59
|
export const MigrationReferenceSchema = z
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
60
|
+
.strictObject({
|
|
61
|
+
codename: z.string().readonly(),
|
|
62
|
+
})
|
|
63
|
+
.readonly();
|
|
64
64
|
|
|
65
65
|
export const ScheduleSchema = z
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
66
|
+
.strictObject({
|
|
67
|
+
publish_time: z.string().datetime().optional().readonly(),
|
|
68
|
+
publish_display_timezone: z.string().optional().readonly(),
|
|
69
|
+
unpublish_time: z.string().datetime().optional().readonly(),
|
|
70
|
+
unpublish_display_timezone: z.string().optional().readonly(),
|
|
71
|
+
})
|
|
72
|
+
.readonly();
|
|
73
73
|
|
|
74
74
|
/**
|
|
75
75
|
* ZodType is needed to be specified here due to the use of 'lazy' & circular dependency between types
|
|
76
76
|
* Otherwise TS has no way of statically inferring the type
|
|
77
77
|
*/
|
|
78
78
|
export const MigrationElementsSchema: z.ZodReadonly<z.ZodType<Elements>> = z
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
79
|
+
.record(
|
|
80
|
+
z.string(),
|
|
81
|
+
z.lazy(() => MigrationElementSchema),
|
|
82
|
+
)
|
|
83
|
+
.readonly();
|
|
84
84
|
|
|
85
85
|
export const MigrationComponentSchema = z
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
86
|
+
.strictObject({
|
|
87
|
+
system: z.strictObject({
|
|
88
|
+
id: z.string(),
|
|
89
|
+
type: MigrationReferenceSchema,
|
|
90
|
+
}),
|
|
91
|
+
elements: MigrationElementsSchema,
|
|
92
|
+
})
|
|
93
|
+
.readonly();
|
|
94
94
|
|
|
95
95
|
export const MigrationElementValueSchema = z.union([z.string(), z.undefined(), z.number(), z.array(MigrationReferenceSchema)]);
|
|
96
96
|
|
|
97
97
|
export const MigrationElementSchema = z
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
98
|
+
.strictObject({
|
|
99
|
+
type: MigrationElementTypeSchema,
|
|
100
|
+
value: MigrationElementValueSchema.optional(),
|
|
101
|
+
display_timezone: z.string().optional(),
|
|
102
|
+
components: z.array(MigrationComponentSchema).readonly().optional(),
|
|
103
|
+
mode: MigrationUrlSlugModeSchema.optional(),
|
|
104
|
+
})
|
|
105
|
+
.readonly();
|
|
106
106
|
|
|
107
107
|
export const MigrationItemVersionSchema = z
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
108
|
+
.strictObject({
|
|
109
|
+
workflow_step: MigrationReferenceSchema,
|
|
110
|
+
elements: MigrationElementsSchema,
|
|
111
|
+
schedule: ScheduleSchema.optional(),
|
|
112
|
+
})
|
|
113
|
+
.readonly();
|
|
114
114
|
|
|
115
115
|
export const MigrationItemSystemSchema = z.strictObject({
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
116
|
+
codename: z.string(),
|
|
117
|
+
name: z.string(),
|
|
118
|
+
language: MigrationReferenceSchema,
|
|
119
|
+
type: MigrationReferenceSchema,
|
|
120
|
+
collection: MigrationReferenceSchema,
|
|
121
|
+
workflow: MigrationReferenceSchema,
|
|
122
122
|
});
|
|
123
123
|
|
|
124
124
|
export const MigrationItemSchema = z
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
125
|
+
.strictObject({
|
|
126
|
+
system: MigrationItemSystemSchema,
|
|
127
|
+
versions: z.array(MigrationItemVersionSchema).readonly(),
|
|
128
|
+
})
|
|
129
|
+
.readonly();
|
|
130
130
|
|
|
131
131
|
export const MigrationAssetDescriptionSchema = z
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
132
|
+
.strictObject({
|
|
133
|
+
language: MigrationReferenceSchema,
|
|
134
|
+
description: z.optional(z.string()),
|
|
135
|
+
})
|
|
136
|
+
.readonly();
|
|
137
137
|
|
|
138
138
|
const BaseMigrationAssetSchema = z.strictObject({
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
139
|
+
codename: z.string(),
|
|
140
|
+
filename: z.string(),
|
|
141
|
+
title: z.string().optional(),
|
|
142
|
+
collection: z.optional(MigrationReferenceSchema),
|
|
143
|
+
descriptions: z.optional(z.array(MigrationAssetDescriptionSchema)).readonly(),
|
|
144
|
+
folder: z.optional(MigrationReferenceSchema),
|
|
145
145
|
});
|
|
146
146
|
|
|
147
147
|
export const MigrationAssetSchema = BaseMigrationAssetSchema.extend({
|
|
148
|
-
|
|
148
|
+
binary_data: z.union([z.instanceof(BufferProxy), z.instanceof(Blob)]),
|
|
149
149
|
}).readonly();
|
|
150
150
|
|
|
151
151
|
export const ZipMigrationAssetSchema = BaseMigrationAssetSchema.extend({
|
|
152
|
-
|
|
152
|
+
_zipFilename: z.string(),
|
|
153
153
|
}).readonly();
|
|
154
154
|
|
|
155
155
|
export const MigrationAssetsSchema = z.array(MigrationAssetSchema).readonly();
|
|
@@ -157,8 +157,8 @@ export const ZipMigrationAssetsSchema = z.array(ZipMigrationAssetSchema).readonl
|
|
|
157
157
|
export const MigrationItemsSchema = z.array(MigrationItemSchema).readonly();
|
|
158
158
|
|
|
159
159
|
export const MigrationDataSchema = z
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
160
|
+
.strictObject({
|
|
161
|
+
items: MigrationItemsSchema,
|
|
162
|
+
assets: MigrationAssetsSchema,
|
|
163
|
+
})
|
|
164
|
+
.readonly();
|
|
@@ -1,42 +1,43 @@
|
|
|
1
|
-
import
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
export function findRequired<T>(array: readonly T[], predicate: (item: T, index: number) => boolean, errorMessage:
|
|
16
|
-
export function findRequired<T>(
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
1
|
+
import { MigrationToolkitError } from "../models/error.models.js";
|
|
2
|
+
import type { MigrationElementValue, MigrationReference } from "../models/migration.models.js";
|
|
3
|
+
import { isArray, isString } from "./global.utils.js";
|
|
4
|
+
|
|
5
|
+
export function parseAsMigrationReferencesArray(value: MigrationElementValue): readonly MigrationReference[] {
|
|
6
|
+
if (!value) {
|
|
7
|
+
return [];
|
|
8
|
+
}
|
|
9
|
+
if (isArray(value)) {
|
|
10
|
+
return value;
|
|
11
|
+
}
|
|
12
|
+
throw new MigrationToolkitError("invalidValue", `Value is not an array`);
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
export function findRequired<T>(array: readonly T[], predicate: (item: T, index: number) => boolean, errorMessage: string): T;
|
|
16
|
+
export function findRequired<T>(array: readonly T[], predicate: (item: T, index: number) => boolean, errorMessage: () => never): T;
|
|
17
|
+
export function findRequired<T>(
|
|
18
|
+
array: readonly T[],
|
|
19
|
+
predicate: (item: T, index: number) => boolean,
|
|
20
|
+
errorMessage: string | (() => never),
|
|
21
|
+
): T {
|
|
22
|
+
const item = array.find(predicate);
|
|
23
|
+
|
|
24
|
+
if (item) {
|
|
25
|
+
return item;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
if (isString(errorMessage)) {
|
|
29
|
+
throw new MigrationToolkitError("findRequiredError", errorMessage);
|
|
30
|
+
}
|
|
31
|
+
return errorMessage();
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export async function mapAsync<Input, Result>(
|
|
35
|
+
array: readonly Input[],
|
|
36
|
+
callbackAsync: (item: Readonly<Input>, index: number, array: readonly Input[]) => Promise<Readonly<Result>>,
|
|
37
|
+
): Promise<readonly Result[]> {
|
|
38
|
+
const results: Result[] = [];
|
|
39
|
+
for (let i = 0; i < array.length; i++) {
|
|
40
|
+
results.push(await callbackAsync(array[i], i, array));
|
|
41
|
+
}
|
|
42
|
+
return results;
|
|
43
|
+
}
|
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import type { FileBinaryData } from
|
|
2
|
-
import { defaultHttpService, defaultRetryStrategy } from
|
|
1
|
+
import type { FileBinaryData } from "../../zip/zip.models.js";
|
|
2
|
+
import { defaultHttpService, defaultRetryStrategy } from "./http.utils.js";
|
|
3
3
|
|
|
4
4
|
export async function getBinaryDataFromUrlAsync(url: string): Promise<{ readonly data: FileBinaryData; readonly contentLength: number }> {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
// temp fix for Kontent.ai Repository not validating url
|
|
6
|
+
const fixedUrl = url.replace("#", "%23");
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
const response = await defaultHttpService.getAsync<FileBinaryData>(
|
|
9
|
+
{
|
|
10
|
+
url: fixedUrl,
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
responseType: "arraybuffer",
|
|
14
|
+
retryStrategy: defaultRetryStrategy,
|
|
15
|
+
},
|
|
16
|
+
);
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
const contentLength = +(response.headers.find((m) => m.header.toLowerCase() === "content-length")?.value ?? 0);
|
|
19
19
|
|
|
20
|
-
|
|
20
|
+
return { data: response.data, contentLength: contentLength };
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
export function geSizeInBytes(data: FileBinaryData): number {
|
|
24
|
-
|
|
24
|
+
return data instanceof Blob ? data.size : data.byteLength;
|
|
25
25
|
}
|
|
@@ -1,133 +1,134 @@
|
|
|
1
|
-
import chalk from
|
|
2
|
-
import
|
|
3
|
-
import {
|
|
1
|
+
import chalk from "chalk";
|
|
2
|
+
import { MigrationToolkitError } from "../models/error.models.js";
|
|
3
|
+
import type { Logger } from "../models/log.models.js";
|
|
4
|
+
import { getMigrationManagementClient, managementClientUtils } from "./management-client-utils.js";
|
|
4
5
|
|
|
5
6
|
export async function confirmExportAsync(data: {
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
readonly force: boolean;
|
|
8
|
+
readonly environmentId: string;
|
|
9
|
+
readonly apiKey: string;
|
|
10
|
+
readonly logger: Logger;
|
|
11
|
+
readonly dataToExport: {
|
|
12
|
+
readonly itemsCount: number;
|
|
13
|
+
};
|
|
13
14
|
}): Promise<void> {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
15
|
+
const environment = await managementClientUtils(
|
|
16
|
+
getMigrationManagementClient({
|
|
17
|
+
environmentId: data.environmentId,
|
|
18
|
+
apiKey: data.apiKey,
|
|
19
|
+
}),
|
|
20
|
+
data.logger,
|
|
21
|
+
).getEnvironmentAsync();
|
|
21
22
|
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
23
|
+
const text: string = `Are you sure to export '${chalk.cyan(data.dataToExport.itemsCount)}' content ${getItemsPluralText(
|
|
24
|
+
data.dataToExport.itemsCount,
|
|
25
|
+
)} from ${chalk.yellow(environment.name)} (${chalk.magenta(environment.environment)})?`;
|
|
25
26
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
27
|
+
await confirmAsync({
|
|
28
|
+
force: data.force,
|
|
29
|
+
logger: data.logger,
|
|
30
|
+
action: "Export",
|
|
31
|
+
message: text,
|
|
32
|
+
});
|
|
32
33
|
}
|
|
33
34
|
|
|
34
35
|
export async function confirmMigrateAsync(data: {
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
36
|
+
readonly force: boolean;
|
|
37
|
+
readonly sourceEnvironment: {
|
|
38
|
+
readonly environmentId: string;
|
|
39
|
+
readonly apiKey: string;
|
|
40
|
+
};
|
|
41
|
+
readonly targetEnvironment: {
|
|
42
|
+
readonly environmentId: string;
|
|
43
|
+
readonly apiKey: string;
|
|
44
|
+
};
|
|
45
|
+
readonly logger: Logger;
|
|
46
|
+
readonly dataToMigrate: {
|
|
47
|
+
readonly itemsCount: number;
|
|
48
|
+
};
|
|
48
49
|
}): Promise<void> {
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
50
|
+
const sourceEnvironment = await managementClientUtils(
|
|
51
|
+
getMigrationManagementClient({
|
|
52
|
+
environmentId: data.sourceEnvironment.environmentId,
|
|
53
|
+
apiKey: data.sourceEnvironment.apiKey,
|
|
54
|
+
}),
|
|
55
|
+
data.logger,
|
|
56
|
+
).getEnvironmentAsync();
|
|
57
|
+
const targetEnvironment = await managementClientUtils(
|
|
58
|
+
getMigrationManagementClient({
|
|
59
|
+
environmentId: data.targetEnvironment.environmentId,
|
|
60
|
+
apiKey: data.targetEnvironment.apiKey,
|
|
61
|
+
}),
|
|
62
|
+
data.logger,
|
|
63
|
+
).getEnvironmentAsync();
|
|
63
64
|
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
65
|
+
const text: string = `Are you sure to migrate '${chalk.cyan(data.dataToMigrate.itemsCount)}' ${getItemsPluralText(
|
|
66
|
+
data.dataToMigrate.itemsCount,
|
|
67
|
+
)} from ${chalk.yellow(sourceEnvironment.name)} (${chalk.magenta(sourceEnvironment.environment)}) to environment ${chalk.yellow(
|
|
68
|
+
targetEnvironment.name,
|
|
69
|
+
)} (${chalk.magenta(targetEnvironment.environment)}) ?`;
|
|
69
70
|
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
71
|
+
await confirmAsync({
|
|
72
|
+
force: data.force,
|
|
73
|
+
logger: data.logger,
|
|
74
|
+
action: "Migrate",
|
|
75
|
+
message: text,
|
|
76
|
+
});
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
export async function confirmImportAsync(data: {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
80
|
+
readonly force: boolean;
|
|
81
|
+
readonly environmentId: string;
|
|
82
|
+
readonly apiKey: string;
|
|
83
|
+
readonly logger: Logger;
|
|
83
84
|
}): Promise<void> {
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
85
|
+
const environment = await managementClientUtils(
|
|
86
|
+
getMigrationManagementClient({
|
|
87
|
+
environmentId: data.environmentId,
|
|
88
|
+
apiKey: data.apiKey,
|
|
89
|
+
}),
|
|
90
|
+
data.logger,
|
|
91
|
+
).getEnvironmentAsync();
|
|
91
92
|
|
|
92
|
-
|
|
93
|
+
const text: string = `Are you sure to import data into ${chalk.yellow(environment.name)} (${chalk.magenta(environment.environment)})?`;
|
|
93
94
|
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
95
|
+
await confirmAsync({
|
|
96
|
+
force: data.force,
|
|
97
|
+
logger: data.logger,
|
|
98
|
+
action: "Import",
|
|
99
|
+
message: text,
|
|
100
|
+
});
|
|
100
101
|
}
|
|
101
102
|
|
|
102
103
|
async function confirmAsync(data: {
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
104
|
+
readonly action: string;
|
|
105
|
+
readonly message: string;
|
|
106
|
+
readonly force: boolean;
|
|
107
|
+
readonly logger: Logger;
|
|
107
108
|
}): Promise<void> {
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
109
|
+
// Prompts is imported dynamically because it's a node.js only module and would not work if user
|
|
110
|
+
// tried using this library in a browser
|
|
111
|
+
const prompts = await import("prompts");
|
|
111
112
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
113
|
+
if (data.force) {
|
|
114
|
+
data.logger.log({
|
|
115
|
+
type: "info",
|
|
116
|
+
message: `Skipping confirmation`,
|
|
117
|
+
});
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
119
120
|
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
121
|
+
const confirmed = await prompts.default({
|
|
122
|
+
type: "confirm",
|
|
123
|
+
name: "confirm",
|
|
124
|
+
message: `${chalk.cyan(data.action)}: ${data.message}`,
|
|
125
|
+
});
|
|
125
126
|
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
127
|
+
if (!confirmed.confirm) {
|
|
128
|
+
throw new MigrationToolkitError("confirmationRefused", `Confirmation refused.`);
|
|
129
|
+
}
|
|
129
130
|
}
|
|
130
131
|
|
|
131
132
|
function getItemsPluralText(count: number): string {
|
|
132
|
-
|
|
133
|
+
return count === 1 ? "item" : "items";
|
|
133
134
|
}
|