reflection-check 0.0.4 → 0.0.5
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/cli.js +1 -1
- package/dist/commands/doctor.js +24 -3
- package/dist/commands/doctor.js.map +1 -1
- package/dist/contracts/component/component-visual-contract.d.ts +7 -3
- package/dist/contracts/component/component-visual-contract.js +183 -57
- package/dist/contracts/component/component-visual-contract.js.map +1 -1
- package/dist/contracts/component/portal-entry.d.ts +17 -0
- package/dist/contracts/component/portal-entry.js +2 -0
- package/dist/contracts/component/portal-entry.js.map +1 -0
- package/dist/core/config.d.ts +12 -4
- package/dist/core/config.js +89 -7
- package/dist/core/config.js.map +1 -1
- package/dist/core/target-ir.d.ts +5 -3
- package/dist/core/target-ir.js +9 -3
- package/dist/core/target-ir.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/integrations/portal/server.d.ts +25 -0
- package/dist/integrations/portal/server.js +186 -0
- package/dist/integrations/portal/server.js.map +1 -0
- package/docs/artifacts-and-gc.md +4 -1
- package/docs/configuration.md +64 -4
- package/docs/target-ir-and-adapters.md +4 -4
- package/docs/visual-contract.md +34 -4
- package/package.json +3 -2
package/dist/cli.js
CHANGED
package/dist/commands/doctor.js
CHANGED
|
@@ -79,9 +79,30 @@ function printConfigSummary(config, serverReachability) {
|
|
|
79
79
|
? `Design contract: ${design.enabled === false ? 'disabled' : 'enabled'}, ${formatCount(design.commands.length, 'command')}`
|
|
80
80
|
: 'Design contract: not configured');
|
|
81
81
|
const component = config.contracts.component;
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
: '
|
|
82
|
+
if (component) {
|
|
83
|
+
const runtime = describeComponentRuntime(component);
|
|
84
|
+
console.log(`Component contract: ${component.enabled === false ? 'disabled' : 'enabled'}, ${formatCount(component.cases.length, 'case')}, runtime ${runtime}`);
|
|
85
|
+
if (component.portal) {
|
|
86
|
+
console.log(`Component portal: readyUrl ${component.portal.readyUrl}, reuseExisting ${component.portal.reuseExisting}, timeoutMs ${component.portal.timeoutMs}`);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log('Component contract: not configured');
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
function describeComponentRuntime(component) {
|
|
94
|
+
const hasStorybookCases = component.cases.some((visualCase) => Boolean(visualCase.storyId));
|
|
95
|
+
const hasPortalCases = component.cases.some((visualCase) => Boolean(visualCase.path));
|
|
96
|
+
if (hasStorybookCases && hasPortalCases) {
|
|
97
|
+
return 'mixed';
|
|
98
|
+
}
|
|
99
|
+
if (hasPortalCases) {
|
|
100
|
+
return 'portal';
|
|
101
|
+
}
|
|
102
|
+
if (hasStorybookCases) {
|
|
103
|
+
return 'storybook';
|
|
104
|
+
}
|
|
105
|
+
return 'none';
|
|
85
106
|
}
|
|
86
107
|
async function checkConfiguredServerReachability(config) {
|
|
87
108
|
const readyUrl = config.contracts.browser?.server?.readyUrl;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAC;AAC3C,OAAO,EAAE,oBAAoB,EAAyB,MAAM,mBAAmB,CAAC;AAChF,OAAO,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAcjD,MAAM,gBAAgB,GAAG,EAAE,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAgC,EAAE;IACpE,IAAI,MAAoC,CAAC;IAEzC,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtD,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACvE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACvB,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,OAAO,CAAC,CAAC;QACrF,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,qBAAqB,EAAE,CAAC;IAC9C,MAAM,kBAAkB,GAAG,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,iCAAiC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChI,MAAM,MAAM,GAAG,OAAO,CAAC,aAAa,IAAI,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;IAEvF,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,WAAW,MAAM,EAAE,CAAC,CAAC;IACjC,OAAO,CAAC,GAAG,CAAC,SAAS,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,aAAa,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,gBAAgB,EAAE,GAAG,CAAC,CAAC;IACpH,OAAO,CAAC,GAAG,CAAC,uBAAuB,OAAO,CAAC,mBAAmB,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC;IAC5F,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;QAC/B,OAAO,CAAC,GAAG,CAAC,qBAAqB,OAAO,CAAC,uBAAuB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,OAAO,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC/H,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,OAAO,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC,CAAC;IAE3D,IAAI,MAAM,EAAE,CAAC;QACX,kBAAkB,CAAC,MAAM,EAAE,kBAAkB,CAAC,CAAC;IACjD,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,aAAa,EAAE,CAAC;QAC3B,MAAM,IAAI,cAAc,CACtB,QAAQ,CAAC,iBAAiB,EAC1B,mBAAmB,EACnB,iCAAiC,gBAAgB,sBAAsB,OAAO,CAAC,OAAO,EAAE,CACzF,CAAC;IACJ,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC;QACjC,MAAM,IAAI,cAAc,CAAC,QAAQ,CAAC,iBAAiB,EAAE,mBAAmB,EAAE,6CAA6C,CAAC,CAAC;IAC3H,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB;IAClC,MAAM,SAAS,GAAG,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC;IAErE,IAAI,CAAC;QACH,MAAM,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,YAAY,CAAC,CAAgC,CAAC;QAC/E,MAAM,kBAAkB,GAAG,UAAU,CAAC,QAAQ,CAAC,cAAc,EAAE,CAAC;QAChE,OAAO;YACL,aAAa,EAAE,SAAS,IAAI,gBAAgB;YAC5C,mBAAmB,EAAE,IAAI;YACzB,kBAAkB;YAClB,uBAAuB,EAAE,MAAM,UAAU,CAAC,kBAAkB,CAAC;SAC9D,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,aAAa,EAAE,SAAS,IAAI,gBAAgB;YAC5C,mBAAmB,EAAE,KAAK;SAC3B,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAwB,EAAE,kBAAsC;IAC1F,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;IAE1C,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,CAAC,OAAO,CAAC;IACzC,IAAI,OAAO,EAAE,CAAC;QACZ,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;QACzE,OAAO,CAAC,GAAG,CACT,qBAAqB,aAAa,KAAK,WAAW,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,WAAW,CAChG,OAAO,CAAC,WAAW,CAAC,MAAM,EAC1B,mBAAmB,CACpB,EAAE,CACJ,CAAC;QACF,OAAO,CAAC,GAAG,CAAC,aAAa,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;QAE5C,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACnB,OAAO,CAAC,GAAG,CACT,gCAAgC,OAAO,CAAC,MAAM,CAAC,QAAQ,mBAAmB,OAAO,CAAC,MAAM,CAAC,aAAa,eAAe,OAAO,CAAC,MAAM,CAAC,SAAS,EAAE,CAChJ,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,kBAAkB,IAAI,4CAA4C,EAAE,CAAC,CAAC;QAC5G,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,wDAAwD,CAAC,CAAC;QACxE,CAAC;IACH,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,kCAAkC,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC;IACvC,OAAO,CAAC,GAAG,CACT,MAAM;QACJ,CAAC,CAAC,oBAAoB,MAAM,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,KAAK,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;QAC5H,CAAC,CAAC,iCAAiC,CACtC,CAAC;IAEF,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;IAC7C,
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,10 +2,13 @@ import type { ArtifactStore } from '../../core/artifact-store.js';
|
|
|
2
2
|
import type { CheckResult } from '../../core/report-schema.js';
|
|
3
3
|
import type { ServerConfig } from '../../core/server-manager.js';
|
|
4
4
|
import { type ViewportSize } from '../../integrations/playwright/context-factory.js';
|
|
5
|
+
import { type PortalConfig } from '../../integrations/portal/server.js';
|
|
5
6
|
import type { VisualThreshold } from '../visual/thresholds.js';
|
|
7
|
+
export type ComponentSource = 'storybook' | 'portal';
|
|
6
8
|
export type ComponentVisualCase = {
|
|
7
9
|
id: string;
|
|
8
|
-
storyId
|
|
10
|
+
storyId?: string | undefined;
|
|
11
|
+
path?: string | undefined;
|
|
9
12
|
baseline: string;
|
|
10
13
|
baselineRoot?: string | undefined;
|
|
11
14
|
viewport?: string | undefined;
|
|
@@ -26,14 +29,15 @@ export type ComponentBrowserState = {
|
|
|
26
29
|
};
|
|
27
30
|
};
|
|
28
31
|
export type ComponentFraming = {
|
|
29
|
-
rootSelector
|
|
32
|
+
rootSelector?: string | undefined;
|
|
30
33
|
background?: string | undefined;
|
|
31
34
|
align: 'center' | 'start';
|
|
32
35
|
padding: number;
|
|
33
36
|
};
|
|
34
37
|
export type ComponentVisualContractConfig = {
|
|
35
38
|
enabled?: boolean | undefined;
|
|
36
|
-
storybook
|
|
39
|
+
storybook?: ServerConfig | undefined;
|
|
40
|
+
portal?: PortalConfig | undefined;
|
|
37
41
|
cases: ComponentVisualCase[];
|
|
38
42
|
};
|
|
39
43
|
export declare function runComponentVisualContract(config: ComponentVisualContractConfig | undefined, store: ArtifactStore): Promise<CheckResult[]>;
|
|
@@ -3,6 +3,7 @@ import { dirname } from 'node:path';
|
|
|
3
3
|
import { createBaselineStore, createMissingBaselineCheck } from '../../core/baseline-store.js';
|
|
4
4
|
import { createBrowserContext } from '../../integrations/playwright/context-factory.js';
|
|
5
5
|
import { launchBrowser } from '../../integrations/playwright/browser-manager.js';
|
|
6
|
+
import { startReflectionPortalServer } from '../../integrations/portal/server.js';
|
|
6
7
|
import { startStorybookServer } from '../../integrations/storybook/server.js';
|
|
7
8
|
import { resolveStoryUrl } from '../../integrations/storybook/story-url.js';
|
|
8
9
|
import { comparePngImages } from '../visual/image-diff.js';
|
|
@@ -10,28 +11,73 @@ export async function runComponentVisualContract(config, store) {
|
|
|
10
11
|
if (!config || config.enabled === false || config.cases.length === 0) {
|
|
11
12
|
return [];
|
|
12
13
|
}
|
|
13
|
-
const
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const storybookCases = config.cases.filter(isStorybookCase);
|
|
15
|
+
const portalCases = config.cases.filter(isPortalCase);
|
|
16
|
+
if (storybookCases.length > 0 && !config.storybook) {
|
|
17
|
+
throw new Error('Storybook component visual cases require component.storybook.');
|
|
18
|
+
}
|
|
19
|
+
if (portalCases.length > 0 && !config.portal) {
|
|
20
|
+
throw new Error('Portal component visual cases require component.portal.');
|
|
21
|
+
}
|
|
22
|
+
const storybook = storybookCases.length > 0 && config.storybook
|
|
23
|
+
? await startStorybookServer(config.storybook, {
|
|
24
|
+
cwd: process.cwd(),
|
|
25
|
+
logPath: store.resolveRunPath('server/storybook.log')
|
|
26
|
+
})
|
|
27
|
+
: undefined;
|
|
28
|
+
const portal = portalCases.length > 0 && config.portal
|
|
29
|
+
? await startReflectionPortalServer(config.portal, portalCases.map((visualCase) => ({
|
|
30
|
+
id: visualCase.id,
|
|
31
|
+
path: visualCase.path,
|
|
32
|
+
viewport: visualCase.viewport ?? 'component',
|
|
33
|
+
viewportSize: visualCase.viewportSize,
|
|
34
|
+
framing: resolveComponentFraming(visualCase.framing, 'portal')
|
|
35
|
+
})), {
|
|
36
|
+
cwd: process.cwd(),
|
|
37
|
+
rootDir: store.resolveRunPath('server/portal')
|
|
38
|
+
})
|
|
39
|
+
: undefined;
|
|
17
40
|
const browser = await launchBrowser();
|
|
18
41
|
try {
|
|
19
42
|
const checks = [];
|
|
20
|
-
for (const visualCase of
|
|
43
|
+
for (const visualCase of storybookCases) {
|
|
44
|
+
if (!storybook)
|
|
45
|
+
continue;
|
|
21
46
|
const storyUrl = resolveStoryUrl(storybook.index, storybook.baseUrl, visualCase.storyId);
|
|
22
|
-
checks.push(await runComponentVisualCase({
|
|
47
|
+
checks.push(await runComponentVisualCase({
|
|
48
|
+
visualCase,
|
|
49
|
+
componentSource: 'storybook',
|
|
50
|
+
targetUrl: storyUrl,
|
|
51
|
+
targetLabel: visualCase.storyId,
|
|
52
|
+
store,
|
|
53
|
+
browser
|
|
54
|
+
}));
|
|
55
|
+
}
|
|
56
|
+
for (const visualCase of portalCases) {
|
|
57
|
+
if (!portal)
|
|
58
|
+
continue;
|
|
59
|
+
const portalUrl = new URL(visualCase.path, portal.baseUrl).toString();
|
|
60
|
+
checks.push(await runComponentVisualCase({
|
|
61
|
+
visualCase,
|
|
62
|
+
componentSource: 'portal',
|
|
63
|
+
targetUrl: portalUrl,
|
|
64
|
+
targetLabel: visualCase.path,
|
|
65
|
+
store,
|
|
66
|
+
browser
|
|
67
|
+
}));
|
|
23
68
|
}
|
|
24
69
|
return checks;
|
|
25
70
|
}
|
|
26
71
|
finally {
|
|
27
72
|
await browser.close();
|
|
28
|
-
await storybook
|
|
73
|
+
await storybook?.server.stop();
|
|
74
|
+
await portal?.server.stop();
|
|
29
75
|
}
|
|
30
76
|
}
|
|
31
77
|
async function runComponentVisualCase(input) {
|
|
32
78
|
const viewport = input.visualCase.viewport ?? 'component';
|
|
33
79
|
const viewportSize = input.visualCase.viewportSize;
|
|
34
|
-
const target = `${input.
|
|
80
|
+
const target = `${input.targetLabel} ${viewport}`;
|
|
35
81
|
const baselinePath = resolveCaseBaselinePath(input.visualCase);
|
|
36
82
|
const blocking = input.visualCase.blocking === true || input.visualCase.strict === true;
|
|
37
83
|
const strict = input.visualCase.strict === true || input.visualCase.blocking === true;
|
|
@@ -41,61 +87,93 @@ async function runComponentVisualCase(input) {
|
|
|
41
87
|
target,
|
|
42
88
|
baselinePath: input.visualCase.baseline,
|
|
43
89
|
blocking,
|
|
44
|
-
metadata:
|
|
90
|
+
metadata: {
|
|
91
|
+
...createComponentSourceMetadata(input),
|
|
92
|
+
...createComponentMetadata(input.visualCase, input.componentSource)
|
|
93
|
+
}
|
|
45
94
|
});
|
|
46
95
|
}
|
|
47
96
|
const artifactBase = `visual/${input.visualCase.id}`;
|
|
48
97
|
const expectedArtifact = await input.store.writeBuffer(`${artifactBase}/expected.png`, await readFile(baselinePath));
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
framing: input.visualCase.framing,
|
|
57
|
-
browserState: input.visualCase.browserState
|
|
58
|
-
});
|
|
59
|
-
const diffRelativePath = `${artifactBase}/diff.png`;
|
|
60
|
-
const diffPath = input.store.resolveRunPath(diffRelativePath);
|
|
61
|
-
await mkdir(dirname(diffPath), { recursive: true });
|
|
62
|
-
const result = await comparePngImages({
|
|
63
|
-
expectedPath: baselinePath,
|
|
64
|
-
actualPath: input.store.resolveRunPath(actualArtifact.path),
|
|
65
|
-
diffPath,
|
|
66
|
-
...(input.visualCase.threshold ? { threshold: input.visualCase.threshold } : {}),
|
|
67
|
-
strict
|
|
68
|
-
});
|
|
69
|
-
const diffArtifact = result.diffPath ? await input.store.describeArtifact(diffRelativePath, 'visual-diff', 'diff') : undefined;
|
|
70
|
-
const severity = result.status === 'fail' && blocking ? 'blocking' : 'review';
|
|
71
|
-
return {
|
|
72
|
-
id: `visual.${input.visualCase.id}`,
|
|
73
|
-
suite: 'visual',
|
|
74
|
-
target,
|
|
75
|
-
status: result.status,
|
|
76
|
-
severity,
|
|
77
|
-
summary: createComponentVisualSummary(input.visualCase.id, result),
|
|
78
|
-
artifacts: [expectedArtifact, actualArtifact, ...(diffArtifact ? [diffArtifact] : [])],
|
|
79
|
-
metadata: {
|
|
80
|
-
...result,
|
|
81
|
-
storyId: input.visualCase.storyId,
|
|
82
|
-
storyUrl: input.storyUrl,
|
|
98
|
+
try {
|
|
99
|
+
const actualArtifact = await captureComponentScreenshot({
|
|
100
|
+
browser: input.browser,
|
|
101
|
+
store: input.store,
|
|
102
|
+
path: `${artifactBase}/actual.png`,
|
|
103
|
+
targetUrl: input.targetUrl,
|
|
104
|
+
componentSource: input.componentSource,
|
|
83
105
|
viewport,
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
106
|
+
viewportSize,
|
|
107
|
+
framing: resolveComponentFraming(input.visualCase.framing, input.componentSource),
|
|
108
|
+
browserState: input.visualCase.browserState
|
|
109
|
+
});
|
|
110
|
+
const diffRelativePath = `${artifactBase}/diff.png`;
|
|
111
|
+
const diffPath = input.store.resolveRunPath(diffRelativePath);
|
|
112
|
+
await mkdir(dirname(diffPath), { recursive: true });
|
|
113
|
+
const result = await comparePngImages({
|
|
114
|
+
expectedPath: baselinePath,
|
|
115
|
+
actualPath: input.store.resolveRunPath(actualArtifact.path),
|
|
116
|
+
diffPath,
|
|
117
|
+
...(input.visualCase.threshold ? { threshold: input.visualCase.threshold } : {}),
|
|
118
|
+
strict
|
|
119
|
+
});
|
|
120
|
+
const diffArtifact = result.diffPath ? await input.store.describeArtifact(diffRelativePath, 'visual-diff', 'diff') : undefined;
|
|
121
|
+
const severity = result.status === 'fail' && blocking ? 'blocking' : 'review';
|
|
122
|
+
return {
|
|
123
|
+
id: `visual.${input.visualCase.id}`,
|
|
124
|
+
suite: 'visual',
|
|
125
|
+
target,
|
|
126
|
+
status: result.status,
|
|
127
|
+
severity,
|
|
128
|
+
summary: createComponentVisualSummary(input.visualCase.id, result),
|
|
129
|
+
artifacts: [expectedArtifact, actualArtifact, ...(diffArtifact ? [diffArtifact] : [])],
|
|
130
|
+
metadata: {
|
|
131
|
+
...result,
|
|
132
|
+
...createComponentSourceMetadata(input),
|
|
133
|
+
viewport,
|
|
134
|
+
baselinePath: input.visualCase.baseline,
|
|
135
|
+
...createComponentMetadata(input.visualCase, input.componentSource)
|
|
136
|
+
},
|
|
137
|
+
...(result.status === 'pass'
|
|
138
|
+
? {}
|
|
139
|
+
: { suggestedNextStep: 'Inspect expected, actual, and diff artifacts. If intentional, update only this component visual baseline.' })
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
catch (error) {
|
|
143
|
+
const summary = `${input.visualCase.id} component visual capture failed: ${error instanceof Error ? error.message : String(error)}`;
|
|
144
|
+
return {
|
|
145
|
+
id: `visual.${input.visualCase.id}`,
|
|
146
|
+
suite: 'visual',
|
|
147
|
+
target,
|
|
148
|
+
status: 'fail',
|
|
149
|
+
severity: blocking ? 'blocking' : 'review',
|
|
150
|
+
summary,
|
|
151
|
+
artifacts: [expectedArtifact],
|
|
152
|
+
metadata: {
|
|
153
|
+
classification: 'tool-error',
|
|
154
|
+
...createComponentSourceMetadata(input),
|
|
155
|
+
viewport,
|
|
156
|
+
baselinePath: input.visualCase.baseline,
|
|
157
|
+
...createComponentMetadata(input.visualCase, input.componentSource)
|
|
158
|
+
},
|
|
159
|
+
suggestedNextStep: 'Fix the component visual runtime setup, then rerun Reflection.'
|
|
160
|
+
};
|
|
161
|
+
}
|
|
91
162
|
}
|
|
92
163
|
async function captureComponentScreenshot(input) {
|
|
93
164
|
const context = await createBrowserContext(input.browser, input.viewport, input.viewportSize);
|
|
94
165
|
try {
|
|
95
166
|
const page = await context.newPage();
|
|
96
|
-
await page.goto(input.
|
|
167
|
+
await page.goto(input.targetUrl, { waitUntil: 'domcontentloaded' });
|
|
97
168
|
await page.waitForLoadState('networkidle', { timeout: 2_000 }).catch(() => undefined);
|
|
98
|
-
if (input.
|
|
169
|
+
if (input.componentSource === 'portal') {
|
|
170
|
+
await waitForPortalReady(page);
|
|
171
|
+
if (!input.viewportSize) {
|
|
172
|
+
throw new Error('Portal component visual cases require viewportSize.');
|
|
173
|
+
}
|
|
174
|
+
await assertPortalFrameDimensions(page, input.viewportSize);
|
|
175
|
+
}
|
|
176
|
+
else if (input.framing) {
|
|
99
177
|
await applyComponentFraming(page, input.framing);
|
|
100
178
|
}
|
|
101
179
|
if (input.browserState) {
|
|
@@ -140,6 +218,28 @@ async function applyComponentFraming(page, framing) {
|
|
|
140
218
|
`
|
|
141
219
|
});
|
|
142
220
|
}
|
|
221
|
+
async function waitForPortalReady(page) {
|
|
222
|
+
await page.waitForFunction(() => {
|
|
223
|
+
const portalState = globalThis;
|
|
224
|
+
return portalState.__reflectionPortalReady === true || typeof portalState.__reflectionPortalError === 'string';
|
|
225
|
+
}, undefined, { timeout: 5_000 });
|
|
226
|
+
const portalError = await page.evaluate(() => {
|
|
227
|
+
const portalState = globalThis;
|
|
228
|
+
return portalState.__reflectionPortalError;
|
|
229
|
+
});
|
|
230
|
+
if (portalError) {
|
|
231
|
+
throw new Error(portalError);
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
async function assertPortalFrameDimensions(page, viewportSize) {
|
|
235
|
+
const frame = await page.locator('#reflection-root').boundingBox({ timeout: 2_000 });
|
|
236
|
+
if (!frame) {
|
|
237
|
+
throw new Error('Reflection portal frame #reflection-root was not found.');
|
|
238
|
+
}
|
|
239
|
+
if (frame.width !== viewportSize.width || frame.height !== viewportSize.height) {
|
|
240
|
+
throw new Error(`Reflection portal frame rendered ${frame.width}x${frame.height}, expected ${viewportSize.width}x${viewportSize.height}.`);
|
|
241
|
+
}
|
|
242
|
+
}
|
|
143
243
|
async function applyBrowserState(page, browserState) {
|
|
144
244
|
if (browserState.animationStabilization.disableAnimations !== false) {
|
|
145
245
|
await page.addStyleTag({ content: '*, *::before, *::after { animation: none !important; transition: none !important; }' });
|
|
@@ -154,18 +254,38 @@ async function applyBrowserState(page, browserState) {
|
|
|
154
254
|
await page.waitForTimeout(browserState.animationStabilization.waitMs);
|
|
155
255
|
}
|
|
156
256
|
}
|
|
157
|
-
function createComponentStateMetadata(visualCase) {
|
|
257
|
+
function createComponentStateMetadata(visualCase, componentSource) {
|
|
158
258
|
return {
|
|
159
|
-
statePolicy: visualCase.browserState ? 'browser-forced-with-stabilization' : 'story-controlled',
|
|
259
|
+
statePolicy: visualCase.browserState ? 'browser-forced-with-stabilization' : componentSource === 'portal' ? 'portal-controlled' : 'story-controlled',
|
|
160
260
|
...(visualCase.stateNote ? { stateNote: visualCase.stateNote } : {}),
|
|
161
261
|
...(visualCase.browserState ? { browserState: visualCase.browserState } : {})
|
|
162
262
|
};
|
|
163
263
|
}
|
|
164
|
-
function createComponentMetadata(visualCase) {
|
|
264
|
+
function createComponentMetadata(visualCase, componentSource) {
|
|
265
|
+
const framing = resolveComponentFraming(visualCase.framing, componentSource);
|
|
165
266
|
return {
|
|
166
267
|
...(visualCase.viewportSize ? { viewportSize: visualCase.viewportSize } : {}),
|
|
167
|
-
...(
|
|
168
|
-
...createComponentStateMetadata(visualCase)
|
|
268
|
+
...(framing ? { framing } : {}),
|
|
269
|
+
...createComponentStateMetadata(visualCase, componentSource)
|
|
270
|
+
};
|
|
271
|
+
}
|
|
272
|
+
function createComponentSourceMetadata(input) {
|
|
273
|
+
return {
|
|
274
|
+
componentSource: input.componentSource,
|
|
275
|
+
...(input.visualCase.storyId ? { storyId: input.visualCase.storyId, storyUrl: input.targetUrl } : {}),
|
|
276
|
+
...(input.visualCase.path ? { path: input.visualCase.path, portalUrl: input.targetUrl } : {})
|
|
277
|
+
};
|
|
278
|
+
}
|
|
279
|
+
function resolveComponentFraming(framing, componentSource) {
|
|
280
|
+
if (!framing && componentSource === 'portal') {
|
|
281
|
+
return { rootSelector: '#reflection-root', align: 'center', padding: 0 };
|
|
282
|
+
}
|
|
283
|
+
if (!framing) {
|
|
284
|
+
return undefined;
|
|
285
|
+
}
|
|
286
|
+
return {
|
|
287
|
+
...framing,
|
|
288
|
+
rootSelector: framing.rootSelector ?? (componentSource === 'portal' ? '#reflection-root' : '#storybook-root')
|
|
169
289
|
};
|
|
170
290
|
}
|
|
171
291
|
function resolveCaseBaselinePath(visualCase) {
|
|
@@ -190,4 +310,10 @@ function createComponentVisualSummary(id, result) {
|
|
|
190
310
|
}
|
|
191
311
|
return `${id} differs from approved component visual baseline by ${(result.diffRatio * 100).toFixed(2)}% (${result.diffPixels} pixels)${result.thresholdReason ? `, exceeding ${result.thresholdReason}` : ''}.`;
|
|
192
312
|
}
|
|
313
|
+
function isStorybookCase(visualCase) {
|
|
314
|
+
return typeof visualCase.storyId === 'string';
|
|
315
|
+
}
|
|
316
|
+
function isPortalCase(visualCase) {
|
|
317
|
+
return typeof visualCase.path === 'string' && visualCase.viewportSize !== undefined;
|
|
318
|
+
}
|
|
193
319
|
//# sourceMappingURL=component-visual-contract.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"component-visual-contract.js","sourceRoot":"","sources":["../../../src/contracts/component/component-visual-contract.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"component-visual-contract.js","sourceRoot":"","sources":["../../../src/contracts/component/component-visual-contract.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,OAAO,EAAE,mBAAmB,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;AAG/F,OAAO,EAAE,oBAAoB,EAAqB,MAAM,kDAAkD,CAAC;AAC3G,OAAO,EAAE,aAAa,EAAE,MAAM,kDAAkD,CAAC;AACjF,OAAO,EAAE,2BAA2B,EAAqB,MAAM,qCAAqC,CAAC;AACrG,OAAO,EAAE,oBAAoB,EAAE,MAAM,wCAAwC,CAAC;AAC9E,OAAO,EAAE,eAAe,EAAE,MAAM,2CAA2C,CAAC;AAC5E,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAgD3D,MAAM,CAAC,KAAK,UAAU,0BAA0B,CAC9C,MAAiD,EACjD,KAAoB;IAEpB,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrE,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;IAC5D,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;IACtD,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE,CAAC;QACnD,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;IACnF,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,MAAM,SAAS,GACb,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,SAAS;QAC3C,CAAC,CAAC,MAAM,oBAAoB,CAAC,MAAM,CAAC,SAAS,EAAE;YAC3C,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,sBAAsB,CAAC;SACtD,CAAC;QACJ,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,MAAM,GACV,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,MAAM,CAAC,MAAM;QACrC,CAAC,CAAC,MAAM,2BAA2B,CAC/B,MAAM,CAAC,MAAM,EACb,WAAW,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;YAC/B,EAAE,EAAE,UAAU,CAAC,EAAE;YACjB,IAAI,EAAE,UAAU,CAAC,IAAI;YACrB,QAAQ,EAAE,UAAU,CAAC,QAAQ,IAAI,WAAW;YAC5C,YAAY,EAAE,UAAU,CAAC,YAAY;YACrC,OAAO,EAAE,uBAAuB,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,CAAC;SAC/D,CAAC,CAAC,EACH;YACE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;YAClB,OAAO,EAAE,KAAK,CAAC,cAAc,CAAC,eAAe,CAAC;SAC/C,CACF;QACH,CAAC,CAAC,SAAS,CAAC;IAChB,MAAM,OAAO,GAAG,MAAM,aAAa,EAAE,CAAC;IAEtC,IAAI,CAAC;QACH,MAAM,MAAM,GAAkB,EAAE,CAAC;QACjC,KAAK,MAAM,UAAU,IAAI,cAAc,EAAE,CAAC;YACxC,IAAI,CAAC,SAAS;gBAAE,SAAS;YACzB,MAAM,QAAQ,GAAG,eAAe,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;YACzF,MAAM,CAAC,IAAI,CACT,MAAM,sBAAsB,CAAC;gBAC3B,UAAU;gBACV,eAAe,EAAE,WAAW;gBAC5B,SAAS,EAAE,QAAQ;gBACnB,WAAW,EAAE,UAAU,CAAC,OAAO;gBAC/B,KAAK;gBACL,OAAO;aACR,CAAC,CACH,CAAC;QACJ,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;YACrC,IAAI,CAAC,MAAM;gBAAE,SAAS;YACtB,MAAM,SAAS,GAAG,IAAI,GAAG,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,CAAC;YACtE,MAAM,CAAC,IAAI,CACT,MAAM,sBAAsB,CAAC;gBAC3B,UAAU;gBACV,eAAe,EAAE,QAAQ;gBACzB,SAAS,EAAE,SAAS;gBACpB,WAAW,EAAE,UAAU,CAAC,IAAI;gBAC5B,KAAK;gBACL,OAAO;aACR,CAAC,CACH,CAAC;QACJ,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,SAAS,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/B,MAAM,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,CAAC;IAC9B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,KAOrC;IACC,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,IAAI,WAAW,CAAC;IAC1D,MAAM,YAAY,GAAG,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC;IACnD,MAAM,MAAM,GAAG,GAAG,KAAK,CAAC,WAAW,IAAI,QAAQ,EAAE,CAAC;IAClD,MAAM,YAAY,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;IAC/D,MAAM,QAAQ,GAAG,KAAK,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,CAAC;IACxF,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,UAAU,CAAC,QAAQ,KAAK,IAAI,CAAC;IAEtF,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,YAAY,CAAC,CAAC,EAAE,CAAC;QACtC,OAAO,0BAA0B,CAAC;YAChC,EAAE,EAAE,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE;YACnC,MAAM;YACN,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;YACvC,QAAQ;YACR,QAAQ,EAAE;gBACR,GAAG,6BAA6B,CAAC,KAAK,CAAC;gBACvC,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC;aACpE;SACF,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;IACrD,MAAM,gBAAgB,GAAG,MAAM,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,GAAG,YAAY,eAAe,EAAE,MAAM,QAAQ,CAAC,YAAY,CAAC,CAAC,CAAC;IAErH,IAAI,CAAC;QACH,MAAM,cAAc,GAAG,MAAM,0BAA0B,CAAC;YACtD,OAAO,EAAE,KAAK,CAAC,OAAO;YACtB,KAAK,EAAE,KAAK,CAAC,KAAK;YAClB,IAAI,EAAE,GAAG,YAAY,aAAa;YAClC,SAAS,EAAE,KAAK,CAAC,SAAS;YAC1B,eAAe,EAAE,KAAK,CAAC,eAAe;YACtC,QAAQ;YACR,YAAY;YACZ,OAAO,EAAE,uBAAuB,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,eAAe,CAAC;YACjF,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,YAAY;SAC5C,CAAC,CAAC;QACH,MAAM,gBAAgB,GAAG,GAAG,YAAY,WAAW,CAAC;QACpD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,gBAAgB,CAAC,CAAC;QAC9D,MAAM,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAEpD,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;YACpC,YAAY,EAAE,YAAY;YAC1B,UAAU,EAAE,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,IAAI,CAAC;YAC3D,QAAQ;YACR,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAChF,MAAM;SACP,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,gBAAgB,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAC/H,MAAM,QAAQ,GAA4B,MAAM,CAAC,MAAM,KAAK,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,CAAC;QAEvG,OAAO;YACL,EAAE,EAAE,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE;YACnC,KAAK,EAAE,QAAQ;YACf,MAAM;YACN,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,QAAQ;YACR,OAAO,EAAE,4BAA4B,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC;YAClE,SAAS,EAAE,CAAC,gBAAgB,EAAE,cAAc,EAAE,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YACtF,QAAQ,EAAE;gBACR,GAAG,MAAM;gBACT,GAAG,6BAA6B,CAAC,KAAK,CAAC;gBACvC,QAAQ;gBACR,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;gBACvC,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC;aACpE;YACD,GAAG,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM;gBAC1B,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,EAAE,iBAAiB,EAAE,2GAA2G,EAAE,CAAC;SACxI,CAAC;IACJ,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,GAAG,KAAK,CAAC,UAAU,CAAC,EAAE,qCAAqC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;QACpI,OAAO;YACL,EAAE,EAAE,UAAU,KAAK,CAAC,UAAU,CAAC,EAAE,EAAE;YACnC,KAAK,EAAE,QAAQ;YACf,MAAM;YACN,MAAM,EAAE,MAAM;YACd,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ;YAC1C,OAAO;YACP,SAAS,EAAE,CAAC,gBAAgB,CAAC;YAC7B,QAAQ,EAAE;gBACR,cAAc,EAAE,YAAY;gBAC5B,GAAG,6BAA6B,CAAC,KAAK,CAAC;gBACvC,QAAQ;gBACR,YAAY,EAAE,KAAK,CAAC,UAAU,CAAC,QAAQ;gBACvC,GAAG,uBAAuB,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,CAAC,eAAe,CAAC;aACpE;YACD,iBAAiB,EAAE,gEAAgE;SACpF,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,0BAA0B,CAAC,KAUzC;IACC,MAAM,OAAO,GAAG,MAAM,oBAAoB,CAAC,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,QAAQ,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;IAC9F,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,CAAC;QACrC,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;QACpE,MAAM,IAAI,CAAC,gBAAgB,CAAC,aAAa,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QACtF,IAAI,KAAK,CAAC,eAAe,KAAK,QAAQ,EAAE,CAAC;YACvC,MAAM,kBAAkB,CAAC,IAAI,CAAC,CAAC;YAC/B,IAAI,CAAC,KAAK,CAAC,YAAY,EAAE,CAAC;gBACxB,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;YACzE,CAAC;YACD,MAAM,2BAA2B,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QAC9D,CAAC;aAAM,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACzB,MAAM,qBAAqB,CAAC,IAAI,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QACD,IAAI,KAAK,CAAC,YAAY,EAAE,CAAC;YACvB,MAAM,iBAAiB,CAAC,IAAI,EAAE,KAAK,CAAC,YAAY,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,EAAE,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;IACtE,CAAC;YAAS,CAAC;QACT,MAAM,OAAO,CAAC,KAAK,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,IAAU,EAAE,OAAkC;IACjF,MAAM,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,OAAO,CAAC,EAAE,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IAExF,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,eAAe,OAAO,CAAC,UAAU,cAAc,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,MAAM,SAAS,GACb,OAAO,CAAC,KAAK,KAAK,QAAQ;QACxB,CAAC,CAAC,2DAA2D;QAC7D,CAAC,CAAC,4BAA4B,CAAC;IAEnC,MAAM,IAAI,CAAC,WAAW,CAAC;QACrB,OAAO,EAAE;;;;;;;;;UASH,UAAU;;;QAGZ,OAAO,CAAC,YAAY;;;;;;;mBAOT,OAAO,CAAC,OAAO;UACxB,UAAU;UACV,SAAS;;KAEd;KACF,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,IAAU;IAC1C,MAAM,IAAI,CAAC,eAAe,CACxB,GAAG,EAAE;QACH,MAAM,WAAW,GAAG,UAAgG,CAAC;QACrH,OAAO,WAAW,CAAC,uBAAuB,KAAK,IAAI,IAAI,OAAO,WAAW,CAAC,uBAAuB,KAAK,QAAQ,CAAC;IACjH,CAAC,EACD,SAAS,EACT,EAAE,OAAO,EAAE,KAAK,EAAE,CACnB,CAAC;IAEF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE;QAC3C,MAAM,WAAW,GAAG,UAA6D,CAAC;QAClF,OAAO,WAAW,CAAC,uBAAuB,CAAC;IAC7C,CAAC,CAAC,CAAC;IACH,IAAI,WAAW,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,WAAW,CAAC,CAAC;IAC/B,CAAC;AACH,CAAC;AAED,KAAK,UAAU,2BAA2B,CAAC,IAAU,EAAE,YAA0B;IAC/E,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;IACrF,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,MAAM,IAAI,KAAK,CAAC,yDAAyD,CAAC,CAAC;IAC7E,CAAC;IAED,IAAI,KAAK,CAAC,KAAK,KAAK,YAAY,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM,EAAE,CAAC;QAC/E,MAAM,IAAI,KAAK,CACb,oCAAoC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,cAAc,YAAY,CAAC,KAAK,IAAI,YAAY,CAAC,MAAM,GAAG,CAC1H,CAAC;IACJ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,IAAU,EAAE,YAAmC;IAC9E,IAAI,YAAY,CAAC,sBAAsB,CAAC,iBAAiB,KAAK,KAAK,EAAE,CAAC;QACpE,MAAM,IAAI,CAAC,WAAW,CAAC,EAAE,OAAO,EAAE,qFAAqF,EAAE,CAAC,CAAC;IAC7H,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAClC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,KAAK,EAAE,CAAC;IACpD,CAAC;IAED,IAAI,YAAY,CAAC,sBAAsB,CAAC,MAAM,IAAI,YAAY,CAAC,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACjG,MAAM,IAAI,CAAC,cAAc,CAAC,YAAY,CAAC,sBAAsB,CAAC,MAAM,CAAC,CAAC;IACxE,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,UAA+B,EAAE,eAAgC;IACrG,OAAO;QACL,WAAW,EAAE,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,kBAAkB;QACpJ,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9E,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,UAA+B,EAAE,eAAgC;IAChG,MAAM,OAAO,GAAG,uBAAuB,CAAC,UAAU,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC;IAC7E,OAAO;QACL,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7E,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/B,GAAG,4BAA4B,CAAC,UAAU,EAAE,eAAe,CAAC;KAC7D,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,KAA+F;IACpI,OAAO;QACL,eAAe,EAAE,KAAK,CAAC,eAAe;QACtC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrG,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9F,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,OAAqC,EAAE,eAAgC;IACtG,IAAI,CAAC,OAAO,IAAI,eAAe,KAAK,QAAQ,EAAE,CAAC;QAC7C,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,EAAE,CAAC;IAC3E,CAAC;IAED,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,OAAO;QACL,GAAG,OAAO;QACV,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,CAAC,eAAe,KAAK,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,iBAAiB,CAAC;KAC9G,CAAC;AACJ,CAAC;AAED,SAAS,uBAAuB,CAAC,UAA+B;IAC9D,MAAM,KAAK,GAAG,mBAAmB,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;IACvG,OAAO,KAAK,CAAC,mBAAmB,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;AACxD,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,IAAY;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,4BAA4B,CAAC,EAAU,EAAE,MAAmG;IACnJ,IAAI,MAAM,CAAC,cAAc,KAAK,cAAc,EAAE,CAAC;QAC7C,OAAO,GAAG,EAAE,8CAA8C,CAAC;IAC7D,CAAC;IAED,IAAI,MAAM,CAAC,cAAc,KAAK,2BAA2B,EAAE,CAAC;QAC1D,OAAO,GAAG,EAAE,iEAAiE,CAAC;IAChF,CAAC;IAED,OAAO,GAAG,EAAE,uDAAuD,CAAC,MAAM,CAAC,SAAS,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,UAAU,WAC3H,MAAM,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,MAAM,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EACrE,GAAG,CAAC;AACN,CAAC;AAED,SAAS,eAAe,CAAC,UAA+B;IACtD,OAAO,OAAO,UAAU,CAAC,OAAO,KAAK,QAAQ,CAAC;AAChD,CAAC;AAED,SAAS,YAAY,CAAC,UAA+B;IACnD,OAAO,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,CAAC;AACtF,CAAC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ViewportSize } from '../../integrations/playwright/context-factory.js';
|
|
2
|
+
export type ReflectionPortalFraming = {
|
|
3
|
+
background?: string | undefined;
|
|
4
|
+
align: 'center' | 'start';
|
|
5
|
+
padding: number;
|
|
6
|
+
};
|
|
7
|
+
export type ReflectionPortalMountInput = {
|
|
8
|
+
id: string;
|
|
9
|
+
path: string;
|
|
10
|
+
root: HTMLElement;
|
|
11
|
+
viewport: string;
|
|
12
|
+
viewportSize: ViewportSize;
|
|
13
|
+
framing: ReflectionPortalFraming;
|
|
14
|
+
};
|
|
15
|
+
export type ReflectionPortalCleanup = void | (() => void);
|
|
16
|
+
export type ReflectionPortalMountResult = ReflectionPortalCleanup | Promise<ReflectionPortalCleanup>;
|
|
17
|
+
export type ReflectionPortalMount = (input: ReflectionPortalMountInput) => ReflectionPortalMountResult;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"portal-entry.js","sourceRoot":"","sources":["../../../src/contracts/component/portal-entry.ts"],"names":[],"mappings":""}
|
package/dist/core/config.d.ts
CHANGED
|
@@ -94,22 +94,30 @@ declare const ReflectionConfigSchema: z.ZodObject<{
|
|
|
94
94
|
}, z.core.$strip>>;
|
|
95
95
|
component: z.ZodOptional<z.ZodObject<{
|
|
96
96
|
enabled: z.ZodDefault<z.ZodBoolean>;
|
|
97
|
-
storybook: z.ZodObject<{
|
|
97
|
+
storybook: z.ZodOptional<z.ZodObject<{
|
|
98
98
|
command: z.ZodString;
|
|
99
99
|
readyUrl: z.ZodString;
|
|
100
100
|
reuseExisting: z.ZodDefault<z.ZodBoolean>;
|
|
101
101
|
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
102
|
-
}, z.core.$strip
|
|
102
|
+
}, z.core.$strip>>;
|
|
103
|
+
portal: z.ZodOptional<z.ZodObject<{
|
|
104
|
+
entry: z.ZodString;
|
|
105
|
+
readyUrl: z.ZodString;
|
|
106
|
+
reuseExisting: z.ZodDefault<z.ZodBoolean>;
|
|
107
|
+
timeoutMs: z.ZodDefault<z.ZodNumber>;
|
|
108
|
+
viteConfig: z.ZodOptional<z.ZodString>;
|
|
109
|
+
}, z.core.$strip>>;
|
|
103
110
|
cases: z.ZodDefault<z.ZodArray<z.ZodObject<{
|
|
104
111
|
id: z.ZodString;
|
|
105
|
-
storyId: z.ZodString
|
|
112
|
+
storyId: z.ZodOptional<z.ZodString>;
|
|
113
|
+
path: z.ZodOptional<z.ZodString>;
|
|
106
114
|
viewport: z.ZodDefault<z.ZodString>;
|
|
107
115
|
viewportSize: z.ZodOptional<z.ZodObject<{
|
|
108
116
|
width: z.ZodNumber;
|
|
109
117
|
height: z.ZodNumber;
|
|
110
118
|
}, z.core.$strip>>;
|
|
111
119
|
framing: z.ZodOptional<z.ZodObject<{
|
|
112
|
-
rootSelector: z.
|
|
120
|
+
rootSelector: z.ZodOptional<z.ZodString>;
|
|
113
121
|
background: z.ZodOptional<z.ZodString>;
|
|
114
122
|
align: z.ZodDefault<z.ZodEnum<{
|
|
115
123
|
center: "center";
|
package/dist/core/config.js
CHANGED
|
@@ -27,7 +27,7 @@ const ViewportSizeSchema = z.object({
|
|
|
27
27
|
height: z.number().int().positive()
|
|
28
28
|
});
|
|
29
29
|
const ComponentFramingSchema = z.object({
|
|
30
|
-
rootSelector: z.string().min(1).
|
|
30
|
+
rootSelector: z.string().min(1).optional(),
|
|
31
31
|
background: z.string().min(1).optional(),
|
|
32
32
|
align: z.enum(['center', 'start']).default('center'),
|
|
33
33
|
padding: z.number().int().nonnegative().default(0)
|
|
@@ -102,9 +102,11 @@ const ComponentBrowserStateSchema = z
|
|
|
102
102
|
});
|
|
103
103
|
}
|
|
104
104
|
});
|
|
105
|
-
const ComponentVisualCaseSchema = z
|
|
105
|
+
const ComponentVisualCaseSchema = z
|
|
106
|
+
.object({
|
|
106
107
|
id: z.string().min(1),
|
|
107
|
-
storyId: z.string().min(1),
|
|
108
|
+
storyId: z.string().min(1).optional(),
|
|
109
|
+
path: z.string().min(1).optional(),
|
|
108
110
|
viewport: z.string().min(1).default('component'),
|
|
109
111
|
viewportSize: ViewportSizeSchema.optional(),
|
|
110
112
|
framing: ComponentFramingSchema.optional(),
|
|
@@ -115,16 +117,69 @@ const ComponentVisualCaseSchema = z.object({
|
|
|
115
117
|
strict: z.boolean().optional(),
|
|
116
118
|
stateNote: z.string().min(1).optional(),
|
|
117
119
|
browserState: ComponentBrowserStateSchema.optional()
|
|
120
|
+
})
|
|
121
|
+
.superRefine((value, context) => {
|
|
122
|
+
if (value.storyId && value.path) {
|
|
123
|
+
context.addIssue({
|
|
124
|
+
code: z.ZodIssueCode.custom,
|
|
125
|
+
path: ['storyId'],
|
|
126
|
+
message: 'component visual cases must define either storyId or path, not both'
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (!value.storyId && !value.path) {
|
|
130
|
+
context.addIssue({
|
|
131
|
+
code: z.ZodIssueCode.custom,
|
|
132
|
+
path: ['storyId'],
|
|
133
|
+
message: 'component visual cases must define storyId for Storybook or path for portal'
|
|
134
|
+
});
|
|
135
|
+
}
|
|
136
|
+
if (value.path && !value.viewportSize) {
|
|
137
|
+
context.addIssue({
|
|
138
|
+
code: z.ZodIssueCode.custom,
|
|
139
|
+
path: ['viewportSize'],
|
|
140
|
+
message: 'portal component visual cases require viewportSize'
|
|
141
|
+
});
|
|
142
|
+
}
|
|
118
143
|
});
|
|
119
|
-
const ComponentContractSchema = z
|
|
144
|
+
const ComponentContractSchema = z
|
|
145
|
+
.object({
|
|
120
146
|
enabled: z.boolean().default(true),
|
|
121
|
-
storybook: z
|
|
147
|
+
storybook: z
|
|
148
|
+
.object({
|
|
122
149
|
command: z.string(),
|
|
123
150
|
readyUrl: z.string().url(),
|
|
124
151
|
reuseExisting: z.boolean().default(true),
|
|
125
152
|
timeoutMs: z.number().int().positive().default(60_000)
|
|
126
|
-
})
|
|
153
|
+
})
|
|
154
|
+
.optional(),
|
|
155
|
+
portal: z
|
|
156
|
+
.object({
|
|
157
|
+
entry: z.string().min(1),
|
|
158
|
+
readyUrl: z.string().url(),
|
|
159
|
+
reuseExisting: z.boolean().default(true),
|
|
160
|
+
timeoutMs: z.number().int().positive().default(60_000),
|
|
161
|
+
viteConfig: z.string().min(1).optional()
|
|
162
|
+
})
|
|
163
|
+
.optional(),
|
|
127
164
|
cases: z.array(ComponentVisualCaseSchema).default([])
|
|
165
|
+
})
|
|
166
|
+
.superRefine((value, context) => {
|
|
167
|
+
for (const [index, visualCase] of value.cases.entries()) {
|
|
168
|
+
if (visualCase.storyId && !value.storybook) {
|
|
169
|
+
context.addIssue({
|
|
170
|
+
code: z.ZodIssueCode.custom,
|
|
171
|
+
path: ['cases', index, 'storyId'],
|
|
172
|
+
message: 'storyId component visual cases require component.storybook'
|
|
173
|
+
});
|
|
174
|
+
}
|
|
175
|
+
if (visualCase.path && !value.portal) {
|
|
176
|
+
context.addIssue({
|
|
177
|
+
code: z.ZodIssueCode.custom,
|
|
178
|
+
path: ['cases', index, 'path'],
|
|
179
|
+
message: 'path component visual cases require component.portal'
|
|
180
|
+
});
|
|
181
|
+
}
|
|
182
|
+
}
|
|
128
183
|
});
|
|
129
184
|
const ReflectionConfigSchema = z.object({
|
|
130
185
|
project: z.string().min(1),
|
|
@@ -150,7 +205,34 @@ export function validateReflectionConfig(input) {
|
|
|
150
205
|
const details = parsed.error.issues.map((issue) => `${issue.path.join('.') || 'config'}: ${issue.message}`).join('; ');
|
|
151
206
|
throw new Error(`Invalid Reflection config: ${details}`);
|
|
152
207
|
}
|
|
153
|
-
return parsed.data;
|
|
208
|
+
return normalizeReflectionConfig(parsed.data);
|
|
209
|
+
}
|
|
210
|
+
function normalizeReflectionConfig(config) {
|
|
211
|
+
const component = config.contracts.component;
|
|
212
|
+
if (!component) {
|
|
213
|
+
return config;
|
|
214
|
+
}
|
|
215
|
+
return {
|
|
216
|
+
...config,
|
|
217
|
+
contracts: {
|
|
218
|
+
...config.contracts,
|
|
219
|
+
component: {
|
|
220
|
+
...component,
|
|
221
|
+
cases: component.cases.map((visualCase) => {
|
|
222
|
+
if (!visualCase.framing) {
|
|
223
|
+
return visualCase;
|
|
224
|
+
}
|
|
225
|
+
return {
|
|
226
|
+
...visualCase,
|
|
227
|
+
framing: {
|
|
228
|
+
...visualCase.framing,
|
|
229
|
+
rootSelector: visualCase.framing.rootSelector ?? (visualCase.path ? '#reflection-root' : '#storybook-root')
|
|
230
|
+
}
|
|
231
|
+
};
|
|
232
|
+
})
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
};
|
|
154
236
|
}
|
|
155
237
|
export async function loadReflectionConfig(configPath) {
|
|
156
238
|
const resolvedConfigPath = resolve(configPath);
|
package/dist/core/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,UAAU,EAAE,MAAM,MAAM,CAAC;AAClC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAU,CAAC;AAGvE,MAAM,wBAAwB,GAAG,CAAC,CAAC,KAAK,CAAC;IACvC,CAAC,CAAC,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACrC,CAAC,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACnC,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC;IAC3D,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC/B,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC9B,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAChC,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAClC,CAAC,CAAC,MAAM,CAAC,EAAE,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IACxC,CAAC,CAAC,MAAM,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;IAC3C,CAAC,CAAC,MAAM,CAAC,EAAE,oBAAoB,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IACnD,CAAC,CAAC,MAAM,CAAC,EAAE,eAAe,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;IAC9C,CAAC,CAAC,MAAM,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CACrC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,QAAQ,EAAE;IACxD,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;CACvD,CAAC,CAAC;AAEH,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;IAClC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE;CACpC,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,iBAAiB,CAAC;IAC1D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACxC,KAAK,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC;IACpD,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,0BAA0B,GAAG,CAAC,CAAC,MAAM,CAAC;IAC1C,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACxB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CAC/B,CAAC,CAAC;AAEH,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAEjG,MAAM,kBAAkB,GAAG,CAAC;KACzB,MAAM,CAAC;IACN,YAAY,EAAE,yBAAyB;IACvC,cAAc,EAAE,yBAAyB;CAC1C,CAAC;KACD,OAAO,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,CAAC;AAErD,MAAM,kBAAkB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACvB,SAAS,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,CAAC,CAAC;IAC1D,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,wBAAwB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACtD,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,qBAAqB,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACzB,MAAM,EAAE,CAAC;SACN,MAAM,CAAC;QACN,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC1B,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;KACvD,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC/C,aAAa,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IACrD,WAAW,EAAE,CAAC,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;IAC5D,KAAK,EAAE,kBAAkB,CAAC,QAAQ,EAAE;CACrC,CAAC,CAAC;AAEH,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACjC,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;CACjC,CAAC,CAAC;AAEH,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACnD,CAAC,CAAC;AAEH,MAAM,2BAA2B,GAAG,CAAC;KAClC,MAAM,CAAC;IACN,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,sBAAsB,EAAE,CAAC,CAAC,MAAM,CAAC;QAC/B,iBAAiB,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;QACzC,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,WAAW,EAAE,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE;KAC7D,CAAC;CACH,CAAC;KACD,WAAW,CAAC,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,KAAK,CAAC,sBAAsB,CAAC,iBAAiB,KAAK,IAAI,IAAI,CAAC,KAAK,CAAC,sBAAsB,CAAC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;QAC/G,OAAO,CAAC,QAAQ,CAAC;YACf,IAAI,EAAE,CAAC,CAAC,YAAY,CAAC,MAAM;YAC3B,IAAI,EAAE,CAAC,wBAAwB,CAAC;YAChC,OAAO,EAAE,wEAAwE;SAClF,CAAC,CAAC;IACL,CAAC;AACH,CAAC,CAAC,CAAC;AAEL,MAAM,yBAAyB,GAAG,CAAC,CAAC,MAAM,CAAC;IACzC,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IACrB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,CAAC;IAChD,YAAY,EAAE,kBAAkB,CAAC,QAAQ,EAAE;IAC3C,OAAO,EAAE,sBAAsB,CAAC,QAAQ,EAAE;IAC1C,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC3B,YAAY,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,SAAS,EAAE,qBAAqB,CAAC,QAAQ,EAAE;IAC3C,QAAQ,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAChC,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;IAC9B,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE;IACvC,YAAY,EAAE,2BAA2B,CAAC,QAAQ,EAAE;CACrD,CAAC,CAAC;AAEH,MAAM,uBAAuB,GAAG,CAAC,CAAC,MAAM,CAAC;IACvC,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;IAClC,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE;QACnB,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;QAC1B,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC;QACxC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC;KACvD,CAAC;IACF,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,yBAAyB,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC;CACtD,CAAC,CAAC;AAEH,MAAM,sBAAsB,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC;IAC1B,GAAG,EAAE,CAAC;SACH,MAAM,CAAC;QACN,WAAW,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;QAC9C,MAAM,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;KAC1C,CAAC;SACD,OAAO,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC;IACrD,SAAS,EAAE,CAAC,CAAC,MAAM,CAAC;QAClB,OAAO,EAAE,qBAAqB,CAAC,QAAQ,EAAE;QACzC,MAAM,EAAE,oBAAoB,CAAC,QAAQ,EAAE;QACvC,SAAS,EAAE,uBAAuB,CAAC,QAAQ,EAAE;QAC7C,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE;KAC/B,CAAC;CACH,CAAC,CAAC;AAKH,MAAM,UAAU,SAAS,CAAC,KAAa;IACrC,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAgB,CAAC,CAAC;AAC7C,CAAC;AAED,MAAM,UAAU,wBAAwB,CAAC,KAAc;IACrD,MAAM,MAAM,GAAG,sBAAsB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;IACvD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,OAAO,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,QAAQ,KAAK,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvH,MAAM,IAAI,KAAK,CAAC,8BAA8B,OAAO,EAAE,CAAC,CAAC;IAC3D,CAAC;IAED,OAAO,MAAM,CAAC,IAAI,CAAC;AACrB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,oBAAoB,CAAC,UAAkB;IAC3D,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,gCAAgC,UAAU,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,kBAAkB,CAAC,kBAAkB,CAAC,CAAC;IAC5D,IAAI,CAAC,CAAC,SAAS,IAAI,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,gDAAgD,UAAU,EAAE,CAAC,CAAC;IAChF,CAAC;IAED,OAAO,wBAAwB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAClD,CAAC;AAED,KAAK,UAAU,kBAAkB,CAAC,UAAkB;IAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAEtC,IAAI,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,MAAM,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;QACxE,MAAM,IAAI,GAAG,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC;QACjE,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC;QAChE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;IAC7B,CAAC;IAED,MAAM,SAAS,GAAG,aAAa,CAAC,UAAU,CAAC,CAAC;IAC5C,SAAS,CAAC,YAAY,CAAC,GAAG,CAAC,gBAAgB,EAAE,IAAI,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,CAAC;IAEpE,OAAO,CAAC,MAAM,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAA0B,CAAC;AACjE,CAAC"}
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/core/config.ts"],"names":[],"mappings":"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"}
|
package/dist/core/target-ir.d.ts
CHANGED
|
@@ -40,9 +40,11 @@ export type RouteVisualTarget = TargetBase & {
|
|
|
40
40
|
};
|
|
41
41
|
export type ComponentVisualTarget = TargetBase & {
|
|
42
42
|
family: 'component-visual';
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
43
|
+
component: {
|
|
44
|
+
source: 'storybook' | 'portal';
|
|
45
|
+
storyId?: string | undefined;
|
|
46
|
+
path?: string | undefined;
|
|
47
|
+
statePolicy: 'story-controlled' | 'portal-controlled' | 'browser-forced-with-stabilization';
|
|
46
48
|
stateNote?: string | undefined;
|
|
47
49
|
browserState?: unknown;
|
|
48
50
|
};
|
package/dist/core/target-ir.js
CHANGED
|
@@ -49,9 +49,15 @@ export function compileReflectionTargets(config) {
|
|
|
49
49
|
source: 'reflection-config',
|
|
50
50
|
runModes: ['visual', 'full'],
|
|
51
51
|
blocking: componentCase.blocking === true || componentCase.strict === true,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
52
|
+
component: {
|
|
53
|
+
source: componentCase.path ? 'portal' : 'storybook',
|
|
54
|
+
...(componentCase.storyId ? { storyId: componentCase.storyId } : {}),
|
|
55
|
+
...(componentCase.path ? { path: componentCase.path } : {}),
|
|
56
|
+
statePolicy: componentCase.browserState
|
|
57
|
+
? 'browser-forced-with-stabilization'
|
|
58
|
+
: componentCase.path
|
|
59
|
+
? 'portal-controlled'
|
|
60
|
+
: 'story-controlled',
|
|
55
61
|
...(componentCase.stateNote ? { stateNote: componentCase.stateNote } : {}),
|
|
56
62
|
...(componentCase.browserState ? { browserState: componentCase.browserState } : {})
|
|
57
63
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"target-ir.js","sourceRoot":"","sources":["../../src/core/target-ir.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"target-ir.js","sourceRoot":"","sources":["../../src/core/target-ir.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,2 +1,3 @@
|
|
|
1
1
|
export { defineReflection } from './core/define-reflection.js';
|
|
2
2
|
export type { ReflectionConfig, ReflectionConfigInput, RunMode } from './core/config.js';
|
|
3
|
+
export type { ReflectionPortalCleanup, ReflectionPortalFraming, ReflectionPortalMount, ReflectionPortalMountInput, ReflectionPortalMountResult } from './contracts/component/portal-entry.js';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import type { ManagedServer } from '../../core/server-manager.js';
|
|
2
|
+
import type { ViewportSize } from '../playwright/context-factory.js';
|
|
3
|
+
import type { ComponentFraming } from '../../contracts/component/component-visual-contract.js';
|
|
4
|
+
export type PortalComponentCase = {
|
|
5
|
+
id: string;
|
|
6
|
+
path: string;
|
|
7
|
+
viewport: string;
|
|
8
|
+
viewportSize: ViewportSize;
|
|
9
|
+
framing?: ComponentFraming | undefined;
|
|
10
|
+
};
|
|
11
|
+
export type PortalConfig = {
|
|
12
|
+
entry: string;
|
|
13
|
+
readyUrl: string;
|
|
14
|
+
reuseExisting?: boolean | undefined;
|
|
15
|
+
timeoutMs?: number | undefined;
|
|
16
|
+
viteConfig?: string | undefined;
|
|
17
|
+
};
|
|
18
|
+
export type ReflectionPortalServer = {
|
|
19
|
+
baseUrl: string;
|
|
20
|
+
server: ManagedServer;
|
|
21
|
+
};
|
|
22
|
+
export declare function startReflectionPortalServer(config: PortalConfig, cases: PortalComponentCase[], options: {
|
|
23
|
+
cwd: string;
|
|
24
|
+
rootDir: string;
|
|
25
|
+
}): Promise<ReflectionPortalServer>;
|
|
@@ -0,0 +1,186 @@
|
|
|
1
|
+
import { mkdir, rm, writeFile } from 'node:fs/promises';
|
|
2
|
+
import { dirname, resolve } from 'node:path';
|
|
3
|
+
import { createServer } from 'vite';
|
|
4
|
+
import { waitForUrl } from '../../core/server-manager.js';
|
|
5
|
+
export async function startReflectionPortalServer(config, cases, options) {
|
|
6
|
+
if ((config.reuseExisting ?? true) && (await isUrlReachable(config.readyUrl))) {
|
|
7
|
+
return {
|
|
8
|
+
baseUrl: config.readyUrl,
|
|
9
|
+
server: {
|
|
10
|
+
readyUrl: config.readyUrl,
|
|
11
|
+
reused: true,
|
|
12
|
+
started: false,
|
|
13
|
+
pid: undefined,
|
|
14
|
+
stop: async () => undefined
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
const rootDir = resolve(options.rootDir);
|
|
19
|
+
await mkdir(rootDir, { recursive: true });
|
|
20
|
+
await writePortalFiles({
|
|
21
|
+
rootDir,
|
|
22
|
+
entryPath: resolve(options.cwd, config.entry),
|
|
23
|
+
cases
|
|
24
|
+
});
|
|
25
|
+
const readyUrl = new URL(config.readyUrl);
|
|
26
|
+
const port = Number(readyUrl.port || (readyUrl.protocol === 'https:' ? 443 : 80));
|
|
27
|
+
const host = readyUrl.hostname || '127.0.0.1';
|
|
28
|
+
const vite = await createServer(createViteConfig({ config, rootDir, host, port, cwd: options.cwd }));
|
|
29
|
+
try {
|
|
30
|
+
await vite.listen();
|
|
31
|
+
await waitForUrl(config.readyUrl, { timeoutMs: config.timeoutMs ?? 60_000 });
|
|
32
|
+
}
|
|
33
|
+
catch (error) {
|
|
34
|
+
await vite.close();
|
|
35
|
+
await rm(rootDir, { recursive: true, force: true });
|
|
36
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
37
|
+
throw new Error(`Reflection portal did not become ready at ${config.readyUrl}: ${message}`);
|
|
38
|
+
}
|
|
39
|
+
return {
|
|
40
|
+
baseUrl: config.readyUrl,
|
|
41
|
+
server: {
|
|
42
|
+
readyUrl: config.readyUrl,
|
|
43
|
+
reused: false,
|
|
44
|
+
started: true,
|
|
45
|
+
pid: undefined,
|
|
46
|
+
stop: async () => {
|
|
47
|
+
await vite.close();
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
function createViteConfig(input) {
|
|
53
|
+
return {
|
|
54
|
+
root: input.rootDir,
|
|
55
|
+
configFile: input.config.viteConfig ? resolve(input.cwd, input.config.viteConfig) : false,
|
|
56
|
+
appType: 'spa',
|
|
57
|
+
logLevel: 'silent',
|
|
58
|
+
server: {
|
|
59
|
+
host: input.host,
|
|
60
|
+
port: input.port,
|
|
61
|
+
strictPort: true,
|
|
62
|
+
hmr: false,
|
|
63
|
+
fs: {
|
|
64
|
+
allow: [input.cwd, input.rootDir, dirname(resolve(input.cwd, input.config.entry))]
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
async function writePortalFiles(input) {
|
|
70
|
+
await writeFile(resolve(input.rootDir, 'index.html'), [
|
|
71
|
+
'<!doctype html>',
|
|
72
|
+
'<html>',
|
|
73
|
+
'<head>',
|
|
74
|
+
' <meta charset="utf-8" />',
|
|
75
|
+
' <meta name="viewport" content="width=device-width, initial-scale=1" />',
|
|
76
|
+
' <title>Reflection Portal</title>',
|
|
77
|
+
'</head>',
|
|
78
|
+
'<body>',
|
|
79
|
+
' <script type="module" src="/reflection-portal.js"></script>',
|
|
80
|
+
'</body>',
|
|
81
|
+
'</html>',
|
|
82
|
+
''
|
|
83
|
+
].join('\n'), 'utf8');
|
|
84
|
+
await writeFile(resolve(input.rootDir, 'reflection-portal.js'), renderPortalScript(input), 'utf8');
|
|
85
|
+
}
|
|
86
|
+
function renderPortalScript(input) {
|
|
87
|
+
return `
|
|
88
|
+
import { mountReflectionCase } from "${toViteFsImport(input.entryPath)}";
|
|
89
|
+
|
|
90
|
+
const cases = ${JSON.stringify(input.cases.map((visualCase) => serializePortalCase(visualCase)))};
|
|
91
|
+
|
|
92
|
+
const state = globalThis;
|
|
93
|
+
state.__reflectionPortalReady = false;
|
|
94
|
+
state.__reflectionPortalError = undefined;
|
|
95
|
+
|
|
96
|
+
function normalizePath(path) {
|
|
97
|
+
if (!path.startsWith("/")) return \`/\${path}\`;
|
|
98
|
+
return path;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
function setPortalError(error) {
|
|
102
|
+
state.__reflectionPortalError = error instanceof Error ? error.message : String(error);
|
|
103
|
+
state.__reflectionPortalReady = false;
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
function applyFrame(frame, caseRoot, visualCase) {
|
|
107
|
+
const framing = visualCase.framing;
|
|
108
|
+
const background = framing.background || "transparent";
|
|
109
|
+
document.documentElement.style.cssText = "margin:0;width:100%;height:100%;overflow:hidden;background:" + background;
|
|
110
|
+
document.body.style.cssText = "margin:0;width:100%;height:100%;overflow:hidden;background:" + background;
|
|
111
|
+
|
|
112
|
+
frame.style.boxSizing = "border-box";
|
|
113
|
+
frame.style.width = visualCase.viewportSize.width + "px";
|
|
114
|
+
frame.style.height = visualCase.viewportSize.height + "px";
|
|
115
|
+
frame.style.margin = "0";
|
|
116
|
+
frame.style.padding = framing.padding + "px";
|
|
117
|
+
frame.style.background = background;
|
|
118
|
+
frame.style.overflow = "hidden";
|
|
119
|
+
|
|
120
|
+
if (framing.align === "center") {
|
|
121
|
+
frame.style.display = "grid";
|
|
122
|
+
frame.style.placeItems = "center";
|
|
123
|
+
} else {
|
|
124
|
+
frame.style.display = "block";
|
|
125
|
+
caseRoot.style.width = "100%";
|
|
126
|
+
caseRoot.style.height = "100%";
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
async function boot() {
|
|
131
|
+
const currentPath = normalizePath(window.location.pathname);
|
|
132
|
+
const visualCase = cases.find((entry) => normalizePath(entry.path) === currentPath);
|
|
133
|
+
if (!visualCase) {
|
|
134
|
+
throw new Error("No Reflection portal case configured for " + currentPath);
|
|
135
|
+
}
|
|
136
|
+
|
|
137
|
+
document.body.innerHTML = '<main id="reflection-root"><div id="reflection-case-root"></div></main>';
|
|
138
|
+
const frame = document.getElementById("reflection-root");
|
|
139
|
+
const caseRoot = document.getElementById("reflection-case-root");
|
|
140
|
+
applyFrame(frame, caseRoot, visualCase);
|
|
141
|
+
|
|
142
|
+
const cleanup = await mountReflectionCase({
|
|
143
|
+
id: visualCase.id,
|
|
144
|
+
path: visualCase.path,
|
|
145
|
+
root: caseRoot,
|
|
146
|
+
viewport: visualCase.viewport,
|
|
147
|
+
viewportSize: visualCase.viewportSize,
|
|
148
|
+
framing: {
|
|
149
|
+
background: visualCase.framing.background,
|
|
150
|
+
align: visualCase.framing.align,
|
|
151
|
+
padding: visualCase.framing.padding
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
|
|
155
|
+
state.__reflectionPortalCleanup = cleanup;
|
|
156
|
+
state.__reflectionPortalReady = true;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
boot().catch(setPortalError);
|
|
160
|
+
`;
|
|
161
|
+
}
|
|
162
|
+
function serializePortalCase(visualCase) {
|
|
163
|
+
return {
|
|
164
|
+
...visualCase,
|
|
165
|
+
framing: {
|
|
166
|
+
rootSelector: visualCase.framing?.rootSelector ?? '#reflection-root',
|
|
167
|
+
background: visualCase.framing?.background,
|
|
168
|
+
align: visualCase.framing?.align ?? 'center',
|
|
169
|
+
padding: visualCase.framing?.padding ?? 0
|
|
170
|
+
}
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
function toViteFsImport(path) {
|
|
174
|
+
return `/@fs/${path.replaceAll('\\', '/')}`;
|
|
175
|
+
}
|
|
176
|
+
async function isUrlReachable(url) {
|
|
177
|
+
try {
|
|
178
|
+
const response = await fetch(url, { cache: 'no-store' });
|
|
179
|
+
await response.body?.cancel();
|
|
180
|
+
return response.status >= 200 && response.status < 500;
|
|
181
|
+
}
|
|
182
|
+
catch {
|
|
183
|
+
return false;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
//# sourceMappingURL=server.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../../../src/integrations/portal/server.ts"],"names":[],"mappings":"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"}
|
package/docs/artifacts-and-gc.md
CHANGED
|
@@ -44,9 +44,12 @@ Typical files:
|
|
|
44
44
|
server/
|
|
45
45
|
app.log
|
|
46
46
|
storybook.log
|
|
47
|
+
portal/
|
|
48
|
+
index.html
|
|
49
|
+
reflection-portal.js
|
|
47
50
|
```
|
|
48
51
|
|
|
49
|
-
Not every run contains every folder. For example, a browser-only run may have screenshots but no component visual artifacts.
|
|
52
|
+
Not every run contains every folder. For example, a browser-only run may have screenshots but no component visual artifacts. Portal component runs keep the generated wrapper under `server/portal/` so the exact runtime shell used for the capture is available for inspection.
|
|
50
53
|
|
|
51
54
|
## `report.json`
|
|
52
55
|
|
package/docs/configuration.md
CHANGED
|
@@ -187,6 +187,10 @@ Each design command runs as a project-owned process and writes stdout/stderr evi
|
|
|
187
187
|
|
|
188
188
|
## Component visual contract
|
|
189
189
|
|
|
190
|
+
Component visuals can render from Storybook or from a Reflection-generated portal. Storybook remains useful for existing projects; the portal is intended for strict design-system baselines where a dedicated route should render exactly one component state.
|
|
191
|
+
|
|
192
|
+
### Storybook runtime
|
|
193
|
+
|
|
190
194
|
```ts
|
|
191
195
|
component: {
|
|
192
196
|
enabled: true,
|
|
@@ -229,9 +233,58 @@ component: {
|
|
|
229
233
|
|
|
230
234
|
Component visual cases resolve Storybook `/index.json`, open the story iframe, capture an actual screenshot, and compare it against the configured baseline.
|
|
231
235
|
|
|
232
|
-
|
|
236
|
+
### Generated portal runtime
|
|
233
237
|
|
|
234
|
-
|
|
238
|
+
```ts
|
|
239
|
+
component: {
|
|
240
|
+
enabled: true,
|
|
241
|
+
portal: {
|
|
242
|
+
entry: './tests/reflection/react-portal.tsx',
|
|
243
|
+
readyUrl: 'http://127.0.0.1:6106',
|
|
244
|
+
reuseExisting: true,
|
|
245
|
+
timeoutMs: 60_000,
|
|
246
|
+
viteConfig: './vite.config.ts'
|
|
247
|
+
},
|
|
248
|
+
cases: [
|
|
249
|
+
{
|
|
250
|
+
id: 'primary-button',
|
|
251
|
+
path: '/reflection/button/primary/light',
|
|
252
|
+
viewport: 'button-default',
|
|
253
|
+
viewportSize: { width: 390, height: 220 },
|
|
254
|
+
framing: {
|
|
255
|
+
rootSelector: '#reflection-root',
|
|
256
|
+
background: '#ffffff',
|
|
257
|
+
align: 'center',
|
|
258
|
+
padding: 0
|
|
259
|
+
},
|
|
260
|
+
baselineRoot: 'tests/fixtures/baselines',
|
|
261
|
+
baseline: 'components/button/primary.chromium-linux.light.png',
|
|
262
|
+
threshold: { maxDiffPixels: 0, maxDiffPixelRatio: 0 },
|
|
263
|
+
strict: true
|
|
264
|
+
}
|
|
265
|
+
]
|
|
266
|
+
}
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
Portal cases use `path` instead of `storyId`. Reflection generates a Vite-backed portal for the run, creates `#reflection-root` and `#reflection-case-root`, imports the configured `portal.entry`, and calls `mountReflectionCase` for the matching path.
|
|
270
|
+
|
|
271
|
+
The portal entry exports a mount function:
|
|
272
|
+
|
|
273
|
+
```ts
|
|
274
|
+
import type { ReflectionPortalMountInput } from 'reflection-check';
|
|
275
|
+
|
|
276
|
+
export function mountReflectionCase(input: ReflectionPortalMountInput) {
|
|
277
|
+
input.root.textContent = input.id;
|
|
278
|
+
}
|
|
279
|
+
```
|
|
280
|
+
|
|
281
|
+
Portal cases must define `viewportSize`. Reflection uses that exact size for the browser viewport and for the generated portal frame. This keeps the config as the source of truth for frame dimensions.
|
|
282
|
+
|
|
283
|
+
### Shared case fields
|
|
284
|
+
|
|
285
|
+
`viewport` accepts the built-in presets (`desktop`, `tablet`, `mobile`, `component`) and any custom string label. When `viewportSize` is provided, Reflection captures at that exact `{ width, height }` instead of resolving the string preset. Use this for exported Figma baselines: the PNG dimensions must match `viewportSize` exactly or the check fails with `visual-dimension-mismatch`.
|
|
286
|
+
|
|
287
|
+
`framing` lets a component visual case normalize the runtime frame before the screenshot:
|
|
235
288
|
|
|
236
289
|
```ts
|
|
237
290
|
framing: {
|
|
@@ -242,11 +295,18 @@ framing: {
|
|
|
242
295
|
}
|
|
243
296
|
```
|
|
244
297
|
|
|
245
|
-
Use it when the approved baseline is a fixed Figma frame: `background` should match the Figma frame fill, `align: 'center'` centers the
|
|
298
|
+
Use it when the approved baseline is a fixed Figma frame: `background` should match the Figma frame fill, `align: 'center'` centers the component in the frame, and `padding` reserves explicit frame padding. `rootSelector` defaults to `#storybook-root` for Storybook cases and `#reflection-root` for portal cases.
|
|
299
|
+
|
|
300
|
+
Case/runtime rules:
|
|
301
|
+
|
|
302
|
+
- Storybook cases use `storyId` and require `component.storybook`.
|
|
303
|
+
- Portal cases use `path` and require `component.portal`.
|
|
304
|
+
- A case cannot define both `storyId` and `path`.
|
|
305
|
+
- Portal cases require `viewportSize`; strict Figma baselines should not rely on implicit preset dimensions.
|
|
246
306
|
|
|
247
307
|
Pseudo-state policy:
|
|
248
308
|
|
|
249
|
-
- Prefer
|
|
309
|
+
- Prefer runtime-controlled variants for hover, focus, active, selected, open, and disabled states.
|
|
250
310
|
- If a browser-forced state is necessary, configure `browserState` with `kind: 'hover' | 'focus'`, a selector, and effective animation stabilization.
|
|
251
311
|
- Reflection records `statePolicy` metadata in reports so reviewers can tell whether the state came from the story or was forced in the browser.
|
|
252
312
|
|
|
@@ -30,7 +30,7 @@ The IR currently supports four families:
|
|
|
30
30
|
| --- | --- | --- | --- |
|
|
31
31
|
| `browser-route` | browser routes | `smoke`, `full` | Render a route and evaluate DOM/layout/console expectations. |
|
|
32
32
|
| `route-visual` | browser visual smoke cases | `smoke`, `full` | Compare route screenshots against read-only baselines. |
|
|
33
|
-
| `component-visual` | Storybook component cases | `visual`, `full` | Compare component
|
|
33
|
+
| `component-visual` | Storybook or portal component cases | `visual`, `full` | Compare component screenshots against read-only baselines. |
|
|
34
34
|
| `design-command` | design command checks | `design`, `full` | Run project-owned design contract commands. |
|
|
35
35
|
|
|
36
36
|
All targets include:
|
|
@@ -59,20 +59,20 @@ console.log(ir.targets.map((target) => `${target.family}:${target.id}`));
|
|
|
59
59
|
// ]
|
|
60
60
|
```
|
|
61
61
|
|
|
62
|
-
The compiler preserves visual metadata that matters to later review, including zero-valued thresholds, explicit component `viewportSize` values, and component `framing`. Do not use truthiness checks when copying optional numeric metadata; use explicit `!== undefined` checks so values like `0` survive.
|
|
62
|
+
The compiler preserves visual metadata that matters to later review, including component source (`storybook` or `portal`), portal paths, story ids, zero-valued thresholds, explicit component `viewportSize` values, and component `framing`. Do not use truthiness checks when copying optional numeric metadata; use explicit `!== undefined` checks so values like `0` survive.
|
|
63
63
|
|
|
64
64
|
## Adapter contract
|
|
65
65
|
|
|
66
66
|
Adapters should compile their input into the same target shape and mark targets with `source: 'adapter'`.
|
|
67
67
|
|
|
68
|
-
Adapters must not make core runners aware of the source format. The runner should receive normalized route/
|
|
68
|
+
Adapters must not make core runners aware of the source format. The runner should receive normalized route/component/visual/command information and should not branch on adapter names.
|
|
69
69
|
|
|
70
70
|
A good adapter is:
|
|
71
71
|
|
|
72
72
|
- **optional** — normal Reflection config works without it;
|
|
73
73
|
- **validated** — malformed adapter input fails before runner execution;
|
|
74
74
|
- **neutral** — no external product names leak into core commands or reports unless the user explicitly names their own target ids;
|
|
75
|
-
- **lossless enough for review** — route paths, viewports, component viewport sizes, component framing, expectations, baselines, thresholds, and blocking semantics are preserved in IR.
|
|
75
|
+
- **lossless enough for review** — route paths, component portal paths or Storybook ids, viewports, component viewport sizes, component framing, expectations, baselines, thresholds, and blocking semantics are preserved in IR.
|
|
76
76
|
|
|
77
77
|
## Route manifest adapter proof
|
|
78
78
|
|
package/docs/visual-contract.md
CHANGED
|
@@ -82,7 +82,7 @@ If the matching browser route result is missing, the visual check becomes a revi
|
|
|
82
82
|
|
|
83
83
|
## Component visual baselines
|
|
84
84
|
|
|
85
|
-
Component visual cases use Storybook
|
|
85
|
+
Component visual cases can use Storybook or a Reflection-generated portal. Storybook cases resolve `storyId` through Storybook `/index.json`; portal cases open a configured `path` in a generated Vite runtime.
|
|
86
86
|
|
|
87
87
|
```ts
|
|
88
88
|
component: {
|
|
@@ -111,11 +111,40 @@ component: {
|
|
|
111
111
|
}
|
|
112
112
|
```
|
|
113
113
|
|
|
114
|
-
|
|
114
|
+
Portal cases use the same case fields, but replace `storyId` with `path` and configure `component.portal`:
|
|
115
115
|
|
|
116
|
-
|
|
116
|
+
```ts
|
|
117
|
+
component: {
|
|
118
|
+
portal: {
|
|
119
|
+
entry: './tests/reflection/react-portal.tsx',
|
|
120
|
+
readyUrl: 'http://127.0.0.1:6106'
|
|
121
|
+
},
|
|
122
|
+
cases: [
|
|
123
|
+
{
|
|
124
|
+
id: 'button-primary',
|
|
125
|
+
path: '/reflection/button/primary/light',
|
|
126
|
+
viewport: 'button-default',
|
|
127
|
+
viewportSize: { width: 390, height: 220 },
|
|
128
|
+
framing: {
|
|
129
|
+
rootSelector: '#reflection-root',
|
|
130
|
+
background: '#ffffff',
|
|
131
|
+
align: 'center',
|
|
132
|
+
padding: 0
|
|
133
|
+
},
|
|
134
|
+
baselineRoot: 'tests/fixtures/baselines',
|
|
135
|
+
baseline: 'components/button/primary.chromium-linux.light.png',
|
|
136
|
+
threshold: { maxDiffPixels: 0, maxDiffPixelRatio: 0 },
|
|
137
|
+
strict: true
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
For component baselines exported from a design tool, treat `viewportSize` and `framing` as part of the visual contract. The exported PNG width/height and the runtime screenshot width/height must be identical. `viewport` may be a built-in preset such as `component` or a semantic custom label such as `button-default`; when `viewportSize` is present, the explicit dimensions win. Portal cases require `viewportSize`, and the generated frame uses those dimensions directly.
|
|
144
|
+
|
|
145
|
+
`framing` is optional and only affects the screenshot when configured. It applies fixed canvas styles before capture so the runtime component can match a Figma frame:
|
|
117
146
|
|
|
118
|
-
- `rootSelector`:
|
|
147
|
+
- `rootSelector`: root to frame; defaults to `#storybook-root` for Storybook and `#reflection-root` for portal cases.
|
|
119
148
|
- `background`: CSS background matching the Figma frame fill.
|
|
120
149
|
- `align`: `center` or `start`; `center` places the component in the middle of the frame.
|
|
121
150
|
- `padding`: integer pixel padding inside the frame.
|
|
@@ -145,6 +174,7 @@ When the browser must force a state, Reflection requires effective animation sta
|
|
|
145
174
|
Reports include `statePolicy` metadata:
|
|
146
175
|
|
|
147
176
|
- `story-controlled` when no `browserState` is configured;
|
|
177
|
+
- `portal-controlled` when the generated portal renders the state;
|
|
148
178
|
- `browser-forced-with-stabilization` when Reflection applies hover/focus in the browser.
|
|
149
179
|
|
|
150
180
|
## Thresholds
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "reflection-check",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.5",
|
|
4
4
|
"description": "CLI for evidence-backed rendered UI validation.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -45,8 +45,9 @@
|
|
|
45
45
|
"commander": "^14.0.3",
|
|
46
46
|
"jiti": "^2.7.0",
|
|
47
47
|
"pixelmatch": "^7.2.0",
|
|
48
|
-
"pngjs": "^7.0.0",
|
|
49
48
|
"playwright": "^1.60.0",
|
|
49
|
+
"pngjs": "^7.0.0",
|
|
50
|
+
"vite": "^8.0.16",
|
|
50
51
|
"zod": "^4.4.3"
|
|
51
52
|
},
|
|
52
53
|
"devDependencies": {
|