multiclone 0.2.0 → 0.3.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 (54) hide show
  1. package/README.md +9 -8
  2. package/agents/section-builder.md +5 -3
  3. package/commands/multiclone.md +3 -3
  4. package/dist/adapters/cli.js +14 -0
  5. package/dist/adapters/cli.js.map +1 -1
  6. package/dist/contracts/tools/method.js +12 -1
  7. package/dist/contracts/tools/method.js.map +1 -1
  8. package/dist/contracts/tools/session.js +9 -8
  9. package/dist/contracts/tools/session.js.map +1 -1
  10. package/dist/doctor.js +9 -0
  11. package/dist/doctor.js.map +1 -1
  12. package/dist/project/assets.js +15 -13
  13. package/dist/project/assets.js.map +1 -1
  14. package/dist/project/convert/attrs.js +318 -0
  15. package/dist/project/convert/attrs.js.map +1 -0
  16. package/dist/project/convert/convert.js +304 -0
  17. package/dist/project/convert/convert.js.map +1 -0
  18. package/dist/project/convert/css.js +299 -0
  19. package/dist/project/convert/css.js.map +1 -0
  20. package/dist/project/convert/html.js +425 -0
  21. package/dist/project/convert/html.js.map +1 -0
  22. package/dist/project/convert/jsx.js +335 -0
  23. package/dist/project/convert/jsx.js.map +1 -0
  24. package/dist/project/convert/locate.js +180 -0
  25. package/dist/project/convert/locate.js.map +1 -0
  26. package/dist/project/convert/scripts.js +214 -0
  27. package/dist/project/convert/scripts.js.map +1 -0
  28. package/dist/project/convert/styles.js +228 -0
  29. package/dist/project/convert/styles.js.map +1 -0
  30. package/dist/project/convert/write.js +142 -0
  31. package/dist/project/convert/write.js.map +1 -0
  32. package/dist/project/fonts.js +131 -0
  33. package/dist/project/fonts.js.map +1 -0
  34. package/dist/project/libraries.js +28 -0
  35. package/dist/project/libraries.js.map +1 -0
  36. package/dist/project/method.js +72 -6
  37. package/dist/project/method.js.map +1 -1
  38. package/dist/project/scaffold.js +33 -6
  39. package/dist/project/scaffold.js.map +1 -1
  40. package/dist/session/proc.js +29 -1
  41. package/dist/session/proc.js.map +1 -1
  42. package/dist/session/session.js +47 -4
  43. package/dist/session/session.js.map +1 -1
  44. package/dist/version.js +1 -1
  45. package/install.sh +3 -2
  46. package/package.json +4 -2
  47. package/scripts/postinstall.mjs +21 -0
  48. package/skills/multiclone/SKILL.md +17 -5
  49. package/templates/react-vite/index.html +1 -1
  50. package/templates/react-vite/src/main.tsx +2 -2
  51. package/templates/react-vite/src/styles/index.css +0 -1
  52. package/dist/project/draft.js +0 -860
  53. package/dist/project/draft.js.map +0 -1
  54. package/templates/react-vite/src/styles/draft.css +0 -1
