Files
James 655b598ad8 fix(cli): unblock CI typecheck, skip ffmpeg test when absent, fix build:copy
Three fixes on the audio-fft PR:

1. Typecheck. `bandValues` was inferred as `Float32Array<ArrayBuffer>[]`
   via `Array.from(..., () => new Float32Array(n))`, which TS 5.7+
   rejects when assigning the `Float32Array` returned from
   `computeFftBands` (narrower buffer type parameter). Annotate explicitly
   as `Float32Array[]`.

2. Test on CI. The `decodes real fixture audio with ffmpeg` test was
   hard-failing on CI runners that don't have ffmpeg on PATH
   (`spawnSync ffmpeg ENOENT`). Add a `hasFfmpeg()` probe and use
   `it.skipIf(!hasFfmpeg())`. The CLI's `doctor` command surfaces the
   missing-binary case for real users; tests shouldn't hard-fail on it.

3. build:copy. `cp -r src/templates/_shared dist/templates/` was failing
   on re-builds because dist retained a stale `AGENTS.md` symlink to
   `CLAUDE.md` from an earlier build when those files were the same
   content. Prepend `rm -rf dist/{studio,docs,templates,skills,docker}`
   so the copy starts from a clean slate and is idempotent across
   builds.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-18 22:33:47 +00:00

64 lines
2.1 KiB
JSON

{
"name": "@hyperframes/cli",
"version": "0.4.5",
"description": "HyperFrames CLI — create, preview, and render HTML video compositions",
"repository": {
"type": "git",
"url": "https://github.com/heygen-com/hyperframes",
"directory": "packages/cli"
},
"bin": {
"hyperframes": "./dist/cli.js"
},
"files": [
"dist"
],
"type": "module",
"scripts": {
"test": "vitest run",
"dev": "tsx src/cli.ts",
"build": "bun run build:fonts && bun run build:studio && tsup && bun run build:runtime && bun run build:copy",
"build:fonts": "cd ../producer && tsx scripts/generate-font-data.ts",
"build:studio": "cd ../studio && bun run build",
"build:runtime": "tsx scripts/build-runtime.ts",
"build:copy": "rm -rf dist/studio dist/docs dist/templates dist/skills dist/docker && mkdir -p dist/studio dist/docs dist/templates dist/skills dist/docker && cp -r ../studio/dist/* dist/studio/ && cp -r src/templates/blank src/templates/_shared dist/templates/ && cp -r ../../skills/hyperframes ../../skills/hyperframes-cli ../../skills/gsap dist/skills/ && cp src/docker/Dockerfile.render dist/docker/ && (cp src/docs/*.md dist/docs/ 2>/dev/null || true)",
"typecheck": "tsc --noEmit"
},
"dependencies": {
"@hono/node-server": "^1.8.0",
"@puppeteer/browsers": "^2.13.0",
"adm-zip": "^0.5.16",
"citty": "^0.2.1",
"compare-versions": "^6.1.1",
"esbuild": "^0.25.0",
"giget": "^3.2.0",
"hono": "^4.0.0",
"mime-types": "^3.0.2",
"open": "^10.0.0",
"postcss": "^8.5.8",
"prettier": "^3.8.1",
"puppeteer-core": "^24.39.1"
},
"devDependencies": {
"@clack/prompts": "^1.1.0",
"@hyperframes/core": "workspace:*",
"@hyperframes/engine": "workspace:*",
"@hyperframes/producer": "workspace:*",
"@types/adm-zip": "^0.5.7",
"@types/mime-types": "^3.0.1",
"@types/node": "^22.0.0",
"linkedom": "^0.18.12",
"picocolors": "^1.1.1",
"tsup": "^8.0.0",
"tsx": "^4.0.0",
"typescript": "^5.0.0",
"vitest": "^3.2.4"
},
"optionalDependencies": {
"@google/genai": "^1.50.0"
},
"engines": {
"node": ">=22"
}
}