fix(dist): ship a self-contained bundle so it installs from the registry
CI / publish (push) Has been cancelled
CI / build (push) Has been cancelled

The unscoped package lives on the Gitea npm registry but its deps span two
registries (`@punktfunk/host` on Gitea, `effect`/`undici` on npmjs). Installing
by name with `--registry <gitea>` sets the default registry for the whole tree,
so `effect` 404s (Gitea doesn't proxy npm), and an unscoped name can't be
scope-mapped. Fix: bundle the backend into ONE self-contained `dist/index.js`
(+ `dist/cli.js`) via `bun build --target=bun` with `@punktfunk/host` + `effect`
inlined — mirroring the scripting runner. The published package now has zero
runtime dependencies and installs with a single `--registry` flag.

- build → `bun build src/{index,cli}.ts --target=bun --outdir dist --external undici`
- @punktfunk/host + effect → devDependencies (bundled, not resolved at install)
- resolveUiDir(): walk to the SPA dir so staticDir works in the bundled
  (dist/index.js) and unbundled (dist/server/index.js) layouts
- version 0.1.0 → 0.1.1

Verified: the bundle loads + scans/detects/previews with NO node_modules present.
This commit is contained in:
2026-07-18 11:18:38 +02:00
parent 3a6c80558d
commit aee3c194af
5 changed files with 39 additions and 18 deletions
+3 -5
View File
@@ -11,12 +11,10 @@ import {
} from "@punktfunk/host";
import { PLUGIN_NAME, UI_ICON, UI_TITLE } from "../const.js";
import type { Engine } from "../engine/index.js";
import { resolveUiDir } from "../paths.js";
import { makeRouter } from "./router.js";
/**
* Serve the UI through the console. `../../dist/ui` resolves to `<repo>/dist/ui` whether this module
* runs from source (`src/server/index.ts`) or built (`dist/server/index.js`).
*/
/** Serve the UI through the console. The SPA dir resolves whether we run bundled or from source. */
export const serveConsoleUi = (
pf: Punktfunk,
engine: Engine,
@@ -27,6 +25,6 @@ export const serveConsoleUi = (
title: UI_TITLE,
icon: UI_ICON,
version: opts?.version,
staticDir: new URL("../../dist/ui", import.meta.url),
staticDir: resolveUiDir(import.meta.url),
fetch: makeRouter(engine),
});