@kontent-ai/migration-toolkit 2.9.0 → 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 +8 -1
  34. package/dist/core/utils/global.utils.js +64 -9
  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 +19 -2
  116. package/dist/toolkit/export.js.map +1 -1
  117. package/dist/toolkit/file.d.ts +2 -1
  118. package/dist/toolkit/file.js +46 -13
  119. package/dist/toolkit/file.js.map +1 -1
  120. package/dist/toolkit/import.d.ts +1 -1
  121. package/dist/toolkit/import.js +31 -14
  122. package/dist/toolkit/import.js.map +1 -1
  123. package/dist/toolkit/migrate.d.ts +13 -4
  124. package/dist/toolkit/migrate.js +37 -17
  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 +86 -15
  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 -4
  195. package/lib/toolkit/file.ts +59 -22
  196. package/lib/toolkit/import.ts +32 -15
  197. package/lib/toolkit/migrate.ts +60 -31
  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 -85
  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,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
  }