multiclone 0.0.0-stage → 0.2.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 +78 -2
- package/agents/section-builder.md +37 -0
- package/commands/multiclone.md +15 -0
- package/dist/adapters/cli.js +129 -0
- package/dist/adapters/cli.js.map +1 -0
- package/dist/adapters/cliArgs.js +63 -0
- package/dist/adapters/cliArgs.js.map +1 -0
- package/dist/adapters/mcp.js +83 -0
- package/dist/adapters/mcp.js.map +1 -0
- package/dist/analyze/analyze.js +85 -0
- package/dist/analyze/analyze.js.map +1 -0
- package/dist/analyze/animations.js +340 -0
- package/dist/analyze/animations.js.map +1 -0
- package/dist/analyze/ast.js +182 -0
- package/dist/analyze/ast.js.map +1 -0
- package/dist/analyze/chunks.js +160 -0
- package/dist/analyze/chunks.js.map +1 -0
- package/dist/analyze/jobs/code.js +117 -0
- package/dist/analyze/jobs/code.js.map +1 -0
- package/dist/analyze/jobs/sections.js +356 -0
- package/dist/analyze/jobs/sections.js.map +1 -0
- package/dist/analyze/pretty.js +20 -0
- package/dist/analyze/pretty.js.map +1 -0
- package/dist/analyze/report.js +101 -0
- package/dist/analyze/report.js.map +1 -0
- package/dist/analyze/worker.js +71 -0
- package/dist/analyze/worker.js.map +1 -0
- package/dist/capture/capture.js +340 -0
- package/dist/capture/capture.js.map +1 -0
- package/dist/capture/collectors/a11y.js +92 -0
- package/dist/capture/collectors/a11y.js.map +1 -0
- package/dist/capture/collectors/animations.js +113 -0
- package/dist/capture/collectors/animations.js.map +1 -0
- package/dist/capture/collectors/breakpoints.js +31 -0
- package/dist/capture/collectors/breakpoints.js.map +1 -0
- package/dist/capture/collectors/consent.js +39 -0
- package/dist/capture/collectors/consent.js.map +1 -0
- package/dist/capture/collectors/coverage.js +121 -0
- package/dist/capture/collectors/coverage.js.map +1 -0
- package/dist/capture/collectors/dom.js +16 -0
- package/dist/capture/collectors/dom.js.map +1 -0
- package/dist/capture/collectors/fonts.js +154 -0
- package/dist/capture/collectors/fonts.js.map +1 -0
- package/dist/capture/collectors/frames.js +93 -0
- package/dist/capture/collectors/frames.js.map +1 -0
- package/dist/capture/collectors/index.js +61 -0
- package/dist/capture/collectors/index.js.map +1 -0
- package/dist/capture/collectors/interactions.js +207 -0
- package/dist/capture/collectors/interactions.js.map +1 -0
- package/dist/capture/collectors/intro.js +84 -0
- package/dist/capture/collectors/intro.js.map +1 -0
- package/dist/capture/collectors/listeners.js +84 -0
- package/dist/capture/collectors/listeners.js.map +1 -0
- package/dist/capture/collectors/motion.js +91 -0
- package/dist/capture/collectors/motion.js.map +1 -0
- package/dist/capture/collectors/network.js +288 -0
- package/dist/capture/collectors/network.js.map +1 -0
- package/dist/capture/collectors/probes.js +34 -0
- package/dist/capture/collectors/probes.js.map +1 -0
- package/dist/capture/collectors/runtime.js +38 -0
- package/dist/capture/collectors/runtime.js.map +1 -0
- package/dist/capture/collectors/scripts.js +98 -0
- package/dist/capture/collectors/scripts.js.map +1 -0
- package/dist/capture/collectors/sections.js +17 -0
- package/dist/capture/collectors/sections.js.map +1 -0
- package/dist/capture/collectors/shots.js +58 -0
- package/dist/capture/collectors/shots.js.map +1 -0
- package/dist/capture/collectors/snapshot.js +47 -0
- package/dist/capture/collectors/snapshot.js.map +1 -0
- package/dist/capture/collectors/sourcemaps.js +153 -0
- package/dist/capture/collectors/sourcemaps.js.map +1 -0
- package/dist/capture/collectors/storage.js +72 -0
- package/dist/capture/collectors/storage.js.map +1 -0
- package/dist/capture/context.js +40 -0
- package/dist/capture/context.js.map +1 -0
- package/dist/capture/hooks/candidates.js +104 -0
- package/dist/capture/hooks/candidates.js.map +1 -0
- package/dist/capture/hooks/consent.js +82 -0
- package/dist/capture/hooks/consent.js.map +1 -0
- package/dist/capture/hooks/recorders.js +507 -0
- package/dist/capture/hooks/recorders.js.map +1 -0
- package/dist/capture/hooks/sections.js +62 -0
- package/dist/capture/hooks/sections.js.map +1 -0
- package/dist/capture/hooks/styles.js +86 -0
- package/dist/capture/hooks/styles.js.map +1 -0
- package/dist/capture/probes.js +491 -0
- package/dist/capture/probes.js.map +1 -0
- package/dist/capture/report.js +115 -0
- package/dist/capture/report.js.map +1 -0
- package/dist/compare/compare.js +391 -0
- package/dist/compare/compare.js.map +1 -0
- package/dist/compare/image.js +105 -0
- package/dist/compare/image.js.map +1 -0
- package/dist/compare/probes.js +129 -0
- package/dist/compare/probes.js.map +1 -0
- package/dist/compare/report.js +99 -0
- package/dist/compare/report.js.map +1 -0
- package/dist/compare/session.js +139 -0
- package/dist/compare/session.js.map +1 -0
- package/dist/compare/shoot.js +62 -0
- package/dist/compare/shoot.js.map +1 -0
- package/dist/contracts/catalog.js +29 -0
- package/dist/contracts/catalog.js.map +1 -0
- package/dist/contracts/context.js +19 -0
- package/dist/contracts/context.js.map +1 -0
- package/dist/contracts/fields.js +16 -0
- package/dist/contracts/fields.js.map +1 -0
- package/dist/contracts/tools/analyze.js +38 -0
- package/dist/contracts/tools/analyze.js.map +1 -0
- package/dist/contracts/tools/capture.js +87 -0
- package/dist/contracts/tools/capture.js.map +1 -0
- package/dist/contracts/tools/compare.js +142 -0
- package/dist/contracts/tools/compare.js.map +1 -0
- package/dist/contracts/tools/doctor.js +23 -0
- package/dist/contracts/tools/doctor.js.map +1 -0
- package/dist/contracts/tools/inspect.js +41 -0
- package/dist/contracts/tools/inspect.js.map +1 -0
- package/dist/contracts/tools/method.js +60 -0
- package/dist/contracts/tools/method.js.map +1 -0
- package/dist/contracts/tools/mirror.js +53 -0
- package/dist/contracts/tools/mirror.js.map +1 -0
- package/dist/contracts/tools/project.js +61 -0
- package/dist/contracts/tools/project.js.map +1 -0
- package/dist/contracts/tools/session.js +195 -0
- package/dist/contracts/tools/session.js.map +1 -0
- package/dist/contracts/types.js +20 -0
- package/dist/contracts/types.js.map +1 -0
- package/dist/core/cdp.js +146 -0
- package/dist/core/cdp.js.map +1 -0
- package/dist/core/chrome.js +185 -0
- package/dist/core/chrome.js.map +1 -0
- package/dist/core/files.js +31 -0
- package/dist/core/files.js.map +1 -0
- package/dist/core/inpage.js +24 -0
- package/dist/core/inpage.js.map +1 -0
- package/dist/core/log.js +10 -0
- package/dist/core/log.js.map +1 -0
- package/dist/core/page.js +269 -0
- package/dist/core/page.js.map +1 -0
- package/dist/doctor.js +37 -0
- package/dist/doctor.js.map +1 -0
- package/dist/domain/breakpoints.js +47 -0
- package/dist/domain/breakpoints.js.map +1 -0
- package/dist/domain/budget.js +38 -0
- package/dist/domain/budget.js.map +1 -0
- package/dist/domain/compare.js +138 -0
- package/dist/domain/compare.js.map +1 -0
- package/dist/domain/coverage.js +96 -0
- package/dist/domain/coverage.js.map +1 -0
- package/dist/domain/motion.js +142 -0
- package/dist/domain/motion.js.map +1 -0
- package/dist/domain/paths.js +55 -0
- package/dist/domain/paths.js.map +1 -0
- package/dist/domain/result.js +38 -0
- package/dist/domain/result.js.map +1 -0
- package/dist/domain/routes.js +160 -0
- package/dist/domain/routes.js.map +1 -0
- package/dist/domain/sections.js +94 -0
- package/dist/domain/sections.js.map +1 -0
- package/dist/domain/snapshot.js +268 -0
- package/dist/domain/snapshot.js.map +1 -0
- package/dist/domain/sourcemap.js +95 -0
- package/dist/domain/sourcemap.js.map +1 -0
- package/dist/domain/stack.js +342 -0
- package/dist/domain/stack.js.map +1 -0
- package/dist/domain/tokens.js +183 -0
- package/dist/domain/tokens.js.map +1 -0
- package/dist/domain/types.js +2 -0
- package/dist/domain/types.js.map +1 -0
- package/dist/domain/viewports.js +45 -0
- package/dist/domain/viewports.js.map +1 -0
- package/dist/mirror/rewrite.js +56 -0
- package/dist/mirror/rewrite.js.map +1 -0
- package/dist/mirror/server.js +191 -0
- package/dist/mirror/server.js.map +1 -0
- package/dist/mirror/store.js +86 -0
- package/dist/mirror/store.js.map +1 -0
- package/dist/project/assets.js +69 -0
- package/dist/project/assets.js.map +1 -0
- package/dist/project/draft.js +860 -0
- package/dist/project/draft.js.map +1 -0
- package/dist/project/method.js +154 -0
- package/dist/project/method.js.map +1 -0
- package/dist/project/scaffold.js +142 -0
- package/dist/project/scaffold.js.map +1 -0
- package/dist/session/discover.js +53 -0
- package/dist/session/discover.js.map +1 -0
- package/dist/session/proc.js +113 -0
- package/dist/session/proc.js.map +1 -0
- package/dist/session/progress.js +83 -0
- package/dist/session/progress.js.map +1 -0
- package/dist/session/session.js +450 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/state.js +47 -0
- package/dist/session/state.js.map +1 -0
- package/dist/store/inspect.js +212 -0
- package/dist/store/inspect.js.map +1 -0
- package/dist/store/run.js +112 -0
- package/dist/store/run.js.map +1 -0
- package/dist/store/summary.js +69 -0
- package/dist/store/summary.js.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/install.sh +29 -0
- package/package.json +67 -4
- package/skills/multiclone/SKILL.md +123 -0
- package/skills/multiclone/references/capture-format.md +73 -0
- package/skills/multiclone/references/fidelity.md +54 -0
- package/skills/multiclone/references/quality.md +47 -0
- package/skills/multiclone/references/stacks.md +156 -0
- package/templates/react-vite/.prettierignore +5 -0
- package/templates/react-vite/.prettierrc.json +6 -0
- package/templates/react-vite/eslint.config.js +38 -0
- package/templates/react-vite/gitignore +4 -0
- package/templates/react-vite/index.html +12 -0
- package/templates/react-vite/package.json +36 -0
- package/templates/react-vite/src/app/App.tsx +15 -0
- package/templates/react-vite/src/app/Page.tsx +11 -0
- package/templates/react-vite/src/app/routes.ts +7 -0
- package/templates/react-vite/src/components/README.md +7 -0
- package/templates/react-vite/src/content/README.md +2 -0
- package/templates/react-vite/src/hooks/useActiveSection.ts +37 -0
- package/templates/react-vite/src/hooks/useInView.ts +45 -0
- package/templates/react-vite/src/hooks/useMediaQuery.ts +15 -0
- package/templates/react-vite/src/lib/cn.ts +4 -0
- package/templates/react-vite/src/lib/math.ts +21 -0
- package/templates/react-vite/src/lib/mc.ts +13 -0
- package/templates/react-vite/src/lib/media.ts +4 -0
- package/templates/react-vite/src/main.tsx +13 -0
- package/templates/react-vite/src/providers/SmoothScroll.tsx +24 -0
- package/templates/react-vite/src/styles/base.css +42 -0
- package/templates/react-vite/src/styles/draft.css +1 -0
- package/templates/react-vite/src/styles/fonts.css +1 -0
- package/templates/react-vite/src/styles/index.css +4 -0
- package/templates/react-vite/src/styles/tokens.css +3 -0
- package/templates/react-vite/src/vite-env.d.ts +1 -0
- package/templates/react-vite/tsconfig.app.json +29 -0
- package/templates/react-vite/tsconfig.json +4 -0
- package/templates/react-vite/tsconfig.node.json +19 -0
- package/templates/react-vite/vite.config.ts +37 -0
|
@@ -0,0 +1,268 @@
|
|
|
1
|
+
import { stablePathOf } from './paths.js';
|
|
2
|
+
/** The computed styles DOMSnapshot.captureSnapshot reports for every laid-out node. */
|
|
3
|
+
export const SNAPSHOT_STYLES = [
|
|
4
|
+
'display',
|
|
5
|
+
'position',
|
|
6
|
+
'top',
|
|
7
|
+
'right',
|
|
8
|
+
'bottom',
|
|
9
|
+
'left',
|
|
10
|
+
'z-index',
|
|
11
|
+
'float',
|
|
12
|
+
'box-sizing',
|
|
13
|
+
'width',
|
|
14
|
+
'height',
|
|
15
|
+
'min-width',
|
|
16
|
+
'max-width',
|
|
17
|
+
'min-height',
|
|
18
|
+
'max-height',
|
|
19
|
+
'margin-top',
|
|
20
|
+
'margin-right',
|
|
21
|
+
'margin-bottom',
|
|
22
|
+
'margin-left',
|
|
23
|
+
'padding-top',
|
|
24
|
+
'padding-right',
|
|
25
|
+
'padding-bottom',
|
|
26
|
+
'padding-left',
|
|
27
|
+
'border-top-width',
|
|
28
|
+
'border-right-width',
|
|
29
|
+
'border-bottom-width',
|
|
30
|
+
'border-left-width',
|
|
31
|
+
'border-top-style',
|
|
32
|
+
'border-top-color',
|
|
33
|
+
'border-right-color',
|
|
34
|
+
'border-bottom-color',
|
|
35
|
+
'border-left-color',
|
|
36
|
+
'border-top-left-radius',
|
|
37
|
+
'border-top-right-radius',
|
|
38
|
+
'border-bottom-right-radius',
|
|
39
|
+
'border-bottom-left-radius',
|
|
40
|
+
'flex-direction',
|
|
41
|
+
'flex-wrap',
|
|
42
|
+
'flex-grow',
|
|
43
|
+
'flex-shrink',
|
|
44
|
+
'flex-basis',
|
|
45
|
+
'justify-content',
|
|
46
|
+
'align-items',
|
|
47
|
+
'align-self',
|
|
48
|
+
'align-content',
|
|
49
|
+
'order',
|
|
50
|
+
'gap',
|
|
51
|
+
'row-gap',
|
|
52
|
+
'column-gap',
|
|
53
|
+
'grid-template-columns',
|
|
54
|
+
'grid-template-rows',
|
|
55
|
+
'grid-template-areas',
|
|
56
|
+
'grid-column',
|
|
57
|
+
'grid-row',
|
|
58
|
+
'grid-auto-flow',
|
|
59
|
+
'place-items',
|
|
60
|
+
'aspect-ratio',
|
|
61
|
+
'object-fit',
|
|
62
|
+
'object-position',
|
|
63
|
+
'font-family',
|
|
64
|
+
'font-size',
|
|
65
|
+
'font-weight',
|
|
66
|
+
'font-style',
|
|
67
|
+
'font-stretch',
|
|
68
|
+
'font-variation-settings',
|
|
69
|
+
'font-feature-settings',
|
|
70
|
+
'line-height',
|
|
71
|
+
'letter-spacing',
|
|
72
|
+
'word-spacing',
|
|
73
|
+
'text-align',
|
|
74
|
+
'text-transform',
|
|
75
|
+
'text-decoration-line',
|
|
76
|
+
'text-indent',
|
|
77
|
+
'text-overflow',
|
|
78
|
+
'text-shadow',
|
|
79
|
+
'white-space',
|
|
80
|
+
'word-break',
|
|
81
|
+
'color',
|
|
82
|
+
'opacity',
|
|
83
|
+
'visibility',
|
|
84
|
+
'background-color',
|
|
85
|
+
'background-image',
|
|
86
|
+
'background-size',
|
|
87
|
+
'background-position',
|
|
88
|
+
'background-repeat',
|
|
89
|
+
'background-clip',
|
|
90
|
+
'box-shadow',
|
|
91
|
+
'outline',
|
|
92
|
+
'transform',
|
|
93
|
+
'transform-origin',
|
|
94
|
+
'transform-style',
|
|
95
|
+
'perspective',
|
|
96
|
+
'translate',
|
|
97
|
+
'rotate',
|
|
98
|
+
'scale',
|
|
99
|
+
'filter',
|
|
100
|
+
'backdrop-filter',
|
|
101
|
+
'clip-path',
|
|
102
|
+
'mask-image',
|
|
103
|
+
'mix-blend-mode',
|
|
104
|
+
'isolation',
|
|
105
|
+
'overflow-x',
|
|
106
|
+
'overflow-y',
|
|
107
|
+
'cursor',
|
|
108
|
+
'pointer-events',
|
|
109
|
+
'transition',
|
|
110
|
+
'animation-name',
|
|
111
|
+
'animation-duration',
|
|
112
|
+
'animation-timing-function',
|
|
113
|
+
'will-change',
|
|
114
|
+
'content',
|
|
115
|
+
'list-style-type',
|
|
116
|
+
'inset',
|
|
117
|
+
];
|
|
118
|
+
const KEEP_ATTRS = /^(id|class|href|src|srcset|alt|role|aria-[\w-]+|data-[\w-]+|type|name|title|style|poster|width|height|viewBox|d|fill|stroke|loading|rel|target|placeholder|for|tabindex|open|autoplay|muted|loop|playsinline|controls|value|disabled|checked|lang|dir|datetime|colspan|rowspan|cx|cy|r|rx|ry|x|y|x1|x2|y1|y2|points|transform|offset|opacity|preserveAspectRatio|gradientUnits|gradientTransform|xlink:href|stroke-width|stroke-linecap|stroke-linejoin|stroke-dasharray|stroke-dashoffset|stroke-opacity|fill-rule|fill-opacity|clip-rule|clip-path|mask|stop-color|stop-opacity)$/;
|
|
119
|
+
const MAX_ATTR = 2000;
|
|
120
|
+
/** Folds the column-oriented CDP snapshot into per-node records with stable paths. */
|
|
121
|
+
export function compactSnapshot(raw) {
|
|
122
|
+
const str = (index) => index === undefined || index < 0 ? '' : (raw.strings[index] ?? '');
|
|
123
|
+
const documents = raw.documents.map((doc) => {
|
|
124
|
+
const n = doc.nodes;
|
|
125
|
+
const count = n.nodeName?.length ?? 0;
|
|
126
|
+
const parents = n.parentIndex ?? [];
|
|
127
|
+
const rare = (data) => new Map((data?.index ?? []).map((node, k) => [node, str(data?.value[k])]));
|
|
128
|
+
const shadow = rare(n.shadowRootType);
|
|
129
|
+
const pseudo = rare(n.pseudoType);
|
|
130
|
+
const sources = rare(n.currentSourceURL);
|
|
131
|
+
const frameDocs = new Map((n.contentDocumentIndex?.index ?? []).map((node, k) => [
|
|
132
|
+
node,
|
|
133
|
+
n.contentDocumentIndex?.value[k] ?? -1,
|
|
134
|
+
]));
|
|
135
|
+
const clickable = new Set(n.isClickable?.index ?? []);
|
|
136
|
+
const layout = new Map();
|
|
137
|
+
doc.layout.nodeIndex.forEach((node, k) => layout.set(node, k));
|
|
138
|
+
const children = new Map();
|
|
139
|
+
const attrsOf = (index) => {
|
|
140
|
+
const list = n.attributes?.[index] ?? [];
|
|
141
|
+
const out = {};
|
|
142
|
+
for (let k = 0; k + 1 < list.length; k += 2) {
|
|
143
|
+
const key = str(list[k]);
|
|
144
|
+
if (KEEP_ATTRS.test(key))
|
|
145
|
+
out[key] = str(list[k + 1]).slice(0, MAX_ATTR);
|
|
146
|
+
}
|
|
147
|
+
return out;
|
|
148
|
+
};
|
|
149
|
+
const attrCache = new Map();
|
|
150
|
+
const attrs = (index) => {
|
|
151
|
+
let cached = attrCache.get(index);
|
|
152
|
+
if (!cached) {
|
|
153
|
+
cached = attrsOf(index);
|
|
154
|
+
attrCache.set(index, cached);
|
|
155
|
+
}
|
|
156
|
+
return cached;
|
|
157
|
+
};
|
|
158
|
+
for (let index = 0; index < count; index++) {
|
|
159
|
+
const parent = parents[index] ?? -1;
|
|
160
|
+
if (parent < 0)
|
|
161
|
+
continue;
|
|
162
|
+
const list = children.get(parent) ?? [];
|
|
163
|
+
list.push(index);
|
|
164
|
+
children.set(parent, list);
|
|
165
|
+
}
|
|
166
|
+
const type = (index) => n.nodeType?.[index] ?? 0;
|
|
167
|
+
const isElement = (index) => type(index) === 1 && !pseudo.has(index);
|
|
168
|
+
const idCounts = new Map();
|
|
169
|
+
for (let index = 0; index < count; index++) {
|
|
170
|
+
const id = isElement(index) ? attrs(index).id : undefined;
|
|
171
|
+
if (id)
|
|
172
|
+
idCounts.set(id, (idCounts.get(id) ?? 0) + 1);
|
|
173
|
+
}
|
|
174
|
+
const parentElement = (index) => {
|
|
175
|
+
const parent = parents[index] ?? -1;
|
|
176
|
+
return parent >= 0 && isElement(parent) ? parent : null;
|
|
177
|
+
};
|
|
178
|
+
const access = {
|
|
179
|
+
parent: parentElement,
|
|
180
|
+
shadowHost: (index) => {
|
|
181
|
+
const parent = parents[index] ?? -1;
|
|
182
|
+
if (parent < 0 || type(parent) !== 11)
|
|
183
|
+
return null;
|
|
184
|
+
const host = parents[parent] ?? -1;
|
|
185
|
+
return host >= 0 ? host : null;
|
|
186
|
+
},
|
|
187
|
+
tag: (index) => str(n.nodeName?.[index]),
|
|
188
|
+
id: (index) => attrs(index).id ?? null,
|
|
189
|
+
siblings: (index) => (children.get(parents[index] ?? -1) ?? [index]).filter(isElement),
|
|
190
|
+
uniqueId: (_index, id) => idCounts.get(id) === 1,
|
|
191
|
+
};
|
|
192
|
+
const nodes = [];
|
|
193
|
+
for (let index = 0; index < count; index++) {
|
|
194
|
+
const t = type(index);
|
|
195
|
+
if (t === 8 || t === 10)
|
|
196
|
+
continue;
|
|
197
|
+
const name = str(n.nodeName?.[index]);
|
|
198
|
+
const layoutIndex = layout.get(index);
|
|
199
|
+
const record = { i: index, p: parents[index] ?? -1, t, name };
|
|
200
|
+
const backend = n.backendNodeId?.[index];
|
|
201
|
+
if (backend !== undefined)
|
|
202
|
+
record.backendId = backend;
|
|
203
|
+
if (isElement(index)) {
|
|
204
|
+
record.path = stablePathOf(index, access);
|
|
205
|
+
const a = attrs(index);
|
|
206
|
+
if (Object.keys(a).length)
|
|
207
|
+
record.attrs = a;
|
|
208
|
+
}
|
|
209
|
+
if (t === 3) {
|
|
210
|
+
const text = str(n.nodeValue?.[index]).trim();
|
|
211
|
+
if (!text)
|
|
212
|
+
continue;
|
|
213
|
+
record.text = text.slice(0, 4000);
|
|
214
|
+
}
|
|
215
|
+
const pseudoType = pseudo.get(index);
|
|
216
|
+
if (pseudoType)
|
|
217
|
+
record.pseudo = pseudoType;
|
|
218
|
+
const shadowType = shadow.get(index);
|
|
219
|
+
if (shadowType)
|
|
220
|
+
record.shadow = shadowType;
|
|
221
|
+
const frameDoc = frameDocs.get(index);
|
|
222
|
+
if (frameDoc !== undefined && frameDoc >= 0)
|
|
223
|
+
record.frameDoc = frameDoc;
|
|
224
|
+
if (clickable.has(index))
|
|
225
|
+
record.clickable = true;
|
|
226
|
+
const src = sources.get(index);
|
|
227
|
+
if (src)
|
|
228
|
+
record.src = src;
|
|
229
|
+
if (layoutIndex !== undefined) {
|
|
230
|
+
const bounds = doc.layout.bounds[layoutIndex] ?? [];
|
|
231
|
+
record.box = [
|
|
232
|
+
Math.round(bounds[0] ?? 0),
|
|
233
|
+
Math.round(bounds[1] ?? 0),
|
|
234
|
+
Math.round(bounds[2] ?? 0),
|
|
235
|
+
Math.round(bounds[3] ?? 0),
|
|
236
|
+
];
|
|
237
|
+
const styles = doc.layout.styles[layoutIndex];
|
|
238
|
+
if (styles?.length)
|
|
239
|
+
record.s = styles;
|
|
240
|
+
const paint = doc.layout.paintOrders?.[layoutIndex];
|
|
241
|
+
if (paint !== undefined)
|
|
242
|
+
record.paint = paint;
|
|
243
|
+
const bg = str(doc.layout.blendedBackgroundColors?.[layoutIndex]);
|
|
244
|
+
if (bg)
|
|
245
|
+
record.bg = bg;
|
|
246
|
+
}
|
|
247
|
+
nodes.push(record);
|
|
248
|
+
}
|
|
249
|
+
return {
|
|
250
|
+
url: str(doc.documentURL),
|
|
251
|
+
frameId: str(doc.frameId),
|
|
252
|
+
contentHeight: Math.round(doc.contentHeight ?? 0),
|
|
253
|
+
nodes,
|
|
254
|
+
};
|
|
255
|
+
});
|
|
256
|
+
return { styleNames: [...SNAPSHOT_STYLES], strings: raw.strings, documents };
|
|
257
|
+
}
|
|
258
|
+
/** Resolves a node's style indices into a property → value record. */
|
|
259
|
+
export function nodeStyles(snapshot, node) {
|
|
260
|
+
const out = {};
|
|
261
|
+
node.s?.forEach((value, k) => {
|
|
262
|
+
const name = snapshot.styleNames[k];
|
|
263
|
+
if (name !== undefined && value >= 0)
|
|
264
|
+
out[name] = snapshot.strings[value] ?? '';
|
|
265
|
+
});
|
|
266
|
+
return out;
|
|
267
|
+
}
|
|
268
|
+
//# sourceMappingURL=snapshot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"snapshot.js","sourceRoot":"","sources":["../../src/domain/snapshot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { FlattenMap, sourceContentFor, } from '@jridgewell/trace-mapping';
|
|
2
|
+
/** Finds a source map reference: scriptParsed value, then SourceMap header, then trailing comment. */
|
|
3
|
+
export function findSourceMapUrl(input) {
|
|
4
|
+
if (input.fromDebugger)
|
|
5
|
+
return input.fromDebugger;
|
|
6
|
+
const header = input.headers?.sourcemap ?? input.headers?.['x-sourcemap'];
|
|
7
|
+
if (header)
|
|
8
|
+
return header;
|
|
9
|
+
const tail = input.source?.slice(-4000) ?? '';
|
|
10
|
+
const pattern = input.css
|
|
11
|
+
? /\/\*\s*[#@]\s*sourceMappingURL\s*=\s*(\S+?)\s*\*\/\s*$/
|
|
12
|
+
: /\/\/\s*[#@]\s*sourceMappingURL\s*=\s*(\S+)\s*$/;
|
|
13
|
+
const match = pattern.exec(tail.trimEnd());
|
|
14
|
+
return match?.[1] ?? null;
|
|
15
|
+
}
|
|
16
|
+
/** Resolves a map reference against its script URL; null for unusable references. */
|
|
17
|
+
export function resolveMapUrl(reference, scriptUrl) {
|
|
18
|
+
if (reference.startsWith('data:'))
|
|
19
|
+
return reference;
|
|
20
|
+
try {
|
|
21
|
+
const resolved = new URL(reference, scriptUrl || undefined);
|
|
22
|
+
return resolved.protocol === 'http:' || resolved.protocol === 'https:'
|
|
23
|
+
? resolved.toString()
|
|
24
|
+
: null;
|
|
25
|
+
}
|
|
26
|
+
catch {
|
|
27
|
+
return null;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/** Decodes a `data:application/json;base64,…` (or percent-encoded) source map. */
|
|
31
|
+
export function decodeDataUrl(url) {
|
|
32
|
+
const match = /^data:([^,]*?),(.*)$/s.exec(url);
|
|
33
|
+
if (!match)
|
|
34
|
+
return null;
|
|
35
|
+
const meta = match[1] ?? '';
|
|
36
|
+
const payload = match[2] ?? '';
|
|
37
|
+
try {
|
|
38
|
+
return meta.endsWith(';base64')
|
|
39
|
+
? Buffer.from(payload, 'base64').toString('utf8')
|
|
40
|
+
: decodeURIComponent(payload);
|
|
41
|
+
}
|
|
42
|
+
catch {
|
|
43
|
+
return null;
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
/** Turns `webpack://app/./src/Hero.tsx?abc` into a safe relative path like `app/src/Hero.tsx`. */
|
|
47
|
+
export function normalizeSourcePath(source) {
|
|
48
|
+
let path = source.replace(/^[a-z][a-z0-9+.-]*:\/{0,3}/i, '');
|
|
49
|
+
path = path.split(/[?#]/)[0] ?? '';
|
|
50
|
+
const parts = [];
|
|
51
|
+
for (const segment of path.split(/[\\/]+/)) {
|
|
52
|
+
if (!segment || segment === '.' || segment === '..')
|
|
53
|
+
continue;
|
|
54
|
+
parts.push(segment.replace(/[^\w.@+-]/g, '_').slice(0, 120));
|
|
55
|
+
}
|
|
56
|
+
return parts.join('/') || 'unnamed';
|
|
57
|
+
}
|
|
58
|
+
export const isVendorSource = (path) => /(^|\/)(node_modules|\.pnpm|\.yarn|bower_components)\//.test(path) ||
|
|
59
|
+
/^(webpack|vite)\/(runtime|bootstrap)/.test(path);
|
|
60
|
+
/** Parses a regular or indexed source map and returns every embedded original source. */
|
|
61
|
+
export function extractSources(text, mapUrl) {
|
|
62
|
+
let json;
|
|
63
|
+
try {
|
|
64
|
+
json = JSON.parse(text.replace(/^\)\]\}'[^\n]*\n/, ''));
|
|
65
|
+
}
|
|
66
|
+
catch {
|
|
67
|
+
return { ok: false, reason: 'not JSON' };
|
|
68
|
+
}
|
|
69
|
+
if (typeof json !== 'object' || json === null || json.version !== 3) {
|
|
70
|
+
return { ok: false, reason: 'not a version 3 source map' };
|
|
71
|
+
}
|
|
72
|
+
try {
|
|
73
|
+
const map = FlattenMap(json, mapUrl);
|
|
74
|
+
const sources = [];
|
|
75
|
+
let withoutContent = 0;
|
|
76
|
+
const seen = new Set();
|
|
77
|
+
for (const source of map.sources) {
|
|
78
|
+
if (source === null || seen.has(source))
|
|
79
|
+
continue;
|
|
80
|
+
seen.add(source);
|
|
81
|
+
const content = sourceContentFor(map, source);
|
|
82
|
+
if (content === null) {
|
|
83
|
+
withoutContent++;
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
const path = normalizeSourcePath(source);
|
|
87
|
+
sources.push({ source, path, content, vendor: isVendorSource(path) });
|
|
88
|
+
}
|
|
89
|
+
return { ok: true, sources, withoutContent };
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
return { ok: false, reason: error instanceof Error ? error.message : String(error) };
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
//# sourceMappingURL=sourcemap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sourcemap.js","sourceRoot":"","sources":["../../src/domain/sourcemap.ts"],"names":[],"mappings":"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"}
|