@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,324 +1,324 @@
1
- import type { AssetStateInTargetEnvironmentByCodename, ItemStateInTargetEnvironmentByCodename } from '../../core/index.js';
1
+ import type { AssetStateInTargetEnvironmentByCodename, ItemStateInTargetEnvironmentByCodename } from "../../core/models/core.models.js";
2
2
 
3
3
  export type CodenameReplaceFunc<T> = (codename: string) => T;
4
- export type IdReplaceFunc = (id: string) => { codename: string };
4
+ export type IdReplaceFunc = (id: string) => { readonly codename: string };
5
5
 
6
- interface ProcessCodenamesResult {
7
- readonly codenames: ReadonlySet<string>;
8
- readonly html: string;
9
- }
6
+ type ProcessCodenamesResult = {
7
+ readonly codenames: ReadonlySet<string>;
8
+ readonly html: string;
9
+ };
10
10
 
11
- interface ProcessIdsResult {
12
- readonly ids: ReadonlySet<string>;
13
- readonly html: string;
14
- }
11
+ type ProcessIdsResult = {
12
+ readonly ids: ReadonlySet<string>;
13
+ readonly html: string;
14
+ };
15
15
 
16
16
  const attributes = {
17
- codenames: {
18
- itemCodenameAttribute: 'data-codename',
19
- linkItemCodenameAttribute: 'data-item-codename',
20
- assetCodenameAttribute: 'data-asset-codename'
21
- },
22
- ids: {
23
- assetIdAttributeName: 'data-asset-id',
24
- itemIdAttributeName: 'data-item-id',
25
- itemExternalIdAttributeName: 'data-item-external-id',
26
- idAttributeName: 'data-id',
27
- externalIdAttributeName: 'data-external-id',
28
- externalAssetIdAttributeName: 'data-asset-external-id'
29
- },
30
- componentIdentifierAttribute: 'data-type="component"'
17
+ codenames: {
18
+ itemCodenameAttribute: "data-codename",
19
+ linkItemCodenameAttribute: "data-item-codename",
20
+ assetCodenameAttribute: "data-asset-codename",
21
+ },
22
+ ids: {
23
+ assetIdAttributeName: "data-asset-id",
24
+ itemIdAttributeName: "data-item-id",
25
+ itemExternalIdAttributeName: "data-item-external-id",
26
+ idAttributeName: "data-id",
27
+ externalIdAttributeName: "data-external-id",
28
+ externalAssetIdAttributeName: "data-asset-external-id",
29
+ },
30
+ componentIdentifierAttribute: 'data-type="component"',
31
31
  } as const;
32
32
 
33
33
  const rteRegexes = {
34
- elements: {
35
- objectTagRegex: new RegExp(`<object(.+?)</object>`, 'gs'),
36
- imgTagRegex: new RegExp(`<img(.+?)</img>`, 'gs'),
37
- figureTagRegex: new RegExp(`<figure(.+?)</figure>`, 'gs'),
38
- linkTagRegex: new RegExp(`<a(.+?)</a>`, 'gs')
39
- },
40
- ids: {
41
- dataItemIdAttrRegex: new RegExp(`${attributes.ids.itemIdAttributeName}=\\"(.+?)\\"`),
42
- dataAssetIdAttrRegex: new RegExp(`${attributes.ids.assetIdAttributeName}=\\"(.+?)\\"`),
43
- dataIdAttrRegex: new RegExp(`${attributes.ids.idAttributeName}=\\"(.+?)\\"`)
44
- },
45
- codenames: {
46
- rteItemCodenameRegex: new RegExp(`${attributes.codenames.itemCodenameAttribute}=\\"(.+?)\\"`),
47
- rteLinkItemCodenameRegex: new RegExp(`${attributes.codenames.linkItemCodenameAttribute}=\\"(.+?)\\"`),
48
- rteAssetCodenameRegex: new RegExp(`${attributes.codenames.assetCodenameAttribute}=\\"(.+?)\\"`)
49
- }
34
+ elements: {
35
+ objectTagRegex: /<object(.+?)<\/object>/gs,
36
+ imgTagRegex: /<img(.+?)<\/img>/gs,
37
+ figureTagRegex: /<figure(.+?)<\/figure>/gs,
38
+ linkTagRegex: /<a(.+?)<\/a>/gs,
39
+ },
40
+ ids: {
41
+ dataItemIdAttrRegex: new RegExp(`${attributes.ids.itemIdAttributeName}=\\"(.+?)\\"`),
42
+ dataAssetIdAttrRegex: new RegExp(`${attributes.ids.assetIdAttributeName}=\\"(.+?)\\"`),
43
+ dataIdAttrRegex: new RegExp(`${attributes.ids.idAttributeName}=\\"(.+?)\\"`),
44
+ },
45
+ codenames: {
46
+ rteItemCodenameRegex: new RegExp(`${attributes.codenames.itemCodenameAttribute}=\\"(.+?)\\"`),
47
+ rteLinkItemCodenameRegex: new RegExp(`${attributes.codenames.linkItemCodenameAttribute}=\\"(.+?)\\"`),
48
+ rteAssetCodenameRegex: new RegExp(`${attributes.codenames.assetCodenameAttribute}=\\"(.+?)\\"`),
49
+ },
50
50
  } as const;
