fuzor 0.0.1 → 0.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +112 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +97 -0
- package/dist/cli.js.map +1 -0
- package/dist/compiler/index.d.ts +28 -0
- package/dist/compiler/index.d.ts.map +1 -0
- package/dist/compiler/index.js +184 -0
- package/dist/compiler/index.js.map +1 -0
- package/dist/compiler/islands.d.ts +17 -0
- package/dist/compiler/islands.d.ts.map +1 -0
- package/dist/compiler/islands.js +78 -0
- package/dist/compiler/islands.js.map +1 -0
- package/dist/create.d.ts +21 -0
- package/dist/create.d.ts.map +1 -0
- package/dist/create.js +111 -0
- package/dist/create.js.map +1 -0
- package/dist/index.d.ts +8 -8
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6 -0
- package/dist/index.js.map +1 -0
- package/dist/islands/react.d.ts +8 -0
- package/dist/islands/react.d.ts.map +1 -0
- package/dist/islands/react.js +19 -0
- package/dist/islands/react.js.map +1 -0
- package/dist/islands/solid.d.ts +8 -0
- package/dist/islands/solid.d.ts.map +1 -0
- package/dist/islands/solid.js +15 -0
- package/dist/islands/solid.js.map +1 -0
- package/dist/islands/vue.d.ts +5 -0
- package/dist/islands/vue.d.ts.map +1 -0
- package/dist/islands/vue.js +13 -0
- package/dist/islands/vue.js.map +1 -0
- package/dist/runtime/atom.d.ts +10 -0
- package/dist/runtime/atom.d.ts.map +1 -0
- package/dist/runtime/atom.js +38 -0
- package/dist/runtime/atom.js.map +1 -0
- package/dist/runtime/index.d.ts +31 -0
- package/dist/runtime/index.d.ts.map +1 -0
- package/dist/runtime/index.js +121 -0
- package/dist/runtime/index.js.map +1 -0
- package/dist/runtime/islands.d.ts +6 -0
- package/dist/runtime/islands.d.ts.map +1 -0
- package/dist/runtime/islands.js +43 -0
- package/dist/runtime/islands.js.map +1 -0
- package/dist/ssr/node.d.ts +7 -0
- package/dist/ssr/node.d.ts.map +1 -0
- package/dist/ssr/node.js +46 -0
- package/dist/ssr/node.js.map +1 -0
- package/dist/ssr.d.ts +10 -0
- package/dist/ssr.d.ts.map +1 -0
- package/dist/ssr.js +19 -0
- package/dist/ssr.js.map +1 -0
- package/dist/vite.d.ts +8 -0
- package/dist/vite.d.ts.map +1 -0
- package/dist/vite.js +310 -0
- package/dist/vite.js.map +1 -0
- package/package.json +71 -56
- package/templates/basic/README.md +16 -0
- package/templates/basic/_gitignore +3 -0
- package/templates/basic/components/app-badge.html +1 -0
- package/templates/basic/index.html +12 -0
- package/templates/basic/islands/counter.ts +13 -0
- package/templates/basic/package.json +20 -0
- package/templates/basic/pages/about/index.html +5 -0
- package/templates/basic/pages/docs/index.md +9 -0
- package/templates/basic/pages/index.html +9 -0
- package/templates/basic/pages/layout.html +8 -0
- package/templates/basic/pnpm-workspace.yaml +5 -0
- package/templates/basic/server.mjs +10 -0
- package/templates/basic/style.css +1 -0
- package/templates/basic/tsconfig.json +13 -0
- package/templates/basic/vite.config.ts +4 -0
- package/bin/index.js +0 -13
- package/dist/core/init.d.ts +0 -7
- package/dist/core/router.d.ts +0 -4
- package/dist/core/vite-config.d.ts +0 -5
- package/dist/init.cjs +0 -237
- package/dist/init.js +0 -468
- package/dist/lib.cjs +0 -222
- package/dist/lib.js +0 -19247
- package/dist/render/lit.d.ts +0 -1
- package/dist/render/preact.d.ts +0 -1
- package/dist/render/react.d.ts +0 -7
- package/dist/render/solid.d.ts +0 -1
- package/dist/render/svelte.d.ts +0 -6
- package/dist/render/vue.d.ts +0 -1
- package/dist/utils/create-file-if-not-exists.d.ts +0 -1
- package/dist/utils/create-folder-if-not-exist.d.ts +0 -2
- package/dist/utils/default-theme-files.d.ts +0 -7
- package/dist/utils/file-path-helpers.d.ts +0 -3
- package/dist/utils/is-valid-wordpress-slug.d.ts +0 -17
- package/dist/utils/read-write-file.d.ts +0 -1
- package/dist/utils/remove-file-exists.d.ts +0 -2
- package/dist/utils/remove-trailing-slash-url.d.ts +0 -1
- package/dist/utils/router-helpers.d.ts +0 -19
- package/dist/utils/zip-wp-theme.d.ts +0 -2
- package/types/index.d.ts +0 -6
package/dist/ssr.d.ts
ADDED
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
export type SsrManifest = {
|
|
3
|
+
/** Complete HTML documents, assembled by the compiler rather than per request. */
|
|
4
|
+
readonly documents: Readonly<Record<string, string>>;
|
|
5
|
+
readonly notFoundDocument: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function renderSsrEffect(manifest: SsrManifest, request: Request): Effect.Effect<Response, never, never>;
|
|
8
|
+
/** A platform-neutral Fetch handler; adapters only serve assets and forward document requests. */
|
|
9
|
+
export declare function createSsrHandler(manifest: SsrManifest): (request: Request) => Promise<Response>;
|
|
10
|
+
//# sourceMappingURL=ssr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.d.ts","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAEhC,MAAM,MAAM,WAAW,GAAG;IACxB,kFAAkF;IAClF,QAAQ,CAAC,SAAS,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IACrD,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,wBAAgB,eAAe,CAAC,QAAQ,EAAE,WAAW,EAAE,OAAO,EAAE,OAAO,yCAYtE;AAED,kGAAkG;AAClG,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,WAAW,GAAG,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,QAAQ,CAAC,CAE/F"}
|
package/dist/ssr.js
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
export function renderSsrEffect(manifest, request) {
|
|
3
|
+
return Effect.gen(function* () {
|
|
4
|
+
const pathname = new URL(request.url).pathname;
|
|
5
|
+
const route = pathname === "/" ? "/" : `${pathname.replace(/\/+$/, "")}/`;
|
|
6
|
+
const document = Object.hasOwn(manifest.documents, route) ? manifest.documents[route] : undefined;
|
|
7
|
+
const status = document === undefined ? 404 : 200;
|
|
8
|
+
const headers = { "content-type": "text/html; charset=utf-8" };
|
|
9
|
+
if (request.method !== "GET" && request.method !== "HEAD") {
|
|
10
|
+
return new Response(null, { status: 405, headers: { ...headers, allow: "GET, HEAD" } });
|
|
11
|
+
}
|
|
12
|
+
return new Response(request.method === "HEAD" ? null : document ?? manifest.notFoundDocument, { status, headers });
|
|
13
|
+
});
|
|
14
|
+
}
|
|
15
|
+
/** A platform-neutral Fetch handler; adapters only serve assets and forward document requests. */
|
|
16
|
+
export function createSsrHandler(manifest) {
|
|
17
|
+
return (request) => Effect.runPromise(renderSsrEffect(manifest, request));
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=ssr.js.map
|
package/dist/ssr.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ssr.js","sourceRoot":"","sources":["../src/ssr.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAQhC,MAAM,UAAU,eAAe,CAAC,QAAqB,EAAE,OAAgB;IACrE,OAAO,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC;QACzB,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC;QAC/C,MAAM,KAAK,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,GAAG,CAAC;QAC1E,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;QAClG,MAAM,MAAM,GAAG,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;QAClD,MAAM,OAAO,GAAG,EAAE,cAAc,EAAE,0BAA0B,EAAE,CAAC;QAC/D,IAAI,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,OAAO,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;YAC1D,OAAO,IAAI,QAAQ,CAAC,IAAI,EAAE,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,IAAI,QAAQ,CAAC,gBAAgB,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IACrH,CAAC,CAAC,CAAC;AACL,CAAC;AAED,kGAAkG;AAClG,MAAM,UAAU,gBAAgB,CAAC,QAAqB;IACpD,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,eAAe,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AAC5E,CAAC"}
|
package/dist/vite.d.ts
ADDED
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type Plugin } from "vite";
|
|
2
|
+
export type FuzorPluginOptions = {
|
|
3
|
+
readonly target?: "spa" | "mpa" | "ssr";
|
|
4
|
+
/** Emit the SPA as one HTML file with all JavaScript and CSS inlined. */
|
|
5
|
+
readonly inline?: boolean;
|
|
6
|
+
};
|
|
7
|
+
export declare function fuzorPlugin(options?: FuzorPluginOptions): Plugin;
|
|
8
|
+
//# sourceMappingURL=vite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.d.ts","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"AAEA,OAAO,EAAgB,KAAK,MAAM,EAA2C,MAAM,MAAM,CAAC;AAU1F,MAAM,MAAM,kBAAkB,GAAG;IAC/B,QAAQ,CAAC,MAAM,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;IACxC,yEAAyE;IACzE,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AA8BF,wBAAgB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,MAAM,CA2PpE"}
|
package/dist/vite.js
ADDED
|
@@ -0,0 +1,310 @@
|
|
|
1
|
+
import { mkdir, readFile, readdir, rmdir, unlink, writeFile } from "node:fs/promises";
|
|
2
|
+
import path from "node:path";
|
|
3
|
+
import { createServer } from "vite";
|
|
4
|
+
import { compileProject } from "./compiler/index.js";
|
|
5
|
+
import { compileIslands } from "./compiler/islands.js";
|
|
6
|
+
import { createSsrHandler } from "./ssr.js";
|
|
7
|
+
const virtualId = "virtual:fuzor/client";
|
|
8
|
+
const resolvedVirtualId = `\0${virtualId}`;
|
|
9
|
+
const outletStart = "<!--fuzor:outlet-start-->";
|
|
10
|
+
const outletEnd = "<!--fuzor:outlet-end-->";
|
|
11
|
+
function escapeAttribute(value) {
|
|
12
|
+
return value.replaceAll("&", "&").replaceAll('"', """);
|
|
13
|
+
}
|
|
14
|
+
function routeContent(project, pathname) {
|
|
15
|
+
const normalized = pathname === "/" ? "/" : `${pathname.replace(/\/+$/, "")}/`;
|
|
16
|
+
const route = project.routes.find((entry) => entry.path === normalized);
|
|
17
|
+
if (!route)
|
|
18
|
+
throw new Error(`No Fuzor route for ${normalized}`);
|
|
19
|
+
return route.html;
|
|
20
|
+
}
|
|
21
|
+
function outletFor(project, target, pathname) {
|
|
22
|
+
if (target !== "spa") {
|
|
23
|
+
return `<fuzor-router>${routeContent(project, pathname)}</fuzor-router>`;
|
|
24
|
+
}
|
|
25
|
+
const templates = project.routes.map((route) => `<template data-fuzor-route="${escapeAttribute(route.path)}">${route.html}</template>`).join("\n");
|
|
26
|
+
return `<fuzor-router></fuzor-router>\n${templates}`;
|
|
27
|
+
}
|
|
28
|
+
function replaceOutlet(document, content) {
|
|
29
|
+
const start = document.indexOf(outletStart);
|
|
30
|
+
const end = document.indexOf(outletEnd);
|
|
31
|
+
if (start < 0 || end < start)
|
|
32
|
+
throw new Error(`index.html must contain ${outletStart} and ${outletEnd}.`);
|
|
33
|
+
return document.slice(0, start + outletStart.length) + content + document.slice(end);
|
|
34
|
+
}
|
|
35
|
+
export function fuzorPlugin(options = {}) {
|
|
36
|
+
const target = options.target ?? (process.env.FUZOR_TARGET === "mpa" || process.env.FUZOR_TARGET === "ssr" ? process.env.FUZOR_TARGET : "spa");
|
|
37
|
+
const inline = options.inline ?? process.env.FUZOR_INLINE === "1";
|
|
38
|
+
let vite;
|
|
39
|
+
let project;
|
|
40
|
+
let projectPromise;
|
|
41
|
+
let rawProject;
|
|
42
|
+
let devServer;
|
|
43
|
+
let needsSolidHydration = false;
|
|
44
|
+
let islands = [];
|
|
45
|
+
const loadProject = async () => {
|
|
46
|
+
if (project)
|
|
47
|
+
return project;
|
|
48
|
+
if (projectPromise)
|
|
49
|
+
return projectPromise;
|
|
50
|
+
projectPromise = (async () => {
|
|
51
|
+
const raw = rawProject ?? await compileProject(vite.root);
|
|
52
|
+
if (islands.length === 0)
|
|
53
|
+
return project = raw;
|
|
54
|
+
const ownedServer = devServer ? undefined : await createServer({
|
|
55
|
+
root: vite.root,
|
|
56
|
+
configFile: vite.configFile ?? false,
|
|
57
|
+
server: { middlewareMode: true, hmr: false },
|
|
58
|
+
optimizeDeps: { noDiscovery: true, include: [] },
|
|
59
|
+
appType: "custom"
|
|
60
|
+
});
|
|
61
|
+
const server = devServer ?? ownedServer;
|
|
62
|
+
const modules = new Map();
|
|
63
|
+
try {
|
|
64
|
+
return project = await compileIslands(raw, async (name, props, id) => {
|
|
65
|
+
const island = islands.find((entry) => entry.name === name);
|
|
66
|
+
if (!island)
|
|
67
|
+
throw new Error(`Unknown Fuzor island: ${name}`);
|
|
68
|
+
let loaded = modules.get(name);
|
|
69
|
+
if (!loaded) {
|
|
70
|
+
loaded = server.ssrLoadModule(island.file);
|
|
71
|
+
modules.set(name, loaded);
|
|
72
|
+
}
|
|
73
|
+
const module = await loaded;
|
|
74
|
+
if (island.file.endsWith(".vue")) {
|
|
75
|
+
const [{ createSSRApp }, { renderToString }] = await Promise.all([import("vue"), import("vue/server-renderer")]);
|
|
76
|
+
return renderToString(createSSRApp(module.default, props));
|
|
77
|
+
}
|
|
78
|
+
const mount = module.mount;
|
|
79
|
+
if (mount?.framework === "react" && mount.component) {
|
|
80
|
+
const [{ createElement }, { renderToString }] = await Promise.all([import("react"), import("react-dom/server")]);
|
|
81
|
+
return renderToString(createElement(mount.component, props), { identifierPrefix: `fuzor-${id}-` });
|
|
82
|
+
}
|
|
83
|
+
if (mount?.framework === "solid" && mount.component) {
|
|
84
|
+
const [{ createComponent }, { renderToString }] = await Promise.all([import("solid-js"), import("solid-js/web")]);
|
|
85
|
+
needsSolidHydration = true;
|
|
86
|
+
return renderToString(() => createComponent(mount.component, props), { renderId: id });
|
|
87
|
+
}
|
|
88
|
+
if (typeof module.render === "function")
|
|
89
|
+
return module.render(props);
|
|
90
|
+
return undefined;
|
|
91
|
+
});
|
|
92
|
+
}
|
|
93
|
+
finally {
|
|
94
|
+
await ownedServer?.close();
|
|
95
|
+
}
|
|
96
|
+
})();
|
|
97
|
+
try {
|
|
98
|
+
return await projectPromise;
|
|
99
|
+
}
|
|
100
|
+
finally {
|
|
101
|
+
projectPromise = undefined;
|
|
102
|
+
}
|
|
103
|
+
};
|
|
104
|
+
const scanIslands = async () => {
|
|
105
|
+
const islandDir = path.join(vite.root, "islands");
|
|
106
|
+
try {
|
|
107
|
+
const entries = await readdir(islandDir, { withFileTypes: true });
|
|
108
|
+
islands = entries
|
|
109
|
+
.filter((entry) => entry.isFile() && /\.(ts|tsx|js|jsx|vue)$/.test(entry.name))
|
|
110
|
+
.map((entry) => ({ name: entry.name.replace(/(?:\.(?:react|solid))?\.(ts|tsx|js|jsx|vue)$/, ""), file: `/islands/${entry.name}` }));
|
|
111
|
+
const names = new Set();
|
|
112
|
+
for (const island of islands) {
|
|
113
|
+
if (names.has(island.name))
|
|
114
|
+
throw new Error(`Duplicate Fuzor island name: ${island.name}`);
|
|
115
|
+
names.add(island.name);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
catch (error) {
|
|
119
|
+
if (error.code !== "ENOENT")
|
|
120
|
+
throw error;
|
|
121
|
+
islands = [];
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
const refresh = async (server) => {
|
|
125
|
+
project = undefined;
|
|
126
|
+
rawProject = undefined;
|
|
127
|
+
projectPromise = undefined;
|
|
128
|
+
needsSolidHydration = false;
|
|
129
|
+
await scanIslands();
|
|
130
|
+
await loadProject();
|
|
131
|
+
const module = server.moduleGraph.getModuleById(resolvedVirtualId);
|
|
132
|
+
if (module)
|
|
133
|
+
server.moduleGraph.invalidateModule(module);
|
|
134
|
+
server.ws.send({ type: "full-reload" });
|
|
135
|
+
};
|
|
136
|
+
return {
|
|
137
|
+
name: "fuzor",
|
|
138
|
+
enforce: "pre",
|
|
139
|
+
config() {
|
|
140
|
+
if (target === "ssr")
|
|
141
|
+
return { build: { outDir: "dist-ssr/client" } };
|
|
142
|
+
if (target === "spa" && inline)
|
|
143
|
+
return {
|
|
144
|
+
build: {
|
|
145
|
+
cssCodeSplit: false,
|
|
146
|
+
assetsInlineLimit: Number.MAX_SAFE_INTEGER,
|
|
147
|
+
rollupOptions: { output: { inlineDynamicImports: true } }
|
|
148
|
+
}
|
|
149
|
+
};
|
|
150
|
+
},
|
|
151
|
+
async configResolved(config) {
|
|
152
|
+
vite = config;
|
|
153
|
+
rawProject = await compileProject(config.root);
|
|
154
|
+
await scanIslands();
|
|
155
|
+
},
|
|
156
|
+
resolveId(id) {
|
|
157
|
+
return id === virtualId ? resolvedVirtualId : undefined;
|
|
158
|
+
},
|
|
159
|
+
load(id) {
|
|
160
|
+
if (id !== resolvedVirtualId)
|
|
161
|
+
return undefined;
|
|
162
|
+
const registry = islands.map((island) => {
|
|
163
|
+
const load = island.file.endsWith(".vue")
|
|
164
|
+
? `Promise.all([import(${JSON.stringify(island.file)}), import("fuzor/islands/vue")]).then(([component, adapter]) => adapter.vueIsland(component.default))`
|
|
165
|
+
: `import(${JSON.stringify(island.file)})`;
|
|
166
|
+
return `${JSON.stringify(island.name)}: () => ${load}`;
|
|
167
|
+
}).join(",\n");
|
|
168
|
+
return `import { ${target === "spa" ? "createRouter" : "mountIslands"} } from "${target === "spa" ? "fuzor/runtime" : "fuzor/runtime/islands"}";
|
|
169
|
+
const islands = { ${registry} };
|
|
170
|
+
const outlet = document.querySelector("fuzor-router");
|
|
171
|
+
if (!outlet) throw new Error("Fuzor outlet is missing");
|
|
172
|
+
${target === "spa"
|
|
173
|
+
? "void createRouter(outlet, { islands }).start();"
|
|
174
|
+
: "void mountIslands(outlet, islands);"}`;
|
|
175
|
+
},
|
|
176
|
+
transformIndexHtml: {
|
|
177
|
+
order: "pre",
|
|
178
|
+
async handler(raw, context) {
|
|
179
|
+
const compiled = await loadProject();
|
|
180
|
+
const pathname = target === "spa" ? "/" : new URL(context.path, "http://fuzor.local").pathname;
|
|
181
|
+
const currentPath = compiled.routes.some((route) => route.path === (pathname === "/" ? "/" : `${pathname.replace(/\/+$/, "")}/`)) ? pathname : "/";
|
|
182
|
+
let html = replaceOutlet(raw, outletFor(compiled, target, currentPath));
|
|
183
|
+
if (needsSolidHydration) {
|
|
184
|
+
const { generateHydrationScript } = await import("solid-js/web");
|
|
185
|
+
html = html.replace("</head>", `${generateHydrationScript()}</head>`);
|
|
186
|
+
}
|
|
187
|
+
html = html.replace("</head>", `<script type="module">import "${virtualId}";</script></head>`);
|
|
188
|
+
return html;
|
|
189
|
+
}
|
|
190
|
+
},
|
|
191
|
+
configureServer(server) {
|
|
192
|
+
devServer = server;
|
|
193
|
+
if (target !== "spa") {
|
|
194
|
+
server.middlewares.use(async (request, response, next) => {
|
|
195
|
+
const pathname = new URL(request.url ?? "/", "http://fuzor.local").pathname;
|
|
196
|
+
if (target === "ssr" && !pathname.startsWith("/@") && !pathname.startsWith("/__") && !pathname.includes(".")) {
|
|
197
|
+
try {
|
|
198
|
+
const raw = await readFile(path.join(vite.root, "index.html"), "utf8");
|
|
199
|
+
const template = await server.transformIndexHtml("/", raw);
|
|
200
|
+
const documents = Object.fromEntries((await loadProject()).routes.map((route) => [route.path, replaceOutlet(template, `<fuzor-router>${route.html}</fuzor-router>`)]));
|
|
201
|
+
const notFoundDocument = replaceOutlet(template, "<fuzor-router><h1>Not found</h1></fuzor-router>");
|
|
202
|
+
const result = await createSsrHandler({ documents, notFoundDocument })(new Request(new URL(request.url ?? "/", "http://fuzor.local"), { method: request.method ?? "GET" }));
|
|
203
|
+
response.writeHead(result.status, Object.fromEntries(result.headers));
|
|
204
|
+
response.end(Buffer.from(await result.arrayBuffer()));
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
next(error);
|
|
208
|
+
}
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
if (request.method !== "GET")
|
|
212
|
+
return next();
|
|
213
|
+
const normalized = pathname === "/" ? "/" : `${pathname.replace(/\/+$/, "")}/`;
|
|
214
|
+
if (normalized === "/" || !(await loadProject()).routes.some((route) => route.path === normalized))
|
|
215
|
+
return next();
|
|
216
|
+
try {
|
|
217
|
+
const raw = await readFile(path.join(vite.root, "index.html"), "utf8");
|
|
218
|
+
const html = await server.transformIndexHtml(pathname, raw);
|
|
219
|
+
response.setHeader("content-type", "text/html; charset=utf-8");
|
|
220
|
+
response.end(html);
|
|
221
|
+
}
|
|
222
|
+
catch (error) {
|
|
223
|
+
next(error);
|
|
224
|
+
}
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
server.watcher.on("add", (file) => {
|
|
228
|
+
if (["/pages/", "/components/", "/layouts/", "/islands/"].some((part) => file.includes(part))) {
|
|
229
|
+
void refresh(server).catch((error) => server.config.logger.error(String(error)));
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
server.watcher.on("unlink", (file) => {
|
|
233
|
+
if (["/pages/", "/components/", "/layouts/", "/islands/"].some((part) => file.includes(part))) {
|
|
234
|
+
void refresh(server).catch((error) => server.config.logger.error(String(error)));
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
},
|
|
238
|
+
async closeBundle() {
|
|
239
|
+
if (vite.command !== "build")
|
|
240
|
+
return;
|
|
241
|
+
const outDir = path.resolve(vite.root, vite.build.outDir);
|
|
242
|
+
if (target === "spa") {
|
|
243
|
+
if (!inline)
|
|
244
|
+
return;
|
|
245
|
+
let html = await readFile(path.join(outDir, "index.html"), "utf8");
|
|
246
|
+
const assetFiles = new Set();
|
|
247
|
+
for (const match of html.matchAll(/<script\b[^>]*\bsrc="([^"]+)"[^>]*><\/script>/g)) {
|
|
248
|
+
const url = match[1];
|
|
249
|
+
if (!url.endsWith(".js"))
|
|
250
|
+
continue;
|
|
251
|
+
const file = path.join(outDir, url.replace(/^\//, ""));
|
|
252
|
+
const source = await readFile(file, "utf8");
|
|
253
|
+
html = html.replace(match[0], () => `<script type="module">${source.replace(/<\/script/gi, "<\\/script")}</script>`);
|
|
254
|
+
assetFiles.add(file);
|
|
255
|
+
}
|
|
256
|
+
for (const match of html.matchAll(/<link\b[^>]*\brel="stylesheet"[^>]*\bhref="([^"]+)"[^>]*>/g)) {
|
|
257
|
+
const file = path.join(outDir, match[1].replace(/^\//, ""));
|
|
258
|
+
const source = await readFile(file, "utf8");
|
|
259
|
+
html = html.replace(match[0], () => `<style>${source.replace(/<\/style/gi, "<\\/style")}</style>`);
|
|
260
|
+
assetFiles.add(file);
|
|
261
|
+
}
|
|
262
|
+
await writeFile(path.join(outDir, "index.html"), html, "utf8");
|
|
263
|
+
for (const file of assetFiles)
|
|
264
|
+
await unlink(file);
|
|
265
|
+
const assetDir = path.join(outDir, "assets");
|
|
266
|
+
try {
|
|
267
|
+
const remaining = await readdir(assetDir);
|
|
268
|
+
if (remaining.length > 0)
|
|
269
|
+
throw new Error(`SPA inline build left external assets: ${remaining.join(", ")}`);
|
|
270
|
+
await rmdir(assetDir);
|
|
271
|
+
}
|
|
272
|
+
catch (error) {
|
|
273
|
+
if (error.code !== "ENOENT")
|
|
274
|
+
throw error;
|
|
275
|
+
}
|
|
276
|
+
const remainingFiles = await readdir(outDir);
|
|
277
|
+
if (remainingFiles.length !== 1 || remainingFiles[0] !== "index.html") {
|
|
278
|
+
throw new Error(`SPA inline build left external files: ${remainingFiles.filter((file) => file !== "index.html").join(", ")}`);
|
|
279
|
+
}
|
|
280
|
+
return;
|
|
281
|
+
}
|
|
282
|
+
const compiled = await loadProject();
|
|
283
|
+
const rootHtml = await readFile(path.join(outDir, "index.html"), "utf8");
|
|
284
|
+
if (target === "ssr") {
|
|
285
|
+
const serverDir = path.resolve(outDir, "../server");
|
|
286
|
+
const documents = Object.fromEntries(compiled.routes.map((route) => [route.path, replaceOutlet(rootHtml, `<fuzor-router>${route.html}</fuzor-router>`)]));
|
|
287
|
+
const notFoundDocument = replaceOutlet(rootHtml, "<fuzor-router><h1>Not found</h1></fuzor-router>");
|
|
288
|
+
await mkdir(serverDir, { recursive: true });
|
|
289
|
+
await writeFile(path.join(serverDir, "entry.mjs"), `import { createSsrHandler } from "fuzor/ssr";\n` +
|
|
290
|
+
`export const manifest = ${JSON.stringify({ documents, notFoundDocument })};\n` +
|
|
291
|
+
`export const handler = createSsrHandler(manifest);\n`, "utf8");
|
|
292
|
+
await unlink(path.join(outDir, "index.html"));
|
|
293
|
+
return;
|
|
294
|
+
}
|
|
295
|
+
for (const route of compiled.routes) {
|
|
296
|
+
if (route.path === "/")
|
|
297
|
+
continue;
|
|
298
|
+
const outputFile = path.join(outDir, route.path.slice(1), "index.html");
|
|
299
|
+
await mkdir(path.dirname(outputFile), { recursive: true });
|
|
300
|
+
await writeFile(outputFile, replaceOutlet(rootHtml, outletFor(compiled, "mpa", route.path)), "utf8");
|
|
301
|
+
}
|
|
302
|
+
},
|
|
303
|
+
async handleHotUpdate(context) {
|
|
304
|
+
if (["/pages/", "/components/", "/layouts/", "/islands/"].some((part) => context.file.includes(part))) {
|
|
305
|
+
await refresh(context.server);
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
//# sourceMappingURL=vite.js.map
|
package/dist/vite.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vite.js","sourceRoot":"","sources":["../src/vite.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,71 +1,86 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fuzor",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"type": "module",
|
|
5
|
-
"
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
"bin": {
|
|
6
|
+
"fuzor": "./dist/cli.js"
|
|
7
|
+
},
|
|
8
8
|
"files": [
|
|
9
|
-
"bin",
|
|
10
9
|
"dist",
|
|
11
|
-
"
|
|
10
|
+
"templates/basic"
|
|
12
11
|
],
|
|
13
|
-
"
|
|
14
|
-
"
|
|
15
|
-
"
|
|
16
|
-
"exports": {
|
|
17
|
-
"types": "./dist/index.d.ts",
|
|
18
|
-
"import": "./dist/lib.js",
|
|
19
|
-
"require": "./dist/lib.cjs"
|
|
20
|
-
},
|
|
21
|
-
"bin": {
|
|
22
|
-
"fuzor": "./bin/index.js"
|
|
23
|
-
},
|
|
24
|
-
"engines": {
|
|
25
|
-
"node": "^20.0.0 || >=22.0.0"
|
|
26
|
-
},
|
|
12
|
+
"description": "HTML-first framework that compiles one app as a SPA, MPA, or server-served app",
|
|
13
|
+
"license": "MIT",
|
|
14
|
+
"homepage": "https://fuzor.dev",
|
|
27
15
|
"repository": {
|
|
28
16
|
"type": "git",
|
|
29
|
-
"url": "git+https://github.com/ivanjeremic/fuzor.git"
|
|
30
|
-
"directory": "packages/fuzor"
|
|
17
|
+
"url": "git+https://github.com/ivanjeremic/fuzor.git"
|
|
31
18
|
},
|
|
32
|
-
"
|
|
33
|
-
"
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
"
|
|
19
|
+
"exports": {
|
|
20
|
+
".": "./dist/index.js",
|
|
21
|
+
"./compiler": "./dist/compiler/index.js",
|
|
22
|
+
"./vite": "./dist/vite.js",
|
|
23
|
+
"./create": "./dist/create.js",
|
|
24
|
+
"./ssr": "./dist/ssr.js",
|
|
25
|
+
"./ssr/node": "./dist/ssr/node.js",
|
|
26
|
+
"./runtime": "./dist/runtime/index.js",
|
|
27
|
+
"./runtime/islands": "./dist/runtime/islands.js",
|
|
28
|
+
"./islands/react": "./dist/islands/react.js",
|
|
29
|
+
"./islands/vue": "./dist/islands/vue.js",
|
|
30
|
+
"./islands/solid": "./dist/islands/solid.js"
|
|
39
31
|
},
|
|
40
|
-
"keywords": [
|
|
41
|
-
"C#"
|
|
42
|
-
],
|
|
43
32
|
"dependencies": {
|
|
44
|
-
"@
|
|
45
|
-
"@
|
|
46
|
-
"
|
|
47
|
-
"
|
|
48
|
-
"
|
|
49
|
-
"
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
"fast-glob": "3.3.1",
|
|
53
|
-
"glob": "^11.0.1",
|
|
54
|
-
"lowdb": "^7.0.1",
|
|
55
|
-
"prompts": "2.4.2",
|
|
33
|
+
"@clack/prompts": "^1.8.0",
|
|
34
|
+
"@tanstack/markdown": "^0.0.15",
|
|
35
|
+
"citty": "^0.2.2",
|
|
36
|
+
"effect": "4.0.0-rc.115",
|
|
37
|
+
"parse5": "^8.0.1",
|
|
38
|
+
"picocolors": "^1.1.1"
|
|
39
|
+
},
|
|
40
|
+
"peerDependencies": {
|
|
56
41
|
"react": "^19.0.0",
|
|
57
|
-
"react-dom": "19.
|
|
58
|
-
"
|
|
59
|
-
"
|
|
60
|
-
"
|
|
42
|
+
"react-dom": "^19.0.0",
|
|
43
|
+
"solid-js": "^1.0.0",
|
|
44
|
+
"vite": "^6.0.0 || ^7.0.0 || ^8.0.0",
|
|
45
|
+
"vue": "^3.0.0"
|
|
46
|
+
},
|
|
47
|
+
"peerDependenciesMeta": {
|
|
48
|
+
"react": {
|
|
49
|
+
"optional": true
|
|
50
|
+
},
|
|
51
|
+
"react-dom": {
|
|
52
|
+
"optional": true
|
|
53
|
+
},
|
|
54
|
+
"vue": {
|
|
55
|
+
"optional": true
|
|
56
|
+
},
|
|
57
|
+
"solid-js": {
|
|
58
|
+
"optional": true
|
|
59
|
+
}
|
|
61
60
|
},
|
|
62
61
|
"devDependencies": {
|
|
63
|
-
"@types/
|
|
64
|
-
"@types/
|
|
65
|
-
"@types/
|
|
66
|
-
"
|
|
67
|
-
"
|
|
68
|
-
"
|
|
69
|
-
"
|
|
62
|
+
"@types/node": "^25.9.1",
|
|
63
|
+
"@types/react": "^19.2.4",
|
|
64
|
+
"@types/react-dom": "^19.2.3",
|
|
65
|
+
"react": "^19.2.0",
|
|
66
|
+
"react-dom": "^19.2.0",
|
|
67
|
+
"solid-js": "^1.9.0",
|
|
68
|
+
"typescript": "^6.0.3",
|
|
69
|
+
"vite": "^6.2.6",
|
|
70
|
+
"vitest": "^4.1.8",
|
|
71
|
+
"vue": "^3.5.0"
|
|
72
|
+
},
|
|
73
|
+
"scripts": {
|
|
74
|
+
"build": "node scripts/clean-dist.mjs && tsc -p tsconfig.build.json && node scripts/chmod-cli.mjs",
|
|
75
|
+
"typecheck": "tsc --noEmit",
|
|
76
|
+
"test": "vitest run",
|
|
77
|
+
"example:spa": "pnpm build && pnpm --filter @fuzor/example build:spa",
|
|
78
|
+
"example:mpa": "pnpm build && pnpm --filter @fuzor/example build:mpa",
|
|
79
|
+
"example:ssr": "pnpm build && pnpm --filter @fuzor/example build:ssr",
|
|
80
|
+
"example:dev:ssr": "pnpm build && pnpm --filter @fuzor/example dev:ssr",
|
|
81
|
+
"website:dev": "pnpm build && pnpm --filter @fuzor/website dev",
|
|
82
|
+
"website:build": "pnpm build && pnpm --filter @fuzor/website build",
|
|
83
|
+
"website:verify": "node scripts/verify-website.mjs",
|
|
84
|
+
"verify:profiles": "node scripts/verify-profiles.mjs"
|
|
70
85
|
}
|
|
71
|
-
}
|
|
86
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# __APP_NAME__
|
|
2
|
+
|
|
3
|
+
This app uses one `pages/` tree for every Fuzor target.
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
pnpm dev # SPA development
|
|
7
|
+
pnpm dev:mpa # MPA development
|
|
8
|
+
pnpm dev:ssr # server-served development
|
|
9
|
+
pnpm build:spa # ESM SPA with lazy islands
|
|
10
|
+
pnpm build:spa --inline # single HTML file
|
|
11
|
+
pnpm build:mpa # static HTML pages
|
|
12
|
+
pnpm build:ssr # precompiled server documents
|
|
13
|
+
pnpm start:ssr # serve the completed SSR build
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
Add HTML or Markdown routes under `pages/`, layouts under `pages/`, and interactive modules under `islands/`. The same sources build in every target.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<span class="badge">Your Fuzor app is ready</span>
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
6
|
+
<title>Fuzor app</title>
|
|
7
|
+
<link rel="stylesheet" href="/style.css" />
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<!--fuzor:outlet-start--><!--fuzor:outlet-end-->
|
|
11
|
+
</body>
|
|
12
|
+
</html>
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export function render() {
|
|
2
|
+
return '<button class="counter">Count: 0</button>';
|
|
3
|
+
}
|
|
4
|
+
|
|
5
|
+
export function mount(host: HTMLElement) {
|
|
6
|
+
let count = 0;
|
|
7
|
+
const button = host.querySelector<HTMLButtonElement>("button.counter") ?? document.createElement("button");
|
|
8
|
+
button.className = "counter";
|
|
9
|
+
const update = () => { button.textContent = `Count: ${count}`; };
|
|
10
|
+
button.addEventListener("click", () => { count++; update(); });
|
|
11
|
+
update();
|
|
12
|
+
if (!button.isConnected) host.append(button);
|
|
13
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "__APP_NAME__",
|
|
3
|
+
"private": true,
|
|
4
|
+
"type": "module",
|
|
5
|
+
"packageManager": "pnpm@10.33.0",
|
|
6
|
+
"scripts": {
|
|
7
|
+
"dev": "fuzor dev --target spa",
|
|
8
|
+
"dev:spa": "fuzor dev --target spa",
|
|
9
|
+
"dev:mpa": "fuzor dev --target mpa",
|
|
10
|
+
"dev:ssr": "fuzor dev --target ssr",
|
|
11
|
+
"build": "fuzor build --target mpa",
|
|
12
|
+
"build:spa": "fuzor build --target spa",
|
|
13
|
+
"build:mpa": "fuzor build --target mpa",
|
|
14
|
+
"build:ssr": "fuzor build --target ssr",
|
|
15
|
+
"start:ssr": "node server.mjs",
|
|
16
|
+
"typecheck": "tsc --noEmit"
|
|
17
|
+
},
|
|
18
|
+
"dependencies": { "fuzor": "__FUZOR_VERSION__" },
|
|
19
|
+
"devDependencies": { "typescript": "^6.0.3", "vite": "^6.4.3", "@types/node": "^25.9.1" }
|
|
20
|
+
}
|