@batijs/cli 0.0.194 → 0.0.196
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/dist/boilerplates/@batijs/auth0/files/$.env.js +5 -9
- package/dist/boilerplates/@batijs/auth0/files/$README.md.js +8 -17
- package/dist/boilerplates/@batijs/authjs/files/server/authjs-handler.ts +100 -0
- package/dist/boilerplates/@batijs/authjs/types/server/authjs-handler.d.ts +16 -0
- package/dist/boilerplates/@batijs/edgedb/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/eslint/files/$package.json.js +2 -2
- package/dist/boilerplates/@batijs/eslint/files/.eslintrc.json +15 -2
- package/dist/boilerplates/@batijs/express/files/$package.json.js +10 -11
- package/dist/boilerplates/@batijs/express/files/express-entry.ts +51 -144
- package/dist/boilerplates/@batijs/express/types/express-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/fastify/files/$package.json.js +8 -12
- package/dist/boilerplates/@batijs/fastify/files/fastify-entry.ts +63 -149
- package/dist/boilerplates/@batijs/fastify/types/fastify-entry.d.ts +6 -0
- package/dist/boilerplates/@batijs/firebase-auth/files/$package.json.js +11 -3
- package/dist/boilerplates/@batijs/firebase-auth/files/libs/firebaseAdmin.ts +2 -1
- package/dist/boilerplates/@batijs/firebase-auth/files/server/firebase-auth-middleware.ts +72 -0
- package/dist/boilerplates/@batijs/firebase-auth/types/libs/firebaseAdmin.d.ts +2 -1
- package/dist/boilerplates/@batijs/firebase-auth/types/server/firebase-auth-middleware.d.ts +4 -0
- package/dist/boilerplates/@batijs/h3/files/$package.json.js +6 -8
- package/dist/boilerplates/@batijs/h3/files/h3-entry.ts +36 -175
- package/dist/boilerplates/@batijs/h3/types/h3-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/hattip/files/$package.json.js +8 -4
- package/dist/boilerplates/@batijs/hattip/files/hattip-entry.ts +40 -60
- package/dist/boilerplates/@batijs/hattip/types/hattip-entry.d.ts +1 -0
- package/dist/boilerplates/@batijs/hono/files/$package.json.js +8 -6
- package/dist/boilerplates/@batijs/hono/files/hono-entry.ts +54 -116
- package/dist/boilerplates/@batijs/hono/types/hono-entry.d.ts +5 -0
- package/dist/boilerplates/@batijs/react/files/$.eslintrc.json.js +0 -4
- package/dist/boilerplates/@batijs/react/files/$package.json.js +6 -6
- package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/TodoList.tsx +4 -4
- package/dist/boilerplates/@batijs/shared/files/package.json +2 -1
- package/dist/boilerplates/@batijs/shared-server/files/server/vike-handler.ts +15 -0
- package/dist/boilerplates/@batijs/shared-server/types/server/vike-handler.d.ts +2 -0
- package/dist/boilerplates/@batijs/solid/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+Page.tsx +6 -3
- package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+data.ts +9 -0
- package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/TodoList.tsx +4 -4
- package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+Page.d.ts +1 -4
- package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+data.d.ts +2 -0
- package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+Page.tsx +6 -3
- package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+data.ts +9 -0
- package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/TodoList.tsx +4 -4
- package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+Page.d.ts +1 -4
- package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+data.d.ts +2 -0
- package/dist/boilerplates/@batijs/tailwindcss/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/telefunc/files/$package.json.js +13 -1
- package/dist/boilerplates/@batijs/telefunc/files/server/telefunc-handler.ts +20 -0
- package/dist/boilerplates/@batijs/telefunc/types/server/telefunc-handler.d.ts +2 -0
- package/dist/boilerplates/@batijs/vercel/files/$package.json.js +3 -3
- package/dist/boilerplates/@batijs/vue/files/$package.json.js +1 -1
- package/dist/boilerplates/@batijs/vue-telefunc/files/components/TodoList.vue +6 -6
- package/dist/boilerplates/@batijs/vue-trpc/files/components/TodoListTrpc.vue +6 -6
- package/dist/boilerplates/boilerplates.json +35 -0
- package/dist/index.js +3 -6
- package/package.json +7 -7
- package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+onBeforeRender.ts +0 -15
- package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+onBeforeRender.d.ts +0 -8
- package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+onBeforeRender.ts +0 -15
- package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+onBeforeRender.d.ts +0 -8
|
@@ -1,20 +1,49 @@
|
|
|
1
|
-
|
|
2
|
-
import
|
|
1
|
+
// BATI.has("auth0")
|
|
2
|
+
import "dotenv/config";
|
|
3
|
+
import { authjsHandler, authjsSessionMiddleware } from "@batijs/authjs/server/authjs-handler";
|
|
4
|
+
import {
|
|
5
|
+
firebaseAuthLoginHandler,
|
|
6
|
+
firebaseAuthLogoutHandler,
|
|
7
|
+
firebaseAuthMiddleware,
|
|
8
|
+
} from "@batijs/firebase-auth/server/firebase-auth-middleware";
|
|
9
|
+
import { vikeHandler } from "@batijs/shared-server/server/vike-handler";
|
|
10
|
+
import { telefuncHandler } from "@batijs/telefunc/server/telefunc-handler";
|
|
3
11
|
import { appRouter } from "@batijs/trpc/trpc/server";
|
|
4
12
|
import { serve } from "@hono/node-server";
|
|
5
13
|
import { serveStatic } from "@hono/node-server/serve-static";
|
|
6
14
|
import { fetchRequestHandler, type FetchCreateContextFnOptions } from "@trpc/server/adapters/fetch";
|
|
7
|
-
import { getAuth } from "firebase-admin/auth";
|
|
8
15
|
import { Hono } from "hono";
|
|
9
16
|
import { compress } from "hono/compress";
|
|
10
|
-
import {
|
|
11
|
-
import { telefunc } from "telefunc";
|
|
12
|
-
import { VikeAuth } from "vike-authjs";
|
|
13
|
-
import { renderPage } from "vike/server";
|
|
17
|
+
import { createMiddleware } from "hono/factory";
|
|
14
18
|
|
|
15
19
|
const isProduction = process.env.NODE_ENV === "production";
|
|
16
20
|
const port = process.env.PORT ? parseInt(process.env.PORT, 10) : 3000;
|
|
17
21
|
|
|
22
|
+
interface Middleware<Context extends Record<string | number | symbol, unknown>> {
|
|
23
|
+
(request: Request, context: Context): Response | void | Promise<Response> | Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export function handlerAdapter<Context extends Record<string | number | symbol, unknown>>(
|
|
27
|
+
handler: Middleware<Context>,
|
|
28
|
+
) {
|
|
29
|
+
return createMiddleware(async (context, next) => {
|
|
30
|
+
let ctx = context.get("context");
|
|
31
|
+
if (!ctx) {
|
|
32
|
+
ctx = {};
|
|
33
|
+
context.set("context", ctx);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
const res = await handler(context.req.raw, ctx as Context);
|
|
37
|
+
context.set("context", ctx);
|
|
38
|
+
|
|
39
|
+
if (!res) {
|
|
40
|
+
await next();
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return res;
|
|
44
|
+
});
|
|
45
|
+
}
|
|
46
|
+
|
|
18
47
|
const app = new Hono();
|
|
19
48
|
|
|
20
49
|
app.use(compress());
|
|
@@ -28,86 +57,23 @@ if (isProduction) {
|
|
|
28
57
|
);
|
|
29
58
|
}
|
|
30
59
|
|
|
31
|
-
if (BATI.has("authjs")) {
|
|
60
|
+
if (BATI.has("authjs") || BATI.has("auth0")) {
|
|
32
61
|
/**
|
|
33
|
-
*
|
|
34
|
-
*
|
|
35
|
-
* TODO: Replace secret {@see https://authjs.dev/reference/core#secret}
|
|
36
|
-
* TODO: Choose and implement providers
|
|
37
|
-
*
|
|
38
|
-
* @link {@see https://authjs.dev/guides/providers/custom-provider}
|
|
62
|
+
* Append Auth.js session to context
|
|
39
63
|
**/
|
|
40
|
-
|
|
41
|
-
secret: "MY_SECRET",
|
|
42
|
-
providers: [
|
|
43
|
-
CredentialsProvider({
|
|
44
|
-
name: "Credentials",
|
|
45
|
-
credentials: {
|
|
46
|
-
username: { label: "Username", type: "text", placeholder: "jsmith" },
|
|
47
|
-
password: { label: "Password", type: "password" },
|
|
48
|
-
},
|
|
49
|
-
async authorize() {
|
|
50
|
-
// Add logic here to look up the user from the credentials supplied
|
|
51
|
-
const user = { id: "1", name: "J Smith", email: "jsmith@example.com" };
|
|
52
|
-
|
|
53
|
-
// Any object returned will be saved in `user` property of the JWT
|
|
54
|
-
// If you return null then an error will be displayed advising the user to check their details.
|
|
55
|
-
// You can also Reject this callback with an Error thus the user will be sent to the error page with the error message as a query parameter
|
|
56
|
-
return user ?? null;
|
|
57
|
-
},
|
|
58
|
-
}),
|
|
59
|
-
],
|
|
60
|
-
});
|
|
64
|
+
app.use(handlerAdapter(authjsSessionMiddleware));
|
|
61
65
|
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
);
|
|
66
|
+
/**
|
|
67
|
+
* Auth.js route
|
|
68
|
+
* @link {@see https://authjs.dev/getting-started/installation}
|
|
69
|
+
**/
|
|
70
|
+
app.use("/api/auth/**", handlerAdapter(authjsHandler));
|
|
67
71
|
}
|
|
68
72
|
|
|
69
73
|
if (BATI.has("firebase-auth")) {
|
|
70
|
-
app.use(
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const auth = getAuth(firebaseAdmin);
|
|
74
|
-
try {
|
|
75
|
-
const decodedIdToken = await auth.verifySessionCookie(sessionCookie, true);
|
|
76
|
-
const user = await auth.getUser(decodedIdToken.sub);
|
|
77
|
-
c.set("user", user);
|
|
78
|
-
} catch (error) {
|
|
79
|
-
console.debug("verifySessionCookie:", error);
|
|
80
|
-
c.set("user", null);
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
await next();
|
|
84
|
-
});
|
|
85
|
-
|
|
86
|
-
app.post("/api/sessionLogin", async (c) => {
|
|
87
|
-
const body = await c.req.json();
|
|
88
|
-
const idToken: string = body.idToken || "";
|
|
89
|
-
|
|
90
|
-
let expiresIn = 60 * 60 * 24 * 5 * 1000; // 5 days. The auth.createSessionCookie() function of Firebase expects time to be specified in miliseconds.
|
|
91
|
-
|
|
92
|
-
const auth = getAuth(firebaseAdmin);
|
|
93
|
-
try {
|
|
94
|
-
const sessionCookie = await auth.createSessionCookie(idToken, { expiresIn });
|
|
95
|
-
const options = { maxAge: expiresIn, httpOnly: true, secure: true };
|
|
96
|
-
|
|
97
|
-
expiresIn = 60 * 60 * 24 * 5; // 5 days. The setCookie() function of Hono expects time to be specified in seconds.
|
|
98
|
-
setCookie(c, "__session", sessionCookie, options);
|
|
99
|
-
|
|
100
|
-
return c.json({ status: "success" }, 200);
|
|
101
|
-
} catch (error) {
|
|
102
|
-
console.error("createSessionCookie failed :", error);
|
|
103
|
-
return c.text("Unathorized", 401);
|
|
104
|
-
}
|
|
105
|
-
});
|
|
106
|
-
|
|
107
|
-
app.post("/api/sessionLogout", (c) => {
|
|
108
|
-
deleteCookie(c, "__session");
|
|
109
|
-
return c.text("Logged Out", 200);
|
|
110
|
-
});
|
|
74
|
+
app.use(handlerAdapter(firebaseAuthMiddleware));
|
|
75
|
+
app.post("/api/sessionLogin", handlerAdapter(firebaseAuthLoginHandler));
|
|
76
|
+
app.post("/api/sessionLogout", handlerAdapter(firebaseAuthLogoutHandler));
|
|
111
77
|
}
|
|
112
78
|
|
|
113
79
|
if (BATI.has("trpc")) {
|
|
@@ -134,43 +100,15 @@ if (BATI.has("telefunc")) {
|
|
|
134
100
|
*
|
|
135
101
|
* @link {@see https://telefunc.com}
|
|
136
102
|
**/
|
|
137
|
-
app.post("/_telefunc",
|
|
138
|
-
const httpResponse = await telefunc({
|
|
139
|
-
url: c.req.url.toString(),
|
|
140
|
-
method: c.req.method,
|
|
141
|
-
body: await c.req.text(),
|
|
142
|
-
context: c,
|
|
143
|
-
});
|
|
144
|
-
const { body, statusCode, contentType } = httpResponse;
|
|
145
|
-
|
|
146
|
-
c.status(statusCode);
|
|
147
|
-
c.header("Content-Type", contentType);
|
|
148
|
-
|
|
149
|
-
return c.body(body);
|
|
150
|
-
});
|
|
103
|
+
app.post("/_telefunc", handlerAdapter(telefuncHandler));
|
|
151
104
|
}
|
|
152
105
|
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
: {
|
|
160
|
-
urlOriginal: c.req.url,
|
|
161
|
-
};
|
|
162
|
-
const pageContext = await renderPage(pageContextInit);
|
|
163
|
-
const { httpResponse } = pageContext;
|
|
164
|
-
if (!httpResponse) {
|
|
165
|
-
return next();
|
|
166
|
-
} else {
|
|
167
|
-
const { body, statusCode, headers } = httpResponse;
|
|
168
|
-
headers.forEach(([name, value]) => c.header(name, value));
|
|
169
|
-
c.status(statusCode);
|
|
170
|
-
|
|
171
|
-
return c.body(body);
|
|
172
|
-
}
|
|
173
|
-
});
|
|
106
|
+
/**
|
|
107
|
+
* Vike route
|
|
108
|
+
*
|
|
109
|
+
* @link {@see https://vike.dev}
|
|
110
|
+
**/
|
|
111
|
+
app.all("*", handlerAdapter(vikeHandler));
|
|
174
112
|
|
|
175
113
|
if (isProduction) {
|
|
176
114
|
console.log(`Server listening on http://localhost:${port}`);
|
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
import "dotenv/config";
|
|
1
2
|
import { Hono } from "hono";
|
|
3
|
+
interface Middleware<Context extends Record<string | number | symbol, unknown>> {
|
|
4
|
+
(request: Request, context: Context): Response | void | Promise<Response> | Promise<void>;
|
|
5
|
+
}
|
|
6
|
+
export declare function handlerAdapter<Context extends Record<string | number | symbol, unknown>>(handler: Middleware<Context>): import("hono").MiddlewareHandler<any, any, {}>;
|
|
2
7
|
declare const app: Hono<import("hono").Env, import("hono/types").BlankSchema, "/">;
|
|
3
8
|
export default app;
|
|
@@ -3,11 +3,7 @@ import { loadAsJson } from "@batijs/core";
|
|
|
3
3
|
async function getEslintConfig(props) {
|
|
4
4
|
if (!props.meta.BATI.has("eslint")) return;
|
|
5
5
|
const eslintConfig = await loadAsJson(props);
|
|
6
|
-
eslintConfig.extends = eslintConfig.extends.filter(
|
|
7
|
-
(p) => p !== "eslint:recommended" && p !== "plugin:@typescript-eslint/recommended"
|
|
8
|
-
);
|
|
9
6
|
eslintConfig.extends.push("plugin:react/recommended");
|
|
10
|
-
eslintConfig.plugins = eslintConfig.plugins.filter((p) => p !== "@typescript-eslint");
|
|
11
7
|
eslintConfig.plugins.push("react");
|
|
12
8
|
eslintConfig.settings ??= {};
|
|
13
9
|
eslintConfig.settings.react = { version: "detect" };
|
|
@@ -41,21 +41,21 @@ var require_package = __commonJS({
|
|
|
41
41
|
author: "",
|
|
42
42
|
license: "MIT",
|
|
43
43
|
devDependencies: {
|
|
44
|
-
"@babel/core": "^7.24.
|
|
45
|
-
"@babel/plugin-syntax-flow": "^7.24.
|
|
46
|
-
"@babel/plugin-transform-react-jsx": "^7.
|
|
44
|
+
"@babel/core": "^7.24.6",
|
|
45
|
+
"@babel/plugin-syntax-flow": "^7.24.6",
|
|
46
|
+
"@babel/plugin-transform-react-jsx": "^7.24.6",
|
|
47
47
|
"@batijs/compile": "workspace:*",
|
|
48
48
|
"@types/node": "^18.19.14",
|
|
49
|
-
"@types/react": "^18.3.
|
|
49
|
+
"@types/react": "^18.3.3",
|
|
50
50
|
"@types/react-dom": "^18.3.0",
|
|
51
|
-
"@vitejs/plugin-react": "^4.
|
|
51
|
+
"@vitejs/plugin-react": "^4.3.0",
|
|
52
52
|
"cross-fetch": "^4.0.0",
|
|
53
53
|
"eslint-plugin-react": "^7.34.1",
|
|
54
54
|
react: "^18.3.1",
|
|
55
55
|
"react-dom": "^18.3.1",
|
|
56
56
|
tailwindcss: "^3.4.3",
|
|
57
57
|
typescript: "^5.4.5",
|
|
58
|
-
vike: "^0.4.
|
|
58
|
+
vike: "^0.4.172",
|
|
59
59
|
"vike-react": "^0.4.10",
|
|
60
60
|
vite: "^5.2.11"
|
|
61
61
|
},
|
|
@@ -4,7 +4,7 @@ import { onNewTodo } from "./TodoList.telefunc.js";
|
|
|
4
4
|
|
|
5
5
|
export function TodoList({ todoItemsInitial }: { todoItemsInitial: TodoItem[] }) {
|
|
6
6
|
const [todoItems, setTodoItems] = useState(todoItemsInitial);
|
|
7
|
-
const [
|
|
7
|
+
const [newTodo, setNewTodo] = useState("");
|
|
8
8
|
return (
|
|
9
9
|
<>
|
|
10
10
|
<ul>
|
|
@@ -15,12 +15,12 @@ export function TodoList({ todoItemsInitial }: { todoItemsInitial: TodoItem[] })
|
|
|
15
15
|
<form
|
|
16
16
|
onSubmit={async (ev) => {
|
|
17
17
|
ev.preventDefault();
|
|
18
|
-
const { todoItems } = await onNewTodo({ text:
|
|
19
|
-
|
|
18
|
+
const { todoItems } = await onNewTodo({ text: newTodo });
|
|
19
|
+
setNewTodo("");
|
|
20
20
|
setTodoItems(todoItems);
|
|
21
21
|
}}
|
|
22
22
|
>
|
|
23
|
-
<input type="text" onChange={(ev) =>
|
|
23
|
+
<input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo} />{" "}
|
|
24
24
|
<button type="submit">Add to-do</button>
|
|
25
25
|
</form>
|
|
26
26
|
</li>
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { renderPage } from "vike/server";
|
|
2
|
+
|
|
3
|
+
export async function vikeHandler<Context extends Record<string | number | symbol, unknown>>(
|
|
4
|
+
request: Request,
|
|
5
|
+
context?: Context,
|
|
6
|
+
): Promise<Response> {
|
|
7
|
+
const pageContextInit = { ...(context ?? {}), urlOriginal: request.url };
|
|
8
|
+
const pageContext = await renderPage(pageContextInit);
|
|
9
|
+
const response = pageContext.httpResponse;
|
|
10
|
+
|
|
11
|
+
return new Response(response?.getReadableWebStream(), {
|
|
12
|
+
status: response?.statusCode,
|
|
13
|
+
headers: response?.headers,
|
|
14
|
+
});
|
|
15
|
+
}
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type { TodoItem } from "@batijs/shared-db/database/todoItems";
|
|
2
1
|
import { createSignal } from "solid-js";
|
|
2
|
+
import { useData } from "vike-solid/useData";
|
|
3
|
+
import type { Data } from "./+data.js";
|
|
3
4
|
import { TodoList } from "./TodoList.js";
|
|
4
5
|
|
|
5
|
-
export default function Page(
|
|
6
|
+
export default function Page() {
|
|
7
|
+
const initialTodoItems = useData<Data>();
|
|
8
|
+
|
|
6
9
|
return (
|
|
7
10
|
<>
|
|
8
11
|
<h1>To-do List</h1>
|
|
9
|
-
<TodoList initialTodoItems={
|
|
12
|
+
<TodoList initialTodoItems={initialTodoItems} />
|
|
10
13
|
<Counter />
|
|
11
14
|
</>
|
|
12
15
|
);
|
|
@@ -4,7 +4,7 @@ import { onNewTodo } from "./TodoList.telefunc.js";
|
|
|
4
4
|
|
|
5
5
|
export function TodoList(props: { initialTodoItems: TodoItem[] }) {
|
|
6
6
|
const [todoItems, setTodoItems] = createSignal(props.initialTodoItems);
|
|
7
|
-
const [
|
|
7
|
+
const [newTodo, setNewTodo] = createSignal("");
|
|
8
8
|
return (
|
|
9
9
|
<>
|
|
10
10
|
<ul>
|
|
@@ -13,12 +13,12 @@ export function TodoList(props: { initialTodoItems: TodoItem[] }) {
|
|
|
13
13
|
<form
|
|
14
14
|
onSubmit={async (ev) => {
|
|
15
15
|
ev.preventDefault();
|
|
16
|
-
const { todoItems } = await onNewTodo({ text: untrack(
|
|
17
|
-
|
|
16
|
+
const { todoItems } = await onNewTodo({ text: untrack(newTodo) });
|
|
17
|
+
setNewTodo("");
|
|
18
18
|
setTodoItems(todoItems);
|
|
19
19
|
}}
|
|
20
20
|
>
|
|
21
|
-
<input type="text" onChange={(ev) =>
|
|
21
|
+
<input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo()} />{" "}
|
|
22
22
|
<button type="submit">Add to-do</button>
|
|
23
23
|
</form>
|
|
24
24
|
</li>
|
|
@@ -1,12 +1,15 @@
|
|
|
1
|
-
import type { TodoItem } from "@batijs/shared-db/database/todoItems";
|
|
2
1
|
import { createSignal } from "solid-js";
|
|
2
|
+
import { useData } from "vike-solid/useData";
|
|
3
|
+
import type { Data } from "./+data.js";
|
|
3
4
|
import { TodoList } from "./TodoList.js";
|
|
4
5
|
|
|
5
|
-
export default function Page(
|
|
6
|
+
export default function Page() {
|
|
7
|
+
const initialTodoItems = useData<Data>();
|
|
8
|
+
|
|
6
9
|
return (
|
|
7
10
|
<>
|
|
8
11
|
<h1>To-do List</h1>
|
|
9
|
-
<TodoList initialTodoItems={
|
|
12
|
+
<TodoList initialTodoItems={initialTodoItems} />
|
|
10
13
|
<Counter />
|
|
11
14
|
</>
|
|
12
15
|
);
|
|
@@ -4,7 +4,7 @@ import { createSignal, For, untrack } from "solid-js";
|
|
|
4
4
|
|
|
5
5
|
export function TodoList(props: { initialTodoItems: TodoItem[] }) {
|
|
6
6
|
const [todoItems, setTodoItems] = createSignal(props.initialTodoItems);
|
|
7
|
-
const [
|
|
7
|
+
const [newTodo, setNewTodo] = createSignal("");
|
|
8
8
|
return (
|
|
9
9
|
<>
|
|
10
10
|
<ul>
|
|
@@ -13,12 +13,12 @@ export function TodoList(props: { initialTodoItems: TodoItem[] }) {
|
|
|
13
13
|
<form
|
|
14
14
|
onSubmit={async (ev) => {
|
|
15
15
|
ev.preventDefault();
|
|
16
|
-
const { todoItems } = await trpc.onNewTodo.mutate(untrack(
|
|
17
|
-
|
|
16
|
+
const { todoItems } = await trpc.onNewTodo.mutate(untrack(newTodo));
|
|
17
|
+
setNewTodo("");
|
|
18
18
|
setTodoItems(todoItems);
|
|
19
19
|
}}
|
|
20
20
|
>
|
|
21
|
-
<input type="text" onChange={(ev) =>
|
|
21
|
+
<input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo()} />{" "}
|
|
22
22
|
<button type="submit">Add to-do</button>
|
|
23
23
|
</form>
|
|
24
24
|
</li>
|
|
@@ -44,7 +44,7 @@ var require_package = __commonJS({
|
|
|
44
44
|
"@batijs/compile": "workspace:*",
|
|
45
45
|
"@types/node": "^18.19.14",
|
|
46
46
|
telefunc: "^0.1.72",
|
|
47
|
-
vike: "^0.4.
|
|
47
|
+
vike: "^0.4.172",
|
|
48
48
|
vite: "^5.2.11"
|
|
49
49
|
},
|
|
50
50
|
dependencies: {
|
|
@@ -57,6 +57,18 @@ var require_package = __commonJS({
|
|
|
57
57
|
if: {
|
|
58
58
|
flag: "telefunc"
|
|
59
59
|
}
|
|
60
|
+
},
|
|
61
|
+
exports: {
|
|
62
|
+
"./server/telefunc-handler": {
|
|
63
|
+
types: "./dist/types/server/telefunc-handler.d.ts"
|
|
64
|
+
}
|
|
65
|
+
},
|
|
66
|
+
typesVersions: {
|
|
67
|
+
"*": {
|
|
68
|
+
"server/telefunc-handler": [
|
|
69
|
+
"./dist/types/server/telefunc-handler.d.ts"
|
|
70
|
+
]
|
|
71
|
+
}
|
|
60
72
|
}
|
|
61
73
|
};
|
|
62
74
|
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { telefunc } from "telefunc";
|
|
2
|
+
|
|
3
|
+
export async function telefuncHandler<Context extends Record<string | number | symbol, unknown>>(
|
|
4
|
+
request: Request,
|
|
5
|
+
context?: Context,
|
|
6
|
+
): Promise<Response> {
|
|
7
|
+
const httpResponse = await telefunc({
|
|
8
|
+
url: request.url.toString(),
|
|
9
|
+
method: request.method,
|
|
10
|
+
body: await request.text(),
|
|
11
|
+
context,
|
|
12
|
+
});
|
|
13
|
+
const { body, statusCode, contentType } = httpResponse;
|
|
14
|
+
return new Response(body, {
|
|
15
|
+
status: statusCode,
|
|
16
|
+
headers: {
|
|
17
|
+
"content-type": contentType,
|
|
18
|
+
},
|
|
19
|
+
});
|
|
20
|
+
}
|
|
@@ -43,10 +43,10 @@ var require_package = __commonJS({
|
|
|
43
43
|
devDependencies: {
|
|
44
44
|
"@batijs/compile": "workspace:*",
|
|
45
45
|
"@types/node": "^18.19.14",
|
|
46
|
-
"@vite-plugin-vercel/vike": "^
|
|
47
|
-
vike: "^0.4.
|
|
46
|
+
"@vite-plugin-vercel/vike": "^7.0.0",
|
|
47
|
+
vike: "^0.4.172",
|
|
48
48
|
vite: "^5.2.11",
|
|
49
|
-
"vite-plugin-vercel": "^
|
|
49
|
+
"vite-plugin-vercel": "^7.0.0"
|
|
50
50
|
},
|
|
51
51
|
dependencies: {
|
|
52
52
|
"@batijs/core": "workspace:*"
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
{{ item.text }}
|
|
5
5
|
</li>
|
|
6
6
|
<li>
|
|
7
|
-
<form @submit.prevent="
|
|
8
|
-
<input v-model="
|
|
7
|
+
<form @submit.prevent="submitNewTodo()">
|
|
8
|
+
<input v-model="newTodo" type="text" />{{ " " }}
|
|
9
9
|
<button type="submit">Add to-do</button>
|
|
10
10
|
</form>
|
|
11
11
|
</li>
|
|
@@ -21,13 +21,13 @@ type TodoItem = { text: string };
|
|
|
21
21
|
const attrs = useAttrs();
|
|
22
22
|
|
|
23
23
|
const todoItems = ref(attrs["todo-items-initial"]) as Ref<TodoItem[]>;
|
|
24
|
-
const
|
|
24
|
+
const newTodo = ref("");
|
|
25
25
|
|
|
26
|
-
const
|
|
26
|
+
const submitNewTodo = async () => {
|
|
27
27
|
const result = await onNewTodo({
|
|
28
|
-
text:
|
|
28
|
+
text: newTodo.value,
|
|
29
29
|
});
|
|
30
|
-
|
|
30
|
+
newTodo.value = "";
|
|
31
31
|
todoItems.value = result.todoItems;
|
|
32
32
|
};
|
|
33
33
|
</script>
|
|
@@ -4,8 +4,8 @@
|
|
|
4
4
|
{{ item.text }}
|
|
5
5
|
</li>
|
|
6
6
|
<li>
|
|
7
|
-
<form @submit.prevent="
|
|
8
|
-
<input v-model="
|
|
7
|
+
<form @submit.prevent="submitNewTodo()">
|
|
8
|
+
<input v-model="newTodo" type="text" />{{ " " }}
|
|
9
9
|
<button type="submit">Add to-do</button>
|
|
10
10
|
</form>
|
|
11
11
|
</li>
|
|
@@ -21,11 +21,11 @@ type TodoItem = { text: string };
|
|
|
21
21
|
const attrs = useAttrs();
|
|
22
22
|
|
|
23
23
|
const todoItems = ref(attrs["todo-items-initial"]) as Ref<TodoItem[]>;
|
|
24
|
-
const
|
|
24
|
+
const newTodo = ref("");
|
|
25
25
|
|
|
26
|
-
const
|
|
27
|
-
const result = await trpc.onNewTodo.mutate(
|
|
28
|
-
|
|
26
|
+
const submitNewTodo = async () => {
|
|
27
|
+
const result = await trpc.onNewTodo.mutate(newTodo.value);
|
|
28
|
+
newTodo.value = "";
|
|
29
29
|
todoItems.value = result.todoItems;
|
|
30
30
|
};
|
|
31
31
|
</script>
|
|
@@ -10,6 +10,22 @@
|
|
|
10
10
|
"files"
|
|
11
11
|
]
|
|
12
12
|
},
|
|
13
|
+
{
|
|
14
|
+
"config": {
|
|
15
|
+
"if": {
|
|
16
|
+
"flag": {
|
|
17
|
+
"$in": [
|
|
18
|
+
"authjs",
|
|
19
|
+
"auth0"
|
|
20
|
+
]
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
},
|
|
24
|
+
"folder": "@batijs/authjs",
|
|
25
|
+
"subfolders": [
|
|
26
|
+
"files"
|
|
27
|
+
]
|
|
28
|
+
},
|
|
13
29
|
{
|
|
14
30
|
"config": {
|
|
15
31
|
"if": {
|
|
@@ -259,6 +275,25 @@
|
|
|
259
275
|
"files"
|
|
260
276
|
]
|
|
261
277
|
},
|
|
278
|
+
{
|
|
279
|
+
"config": {
|
|
280
|
+
"if": {
|
|
281
|
+
"flag": {
|
|
282
|
+
"$in": [
|
|
283
|
+
"h3",
|
|
284
|
+
"hattip",
|
|
285
|
+
"hono",
|
|
286
|
+
"express",
|
|
287
|
+
"fastify"
|
|
288
|
+
]
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
},
|
|
292
|
+
"folder": "@batijs/shared-server",
|
|
293
|
+
"subfolders": [
|
|
294
|
+
"files"
|
|
295
|
+
]
|
|
296
|
+
},
|
|
262
297
|
{
|
|
263
298
|
"config": {
|
|
264
299
|
"if": {
|