multiclone 0.2.1 → 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.
- package/README.md +4 -4
- package/agents/section-builder.md +5 -3
- package/commands/multiclone.md +2 -2
- package/dist/contracts/tools/session.js +9 -8
- package/dist/contracts/tools/session.js.map +1 -1
- package/dist/project/assets.js +15 -13
- package/dist/project/assets.js.map +1 -1
- package/dist/project/convert/attrs.js +318 -0
- package/dist/project/convert/attrs.js.map +1 -0
- package/dist/project/convert/convert.js +304 -0
- package/dist/project/convert/convert.js.map +1 -0
- package/dist/project/convert/css.js +299 -0
- package/dist/project/convert/css.js.map +1 -0
- package/dist/project/convert/html.js +425 -0
- package/dist/project/convert/html.js.map +1 -0
- package/dist/project/convert/jsx.js +335 -0
- package/dist/project/convert/jsx.js.map +1 -0
- package/dist/project/convert/locate.js +180 -0
- package/dist/project/convert/locate.js.map +1 -0
- package/dist/project/convert/scripts.js +214 -0
- package/dist/project/convert/scripts.js.map +1 -0
- package/dist/project/convert/styles.js +228 -0
- package/dist/project/convert/styles.js.map +1 -0
- package/dist/project/convert/write.js +142 -0
- package/dist/project/convert/write.js.map +1 -0
- package/dist/project/fonts.js +131 -0
- package/dist/project/fonts.js.map +1 -0
- package/dist/project/libraries.js +28 -0
- package/dist/project/libraries.js.map +1 -0
- package/dist/project/method.js +1 -1
- package/dist/project/method.js.map +1 -1
- package/dist/project/scaffold.js +33 -6
- package/dist/project/scaffold.js.map +1 -1
- package/dist/session/proc.js +29 -1
- package/dist/session/proc.js.map +1 -1
- package/dist/session/session.js +47 -4
- package/dist/session/session.js.map +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
- package/skills/multiclone/SKILL.md +15 -5
- package/templates/react-vite/index.html +1 -1
- package/templates/react-vite/src/main.tsx +2 -2
- package/templates/react-vite/src/styles/index.css +0 -1
- package/dist/project/draft.js +0 -860
- package/dist/project/draft.js.map +0 -1
- package/templates/react-vite/src/styles/draft.css +0 -1
|
@@ -0,0 +1,335 @@
|
|
|
1
|
+
import { BOOLEAN, htmlPropName, isTypedProp, NUMERIC, styleKey, svgPropName } from './attrs.js';
|
|
2
|
+
import { decodeEntities, innerHtml } from './html.js';
|
|
3
|
+
export function newJsxState() {
|
|
4
|
+
return { unknownTags: new Set(), cssProperties: false };
|
|
5
|
+
}
|
|
6
|
+
const DROP = new Set(['script', 'noscript', 'link', 'meta', 'base', 'title', 'head']);
|
|
7
|
+
const BLOCK = new Set('address article aside blockquote body dd details dialog div dl dt fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 header hgroup hr li main nav ol p pre section summary table tbody td tfoot th thead tr ul video canvas iframe picture source style template'.split(' '));
|
|
8
|
+
const VOID = new Set([
|
|
9
|
+
'area',
|
|
10
|
+
'base',
|
|
11
|
+
'br',
|
|
12
|
+
'col',
|
|
13
|
+
'embed',
|
|
14
|
+
'hr',
|
|
15
|
+
'img',
|
|
16
|
+
'input',
|
|
17
|
+
'link',
|
|
18
|
+
'meta',
|
|
19
|
+
'param',
|
|
20
|
+
'source',
|
|
21
|
+
'track',
|
|
22
|
+
'wbr',
|
|
23
|
+
]);
|
|
24
|
+
/** Tags in React's JSX.IntrinsicElements; anything else is declared by the converter. */
|
|
25
|
+
const KNOWN = new Set('a abbr address area article aside audio b base bdi bdo big blockquote body br button canvas caption center cite code col colgroup data datalist dd del details dfn dialog div dl dt em embed fieldset figcaption figure footer form h1 h2 h3 h4 h5 h6 head header hgroup hr html i iframe img input ins kbd keygen label legend li link main map mark menu menuitem meta meter nav noindex noscript object ol optgroup option output p param picture pre progress q rp rt ruby s samp search slot script section select small source span strong style sub summary sup table template tbody td textarea tfoot th thead time title tr track u ul var video wbr webview svg animate animateMotion animateTransform circle clipPath defs desc ellipse filter foreignObject g image line linearGradient marker mask metadata mpath path pattern polygon polyline radialGradient rect set stop switch symbol text textPath tspan use view'.split(' '));
|
|
26
|
+
const SVG_TYPED = new Set('className id style viewBox d fill stroke strokeWidth strokeLinecap strokeLinejoin strokeMiterlimit strokeDasharray strokeDashoffset strokeOpacity fillRule fillOpacity clipRule clipPath clipPathUnits mask maskUnits maskContentUnits opacity transform x y x1 x2 y1 y2 cx cy r rx ry fx fy width height points offset stopColor stopOpacity gradientUnits gradientTransform spreadMethod href xlinkHref preserveAspectRatio patternUnits patternContentUnits patternTransform filter filterUnits primitiveUnits stdDeviation in in2 result mode operator values type dx dy textAnchor dominantBaseline fontFamily fontSize fontWeight letterSpacing pathLength markerWidth markerHeight markerUnits orient refX refY xmlSpace xmlnsXlink focusable role tabIndex vectorEffect colorInterpolationFilters floodColor floodOpacity lightingColor visibility display overflow shapeRendering imageRendering textRendering paintOrder'.split(' '));
|
|
27
|
+
const ARIA_TYPED = new Set([
|
|
28
|
+
'aria-label',
|
|
29
|
+
'aria-labelledby',
|
|
30
|
+
'aria-describedby',
|
|
31
|
+
'aria-controls',
|
|
32
|
+
'aria-owns',
|
|
33
|
+
'aria-roledescription',
|
|
34
|
+
]);
|
|
35
|
+
const ARIA_BOOL = new Set([
|
|
36
|
+
'aria-hidden',
|
|
37
|
+
'aria-expanded',
|
|
38
|
+
'aria-selected',
|
|
39
|
+
'aria-checked',
|
|
40
|
+
'aria-pressed',
|
|
41
|
+
'aria-disabled',
|
|
42
|
+
'aria-modal',
|
|
43
|
+
'aria-busy',
|
|
44
|
+
'aria-required',
|
|
45
|
+
'aria-readonly',
|
|
46
|
+
'aria-atomic',
|
|
47
|
+
]);
|
|
48
|
+
const URL_ATTRS = new Set([
|
|
49
|
+
'src',
|
|
50
|
+
'href',
|
|
51
|
+
'poster',
|
|
52
|
+
'data',
|
|
53
|
+
'data-src',
|
|
54
|
+
'data-bg',
|
|
55
|
+
'data-background',
|
|
56
|
+
'data-poster',
|
|
57
|
+
'data-video-src',
|
|
58
|
+
'xlink:href',
|
|
59
|
+
]);
|
|
60
|
+
const SRCSET_ATTRS = new Set(['srcset', 'data-srcset', 'imagesrcset']);
|
|
61
|
+
/** JSX for a node's children. */
|
|
62
|
+
export function renderChildren(parent, options, state) {
|
|
63
|
+
const kids = parent.children.filter((node) => node.kind === 'text' || !DROP.has(node.tag));
|
|
64
|
+
const preserve = parent.tag === 'pre' || hasPreAncestor(parent);
|
|
65
|
+
let out = '';
|
|
66
|
+
kids.forEach((node, index) => {
|
|
67
|
+
if (node.kind === 'element') {
|
|
68
|
+
const prev = kids[index - 1];
|
|
69
|
+
if (prev?.kind === 'element')
|
|
70
|
+
out += '\n';
|
|
71
|
+
out += renderElement(node, options, state);
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
const text = decodeEntities(node.raw);
|
|
75
|
+
if (preserve) {
|
|
76
|
+
if (text)
|
|
77
|
+
out += `{${JSON.stringify(text)}}`;
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const collapsed = text.replace(/[\t\n\r\f ]+/g, ' ');
|
|
81
|
+
const prev = kids[index - 1];
|
|
82
|
+
const next = kids[index + 1];
|
|
83
|
+
if (collapsed === ' ') {
|
|
84
|
+
if (!prev || !next)
|
|
85
|
+
return;
|
|
86
|
+
if ((prev.kind === 'element' && BLOCK.has(prev.tag)) ||
|
|
87
|
+
(next.kind === 'element' && BLOCK.has(next.tag)))
|
|
88
|
+
return;
|
|
89
|
+
out += "{' '}";
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
let body = collapsed;
|
|
93
|
+
const lead = body.startsWith(' ') && prev !== undefined;
|
|
94
|
+
const trail = body.endsWith(' ') && next !== undefined;
|
|
95
|
+
body = body.trim();
|
|
96
|
+
out += `${lead ? "{' '}" : ''}${escapeText(body)}${trail ? "{' '}" : ''}`;
|
|
97
|
+
});
|
|
98
|
+
return out;
|
|
99
|
+
}
|
|
100
|
+
function hasPreAncestor(node) {
|
|
101
|
+
for (let at = node.parent; at; at = at.parent)
|
|
102
|
+
if (at.tag === 'pre')
|
|
103
|
+
return true;
|
|
104
|
+
return false;
|
|
105
|
+
}
|
|
106
|
+
function escapeText(text) {
|
|
107
|
+
return text
|
|
108
|
+
.replace(/&/g, '&')
|
|
109
|
+
.replace(/[{}<>]/g, (ch) => `{'${ch}'}`)
|
|
110
|
+
.replace(/\u00a0/g, ' ');
|
|
111
|
+
}
|
|
112
|
+
/** JSX for one element (and its subtree). */
|
|
113
|
+
export function renderElement(node, options, state) {
|
|
114
|
+
const replaced = options.replace?.(node);
|
|
115
|
+
if (replaced !== null && replaced !== undefined)
|
|
116
|
+
return replaced;
|
|
117
|
+
if (node.tag.includes(':') && !node.foreign)
|
|
118
|
+
return renderChildren(node, options, state);
|
|
119
|
+
const tag = node.tag;
|
|
120
|
+
if (!KNOWN.has(tag) && !(node.foreign && /^fe[A-Z]/.test(tag)))
|
|
121
|
+
state.unknownTags.add(tag);
|
|
122
|
+
const loose = state.unknownTags.has(tag);
|
|
123
|
+
const props = renderProps(node, options, state, loose);
|
|
124
|
+
const open = `<${tag}${props ? ` ${props}` : ''}`;
|
|
125
|
+
if (tag === 'textarea') {
|
|
126
|
+
const value = decodeEntities(node.children.map((child) => (child.kind === 'text' ? child.raw : '')).join(''));
|
|
127
|
+
return `${open}${value ? ` defaultValue={${JSON.stringify(value)}}` : ''} />`;
|
|
128
|
+
}
|
|
129
|
+
if (tag === 'style') {
|
|
130
|
+
const css = node.children.map((child) => (child.kind === 'text' ? child.raw : '')).join('');
|
|
131
|
+
return `${open}>{${JSON.stringify(rewriteStyleUrls(css, options))}}</${tag}>`;
|
|
132
|
+
}
|
|
133
|
+
if (tag === 'template') {
|
|
134
|
+
return `${open} dangerouslySetInnerHTML={{ __html: ${JSON.stringify(innerHtml(node))} }} />`;
|
|
135
|
+
}
|
|
136
|
+
if (VOID.has(tag) && !node.foreign)
|
|
137
|
+
return `${open} />`;
|
|
138
|
+
const inner = renderChildren(node, options, state);
|
|
139
|
+
return inner ? `${open}>${inner}</${tag}>` : `${open} />`;
|
|
140
|
+
}
|
|
141
|
+
function renderProps(node, options, state, loose) {
|
|
142
|
+
const direct = [];
|
|
143
|
+
const spread = [];
|
|
144
|
+
const seen = new Set();
|
|
145
|
+
for (const [rawName, rawValue] of node.attrs) {
|
|
146
|
+
const name = node.foreign ? rawName : rawName.toLowerCase();
|
|
147
|
+
if (seen.has(name))
|
|
148
|
+
continue;
|
|
149
|
+
seen.add(name);
|
|
150
|
+
// setAttribute rejects these characters (Alpine `@click`, Vue `:class`); the DOM never saw them as data either.
|
|
151
|
+
if (!/^[a-zA-Z_][\w\-:.]*$/.test(name))
|
|
152
|
+
continue;
|
|
153
|
+
let value = decodeEntities(rawValue);
|
|
154
|
+
if (/^on[a-z]+$/.test(name)) {
|
|
155
|
+
direct.push(`data-mc-${name}=${quote(value)}`);
|
|
156
|
+
continue;
|
|
157
|
+
}
|
|
158
|
+
if (name === 'style') {
|
|
159
|
+
const style = renderStyle(value, options, state);
|
|
160
|
+
if (style)
|
|
161
|
+
direct.push(`style={${style}}`);
|
|
162
|
+
continue;
|
|
163
|
+
}
|
|
164
|
+
if (URL_ATTRS.has(name) &&
|
|
165
|
+
value &&
|
|
166
|
+
!value.startsWith('#') &&
|
|
167
|
+
!/^(data|javascript|mailto|tel|blob):/i.test(value))
|
|
168
|
+
value = options.url(value, name === 'href' && !node.foreign && node.tag !== 'link' ? 'link' : 'resource');
|
|
169
|
+
if (SRCSET_ATTRS.has(name))
|
|
170
|
+
value = rewriteSrcset(value, options);
|
|
171
|
+
if (name === 'class')
|
|
172
|
+
value = value.replace(/\s+/g, ' ').trim();
|
|
173
|
+
if (node.foreign) {
|
|
174
|
+
const prop = svgPropName(name);
|
|
175
|
+
if (prop && SVG_TYPED.has(prop))
|
|
176
|
+
direct.push(`${prop}=${quote(value)}`);
|
|
177
|
+
else if (prop?.includes('-') && /^[a-zA-Z][\w-]*$/.test(prop))
|
|
178
|
+
direct.push(`${prop}=${quote(value)}`);
|
|
179
|
+
else
|
|
180
|
+
spread.push([name, value]);
|
|
181
|
+
continue;
|
|
182
|
+
}
|
|
183
|
+
if (name.startsWith('aria-')) {
|
|
184
|
+
if (ARIA_TYPED.has(name) || (ARIA_BOOL.has(name) && (value === 'true' || value === 'false')))
|
|
185
|
+
direct.push(`${name}=${quote(value)}`);
|
|
186
|
+
else
|
|
187
|
+
spread.push([name, value]);
|
|
188
|
+
continue;
|
|
189
|
+
}
|
|
190
|
+
if (name.includes('-') && !name.includes(':') && /^[a-zA-Z][\w-]*$/.test(name)) {
|
|
191
|
+
direct.push(`${name}=${quote(value)}`);
|
|
192
|
+
continue;
|
|
193
|
+
}
|
|
194
|
+
let prop = htmlPropName(name);
|
|
195
|
+
if (/^(input|select|textarea)$/.test(node.tag) && (prop === 'value' || prop === 'checked')) {
|
|
196
|
+
if (prop === 'value')
|
|
197
|
+
direct.push(`defaultValue=${quote(value)}`);
|
|
198
|
+
else
|
|
199
|
+
direct.push('defaultChecked');
|
|
200
|
+
continue;
|
|
201
|
+
}
|
|
202
|
+
if (node.tag === 'option' && name === 'selected')
|
|
203
|
+
continue;
|
|
204
|
+
if (loose) {
|
|
205
|
+
if (prop === 'className' || /^[a-zA-Z][\w]*$/.test(prop))
|
|
206
|
+
direct.push(`${prop}=${quote(value)}`);
|
|
207
|
+
else
|
|
208
|
+
spread.push([name, value]);
|
|
209
|
+
continue;
|
|
210
|
+
}
|
|
211
|
+
if (BOOLEAN.has(prop) && (value === '' || value.toLowerCase() === name || value === 'true')) {
|
|
212
|
+
if (isTypedProp(node.tag, prop, '')) {
|
|
213
|
+
direct.push(prop);
|
|
214
|
+
continue;
|
|
215
|
+
}
|
|
216
|
+
}
|
|
217
|
+
if (!BOOLEAN.has(prop) && isTypedProp(node.tag, prop, value)) {
|
|
218
|
+
direct.push(NUMERIC.has(prop) ? `${prop}={${String(Number(value.trim()))}}` : `${prop}=${quote(value)}`);
|
|
219
|
+
continue;
|
|
220
|
+
}
|
|
221
|
+
if (prop === 'className') {
|
|
222
|
+
direct.push(`className=${quote(value)}`);
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
prop = name;
|
|
226
|
+
spread.push([prop, value]);
|
|
227
|
+
}
|
|
228
|
+
if (spread.length) {
|
|
229
|
+
const entries = spread
|
|
230
|
+
.map(([key, value]) => `${JSON.stringify(key)}: ${JSON.stringify(value)}`)
|
|
231
|
+
.join(', ');
|
|
232
|
+
direct.push(`{...({ ${entries} } as Record<string, string>)}`);
|
|
233
|
+
}
|
|
234
|
+
return direct.join(' ');
|
|
235
|
+
}
|
|
236
|
+
function quote(value) {
|
|
237
|
+
// JSX attribute strings cannot hold escapes; expressions can.
|
|
238
|
+
return /["\\\n\r{}]|&/.test(value) || value.includes("'")
|
|
239
|
+
? `{${JSON.stringify(value)}}`
|
|
240
|
+
: `"${value}"`;
|
|
241
|
+
}
|
|
242
|
+
function renderStyle(source, options, state) {
|
|
243
|
+
const entries = [];
|
|
244
|
+
let custom = false;
|
|
245
|
+
for (const decl of splitDecls(source)) {
|
|
246
|
+
const colon = decl.indexOf(':');
|
|
247
|
+
if (colon <= 0)
|
|
248
|
+
continue;
|
|
249
|
+
const property = decl.slice(0, colon).trim();
|
|
250
|
+
let value = decl
|
|
251
|
+
.slice(colon + 1)
|
|
252
|
+
.trim()
|
|
253
|
+
.replace(/\s*!important\s*$/i, '');
|
|
254
|
+
if (!property || !value)
|
|
255
|
+
continue;
|
|
256
|
+
value = rewriteStyleUrls(value, options);
|
|
257
|
+
const key = styleKey(property);
|
|
258
|
+
if (key.startsWith('--'))
|
|
259
|
+
custom = true;
|
|
260
|
+
entries.push(`${/^[a-zA-Z_$][\w$]*$/.test(key) ? key : JSON.stringify(key)}: ${JSON.stringify(value)}`);
|
|
261
|
+
}
|
|
262
|
+
if (!entries.length)
|
|
263
|
+
return null;
|
|
264
|
+
if (custom)
|
|
265
|
+
state.cssProperties = true;
|
|
266
|
+
const object = `{ ${entries.join(', ')} }`;
|
|
267
|
+
return custom ? `${object} as CSSProperties` : object;
|
|
268
|
+
}
|
|
269
|
+
function splitDecls(source) {
|
|
270
|
+
const out = [];
|
|
271
|
+
let depth = 0;
|
|
272
|
+
let quoteChar = '';
|
|
273
|
+
let start = 0;
|
|
274
|
+
for (let i = 0; i < source.length; i++) {
|
|
275
|
+
const ch = source[i];
|
|
276
|
+
if (quoteChar) {
|
|
277
|
+
if (ch === '\\')
|
|
278
|
+
i++;
|
|
279
|
+
else if (ch === quoteChar)
|
|
280
|
+
quoteChar = '';
|
|
281
|
+
continue;
|
|
282
|
+
}
|
|
283
|
+
if (ch === '"' || ch === "'")
|
|
284
|
+
quoteChar = ch;
|
|
285
|
+
else if (ch === '(')
|
|
286
|
+
depth++;
|
|
287
|
+
else if (ch === ')')
|
|
288
|
+
depth = Math.max(0, depth - 1);
|
|
289
|
+
else if (ch === ';' && depth === 0) {
|
|
290
|
+
out.push(source.slice(start, i));
|
|
291
|
+
start = i + 1;
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
out.push(source.slice(start));
|
|
295
|
+
return out.map((decl) => decl.trim()).filter(Boolean);
|
|
296
|
+
}
|
|
297
|
+
/** url(...) inside inline styles and <style> blocks, rewritten like resource attributes. */
|
|
298
|
+
export function rewriteStyleUrls(css, options) {
|
|
299
|
+
return css.replace(/url\(\s*(["']?)([^"')]*)\1\s*\)/gi, (match, _quote, url) => {
|
|
300
|
+
const raw = url.trim();
|
|
301
|
+
if (!raw || /^(data|blob):/i.test(raw) || raw.startsWith('#'))
|
|
302
|
+
return match;
|
|
303
|
+
return `url('${options.url(raw, 'resource')}')`;
|
|
304
|
+
});
|
|
305
|
+
}
|
|
306
|
+
/** srcset candidates (`a.png 1x, b.png 2x`), each URL rewritten; data: URLs stay whole. */
|
|
307
|
+
export function rewriteSrcset(value, options) {
|
|
308
|
+
const out = [];
|
|
309
|
+
let i = 0;
|
|
310
|
+
while (i < value.length) {
|
|
311
|
+
while (i < value.length && /[\s,]/.test(value[i] ?? ''))
|
|
312
|
+
i++;
|
|
313
|
+
if (i >= value.length)
|
|
314
|
+
break;
|
|
315
|
+
let end = i;
|
|
316
|
+
while (end < value.length && !/\s/.test(value[end] ?? ''))
|
|
317
|
+
end++;
|
|
318
|
+
let url = value.slice(i, end);
|
|
319
|
+
let descriptor = '';
|
|
320
|
+
if (url.endsWith(','))
|
|
321
|
+
url = url.replace(/,+$/, '');
|
|
322
|
+
else {
|
|
323
|
+
const comma = value.indexOf(',', end);
|
|
324
|
+
descriptor = value.slice(end, comma === -1 ? value.length : comma).trim();
|
|
325
|
+
end = comma === -1 ? value.length : comma;
|
|
326
|
+
}
|
|
327
|
+
i = end + 1;
|
|
328
|
+
if (!url)
|
|
329
|
+
continue;
|
|
330
|
+
const local = /^(data|blob):/i.test(url) ? url : options.url(url, 'resource');
|
|
331
|
+
out.push(descriptor ? `${local} ${descriptor}` : local);
|
|
332
|
+
}
|
|
333
|
+
return out.join(', ');
|
|
334
|
+
}
|
|
335
|
+
//# sourceMappingURL=jsx.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"jsx.js","sourceRoot":"","sources":["../../../src/project/convert/jsx.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import { attr, elementChildren, textContent } from './html.js';
|
|
2
|
+
const SKIP = new Set(['script', 'style', 'noscript', 'template', 'link', 'meta']);
|
|
3
|
+
/** Element a capture path (`body > div:nth-of-type(2) > main`, `#hero > h1`) points at. */
|
|
4
|
+
export function resolvePath(doc, path) {
|
|
5
|
+
const steps = (path.split(' >>> ')[0] ?? '').split(/\s*>\s*/).filter(Boolean);
|
|
6
|
+
let current = null;
|
|
7
|
+
for (const step of steps) {
|
|
8
|
+
if (step === 'html') {
|
|
9
|
+
current = doc.html;
|
|
10
|
+
continue;
|
|
11
|
+
}
|
|
12
|
+
if (step === 'body') {
|
|
13
|
+
current = doc.body;
|
|
14
|
+
continue;
|
|
15
|
+
}
|
|
16
|
+
if (step.startsWith('#')) {
|
|
17
|
+
current = findById(doc.root, step.slice(1));
|
|
18
|
+
if (!current)
|
|
19
|
+
return null;
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const match = /^([a-zA-Z][\w-]*)(?::nth-of-type\((\d+)\))?$/.exec(step);
|
|
23
|
+
if (!match || !current)
|
|
24
|
+
return null;
|
|
25
|
+
const tag = (match[1] ?? '').toLowerCase();
|
|
26
|
+
const same = elementChildren(current).filter((child) => child.tag.toLowerCase() === tag);
|
|
27
|
+
const nth = match[2] ? Number(match[2]) : 1;
|
|
28
|
+
current = same[nth - 1] ?? null;
|
|
29
|
+
if (!current)
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
return current;
|
|
33
|
+
}
|
|
34
|
+
function findById(node, id) {
|
|
35
|
+
if (attr(node, 'id') === id)
|
|
36
|
+
return node;
|
|
37
|
+
for (const child of elementChildren(node)) {
|
|
38
|
+
const found = findById(child, id);
|
|
39
|
+
if (found)
|
|
40
|
+
return found;
|
|
41
|
+
}
|
|
42
|
+
return null;
|
|
43
|
+
}
|
|
44
|
+
/** Same element in another parse of the page: by id, then tag + class list + leading text. */
|
|
45
|
+
export function counterpart(target, element) {
|
|
46
|
+
const id = attr(element, 'id');
|
|
47
|
+
if (id) {
|
|
48
|
+
const found = findById(target.root, id);
|
|
49
|
+
if (found)
|
|
50
|
+
return found;
|
|
51
|
+
}
|
|
52
|
+
const cls = (attr(element, 'class') ?? '').trim();
|
|
53
|
+
if (!cls)
|
|
54
|
+
return null;
|
|
55
|
+
const text = textContent(element).replace(/\s+/g, ' ').trim().slice(0, 60);
|
|
56
|
+
const matches = [];
|
|
57
|
+
const walk = (node) => {
|
|
58
|
+
if (node.tag === element.tag && (attr(node, 'class') ?? '').trim() === cls)
|
|
59
|
+
matches.push(node);
|
|
60
|
+
for (const child of elementChildren(node))
|
|
61
|
+
walk(child);
|
|
62
|
+
};
|
|
63
|
+
walk(target.body);
|
|
64
|
+
const sameText = matches.filter((node) => textContent(node).replace(/\s+/g, ' ').trim().slice(0, 60) === text);
|
|
65
|
+
return (sameText.length === 1 ? sameText[0] : matches.length === 1 ? matches[0] : null) ?? null;
|
|
66
|
+
}
|
|
67
|
+
function contains(outer, inner) {
|
|
68
|
+
for (let node = inner; node; node = node.parent)
|
|
69
|
+
if (node === outer)
|
|
70
|
+
return true;
|
|
71
|
+
return false;
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* Sections from the capture's index, resolved in this document (falling back to a match through
|
|
75
|
+
* the hydrated DOM), without overlaps, in document order.
|
|
76
|
+
*/
|
|
77
|
+
export function locateSections(doc, index, viewport, hydrated) {
|
|
78
|
+
const kept = [];
|
|
79
|
+
for (const entry of index) {
|
|
80
|
+
const path = entry.viewports[viewport]?.path ?? Object.values(entry.viewports).find(Boolean)?.path;
|
|
81
|
+
if (!path)
|
|
82
|
+
continue;
|
|
83
|
+
let element = resolvePath(doc, path);
|
|
84
|
+
if (hydrated && hydrated !== doc) {
|
|
85
|
+
const live = resolvePath(hydrated, path);
|
|
86
|
+
const twin = live ? counterpart(doc, live) : null;
|
|
87
|
+
if (twin)
|
|
88
|
+
element = twin;
|
|
89
|
+
}
|
|
90
|
+
if (!element || element === doc.body || element === doc.html)
|
|
91
|
+
continue;
|
|
92
|
+
if (kept.some((section) => contains(section.element, element) || contains(element, section.element)))
|
|
93
|
+
continue;
|
|
94
|
+
kept.push({ id: entry.id, label: entry.label, element });
|
|
95
|
+
}
|
|
96
|
+
const order = documentOrder(doc.body);
|
|
97
|
+
return kept.sort((a, b) => (order.get(a.element) ?? 0) - (order.get(b.element) ?? 0));
|
|
98
|
+
}
|
|
99
|
+
function documentOrder(root) {
|
|
100
|
+
const order = new Map();
|
|
101
|
+
const walk = (node) => {
|
|
102
|
+
order.set(node, order.size);
|
|
103
|
+
for (const child of elementChildren(node))
|
|
104
|
+
walk(child);
|
|
105
|
+
};
|
|
106
|
+
walk(root);
|
|
107
|
+
return order;
|
|
108
|
+
}
|
|
109
|
+
/** Sections when the capture has no split: the visible blocks of <main> (or the body). */
|
|
110
|
+
export function fallbackSections(doc) {
|
|
111
|
+
const main = findTag(doc.body, 'main');
|
|
112
|
+
let container = main ?? doc.body;
|
|
113
|
+
for (let guard = 0; guard < 8; guard++) {
|
|
114
|
+
const kids = elementChildren(container).filter((child) => !SKIP.has(child.tag));
|
|
115
|
+
if (kids.length !== 1 || !kids[0])
|
|
116
|
+
break;
|
|
117
|
+
container = kids[0];
|
|
118
|
+
}
|
|
119
|
+
const blocks = elementChildren(container).filter((child) => !SKIP.has(child.tag) &&
|
|
120
|
+
(textContent(child).trim() !== '' ||
|
|
121
|
+
['img', 'video', 'svg', 'picture', 'canvas'].includes(child.tag)));
|
|
122
|
+
const chosen = blocks.length > 1 ? blocks : [container];
|
|
123
|
+
return chosen.map((element, index) => ({
|
|
124
|
+
id: `block-${String(index + 1)}`,
|
|
125
|
+
label: labelFor(element) ?? `block ${String(index + 1)}`,
|
|
126
|
+
element,
|
|
127
|
+
}));
|
|
128
|
+
}
|
|
129
|
+
function findTag(node, tag) {
|
|
130
|
+
if (node.tag === tag)
|
|
131
|
+
return node;
|
|
132
|
+
for (const child of elementChildren(node)) {
|
|
133
|
+
const found = findTag(child, tag);
|
|
134
|
+
if (found)
|
|
135
|
+
return found;
|
|
136
|
+
}
|
|
137
|
+
return null;
|
|
138
|
+
}
|
|
139
|
+
/** Readable name from an element's id, first class or heading. */
|
|
140
|
+
export function labelFor(element) {
|
|
141
|
+
const id = attr(element, 'id');
|
|
142
|
+
if (id && !/\d{4,}/.test(id))
|
|
143
|
+
return id;
|
|
144
|
+
const heading = findFirst(element, (node) => /^h[1-3]$/.test(node.tag));
|
|
145
|
+
const text = heading ? textContent(heading).replace(/\s+/g, ' ').trim() : '';
|
|
146
|
+
if (text)
|
|
147
|
+
return text.split(' ').slice(0, 4).join(' ');
|
|
148
|
+
const cls = (attr(element, 'class') ?? '')
|
|
149
|
+
.split(/\s+/)
|
|
150
|
+
.find((name) => name && !/^(w-|is-|js-)/.test(name));
|
|
151
|
+
return cls ?? element.tag;
|
|
152
|
+
}
|
|
153
|
+
function findFirst(node, test) {
|
|
154
|
+
for (const child of elementChildren(node)) {
|
|
155
|
+
if (test(child))
|
|
156
|
+
return child;
|
|
157
|
+
const found = findFirst(child, test);
|
|
158
|
+
if (found)
|
|
159
|
+
return found;
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
}
|
|
163
|
+
/** PascalCase component name (`HeroSection`); never starts with a digit, unique in `taken`. */
|
|
164
|
+
export function componentName(label, suffix, taken) {
|
|
165
|
+
const words = label
|
|
166
|
+
.replace(/[^a-zA-Z0-9]+/g, ' ')
|
|
167
|
+
.trim()
|
|
168
|
+
.split(/\s+/)
|
|
169
|
+
.filter(Boolean)
|
|
170
|
+
.slice(0, 4)
|
|
171
|
+
.map((word) => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
172
|
+
.join('');
|
|
173
|
+
const base = !words ? suffix : /^[A-Z]/.test(words) ? `${words}${suffix}` : `${suffix}${words}`;
|
|
174
|
+
let name = base;
|
|
175
|
+
for (let n = 2; taken.has(name); n++)
|
|
176
|
+
name = `${base}${String(n)}`;
|
|
177
|
+
taken.add(name);
|
|
178
|
+
return name;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=locate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"locate.js","sourceRoot":"","sources":["../../../src/project/convert/locate.ts"],"names":[],"mappings":"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"}
|