davaux 0.8.0
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/BASELINE.md +169 -0
- package/CLAUDE.md +518 -0
- package/LICENSE +21 -0
- package/README.md +36 -0
- package/ROADMAP.md +198 -0
- package/build.mjs +101 -0
- package/client/control.ts +247 -0
- package/client/hydrate.ts +37 -0
- package/client/index.ts +19 -0
- package/client/jsx-runtime.ts +209 -0
- package/client/resource.ts +122 -0
- package/client/signal.ts +211 -0
- package/client/store.ts +110 -0
- package/client/useHead.ts +63 -0
- package/dist/build/config.d.ts +3 -0
- package/dist/build/config.d.ts.map +1 -0
- package/dist/build/config.js +38 -0
- package/dist/build/config.js.map +7 -0
- package/dist/build/index.d.ts +2 -0
- package/dist/build/index.d.ts.map +1 -0
- package/dist/build/index.js +13 -0
- package/dist/build/index.js.map +7 -0
- package/dist/build/plugins.d.ts +7 -0
- package/dist/build/plugins.d.ts.map +1 -0
- package/dist/build/plugins.js +85 -0
- package/dist/build/plugins.js.map +7 -0
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +427 -0
- package/dist/cli.js.map +7 -0
- package/dist/client/control.d.ts +49 -0
- package/dist/client/control.d.ts.map +1 -0
- package/dist/client/control.js +154 -0
- package/dist/client/control.js.map +7 -0
- package/dist/client/hydrate.d.ts +7 -0
- package/dist/client/hydrate.d.ts.map +1 -0
- package/dist/client/hydrate.js +23 -0
- package/dist/client/hydrate.js.map +7 -0
- package/dist/client/index.d.ts +12 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +32 -0
- package/dist/client/index.js.map +7 -0
- package/dist/client/jsx-runtime.d.ts +40 -0
- package/dist/client/jsx-runtime.d.ts.map +1 -0
- package/dist/client/jsx-runtime.js +139 -0
- package/dist/client/jsx-runtime.js.map +7 -0
- package/dist/client/resource.d.ts +31 -0
- package/dist/client/resource.d.ts.map +1 -0
- package/dist/client/resource.js +64 -0
- package/dist/client/resource.js.map +7 -0
- package/dist/client/signal.d.ts +90 -0
- package/dist/client/signal.d.ts.map +1 -0
- package/dist/client/signal.js +115 -0
- package/dist/client/signal.js.map +7 -0
- package/dist/client/store.d.ts +26 -0
- package/dist/client/store.d.ts.map +1 -0
- package/dist/client/store.js +63 -0
- package/dist/client/store.js.map +7 -0
- package/dist/client/useHead.d.ts +28 -0
- package/dist/client/useHead.d.ts.map +1 -0
- package/dist/client/useHead.js +33 -0
- package/dist/client/useHead.js.map +7 -0
- package/dist/config.d.ts +182 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +21 -0
- package/dist/config.js.map +7 -0
- package/dist/create-multisite.d.ts +2 -0
- package/dist/create-multisite.d.ts.map +1 -0
- package/dist/create-multisite.js +291 -0
- package/dist/create-multisite.js.map +7 -0
- package/dist/create.d.ts +2 -0
- package/dist/create.d.ts.map +1 -0
- package/dist/create.js +179 -0
- package/dist/create.js.map +7 -0
- package/dist/dev/blueprints.d.ts +11 -0
- package/dist/dev/blueprints.d.ts.map +1 -0
- package/dist/dev/blueprints.js +65 -0
- package/dist/dev/blueprints.js.map +7 -0
- package/dist/dev/components.d.ts +19 -0
- package/dist/dev/components.d.ts.map +1 -0
- package/dist/dev/components.js +87 -0
- package/dist/dev/components.js.map +7 -0
- package/dist/dev/insert.d.ts +11 -0
- package/dist/dev/insert.d.ts.map +1 -0
- package/dist/dev/insert.js +160 -0
- package/dist/dev/insert.js.map +7 -0
- package/dist/dev/remove.d.ts +53 -0
- package/dist/dev/remove.d.ts.map +1 -0
- package/dist/dev/remove.js +518 -0
- package/dist/dev/remove.js.map +7 -0
- package/dist/dev/watch.d.ts +26 -0
- package/dist/dev/watch.d.ts.map +1 -0
- package/dist/dev/watch.js +2905 -0
- package/dist/dev/watch.js.map +7 -0
- package/dist/errors.d.ts +6 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +63 -0
- package/dist/errors.js.map +7 -0
- package/dist/generate.d.ts +2 -0
- package/dist/generate.d.ts.map +1 -0
- package/dist/generate.js +191 -0
- package/dist/generate.js.map +7 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +57 -0
- package/dist/index.js.map +7 -0
- package/dist/island.d.ts +24 -0
- package/dist/island.d.ts.map +1 -0
- package/dist/island.js +15 -0
- package/dist/island.js.map +7 -0
- package/dist/jsx-runtime.d.ts +406 -0
- package/dist/jsx-runtime.d.ts.map +1 -0
- package/dist/jsx-runtime.js +90 -0
- package/dist/jsx-runtime.js.map +7 -0
- package/dist/link.d.ts +27 -0
- package/dist/link.d.ts.map +1 -0
- package/dist/link.js +29 -0
- package/dist/link.js.map +7 -0
- package/dist/oml/fragment.d.ts +16 -0
- package/dist/oml/fragment.d.ts.map +1 -0
- package/dist/oml/fragment.js +26 -0
- package/dist/oml/fragment.js.map +7 -0
- package/dist/oml/index.d.ts +11 -0
- package/dist/oml/index.d.ts.map +1 -0
- package/dist/oml/index.js +21 -0
- package/dist/oml/index.js.map +7 -0
- package/dist/oml/jsx-runtime.d.ts +34 -0
- package/dist/oml/jsx-runtime.d.ts.map +1 -0
- package/dist/oml/jsx-runtime.js +59 -0
- package/dist/oml/jsx-runtime.js.map +7 -0
- package/dist/oml/jsx.d.ts +14 -0
- package/dist/oml/jsx.d.ts.map +1 -0
- package/dist/oml/jsx.js +96 -0
- package/dist/oml/jsx.js.map +7 -0
- package/dist/oml/page.d.ts +7 -0
- package/dist/oml/page.d.ts.map +1 -0
- package/dist/oml/page.js +6 -0
- package/dist/oml/page.js.map +7 -0
- package/dist/oml/render.d.ts +13 -0
- package/dist/oml/render.d.ts.map +1 -0
- package/dist/oml/render.js +117 -0
- package/dist/oml/render.js.map +7 -0
- package/dist/oml/types.d.ts +79 -0
- package/dist/oml/types.d.ts.map +1 -0
- package/dist/oml/types.js +64 -0
- package/dist/oml/types.js.map +7 -0
- package/dist/router/handler.d.ts +53 -0
- package/dist/router/handler.d.ts.map +1 -0
- package/dist/router/handler.js +342 -0
- package/dist/router/handler.js.map +7 -0
- package/dist/router/matcher.d.ts +21 -0
- package/dist/router/matcher.d.ts.map +1 -0
- package/dist/router/matcher.js +28 -0
- package/dist/router/matcher.js.map +7 -0
- package/dist/router/scanner.d.ts +17 -0
- package/dist/router/scanner.d.ts.map +1 -0
- package/dist/router/scanner.js +197 -0
- package/dist/router/scanner.js.map +7 -0
- package/dist/server/index.d.ts +23 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +29 -0
- package/dist/server/index.js.map +7 -0
- package/dist/signal.d.ts +15 -0
- package/dist/signal.d.ts.map +1 -0
- package/dist/signal.js +29 -0
- package/dist/signal.js.map +7 -0
- package/dist/ssg.d.ts +45 -0
- package/dist/ssg.d.ts.map +1 -0
- package/dist/ssg.js +175 -0
- package/dist/ssg.js.map +7 -0
- package/dist/test/actions.test.d.ts +2 -0
- package/dist/test/actions.test.d.ts.map +1 -0
- package/dist/test/body-limits.test.d.ts +2 -0
- package/dist/test/body-limits.test.d.ts.map +1 -0
- package/dist/test/errors.test.d.ts +2 -0
- package/dist/test/errors.test.d.ts.map +1 -0
- package/dist/test/fixtures/routes/[id].page.d.ts +4 -0
- package/dist/test/fixtures/routes/[id].page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_error.d.ts +3 -0
- package/dist/test/fixtures/routes/_error.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_global.d.ts +3 -0
- package/dist/test/fixtures/routes/_global.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_layout-template.d.ts +3 -0
- package/dist/test/fixtures/routes/_layout-template.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_layout.d.ts +3 -0
- package/dist/test/fixtures/routes/_layout.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_layout_scripts.d.ts +3 -0
- package/dist/test/fixtures/routes/_layout_scripts.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_middleware.d.ts +3 -0
- package/dist/test/fixtures/routes/_middleware.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_redirect301_mw.d.ts +3 -0
- package/dist/test/fixtures/routes/_redirect301_mw.d.ts.map +1 -0
- package/dist/test/fixtures/routes/_redirect_mw.d.ts +3 -0
- package/dist/test/fixtures/routes/_redirect_mw.d.ts.map +1 -0
- package/dist/test/fixtures/routes/about.page.d.ts +3 -0
- package/dist/test/fixtures/routes/about.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/action.page.d.ts +6 -0
- package/dist/test/fixtures/routes/action.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/form-all.post.d.ts +3 -0
- package/dist/test/fixtures/routes/api/form-all.post.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/form-limited.post.d.ts +6 -0
- package/dist/test/fixtures/routes/api/form-limited.post.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/response-obj.get.d.ts +3 -0
- package/dist/test/fixtures/routes/api/response-obj.get.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/upload.post.d.ts +12 -0
- package/dist/test/fixtures/routes/api/upload.post.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/users.get.d.ts +6 -0
- package/dist/test/fixtures/routes/api/users.get.d.ts.map +1 -0
- package/dist/test/fixtures/routes/api/xml.get.d.ts +3 -0
- package/dist/test/fixtures/routes/api/xml.get.d.ts.map +1 -0
- package/dist/test/fixtures/routes/auth/_middleware.d.ts +3 -0
- package/dist/test/fixtures/routes/auth/_middleware.d.ts.map +1 -0
- package/dist/test/fixtures/routes/auth/protected.page.d.ts +3 -0
- package/dist/test/fixtures/routes/auth/protected.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/index.page.d.ts +3 -0
- package/dist/test/fixtures/routes/index.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/oml.page.d.ts +3 -0
- package/dist/test/fixtures/routes/oml.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/redirect.page.d.ts +3 -0
- package/dist/test/fixtures/routes/redirect.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/ssg/[slug].page.d.ts +5 -0
- package/dist/test/fixtures/routes/ssg/[slug].page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/ssg/server.page.d.ts +4 -0
- package/dist/test/fixtures/routes/ssg/server.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/state.page.d.ts +3 -0
- package/dist/test/fixtures/routes/state.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/throw.page.d.ts +3 -0
- package/dist/test/fixtures/routes/throw.page.d.ts.map +1 -0
- package/dist/test/fixtures/routes/wiki/[...slug].page.d.ts +3 -0
- package/dist/test/fixtures/routes/wiki/[...slug].page.d.ts.map +1 -0
- package/dist/test/helpers.d.ts +37 -0
- package/dist/test/helpers.d.ts.map +1 -0
- package/dist/test/layouts.test.d.ts +2 -0
- package/dist/test/layouts.test.d.ts.map +1 -0
- package/dist/test/middleware.test.d.ts +2 -0
- package/dist/test/middleware.test.d.ts.map +1 -0
- package/dist/test/multipart.test.d.ts +2 -0
- package/dist/test/multipart.test.d.ts.map +1 -0
- package/dist/test/oml-routing.test.d.ts +2 -0
- package/dist/test/oml-routing.test.d.ts.map +1 -0
- package/dist/test/oml.test.d.ts +2 -0
- package/dist/test/oml.test.d.ts.map +1 -0
- package/dist/test/redirects.test.d.ts +2 -0
- package/dist/test/redirects.test.d.ts.map +1 -0
- package/dist/test/routing.test.d.ts +2 -0
- package/dist/test/routing.test.d.ts.map +1 -0
- package/dist/test/ssg.test.d.ts +2 -0
- package/dist/test/ssg.test.d.ts.map +1 -0
- package/dist/test/web-response.test.d.ts +2 -0
- package/dist/test/web-response.test.d.ts.map +1 -0
- package/dist/types.d.ts +314 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +292 -0
- package/dist/types.js.map +7 -0
- package/package.json +103 -0
- package/pka.config.json +32 -0
- package/src/build/config.ts +42 -0
- package/src/build/index.ts +6 -0
- package/src/build/plugins.ts +118 -0
- package/src/cli.ts +502 -0
- package/src/config.ts +197 -0
- package/src/create-multisite.ts +310 -0
- package/src/create.ts +194 -0
- package/src/dev/blueprints.ts +75 -0
- package/src/dev/components.ts +108 -0
- package/src/dev/insert.ts +221 -0
- package/src/dev/remove.ts +677 -0
- package/src/dev/watch.ts +3098 -0
- package/src/env.d.ts +5 -0
- package/src/errors.ts +64 -0
- package/src/generate.ts +228 -0
- package/src/index.ts +67 -0
- package/src/island.ts +47 -0
- package/src/jsx-runtime.d.ts +408 -0
- package/src/jsx-runtime.d.ts.map +1 -0
- package/src/jsx-runtime.ts +536 -0
- package/src/link.ts +49 -0
- package/src/oml/fragment.ts +54 -0
- package/src/oml/index.ts +21 -0
- package/src/oml/jsx-runtime.ts +121 -0
- package/src/oml/jsx.ts +151 -0
- package/src/oml/page.ts +13 -0
- package/src/oml/render.ts +181 -0
- package/src/oml/types.ts +159 -0
- package/src/router/handler.ts +515 -0
- package/src/router/matcher.ts +52 -0
- package/src/router/scanner.ts +272 -0
- package/src/server/index.ts +49 -0
- package/src/signal.ts +39 -0
- package/src/ssg.ts +253 -0
- package/src/test/actions.test.ts +40 -0
- package/src/test/body-limits.test.ts +83 -0
- package/src/test/errors.test.ts +53 -0
- package/src/test/fixtures/routes/[id].page.ts +3 -0
- package/src/test/fixtures/routes/_error.ts +6 -0
- package/src/test/fixtures/routes/_global.ts +8 -0
- package/src/test/fixtures/routes/_layout-template.ts +7 -0
- package/src/test/fixtures/routes/_layout.ts +7 -0
- package/src/test/fixtures/routes/_layout_scripts.ts +8 -0
- package/src/test/fixtures/routes/_middleware.ts +8 -0
- package/src/test/fixtures/routes/_redirect301_mw.ts +5 -0
- package/src/test/fixtures/routes/_redirect_mw.ts +5 -0
- package/src/test/fixtures/routes/about.page.ts +6 -0
- package/src/test/fixtures/routes/action.page.ts +11 -0
- package/src/test/fixtures/routes/api/form-all.post.ts +5 -0
- package/src/test/fixtures/routes/api/form-limited.post.ts +6 -0
- package/src/test/fixtures/routes/api/response-obj.get.ts +17 -0
- package/src/test/fixtures/routes/api/upload.post.ts +14 -0
- package/src/test/fixtures/routes/api/users.get.ts +3 -0
- package/src/test/fixtures/routes/api/xml.get.ts +5 -0
- package/src/test/fixtures/routes/auth/_middleware.ts +11 -0
- package/src/test/fixtures/routes/auth/protected.page.ts +3 -0
- package/src/test/fixtures/routes/index.page.ts +3 -0
- package/src/test/fixtures/routes/oml.page.ts +7 -0
- package/src/test/fixtures/routes/redirect.page.ts +3 -0
- package/src/test/fixtures/routes/ssg/[slug].page.ts +8 -0
- package/src/test/fixtures/routes/ssg/server.page.ts +5 -0
- package/src/test/fixtures/routes/state.page.ts +4 -0
- package/src/test/fixtures/routes/throw.page.ts +5 -0
- package/src/test/fixtures/routes/wiki/[...slug].page.ts +3 -0
- package/src/test/helpers.ts +132 -0
- package/src/test/layouts.test.ts +76 -0
- package/src/test/middleware.test.ts +69 -0
- package/src/test/multipart.test.ts +91 -0
- package/src/test/oml-routing.test.ts +59 -0
- package/src/test/oml.test.ts +429 -0
- package/src/test/redirects.test.ts +32 -0
- package/src/test/routing.test.ts +118 -0
- package/src/test/ssg.test.ts +273 -0
- package/src/test/web-response.test.ts +33 -0
- package/src/types.ts +670 -0
- package/tsconfig.client.json +17 -0
- package/tsconfig.json +20 -0
package/dist/generate.js
ADDED
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { existsSync, mkdirSync, writeFileSync } from "node:fs";
|
|
2
|
+
import { dirname, join, relative, resolve } from "node:path";
|
|
3
|
+
const VALID_TYPES = ["page", "api", "layout", "island", "middleware"];
|
|
4
|
+
const VALID_METHODS = ["get", "post", "put", "patch", "delete"];
|
|
5
|
+
function generate(args, cwd) {
|
|
6
|
+
const [type, pathArg, ...rest] = args;
|
|
7
|
+
if (!type || !VALID_TYPES.includes(type)) {
|
|
8
|
+
if (type) console.error(`[davaux] Unknown generator "${type}"`);
|
|
9
|
+
printUsage();
|
|
10
|
+
process.exit(1);
|
|
11
|
+
}
|
|
12
|
+
const routesDir = resolve(cwd, "src", "routes");
|
|
13
|
+
const islandsDir = resolve(cwd, "src", "islands");
|
|
14
|
+
switch (type) {
|
|
15
|
+
case "page":
|
|
16
|
+
genPage(pathArg, routesDir, cwd);
|
|
17
|
+
break;
|
|
18
|
+
case "api": {
|
|
19
|
+
const methodArg = getFlag("--method", rest) ?? "get";
|
|
20
|
+
if (!VALID_METHODS.includes(methodArg)) {
|
|
21
|
+
console.error(`[davaux] Invalid method "${methodArg}". Valid: ${VALID_METHODS.join(", ")}`);
|
|
22
|
+
process.exit(1);
|
|
23
|
+
}
|
|
24
|
+
genApi(pathArg, routesDir, methodArg, cwd);
|
|
25
|
+
break;
|
|
26
|
+
}
|
|
27
|
+
case "layout":
|
|
28
|
+
genLayout(pathArg, routesDir, cwd);
|
|
29
|
+
break;
|
|
30
|
+
case "island":
|
|
31
|
+
genIsland(pathArg, islandsDir, cwd);
|
|
32
|
+
break;
|
|
33
|
+
case "middleware":
|
|
34
|
+
genMiddleware(pathArg, routesDir, cwd);
|
|
35
|
+
break;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
function genPage(pathArg, routesDir, cwd) {
|
|
39
|
+
if (!pathArg) {
|
|
40
|
+
console.error("[davaux] Usage: davaux generate page <path>");
|
|
41
|
+
console.error(" Example: davaux generate page about");
|
|
42
|
+
console.error(" Example: davaux generate page blog/[slug]");
|
|
43
|
+
process.exit(1);
|
|
44
|
+
}
|
|
45
|
+
const filePath = join(routesDir, `${pathArg}.page.tsx`);
|
|
46
|
+
writeGenerated(filePath, cwd, pageTemplate(pathArg));
|
|
47
|
+
}
|
|
48
|
+
function genApi(pathArg, routesDir, method, cwd) {
|
|
49
|
+
if (!pathArg) {
|
|
50
|
+
console.error("[davaux] Usage: davaux generate api <path> [--method get|post|put|patch|delete]");
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const filePath = join(routesDir, `${pathArg}.${method}.ts`);
|
|
54
|
+
writeGenerated(filePath, cwd, apiTemplate(pathArg));
|
|
55
|
+
}
|
|
56
|
+
function genLayout(pathArg, routesDir, cwd) {
|
|
57
|
+
const filePath = pathArg ? join(routesDir, pathArg, "_layout.tsx") : join(routesDir, "_layout.tsx");
|
|
58
|
+
writeGenerated(filePath, cwd, layoutTemplate());
|
|
59
|
+
}
|
|
60
|
+
function genIsland(nameArg, islandsDir, cwd) {
|
|
61
|
+
if (!nameArg) {
|
|
62
|
+
console.error("[davaux] Usage: davaux generate island <Name>");
|
|
63
|
+
console.error(" Example: davaux generate island Counter");
|
|
64
|
+
process.exit(1);
|
|
65
|
+
}
|
|
66
|
+
const filePath = join(islandsDir, `${nameArg}.tsx`);
|
|
67
|
+
writeGenerated(filePath, cwd, islandTemplate(nameArg));
|
|
68
|
+
}
|
|
69
|
+
function genMiddleware(pathArg, routesDir, cwd) {
|
|
70
|
+
const filePath = pathArg ? join(routesDir, pathArg, "_middleware.ts") : join(routesDir, "_middleware.ts");
|
|
71
|
+
writeGenerated(filePath, cwd, middlewareTemplate());
|
|
72
|
+
}
|
|
73
|
+
function pageTemplate(routePath) {
|
|
74
|
+
const title = toTitle(lastSegment(routePath));
|
|
75
|
+
const hasParams = routePath.includes("[");
|
|
76
|
+
if (hasParams) {
|
|
77
|
+
return `import { definePage, defineStaticPaths, type ExtractParams } from 'davaux'
|
|
78
|
+
|
|
79
|
+
export const getStaticPaths = defineStaticPaths(async () => [
|
|
80
|
+
// Return one entry per URL to pre-render with \`davaux static\`
|
|
81
|
+
{ params: { ${firstParam(routePath)}: 'example' } },
|
|
82
|
+
])
|
|
83
|
+
|
|
84
|
+
export default definePage<ExtractParams<'${routePath}'>>((ctx) => {
|
|
85
|
+
return <h1>${title}: {ctx.params.${firstParam(routePath)}}</h1>
|
|
86
|
+
})
|
|
87
|
+
`;
|
|
88
|
+
}
|
|
89
|
+
return `import { definePage } from 'davaux'
|
|
90
|
+
|
|
91
|
+
export default definePage((ctx) => {
|
|
92
|
+
ctx.head.title = '${title}'
|
|
93
|
+
return <h1>${title}</h1>
|
|
94
|
+
})
|
|
95
|
+
`;
|
|
96
|
+
}
|
|
97
|
+
function apiTemplate(routePath) {
|
|
98
|
+
const hasParams = routePath.includes("[");
|
|
99
|
+
if (hasParams) {
|
|
100
|
+
return `import { defineHandler, type ExtractParams } from 'davaux'
|
|
101
|
+
|
|
102
|
+
export default defineHandler<unknown, ExtractParams<'${routePath}'>>(async (_ctx) => {
|
|
103
|
+
return { ok: true }
|
|
104
|
+
})
|
|
105
|
+
`;
|
|
106
|
+
}
|
|
107
|
+
return `import { defineHandler } from 'davaux'
|
|
108
|
+
|
|
109
|
+
export default defineHandler(async (_ctx) => {
|
|
110
|
+
return { ok: true }
|
|
111
|
+
})
|
|
112
|
+
`;
|
|
113
|
+
}
|
|
114
|
+
function layoutTemplate() {
|
|
115
|
+
return `import { defineLayout } from 'davaux'
|
|
116
|
+
|
|
117
|
+
export default defineLayout(({ children }) => (
|
|
118
|
+
<div>
|
|
119
|
+
{children as unknown as string}
|
|
120
|
+
</div>
|
|
121
|
+
))
|
|
122
|
+
`;
|
|
123
|
+
}
|
|
124
|
+
function islandTemplate(name) {
|
|
125
|
+
return `import { createSignal } from 'davaux/client'
|
|
126
|
+
|
|
127
|
+
export default function ${name}() {
|
|
128
|
+
const [count, setCount] = createSignal(0)
|
|
129
|
+
return (
|
|
130
|
+
<button type="button" onClick={() => setCount(count() + 1)}>
|
|
131
|
+
{() => count()}
|
|
132
|
+
</button>
|
|
133
|
+
)
|
|
134
|
+
}
|
|
135
|
+
`;
|
|
136
|
+
}
|
|
137
|
+
function middlewareTemplate() {
|
|
138
|
+
return `import { defineMiddleware } from 'davaux'
|
|
139
|
+
|
|
140
|
+
export default defineMiddleware(async (_ctx, next) => {
|
|
141
|
+
await next()
|
|
142
|
+
})
|
|
143
|
+
`;
|
|
144
|
+
}
|
|
145
|
+
function writeGenerated(filePath, cwd, content) {
|
|
146
|
+
if (existsSync(filePath)) {
|
|
147
|
+
console.error(`[davaux] File already exists: ${relative(cwd, filePath)}`);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
151
|
+
writeFileSync(filePath, content, "utf8");
|
|
152
|
+
console.log(`[davaux] Created ${relative(cwd, filePath)}`);
|
|
153
|
+
}
|
|
154
|
+
function lastSegment(routePath) {
|
|
155
|
+
const segments = routePath.split("/");
|
|
156
|
+
return segments[segments.length - 1].replace(/\[.*?\]/g, "").replace(/[-_]/g, " ").trim();
|
|
157
|
+
}
|
|
158
|
+
function toTitle(segment) {
|
|
159
|
+
return segment.replace(/\b\w/g, (c) => c.toUpperCase()).trim() || "Page";
|
|
160
|
+
}
|
|
161
|
+
function firstParam(routePath) {
|
|
162
|
+
const match = routePath.match(/\[(\w+)\]/);
|
|
163
|
+
return match ? match[1] : "id";
|
|
164
|
+
}
|
|
165
|
+
function getFlag(name, argv) {
|
|
166
|
+
const idx = argv.indexOf(name);
|
|
167
|
+
return idx !== -1 ? argv[idx + 1] : void 0;
|
|
168
|
+
}
|
|
169
|
+
function printUsage() {
|
|
170
|
+
console.error("Usage: davaux generate <type> [path]");
|
|
171
|
+
console.error("");
|
|
172
|
+
console.error("Types:");
|
|
173
|
+
console.error(" page <path> Page route");
|
|
174
|
+
console.error(" api <path> [--method <method>] API route (default: get)");
|
|
175
|
+
console.error(" layout [path] Layout (root if no path given)");
|
|
176
|
+
console.error(" island <Name> Client island component");
|
|
177
|
+
console.error(" middleware [path] Middleware (root if no path given)");
|
|
178
|
+
console.error("");
|
|
179
|
+
console.error("Examples:");
|
|
180
|
+
console.error(" davaux generate page about");
|
|
181
|
+
console.error(" davaux generate page blog/[slug]");
|
|
182
|
+
console.error(" davaux generate api users");
|
|
183
|
+
console.error(" davaux generate api users --method post");
|
|
184
|
+
console.error(" davaux generate layout admin");
|
|
185
|
+
console.error(" davaux generate island Counter");
|
|
186
|
+
console.error(" davaux generate middleware admin");
|
|
187
|
+
}
|
|
188
|
+
export {
|
|
189
|
+
generate
|
|
190
|
+
};
|
|
191
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/generate.ts"],
|
|
4
|
+
"sourcesContent": ["import { existsSync, mkdirSync, writeFileSync } from 'node:fs'\nimport { dirname, join, relative, resolve } from 'node:path'\n\nconst VALID_TYPES = ['page', 'api', 'layout', 'island', 'middleware'] as const\ntype GenerateType = (typeof VALID_TYPES)[number]\n\nconst VALID_METHODS = ['get', 'post', 'put', 'patch', 'delete'] as const\ntype HttpMethod = (typeof VALID_METHODS)[number]\n\nexport function generate(args: string[], cwd: string): void {\n const [type, pathArg, ...rest] = args\n\n if (!type || !VALID_TYPES.includes(type as GenerateType)) {\n if (type) console.error(`[davaux] Unknown generator \"${type}\"`)\n printUsage()\n process.exit(1)\n }\n\n const routesDir = resolve(cwd, 'src', 'routes')\n const islandsDir = resolve(cwd, 'src', 'islands')\n\n switch (type as GenerateType) {\n case 'page':\n genPage(pathArg, routesDir, cwd)\n break\n case 'api': {\n const methodArg = getFlag('--method', rest) ?? 'get'\n if (!VALID_METHODS.includes(methodArg as HttpMethod)) {\n console.error(`[davaux] Invalid method \"${methodArg}\". Valid: ${VALID_METHODS.join(', ')}`)\n process.exit(1)\n }\n genApi(pathArg, routesDir, methodArg as HttpMethod, cwd)\n break\n }\n case 'layout':\n genLayout(pathArg, routesDir, cwd)\n break\n case 'island':\n genIsland(pathArg, islandsDir, cwd)\n break\n case 'middleware':\n genMiddleware(pathArg, routesDir, cwd)\n break\n }\n}\n\n// \u2500\u2500\u2500 Generators \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction genPage(pathArg: string | undefined, routesDir: string, cwd: string) {\n if (!pathArg) {\n console.error('[davaux] Usage: davaux generate page <path>')\n console.error(' Example: davaux generate page about')\n console.error(' Example: davaux generate page blog/[slug]')\n process.exit(1)\n }\n const filePath = join(routesDir, `${pathArg}.page.tsx`)\n writeGenerated(filePath, cwd, pageTemplate(pathArg))\n}\n\nfunction genApi(pathArg: string | undefined, routesDir: string, method: HttpMethod, cwd: string) {\n if (!pathArg) {\n console.error('[davaux] Usage: davaux generate api <path> [--method get|post|put|patch|delete]')\n process.exit(1)\n }\n const filePath = join(routesDir, `${pathArg}.${method}.ts`)\n writeGenerated(filePath, cwd, apiTemplate(pathArg))\n}\n\nfunction genLayout(pathArg: string | undefined, routesDir: string, cwd: string) {\n const filePath = pathArg\n ? join(routesDir, pathArg, '_layout.tsx')\n : join(routesDir, '_layout.tsx')\n writeGenerated(filePath, cwd, layoutTemplate())\n}\n\nfunction genIsland(nameArg: string | undefined, islandsDir: string, cwd: string) {\n if (!nameArg) {\n console.error('[davaux] Usage: davaux generate island <Name>')\n console.error(' Example: davaux generate island Counter')\n process.exit(1)\n }\n const filePath = join(islandsDir, `${nameArg}.tsx`)\n writeGenerated(filePath, cwd, islandTemplate(nameArg))\n}\n\nfunction genMiddleware(pathArg: string | undefined, routesDir: string, cwd: string) {\n const filePath = pathArg\n ? join(routesDir, pathArg, '_middleware.ts')\n : join(routesDir, '_middleware.ts')\n writeGenerated(filePath, cwd, middlewareTemplate())\n}\n\n// \u2500\u2500\u2500 Templates \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction pageTemplate(routePath: string): string {\n const title = toTitle(lastSegment(routePath))\n const hasParams = routePath.includes('[')\n\n if (hasParams) {\n return `import { definePage, defineStaticPaths, type ExtractParams } from 'davaux'\n\nexport const getStaticPaths = defineStaticPaths(async () => [\n // Return one entry per URL to pre-render with \\`davaux static\\`\n { params: { ${firstParam(routePath)}: 'example' } },\n])\n\nexport default definePage<ExtractParams<'${routePath}'>>((ctx) => {\n return <h1>${title}: {ctx.params.${firstParam(routePath)}}</h1>\n})\n`\n }\n\n return `import { definePage } from 'davaux'\n\nexport default definePage((ctx) => {\n ctx.head.title = '${title}'\n return <h1>${title}</h1>\n})\n`\n}\n\nfunction apiTemplate(routePath: string): string {\n const hasParams = routePath.includes('[')\n\n if (hasParams) {\n return `import { defineHandler, type ExtractParams } from 'davaux'\n\nexport default defineHandler<unknown, ExtractParams<'${routePath}'>>(async (_ctx) => {\n return { ok: true }\n})\n`\n }\n\n return `import { defineHandler } from 'davaux'\n\nexport default defineHandler(async (_ctx) => {\n return { ok: true }\n})\n`\n}\n\nfunction layoutTemplate(): string {\n return `import { defineLayout } from 'davaux'\n\nexport default defineLayout(({ children }) => (\n <div>\n {children as unknown as string}\n </div>\n))\n`\n}\n\nfunction islandTemplate(name: string): string {\n return `import { createSignal } from 'davaux/client'\n\nexport default function ${name}() {\n const [count, setCount] = createSignal(0)\n return (\n <button type=\"button\" onClick={() => setCount(count() + 1)}>\n {() => count()}\n </button>\n )\n}\n`\n}\n\nfunction middlewareTemplate(): string {\n return `import { defineMiddleware } from 'davaux'\n\nexport default defineMiddleware(async (_ctx, next) => {\n await next()\n})\n`\n}\n\n// \u2500\u2500\u2500 Helpers \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\nfunction writeGenerated(filePath: string, cwd: string, content: string) {\n if (existsSync(filePath)) {\n console.error(`[davaux] File already exists: ${relative(cwd, filePath)}`)\n process.exit(1)\n }\n mkdirSync(dirname(filePath), { recursive: true })\n writeFileSync(filePath, content, 'utf8')\n console.log(`[davaux] Created ${relative(cwd, filePath)}`)\n}\n\nfunction lastSegment(routePath: string): string {\n const segments = routePath.split('/')\n return segments[segments.length - 1]\n .replace(/\\[.*?\\]/g, '')\n .replace(/[-_]/g, ' ')\n .trim()\n}\n\nfunction toTitle(segment: string): string {\n return segment.replace(/\\b\\w/g, (c) => c.toUpperCase()).trim() || 'Page'\n}\n\nfunction firstParam(routePath: string): string {\n const match = routePath.match(/\\[(\\w+)\\]/)\n return match ? match[1] : 'id'\n}\n\nfunction getFlag(name: string, argv: string[]): string | undefined {\n const idx = argv.indexOf(name)\n return idx !== -1 ? argv[idx + 1] : undefined\n}\n\nfunction printUsage() {\n console.error('Usage: davaux generate <type> [path]')\n console.error('')\n console.error('Types:')\n console.error(' page <path> Page route')\n console.error(' api <path> [--method <method>] API route (default: get)')\n console.error(' layout [path] Layout (root if no path given)')\n console.error(' island <Name> Client island component')\n console.error(' middleware [path] Middleware (root if no path given)')\n console.error('')\n console.error('Examples:')\n console.error(' davaux generate page about')\n console.error(' davaux generate page blog/[slug]')\n console.error(' davaux generate api users')\n console.error(' davaux generate api users --method post')\n console.error(' davaux generate layout admin')\n console.error(' davaux generate island Counter')\n console.error(' davaux generate middleware admin')\n}\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,YAAY,WAAW,qBAAqB;AACrD,SAAS,SAAS,MAAM,UAAU,eAAe;AAEjD,MAAM,cAAc,CAAC,QAAQ,OAAO,UAAU,UAAU,YAAY;AAGpE,MAAM,gBAAgB,CAAC,OAAO,QAAQ,OAAO,SAAS,QAAQ;AAGvD,SAAS,SAAS,MAAgB,KAAmB;AAC1D,QAAM,CAAC,MAAM,SAAS,GAAG,IAAI,IAAI;AAEjC,MAAI,CAAC,QAAQ,CAAC,YAAY,SAAS,IAAoB,GAAG;AACxD,QAAI,KAAM,SAAQ,MAAM,+BAA+B,IAAI,GAAG;AAC9D,eAAW;AACX,YAAQ,KAAK,CAAC;AAAA,EAChB;AAEA,QAAM,YAAY,QAAQ,KAAK,OAAO,QAAQ;AAC9C,QAAM,aAAa,QAAQ,KAAK,OAAO,SAAS;AAEhD,UAAQ,MAAsB;AAAA,IAC5B,KAAK;AACH,cAAQ,SAAS,WAAW,GAAG;AAC/B;AAAA,IACF,KAAK,OAAO;AACV,YAAM,YAAY,QAAQ,YAAY,IAAI,KAAK;AAC/C,UAAI,CAAC,cAAc,SAAS,SAAuB,GAAG;AACpD,gBAAQ,MAAM,4BAA4B,SAAS,aAAa,cAAc,KAAK,IAAI,CAAC,EAAE;AAC1F,gBAAQ,KAAK,CAAC;AAAA,MAChB;AACA,aAAO,SAAS,WAAW,WAAyB,GAAG;AACvD;AAAA,IACF;AAAA,IACA,KAAK;AACH,gBAAU,SAAS,WAAW,GAAG;AACjC;AAAA,IACF,KAAK;AACH,gBAAU,SAAS,YAAY,GAAG;AAClC;AAAA,IACF,KAAK;AACH,oBAAc,SAAS,WAAW,GAAG;AACrC;AAAA,EACJ;AACF;AAIA,SAAS,QAAQ,SAA6B,WAAmB,KAAa;AAC5E,MAAI,CAAC,SAAS;AACZ,YAAQ,MAAM,6CAA6C;AAC3D,YAAQ,MAAM,uCAAuC;AACrD,YAAQ,MAAM,6CAA6C;AAC3D,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM,WAAW,KAAK,WAAW,GAAG,OAAO,WAAW;AACtD,iBAAe,UAAU,KAAK,aAAa,OAAO,CAAC;AACrD;AAEA,SAAS,OAAO,SAA6B,WAAmB,QAAoB,KAAa;AAC/F,MAAI,CAAC,SAAS;AACZ,YAAQ,MAAM,iFAAiF;AAC/F,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM,WAAW,KAAK,WAAW,GAAG,OAAO,IAAI,MAAM,KAAK;AAC1D,iBAAe,UAAU,KAAK,YAAY,OAAO,CAAC;AACpD;AAEA,SAAS,UAAU,SAA6B,WAAmB,KAAa;AAC9E,QAAM,WAAW,UACb,KAAK,WAAW,SAAS,aAAa,IACtC,KAAK,WAAW,aAAa;AACjC,iBAAe,UAAU,KAAK,eAAe,CAAC;AAChD;AAEA,SAAS,UAAU,SAA6B,YAAoB,KAAa;AAC/E,MAAI,CAAC,SAAS;AACZ,YAAQ,MAAM,+CAA+C;AAC7D,YAAQ,MAAM,2CAA2C;AACzD,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,QAAM,WAAW,KAAK,YAAY,GAAG,OAAO,MAAM;AAClD,iBAAe,UAAU,KAAK,eAAe,OAAO,CAAC;AACvD;AAEA,SAAS,cAAc,SAA6B,WAAmB,KAAa;AAClF,QAAM,WAAW,UACb,KAAK,WAAW,SAAS,gBAAgB,IACzC,KAAK,WAAW,gBAAgB;AACpC,iBAAe,UAAU,KAAK,mBAAmB,CAAC;AACpD;AAIA,SAAS,aAAa,WAA2B;AAC/C,QAAM,QAAQ,QAAQ,YAAY,SAAS,CAAC;AAC5C,QAAM,YAAY,UAAU,SAAS,GAAG;AAExC,MAAI,WAAW;AACb,WAAO;AAAA;AAAA;AAAA;AAAA,gBAIK,WAAW,SAAS,CAAC;AAAA;AAAA;AAAA,2CAGM,SAAS;AAAA,eACrC,KAAK,iBAAiB,WAAW,SAAS,CAAC;AAAA;AAAA;AAAA,EAGxD;AAEA,SAAO;AAAA;AAAA;AAAA,sBAGa,KAAK;AAAA,eACZ,KAAK;AAAA;AAAA;AAGpB;AAEA,SAAS,YAAY,WAA2B;AAC9C,QAAM,YAAY,UAAU,SAAS,GAAG;AAExC,MAAI,WAAW;AACb,WAAO;AAAA;AAAA,uDAE4C,SAAS;AAAA;AAAA;AAAA;AAAA,EAI9D;AAEA,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAMT;AAEA,SAAS,iBAAyB;AAChC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAQT;AAEA,SAAS,eAAe,MAAsB;AAC5C,SAAO;AAAA;AAAA,0BAEiB,IAAI;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAS9B;AAEA,SAAS,qBAA6B;AACpC,SAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAMT;AAIA,SAAS,eAAe,UAAkB,KAAa,SAAiB;AACtE,MAAI,WAAW,QAAQ,GAAG;AACxB,YAAQ,MAAM,iCAAiC,SAAS,KAAK,QAAQ,CAAC,EAAE;AACxE,YAAQ,KAAK,CAAC;AAAA,EAChB;AACA,YAAU,QAAQ,QAAQ,GAAG,EAAE,WAAW,KAAK,CAAC;AAChD,gBAAc,UAAU,SAAS,MAAM;AACvC,UAAQ,IAAI,oBAAoB,SAAS,KAAK,QAAQ,CAAC,EAAE;AAC3D;AAEA,SAAS,YAAY,WAA2B;AAC9C,QAAM,WAAW,UAAU,MAAM,GAAG;AACpC,SAAO,SAAS,SAAS,SAAS,CAAC,EAChC,QAAQ,YAAY,EAAE,EACtB,QAAQ,SAAS,GAAG,EACpB,KAAK;AACV;AAEA,SAAS,QAAQ,SAAyB;AACxC,SAAO,QAAQ,QAAQ,SAAS,CAAC,MAAM,EAAE,YAAY,CAAC,EAAE,KAAK,KAAK;AACpE;AAEA,SAAS,WAAW,WAA2B;AAC7C,QAAM,QAAQ,UAAU,MAAM,WAAW;AACzC,SAAO,QAAQ,MAAM,CAAC,IAAI;AAC5B;AAEA,SAAS,QAAQ,MAAc,MAAoC;AACjE,QAAM,MAAM,KAAK,QAAQ,IAAI;AAC7B,SAAO,QAAQ,KAAK,KAAK,MAAM,CAAC,IAAI;AACtC;AAEA,SAAS,aAAa;AACpB,UAAQ,MAAM,sCAAsC;AACpD,UAAQ,MAAM,EAAE;AAChB,UAAQ,MAAM,QAAQ;AACtB,UAAQ,MAAM,6CAA6C;AAC3D,UAAQ,MAAM,2DAA2D;AACzE,UAAQ,MAAM,iEAAiE;AAC/E,UAAQ,MAAM,0DAA0D;AACxE,UAAQ,MAAM,qEAAqE;AACnF,UAAQ,MAAM,EAAE;AAChB,UAAQ,MAAM,WAAW;AACzB,UAAQ,MAAM,8BAA8B;AAC5C,UAAQ,MAAM,oCAAoC;AAClD,UAAQ,MAAM,6BAA6B;AAC3C,UAAQ,MAAM,2CAA2C;AACzD,UAAQ,MAAM,gCAAgC;AAC9C,UAAQ,MAAM,kCAAkC;AAChD,UAAQ,MAAM,oCAAoC;AACpD;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { island } from './island.js';
|
|
2
|
+
export type { JSX } from './jsx-runtime.js';
|
|
3
|
+
export { createLink } from './link.js';
|
|
4
|
+
export type { OmlBlueprint, OmlComponent, OmlElement, OmlFragment, OmlFragmentOptions, OmlNode, OmlPageHandler, OmlPropSchema, OmlProps, OmlPropType, OmlRaw, OmlText, } from './oml/index.js';
|
|
5
|
+
export { blueprintToFile, clearAllFragments, defineFragment, defineOmlPage, parseOml, parseOmlBlueprint, renderToHtml, renderToJsx, } from './oml/index.js';
|
|
6
|
+
export { batch, createEffect, createMemo, createSignal, untrack } from './signal.js';
|
|
7
|
+
export type { ActionFn, ApiHandler, CookieOptions, ErrorPageHandler, ErrorPageProps, ExtractParams, GetStaticPathsFn, IslandFile, LayoutFile, LayoutHandler, LayoutProps, MiddlewareFile, MiddlewareFn, MultipartFile, MultipartResult, PageHandler, RequestContext, RouteFile, RouteType, ScanResult, State, StaticPath, Validator, } from './types.js';
|
|
8
|
+
export { CookieJar, defineAction, defineError, defineHandler, defineLayout, defineMiddleware, definePage, defineStaticPaths, PayloadTooLargeError, RedirectError, redirect, ValidationError, } from './types.js';
|
|
9
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AACpC,YAAY,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,YAAY,EACV,YAAY,EACZ,YAAY,EACZ,UAAU,EACV,WAAW,EACX,kBAAkB,EAClB,OAAO,EACP,cAAc,EACd,aAAa,EACb,QAAQ,EACR,WAAW,EACX,MAAM,EACN,OAAO,GACR,MAAM,gBAAgB,CAAA;AACvB,OAAO,EACL,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,aAAa,EACb,QAAQ,EACR,iBAAiB,EACjB,YAAY,EACZ,WAAW,GACZ,MAAM,gBAAgB,CAAA;AACvB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,aAAa,CAAA;AACpF,YAAY,EACV,QAAQ,EACR,UAAU,EACV,aAAa,EACb,gBAAgB,EAChB,cAAc,EACd,aAAa,EACb,gBAAgB,EAChB,UAAU,EACV,UAAU,EACV,aAAa,EACb,WAAW,EACX,cAAc,EACd,YAAY,EACZ,aAAa,EACb,eAAe,EACf,WAAW,EACX,cAAc,EACd,SAAS,EACT,SAAS,EACT,UAAU,EACV,KAAK,EACL,UAAU,EACV,SAAS,GACV,MAAM,YAAY,CAAA;AACnB,OAAO,EACL,SAAS,EACT,YAAY,EACZ,WAAW,EACX,aAAa,EACb,YAAY,EACZ,gBAAgB,EAChB,UAAU,EACV,iBAAiB,EACjB,oBAAoB,EACpB,aAAa,EACb,QAAQ,EACR,eAAe,GAChB,MAAM,YAAY,CAAA"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { island } from "./island.js";
|
|
2
|
+
import { createLink } from "./link.js";
|
|
3
|
+
import {
|
|
4
|
+
blueprintToFile,
|
|
5
|
+
clearAllFragments,
|
|
6
|
+
defineFragment,
|
|
7
|
+
defineOmlPage,
|
|
8
|
+
parseOml,
|
|
9
|
+
parseOmlBlueprint,
|
|
10
|
+
renderToHtml,
|
|
11
|
+
renderToJsx
|
|
12
|
+
} from "./oml/index.js";
|
|
13
|
+
import { batch, createEffect, createMemo, createSignal, untrack } from "./signal.js";
|
|
14
|
+
import {
|
|
15
|
+
CookieJar,
|
|
16
|
+
defineAction,
|
|
17
|
+
defineError,
|
|
18
|
+
defineHandler,
|
|
19
|
+
defineLayout,
|
|
20
|
+
defineMiddleware,
|
|
21
|
+
definePage,
|
|
22
|
+
defineStaticPaths,
|
|
23
|
+
PayloadTooLargeError,
|
|
24
|
+
RedirectError,
|
|
25
|
+
redirect,
|
|
26
|
+
ValidationError
|
|
27
|
+
} from "./types.js";
|
|
28
|
+
export {
|
|
29
|
+
CookieJar,
|
|
30
|
+
PayloadTooLargeError,
|
|
31
|
+
RedirectError,
|
|
32
|
+
ValidationError,
|
|
33
|
+
batch,
|
|
34
|
+
blueprintToFile,
|
|
35
|
+
clearAllFragments,
|
|
36
|
+
createEffect,
|
|
37
|
+
createLink,
|
|
38
|
+
createMemo,
|
|
39
|
+
createSignal,
|
|
40
|
+
defineAction,
|
|
41
|
+
defineError,
|
|
42
|
+
defineFragment,
|
|
43
|
+
defineHandler,
|
|
44
|
+
defineLayout,
|
|
45
|
+
defineMiddleware,
|
|
46
|
+
defineOmlPage,
|
|
47
|
+
definePage,
|
|
48
|
+
defineStaticPaths,
|
|
49
|
+
island,
|
|
50
|
+
parseOml,
|
|
51
|
+
parseOmlBlueprint,
|
|
52
|
+
redirect,
|
|
53
|
+
renderToHtml,
|
|
54
|
+
renderToJsx,
|
|
55
|
+
untrack
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["export { island } from './island.js'\nexport type { JSX } from './jsx-runtime.js'\nexport { createLink } from './link.js'\nexport type {\n OmlBlueprint,\n OmlComponent,\n OmlElement,\n OmlFragment,\n OmlFragmentOptions,\n OmlNode,\n OmlPageHandler,\n OmlPropSchema,\n OmlProps,\n OmlPropType,\n OmlRaw,\n OmlText,\n} from './oml/index.js'\nexport {\n blueprintToFile,\n clearAllFragments,\n defineFragment,\n defineOmlPage,\n parseOml,\n parseOmlBlueprint,\n renderToHtml,\n renderToJsx,\n} from './oml/index.js'\nexport { batch, createEffect, createMemo, createSignal, untrack } from './signal.js'\nexport type {\n ActionFn,\n ApiHandler,\n CookieOptions,\n ErrorPageHandler,\n ErrorPageProps,\n ExtractParams,\n GetStaticPathsFn,\n IslandFile,\n LayoutFile,\n LayoutHandler,\n LayoutProps,\n MiddlewareFile,\n MiddlewareFn,\n MultipartFile,\n MultipartResult,\n PageHandler,\n RequestContext,\n RouteFile,\n RouteType,\n ScanResult,\n State,\n StaticPath,\n Validator,\n} from './types.js'\nexport {\n CookieJar,\n defineAction,\n defineError,\n defineHandler,\n defineLayout,\n defineMiddleware,\n definePage,\n defineStaticPaths,\n PayloadTooLargeError,\n RedirectError,\n redirect,\n ValidationError,\n} from './types.js'\n"],
|
|
5
|
+
"mappings": "AAAA,SAAS,cAAc;AAEvB,SAAS,kBAAkB;AAe3B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,OAAO,cAAc,YAAY,cAAc,eAAe;AA0BvE;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,OACK;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
package/dist/island.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type { JSX } from './jsx-runtime.js';
|
|
2
|
+
/** A component intended to run on both server and client. */
|
|
3
|
+
export type IslandComponent<P extends Record<string, unknown> = Record<string, unknown>> = (props: P) => JSX.Element;
|
|
4
|
+
/**
|
|
5
|
+
* Mark a component as a client island. Write the component once — the framework
|
|
6
|
+
* compiles it for both server and client automatically.
|
|
7
|
+
*
|
|
8
|
+
* On the server: renders initial HTML and embeds serialized props in `data-props`.
|
|
9
|
+
* On the client: `hydrate()` picks up `[data-island]` elements and remounts the
|
|
10
|
+
* component with full signal reactivity.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* // src/islands/Counter.tsx
|
|
14
|
+
* import { island } from 'davaux'
|
|
15
|
+
* import { createSignal } from 'davaux/client'
|
|
16
|
+
*
|
|
17
|
+
* function Counter({ initial = 0 }: { initial?: number }) {
|
|
18
|
+
* const [count, setCount] = createSignal(initial)
|
|
19
|
+
* return <button onClick={() => setCount(c => c + 1)}>{() => count()}</button>
|
|
20
|
+
* }
|
|
21
|
+
* export default island(Counter)
|
|
22
|
+
*/
|
|
23
|
+
export declare function island<P extends Record<string, unknown>>(Component: IslandComponent<P>, islandId?: string): (props: P) => Promise<string>;
|
|
24
|
+
//# sourceMappingURL=island.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"island.d.ts","sourceRoot":"","sources":["../src/island.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAA;AAE3C,6DAA6D;AAC7D,MAAM,MAAM,eAAe,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CACzF,KAAK,EAAE,CAAC,KACL,GAAG,CAAC,OAAO,CAAA;AAIhB;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACtD,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,EAC7B,QAAQ,CAAC,EAAE,MAAM,GAChB,CAAC,KAAK,EAAE,CAAC,KAAK,OAAO,CAAC,MAAM,CAAC,CAe/B"}
|
package/dist/island.js
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
let counter = 0;
|
|
2
|
+
function island(Component, islandId) {
|
|
3
|
+
const id = islandId ?? Component.name ?? `island-${counter++}`;
|
|
4
|
+
const wrapper = async (props) => {
|
|
5
|
+
const rendered = await Component(props);
|
|
6
|
+
const serialized = JSON.stringify(props).replace(/&/g, "\\u0026").replace(/</g, "\\u003c").replace(/>/g, "\\u003e").replace(/'/g, "\\u0027");
|
|
7
|
+
return `<div data-island="${id}" data-props='${serialized}'>${rendered}</div>`;
|
|
8
|
+
};
|
|
9
|
+
Object.defineProperty(wrapper, "name", { value: id, configurable: true });
|
|
10
|
+
return wrapper;
|
|
11
|
+
}
|
|
12
|
+
export {
|
|
13
|
+
island
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=island.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../src/island.ts"],
|
|
4
|
+
"sourcesContent": ["import type { JSX } from './jsx-runtime.js'\n\n/** A component intended to run on both server and client. */\nexport type IslandComponent<P extends Record<string, unknown> = Record<string, unknown>> = (\n props: P,\n) => JSX.Element\n\nlet counter = 0\n\n/**\n * Mark a component as a client island. Write the component once \u2014 the framework\n * compiles it for both server and client automatically.\n *\n * On the server: renders initial HTML and embeds serialized props in `data-props`.\n * On the client: `hydrate()` picks up `[data-island]` elements and remounts the\n * component with full signal reactivity.\n *\n * @example\n * // src/islands/Counter.tsx\n * import { island } from 'davaux'\n * import { createSignal } from 'davaux/client'\n *\n * function Counter({ initial = 0 }: { initial?: number }) {\n * const [count, setCount] = createSignal(initial)\n * return <button onClick={() => setCount(c => c + 1)}>{() => count()}</button>\n * }\n * export default island(Counter)\n */\nexport function island<P extends Record<string, unknown>>(\n Component: IslandComponent<P>,\n islandId?: string,\n): (props: P) => Promise<string> {\n const id = islandId ?? Component.name ?? `island-${counter++}`\n\n const wrapper = async (props: P): Promise<string> => {\n const rendered = await (Component(props) as unknown as Promise<string> | string)\n const serialized = JSON.stringify(props)\n .replace(/&/g, '\\\\u0026')\n .replace(/</g, '\\\\u003c')\n .replace(/>/g, '\\\\u003e')\n .replace(/'/g, '\\\\u0027')\n\n return `<div data-island=\"${id}\" data-props='${serialized}'>${rendered}</div>`\n }\n Object.defineProperty(wrapper, 'name', { value: id, configurable: true })\n return wrapper\n}\n"],
|
|
5
|
+
"mappings": "AAOA,IAAI,UAAU;AAqBP,SAAS,OACd,WACA,UAC+B;AAC/B,QAAM,KAAK,YAAY,UAAU,QAAQ,UAAU,SAAS;AAE5D,QAAM,UAAU,OAAO,UAA8B;AACnD,UAAM,WAAW,MAAO,UAAU,KAAK;AACvC,UAAM,aAAa,KAAK,UAAU,KAAK,EACpC,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS,EACvB,QAAQ,MAAM,SAAS;AAE1B,WAAO,qBAAqB,EAAE,iBAAiB,UAAU,KAAK,QAAQ;AAAA,EACxE;AACA,SAAO,eAAe,SAAS,QAAQ,EAAE,OAAO,IAAI,cAAc,KAAK,CAAC;AACxE,SAAO;AACT;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|