@@ -0,0 +1,318 @@
1
+ /**
2
+ * HTML attribute → React prop rules. Props React types strictly go out as real props; anything
3
+ * React's types would reject (unknown names, values outside an enumerated union) goes out through
4
+ * a typed spread so the original attribute still reaches the DOM unchanged.
5
+ */
6
+ /** HTML attribute names whose React prop name differs. */
7
+ export const RENAMED = {
8
+ class: 'className',
9
+ for: 'htmlFor',
10
+ tabindex: 'tabIndex',
11
+ readonly: 'readOnly',
12
+ maxlength: 'maxLength',
13
+ minlength: 'minLength',
14
+ colspan: 'colSpan',
15
+ rowspan: 'rowSpan',
16
+ srcset: 'srcSet',
17
+ srcdoc: 'srcDoc',
18
+ srclang: 'srcLang',
19
+ crossorigin: 'crossOrigin',
20
+ autoplay: 'autoPlay',
21
+ playsinline: 'playsInline',
22
+ contenteditable: 'contentEditable',
23
+ datetime: 'dateTime',
24
+ enctype: 'encType',
25
+ 'accept-charset': 'acceptCharset',
26
+ frameborder: 'frameBorder',
27
+ allowfullscreen: 'allowFullScreen',
28
+ referrerpolicy: 'referrerPolicy',
29
+ autocomplete: 'autoComplete',
30
+ autofocus: 'autoFocus',
31
+ novalidate: 'noValidate',
32
+ formnovalidate: 'formNoValidate',
33
+ usemap: 'useMap',
34
+ spellcheck: 'spellCheck',
35
+ cellpadding: 'cellPadding',
36
+ cellspacing: 'cellSpacing',
37
+ inputmode: 'inputMode',
38
+ enterkeyhint: 'enterKeyHint',
39
+ fetchpriority: 'fetchPriority',
40
+ itemprop: 'itemProp',
41
+ itemscope: 'itemScope',
42
+ itemtype: 'itemType',
43
+ itemid: 'itemID',
44
+ itemref: 'itemRef',
45
+ hreflang: 'hrefLang',
46
+ charset: 'charSet',
47
+ accesskey: 'accessKey',
48
+ value: 'value',
49
+ checked: 'checked',
50
+ };
51
+ const GLOBAL = new Set([
52
+ 'id',
53
+ 'className',
54
+ 'title',
55
+ 'role',
56
+ 'lang',
57
+ 'dir',
58
+ 'hidden',
59
+ 'tabIndex',
60
+ 'accessKey',
61
+ 'draggable',
62
+ 'spellCheck',
63
+ 'contentEditable',
64
+ 'translate',
65
+ 'slot',
66
+ 'itemProp',
67
+ 'itemScope',
68
+ 'itemType',
69
+ 'itemID',
70
+ 'itemRef',
71
+ 'autoFocus',
72
+ 'inputMode',
73
+ 'enterKeyHint',
74
+ 'nonce',
75
+ 'inert',
76
+ ]);
77
+ const MEDIA = [
78
+ 'src',
79
+ 'width',
80
+ 'height',
81
+ 'crossOrigin',
82
+ 'preload',
83
+ 'autoPlay',
84
+ 'muted',
85
+ 'loop',
86
+ 'controls',
87
+ 'playsInline',
88
+ ];
89
+ const BY_TAG = {
90
+ a: ['href', 'target', 'rel', 'download', 'hrefLang', 'referrerPolicy', 'type', 'media', 'ping'],
91
+ area: ['href', 'target', 'rel', 'alt', 'coords', 'shape', 'download', 'referrerPolicy'],
92
+ img: [
93
+ 'src',
94
+ 'srcSet',
95
+ 'sizes',
96
+ 'alt',
97
+ 'width',
98
+ 'height',
99
+ 'loading',
100
+ 'decoding',
101
+ 'crossOrigin',
102
+ 'referrerPolicy',
103
+ 'fetchPriority',
104
+ 'useMap',
105
+ ],
106
+ video: [...MEDIA, 'poster'],
107
+ audio: MEDIA,
108
+ source: ['src', 'srcSet', 'type', 'media', 'sizes', 'width', 'height'],
109
+ track: ['src', 'kind', 'label', 'srcLang', 'default'],
110
+ iframe: [
111
+ 'src',
112
+ 'srcDoc',
113
+ 'width',
114
+ 'height',
115
+ 'allow',
116
+ 'allowFullScreen',
117
+ 'loading',
118
+ 'name',
119
+ 'referrerPolicy',
120
+ 'sandbox',
121
+ 'frameBorder',
122
+ ],
123
+ embed: ['src', 'type', 'width', 'height'],
124
+ object: ['data', 'type', 'width', 'height', 'name'],
125
+ input: [
126
+ 'type',
127
+ 'name',
128
+ 'value',
129
+ 'placeholder',
130
+ 'required',
131
+ 'disabled',
132
+ 'checked',
133
+ 'readOnly',
134
+ 'min',
135
+ 'max',
136
+ 'step',
137
+ 'maxLength',
138
+ 'minLength',
139
+ 'pattern',
140
+ 'autoComplete',
141
+ 'multiple',
142
+ 'accept',
143
+ 'size',
144
+ 'list',
145
+ 'form',
146
+ 'alt',
147
+ 'src',
148
+ 'width',
149
+ 'height',
150
+ 'formNoValidate',
151
+ ],
152
+ button: ['type', 'name', 'value', 'disabled', 'form', 'formNoValidate'],
153
+ form: [
154
+ 'action',
155
+ 'method',
156
+ 'target',
157
+ 'encType',
158
+ 'noValidate',
159
+ 'name',
160
+ 'autoComplete',
161
+ 'acceptCharset',
162
+ ],
163
+ label: ['htmlFor', 'form'],
164
+ textarea: [
165
+ 'name',
166
+ 'placeholder',
167
+ 'rows',
168
+ 'cols',
169
+ 'required',
170
+ 'disabled',
171
+ 'readOnly',
172
+ 'maxLength',
173
+ 'minLength',
174
+ 'wrap',
175
+ 'autoComplete',
176
+ 'form',
177
+ ],
178
+ select: ['name', 'required', 'disabled', 'multiple', 'size', 'autoComplete', 'form'],
179
+ option: ['value', 'disabled', 'label'],
180
+ optgroup: ['label', 'disabled'],
181
+ fieldset: ['disabled', 'name', 'form'],
182
+ output: ['htmlFor', 'name', 'form'],
183
+ ol: ['start', 'reversed', 'type'],
184
+ li: ['value'],
185
+ td: ['colSpan', 'rowSpan', 'headers'],
186
+ th: ['colSpan', 'rowSpan', 'headers', 'scope', 'abbr'],
187
+ col: ['span', 'width'],
188
+ colgroup: ['span'],
189
+ table: ['cellPadding', 'cellSpacing', 'summary', 'width'],
190
+ time: ['dateTime'],
191
+ canvas: ['width', 'height'],
192
+ details: ['open'],
193
+ dialog: ['open'],
194
+ blockquote: ['cite'],
195
+ q: ['cite'],
196
+ del: ['cite', 'dateTime'],
197
+ ins: ['cite', 'dateTime'],
198
+ meter: ['value', 'min', 'max', 'low', 'high', 'optimum'],
199
+ progress: ['value', 'max'],
200
+ data: ['value'],
201
+ map: ['name'],
202
+ };
203
+ /** Prop values React types as unions; any other value goes through the spread. */
204
+ const UNIONS = {
205
+ 'button.type': new Set(['button', 'submit', 'reset']),
206
+ loading: new Set(['lazy', 'eager']),
207
+ decoding: new Set(['async', 'sync', 'auto']),
208
+ fetchPriority: new Set(['high', 'low', 'auto']),
209
+ crossOrigin: new Set(['anonymous', 'use-credentials', '']),
210
+ preload: new Set(['none', 'metadata', 'auto', '']),
211
+ referrerPolicy: new Set([
212
+ '',
213
+ 'no-referrer',
214
+ 'no-referrer-when-downgrade',
215
+ 'origin',
216
+ 'origin-when-cross-origin',
217
+ 'same-origin',
218
+ 'strict-origin',
219
+ 'strict-origin-when-cross-origin',
220
+ 'unsafe-url',
221
+ ]),
222
+ translate: new Set(['yes', 'no']),
223
+ draggable: new Set(['true', 'false']),
224
+ spellCheck: new Set(['true', 'false']),
225
+ contentEditable: new Set(['true', 'false', 'inherit', 'plaintext-only']),
226
+ inputMode: new Set(['none', 'text', 'tel', 'url', 'email', 'numeric', 'decimal', 'search']),
227
+ enterKeyHint: new Set(['enter', 'done', 'go', 'next', 'previous', 'search', 'send']),
228
+ 'ol.type': new Set(['1', 'a', 'A', 'i', 'I']),
229
+ wrap: new Set(['hard', 'soft', 'off']),
230
+ scope: new Set(['row', 'col', 'rowgroup', 'colgroup']),
231
+ 'track.kind': new Set(['subtitles', 'captions', 'descriptions', 'chapters', 'metadata']),
232
+ };
233
+ /** Attributes that are present-or-absent in HTML and booleans in React. */
234
+ export const BOOLEAN = new Set([
235
+ 'hidden',
236
+ 'disabled',
237
+ 'checked',
238
+ 'muted',
239
+ 'loop',
240
+ 'autoPlay',
241
+ 'controls',
242
+ 'playsInline',
243
+ 'required',
244
+ 'multiple',
245
+ 'open',
246
+ 'noValidate',
247
+ 'formNoValidate',
248
+ 'allowFullScreen',
249
+ 'itemScope',
250
+ 'default',
251
+ 'reversed',
252
+ 'readOnly',
253
+ 'autoFocus',
254
+ 'inert',
255
+ ]);
256
+ /** Props React types as numbers. */
257
+ export const NUMERIC = new Set([
258
+ 'tabIndex',
259
+ 'colSpan',
260
+ 'rowSpan',
261
+ 'rows',
262
+ 'cols',
263
+ 'size',
264
+ 'maxLength',
265
+ 'minLength',
266
+ 'start',
267
+ 'span',
268
+ 'cellPadding',
269
+ 'cellSpacing',
270
+ ]);
271
+ /** True when React's types accept `prop="value"` on this HTML tag. */
272
+ export function isTypedProp(tag, prop, value) {
273
+ if (!GLOBAL.has(prop) && !(BY_TAG[tag]?.includes(prop) ?? false))
274
+ return false;
275
+ const union = UNIONS[`${tag}.${prop}`] ?? (prop === 'type' ? undefined : UNIONS[prop]);
276
+ if (union && !union.has(value))
277
+ return false;
278
+ if (NUMERIC.has(prop) && !/^-?\d+$/.test(value.trim()))
279
+ return false;
280
+ return true;
281
+ }
282
+ /** React prop name for an HTML attribute (lower-case names that React spells the same pass). */
283
+ export function htmlPropName(name) {
284
+ return RENAMED[name] ?? name;
285
+ }
286
+ /** React prop name for an SVG/MathML attribute: kebab-case and namespaced names camel-cased. */
287
+ export function svgPropName(name) {
288
+ if (name === 'class')
289
+ return 'className';
290
+ if (name.startsWith('data-') || name.startsWith('aria-'))
291
+ return name;
292
+ if (name === 'xlink:href')
293
+ return 'href';
294
+ if (name.startsWith('xlink:'))
295
+ return `xlink${cap(name.slice(6))}`;
296
+ if (name === 'xml:space')
297
+ return 'xmlSpace';
298
+ if (name === 'xml:lang')
299
+ return 'xmlLang';
300
+ if (name === 'xmlns:xlink')
301
+ return 'xmlnsXlink';
302
+ if (name.includes(':'))
303
+ return null;
304
+ return name.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase());
305
+ }
306
+ function cap(value) {
307
+ return value.charAt(0).toUpperCase() + value.slice(1);
308
+ }
309
+ /** CSS property → React style key (`-webkit-mask` → `WebkitMask`, `--x` unchanged). */
310
+ export function styleKey(property) {
311
+ if (property.startsWith('--'))
312
+ return property;
313
+ const name = property.toLowerCase();
314
+ const unprefixed = name.startsWith('-ms-') ? `ms-${name.slice(4)}` : name.replace(/^-/, '');
315
+ const camel = unprefixed.replace(/-([a-z])/g, (_match, letter) => letter.toUpperCase());
316
+ return name.startsWith('-') && !name.startsWith('-ms-') ? cap(camel) : camel;
317
+ }
318
+ //# sourceMappingURL=attrs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"attrs.js","sourceRoot":"","sources":["../../../src/project/convert/attrs.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,0DAA0D;AAC1D,MAAM,CAAC,MAAM,OAAO,GAAqC;IACvD,KAAK,EAAE,WAAW;IAClB,GAAG,EAAE,SAAS;IACd,QAAQ,EAAE,UAAU;IACpB,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,SAAS,EAAE,WAAW;IACtB,OAAO,EAAE,SAAS;IAClB,OAAO,EAAE,SAAS;IAClB,MAAM,EAAE,QAAQ;IAChB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,UAAU;IACpB,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAClC,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,gBAAgB,EAAE,eAAe;IACjC,WAAW,EAAE,aAAa;IAC1B,eAAe,EAAE,iBAAiB;IAClC,cAAc,EAAE,gBAAgB;IAChC,YAAY,EAAE,cAAc;IAC5B,SAAS,EAAE,WAAW;IACtB,UAAU,EAAE,YAAY;IACxB,cAAc,EAAE,gBAAgB;IAChC,MAAM,EAAE,QAAQ;IAChB,UAAU,EAAE,YAAY;IACxB,WAAW,EAAE,aAAa;IAC1B,WAAW,EAAE,aAAa;IAC1B,SAAS,EAAE,WAAW;IACtB,YAAY,EAAE,cAAc;IAC5B,aAAa,EAAE,eAAe;IAC9B,QAAQ,EAAE,UAAU;IACpB,SAAS,EAAE,WAAW;IACtB,QAAQ,EAAE,UAAU;IACpB,MAAM,EAAE,QAAQ;IAChB,OAAO,EAAE,SAAS;IAClB,QAAQ,EAAE,UAAU;IACpB,OAAO,EAAE,SAAS;IAClB,SAAS,EAAE,WAAW;IACtB,KAAK,EAAE,OAAO;IACd,OAAO,EAAE,SAAS;CACnB,CAAC;AAEF,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC;IACrB,IAAI;IACJ,WAAW;IACX,OAAO;IACP,MAAM;IACN,MAAM;IACN,KAAK;IACL,QAAQ;IACR,UAAU;IACV,WAAW;IACX,WAAW;IACX,YAAY;IACZ,iBAAiB;IACjB,WAAW;IACX,MAAM;IACN,UAAU;IACV,WAAW;IACX,UAAU;IACV,QAAQ;IACR,SAAS;IACT,WAAW;IACX,WAAW;IACX,cAAc;IACd,OAAO;IACP,OAAO;CACR,CAAC,CAAC;AAEH,MAAM,KAAK,GAAG;IACZ,KAAK;IACL,OAAO;IACP,QAAQ;IACR,aAAa;IACb,SAAS;IACT,UAAU;IACV,OAAO;IACP,MAAM;IACN,UAAU;IACV,aAAa;CACd,CAAC;AAEF,MAAM,MAAM,GAAgD;IAC1D,CAAC,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,CAAC;IAC/F,IAAI,EAAE,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,UAAU,EAAE,gBAAgB,CAAC;IACvF,GAAG,EAAE;QACH,KAAK;QACL,QAAQ;QACR,OAAO;QACP,KAAK;QACL,OAAO;QACP,QAAQ;QACR,SAAS;QACT,UAAU;QACV,aAAa;QACb,gBAAgB;QAChB,eAAe;QACf,QAAQ;KACT;IACD,KAAK,EAAE,CAAC,GAAG,KAAK,EAAE,QAAQ,CAAC;IAC3B,KAAK,EAAE,KAAK;IACZ,MAAM,EAAE,CAAC,KAAK,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;IACtE,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC;IACrD,MAAM,EAAE;QACN,KAAK;QACL,QAAQ;QACR,OAAO;QACP,QAAQ;QACR,OAAO;QACP,iBAAiB;QACjB,SAAS;QACT,MAAM;QACN,gBAAgB;QAChB,SAAS;QACT,aAAa;KACd;IACD,KAAK,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,CAAC;IACzC,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC;IACnD,KAAK,EAAE;QACL,MAAM;QACN,MAAM;QACN,OAAO;QACP,aAAa;QACb,UAAU;QACV,UAAU;QACV,SAAS;QACT,UAAU;QACV,KAAK;QACL,KAAK;QACL,MAAM;QACN,WAAW;QACX,WAAW;QACX,SAAS;QACT,cAAc;QACd,UAAU;QACV,QAAQ;QACR,MAAM;QACN,MAAM;QACN,MAAM;QACN,KAAK;QACL,KAAK;QACL,OAAO;QACP,QAAQ;QACR,gBAAgB;KACjB;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,gBAAgB,CAAC;IACvE,IAAI,EAAE;QACJ,QAAQ;QACR,QAAQ;QACR,QAAQ;QACR,SAAS;QACT,YAAY;QACZ,MAAM;QACN,cAAc;QACd,eAAe;KAChB;IACD,KAAK,EAAE,CAAC,SAAS,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE;QACR,MAAM;QACN,aAAa;QACb,MAAM;QACN,MAAM;QACN,UAAU;QACV,UAAU;QACV,UAAU;QACV,WAAW;QACX,WAAW;QACX,MAAM;QACN,cAAc;QACd,MAAM;KACP;IACD,MAAM,EAAE,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,EAAE,cAAc,EAAE,MAAM,CAAC;IACpF,MAAM,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,OAAO,CAAC;IACtC,QAAQ,EAAE,CAAC,OAAO,EAAE,UAAU,CAAC;IAC/B,QAAQ,EAAE,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC;IACtC,MAAM,EAAE,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC;IACjC,EAAE,EAAE,CAAC,OAAO,CAAC;IACb,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,CAAC;IACrC,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,CAAC;IACtD,GAAG,EAAE,CAAC,MAAM,EAAE,OAAO,CAAC;IACtB,QAAQ,EAAE,CAAC,MAAM,CAAC;IAClB,KAAK,EAAE,CAAC,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,CAAC;IACzD,IAAI,EAAE,CAAC,UAAU,CAAC;IAClB,MAAM,EAAE,CAAC,OAAO,EAAE,QAAQ,CAAC;IAC3B,OAAO,EAAE,CAAC,MAAM,CAAC;IACjB,MAAM,EAAE,CAAC,MAAM,CAAC;IAChB,UAAU,EAAE,CAAC,MAAM,CAAC;IACpB,CAAC,EAAE,CAAC,MAAM,CAAC;IACX,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IACzB,GAAG,EAAE,CAAC,MAAM,EAAE,UAAU,CAAC;IACzB,KAAK,EAAE,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,CAAC;IACxD,QAAQ,EAAE,CAAC,OAAO,EAAE,KAAK,CAAC;IAC1B,IAAI,EAAE,CAAC,OAAO,CAAC;IACf,GAAG,EAAE,CAAC,MAAM,CAAC;CACd,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,GAAkD;IAC5D,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;IACrD,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACnC,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;IAC5C,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAC/C,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,iBAAiB,EAAE,EAAE,CAAC,CAAC;IAC1D,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,EAAE,CAAC,CAAC;IAClD,cAAc,EAAE,IAAI,GAAG,CAAC;QACtB,EAAE;QACF,aAAa;QACb,4BAA4B;QAC5B,QAAQ;QACR,0BAA0B;QAC1B,aAAa;QACb,eAAe;QACf,iCAAiC;QACjC,YAAY;KACb,CAAC;IACF,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACjC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACrC,UAAU,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtC,eAAe,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;IACxE,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,CAAC,CAAC;IAC3F,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;IACpF,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;IAC7C,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;IACtC,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IACtD,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,cAAc,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;CACzF,CAAC;AAEF,2EAA2E;AAC3E,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IAC7B,QAAQ;IACR,UAAU;IACV,SAAS;IACT,OAAO;IACP,MAAM;IACN,UAAU;IACV,UAAU;IACV,aAAa;IACb,UAAU;IACV,UAAU;IACV,MAAM;IACN,YAAY;IACZ,gBAAgB;IAChB,iBAAiB;IACjB,WAAW;IACX,SAAS;IACT,UAAU;IACV,UAAU;IACV,WAAW;IACX,OAAO;CACR,CAAC,CAAC;AAEH,oCAAoC;AACpC,MAAM,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC;IAC7B,UAAU;IACV,SAAS;IACT,SAAS;IACT,MAAM;IACN,MAAM;IACN,MAAM;IACN,WAAW;IACX,WAAW;IACX,OAAO;IACP,MAAM;IACN,aAAa;IACb,aAAa;CACd,CAAC,CAAC;AAEH,sEAAsE;AACtE,MAAM,UAAU,WAAW,CAAC,GAAW,EAAE,IAAY,EAAE,KAAa;IAClE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC/E,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IACvF,IAAI,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAC7C,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;QAAE,OAAO,KAAK,CAAC;IACrE,OAAO,IAAI,CAAC;AACd,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,YAAY,CAAC,IAAY;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC;AAC/B,CAAC;AAED,gGAAgG;AAChG,MAAM,UAAU,WAAW,CAAC,IAAY;IACtC,IAAI,IAAI,KAAK,OAAO;QAAE,OAAO,WAAW,CAAC;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC;QAAE,OAAO,IAAI,CAAC;IACtE,IAAI,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC;IACzC,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;QAAE,OAAO,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,UAAU,CAAC;IAC5C,IAAI,IAAI,KAAK,UAAU;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,IAAI,KAAK,aAAa;QAAE,OAAO,YAAY,CAAC;IAChD,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,CAAC;IACpC,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;AACrF,CAAC;AAED,SAAS,GAAG,CAAC,KAAa;IACxB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,uFAAuF;AACvF,MAAM,UAAU,QAAQ,CAAC,QAAgB;IACvC,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC;QAAE,OAAO,QAAQ,CAAC;IAC/C,MAAM,IAAI,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC;IACpC,MAAM,UAAU,GAAG,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC5F,MAAM,KAAK,GAAG,UAAU,CAAC,OAAO,CAAC,WAAW,EAAE,CAAC,MAAM,EAAE,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;IAChG,OAAO,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC;AAC/E,CAAC"}
@@ -0,0 +1,304 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { copyFile, rm, writeFile } from 'node:fs/promises';
3
+ import { join, resolve } from 'node:path';
4
+ import { ensureDir, readJson } from '../../core/files.js';
5
+ import { log } from '../../core/log.js';
6
+ import { mcError, TaggedError } from '../../domain/result.js';
7
+ import { RunFolder } from '../../store/run.js';
8
+ import { exportAssets, mediaPath } from '../assets.js';
9
+ import { SHARED } from './css.js';
10
+ import { attr, decodeEntities, elementChildren, parseDocument, textContent, } from './html.js';
11
+ import { newJsxState, renderChildren, renderElement, } from './jsx.js';
12
+ import { componentName, fallbackSections, locateSections, } from './locate.js';
13
+ import { planScripts, RUNTIME_SOURCE } from './scripts.js';
14
+ import { buildStyles } from './styles.js';
15
+ import { originalSource, pageSource, pretty, registerPages, sectionSource, writeApp, writeElementTypes, } from './write.js';
16
+ /**
17
+ * Converts a captured page into React sections that keep the original markup, class names, CSS
18
+ * and scripts, so the clone looks and moves like the original from the first render.
19
+ */
20
+ export async function convertPage(options) {
21
+ const opened = await RunFolder.open(options.capture);
22
+ if (!opened.ok)
23
+ throw new TaggedError(opened.error);
24
+ const run = opened.value;
25
+ const project = resolve(options.project);
26
+ const route = normalizeRoute(options.route ?? '/');
27
+ const warnings = [];
28
+ const primary = run.viewports[0] ?? 'desktop';
29
+ const pageUrl = run.manifest.finalUrl || run.manifest.url;
30
+ const origin = new URL(pageUrl).origin;
31
+ const network = await run.network();
32
+ const { doc, hydrated, source } = await pickDocument(run, network, pageUrl, primary);
33
+ if (source === 'rendered')
34
+ warnings.push("The server sent an almost empty page (client-rendered site); converted the DOM after the site's JS ran, without its app bundle.");
35
+ const slug = route === '/'
36
+ ? 'home'
37
+ : route
38
+ .slice(1)
39
+ .replace(/[^a-z0-9]+/gi, '-')
40
+ .toLowerCase();
41
+ const sectionsDir = join(project, 'src', 'sections', slug);
42
+ if (existsSync(sectionsDir)) {
43
+ if (options.overwrite !== true)
44
+ throw new TaggedError(mcError('invalid-input', `${route} is already converted in src/sections/${slug}.`, 'Pass overwrite to replace it (this discards edits to those files).'));
45
+ await rm(sectionsDir, { recursive: true, force: true });
46
+ }
47
+ for (const stale of [
48
+ join(project, 'src', 'styles', 'original', slug),
49
+ join(project, 'public', 'original', slug),
50
+ ])
51
+ await rm(stale, { recursive: true, force: true });
52
+ const index = await run.json('sections/index.json', []);
53
+ let located = locateSections(doc, index, primary, hydrated);
54
+ if (!located.length) {
55
+ located = fallbackSections(doc);
56
+ warnings.push('No section split matched this page; split it by its top-level blocks.');
57
+ }
58
+ // URLs: captured files are served locally, same-site links stay relative, the rest stays remote.
59
+ const mapFile = join(project, 'src', 'content', 'asset-map.json');
60
+ const noMap = {};
61
+ let assetMap = await readJson(mapFile).catch(() => noMap);
62
+ if (!Object.keys(assetMap).length) {
63
+ await exportAssets(run.dir, project);
64
+ assetMap = await readJson(mapFile).catch(() => noMap);
65
+ }
66
+ const captured = new Map(network.filter((entry) => entry.file).map((entry) => [entry.url, entry]));
67
+ const extra = new Map();
68
+ const local = (absolute) => {
69
+ const known = assetMap[absolute] ?? assetMap[absolute.split('#')[0] ?? ''];
70
+ if (known)
71
+ return known;
72
+ const entry = captured.get(absolute);
73
+ if (!entry?.file || entry.mimeType.includes('text/html'))
74
+ return null;
75
+ const path = mediaPath(new URL(absolute), entry.file);
76
+ extra.set(absolute, { file: entry.file, local: path });
77
+ return path;
78
+ };
79
+ const baseHref = (() => {
80
+ const base = elementChildren(doc.head).find((node) => node.tag === 'base');
81
+ const href = base ? attr(base, 'href') : null;
82
+ try {
83
+ return href ? new URL(href, pageUrl).href : pageUrl;
84
+ }
85
+ catch {
86
+ return pageUrl;
87
+ }
88
+ })();
89
+ const sameSite = (url) => url.origin === origin ||
90
+ url.hostname.replace(/^www\./, '') === new URL(origin).hostname.replace(/^www\./, '');
91
+ const rewrite = (raw, kind) => {
92
+ let url;
93
+ try {
94
+ url = new URL(raw.trim(), baseHref);
95
+ }
96
+ catch {
97
+ return raw;
98
+ }
99
+ if (url.protocol !== 'http:' && url.protocol !== 'https:')
100
+ return raw;
101
+ const mapped = local(url.href);
102
+ if (kind === 'link') {
103
+ if (mapped)
104
+ return mapped;
105
+ return sameSite(url) ? `${url.pathname}${url.search}${url.hash}` || '/' : url.href;
106
+ }
107
+ return mapped ?? url.href;
108
+ };
109
+ // Section ownership of every class/id, for splitting the CSS.
110
+ const ownerOf = new Map(located.map((section, i) => [section.element, i]));
111
+ const elementsTokens = [];
112
+ const collect = (node, owner) => {
113
+ const own = ownerOf.get(node) ?? owner;
114
+ const tokens = (attr(node, 'class') ?? '')
115
+ .split(/\s+/)
116
+ .filter(Boolean)
117
+ .map((name) => `.${name}`);
118
+ const id = attr(node, 'id');
119
+ if (id)
120
+ tokens.push(`#${id}`);
121
+ elementsTokens.push({ tag: node.tag.toLowerCase(), tokens, owner: own });
122
+ for (const child of elementChildren(node))
123
+ collect(child, own);
124
+ };
125
+ collect(doc.body, SHARED);
126
+ const styleElements = [
127
+ ...allOf(doc.head, isStyleSource),
128
+ ...allOf(doc.body, (node) => node.tag === 'link' && isStyleSource(node)),
129
+ ];
130
+ const styles = await buildStyles({
131
+ elements: styleElements,
132
+ pageUrl: baseHref,
133
+ network,
134
+ readBody: (file) => run.text(file),
135
+ local,
136
+ elementsTokens,
137
+ });
138
+ const scripts = await planScripts({
139
+ elements: allOf(doc.root, (node) => node.tag === 'script'),
140
+ pageUrl: baseHref,
141
+ network,
142
+ stack: run.manifest.stack.map((signal) => signal.id),
143
+ readBody: (file) => run.text(file),
144
+ publicDir: `original/${slug}`,
145
+ project,
146
+ });
147
+ if (scripts.dropped.length)
148
+ log(`kept ${String(scripts.kept)} original scripts, left out ${String(scripts.dropped.length)} (tracking, consent, app runtime)`);
149
+ // Sections → components.
150
+ const taken = new Set();
151
+ const unknownTags = new Set();
152
+ const sections = [];
153
+ const nameOf = new Map();
154
+ for (const [i, section] of located.entries()) {
155
+ const name = componentName(labelOf(section), 'Section', taken);
156
+ nameOf.set(section.element, name);
157
+ const state = newJsxState();
158
+ const jsxOptions = { url: rewrite };
159
+ const root = {
160
+ ...section.element,
161
+ attrs: [...section.element.attrs, ['data-mc-section', section.id]],
162
+ };
163
+ const jsx = renderElement(root, jsxOptions, state);
164
+ for (const tag of state.unknownTags)
165
+ unknownTags.add(tag);
166
+ const css = styles.sections.get(i);
167
+ const dir = join(sectionsDir, name);
168
+ await ensureDir(dir);
169
+ if (css)
170
+ await writeFile(join(dir, `${name}.css`), await pretty(css, 'css'));
171
+ await writeFile(join(dir, `${name}.tsx`), await pretty(sectionSource({
172
+ name,
173
+ label: section.label,
174
+ origin: pageUrl,
175
+ jsx,
176
+ css: css !== undefined,
177
+ cssProperties: state.cssProperties,
178
+ }), 'typescript'));
179
+ sections.push({
180
+ name,
181
+ label: section.label,
182
+ file: `src/sections/${slug}/${name}/${name}.tsx`,
183
+ elements: countElements(section.element),
184
+ truncated: false,
185
+ });
186
+ }
187
+ // The page: everything outside the sections stays in place around them.
188
+ const pageName = componentName(route === '/' ? 'home' : route, 'Page', new Set());
189
+ const pageState = newJsxState();
190
+ const pageJsx = renderChildren(doc.body, {
191
+ url: rewrite,
192
+ replace: (element) => {
193
+ const name = nameOf.get(element);
194
+ return name ? `<${name} />` : null;
195
+ },
196
+ }, pageState);
197
+ for (const tag of pageState.unknownTags)
198
+ unknownTags.add(tag);
199
+ await ensureDir(join(project, 'src', 'pages'));
200
+ await writeFile(join(project, 'src', 'pages', `${pageName}.tsx`), await pretty(pageSource({
201
+ name: pageName,
202
+ slug,
203
+ route,
204
+ origin: pageUrl,
205
+ sections: sections.map((section) => section.name),
206
+ jsx: pageJsx,
207
+ cssProperties: pageState.cssProperties,
208
+ }), 'typescript'));
209
+ const stylesDir = join(project, 'src', 'styles', 'original', slug);
210
+ await ensureDir(stylesDir);
211
+ await writeFile(join(stylesDir, 'base.css'), `/* Original stylesheets of ${pageUrl}, URLs pointed at local copies. Rules used by only one section live next to it. */\n#mc-root {\n display: contents;\n}\n\n${styles.base}`);
212
+ await ensureDir(join(project, 'src', 'original'));
213
+ await ensureDir(join(project, 'src', 'lib'));
214
+ await writeFile(join(project, 'src', 'lib', 'original.ts'), await pretty(RUNTIME_SOURCE, 'typescript'));
215
+ await writeFile(join(project, 'src', 'original', `${slug}.ts`), await pretty(originalSource({
216
+ html: attributes(doc.html),
217
+ body: attributes(doc.body),
218
+ scripts: scripts.scripts,
219
+ }), 'typescript'));
220
+ await writeElementTypes(project, unknownTags);
221
+ for (const { file, local: path } of extra.values()) {
222
+ const target = join(project, 'public', ...path.split('/').filter(Boolean));
223
+ await ensureDir(join(target, '..'));
224
+ await copyFile(run.path(file), target).catch(() => undefined);
225
+ }
226
+ await writeApp(project);
227
+ const routes = [...new Set([route, ...(options.aliases ?? []).map(normalizeRoute)])];
228
+ await registerPages(project, routes.map((path) => ({ route: path, component: pageName, file: `@/pages/${pageName}` })));
229
+ if (styles.remote.length)
230
+ warnings.push(`${String(styles.remote.length)} stylesheet(s) were not captured and load from the original site.`);
231
+ log(`converted ${String(sections.length)} sections → src/sections/${slug} (route ${route}); CSS: ${String(styles.sheets)} sheets, ${String(styles.moved)} rules moved into sections`);
232
+ return {
233
+ route,
234
+ page: `src/pages/${pageName}.tsx`,
235
+ sections,
236
+ warnings,
237
+ source,
238
+ scripts: { kept: scripts.kept, dropped: scripts.dropped.length },
239
+ css: { sheets: styles.sheets, sectionRules: styles.moved, sharedRules: styles.kept },
240
+ };
241
+ }
242
+ /** The HTML the server sent, unless the page is client-rendered; then the DOM after JS ran. */
243
+ async function pickDocument(run, network, pageUrl, viewport) {
244
+ const strip = (url) => url.split('#')[0] ?? url;
245
+ const documents = network.filter((entry) => entry.resourceType === 'Document' && entry.file && entry.status < 400);
246
+ const entry = documents.find((item) => strip(item.url) === strip(pageUrl)) ??
247
+ documents.find((item) => item.mimeType.includes('html'));
248
+ const rawText = entry?.file ? await run.text(entry.file) : null;
249
+ const domText = (await run.text(`dom/${viewport}.html`)) ?? (await run.text('dom/desktop.html'));
250
+ const raw = rawText !== null ? parseDocument(rawText) : null;
251
+ const hydrated = domText !== null ? parseDocument(domText) : null;
252
+ if (raw && hydrated) {
253
+ const rawWords = textContent(raw.body).replace(/\s+/g, ' ').length;
254
+ const domWords = textContent(hydrated.body).replace(/\s+/g, ' ').length;
255
+ return rawWords >= domWords * 0.5
256
+ ? { doc: raw, hydrated, source: 'original' }
257
+ : { doc: hydrated, hydrated, source: 'rendered' };
258
+ }
259
+ if (raw)
260
+ return { doc: raw, hydrated: null, source: 'original' };
261
+ if (hydrated)
262
+ return { doc: hydrated, hydrated, source: 'rendered' };
263
+ throw new Error(`The capture in ${run.dir} has neither the page HTML nor a DOM snapshot.`);
264
+ }
265
+ function isStyleSource(node) {
266
+ if (node.tag === 'style')
267
+ return true;
268
+ if (node.tag !== 'link')
269
+ return false;
270
+ const rel = (attr(node, 'rel') ?? '').toLowerCase();
271
+ return rel.includes('stylesheet') || (rel.includes('preload') && attr(node, 'as') === 'style');
272
+ }
273
+ function allOf(root, test) {
274
+ const out = [];
275
+ const walk = (node) => {
276
+ if (test(node))
277
+ out.push(node);
278
+ for (const child of elementChildren(node))
279
+ walk(child);
280
+ };
281
+ walk(root);
282
+ return out;
283
+ }
284
+ function attributes(node) {
285
+ const out = {};
286
+ for (const [name, value] of node.attrs) {
287
+ if (/^[a-zA-Z_][\w\-:.]*$/.test(name) && !/^on/i.test(name))
288
+ out[name.toLowerCase()] = decodeEntities(value);
289
+ }
290
+ return out;
291
+ }
292
+ function countElements(node) {
293
+ return elementChildren(node).reduce((sum, child) => sum + countElements(child), 1);
294
+ }
295
+ function labelOf(section) {
296
+ return /^(block|section)[- ]?\d+$/i.test(section.label)
297
+ ? (attr(section.element, 'id') ?? section.label)
298
+ : section.label;
299
+ }
300
+ function normalizeRoute(route) {
301
+ const path = route.startsWith('/') ? route : `/${route}`;
302
+ return path.length > 1 ? path.replace(/\/+$/, '') : '/';
303
+ }
304
+ //# sourceMappingURL=convert.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/project/convert/convert.ts"],"names":[],"mappings":"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"}