@juxtapose/core 0.8.0 → 0.10.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/dist/agent/handoff.d.ts +19 -1
- package/dist/agent/handoff.js +54 -2
- package/dist/agent/handoff.js.map +1 -1
- package/dist/analysis/affected.d.ts +17 -0
- package/dist/analysis/affected.js +34 -0
- package/dist/analysis/affected.js.map +1 -1
- package/dist/browser/flags.d.ts +14 -0
- package/dist/browser/flags.js +15 -0
- package/dist/browser/flags.js.map +1 -1
- package/dist/browser/page.d.ts +19 -1
- package/dist/browser/page.js +16 -3
- package/dist/browser/page.js.map +1 -1
- package/dist/capture/capture.d.ts +10 -1
- package/dist/capture/capture.js +121 -16
- package/dist/capture/capture.js.map +1 -1
- package/dist/capture/config-errors.d.ts +10 -0
- package/dist/capture/config-errors.js +20 -0
- package/dist/capture/config-errors.js.map +1 -0
- package/dist/capture/discover.d.ts +28 -0
- package/dist/capture/discover.js +109 -0
- package/dist/capture/discover.js.map +1 -0
- package/dist/capture/idle.d.ts +88 -0
- package/dist/capture/idle.js +545 -0
- package/dist/capture/idle.js.map +1 -0
- package/dist/capture/pool.d.ts +8 -0
- package/dist/capture/pool.js +2 -0
- package/dist/capture/pool.js.map +1 -1
- package/dist/capture/settle-options.d.ts +78 -0
- package/dist/capture/settle-options.js +234 -0
- package/dist/capture/settle-options.js.map +1 -0
- package/dist/capture/settle.d.ts +0 -18
- package/dist/capture/settle.js +7 -100
- package/dist/capture/settle.js.map +1 -1
- package/dist/capture/snap.d.ts +3 -0
- package/dist/capture/snap.js +7 -1
- package/dist/capture/snap.js.map +1 -1
- package/dist/capture/variants.d.ts +44 -0
- package/dist/capture/variants.js +204 -0
- package/dist/capture/variants.js.map +1 -0
- package/dist/diff/structural/deltas.d.ts +2 -3
- package/dist/diff/structural/deltas.js +3 -3
- package/dist/diff/structural/deltas.js.map +1 -1
- package/dist/diff/structural.d.ts +4 -1
- package/dist/diff/structural.js +3 -0
- package/dist/diff/structural.js.map +1 -1
- package/dist/index.d.ts +6 -3
- package/dist/index.js +9 -2
- package/dist/index.js.map +1 -1
- package/dist/platform.d.ts +20 -0
- package/dist/platforms/urls.js +5 -1
- package/dist/platforms/urls.js.map +1 -1
- package/dist/report/comment.js +19 -8
- package/dist/report/comment.js.map +1 -1
- package/dist/report/format.d.ts +17 -0
- package/dist/report/format.js +16 -0
- package/dist/report/format.js.map +1 -1
- package/dist/report/html.js +40 -6
- package/dist/report/html.js.map +1 -1
- package/dist/run/run.d.ts +6 -0
- package/dist/run/run.js +32 -0
- package/dist/run/run.js.map +1 -1
- package/dist/types.d.ts +107 -2
- package/package.json +1 -1
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
// Per-story capture variants (spec 2026-10-13-variants-design.md).
|
|
2
|
+
//
|
|
3
|
+
// A variant is just another capture job: expansion happens once, after the
|
|
4
|
+
// platform enumerates, and everything downstream (pool, shuffle, warm browser,
|
|
5
|
+
// baselines, report) sees one StoryManifest per capture key. Pure on purpose:
|
|
6
|
+
// it does not care where a story's `variants` came from (index, meta.json, a
|
|
7
|
+
// url entry, or a preview extract), so a platform can change how it discovers
|
|
8
|
+
// them without touching this.
|
|
9
|
+
import { compareCodeUnits } from '../diff/structural/deltas.js';
|
|
10
|
+
import { VariantConfigError } from './config-errors.js';
|
|
11
|
+
import { checkSettle, mergeSettle } from './settle-options.js';
|
|
12
|
+
/** Underscores are excluded so the `__` key separator can't occur in a name. */
|
|
13
|
+
export const VARIANT_NAME = /^[a-z0-9][a-z0-9-]{0,31}$/;
|
|
14
|
+
export const VARIANT_SEPARATOR = '__';
|
|
15
|
+
export { VariantConfigError } from './config-errors.js';
|
|
16
|
+
export const captureKey = (baseStoryId, variant) => `${baseStoryId}${VARIANT_SEPARATOR}${variant}`;
|
|
17
|
+
/** The id every platform call receives: the platform's own, never the key. */
|
|
18
|
+
export const platformStoryId = (story) => story.baseStoryId ?? story.storyId;
|
|
19
|
+
const isRecord = (v) => typeof v === 'object' && v !== null && !Array.isArray(v);
|
|
20
|
+
/**
|
|
21
|
+
* Expand each story into its default capture plus one entry per variant,
|
|
22
|
+
* sorted by capture key in code-unit order.
|
|
23
|
+
*
|
|
24
|
+
* Throws VariantConfigError on a bad name, a malformed spec, an unknown or
|
|
25
|
+
* cyclic `extends`, or two captures that would share a key.
|
|
26
|
+
*/
|
|
27
|
+
export function expandVariants(stories, projectVariants) {
|
|
28
|
+
const project = checkDeclared(projectVariants, 'project config');
|
|
29
|
+
const out = [];
|
|
30
|
+
for (const story of stories) {
|
|
31
|
+
// `variants` is a declaration, not a capture setting, and `colorScheme`
|
|
32
|
+
// is variant-only: the default capture is always light.
|
|
33
|
+
const { variants: ownRaw, colorScheme: _ignored, ...baseParams } = story.params;
|
|
34
|
+
checkSettle(baseParams.settle, `story '${story.storyId}'`);
|
|
35
|
+
out.push({ ...story, params: baseParams });
|
|
36
|
+
// A skipped story skips every variant: there is nothing to vary.
|
|
37
|
+
if (baseParams.skip === true)
|
|
38
|
+
continue;
|
|
39
|
+
const own = checkDeclared(ownRaw, `story '${story.storyId}'`);
|
|
40
|
+
// Story wins by name; `false` drops the name entirely.
|
|
41
|
+
const merged = new Map();
|
|
42
|
+
for (const [name, spec] of Object.entries(project)) {
|
|
43
|
+
if (spec !== false)
|
|
44
|
+
merged.set(name, spec);
|
|
45
|
+
}
|
|
46
|
+
for (const [name, spec] of Object.entries(own)) {
|
|
47
|
+
if (spec === false)
|
|
48
|
+
merged.delete(name);
|
|
49
|
+
else
|
|
50
|
+
merged.set(name, spec);
|
|
51
|
+
}
|
|
52
|
+
for (const name of [...merged.keys()].sort(compareCodeUnits)) {
|
|
53
|
+
const layer = resolveChain(story.storyId, name, merged);
|
|
54
|
+
out.push({
|
|
55
|
+
...story,
|
|
56
|
+
storyId: captureKey(story.storyId, name),
|
|
57
|
+
baseStoryId: story.storyId,
|
|
58
|
+
variant: name,
|
|
59
|
+
variantParams: layer,
|
|
60
|
+
// Base params, then the extends chain, then the variant itself.
|
|
61
|
+
params: withSettle({ ...baseParams, ...layer }, baseParams.settle, layer.settle),
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
out.sort((a, b) => compareCodeUnits(a.storyId, b.storyId));
|
|
66
|
+
for (let i = 1; i < out.length; i++) {
|
|
67
|
+
const prev = out[i - 1];
|
|
68
|
+
const cur = out[i];
|
|
69
|
+
if (prev.storyId === cur.storyId) {
|
|
70
|
+
throw new VariantConfigError(`capture key '${cur.storyId}' is produced by both ${describe(prev)} and ${describe(cur)}; rename the variant or the story`);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
return out;
|
|
74
|
+
}
|
|
75
|
+
const describe = (s) => s.variant === undefined
|
|
76
|
+
? `story '${s.storyId}'`
|
|
77
|
+
: `story '${s.baseStoryId}' variant '${s.variant}'`;
|
|
78
|
+
/** Validate names and shapes where they are declared, before any merge, so
|
|
79
|
+
* the error names the place the user has to edit. */
|
|
80
|
+
function checkDeclared(raw, where) {
|
|
81
|
+
if (raw === undefined)
|
|
82
|
+
return {};
|
|
83
|
+
if (!isRecord(raw)) {
|
|
84
|
+
throw new VariantConfigError(`${where}: 'variants' must be an object of named variants`);
|
|
85
|
+
}
|
|
86
|
+
for (const [name, spec] of Object.entries(raw)) {
|
|
87
|
+
if (!VARIANT_NAME.test(name)) {
|
|
88
|
+
throw new VariantConfigError(`${where}: variant name '${name}' must match ${VARIANT_NAME.source} (lowercase letters, digits and dashes; no underscores)`);
|
|
89
|
+
}
|
|
90
|
+
if (spec === false)
|
|
91
|
+
continue;
|
|
92
|
+
if (!isRecord(spec)) {
|
|
93
|
+
throw new VariantConfigError(`${where}: variant '${name}' must be an object of capture settings, or false to opt out`);
|
|
94
|
+
}
|
|
95
|
+
if ('skip' in spec) {
|
|
96
|
+
throw new VariantConfigError(`${where}: variant '${name}' sets 'skip'; set the variant to false instead`);
|
|
97
|
+
}
|
|
98
|
+
const scheme = spec['colorScheme'];
|
|
99
|
+
if (scheme !== undefined && scheme !== 'light' && scheme !== 'dark') {
|
|
100
|
+
throw new VariantConfigError(`${where}: variant '${name}' colorScheme must be 'light' or 'dark'`);
|
|
101
|
+
}
|
|
102
|
+
checkSettle(spec['settle'], `${where}: variant '${name}'`);
|
|
103
|
+
const ext = spec['extends'];
|
|
104
|
+
if (ext !== undefined && typeof ext !== 'string') {
|
|
105
|
+
throw new VariantConfigError(`${where}: variant '${name}' extends must be a variant name`);
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return raw;
|
|
109
|
+
}
|
|
110
|
+
/** The variant's own layer: its extends chain (farthest ancestor first),
|
|
111
|
+
* then the variant itself, with `extends` removed. */
|
|
112
|
+
function resolveChain(storyId, name, merged) {
|
|
113
|
+
const chain = [];
|
|
114
|
+
const seen = [];
|
|
115
|
+
let cur = name;
|
|
116
|
+
while (cur !== undefined) {
|
|
117
|
+
if (seen.includes(cur)) {
|
|
118
|
+
throw new VariantConfigError(`story '${storyId}' variant '${name}': extends cycle ${[...seen, cur].join(' -> ')}`);
|
|
119
|
+
}
|
|
120
|
+
seen.push(cur);
|
|
121
|
+
const spec = merged.get(cur);
|
|
122
|
+
if (!spec) {
|
|
123
|
+
// Only reachable for an ancestor: `name` itself came from `merged`.
|
|
124
|
+
throw new VariantConfigError(`story '${storyId}' variant '${seen[seen.length - 2]}' extends unknown variant '${cur}'`);
|
|
125
|
+
}
|
|
126
|
+
chain.unshift(spec);
|
|
127
|
+
cur = spec.extends;
|
|
128
|
+
}
|
|
129
|
+
const layer = {};
|
|
130
|
+
for (const spec of chain) {
|
|
131
|
+
const settle = mergeSettle(layer.settle, spec.settle);
|
|
132
|
+
Object.assign(layer, spec);
|
|
133
|
+
if (settle)
|
|
134
|
+
layer.settle = settle;
|
|
135
|
+
}
|
|
136
|
+
delete layer.extends;
|
|
137
|
+
return layer;
|
|
138
|
+
}
|
|
139
|
+
/** `params` with `settle` merged field by field rather than replaced, so a
|
|
140
|
+
* variant's `settle.timeout` keeps the story's `settle.network`. Untouched
|
|
141
|
+
* (no `settle` key) when neither side sets one. */
|
|
142
|
+
function withSettle(params, under, over) {
|
|
143
|
+
const settle = mergeSettle(under, over);
|
|
144
|
+
return settle ? { ...params, settle } : params;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Merge live params (read from the rendered preview) for one capture.
|
|
148
|
+
*
|
|
149
|
+
* Live params override the manifest — the preview is the story's own
|
|
150
|
+
* declaration, the index a lossy projection of it — but they merge UNDER a
|
|
151
|
+
* variant's layer: a story's own live `viewport` must not undo the mobile
|
|
152
|
+
* variant's. `variants` and `colorScheme` in live params are declarations,
|
|
153
|
+
* not settings for this capture, so they are dropped.
|
|
154
|
+
*/
|
|
155
|
+
export function mergeLiveParams(story, live) {
|
|
156
|
+
const params = { ...story.params };
|
|
157
|
+
if (!live)
|
|
158
|
+
return params;
|
|
159
|
+
const { variants: _v, colorScheme: _c, ...settings } = live;
|
|
160
|
+
Object.assign(params, settings, story.variantParams ?? {});
|
|
161
|
+
const variantSettle = story.variantParams?.settle;
|
|
162
|
+
return variantSettle
|
|
163
|
+
? withSettle(params, settings.settle ?? story.params.settle, variantSettle)
|
|
164
|
+
: params;
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Pick items by story id: a base id selects the story and every variant of
|
|
168
|
+
* it, a capture key selects exactly that capture. Ids that match nothing are
|
|
169
|
+
* returned so the caller can report them.
|
|
170
|
+
*/
|
|
171
|
+
export function selectByStoryId(items, ids) {
|
|
172
|
+
const wanted = new Set(ids);
|
|
173
|
+
const hit = new Set();
|
|
174
|
+
const selected = items.filter((s) => {
|
|
175
|
+
if (wanted.has(s.storyId)) {
|
|
176
|
+
hit.add(s.storyId);
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
if (s.baseStoryId !== undefined && wanted.has(s.baseStoryId)) {
|
|
180
|
+
hit.add(s.baseStoryId);
|
|
181
|
+
return true;
|
|
182
|
+
}
|
|
183
|
+
return false;
|
|
184
|
+
});
|
|
185
|
+
return { selected, unknown: ids.filter((id) => !hit.has(id)) };
|
|
186
|
+
}
|
|
187
|
+
/** Structural equality for JSON-shaped values: key order doesn't matter,
|
|
188
|
+
* array order does. */
|
|
189
|
+
export function deepEqual(a, b) {
|
|
190
|
+
if (a === b)
|
|
191
|
+
return true;
|
|
192
|
+
if (typeof a !== 'object' || typeof b !== 'object' || a === null || b === null)
|
|
193
|
+
return false;
|
|
194
|
+
if (Array.isArray(a) !== Array.isArray(b))
|
|
195
|
+
return false;
|
|
196
|
+
if (Array.isArray(a) && Array.isArray(b))
|
|
197
|
+
return a.length === b.length && a.every((v, i) => deepEqual(v, b[i]));
|
|
198
|
+
const ra = a;
|
|
199
|
+
const rb = b;
|
|
200
|
+
const ka = Object.keys(ra);
|
|
201
|
+
return (ka.length === Object.keys(rb).length &&
|
|
202
|
+
ka.every((k) => Object.hasOwn(rb, k) && deepEqual(ra[k], rb[k])));
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/capture/variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Delta, StructureRect, StructureSnapshot } from '../../types.js';
|
|
2
2
|
import type { ElementMatch } from './match.js';
|
|
3
|
+
import { compareCodeUnits } from '../../report/format.js';
|
|
3
4
|
export interface Fact {
|
|
4
5
|
delta: Delta;
|
|
5
6
|
/** Old and new rects of the element(s) this fact is about, for coverage. */
|
|
@@ -24,6 +25,4 @@ export interface Source {
|
|
|
24
25
|
export declare const KIND_RANK: Record<Delta['kind'], number>;
|
|
25
26
|
export declare function computeFacts(a: StructureSnapshot, b: StructureSnapshot, match: ElementMatch): Fact[];
|
|
26
27
|
export declare function sortFacts(facts: Fact[]): Fact[];
|
|
27
|
-
|
|
28
|
-
* `localeCompare` is not one. */
|
|
29
|
-
export declare const compareCodeUnits: (a: string, b: string) => number;
|
|
28
|
+
export { compareCodeUnits };
|
|
@@ -8,6 +8,7 @@
|
|
|
8
8
|
// stored value changed, or where the parents' effective values already agree.
|
|
9
9
|
import { INHERITED_PROPS, STRUCTURE_PROPS, effectiveStyle, elementAt, round, } from '../../capture/structure.js';
|
|
10
10
|
import { abstractLabel, clip, label } from './label.js';
|
|
11
|
+
import { compareCodeUnits } from '../../report/format.js';
|
|
11
12
|
/** Within one position, which fact reads first. */
|
|
12
13
|
export const KIND_RANK = {
|
|
13
14
|
removed: 0,
|
|
@@ -215,7 +216,6 @@ export function sortFacts(facts) {
|
|
|
215
216
|
function factKey(d) {
|
|
216
217
|
return d.kind === 'style' ? d.prop : d.kind === 'attr' ? d.attr : '';
|
|
217
218
|
}
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
export const compareCodeUnits = (a, b) => a < b ? -1 : a > b ? 1 : 0;
|
|
219
|
+
// Defined with the browser-safe formatters so the addon shares it.
|
|
220
|
+
export { compareCodeUnits };
|
|
221
221
|
//# sourceMappingURL=deltas.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"deltas.js","sourceRoot":"","sources":["../../../src/diff/structural/deltas.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAE9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,KAAK,GACN,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"deltas.js","sourceRoot":"","sources":["../../../src/diff/structural/deltas.ts"],"names":[],"mappings":"AAAA,kEAAkE;AAClE,EAAE;AACF,uEAAuE;AACvE,2EAA2E;AAC3E,2EAA2E;AAC3E,wEAAwE;AACxE,yEAAyE;AACzE,8EAA8E;AAE9E,OAAO,EACL,eAAe,EACf,eAAe,EACf,cAAc,EACd,SAAS,EACT,KAAK,GACN,MAAM,4BAA4B,CAAC;AAEpC,OAAO,EAAE,aAAa,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAExD,OAAO,EAAE,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAwB1D,mDAAmD;AACnD,MAAM,CAAC,MAAM,SAAS,GAAkC;IACtD,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;IACR,OAAO,EAAE,CAAC;IACV,KAAK,EAAE,CAAC;IACR,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,MAAM,KAAK,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAU,CAAC;AAE/C;;;2EAG2E;AAC3E,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,YAAY,GAAG,wCAAwC,CAAC;AAE9D,MAAM,UAAU,YAAY,CAC1B,CAAoB,EACpB,CAAoB,EACpB,KAAmB;IAEnB,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAClC;oEACgE;IAChE,MAAM,SAAS,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC5C,MAAM,SAAS,GAAiD,EAAE,CAAC;IAEnE,qEAAqE;IACrE,yEAAyE;IACzE,gDAAgD;IAChD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QACjC,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QAC1B,MAAM,IAAI,GAAG,CAAC,KAAY,EAAQ,EAAE;YAClC,MAAM,CAAC,GAAS;gBACd,KAAK;gBACL,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC;gBACzB,QAAQ,EAAE,aAAa,CAAC,EAAE,CAAC;gBAC3B,KAAK,EAAE,CAAC;gBACR,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;aACvC,CAAC;YACF,SAAS,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YACnD,OAAO,CAAC,CAAC;QACX,CAAC,CAAC;QACF,qEAAqE;QACrE,0EAA0E;QAC1E,mEAAmE;QACnE,yEAAyE;QACzE,yDAAyD;QACzD,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,CAAC;QAErB,yEAAyE;QACzE,+CAA+C;QAC/C,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,IAAI,EAAE,CAAC,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC/C,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YACzB,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC;YACzB,IAAI,EAAE,KAAK,EAAE;gBACX,KAAK,CAAC,IAAI,CACR,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC,EAAE,CAAC,CAC/E,CAAC;YAEJ,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,IAAI,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC5B,MAAM,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;gBAC1B,IAAI,IAAI,KAAK,EAAE;oBAAE,SAAS;gBAC1B,wDAAwD;gBACxD,IAAI,IAAI,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE;oBAAE,SAAS;gBAC1D,KAAK,CAAC,IAAI,CACR,IAAI,CAAC;oBACH,IAAI,EAAE,MAAM;oBACZ,EAAE;oBACF,IAAI;oBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;oBAC3B,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC;iBACxB,CAAC,CACH,CAAC;YACJ,CAAC;YAED,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;gBACnC,iEAAiE;gBACjE,qEAAqE;gBACrE,iEAAiE;gBACjE,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC;oBAC7E,SAAS;gBACX,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACxC,MAAM,EAAE,GAAG,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;gBACtC,IAAI,IAAI,KAAK,EAAE;oBAAE,SAAS;gBAC1B,IAAI,eAAe,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC;oBACtE,SAAS;gBACX,KAAK,CAAC,IAAI,CACR,IAAI,CAAC;oBACH,IAAI,EAAE,OAAO;oBACb,EAAE;oBACF,IAAI;oBACJ,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;oBAC3B,EAAE,EAAE,IAAI,CAAC,EAAE,EAAE,SAAS,CAAC;iBACxB,CAAC,CACH,CAAC;YACJ,CAAC;QACH,CAAC;QAED,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,MAAM,EAAE,GAAG,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACxC,0EAA0E;QAC1E,uEAAuE;QACvE,wEAAwE;QACxE,0EAA0E;QAC1E,oEAAoE;QACpE,oEAAoE;QACpE,0EAA0E;QAC1E,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;QACzC,MAAM,OAAO,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACrC,MAAM,KAAK,GAAG,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACnC,MAAM,YAAY,GAAG,OAAO,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC9E,MAAM,WAAW,GAAG,KAAK,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC;QAC3E,IAAI,OAAO,IAAI,CAAC,YAAY;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAChF,IAAI,KAAK,IAAI,CAAC,WAAW;YAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC3E,IAAI,CAAC,YAAY,IAAI,WAAW,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC;YACpD,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAED,yEAAyE;IACzE,0EAA0E;IAC1E,KAAK,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,IAAI,SAAS,EAAE,CAAC;QACrC,KAAK,IAAI,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC,GAAG,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;YAC3E,MAAM,GAAG,GAAG,SAAS;iBAClB,GAAG,CAAC,CAAC,CAAC;gBACP,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;YACxE,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,CAAC;gBACzB,MAAM;YACR,CAAC;QACH,CAAC;IACH,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;QAC5B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACpD,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;YAC1B,KAAK,EAAE,CAAC;YACR,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,EAAE;SACtC,CAAC,CAAC;IACL,CAAC;IAED,qEAAqE;IACrE,yDAAyD;IACzD,MAAM,iBAAiB,GAAG,CAAC,CAAS,EAAU,EAAE;QAC9C,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAChC,MAAM,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,KAAK,SAAS;gBAAE,OAAO,CAAC,GAAG,GAAG,CAAC;QACtC,CAAC;QACD,OAAO,CAAC,GAAG,CAAC;IACd,CAAC,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;QAC9B,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CAAC;YACT,KAAK,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YACtD,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACf,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC;YAC1B,KAAK,EAAE,iBAAiB,CAAC,CAAC,CAAC;YAC3B,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE;SACvC,CAAC,CAAC;IACL,CAAC;IAED,OAAO,SAAS,CAAC,KAAK,CAAC,CAAC;AAC1B,CAAC;AAED,yEAAyE;AACzE,SAAS,UAAU,CAAC,CAAoB,EAAE,CAAS,EAAE,SAAiB;IACpE,OAAO,cAAc,CAAC,CAAC,EAAE,CAAC,EAAE,SAAS,CAAC,OAAO,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,CAAC;AAChF,CAAC;AAED;;6CAE6C;AAC7C,SAAS,cAAc,CACrB,CAAoB,EACpB,CAAoB,EACpB,CAAS,EACT,CAAS,EACT,IAAyB,EACzB,IAAY;IAEZ,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,CAAC,uBAAuB;IAClD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC;IAC1B,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAChF,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;IACrB,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC;IACrB,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IAC5C,6DAA6D;IAC7D,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACrC,OAAO,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,KAAK,cAAc,CAAC,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AACrE,CAAC;AAED;;;kBAGkB;AAClB,SAAS,YAAY,CACnB,CAAoB,EACpB,CAAoB,EACpB,CAAS,EACT,CAAS,EACT,IAAyB;IAEzB,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC,CAAC,uBAAuB;IACzD,MAAM,EAAE,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAE,CAAC,MAAM,CAAC;IACjC,IAAI,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,IAAI,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,OAAO,SAAS,CAAC;IACxE,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACjC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC;IACjC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QACtB,EAAE,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;KACvB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,KAAK,CAAC,IAAI,CACf,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK;QACjB,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;QACjD,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CACvD,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,CAAQ;IACvB,OAAO,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;AACvE,CAAC;AAED,mEAAmE;AACnE,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import type { DiffOutput } from './diff.js';
|
|
2
|
-
import type { Cause, ChangedRegion, StructureSnapshot, StructuralVerdict } from '../types.js';
|
|
2
|
+
import type { CaptureFlag, Cause, ChangedRegion, StructureSnapshot, StructuralVerdict } from '../types.js';
|
|
3
3
|
export interface StructuralDiffInput {
|
|
4
4
|
baseline?: StructureSnapshot;
|
|
5
5
|
current?: StructureSnapshot;
|
|
@@ -16,6 +16,9 @@ export interface StructuralDiffInput {
|
|
|
16
16
|
};
|
|
17
17
|
/** From `jux run --since`; `jux diff` has no changed-file set. */
|
|
18
18
|
cause?: Cause;
|
|
19
|
+
/** The current capture's settle flag, if any (`settle-timeout`,
|
|
20
|
+
* `settle-fallback`): appended to the verdict's flags. */
|
|
21
|
+
settleFlag?: CaptureFlag;
|
|
19
22
|
}
|
|
20
23
|
export declare const MAX_DELTAS = 20;
|
|
21
24
|
/** JSON.stringify(verdict).length never exceeds this. */
|
package/dist/diff/structural.js
CHANGED
|
@@ -55,6 +55,9 @@ export function structuralDiffWithCoverage(input) {
|
|
|
55
55
|
};
|
|
56
56
|
const { classification, styleTags } = classify(ctx);
|
|
57
57
|
const flags = computeFlags(ctx);
|
|
58
|
+
// Last, so the flags computeFlags orders keep their positions.
|
|
59
|
+
if (input.settleFlag)
|
|
60
|
+
flags.push(input.settleFlag);
|
|
58
61
|
const deltas = facts.slice(0, MAX_DELTAS).map((f) => f.delta);
|
|
59
62
|
const summary = buildSummary({
|
|
60
63
|
classification,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/diff/structural.ts"],"names":[],"mappings":"AAAA,8DAA8D;AAC9D,EAAE;AACF,8FAA8F;AAC9F,4EAA4E;AAC5E,wEAAwE;AACxE,4EAA4E;AAE5E,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"structural.js","sourceRoot":"","sources":["../../src/diff/structural.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,8 +1,11 @@
|
|
|
1
|
-
export type { StoryParams, Viewport, StoryManifest, Snapshot, StructureSnapshot, StructureElement, StructureRect, CaptureEnv, ChangedRegion, Delta, Classification, StyleTag, Flag, StructuralVerdict, Cause, CauseKind, DiffStatus, DiffResult, RunReport, RunGroup, ApprovalMeta, BaselineEntry, BaselineManifest, ProjectConfig, UrlEntry, StorageConfig, BaselineStore, } from './types.js';
|
|
1
|
+
export type { StoryParams, VariantSpec, ColorScheme, Viewport, StoryManifest, Snapshot, StructureSnapshot, StructureElement, StructureRect, CaptureEnv, ChangedRegion, Delta, Classification, StyleTag, Flag, StructuralVerdict, Cause, CauseKind, DiffStatus, DiffResult, RunReport, RunGroup, ApprovalMeta, BaselineEntry, BaselineManifest, ProjectConfig, UrlEntry, StorageConfig, BaselineStore, SettleParams, SettleReport, CaptureFlag, } from './types.js';
|
|
2
2
|
export type { Platform, EnumerateTarget, SettleContext } from './platform.js';
|
|
3
3
|
export { navigateToStory } from './url-platform.js';
|
|
4
4
|
export { createUrlPlatform } from './platforms/urls.js';
|
|
5
5
|
export { waitForSelector } from './capture/settle.js';
|
|
6
|
+
export { expandVariants, selectByStoryId, captureKey, platformStoryId, VariantConfigError, VARIANT_NAME, } from './capture/variants.js';
|
|
7
|
+
export { checkSettle, checkPatterns, checkProjectSettle, isSettleTimeout, settleFlag, SettleConfigError, DEFAULT_SETTLE_TIMEOUT_MS, MAX_SETTLE_TIMEOUT_MS, DEFAULT_NETWORK_IGNORE, type SettleLayer, } from './capture/settle-options.js';
|
|
8
|
+
export { discoverParams, prepareCaptures, type PrepareOptions, } from './capture/discover.js';
|
|
6
9
|
export { GitBaselineStore, encodeStoryId } from './baseline/git-store.js';
|
|
7
10
|
export { hashImage } from './baseline/status.js';
|
|
8
11
|
export type { BaselineStatus, AncestryCheck } from './baseline/status.js';
|
|
@@ -34,9 +37,9 @@ export { CHROME_VERSION, CHROME_PINS, chromePlatform } from './browser/pins.js';
|
|
|
34
37
|
export { assertCssSelector } from './browser/selectors.js';
|
|
35
38
|
export { resolveAffected, resolveAffectedFromPaths, gitIsCommit, type AffectedOptions, type AffectedResult, } from './analysis/affected.js';
|
|
36
39
|
export { buildCauseIndex, prepareCause, type CauseIndex, type CauseSources, type ChangedFile, } from './analysis/cause.js';
|
|
37
|
-
export { buildHandoffPrompt, describeCause, type HandoffPayload, } from './agent/handoff.js';
|
|
40
|
+
export { buildHandoffPrompt, describeCause, describeVariant, handoffVariant, type HandoffPayload, } from './agent/handoff.js';
|
|
38
41
|
export { buildComment, type CommentOptions } from './report/comment.js';
|
|
39
42
|
export { isRunReport, parseRunReport } from './report/run-report.js';
|
|
40
43
|
export { buildHtmlReport, type HtmlReportOptions } from './report/html.js';
|
|
41
|
-
export { formatPercent } from './report/format.js';
|
|
44
|
+
export { formatPercent, captureLabel, countStories, hasVariants, type CaptureRef, } from './report/format.js';
|
|
42
45
|
export { resolveArtifactUrl, resolveGitHubContext, postComment, type GitHubContext, } from './report/github.js';
|
package/dist/index.js
CHANGED
|
@@ -12,6 +12,13 @@
|
|
|
12
12
|
export { navigateToStory } from './url-platform.js';
|
|
13
13
|
export { createUrlPlatform } from './platforms/urls.js';
|
|
14
14
|
export { waitForSelector } from './capture/settle.js';
|
|
15
|
+
// Per-story capture variants: expansion after enumeration, and selection by a
|
|
16
|
+
// base id (story + all variants) or a capture key (one capture).
|
|
17
|
+
export { expandVariants, selectByStoryId, captureKey, platformStoryId, VariantConfigError, VARIANT_NAME, } from './capture/variants.js';
|
|
18
|
+
// Settle options: validation and layering shared by the CLI, the MCP server
|
|
19
|
+
// and the review server, so a bad value is reported the same way everywhere.
|
|
20
|
+
export { checkSettle, checkPatterns, checkProjectSettle, isSettleTimeout, settleFlag, SettleConfigError, DEFAULT_SETTLE_TIMEOUT_MS, MAX_SETTLE_TIMEOUT_MS, DEFAULT_NETWORK_IGNORE, } from './capture/settle-options.js';
|
|
21
|
+
export { discoverParams, prepareCaptures, } from './capture/discover.js';
|
|
15
22
|
// Implementing a baseline store. `encodeStoryId` matters for anyone building
|
|
16
23
|
// keys from a story id — they are platform-supplied and not path-safe.
|
|
17
24
|
export { GitBaselineStore, encodeStoryId } from './baseline/git-store.js';
|
|
@@ -54,10 +61,10 @@ export { resolveAffected, resolveAffectedFromPaths, gitIsCommit, } from './analy
|
|
|
54
61
|
// Cause: the story's import closure intersected with the changed files.
|
|
55
62
|
export { buildCauseIndex, prepareCause, } from './analysis/cause.js';
|
|
56
63
|
// Reporting on one.
|
|
57
|
-
export { buildHandoffPrompt, describeCause, } from './agent/handoff.js';
|
|
64
|
+
export { buildHandoffPrompt, describeCause, describeVariant, handoffVariant, } from './agent/handoff.js';
|
|
58
65
|
export { buildComment } from './report/comment.js';
|
|
59
66
|
export { isRunReport, parseRunReport } from './report/run-report.js';
|
|
60
67
|
export { buildHtmlReport } from './report/html.js';
|
|
61
|
-
export { formatPercent } from './report/format.js';
|
|
68
|
+
export { formatPercent, captureLabel, countStories, hasVariants, } from './report/format.js';
|
|
62
69
|
export { resolveArtifactUrl, resolveGitHubContext, postComment, } from './report/github.js';
|
|
63
70
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,iEAAiE;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,EAAE;AACF,8EAA8E;AAC9E,2EAA2E;AAC3E,yEAAyE;AACzE,6EAA6E;AAC7E,6DAA6D;AAC7D,EAAE;AACF,4EAA4E;AAC5E,8EAA8E;AAC9E,iEAAiE;AAuCjE,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAEtD,8EAA8E;AAC9E,iEAAiE;AACjE,OAAO,EACL,cAAc,EACd,eAAe,EACf,UAAU,EACV,eAAe,EACf,kBAAkB,EAClB,YAAY,GACb,MAAM,uBAAuB,CAAC;AAC/B,4EAA4E;AAC5E,6EAA6E;AAC7E,OAAO,EACL,WAAW,EACX,aAAa,EACb,kBAAkB,EAClB,eAAe,EACf,UAAU,EACV,iBAAiB,EACjB,yBAAyB,EACzB,qBAAqB,EACrB,sBAAsB,GAEvB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,cAAc,EACd,eAAe,GAEhB,MAAM,uBAAuB,CAAC;AAE/B,6EAA6E;AAC7E,uEAAuE;AACvE,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AAC1E,4EAA4E;AAC5E,8EAA8E;AAC9E,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AAEjD,OAAO,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAExE,2EAA2E;AAC3E,OAAO,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAC1E,8EAA8E;AAC9E,sEAAsE;AACtE,OAAO,EACL,cAAc,EACd,gBAAgB,GAEjB,MAAM,uBAAuB,CAAC;AAC/B,qEAAqE;AACrE,OAAO,EACL,cAAc,EACd,0BAA0B,GAE3B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,YAAY,EAAsC,MAAM,mBAAmB,CAAC;AACrF,4EAA4E;AAC5E,OAAO,EAAE,WAAW,EAAE,SAAS,EAAE,aAAa,EAAa,MAAM,iBAAiB,CAAC;AACnF,OAAO,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AAC7E,OAAO,EAAE,gBAAgB,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAE9C,iBAAiB;AACjB,OAAO,EACL,UAAU,EACV,gBAAgB,GAGjB,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAEhD,iEAAiE;AACjE,OAAO,EAAE,MAAM,EAAE,YAAY,EAAe,MAAM,iBAAiB,CAAC;AACpE,OAAO,EACL,QAAQ,EACR,SAAS,GAKV,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,0BAA0B,EAAsB,MAAM,oBAAoB,CAAC;AACpF,OAAO,EAAE,UAAU,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AAQtE,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAa,MAAM,mBAAmB,CAAC;AAC9E,OAAO,EAAE,cAAc,EAAuB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,WAAW,EACX,WAAW,EACX,cAAc,EACd,UAAU,EACV,WAAW,GAMZ,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,eAAe,EAAoB,MAAM,2BAA2B,CAAC;AAC9E,OAAO,EACL,aAAa,EACb,WAAW,EACX,WAAW,EACX,gBAAgB,EAChB,kBAAkB,GAGnB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EACL,aAAa,EACb,eAAe,EACf,cAAc,GAGf,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAC3D,OAAO,EACL,eAAe,EACf,wBAAwB,EACxB,WAAW,GAGZ,MAAM,wBAAwB,CAAC;AAChC,wEAAwE;AACxE,OAAO,EACL,eAAe,EACf,YAAY,GAIb,MAAM,qBAAqB,CAAC;AAE7B,oBAAoB;AACpB,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,cAAc,GAEf,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,YAAY,EAAuB,MAAM,qBAAqB,CAAC;AACxE,OAAO,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,EAAE,eAAe,EAA0B,MAAM,kBAAkB,CAAC;AAC3E,OAAO,EACL,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,WAAW,GAEZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,kBAAkB,EAClB,oBAAoB,EACpB,WAAW,GAEZ,MAAM,oBAAoB,CAAC"}
|
package/dist/platform.d.ts
CHANGED
|
@@ -75,6 +75,26 @@ export interface Platform {
|
|
|
75
75
|
* index alone silently drops per-story thresholds.
|
|
76
76
|
*/
|
|
77
77
|
readLiveParams?(page: Page, storyId: string): Promise<StoryParams | undefined>;
|
|
78
|
+
/**
|
|
79
|
+
* Read every story's params from the live preview once, before capture.
|
|
80
|
+
*
|
|
81
|
+
* Optional, for platforms whose static index drops per-story config.
|
|
82
|
+
* Storybook's index.json carries no `parameters.juxtapose`, so without this
|
|
83
|
+
* a story's own `variants` can't be expanded and its `skip` or `viewport`
|
|
84
|
+
* is only learned after it has rendered. Core calls it once per run on a
|
|
85
|
+
* page of its own, merges the result over the enumerated params (the
|
|
86
|
+
* preview wins) and expands variants from that. Keyed by story id; a story
|
|
87
|
+
* missing from the map keeps its enumerated params.
|
|
88
|
+
*
|
|
89
|
+
* May throw: core warns and carries on with the enumerated params.
|
|
90
|
+
*/
|
|
91
|
+
discoverParams?(page: Page, baseUrl: string): Promise<Map<string, StoryParams>>;
|
|
92
|
+
/**
|
|
93
|
+
* A fingerprint of everything `discoverParams` would read, so core can
|
|
94
|
+
* reuse the last result for an unchanged build. Undefined (or absent)
|
|
95
|
+
* means don't cache — a dev server, whose stories change under it.
|
|
96
|
+
*/
|
|
97
|
+
discoveryKey?(target: EnumerateTarget): Promise<string | undefined>;
|
|
78
98
|
/** Directories whose contents invalidate every story when changed
|
|
79
99
|
* (`.storybook`, `.ladle`). Project-relative. */
|
|
80
100
|
readonly configDirs: readonly string[];
|
package/dist/platforms/urls.js
CHANGED
|
@@ -67,7 +67,11 @@ export function createUrlPlatform(urls) {
|
|
|
67
67
|
title: u.id,
|
|
68
68
|
name: u.id,
|
|
69
69
|
componentPath: '',
|
|
70
|
-
|
|
70
|
+
// `variants` may sit on the entry itself (the spec's form) or in its
|
|
71
|
+
// params; the entry's win by name. Expansion happens in core.
|
|
72
|
+
params: u.variants
|
|
73
|
+
? { ...u.params, variants: { ...u.params?.variants, ...u.variants } }
|
|
74
|
+
: (u.params ?? {}),
|
|
71
75
|
}));
|
|
72
76
|
},
|
|
73
77
|
async showStory(page, storyId, baseUrl) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/platforms/urls.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"urls.js","sourceRoot":"","sources":["../../src/platforms/urls.ts"],"names":[],"mappings":"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"}
|
package/dist/report/comment.js
CHANGED
|
@@ -13,7 +13,8 @@
|
|
|
13
13
|
// 2. Images are impossible. GitHub's sanitizer strips `src` from both
|
|
14
14
|
// `<img src="data:...">` and ``; only https:// survives, via
|
|
15
15
|
// camo. So the text has to carry everything and link out for pixels.
|
|
16
|
-
import { formatPercent, isSubThreshold } from './format.js';
|
|
16
|
+
import { captureLabel, countStories, formatPercent, hasVariants, isSubThreshold, } from './format.js';
|
|
17
|
+
import { shellQuote } from '../shell-quote.js';
|
|
17
18
|
/**
|
|
18
19
|
* Invisible marker identifying our own comment.
|
|
19
20
|
*
|
|
@@ -103,12 +104,14 @@ function triageOrder(results) {
|
|
|
103
104
|
* acted on; the largest mismatch can.
|
|
104
105
|
*/
|
|
105
106
|
function heading(rows) {
|
|
107
|
+
// Rows are captures. With variants among them, "story" would miscount.
|
|
108
|
+
const [one, many] = hasVariants(rows) ? ['capture', 'captures'] : ['story', 'stories'];
|
|
106
109
|
const errors = rows.filter((r) => r.error).length;
|
|
107
110
|
const fails = rows.filter(changed);
|
|
108
111
|
if (errors > 0) {
|
|
109
112
|
const rest = rows.length - errors;
|
|
110
113
|
const tail = rest > 0 ? ` — ${rest} more ${rest === 1 ? 'needs' : 'need'} review` : '';
|
|
111
|
-
return `${count(errors,
|
|
114
|
+
return `${count(errors, one, many)} failed to capture${tail}`;
|
|
112
115
|
}
|
|
113
116
|
// Derived from `rows`, not `report.summary`: summary.fail counts errored
|
|
114
117
|
// stories too (run.ts marks them 'fail'), so a summary-based check here would
|
|
@@ -117,13 +120,13 @@ function heading(rows) {
|
|
|
117
120
|
// A first run is 100% new by construction. Calling that a failure teaches
|
|
118
121
|
// people the tool cries wolf on day one.
|
|
119
122
|
if (rows.every((r) => r.status === 'new')) {
|
|
120
|
-
return `${count(rows.length,
|
|
123
|
+
return `${count(rows.length, `new ${one}`, `new ${many}`)} — no baselines yet`;
|
|
121
124
|
}
|
|
122
125
|
if (rows.every((r) => r.status === 'stale')) {
|
|
123
126
|
return `${count(rows.length, 'stale baseline', 'stale baselines')} — pixels identical, re-approve to re-anchor`;
|
|
124
127
|
}
|
|
125
128
|
if (fails.length === 0) {
|
|
126
|
-
return `${count(rows.length,
|
|
129
|
+
return `${count(rows.length, one, many)} need review`;
|
|
127
130
|
}
|
|
128
131
|
const largest = Math.max(...fails.map((r) => r.mismatchPercent));
|
|
129
132
|
// Below 0.1% the individual numbers are noise and a wall of them reads as
|
|
@@ -132,7 +135,7 @@ function heading(rows) {
|
|
|
132
135
|
const magnitude = largest < 0.1 ? 'all under 0.1%' : `largest ${formatPercent(largest)}`;
|
|
133
136
|
// Mixed: name the shape, since "5 changes" would overstate what changed.
|
|
134
137
|
if (rows.length > fails.length) {
|
|
135
|
-
return `${count(rows.length,
|
|
138
|
+
return `${count(rows.length, one, many)} need review — ${fails.length} changed, ${magnitude}`;
|
|
136
139
|
}
|
|
137
140
|
const noun = count(fails.length, 'visual change', 'visual changes');
|
|
138
141
|
const verb = fails.length === 1 ? 'needs' : 'need';
|
|
@@ -160,7 +163,7 @@ function table(rows) {
|
|
|
160
163
|
const out = [`| ${head.join(' | ')} |`, `| ${head.map(() => '---').join(' | ')} |`];
|
|
161
164
|
for (const r of rows.slice(0, MAX_ROWS)) {
|
|
162
165
|
const cells = [
|
|
163
|
-
`\`${cell(r
|
|
166
|
+
`\`${cell(captureLabel(r))}\``,
|
|
164
167
|
showStatus ? (r.status === 'fail' ? 'changed' : r.status) : null,
|
|
165
168
|
showDetail ? detail(r) : null,
|
|
166
169
|
].filter((c) => c !== null);
|
|
@@ -194,14 +197,14 @@ function commands(rows) {
|
|
|
194
197
|
// pointing the "investigate this" tool at noise wastes the reader's time.
|
|
195
198
|
const worthInvestigating = rows.find((r) => changed(r) && r.mismatchPercent >= 0.1);
|
|
196
199
|
if (worthInvestigating) {
|
|
197
|
-
out.push(annotate(`jux handoff ${worthInvestigating.storyId}`, 'unsure? agent-ready prompt: what moved, where'));
|
|
200
|
+
out.push(annotate(`jux handoff ${shellQuote(worthInvestigating.storyId)}`, 'unsure? agent-ready prompt: what moved, where'));
|
|
198
201
|
}
|
|
199
202
|
// Never name an errored story here: approving a crashed capture bakes a
|
|
200
203
|
// broken baseline into the manifest, which is the one outcome worse than a
|
|
201
204
|
// red build.
|
|
202
205
|
const approvable = rows.find((r) => !r.error);
|
|
203
206
|
out.push(approvable
|
|
204
|
-
? annotate('jux approve --all', `or --story ${approvable.storyId}`)
|
|
207
|
+
? annotate('jux approve --all', `or --story ${shellQuote(approvable.storyId)}`)
|
|
205
208
|
: 'jux approve --all');
|
|
206
209
|
return out;
|
|
207
210
|
}
|
|
@@ -263,6 +266,14 @@ function passingBody(report) {
|
|
|
263
266
|
// `pass` counts CAPTURED passes, so "42 stories match" is a lie on a narrowed
|
|
264
267
|
// run where only six were captured.
|
|
265
268
|
const narrowed = report.capturedCount < report.totalCount;
|
|
269
|
+
if (hasVariants(report.results)) {
|
|
270
|
+
const stories = countStories(report.results);
|
|
271
|
+
const across = `across ${count(stories, 'story', 'stories')}`;
|
|
272
|
+
const head = narrowed
|
|
273
|
+
? `${count(s.pass, 'capture taken matches', 'captures taken match')} their baselines, ${across}.`
|
|
274
|
+
: `${count(s.pass, 'capture matches', 'captures match')} their baselines, ${across}.`;
|
|
275
|
+
return s.skip > 0 ? `${head} ${s.skip} skipped.` : head;
|
|
276
|
+
}
|
|
266
277
|
const head = narrowed
|
|
267
278
|
? `${count(s.pass, 'captured story matches', 'captured stories match')} their baselines.`
|
|
268
279
|
: `${count(s.pass, 'story matches', 'stories match')} their baselines.`;
|