aee3c194af
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.
31 lines
1.1 KiB
TypeScript
31 lines
1.1 KiB
TypeScript
// The console-hosted UI server (design §9, primary path). `servePluginUi` from the SDK owns the whole
|
|
// plugin side — a loopback ephemeral port behind a per-boot secret, registration + lease renewal with
|
|
// the host, and the console reverse-proxy contract — so we just hand it the built SPA directory and the
|
|
// plugin-local API router. The operator signs into the console once; the "ROM Manager" nav entry
|
|
// appears automatically. Zero human auth here.
|
|
|
|
import {
|
|
type PluginUiHandle,
|
|
type Punktfunk,
|
|
servePluginUi,
|
|
} 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. The SPA dir resolves whether we run bundled or from source. */
|
|
export const serveConsoleUi = (
|
|
pf: Punktfunk,
|
|
engine: Engine,
|
|
opts?: { version?: string },
|
|
): Promise<PluginUiHandle> =>
|
|
servePluginUi(pf, {
|
|
id: PLUGIN_NAME,
|
|
title: UI_TITLE,
|
|
icon: UI_ICON,
|
|
version: opts?.version,
|
|
staticDir: resolveUiDir(import.meta.url),
|
|
fetch: makeRouter(engine),
|
|
});
|