refactor: migrate legacy wire namespace to wrn
This commit is contained in:
@@ -80,7 +80,7 @@ export function createDevAssetServer(
|
||||
pluginAssets: readonly ServedPluginAsset[] = [],
|
||||
): DevAssetServer {
|
||||
let cssCache: string | null = null;
|
||||
let schemasCode = schemasJs ?? "window.__wireSchemas={};";
|
||||
let schemasCode = schemasJs ?? "window.__wrnSchemas={};";
|
||||
|
||||
return {
|
||||
invalidateCss() {
|
||||
|
||||
@@ -567,7 +567,7 @@ export async function startServer(opts: ServeOptions): Promise<RunningServer> {
|
||||
if (origin && origin !== url.origin) return false;
|
||||
const cookieHeader = request.headers.get("cookie") ?? "";
|
||||
const cookieToken =
|
||||
/(?:^|;\s*)wire-csrf=([^;]+)/.exec(cookieHeader)?.[1] ??
|
||||
/(?:^|;\s*)wrn-csrf=([^;]+)/.exec(cookieHeader)?.[1] ??
|
||||
/(?:^|;\s*)wrnexus_csrf=([^;]+)/.exec(cookieHeader)?.[1];
|
||||
const headerToken =
|
||||
request.headers.get("x-csrf-token") ?? request.headers.get("x-wrnexus-csrf") ?? "";
|
||||
|
||||
@@ -160,7 +160,7 @@ function rewriteArtifactImports(
|
||||
if (entry.resolved.endsWith(".wrn")) {
|
||||
const dependencySource = readFileSync(entry.resolved, "utf8");
|
||||
const isStore = /\b(?:global|page)\s+store\s+[A-Za-z_$][\w$]*\s*\{/.test(dependencySource);
|
||||
const dependency = compileWireArtifacts(
|
||||
const dependency = compileWrnArtifacts(
|
||||
entry.resolved,
|
||||
moduleVersions.get(entry.resolved) ?? 0,
|
||||
);
|
||||
@@ -230,7 +230,7 @@ async function rewriteArtifactImportsAsync(
|
||||
if (replacement.endsWith(".wrn")) {
|
||||
const dependencySource = readFileSync(replacement, "utf8");
|
||||
const isStore = /\b(?:global|page)\s+store\s+[A-Za-z_$][\w$]*\s*\{/.test(dependencySource);
|
||||
const dependency = await compileWireArtifactsAsync(
|
||||
const dependency = await compileWrnArtifactsAsync(
|
||||
replacement,
|
||||
moduleVersions.get(replacement) ?? 0,
|
||||
);
|
||||
@@ -266,7 +266,7 @@ export async function loadModule(file: string): Promise<Record<string, unknown>>
|
||||
const version = moduleVersions.get(file) ?? 0;
|
||||
// `.wrn` files are compiled to TypeScript first, then imported.
|
||||
let target = file.endsWith(".wrn")
|
||||
? (await compileWireArtifactsAsync(file, version)).main
|
||||
? (await compileWrnArtifactsAsync(file, version)).main
|
||||
: file;
|
||||
let temporary = false;
|
||||
// Bun intentionally caches local TS/JS modules by filesystem path and ignores
|
||||
@@ -441,13 +441,13 @@ async function bundleBrowserArtifact(
|
||||
}
|
||||
}
|
||||
|
||||
export function compileWireArtifactsAsync(file: string, version = 0): Promise<WrnCompileArtifacts> {
|
||||
export function compileWrnArtifactsAsync(file: string, version = 0): Promise<WrnCompileArtifacts> {
|
||||
const key = `${file}:${version}`;
|
||||
const active = asyncCompileInProgress.get(key);
|
||||
if (active) return active;
|
||||
const task = (async () => {
|
||||
if (!devCompilerPipeline) {
|
||||
const artifacts = compileWireArtifacts(file, version);
|
||||
const artifacts = compileWrnArtifacts(file, version);
|
||||
const code = readFileSync(artifacts.browser, "utf8");
|
||||
const bundled = await bundleBrowserArtifact(
|
||||
code,
|
||||
@@ -525,7 +525,7 @@ export function resetWrnCompileMetrics(): void {
|
||||
});
|
||||
}
|
||||
|
||||
export function compileWireArtifacts(file: string, version = 0): WrnCompileArtifacts {
|
||||
export function compileWrnArtifacts(file: string, version = 0): WrnCompileArtifacts {
|
||||
const active = compileInProgress.get(file);
|
||||
if (active) return active;
|
||||
const cacheDir = compileCacheDir ?? join(dirname(file), ".wrnexus");
|
||||
@@ -598,22 +598,22 @@ export function compileWireArtifacts(file: string, version = 0): WrnCompileArtif
|
||||
|
||||
export async function loadWrnServerModule(file: string): Promise<Record<string, unknown>> {
|
||||
const version = moduleVersions.get(file) ?? 0;
|
||||
const artifact = compileWireArtifacts(file, version).server;
|
||||
const artifact = compileWrnArtifacts(file, version).server;
|
||||
return import(pathToFileURL(artifact).href) as Promise<Record<string, unknown>>;
|
||||
}
|
||||
|
||||
export function wrnBrowserArtifact(file: string): string {
|
||||
return compileWireArtifacts(file, moduleVersions.get(file) ?? 0).browser;
|
||||
return compileWrnArtifacts(file, moduleVersions.get(file) ?? 0).browser;
|
||||
}
|
||||
|
||||
export function wrnBrowserArtifactUrl(file: string): string {
|
||||
const artifact = compileWireArtifacts(file, moduleVersions.get(file) ?? 0).browser;
|
||||
const artifact = compileWrnArtifacts(file, moduleVersions.get(file) ?? 0).browser;
|
||||
return `/__wrnexus/client/${basename(artifact).replace(/\.client\.mjs$/, ".mjs")}`;
|
||||
}
|
||||
|
||||
/** Async browser artifact URL used by HMR so imported client modules are bundled before delivery. */
|
||||
export async function wrnBrowserArtifactUrlAsync(file: string): Promise<string> {
|
||||
const artifact = (await compileWireArtifactsAsync(file, moduleVersions.get(file) ?? 0)).browser;
|
||||
const artifact = (await compileWrnArtifactsAsync(file, moduleVersions.get(file) ?? 0)).browser;
|
||||
return `/__wrnexus/client/${basename(artifact).replace(/\.client\.mjs$/, ".mjs")}`;
|
||||
}
|
||||
|
||||
|
||||
@@ -91,7 +91,7 @@ export interface ProdOptions {
|
||||
inlineStyles?: string;
|
||||
/** `stylesPath` contains theme + UI + app CSS in cascade order. */
|
||||
stylesIncludeFramework?: boolean;
|
||||
/** `stylesPath` already contains the shared Wire UI stylesheet. */
|
||||
/** `stylesPath` already contains the shared WrNexus UI stylesheet. */
|
||||
stylesIncludeUi?: boolean;
|
||||
/** Absolute path to the pre-built reactive runtime. */
|
||||
reactivePath?: string;
|
||||
@@ -107,11 +107,11 @@ export interface ProdOptions {
|
||||
themeJsPath?: string;
|
||||
/** Resolved theme config: enables `<html data-theme>` + `theme.css` link. */
|
||||
theme?: ResolvedTheme;
|
||||
/** Absolute path to the pre-built Wire UI stylesheet (`ui.css`). */
|
||||
/** Absolute path to the pre-built WrNexus UI stylesheet (`ui.css`). */
|
||||
uiCssPath?: string;
|
||||
/** Combined production theme + Wire UI stylesheet. */
|
||||
/** Combined production theme + WrNexus UI stylesheet. */
|
||||
frameworkCssPath?: string;
|
||||
/** Pre-built `window.__wireSchemas = {...}` script for client validation. */
|
||||
/** Pre-built `window.__wrnSchemas = {...}` script for client validation. */
|
||||
schemasJs?: string;
|
||||
/**
|
||||
* Authorization declarations discovered by `wrnexus build` from
|
||||
@@ -367,7 +367,7 @@ function createProdAssetServer(opts: ProdOptions): AssetServer {
|
||||
return (await serveStoredFile(pathname)) ?? new Response("Not Found", { status: 404 });
|
||||
}
|
||||
if (pathname === "/__wrnexus/schemas.js") {
|
||||
return new Response(opts.schemasJs ?? "window.__wireSchemas={};", { headers: JS_HEADERS });
|
||||
return new Response(opts.schemasJs ?? "window.__wrnSchemas={};", { headers: JS_HEADERS });
|
||||
}
|
||||
if (pathname === "/__wrnexus/theme.css") return serveFile(opts.themePath, CSS_HEADERS);
|
||||
const activeThemeMatch = /^\/__wrnexus\/theme\/([^/]+)\/([^/]+)\.css$/.exec(pathname);
|
||||
@@ -524,7 +524,7 @@ export function createProductionHandlers(
|
||||
/**
|
||||
* Apply migrations bundled into the build before the server accepts traffic, so
|
||||
* a fresh deploy always runs on the latest schema — exactly like the dev server
|
||||
* auto-migrates on startup. Applied migrations are tracked in `_wire_migrations`,
|
||||
* auto-migrates on startup. Applied migrations are tracked in `_wrn_migrations`,
|
||||
* so this is idempotent and safe to run on every boot. Opt out with
|
||||
* `autoMigrate: false` (e.g. multi-instance deploys that migrate in a release
|
||||
* step). A failed migration is logged but does not crash the server: each
|
||||
|
||||
@@ -4,8 +4,8 @@ import { brotliCompressSync, constants as zlibConstants } from "node:zlib";
|
||||
*
|
||||
* It owns the HTTP/WebSocket dispatch and the SSR document assembly, but knows
|
||||
* nothing about *how* modules or assets are produced — those come in via
|
||||
* `RuntimeDeps`. Dev wires in dynamic module loading + on-the-fly bundling;
|
||||
* prod wires in a static manifest + pre-built chunks on disk.
|
||||
* `RuntimeDeps`. Dev connects in dynamic module loading + on-the-fly bundling;
|
||||
* prod connects in a static manifest + pre-built chunks on disk.
|
||||
*/
|
||||
|
||||
import {
|
||||
@@ -154,7 +154,7 @@ export interface RuntimeDeps {
|
||||
assets: AssetServer;
|
||||
/** When true, inject the global stylesheet link into every page head. */
|
||||
hasStyles?: boolean;
|
||||
/** When true, inject the Wire UI stylesheet link (`/__wrnexus/ui.css`). */
|
||||
/** When true, inject the WrNexus UI stylesheet link (`/__wrnexus/ui.css`). */
|
||||
hasUi?: boolean;
|
||||
/** Production build combined theme + UI stylesheet. */
|
||||
hasFrameworkStyles?: boolean;
|
||||
@@ -705,10 +705,10 @@ export const HMR_CLIENT_JS = `
|
||||
}
|
||||
|
||||
if (
|
||||
window.wireTheme &&
|
||||
typeof window.wireTheme.bind === "function"
|
||||
window.wrnTheme &&
|
||||
typeof window.wrnTheme.bind === "function"
|
||||
) {
|
||||
window.wireTheme.bind(document);
|
||||
window.wrnTheme.bind(document);
|
||||
}
|
||||
|
||||
window.dispatchEvent(
|
||||
@@ -938,7 +938,7 @@ export function createHandlers(deps: RuntimeDeps): Handlers {
|
||||
|
||||
// Global <head> additions, identical on every page (styles are global).
|
||||
// Theme tokens load first so global.css and component styles can override them.
|
||||
// Order: theme tokens, then Wire UI, then the app stylesheet — so the app's
|
||||
// Order: theme tokens, then WrNexus UI, then the app stylesheet — so the app's
|
||||
// own CSS (loaded last) can override both the tokens and the UI classes.
|
||||
const headParts: string[] = [];
|
||||
if (!deps.theme && deps.hasFrameworkStyles && !deps.stylesIncludeFramework) {
|
||||
|
||||
@@ -21,15 +21,15 @@ export function collectScripts(
|
||||
}
|
||||
if (/\bdata-wrn-action=/.test(body)) scripts.push("/__wrnexus/actions.js");
|
||||
if (
|
||||
/\bdata-wire-theme-(toggle|set)\b/.test(body) ||
|
||||
/\bdata-wire-accent-(set|clear)\b/.test(body)
|
||||
/\bdata-wrn-theme-(toggle|set)\b/.test(body) ||
|
||||
/\bdata-wrn-accent-(set|clear)\b/.test(body)
|
||||
) {
|
||||
scripts.push(THEME_JS_HREF);
|
||||
}
|
||||
if (/\bdata-schema="[A-Za-z0-9_-]+"/.test(body)) {
|
||||
scripts.push("/__wrnexus/schemas.js", "/__wrnexus/validate.js");
|
||||
}
|
||||
if (/\bdata-wire-lang-set\b/.test(body) || /\bselect[^>]*\bdata-wire-lang\b/.test(body)) {
|
||||
if (/\bdata-wrn-lang-set\b/.test(body) || /\bselect[^>]*\bdata-wrn-lang\b/.test(body)) {
|
||||
scripts.push(I18N_JS_HREF);
|
||||
}
|
||||
if (/\bdata-room=/.test(body)) scripts.push("/__wrnexus/realtime.js");
|
||||
|
||||
Reference in New Issue
Block a user