51
51
 
52
52
  export function richTextProcessor() {
53
- const processDataIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
54
- const itemIds = new Set<string>();
55
-
56
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.objectTagRegex, (objectTag) => {
57
- // skip processing for components
58
- if (objectTag.includes(attributes.componentIdentifierAttribute)) {
59
- return objectTag;
60
- }
61
- const itemIdMatch = objectTag.match(rteRegexes.ids.dataIdAttrRegex);
62
- if (itemIdMatch && (itemIdMatch?.length ?? 0) >= 2) {
63
- const itemId = itemIdMatch[1];
64
-
65
- itemIds.add(itemId);
66
-
67
- if (replaceFunc) {
68
- const { codename } = replaceFunc(itemId);
69
-
70
- return objectTag.replaceAll(
71
- `${attributes.ids.idAttributeName}="${itemId}"`,
72
- `${attributes.codenames.itemCodenameAttribute}="${codename}"`
73
- );
74
- }
75
- }
76
-
77
- return objectTag;
78
- });
79
-
80
- return {
81
- html: processedRte,
82
- ids: itemIds
83
- };
84
- };
85
-
86
- const processAssetIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
87
- const assetIds = new Set<string>();
88
-
89
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.figureTagRegex, (figureTag) => {
90
- const assetIdMatch = figureTag.match(rteRegexes.ids.dataAssetIdAttrRegex);
91
- if (assetIdMatch && (assetIdMatch?.length ?? 0) >= 2) {
92
- const assetId = assetIdMatch[1];
93
-
94
- assetIds.add(assetId);
95
-
96
- if (replaceFunc) {
97
- const { codename } = replaceFunc(assetId);
98
-
99
- return figureTag.replaceAll(
100
- `${attributes.ids.assetIdAttributeName}="${assetId}"`,
101
- `${attributes.codenames.assetCodenameAttribute}="${codename}"`
102
- );
103
- }
104
- }
105
-
106
- return figureTag;
107
- });
108
-
109
- return {
110
- html: processedRte,
111
- ids: assetIds
112
- };
113
- };
114
-
115
- const processLinkAssetIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
116
- const assetIds = new Set<string>();
117
-
118
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
119
- const assetIdMatch = linkTag.match(rteRegexes.ids.dataAssetIdAttrRegex);
120
- if (assetIdMatch && (assetIdMatch?.length ?? 0) >= 2) {
121
- const assetId = assetIdMatch[1];
122
-
123
- assetIds.add(assetId);
124
-
125
- if (replaceFunc) {
126
- const { codename } = replaceFunc(assetId);
127
-
128
- return linkTag.replaceAll(
129
- `${attributes.ids.assetIdAttributeName}="${assetId}"`,
130
- `${attributes.codenames.assetCodenameAttribute}="${codename}"`
131
- );
132
- }
133
- }
134
-
135
- return linkTag;
136
- });
137
-
138
- return {
139
- html: processedRte,
140
- ids: assetIds
141
- };
142
- };
143
-
144
- const processLinkItemIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
145
- const linkItemIds = new Set<string>();
146
-
147
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
148
- const itemIdMatch = linkTag.match(rteRegexes.ids.dataItemIdAttrRegex);
149
- if (itemIdMatch && (itemIdMatch?.length ?? 0) >= 2) {
150
- const itemId = itemIdMatch[1];
151
- linkItemIds.add(itemId);
152
-
153
- if (replaceFunc) {
154
- const { codename } = replaceFunc(itemId);
155
-
156
- return linkTag.replaceAll(
157
- `${attributes.ids.itemIdAttributeName}="${itemId}"`,
158
- `${attributes.codenames.linkItemCodenameAttribute}="${codename}"`
159
- );
160
- }
161
- }
162
-
163
- return linkTag;
164
- });
165
-
166
- return {
167
- html: processedRte,
168
- ids: linkItemIds
169
- };
170
- };
171
-
172
- const processItemCodenames = (
173
- richTextHtml: string,
174
- replaceFunc?: CodenameReplaceFunc<ItemStateInTargetEnvironmentByCodename>
175
- ): ProcessCodenamesResult => {
176
- const itemCodenames = new Set<string>();
177
-
178
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.objectTagRegex, (objectTag) => {
179
- const codenameMatch = objectTag.match(rteRegexes.codenames.rteItemCodenameRegex);
180
- if (codenameMatch && (codenameMatch?.length ?? 0) >= 2) {
181
- const codename = codenameMatch[1];
182
-
183
- itemCodenames.add(codename);
184
-
185
- if (replaceFunc) {
186
- const itemState = replaceFunc(codename);
187
-
188
- if (itemState.item && itemState.state === 'exists') {
189
- // no need to replace codename attribute
190
- return objectTag;
191
- }
192
-
193
- return objectTag.replaceAll(
194
- `${attributes.codenames.itemCodenameAttribute}="${codename}"`,
195
- `${attributes.ids.externalIdAttributeName}="${itemState.externalIdToUse}"`
196
- );
197
- }
198
- }
199
-
200
- return objectTag;
201
- });
202
-
203
- return {
204
- codenames: itemCodenames,
205
- html: processedRte
206
- };
207
- };
208
-
209
- const processLinkItemCodenames = (
210
- richTextHtml: string,
211
- replaceFunc?: CodenameReplaceFunc<ItemStateInTargetEnvironmentByCodename>
212
- ): ProcessCodenamesResult => {
213
- const itemCodenames = new Set<string>();
214
-
215
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
216
- const codenameMatch = linkTag.match(rteRegexes.codenames.rteLinkItemCodenameRegex);
217
- if (codenameMatch && (codenameMatch?.length ?? 0) >= 2) {
218
- const codename = codenameMatch[1];
219
-
220
- itemCodenames.add(codename);
221
-
222
- if (replaceFunc) {
223
- const itemState = replaceFunc(codename);
224
-
225
- if (itemState.item && itemState.state === 'exists') {
226
- return linkTag;
227
- }
228
- return linkTag.replaceAll(
229
- `${attributes.codenames.linkItemCodenameAttribute}="${codename}"`,
230
- `${attributes.ids.itemExternalIdAttributeName}="${itemState.externalIdToUse}"`
231
- );
232
- }
233
- }
234
-
235
- return linkTag;
236
- });
237
-
238
- return {
239
- codenames: itemCodenames,
240
- html: processedRte
241
- };
242
- };
243
-
244
- const processAssetCodenames = (
245
- richTextHtml: string,
246
- replaceFunc?: CodenameReplaceFunc<AssetStateInTargetEnvironmentByCodename>
247
- ): ProcessCodenamesResult => {
248
- const assetCodenames = new Set<string>();
249
-
250
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.figureTagRegex, (figureTag) => {
251
- const codenameMatch = figureTag.match(rteRegexes.codenames.rteAssetCodenameRegex);
252
- if (codenameMatch && (codenameMatch?.length ?? 0) >= 2) {
253
- const codename = codenameMatch[1];
254
-
255
- assetCodenames.add(codename);
256
-
257
- if (replaceFunc) {
258
- const assetState = replaceFunc(codename);
259
-
260
- if (assetState.asset && assetState.state === 'exists') {
261
- return figureTag;
262
- }
263
- return figureTag.replaceAll(
264
- `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
265
- `${attributes.ids.externalAssetIdAttributeName}="${assetState.externalIdToUse}"`
266
- );
267
- }
268
- }
269
-
270
- return figureTag;
271
- });
272
-
273
- return {
274
- codenames: assetCodenames,
275
- html: processedRte
276
- };
277
- };
278
-
279
- const processLinkAssetCodenames = (
280
- richTextHtml: string,
281
- replaceFunc?: CodenameReplaceFunc<AssetStateInTargetEnvironmentByCodename>
282
- ): ProcessCodenamesResult => {
283
- const assetCodenames = new Set<string>();
284
-
285
- const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
286
- const codenameMatch = linkTag.match(rteRegexes.codenames.rteAssetCodenameRegex);
287
- if (codenameMatch && (codenameMatch?.length ?? 0) >= 2) {
288
- const codename = codenameMatch[1];
289
-
290
- assetCodenames.add(codename);
291
-
292
- if (replaceFunc) {
293
- const assetState = replaceFunc(codename);
294
-
295
- if (assetState.asset && assetState.state === 'exists') {
296
- return linkTag;
297
- }
298
- return linkTag.replaceAll(
299
- `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
300
- `${attributes.ids.externalAssetIdAttributeName}="${assetState.externalIdToUse}"`
301
- );
302
- }
303
- }
304
-
305
- return linkTag;
306
- });
307
-
308
- return {
309
- codenames: assetCodenames,
310
- html: processedRte
311
- };
312
- };
313
-
314
- return {
315
- processAssetIds,
316
- processDataIds,
317
- processLinkItemIds,
318
- processLinkAssetIds,
319
- processAssetCodenames,
320
- processItemCodenames,
321
- processLinkItemCodenames,
322
- processLinkAssetCodenames
323
- };
53
+ const processDataIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
54
+ const itemIds = new Set<string>();
55
+
56
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.objectTagRegex, (objectTag) => {
57
+ // skip processing for components
58
+ if (objectTag.includes(attributes.componentIdentifierAttribute)) {
59
+ return objectTag;
60
+ }
61
+ const itemIdMatch = objectTag.match(rteRegexes.ids.dataIdAttrRegex);
62
+ if (itemIdMatch && itemIdMatch.length >= 2) {
63
+ const itemId = itemIdMatch[1];
64
+
65
+ itemIds.add(itemId);
66
+
67
+ if (replaceFunc) {
68
+ const { codename } = replaceFunc(itemId);
69
+
70
+ return objectTag.replaceAll(
71
+ `${attributes.ids.idAttributeName}="${itemId}"`,
72
+ `${attributes.codenames.itemCodenameAttribute}="${codename}"`,
73
+ );
74
+ }
75
+ }
76
+
77
+ return objectTag;
78
+ });
79
+
80
+ return {
81
+ html: processedRte,
82
+ ids: itemIds,
83
+ };
84
+ };
85
+
86
+ const processAssetIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
87
+ const assetIds = new Set<string>();
88
+
89
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.figureTagRegex, (figureTag) => {
90
+ const assetIdMatch = figureTag.match(rteRegexes.ids.dataAssetIdAttrRegex);
91
+ if (assetIdMatch && assetIdMatch.length >= 2) {
92
+ const assetId = assetIdMatch[1];
93
+
94
+ assetIds.add(assetId);
95
+
96
+ if (replaceFunc) {
97
+ const { codename } = replaceFunc(assetId);
98
+
99
+ return figureTag.replaceAll(
100
+ `${attributes.ids.assetIdAttributeName}="${assetId}"`,
101
+ `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
102
+ );
103
+ }
104
+ }
105
+
106
+ return figureTag;
107
+ });
108
+
109
+ return {
110
+ html: processedRte,
111
+ ids: assetIds,
112
+ };
113
+ };
114
+
115
+ const processLinkAssetIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
116
+ const assetIds = new Set<string>();
117
+
118
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
119
+ const assetIdMatch = linkTag.match(rteRegexes.ids.dataAssetIdAttrRegex);
120
+ if (assetIdMatch && assetIdMatch.length >= 2) {
121
+ const assetId = assetIdMatch[1];
122
+
123
+ assetIds.add(assetId);
124
+
125
+ if (replaceFunc) {
126
+ const { codename } = replaceFunc(assetId);
127
+
128
+ return linkTag.replaceAll(
129
+ `${attributes.ids.assetIdAttributeName}="${assetId}"`,
130
+ `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
131
+ );
132
+ }
133
+ }
134
+
135
+ return linkTag;
136
+ });
137
+
138
+ return {
139
+ html: processedRte,
140
+ ids: assetIds,
141
+ };
142
+ };
143
+
144
+ const processLinkItemIds = (richTextHtml: string, replaceFunc?: IdReplaceFunc): ProcessIdsResult => {
145
+ const linkItemIds = new Set<string>();
146
+
147
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
148
+ const itemIdMatch = linkTag.match(rteRegexes.ids.dataItemIdAttrRegex);
149
+ if (itemIdMatch && itemIdMatch.length >= 2) {
150
+ const itemId = itemIdMatch[1];
151
+ linkItemIds.add(itemId);
152
+
153
+ if (replaceFunc) {
154
+ const { codename } = replaceFunc(itemId);
155
+
156
+ return linkTag.replaceAll(
157
+ `${attributes.ids.itemIdAttributeName}="${itemId}"`,
158
+ `${attributes.codenames.linkItemCodenameAttribute}="${codename}"`,
159
+ );
160
+ }
161
+ }
162
+
163
+ return linkTag;
164
+ });
165
+
166
+ return {
167
+ html: processedRte,
168
+ ids: linkItemIds,
169
+ };
170
+ };
171
+
172
+ const processItemCodenames = (
173
+ richTextHtml: string,
174
+ replaceFunc?: CodenameReplaceFunc<ItemStateInTargetEnvironmentByCodename>,
175
+ ): ProcessCodenamesResult => {
176
+ const itemCodenames = new Set<string>();
177
+
178
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.objectTagRegex, (objectTag) => {
179
+ const codenameMatch = objectTag.match(rteRegexes.codenames.rteItemCodenameRegex);
180
+ if (codenameMatch && codenameMatch.length >= 2) {
181
+ const codename = codenameMatch[1];
182
+
183
+ itemCodenames.add(codename);
184
+
185
+ if (replaceFunc) {
186
+ const itemState = replaceFunc(codename);
187
+
188
+ if (itemState.item && itemState.state === "exists") {
189
+ // no need to replace codename attribute
190
+ return objectTag;
191
+ }
192
+
193
+ return objectTag.replaceAll(
194
+ `${attributes.codenames.itemCodenameAttribute}="${codename}"`,
195
+ `${attributes.ids.externalIdAttributeName}="${itemState.externalIdToUse}"`,
196
+ );
197
+ }
198
+ }
199
+
200
+ return objectTag;
201
+ });
202
+
203
+ return {
204
+ codenames: itemCodenames,
205
+ html: processedRte,
206
+ };
207
+ };
208
+
209
+ const processLinkItemCodenames = (
210
+ richTextHtml: string,
211
+ replaceFunc?: CodenameReplaceFunc<ItemStateInTargetEnvironmentByCodename>,
212
+ ): ProcessCodenamesResult => {
213
+ const itemCodenames = new Set<string>();
214
+
215
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
216
+ const codenameMatch = linkTag.match(rteRegexes.codenames.rteLinkItemCodenameRegex);
217
+ if (codenameMatch && codenameMatch.length >= 2) {
218
+ const codename = codenameMatch[1];
219
+
220
+ itemCodenames.add(codename);
221
+
222
+ if (replaceFunc) {
223
+ const itemState = replaceFunc(codename);
224
+
225
+ if (itemState.item && itemState.state === "exists") {
226
+ return linkTag;
227
+ }
228
+ return linkTag.replaceAll(
229
+ `${attributes.codenames.linkItemCodenameAttribute}="${codename}"`,
230
+ `${attributes.ids.itemExternalIdAttributeName}="${itemState.externalIdToUse}"`,
231
+ );
232
+ }
233
+ }
234
+
235
+ return linkTag;
236
+ });
237
+
238
+ return {
239
+ codenames: itemCodenames,
240
+ html: processedRte,
241
+ };
242
+ };
243
+
244
+ const processAssetCodenames = (
245
+ richTextHtml: string,
246
+ replaceFunc?: CodenameReplaceFunc<AssetStateInTargetEnvironmentByCodename>,
247
+ ): ProcessCodenamesResult => {
248
+ const assetCodenames = new Set<string>();
249
+
250
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.figureTagRegex, (figureTag) => {
251
+ const codenameMatch = figureTag.match(rteRegexes.codenames.rteAssetCodenameRegex);
252
+ if (codenameMatch && codenameMatch.length >= 2) {
253
+ const codename = codenameMatch[1];
254
+
255
+ assetCodenames.add(codename);
256
+
257
+ if (replaceFunc) {
258
+ const assetState = replaceFunc(codename);
259
+
260
+ if (assetState.asset && assetState.state === "exists") {
261
+ return figureTag;
262
+ }
263
+ return figureTag.replaceAll(
264
+ `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
265
+ `${attributes.ids.externalAssetIdAttributeName}="${assetState.externalIdToUse}"`,
266
+ );
267
+ }
268
+ }
269
+
270
+ return figureTag;
271
+ });
272
+
273
+ return {
274
+ codenames: assetCodenames,
275
+ html: processedRte,
276
+ };
277
+ };
278
+
279
+ const processLinkAssetCodenames = (
280
+ richTextHtml: string,
281
+ replaceFunc?: CodenameReplaceFunc<AssetStateInTargetEnvironmentByCodename>,
282
+ ): ProcessCodenamesResult => {
283
+ const assetCodenames = new Set<string>();
284
+
285
+ const processedRte = richTextHtml.replaceAll(rteRegexes.elements.linkTagRegex, (linkTag) => {
286
+ const codenameMatch = linkTag.match(rteRegexes.codenames.rteAssetCodenameRegex);
287
+ if (codenameMatch && codenameMatch.length >= 2) {
288
+ const codename = codenameMatch[1];
289
+
290
+ assetCodenames.add(codename);
291
+
292
+ if (replaceFunc) {
293
+ const assetState = replaceFunc(codename);
294
+
295
+ if (assetState.asset && assetState.state === "exists") {
296
+ return linkTag;
297
+ }
298
+ return linkTag.replaceAll(
299
+ `${attributes.codenames.assetCodenameAttribute}="${codename}"`,
300
+ `${attributes.ids.externalAssetIdAttributeName}="${assetState.externalIdToUse}"`,
301
+ );
302
+ }
303
+ }
304
+
305
+ return linkTag;
306
+ });
307
+
308
+ return {
309
+ codenames: assetCodenames,
310
+ html: processedRte,
311
+ };
312
+ };
313
+
314
+ return {
315
+ processAssetIds,
316
+ processDataIds,
317
+ processLinkItemIds,
318
+ processLinkAssetIds,
319
+ processAssetCodenames,
320
+ processItemCodenames,
321
+ processLinkItemCodenames,
322
+ processLinkAssetCodenames,
323
+ };
324
324
  }