mirror of
https://github.com/hanzoai/frames.git
synced 2026-09-24 00:08:03 +00:00
Forked from HyperFrames (Apache-2.0), full history preserved. Hosts are mapped explicitly and BEFORE the identifier rename, because hyperframes.heygen.com is not decoration: 175 of its occurrences are $schema identifiers that a validator dereferences. A blind rename would have left them naming a host that never serves them. The schema files are in this repo under docs/schema, so the mapped host is one we can actually serve -- that is the condition that makes the rewrite safe, and serving them is a deploy task, not an edit. docs/schema/hyperframes.json is renamed to frames.json to match the identifier it is now published under. api.heygen.com and the CLI auth against heygen.com are left UNRENAMED on purpose. They are a dependency on HeyGen's SaaS, not a name of ours to take, and the right move is to remove that integration rather than rebrand it. LICENSE and CREDITS.md are untouched; NOTICE records the lineage. Co-authored-by: Hanzo Dev <[email protected]>
83 lines
2.6 KiB
TypeScript
83 lines
2.6 KiB
TypeScript
/**
|
|
* Build script: compile stubs/hf-early-stub.ts → src/generated/hf-early-stub-inline.ts
|
|
*
|
|
* Run via: bun run scripts/build-hf-early-stub.ts
|
|
* (also called automatically as part of `bun run build`)
|
|
*
|
|
* Output format mirrors packages/core/scripts/build-frames-runtime-artifact.ts:
|
|
* a TypeScript module exporting a single string-constant getter that is
|
|
* compiled by tsc into dist/ — no esbuild, no file I/O, no dynamic paths at
|
|
* runtime.
|
|
*/
|
|
|
|
import { mkdirSync, writeFileSync } from "node:fs";
|
|
import { dirname, resolve } from "node:path";
|
|
import { fileURLToPath } from "node:url";
|
|
import { buildSync } from "esbuild";
|
|
import { execSync } from "node:child_process";
|
|
|
|
const thisDir = dirname(fileURLToPath(import.meta.url));
|
|
const repoRoot = resolve(thisDir, "..");
|
|
|
|
const stubEntry = resolve(repoRoot, "stubs/hf-early-stub.ts");
|
|
const generatedDir = resolve(repoRoot, "src/generated");
|
|
const outPath = resolve(generatedDir, "hf-early-stub-inline.ts");
|
|
|
|
// ── Compile the stub to a self-contained IIFE ─────────────────────────────────
|
|
const result = buildSync({
|
|
entryPoints: [stubEntry],
|
|
bundle: true,
|
|
write: false,
|
|
platform: "browser",
|
|
format: "iife",
|
|
target: ["es2020"],
|
|
// Minify for production — the stub is injected on every page load.
|
|
minify: true,
|
|
legalComments: "none",
|
|
});
|
|
|
|
const iife = result.outputFiles[0]?.text ?? "";
|
|
if (!iife) {
|
|
throw new Error("esbuild produced no output for hf-early-stub.ts");
|
|
}
|
|
|
|
// ── Write the generated module ────────────────────────────────────────────────
|
|
mkdirSync(generatedDir, { recursive: true });
|
|
|
|
const escaped = JSON.stringify(iife);
|
|
writeFileSync(
|
|
outPath,
|
|
[
|
|
"// AUTO-GENERATED by scripts/build-hf-early-stub.ts — do not edit",
|
|
`const HF_EARLY_STUB_IIFE: string = ${escaped};`,
|
|
"",
|
|
"/**",
|
|
" * Returns the pre-built Frames early stub IIFE as a string constant.",
|
|
" * Inject into <head> before any other scripts so the GSAP batching",
|
|
" * interceptor is in place when user composition scripts run.",
|
|
" */",
|
|
"export function getHfEarlyStub(): string {",
|
|
" return HF_EARLY_STUB_IIFE;",
|
|
"}",
|
|
"",
|
|
].join("\n"),
|
|
"utf8",
|
|
);
|
|
|
|
// Format the generated file so `oxfmt --check` passes in CI.
|
|
// Errors are intentionally swallowed — oxfmt unavailable in some envs.
|
|
try {
|
|
execSync(`bunx oxfmt ${outPath}`, { stdio: "ignore" });
|
|
} catch {
|
|
// not fatal
|
|
}
|
|
|
|
console.log(
|
|
JSON.stringify({
|
|
event: "hf_early_stub_generated",
|
|
stubEntry,
|
|
outPath,
|
|
bytes: Buffer.byteLength(iife, "utf8"),
|
|
}),
|
|
);
|