// ---------------------------------------------------------------------------// The packed `@cloudflare/worker-bundler` artifact that ships NEXT TO the// compiled binary.//// `bun build --compile` cannot embed a package that is only ever addressed by// bare specifier at runtime: bunfs has no `node_modules`, so an// `import("@cloudflare/worker-bundler")` evaluated inside the binary resolves// against the virtual root and throws// ResolveMessage: Cannot find module '@cloudflare/worker-bundler'// The build therefore copies the package's `dist/` next to the executable and// `native-bindings.ts` publishes its absolute path as// EXECUTOR_WORKER_BUNDLER_DIR. Consumers must load from that directory; a bare// specifier is unresolvable in the packaged daemon by construction.//// This module is the single source of truth for which files that contract// needs, so the build-time staging check and the runtime lookup cannot drift.// They previously did: the build wrote `dist/index.bundled.js` (the file// consumers actually load) while the runtime check only looked for// `dist/index.js` and `dist/esbuild.wasm`. That drift fails OPEN — an// incomplete staged copy passes the build, the runtime silently declines to// publish the env var, and the consumer falls through to the bare specifier.// ---------------------------------------------------------------------------import { join } from "node:path";/** Directory name staged beside the executable, and looked up from execDir. */export const WORKER_BUNDLER_DIRNAME = "worker-bundler";/** * Files the colocated copy must contain to be usable. * * `index.bundled.js` is the entrypoint consumers load (the build packs it with * esbuild so it has no bare-specifier imports of its own); `esbuild.wasm` is * read at runtime beside it; `index.js` is the package's own entry, kept so the * staged directory stays a faithful copy rather than a lookalike. */export const WORKER_BUNDLER_RUNTIME_FILES = [ "dist/index.js", "dist/index.bundled.js", "dist/esbuild.wasm",] as const;/** * Which required files are absent from a staged worker-bundler directory. * * Takes the existence probe as a parameter so the build script, the runtime * bootstrap, and tests all agree on the requirement without touching a real * filesystem. Returns the POSIX-relative names, which is what error messages * should quote. */export const missingWorkerBundlerFiles = ( dir: string, exists: (path: string) => boolean,): readonly string[] => WORKER_BUNDLER_RUNTIME_FILES.filter((relative) => !exists(join(dir, ...relative.split("/"))));
// ---------------------------------------------------------------------------
// The packed `@cloudflare/worker-bundler` artifact that ships NEXT TO the
// compiled binary.
//
// `bun build --compile` cannot embed a package that is only ever addressed by
// bare specifier at runtime: bunfs has no `node_modules`, so an
// `import("@cloudflare/worker-bundler")` evaluated inside the binary resolves
// against the virtual root and throws
// ResolveMessage: Cannot find module '@cloudflare/worker-bundler'
// The build therefore copies the package's `dist/` next to the executable and
// `native-bindings.ts` publishes its absolute path as
// EXECUTOR_WORKER_BUNDLER_DIR. Consumers must load from that directory; a bare
// specifier is unresolvable in the packaged daemon by construction.
//
// This module is the single source of truth for which files that contract
// needs, so the build-time staging check and the runtime lookup cannot drift.
// They previously did: the build wrote `dist/index.bundled.js` (the file
// consumers actually load) while the runtime check only looked for
// `dist/index.js` and `dist/esbuild.wasm`. That drift fails OPEN — an
// incomplete staged copy passes the build, the runtime silently declines to
// publish the env var, and the consumer falls through to the bare specifier.
// ---------------------------------------------------------------------------
import { join } from "node:path";
/** Directory name staged beside the executable, and looked up from execDir. */
export const WORKER_BUNDLER_DIRNAME = "worker-bundler";
/**
* Files the colocated copy must contain to be usable.
*
* `index.bundled.js` is the entrypoint consumers load (the build packs it with
* esbuild so it has no bare-specifier imports of its own); `esbuild.wasm` is
* read at runtime beside it; `index.js` is the package's own entry, kept so the
* staged directory stays a faithful copy rather than a lookalike.
*/
export const WORKER_BUNDLER_RUNTIME_FILES = [
"dist/index.js",
"dist/index.bundled.js",
"dist/esbuild.wasm",
] as const;
/**
* Which required files are absent from a staged worker-bundler directory.
*
* Takes the existence probe as a parameter so the build script, the runtime
* bootstrap, and tests all agree on the requirement without touching a real
* filesystem. Returns the POSIX-relative names, which is what error messages
* should quote.
*/
export const missingWorkerBundlerFiles = (
dir: string,
exists: (path: string) => boolean,
): readonly string[] =>
WORKER_BUNDLER_RUNTIME_FILES.filter((relative) => !exists(join(dir, ...relative.split("/"))));