Files
heygen-com__hyperframes/package.json
xuanru a108ffa1f2 feat(validate): extract @hyperframes/validate importable runtime validate
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>
2026-07-07 06:41:57 +00:00

70 lines
3.0 KiB
JSON

{
"name": "hyperframes-monorepo",
"private": true,
"repository": {
"type": "git",
"url": "https://github.com/heygen-com/hyperframes"
},
"workspaces": [
"packages/*"
],
"type": "module",
"scripts": {
"dev": "bun run studio",
"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",
"build:producer": "bun run --filter @hyperframes/producer build",
"studio": "bun run --filter @hyperframes/studio dev",
"build:hyperframes-runtime": "bun run --filter @hyperframes/core build:hyperframes-runtime",
"build:hyperframes-runtime:modular": "bun run --filter @hyperframes/core build:hyperframes-runtime:modular",
"verify:packed-manifests": "node scripts/verify-packed-manifests.mjs",
"validate:release-channel": "node scripts/validate-release-channel.mjs",
"set-version": "tsx scripts/set-version.ts",
"release:prepare": "tsx scripts/release-prepare.ts",
"changelog:draft": "tsx scripts/draft-changelog.ts",
"changelog:weekly": "tsx scripts/changelog-weekly.ts",
"sync-schemas": "tsx scripts/sync-schemas.ts",
"sync-schemas:check": "tsx scripts/sync-schemas.ts --check",
"lint": "oxlint . && tsx scripts/lint-skills.ts",
"lint:skills": "tsx scripts/lint-skills.ts",
"lint:fix": "oxlint --fix .",
"format": "oxfmt .",
"test": "bun run --filter '*' test",
"player:perf": "bun run --filter @hyperframes/player perf",
"format:check": "oxfmt --check .",
"knip": "knip",
"test:scripts": "node --import tsx --test scripts/validate-release-channel.test.mjs scripts/draft-changelog.test.ts scripts/set-version.test.ts scripts/release-prepare.test.ts scripts/cli-options.test.ts scripts/changelog-weekly.test.ts scripts/claude-plugin-compression.test.ts scripts/verify-packed-manifests.test.mjs",
"test:skills": "node --test 'skills/**/*.test.mjs'",
"generate:previews": "tsx scripts/generate-template-previews.ts",
"generate:catalog-previews": "tsx scripts/generate-catalog-previews.ts",
"upload:docs-images": "bash scripts/upload-docs-images.sh",
"prepare": "test -d .git && lefthook install || true"
},
"devDependencies": {
"@commitlint/cli": "^20.5.0",
"@commitlint/config-conventional": "^20.5.0",
"@hyperframes/player": "workspace:*",
"@types/node": "^25.0.10",
"concurrently": "^8.2.0",
"fallow": "^2.75.0",
"happy-dom": "^20.9.0",
"knip": "^6.0.3",
"lefthook": "^2.1.4",
"oxfmt": "^0.41.0",
"oxlint": "^1.56.0",
"tsx": "^4.21.0",
"typescript": "^5.0.0"
},
"resolutions": {
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
},
"overrides": {
"@types/react": "^19.0.0",
"@types/react-dom": "^19.0.0",
"react": "^19.0.0",
"react-dom": "^19.0.0"
}
}