mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-03 04:38:33 +00:00
fix(core,cli,ci): harden runtime resolution + inline constant + smoke test (#458)
Guard buildHyperframesRuntimeScript() against missing entry.ts so it returns null instead of crashing with esbuild stderr output. Add getHyperframeRuntimeScript() that returns the pre-built IIFE as a baked-in string constant — no esbuild, no file I/O, no import.meta.url. Consolidate CLI runtime source resolution into a single module with a clear priority chain: esbuild from source (dev) → inlined constant (production) → pre-built artifact file (fallback). Add CI smoke test that npm-packs the CLI, installs globally, runs hyperframes preview, and asserts no stderr errors + runtime endpoint returns JS. Bump version to 0.4.16.
This commit is contained in:
@@ -139,6 +139,7 @@ export {
|
||||
HYPERFRAME_CONTROL_ACTIONS,
|
||||
type HyperframeControlAction,
|
||||
} from "./inline-scripts/runtimeContract";
|
||||
export { getHyperframeRuntimeScript } from "./generated/runtime-inline";
|
||||
export {
|
||||
buildHyperframesRuntimeScript,
|
||||
type HyperframesRuntimeBuildOptions,
|
||||
|
||||
@@ -17,6 +17,6 @@ export const HYPERFRAME_RUNTIME_CONTRACT: HyperframeRuntimeContract = {
|
||||
messageSources: HYPERFRAME_BRIDGE_SOURCES,
|
||||
};
|
||||
|
||||
export function loadHyperframeRuntimeSource(): string {
|
||||
export function loadHyperframeRuntimeSource(): string | null {
|
||||
return buildHyperframesRuntimeScript();
|
||||
}
|
||||
|
||||
@@ -1,4 +1,5 @@
|
||||
import { buildSync } from "esbuild";
|
||||
import { existsSync } from "node:fs";
|
||||
import { dirname, resolve } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
|
||||
@@ -17,10 +18,19 @@ function applyDefaultParityMode(script: string, enabled: boolean): string {
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Build the runtime IIFE from source via esbuild.
|
||||
*
|
||||
* Returns `null` when `entry.ts` does not exist at the resolved path —
|
||||
* this happens in bundled / published contexts where only `dist/` ships.
|
||||
* Callers must fall back to the pre-built artifact or the inlined constant.
|
||||
*/
|
||||
export function buildHyperframesRuntimeScript(
|
||||
options: HyperframesRuntimeBuildOptions = {},
|
||||
): string {
|
||||
): string | null {
|
||||
const entryPath = resolve(dirname(fileURLToPath(import.meta.url)), "../runtime/entry.ts");
|
||||
if (!existsSync(entryPath)) return null;
|
||||
|
||||
const result = buildSync({
|
||||
entryPoints: [entryPath],
|
||||
bundle: true,
|
||||
|
||||
Reference in New Issue
Block a user