You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The browser-based `validate` (console/network/HTTP + contrast/clip audits, remote-asset
localization, viewport-from-comp) only existed inline in the `validate` CLI command, so
external consumers couldn't reuse it — they reimplement a parallel headless harness that
drifts from render (missing localize → false CORS; hardcoded viewport → false out-of-frame;
hand-maintained runtime parity). Lint doesn't have this problem: it's an importable
`@hyperframes/lint` package.
This lifts the browser core into a new `@hyperframes/validate` package, exporting
`validateHtmlInBrowser(html, opts)`. The CLI `validate` command is behavior-unchanged: it
lints + bundles, resolves Chrome via its own `ensureBrowser()`, and delegates. The package
takes `opts.browserExecutablePath` so the caller owns browser discovery — the package stays
launch-agnostic (no browser/manager), like lint owns rules but not I/O.
New `opts.onPage(page)` runs extra checks on the SAME loaded page before teardown (findings
merged), so a consumer can layer its own gates (e.g. caption-zone / out-of-frame) without a
second browser load.
- contrast-audit.browser.js moves to the package (its only consumer); the CLI build copies it
into dist and the bundled runtime loads it via the same page.addScriptTag path.
- The small low-level helpers validate needs (static file server, comp-viewport parse,
linkedom shim, error normalizer) are vendored into the package so it doesn't import from
@hyperframes/cli (which depends on it); folding both onto a shared low-level package is a
follow-up. Marked in .fallowrc duplicates.ignore, matching the repo's moved-code convention.
- Pure-function + contrast-script tests move to the package with the code they cover; the CLI
keeps only extractCompositionErrorsFromLint (a CLI-side lint→error shaping concern).
Verified: package build + typecheck clean, package tests 13/13, CLI tests 1270/1270 (103
files), fallow audit clean on 20 changed files, and an e2e `hyperframes validate` on a real
composition through the package (Chrome launch + contrast audit) returns ok:true.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
// new package makes fallow see it as a fresh finding; the underlying clone
306
307
// predates this refactor.
307
308
"packages/parsers/src/hfIds.ts",
309
+
// @hyperframes/validate vendors these from cli/src/utils/* so it needn't import @hyperframes/cli (which depends on it); a shared low-level package is a follow-up.
310
+
"packages/validate/src/staticProjectServer.ts",
311
+
"packages/validate/src/compositionViewport.ts",
312
+
"packages/validate/src/dom.ts",
313
+
"packages/validate/src/errorMessage.ts",
314
+
// browserValidate.ts: raceMediaReady vs auditClipDurations' in-page closure share the race wiring; intentional — the closure is Puppeteer-serialized into a separate realm (see raceMediaReady doc).
315
+
"packages/validate/src/browserValidate.ts",
308
316
// Parser test files: parallel arrange/act/assert test cases — pre-existing
309
317
// duplication moved from packages/core/src/parsers/.
Copy file name to clipboardExpand all lines: package.json
+1-1Lines changed: 1 addition & 1 deletion
Original file line number
Diff line number
Diff line change
@@ -11,7 +11,7 @@
11
11
"type": "module",
12
12
"scripts": {
13
13
"dev": "bun run studio",
14
-
"build": "bun run --filter '@hyperframes/{parsers,lint,studio-server}' build && bun run --filter @hyperframes/core build && bun run --filter '@hyperframes/{core,engine,producer,player,studio,shader-transitions,aws-lambda,gcp-cloud-run,sdk}' build && bun run --filter @hyperframes/cli build",
14
+
"build": "bun run --filter '@hyperframes/{parsers,lint,studio-server}' build && bun run --filter @hyperframes/core build && bun run --filter '@hyperframes/{core,engine,producer,player,studio,shader-transitions,aws-lambda,gcp-cloud-run,sdk}' build && bun run --filter @hyperframes/validate build && bun run --filter @hyperframes/cli build",
15
15
"build:producer": "bun run --filter @hyperframes/producer build",
16
16
"studio": "bun run --filter @hyperframes/studio dev",
17
17
"build:hyperframes-runtime": "bun run --filter @hyperframes/core build:hyperframes-runtime",
0 commit comments