fix: use patched compiler for docs deployment

This commit is contained in:
2026-08-03 00:09:47 +05:30
parent 8d5d4b8f12
commit 76d4e5825a
9 changed files with 671 additions and 224 deletions
+191 -186
View File
@@ -173,13 +173,13 @@ export interface Routes {
} }
export interface RouteNames { export interface RouteNames {
"index": "/"; index: "/";
"404": "/404"; "404": "/404";
"access": "/access"; access: "/access";
"architecture": "/architecture"; architecture: "/architecture";
"benchmarks": "/benchmarks"; benchmarks: "/benchmarks";
"changelog": "/changelog"; changelog: "/changelog";
"examples": "/examples"; examples: "/examples";
"getting.started": "/getting-started"; "getting.started": "/getting-started";
"guides.api.routes": "/guides/api-routes"; "guides.api.routes": "/guides/api-routes";
"guides.authentication": "/guides/authentication"; "guides.authentication": "/guides/authentication";
@@ -205,9 +205,9 @@ export interface RouteNames {
"guides.upgrading": "/guides/upgrading"; "guides.upgrading": "/guides/upgrading";
"guides.uploads": "/guides/uploads"; "guides.uploads": "/guides/uploads";
"guides.workspaces.and.gateway": "/guides/workspaces-and-gateway"; "guides.workspaces.and.gateway": "/guides/workspaces-and-gateway";
"language": "/language"; language: "/language";
"license": "/license"; license: "/license";
"packages": "/packages"; packages: "/packages";
"packages.ai": "/packages/ai"; "packages.ai": "/packages/ai";
"packages.auth": "/packages/auth"; "packages.auth": "/packages/auth";
"packages.authz": "/packages/authz"; "packages.authz": "/packages/authz";
@@ -335,12 +335,12 @@ export interface RouteNames {
"releases.0.6.0": "/releases/0.6.0"; "releases.0.6.0": "/releases/0.6.0";
"releases.0.7.0": "/releases/0.7.0"; "releases.0.7.0": "/releases/0.7.0";
"releases.0.8.0": "/releases/0.8.0"; "releases.0.8.0": "/releases/0.8.0";
"roadmap": "/roadmap"; roadmap: "/roadmap";
"search": "/search"; search: "/search";
"security": "/security"; security: "/security";
"showcase": "/showcase"; showcase: "/showcase";
"support": "/support"; support: "/support";
"tutorial": "/tutorial"; tutorial: "/tutorial";
} }
export interface RouteQueries { export interface RouteQueries {
@@ -356,7 +356,11 @@ type RouteValue = string | readonly string[] | undefined;
function encodeRouteValue(value: RouteValue, catchAll: boolean): string { function encodeRouteValue(value: RouteValue, catchAll: boolean): string {
if (value === undefined) return ""; if (value === undefined) return "";
const values = Array.isArray(value) ? value : catchAll ? String(value).split("/") : [String(value)]; const values = Array.isArray(value)
? value
: catchAll
? String(value).split("/")
: [String(value)];
return values.map((part) => encodeURIComponent(part)).join("/"); return values.map((part) => encodeURIComponent(part)).join("/");
} }
@@ -386,7 +390,8 @@ function buildHref(path: string, params: Record<string, RouteValue> = {}): strin
} }
const value = params[name]; const value = params[name];
if (value === undefined && optional) continue; if (value === undefined && optional) continue;
if (value === undefined) throw new Error(`WRN-ROUTE-MISSING-PARAM: Missing route parameter '${name}'.`); if (value === undefined)
throw new Error(`WRN-ROUTE-MISSING-PARAM: Missing route parameter '${name}'.`);
output.push(encodeRouteValue(value, catchAll)); output.push(encodeRouteValue(value, catchAll));
} }
return "/" + output.filter(Boolean).join("/"); return "/" + output.filter(Boolean).join("/");
@@ -413,175 +418,175 @@ export function route<N extends RouteName>(
: [params: Routes[RouteNames[N]], query?: RouteQuery<RouteNames[N]>] : [params: Routes[RouteNames[N]], query?: RouteQuery<RouteNames[N]>]
): string { ): string {
const paths: Record<RouteName, RoutePath> = { const paths: Record<RouteName, RoutePath> = {
"404": "/404", "404": "/404",
"index": "/", index: "/",
"access": "/access", access: "/access",
"architecture": "/architecture", architecture: "/architecture",
"benchmarks": "/benchmarks", benchmarks: "/benchmarks",
"changelog": "/changelog", changelog: "/changelog",
"examples": "/examples", examples: "/examples",
"getting.started": "/getting-started", "getting.started": "/getting-started",
"guides.api.routes": "/guides/api-routes", "guides.api.routes": "/guides/api-routes",
"guides.authentication": "/guides/authentication", "guides.authentication": "/guides/authentication",
"guides.authorization": "/guides/authorization", "guides.authorization": "/guides/authorization",
"guides.configuration.and.profiles": "/guides/configuration-and-profiles", "guides.configuration.and.profiles": "/guides/configuration-and-profiles",
"guides.database": "/guides/database", "guides.database": "/guides/database",
"guides.deployment": "/guides/deployment", "guides.deployment": "/guides/deployment",
"guides.forms.and.validation": "/guides/forms-and-validation", "guides.forms.and.validation": "/guides/forms-and-validation",
"guides.i18n.and.themes": "/guides/i18n-and-themes", "guides.i18n.and.themes": "/guides/i18n-and-themes",
"guides.middleware": "/guides/middleware", "guides.middleware": "/guides/middleware",
"guides.mobile": "/guides/mobile", "guides.mobile": "/guides/mobile",
"guides.observability": "/guides/observability", "guides.observability": "/guides/observability",
"guides.pages.and.components": "/guides/pages-and-components", "guides.pages.and.components": "/guides/pages-and-components",
"guides.project.structure": "/guides/project-structure", "guides.project.structure": "/guides/project-structure",
"guides.pubsub": "/guides/pubsub", "guides.pubsub": "/guides/pubsub",
"guides.queues": "/guides/queues", "guides.queues": "/guides/queues",
"guides.realtime": "/guides/realtime", "guides.realtime": "/guides/realtime",
"guides.routing": "/guides/routing", "guides.routing": "/guides/routing",
"guides.security": "/guides/security", "guides.security": "/guides/security",
"guides.server.data": "/guides/server-data", "guides.server.data": "/guides/server-data",
"guides.testing": "/guides/testing", "guides.testing": "/guides/testing",
"guides.troubleshooting": "/guides/troubleshooting", "guides.troubleshooting": "/guides/troubleshooting",
"guides.upgrading": "/guides/upgrading", "guides.upgrading": "/guides/upgrading",
"guides.uploads": "/guides/uploads", "guides.uploads": "/guides/uploads",
"guides.workspaces.and.gateway": "/guides/workspaces-and-gateway", "guides.workspaces.and.gateway": "/guides/workspaces-and-gateway",
"language": "/language", language: "/language",
"license": "/license", license: "/license",
"packages": "/packages", packages: "/packages",
"packages.ai": "/packages/ai", "packages.ai": "/packages/ai",
"packages.auth": "/packages/auth", "packages.auth": "/packages/auth",
"packages.authz": "/packages/authz", "packages.authz": "/packages/authz",
"packages.benchmark": "/packages/benchmark", "packages.benchmark": "/packages/benchmark",
"packages.cache": "/packages/cache", "packages.cache": "/packages/cache",
"packages.captcha": "/packages/captcha", "packages.captcha": "/packages/captcha",
"packages.cli": "/packages/cli", "packages.cli": "/packages/cli",
"packages.compiler": "/packages/compiler", "packages.compiler": "/packages/compiler",
"packages.content": "/packages/content", "packages.content": "/packages/content",
"packages.core": "/packages/core", "packages.core": "/packages/core",
"packages.csr": "/packages/csr", "packages.csr": "/packages/csr",
"packages.db": "/packages/db", "packages.db": "/packages/db",
"packages.dev.server": "/packages/dev-server", "packages.dev.server": "/packages/dev-server",
"packages.dev.toolbar": "/packages/dev-toolbar", "packages.dev.toolbar": "/packages/dev-toolbar",
"packages.encryption": "/packages/encryption", "packages.encryption": "/packages/encryption",
"packages.graphql": "/packages/graphql", "packages.graphql": "/packages/graphql",
"packages.helpers": "/packages/helpers", "packages.helpers": "/packages/helpers",
"packages.i18n": "/packages/i18n", "packages.i18n": "/packages/i18n",
"packages.identity": "/packages/identity", "packages.identity": "/packages/identity",
"packages.image": "/packages/image", "packages.image": "/packages/image",
"packages.jwt": "/packages/jwt", "packages.jwt": "/packages/jwt",
"packages.language.server": "/packages/language-server", "packages.language.server": "/packages/language-server",
"packages.mcp": "/packages/mcp", "packages.mcp": "/packages/mcp",
"packages.mobile": "/packages/mobile", "packages.mobile": "/packages/mobile",
"packages.native": "/packages/native", "packages.native": "/packages/native",
"packages.oauth": "/packages/oauth", "packages.oauth": "/packages/oauth",
"packages.observability": "/packages/observability", "packages.observability": "/packages/observability",
"packages.playground": "/packages/playground", "packages.playground": "/packages/playground",
"packages.plugin": "/packages/plugin", "packages.plugin": "/packages/plugin",
"packages.pubsub": "/packages/pubsub", "packages.pubsub": "/packages/pubsub",
"packages.pwa": "/packages/pwa", "packages.pwa": "/packages/pwa",
"packages.queue": "/packages/queue", "packages.queue": "/packages/queue",
"packages.reactive": "/packages/reactive", "packages.reactive": "/packages/reactive",
"packages.realtime": "/packages/realtime", "packages.realtime": "/packages/realtime",
"packages.router": "/packages/router", "packages.router": "/packages/router",
"packages.security": "/packages/security", "packages.security": "/packages/security",
"packages.ssr": "/packages/ssr", "packages.ssr": "/packages/ssr",
"packages.store": "/packages/store", "packages.store": "/packages/store",
"packages.styles": "/packages/styles", "packages.styles": "/packages/styles",
"packages.syntax": "/packages/syntax", "packages.syntax": "/packages/syntax",
"packages.test": "/packages/test", "packages.test": "/packages/test",
"packages.tracking": "/packages/tracking", "packages.tracking": "/packages/tracking",
"packages.typecheck": "/packages/typecheck", "packages.typecheck": "/packages/typecheck",
"packages.ui": "/packages/ui", "packages.ui": "/packages/ui",
"packages.uploader": "/packages/uploader", "packages.uploader": "/packages/uploader",
"packages.validation": "/packages/validation", "packages.validation": "/packages/validation",
"releases.0.2.15": "/releases/0.2.15", "releases.0.2.15": "/releases/0.2.15",
"releases.0.2.17": "/releases/0.2.17", "releases.0.2.17": "/releases/0.2.17",
"releases.0.2.18": "/releases/0.2.18", "releases.0.2.18": "/releases/0.2.18",
"releases.0.2.19": "/releases/0.2.19", "releases.0.2.19": "/releases/0.2.19",
"releases.0.2.20": "/releases/0.2.20", "releases.0.2.20": "/releases/0.2.20",
"releases.0.2.21": "/releases/0.2.21", "releases.0.2.21": "/releases/0.2.21",
"releases.0.2.22": "/releases/0.2.22", "releases.0.2.22": "/releases/0.2.22",
"releases.0.2.23": "/releases/0.2.23", "releases.0.2.23": "/releases/0.2.23",
"releases.0.2.24": "/releases/0.2.24", "releases.0.2.24": "/releases/0.2.24",
"releases.0.2.25": "/releases/0.2.25", "releases.0.2.25": "/releases/0.2.25",
"releases.0.2.26": "/releases/0.2.26", "releases.0.2.26": "/releases/0.2.26",
"releases.0.2.27": "/releases/0.2.27", "releases.0.2.27": "/releases/0.2.27",
"releases.0.2.28": "/releases/0.2.28", "releases.0.2.28": "/releases/0.2.28",
"releases.0.2.29": "/releases/0.2.29", "releases.0.2.29": "/releases/0.2.29",
"releases.0.2.30": "/releases/0.2.30", "releases.0.2.30": "/releases/0.2.30",
"releases.0.2.31": "/releases/0.2.31", "releases.0.2.31": "/releases/0.2.31",
"releases.0.2.32": "/releases/0.2.32", "releases.0.2.32": "/releases/0.2.32",
"releases.0.2.33": "/releases/0.2.33", "releases.0.2.33": "/releases/0.2.33",
"releases.0.2.34": "/releases/0.2.34", "releases.0.2.34": "/releases/0.2.34",
"releases.0.2.35": "/releases/0.2.35", "releases.0.2.35": "/releases/0.2.35",
"releases.0.2.36": "/releases/0.2.36", "releases.0.2.36": "/releases/0.2.36",
"releases.0.2.37": "/releases/0.2.37", "releases.0.2.37": "/releases/0.2.37",
"releases.0.2.38": "/releases/0.2.38", "releases.0.2.38": "/releases/0.2.38",
"releases.0.2.39": "/releases/0.2.39", "releases.0.2.39": "/releases/0.2.39",
"releases.0.2.40": "/releases/0.2.40", "releases.0.2.40": "/releases/0.2.40",
"releases.0.2.41": "/releases/0.2.41", "releases.0.2.41": "/releases/0.2.41",
"releases.0.2.42": "/releases/0.2.42", "releases.0.2.42": "/releases/0.2.42",
"releases.0.2.43": "/releases/0.2.43", "releases.0.2.43": "/releases/0.2.43",
"releases.0.2.44": "/releases/0.2.44", "releases.0.2.44": "/releases/0.2.44",
"releases.0.2.45": "/releases/0.2.45", "releases.0.2.45": "/releases/0.2.45",
"releases.0.2.46": "/releases/0.2.46", "releases.0.2.46": "/releases/0.2.46",
"releases.0.2.47": "/releases/0.2.47", "releases.0.2.47": "/releases/0.2.47",
"releases.0.2.48": "/releases/0.2.48", "releases.0.2.48": "/releases/0.2.48",
"releases.0.2.49": "/releases/0.2.49", "releases.0.2.49": "/releases/0.2.49",
"releases.0.2.50": "/releases/0.2.50", "releases.0.2.50": "/releases/0.2.50",
"releases.0.2.51": "/releases/0.2.51", "releases.0.2.51": "/releases/0.2.51",
"releases.0.2.52": "/releases/0.2.52", "releases.0.2.52": "/releases/0.2.52",
"releases.0.2.53": "/releases/0.2.53", "releases.0.2.53": "/releases/0.2.53",
"releases.0.2.54": "/releases/0.2.54", "releases.0.2.54": "/releases/0.2.54",
"releases.0.2.55": "/releases/0.2.55", "releases.0.2.55": "/releases/0.2.55",
"releases.0.2.56": "/releases/0.2.56", "releases.0.2.56": "/releases/0.2.56",
"releases.0.2.57": "/releases/0.2.57", "releases.0.2.57": "/releases/0.2.57",
"releases.0.2.58": "/releases/0.2.58", "releases.0.2.58": "/releases/0.2.58",
"releases.0.2.59": "/releases/0.2.59", "releases.0.2.59": "/releases/0.2.59",
"releases.0.2.60": "/releases/0.2.60", "releases.0.2.60": "/releases/0.2.60",
"releases.0.2.61": "/releases/0.2.61", "releases.0.2.61": "/releases/0.2.61",
"releases.0.2.62": "/releases/0.2.62", "releases.0.2.62": "/releases/0.2.62",
"releases.0.2.63": "/releases/0.2.63", "releases.0.2.63": "/releases/0.2.63",
"releases.0.2.64": "/releases/0.2.64", "releases.0.2.64": "/releases/0.2.64",
"releases.0.2.65": "/releases/0.2.65", "releases.0.2.65": "/releases/0.2.65",
"releases.0.2.66": "/releases/0.2.66", "releases.0.2.66": "/releases/0.2.66",
"releases.0.2.67": "/releases/0.2.67", "releases.0.2.67": "/releases/0.2.67",
"releases.0.2.68": "/releases/0.2.68", "releases.0.2.68": "/releases/0.2.68",
"releases.0.2.69": "/releases/0.2.69", "releases.0.2.69": "/releases/0.2.69",
"releases.0.2.70": "/releases/0.2.70", "releases.0.2.70": "/releases/0.2.70",
"releases.0.2.71": "/releases/0.2.71", "releases.0.2.71": "/releases/0.2.71",
"releases.0.2.72": "/releases/0.2.72", "releases.0.2.72": "/releases/0.2.72",
"releases.0.2.73": "/releases/0.2.73", "releases.0.2.73": "/releases/0.2.73",
"releases.0.2.74": "/releases/0.2.74", "releases.0.2.74": "/releases/0.2.74",
"releases.0.2.75": "/releases/0.2.75", "releases.0.2.75": "/releases/0.2.75",
"releases.0.2.76": "/releases/0.2.76", "releases.0.2.76": "/releases/0.2.76",
"releases.0.2.77": "/releases/0.2.77", "releases.0.2.77": "/releases/0.2.77",
"releases.0.2.78": "/releases/0.2.78", "releases.0.2.78": "/releases/0.2.78",
"releases.0.2.79": "/releases/0.2.79", "releases.0.2.79": "/releases/0.2.79",
"releases.0.3.0": "/releases/0.3.0", "releases.0.3.0": "/releases/0.3.0",
"releases.0.3.1": "/releases/0.3.1", "releases.0.3.1": "/releases/0.3.1",
"releases.0.3.2": "/releases/0.3.2", "releases.0.3.2": "/releases/0.3.2",
"releases.0.3.3": "/releases/0.3.3", "releases.0.3.3": "/releases/0.3.3",
"releases.0.3.4": "/releases/0.3.4", "releases.0.3.4": "/releases/0.3.4",
"releases.0.3.5": "/releases/0.3.5", "releases.0.3.5": "/releases/0.3.5",
"releases.0.3.6": "/releases/0.3.6", "releases.0.3.6": "/releases/0.3.6",
"releases.0.4.0": "/releases/0.4.0", "releases.0.4.0": "/releases/0.4.0",
"releases.0.5.0": "/releases/0.5.0", "releases.0.5.0": "/releases/0.5.0",
"releases.0.5.1": "/releases/0.5.1", "releases.0.5.1": "/releases/0.5.1",
"releases.0.5.10": "/releases/0.5.10", "releases.0.5.10": "/releases/0.5.10",
"releases.0.5.11": "/releases/0.5.11", "releases.0.5.11": "/releases/0.5.11",
"releases.0.5.12": "/releases/0.5.12", "releases.0.5.12": "/releases/0.5.12",
"releases.0.5.13": "/releases/0.5.13", "releases.0.5.13": "/releases/0.5.13",
"releases.0.6.0": "/releases/0.6.0", "releases.0.6.0": "/releases/0.6.0",
"releases.0.7.0": "/releases/0.7.0", "releases.0.7.0": "/releases/0.7.0",
"releases.0.8.0": "/releases/0.8.0", "releases.0.8.0": "/releases/0.8.0",
"roadmap": "/roadmap", roadmap: "/roadmap",
"search": "/search", search: "/search",
"security": "/security", security: "/security",
"showcase": "/showcase", showcase: "/showcase",
"support": "/support", support: "/support",
"tutorial": "/tutorial" tutorial: "/tutorial",
} as Record<RouteName, RoutePath>; } as Record<RouteName, RoutePath>;
const output = buildHref(paths[name], (args[0] ?? {}) as Record<string, RouteValue>); const output = buildHref(paths[name], (args[0] ?? {}) as Record<string, RouteValue>);
const query = args[1]; const query = args[1];
if (!query) return output; if (!query) return output;
+178 -20
View File
@@ -11,32 +11,190 @@ declare namespace WRNexusGenerated {
: T extends (db: any, ...rest: any[]) => infer R : T extends (db: any, ...rest: any[]) => infer R
? { args: Record<string, never>; result: Awaited<R> } ? { args: Record<string, never>; result: Awaited<R> }
: never; : never;
type RealtimeMessage<T> = T extends import("@wrnexus/core").RoomDefinition<any, infer M> ? M : unknown; type RealtimeMessage<T> = T extends import("@wrnexus/core").RoomDefinition<any, infer M>
? M
: unknown;
type QueuePayload<T> = T extends import("@wrnexus/queue").JobDefinition<infer I> ? I : unknown; type QueuePayload<T> = T extends import("@wrnexus/queue").JobDefinition<infer I> ? I : unknown;
type RouteName = "404" | "access" | "architecture" | "benchmarks" | "changelog" | "examples" | "getting.started" | "guides.api.routes" | "guides.authentication" | "guides.authorization" | "guides.configuration.and.profiles" | "guides.database" | "guides.deployment" | "guides.forms.and.validation" | "guides.i18n.and.themes" | "guides.middleware" | "guides.mobile" | "guides.observability" | "guides.pages.and.components" | "guides.project.structure" | "guides.pubsub" | "guides.queues" | "guides.realtime" | "guides.routing" | "guides.security" | "guides.server.data" | "guides.testing" | "guides.troubleshooting" | "guides.upgrading" | "guides.uploads" | "guides.workspaces.and.gateway" | "index" | "language" | "license" | "packages" | "packages.ai" | "packages.auth" | "packages.authz" | "packages.benchmark" | "packages.cache" | "packages.captcha" | "packages.cli" | "packages.compiler" | "packages.content" | "packages.core" | "packages.csr" | "packages.db" | "packages.dev.server" | "packages.dev.toolbar" | "packages.encryption" | "packages.graphql" | "packages.helpers" | "packages.i18n" | "packages.identity" | "packages.image" | "packages.jwt" | "packages.language.server" | "packages.mcp" | "packages.mobile" | "packages.native" | "packages.oauth" | "packages.observability" | "packages.playground" | "packages.plugin" | "packages.pubsub" | "packages.pwa" | "packages.queue" | "packages.reactive" | "packages.realtime" | "packages.router" | "packages.security" | "packages.ssr" | "packages.store" | "packages.styles" | "packages.syntax" | "packages.test" | "packages.tracking" | "packages.typecheck" | "packages.ui" | "packages.uploader" | "packages.validation" | "releases.0.2.15" | "releases.0.2.17" | "releases.0.2.18" | "releases.0.2.19" | "releases.0.2.20" | "releases.0.2.21" | "releases.0.2.22" | "releases.0.2.23" | "releases.0.2.24" | "releases.0.2.25" | "releases.0.2.26" | "releases.0.2.27" | "releases.0.2.28" | "releases.0.2.29" | "releases.0.2.30" | "releases.0.2.31" | "releases.0.2.32" | "releases.0.2.33" | "releases.0.2.34" | "releases.0.2.35" | "releases.0.2.36" | "releases.0.2.37" | "releases.0.2.38" | "releases.0.2.39" | "releases.0.2.40" | "releases.0.2.41" | "releases.0.2.42" | "releases.0.2.43" | "releases.0.2.44" | "releases.0.2.45" | "releases.0.2.46" | "releases.0.2.47" | "releases.0.2.48" | "releases.0.2.49" | "releases.0.2.50" | "releases.0.2.51" | "releases.0.2.52" | "releases.0.2.53" | "releases.0.2.54" | "releases.0.2.55" | "releases.0.2.56" | "releases.0.2.57" | "releases.0.2.58" | "releases.0.2.59" | "releases.0.2.60" | "releases.0.2.61" | "releases.0.2.62" | "releases.0.2.63" | "releases.0.2.64" | "releases.0.2.65" | "releases.0.2.66" | "releases.0.2.67" | "releases.0.2.68" | "releases.0.2.69" | "releases.0.2.70" | "releases.0.2.71" | "releases.0.2.72" | "releases.0.2.73" | "releases.0.2.74" | "releases.0.2.75" | "releases.0.2.76" | "releases.0.2.77" | "releases.0.2.78" | "releases.0.2.79" | "releases.0.3.0" | "releases.0.3.1" | "releases.0.3.2" | "releases.0.3.3" | "releases.0.3.4" | "releases.0.3.5" | "releases.0.3.6" | "releases.0.4.0" | "releases.0.5.0" | "releases.0.5.1" | "releases.0.5.10" | "releases.0.5.11" | "releases.0.5.12" | "releases.0.5.13" | "releases.0.6.0" | "releases.0.7.0" | "releases.0.8.0" | "roadmap" | "search" | "security" | "showcase" | "support" | "tutorial"; type RouteName =
| "404"
| "access"
| "architecture"
| "benchmarks"
| "changelog"
| "examples"
| "getting.started"
| "guides.api.routes"
| "guides.authentication"
| "guides.authorization"
| "guides.configuration.and.profiles"
| "guides.database"
| "guides.deployment"
| "guides.forms.and.validation"
| "guides.i18n.and.themes"
| "guides.middleware"
| "guides.mobile"
| "guides.observability"
| "guides.pages.and.components"
| "guides.project.structure"
| "guides.pubsub"
| "guides.queues"
| "guides.realtime"
| "guides.routing"
| "guides.security"
| "guides.server.data"
| "guides.testing"
| "guides.troubleshooting"
| "guides.upgrading"
| "guides.uploads"
| "guides.workspaces.and.gateway"
| "index"
| "language"
| "license"
| "packages"
| "packages.ai"
| "packages.auth"
| "packages.authz"
| "packages.benchmark"
| "packages.cache"
| "packages.captcha"
| "packages.cli"
| "packages.compiler"
| "packages.content"
| "packages.core"
| "packages.csr"
| "packages.db"
| "packages.dev.server"
| "packages.dev.toolbar"
| "packages.encryption"
| "packages.graphql"
| "packages.helpers"
| "packages.i18n"
| "packages.identity"
| "packages.image"
| "packages.jwt"
| "packages.language.server"
| "packages.mcp"
| "packages.mobile"
| "packages.native"
| "packages.oauth"
| "packages.observability"
| "packages.playground"
| "packages.plugin"
| "packages.pubsub"
| "packages.pwa"
| "packages.queue"
| "packages.reactive"
| "packages.realtime"
| "packages.router"
| "packages.security"
| "packages.ssr"
| "packages.store"
| "packages.styles"
| "packages.syntax"
| "packages.test"
| "packages.tracking"
| "packages.typecheck"
| "packages.ui"
| "packages.uploader"
| "packages.validation"
| "releases.0.2.15"
| "releases.0.2.17"
| "releases.0.2.18"
| "releases.0.2.19"
| "releases.0.2.20"
| "releases.0.2.21"
| "releases.0.2.22"
| "releases.0.2.23"
| "releases.0.2.24"
| "releases.0.2.25"
| "releases.0.2.26"
| "releases.0.2.27"
| "releases.0.2.28"
| "releases.0.2.29"
| "releases.0.2.30"
| "releases.0.2.31"
| "releases.0.2.32"
| "releases.0.2.33"
| "releases.0.2.34"
| "releases.0.2.35"
| "releases.0.2.36"
| "releases.0.2.37"
| "releases.0.2.38"
| "releases.0.2.39"
| "releases.0.2.40"
| "releases.0.2.41"
| "releases.0.2.42"
| "releases.0.2.43"
| "releases.0.2.44"
| "releases.0.2.45"
| "releases.0.2.46"
| "releases.0.2.47"
| "releases.0.2.48"
| "releases.0.2.49"
| "releases.0.2.50"
| "releases.0.2.51"
| "releases.0.2.52"
| "releases.0.2.53"
| "releases.0.2.54"
| "releases.0.2.55"
| "releases.0.2.56"
| "releases.0.2.57"
| "releases.0.2.58"
| "releases.0.2.59"
| "releases.0.2.60"
| "releases.0.2.61"
| "releases.0.2.62"
| "releases.0.2.63"
| "releases.0.2.64"
| "releases.0.2.65"
| "releases.0.2.66"
| "releases.0.2.67"
| "releases.0.2.68"
| "releases.0.2.69"
| "releases.0.2.70"
| "releases.0.2.71"
| "releases.0.2.72"
| "releases.0.2.73"
| "releases.0.2.74"
| "releases.0.2.75"
| "releases.0.2.76"
| "releases.0.2.77"
| "releases.0.2.78"
| "releases.0.2.79"
| "releases.0.3.0"
| "releases.0.3.1"
| "releases.0.3.2"
| "releases.0.3.3"
| "releases.0.3.4"
| "releases.0.3.5"
| "releases.0.3.6"
| "releases.0.4.0"
| "releases.0.5.0"
| "releases.0.5.1"
| "releases.0.5.10"
| "releases.0.5.11"
| "releases.0.5.12"
| "releases.0.5.13"
| "releases.0.6.0"
| "releases.0.7.0"
| "releases.0.8.0"
| "roadmap"
| "search"
| "security"
| "showcase"
| "support"
| "tutorial";
type ApiRoute = never; type ApiRoute = never;
type RealtimeRoute = never; type RealtimeRoute = never;
type EnvironmentKey = never; type EnvironmentKey = never;
type TranslationKey = never; type TranslationKey = never;
type QueueName = never; type QueueName = never;
type CacheKey = never; type CacheKey = never;
interface Components { interface Components {}
interface ApiContracts {}
} interface MiddlewareContexts {}
interface ApiContracts { interface DatabaseQueries {}
interface RealtimeMessages {}
} interface QueuePayloads {}
interface MiddlewareContexts {
}
interface DatabaseQueries {
}
interface RealtimeMessages {
}
interface QueuePayloads {
}
type ApplicationConfig = (typeof import("../../wrnexus.config.ts"))["default"]; type ApplicationConfig = (typeof import("../../wrnexus.config.ts"))["default"];
} }
-1
View File
@@ -1,2 +1 @@
// AUTO-GENERATED plugin type aggregation - do not edit. // AUTO-GENERATED plugin type aggregation - do not edit.
+13 -2
View File
@@ -13,7 +13,7 @@
"@wrnexus/benchmark": "^0.8.0", "@wrnexus/benchmark": "^0.8.0",
"@wrnexus/cache": "^0.8.0", "@wrnexus/cache": "^0.8.0",
"@wrnexus/captcha": "^0.8.0", "@wrnexus/captcha": "^0.8.0",
"@wrnexus/compiler": "^0.8.0", "@wrnexus/compiler": "file:vendor/compiler",
"@wrnexus/content": "^0.8.0", "@wrnexus/content": "^0.8.0",
"@wrnexus/core": "^0.8.0", "@wrnexus/core": "^0.8.0",
"@wrnexus/csr": "^0.8.0", "@wrnexus/csr": "^0.8.0",
@@ -67,6 +67,9 @@
}, },
}, },
}, },
"overrides": {
"@wrnexus/compiler": "file:vendor/compiler",
},
"packages": { "packages": {
"@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="],
@@ -246,7 +249,7 @@
"@wrnexus/cli": ["@wrnexus/cli@0.8.0", "", { "dependencies": { "@wrnexus/compiler": "^0.8.0", "@wrnexus/core": "^0.8.0", "@wrnexus/csr": "^0.8.0", "@wrnexus/db": "^0.8.0", "@wrnexus/dev-server": "^0.8.0", "@wrnexus/i18n": "^0.8.0", "@wrnexus/mcp": "^0.8.0", "@wrnexus/playground": "^0.8.0", "@wrnexus/plugin": "^0.8.0", "@wrnexus/router": "^0.8.0", "@wrnexus/security": "^0.8.0", "@wrnexus/styles": "^0.8.0", "@wrnexus/syntax": "^0.8.0", "@wrnexus/typecheck": "^0.8.0", "@wrnexus/ui": "^0.8.0", "@wrnexus/validation": "^0.8.0", "selfsigned": "^5.5.0" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-6BOf//IY17Gz/C2kzGVHTn0bF5zMAtJWxofVAW96L/pwJQWHzxioqOpNWLVk1bHh6m2Jh59NOzwWtuR3xBpGTQ=="], "@wrnexus/cli": ["@wrnexus/cli@0.8.0", "", { "dependencies": { "@wrnexus/compiler": "^0.8.0", "@wrnexus/core": "^0.8.0", "@wrnexus/csr": "^0.8.0", "@wrnexus/db": "^0.8.0", "@wrnexus/dev-server": "^0.8.0", "@wrnexus/i18n": "^0.8.0", "@wrnexus/mcp": "^0.8.0", "@wrnexus/playground": "^0.8.0", "@wrnexus/plugin": "^0.8.0", "@wrnexus/router": "^0.8.0", "@wrnexus/security": "^0.8.0", "@wrnexus/styles": "^0.8.0", "@wrnexus/syntax": "^0.8.0", "@wrnexus/typecheck": "^0.8.0", "@wrnexus/ui": "^0.8.0", "@wrnexus/validation": "^0.8.0", "selfsigned": "^5.5.0" }, "bin": { "wrnexus": "dist/index.js" } }, "sha512-6BOf//IY17Gz/C2kzGVHTn0bF5zMAtJWxofVAW96L/pwJQWHzxioqOpNWLVk1bHh6m2Jh59NOzwWtuR3xBpGTQ=="],
"@wrnexus/compiler": ["@wrnexus/compiler@0.8.0", "", { "dependencies": { "@wrnexus/csr": "^0.8.0", "@wrnexus/store": "^0.8.0", "@wrnexus/syntax": "^0.8.0", "@wrnexus/validation": "^0.8.0" } }, "sha512-xRIUer9UrzfXxebLIvEkeIHiZ1VhRhb8/ium/m0ehqyLllLf1oOH8mFT3g6tdnwZs8B4UJXlwdrIfbBs/xWrvg=="], "@wrnexus/compiler": ["@wrnexus/compiler@file:vendor/compiler", { "dependencies": { "@wrnexus/csr": "^0.8.0", "@wrnexus/store": "^0.8.0", "@wrnexus/syntax": "^0.8.0", "@wrnexus/validation": "^0.8.0" } }],
"@wrnexus/content": ["@wrnexus/content@0.8.0", "", {}, "sha512-vE0LR53Pgu7ZVAxJF+QuiyGnlmL/1R9ZJ1fApRHTB6szCSFk1gaNvENiXH0H7LOYWEVvUXI9ITiC1cONfyHNRA=="], "@wrnexus/content": ["@wrnexus/content@0.8.0", "", {}, "sha512-vE0LR53Pgu7ZVAxJF+QuiyGnlmL/1R9ZJ1fApRHTB6szCSFk1gaNvENiXH0H7LOYWEVvUXI9ITiC1cONfyHNRA=="],
@@ -618,6 +621,14 @@
"@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="], "@typescript-eslint/visitor-keys/eslint-visitor-keys": ["eslint-visitor-keys@5.0.1", "", {}, "sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA=="],
"@wrnexus/cli/@wrnexus/compiler": ["@wrnexus/compiler@file:vendor/compiler", {}],
"@wrnexus/dev-server/@wrnexus/compiler": ["@wrnexus/compiler@file:vendor/compiler", {}],
"@wrnexus/playground/@wrnexus/compiler": ["@wrnexus/compiler@file:vendor/compiler", {}],
"@wrnexus/router/@wrnexus/compiler": ["@wrnexus/compiler@file:vendor/compiler", {}],
"csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="], "csso/css-tree": ["css-tree@2.2.1", "", { "dependencies": { "mdn-data": "2.0.28", "source-map-js": "^1.0.1" } }, "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA=="],
"lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], "lightningcss/detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="],
+3
View File
@@ -9,7 +9,10 @@ export default tseslint.config(
{ {
ignores: [ ignores: [
"node_modules/**", "node_modules/**",
"vendor/**",
"dist/**", "dist/**",
"app/types/wrnexus.generated.d.ts",
"app/types/wrnexus.plugins.generated.d.ts",
".wrnexus/**", ".wrnexus/**",
"**/.wrnexus/**", "**/.wrnexus/**",
"mobile/android/**", "mobile/android/**",
+17 -14
View File
@@ -16,7 +16,7 @@
"@wrnexus/benchmark": "^0.8.0", "@wrnexus/benchmark": "^0.8.0",
"@wrnexus/cache": "^0.8.0", "@wrnexus/cache": "^0.8.0",
"@wrnexus/captcha": "^0.8.0", "@wrnexus/captcha": "^0.8.0",
"@wrnexus/compiler": "^0.8.0", "@wrnexus/compiler": "file:vendor/compiler",
"@wrnexus/content": "^0.8.0", "@wrnexus/content": "^0.8.0",
"@wrnexus/core": "^0.8.0", "@wrnexus/core": "^0.8.0",
"@wrnexus/csr": "^0.8.0", "@wrnexus/csr": "^0.8.0",
@@ -1611,19 +1611,8 @@
} }
}, },
"node_modules/@wrnexus/compiler": { "node_modules/@wrnexus/compiler": {
"version": "0.8.0", "resolved": "vendor/compiler",
"resolved": "https://registry.npmjs.org/@wrnexus/compiler/-/compiler-0.8.0.tgz", "link": true
"integrity": "sha512-xRIUer9UrzfXxebLIvEkeIHiZ1VhRhb8/ium/m0ehqyLllLf1oOH8mFT3g6tdnwZs8B4UJXlwdrIfbBs/xWrvg==",
"license": "MIT",
"dependencies": {
"@wrnexus/csr": "^0.8.0",
"@wrnexus/store": "^0.8.0",
"@wrnexus/syntax": "^0.8.0",
"@wrnexus/validation": "^0.8.0"
},
"engines": {
"bun": ">=1.3.0"
}
}, },
"node_modules/@wrnexus/content": { "node_modules/@wrnexus/content": {
"version": "0.8.0", "version": "0.8.0",
@@ -3728,6 +3717,20 @@
"funding": { "funding": {
"url": "https://github.com/sponsors/sindresorhus" "url": "https://github.com/sponsors/sindresorhus"
} }
},
"vendor/compiler": {
"name": "@wrnexus/compiler",
"version": "0.8.0",
"license": "MIT",
"dependencies": {
"@wrnexus/csr": "^0.8.0",
"@wrnexus/store": "^0.8.0",
"@wrnexus/syntax": "^0.8.0",
"@wrnexus/validation": "^0.8.0"
},
"engines": {
"bun": ">=1.3.0"
}
} }
} }
} }
+4 -1
View File
@@ -29,7 +29,7 @@
"@iconify/tailwind4": "^1.2.3", "@iconify/tailwind4": "^1.2.3",
"@wrnexus/ai": "^0.8.0", "@wrnexus/ai": "^0.8.0",
"@wrnexus/authz": "^0.8.0", "@wrnexus/authz": "^0.8.0",
"@wrnexus/compiler": "^0.8.0", "@wrnexus/compiler": "file:vendor/compiler",
"@wrnexus/core": "^0.8.0", "@wrnexus/core": "^0.8.0",
"@wrnexus/csr": "^0.8.0", "@wrnexus/csr": "^0.8.0",
"@wrnexus/db": "^0.8.0", "@wrnexus/db": "^0.8.0",
@@ -87,5 +87,8 @@
}, },
"wrnexus": { "wrnexus": {
"version": "0.8.0" "version": "0.8.0"
},
"overrides": {
"@wrnexus/compiler": "file:vendor/compiler"
} }
} }
+216
View File
@@ -0,0 +1,216 @@
# @wrnexus/compiler
## Partial-static rendering
Pages can select `render = "partial-static"` and divide their view with `<Static>` and
`<Dynamic>` boundaries. The compiler emits a build-only shell renderer that never evaluates
dynamic-boundary children. `wrnexus build` expands static component mounts into
`dist/partial-shells.json`, records byte/region evidence in `build-report.json`, and embeds
the shell in the production route manifest. At request time the production runtime retains
request-aware layouts, locale/theme metadata and security nonces while streaming dynamic
regions into stable placeholders.
> Compiler for the `.wrn` language — tokenizes, parses, and lowers `.wrn` page and component files to TypeScript.
Part of the **WrNexus** framework — an SSR-first, Bun-native full-stack web framework.
Production adapters use `analyzeRuntimeImports` before bundling. Edge, worker,
service-worker, and browser targets reject Node filesystem, TCP, and process
modules with `WRN-RUNTIME-CAPABILITY`. Package manifests can declare supported
`wrnexus.runtimes` and required `wrnexus.requires` capabilities; discovery fails
when the selected deployment cannot satisfy them.
## Server actions
```wrn
action createUser using CreateUserSchema {
const user = await users.create(input)
invalidate("users")
return user
}
view {
<form @submit="createUser">...</form>
}
```
The compiler produces a schema-aware server registry, a fully inferred action
client, and progressively enhanced form metadata. The shared runtime performs
validation, authentication/permission checks, CSRF verification, serialization,
invalidation reporting, and browser lifecycle events.
## Overview
`@wrnexus/compiler` turns `.wrn` source into TypeScript that targets the framework's runtime primitives. A `.wrn` file declares either a `page` (a route) or a `component` (a reusable, prop-driven fragment) with blocks for `state`, `view` (plain HTML), `seo`, `style`, `functions`, `api`, `ssr`/`client` data bindings, and `realtime` websocket handlers. The pipeline is `source → Lexer → parse() → PageAst → generate() → TypeScript`. It is a build/server-side library — the WrNexus dev loader calls it to compile `.wrn` files on the fly, surfacing `ParseError` as a readable error page.
Static ES module imports may appear before the root declaration. Imported values are
available to server-rendered expressions, including component props:
```wrn
import { appUrl } from "@wrnexus/helpers";
layout PublicLayout {
view {
<PublicHeader signInHref="{appUrl('sso', '/sign-in')}" />
}
}
```
## Installation
```bash
bun add @wrnexus/compiler
```
> Private package — the machine must be authenticated to the `wrnexus` npm org
> (a read token in `~/.npmrc`). Requires **Bun** (Node is not supported).
## API
All exports come from the package root (`@wrnexus/compiler`).
### `compileWireFile(source: string): string`
Compile `.wrn` source to a TypeScript module string. Throws `ParseError` on invalid input. The output is prefixed with a `// compiled from .wrn` comment.
### `compile(source: string): CompileResult`
Richer entry point that returns the generated code, the AST, and any diagnostics.
```ts
interface CompileResult {
code: string;
ast: PageAst;
diagnostics: string[];
}
```
On a `ParseError` it pushes the message into `diagnostics` and re-throws.
### `parse(source: string): PageAst`
Run the lexer + recursive-descent parser and return the AST. Throws `ParseError` (lexer `LexError`s are caught and rethrown as `ParseError`).
### `generate(ast: PageAst): string`
Lower a `PageAst` to TypeScript. `page` ASTs become a default-export page component (plus `meta`, optional `layout`, `__wrnexusApi`/method handlers, `websocket`, and SSR/CSR data bindings); `component` ASTs become a module exporting `render(props)` and `__wrnexusComponent`.
### `Lexer`
On-demand lexer for `.wrn`. Yields structural tokens and exposes raw-span readers for the parser.
```ts
class Lexer {
pos: number;
constructor(src: string);
next(): Token; // consume next structural token
peek(): Token; // look ahead without consuming
readPath(): string; // route path, e.g. /users/[id]
readToLineEnd(): string; // rest of line (state/prop initializers)
readBalancedBraces(): string; // inner text of a { ... } block, string-aware
}
```
`Token` is `{ type: TokenType; value: string; pos: number }`, where `TokenType` is one of `ident`, `string`, `lbrace`, `rbrace`, `lparen`, `rparen`, `at`, `eq`, `comma`, `eof`.
### Errors
| Class | Thrown by | Meaning |
| ------------ | ------------------------------------------------- | --------------------------------------------------------------- |
| `ParseError` | `parse`, `compile`, `compileWireFile`, `generate` | Invalid `.wrn` grammar or (rewrapped) lex failure. |
| `LexError` | `Lexer` | Unexpected character / unterminated string / unbalanced braces. |
### AST types
Exported type-only symbols describing the parsed tree:
| Type | Description |
| -------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `PageAst` | Root node including top-level `imports`, `kind`, `name`, `types`, typed `props`, typed `states`, `view`, styles, functions, data APIs, lifecycle, and routes. |
| `ViewNode` | `{ type: "text"; value }` or `{ type: "element"; tag; attrs; children }`. |
| `Attr` | `{ name; value; event; boolean? }``event` marks `@event` bindings. |
| `StateDecl` | `{ name; valueType?; expr }` — a typed `state x: Type = <expr>` declaration. |
| `PropDecl` | `{ name; valueType?; required; default }` — a typed prop declaration. |
| `SeoBlock` | `Record<string, string>` from the `seo { ... }` block. |
| `ApiBlock` | `{ method; path; body }` — a top-level `api METHOD /path { ... }`. |
| `DataApiBlock` | `{ mode; name; method; path; body }` — an `api` inside an `ssr`/`client` block. |
| `DataMode` | `"ssr" \| "client"`. |
| `ModeFunctionsBlock` | `{ mode; body }` — a `functions { ... }` inside an `ssr`/`client` block. |
| `RealtimeBlock` | `{ name; handlers }` — a `realtime <name> { on evt(args) { ... } }` block. |
## Usage
Compile a page:
```ts
import { compileWireFile } from "@wrnexus/compiler";
const ts = compileWireFile(`
page Home {
state count = 0
seo { title = "Home" description = "Welcome" }
view {
<button @click="count++">Clicked {count} times</button>
}
}
`);
// ts is a TypeScript module: exports `meta`, and a default page component
// returning an HTML string, wrapped in a data-scope for the reactive runtime.
```
Inspect the AST and diagnostics:
```ts
import { compile, ParseError } from "@wrnexus/compiler";
try {
const { code, ast, diagnostics } = compile(source);
console.log(ast.kind, ast.name, ast.states.length);
} catch (err) {
if (err instanceof ParseError) console.error(err.message);
}
```
Drive the parse/codegen stages directly:
```ts
import { parse, generate } from "@wrnexus/compiler";
const ast = parse(componentSource); // ast.kind === "component"
const module = generate(ast); // exports render(props) + __wrnexusComponent
```
Use the lexer standalone:
```ts
import { Lexer } from "@wrnexus/compiler";
const lx = new Lexer("page Home {");
lx.next(); // { type: "ident", value: "page", pos: 0 }
lx.next(); // { type: "ident", value: "Home", pos: 5 }
lx.next(); // { type: "lbrace", value: "{", pos: 10 }
```
## The `.wrn` language (as parsed)
A file opens with `page <Name>` or `component <Name>` followed by a `{ ... }` body containing zero or more members:
- `layout = "<name>"` — selects `app/layouts/<name>.wrn` (pages only).
- `types { <TypeScript declarations> }` — reusable interfaces and aliases for the current file.
- `props { name: Type = <default> ... }` — typed component props. Omit `= <default>` to make a prop required. Legacy inferred props remain supported.
- `@event name = function` inside `props` — declares a public component event. Emit it from component behavior with `name(detail)` or `$emit("name", detail)`, and consume it with `<Component @name="handler(event)" />`.
- `state <ident>: Type = <expr>` — typed reactive state seeded from a raw JS expression, including native array and object literals. The annotation is optional for backward compatibility.
- `view { <html> }` — plain HTML with `{expr}` interpolation in text and attributes, JSX-style component props such as `items={items}`, `items={[...]}`, and `options={{...}}`, hyphenated attributes, boolean attributes, `@event="..."` client bindings, and `<!-- comments -->`. Structured component props are serialized safely for SSR; expressions that reference `state` retain their initial value and update reactively in the browser.
- `seo { key = "value" ... }` — metadata merged into the generated `meta`.
- `style { <raw css> }` — inlined page/component stylesheet (repeatable).
- `functions { <TypeScript> }` — helpers with typed parameters and return values. Types remain in server output and are safely erased from browser behavior code.
- `api <METHOD> <path> { <raw js> }` — route handler, lowered to a `METHOD` export (repeatable).
- `ssr { ... }` / `client { ... }` — data blocks holding `api <name> <METHOD> <path> { ... }` bindings and their own `functions { ... }`.
- `realtime <name> { on <evt>(<args>) { <raw js> } ... }` — websocket handlers, lowered to a `websocket` export.
`view` markup is parsed by a lenient dedicated HTML parser (`parseHtmlView`); HTML void elements (`<br>`, `<img>`, …) take no closing tag. Line comments (`//`) are skipped by the lexer.
## Requirements / Notes
- Pure TypeScript with no runtime dependencies; runs under **Bun** as part of the WrNexus toolchain (Node is not supported).
- Generated modules target WrNexus runtime primitives (`data-scope`, `data-text`, `data-on-*`, `data-for`, `data-component`, `__wrnexus*`/`__wire*` helpers) — consume the output within a WrNexus app, e.g. via `@wrnexus/core`'s dev loader.
+49
View File
@@ -0,0 +1,49 @@
{
"name": "@wrnexus/compiler",
"version": "0.8.0",
"type": "module",
"description": "@wrnexus/compiler — part of the WrNexus framework.",
"license": "MIT",
"repository": {
"type": "git",
"url": "https://git.workroot.in/WorkRoot/WRNexusJS.git",
"directory": "packages/compiler"
},
"homepage": "https://wrnexusjs.dev/packages/compiler",
"bugs": {
"url": "https://git.workroot.in/WorkRoot/WRNexusJS/issues"
},
"keywords": [
"wrnexus",
"bun",
"typescript",
"compiler"
],
"sideEffects": false,
"main": "./dist/index.js",
"module": "./dist/index.js",
"types": "./dist/index.d.ts",
"engines": {
"bun": ">=1.3.0"
},
"publishConfig": {
"registry": "https://registry.npmjs.org/",
"access": "restricted"
},
"exports": {
".": {
"types": "./dist/index.d.ts",
"import": "./dist/index.js"
}
},
"dependencies": {
"@wrnexus/csr": "^0.8.0",
"@wrnexus/syntax": "^0.8.0",
"@wrnexus/store": "^0.8.0",
"@wrnexus/validation": "^0.8.0"
},
"files": [
"dist",
"README.md"
]
}