@batijs/cli 0.0.197 → 0.0.198

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.
Files changed (118) hide show
  1. package/dist/boilerplates/@batijs/biome/files/$package.json.js +1 -1
  2. package/dist/boilerplates/@batijs/compiled/files/$package.json.js +2 -2
  3. package/dist/boilerplates/@batijs/drizzle/files/$README.md.js +29 -0
  4. package/dist/boilerplates/@batijs/drizzle/files/$package.json.js +112 -0
  5. package/dist/boilerplates/@batijs/drizzle/files/database/db.ts +6 -0
  6. package/dist/boilerplates/@batijs/drizzle/files/database/schema.ts +11 -0
  7. package/dist/boilerplates/@batijs/drizzle/files/database/seed.ts +12 -0
  8. package/dist/boilerplates/@batijs/drizzle/files/drizzle.config.ts +10 -0
  9. package/dist/boilerplates/@batijs/drizzle/types/database/db.d.ts +2 -0
  10. package/dist/boilerplates/@batijs/drizzle/types/database/schema.d.ts +33 -0
  11. package/dist/boilerplates/@batijs/drizzle/types/database/seed.d.ts +1 -0
  12. package/dist/boilerplates/@batijs/drizzle/types/drizzle.config.d.ts +2 -0
  13. package/dist/boilerplates/@batijs/edgedb/files/$package.json.js +1 -1
  14. package/dist/boilerplates/@batijs/eslint/files/$package.json.js +2 -2
  15. package/dist/boilerplates/@batijs/express/files/$package.json.js +7 -5
  16. package/dist/boilerplates/@batijs/express/files/express-entry.ts +5 -0
  17. package/dist/boilerplates/@batijs/fastify/files/$package.json.js +7 -5
  18. package/dist/boilerplates/@batijs/fastify/files/fastify-entry.ts +5 -0
  19. package/dist/boilerplates/@batijs/firebase-auth/files/$package.json.js +3 -3
  20. package/dist/boilerplates/@batijs/h3/files/$package.json.js +7 -5
  21. package/dist/boilerplates/@batijs/h3/files/h3-entry.ts +5 -0
  22. package/dist/boilerplates/@batijs/hattip/files/$package.json.js +6 -4
  23. package/dist/boilerplates/@batijs/hattip/files/hattip-entry.ts +5 -0
  24. package/dist/boilerplates/@batijs/hono/files/$package.json.js +9 -7
  25. package/dist/boilerplates/@batijs/hono/files/hono-entry.ts +5 -0
  26. package/dist/boilerplates/@batijs/hono/types/hono-entry.d.ts +1 -1
  27. package/dist/boilerplates/@batijs/prettier/files/$package.json.js +1 -1
  28. package/dist/boilerplates/@batijs/prisma/files/$package.json.js +2 -2
  29. package/dist/boilerplates/@batijs/react/files/$package.json.js +25 -9
  30. package/dist/boilerplates/@batijs/react/files/layouts/LayoutDefault.tsx +1 -2
  31. package/dist/boilerplates/@batijs/react/files/pages/todo/+Page.tsx +14 -0
  32. package/dist/boilerplates/@batijs/react/files/pages/todo/TodoList.tsx +51 -0
  33. package/dist/boilerplates/@batijs/react/types/pages/+config.d.ts +9 -6
  34. package/dist/boilerplates/@batijs/react/types/pages/todo/TodoList.d.ts +5 -0
  35. package/dist/boilerplates/@batijs/shared/files/package.json +3 -3
  36. package/dist/boilerplates/@batijs/shared-no-db/files/$package.json.js +91 -0
  37. package/dist/boilerplates/@batijs/shared-no-db/files/database/todoItems.ts +13 -0
  38. package/dist/boilerplates/@batijs/shared-no-db/types/database/todoItems.d.ts +9 -0
  39. package/dist/boilerplates/@batijs/shared-todo/files/pages/todo/+data.ts +15 -0
  40. package/dist/boilerplates/@batijs/shared-todo/files/server/create-todo-handler.ts +24 -0
  41. package/dist/boilerplates/@batijs/shared-todo/types/pages/todo/+data.d.ts +4 -0
  42. package/dist/boilerplates/@batijs/shared-todo/types/server/create-todo-handler.d.ts +2 -0
  43. package/dist/boilerplates/@batijs/solid/files/$package.json.js +19 -3
  44. package/dist/boilerplates/@batijs/solid/files/layouts/LayoutDefault.tsx +1 -2
  45. package/dist/boilerplates/@batijs/solid/files/pages/todo/+Page.tsx +13 -0
  46. package/dist/boilerplates/@batijs/solid/files/pages/todo/TodoList.tsx +49 -0
  47. package/dist/boilerplates/@batijs/solid/types/pages/todo/TodoList.d.ts +5 -0
  48. package/dist/boilerplates/@batijs/tailwindcss/files/$package.json.js +4 -4
  49. package/dist/boilerplates/@batijs/telefunc/files/$package.json.js +12 -3
  50. package/dist/boilerplates/@batijs/telefunc/files/pages/todo/TodoList.telefunc.ts +11 -0
  51. package/dist/boilerplates/@batijs/telefunc/types/pages/todo/TodoList.telefunc.d.ts +3 -0
  52. package/dist/boilerplates/@batijs/trpc/files/$package.json.js +4 -2
  53. package/dist/boilerplates/@batijs/trpc/files/trpc/server.ts +8 -3
  54. package/dist/boilerplates/@batijs/trpc/types/trpc/client.d.ts +1 -3
  55. package/dist/boilerplates/@batijs/trpc/types/trpc/server.d.ts +1 -3
  56. package/dist/boilerplates/@batijs/vercel/files/$package.json.js +2 -2
  57. package/dist/boilerplates/@batijs/vue/files/$package.json.js +9 -5
  58. package/dist/boilerplates/@batijs/vue/files/layouts/LayoutDefault.vue +1 -4
  59. package/dist/boilerplates/@batijs/vue/files/pages/todo/+Page.vue +14 -0
  60. package/dist/boilerplates/@batijs/vue/files/pages/todo/TodoList.vue +49 -0
  61. package/dist/boilerplates/@batijs/vue/types/pages/+config.d.ts +95 -2
  62. package/dist/boilerplates/boilerplates.json +23 -98
  63. package/dist/{chunk-5DE3DJHR.js → chunk-TGVSJ5SD.js} +1 -1
  64. package/dist/index.js +20 -29
  65. package/dist/{prompt-YMZWKECL.js → prompt-XFX2ZGRD.js} +27 -54
  66. package/package.json +8 -8
  67. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/+Page.tsx +0 -27
  68. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/+data.ts +0 -9
  69. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/TodoList.telefunc.ts +0 -6
  70. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/TodoList.tsx +0 -30
  71. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/+data.d.ts +0 -2
  72. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/TodoList.d.ts +0 -4
  73. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/TodoList.telefunc.d.ts +0 -4
  74. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+Page.tsx +0 -27
  75. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+config.ts +0 -5
  76. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+data.ts +0 -9
  77. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/TodoList.tsx +0 -30
  78. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+Page.d.ts +0 -1
  79. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  80. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  81. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/TodoList.d.ts +0 -4
  82. package/dist/boilerplates/@batijs/shared-db/files/database/todoItems.ts +0 -12
  83. package/dist/boilerplates/@batijs/shared-db/types/database/todoItems.d.ts +0 -6
  84. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+Page.tsx +0 -28
  85. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+config.ts +0 -3
  86. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+data.ts +0 -9
  87. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/TodoList.telefunc.ts +0 -8
  88. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/TodoList.tsx +0 -28
  89. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+config.d.ts +0 -4
  90. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+data.d.ts +0 -2
  91. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/TodoList.d.ts +0 -4
  92. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/TodoList.telefunc.d.ts +0 -5
  93. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+Page.tsx +0 -28
  94. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+config.ts +0 -3
  95. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+data.ts +0 -9
  96. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/TodoList.tsx +0 -28
  97. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+Page.d.ts +0 -1
  98. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  99. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  100. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/TodoList.d.ts +0 -4
  101. package/dist/boilerplates/@batijs/vue-telefunc/files/components/TodoList.telefunc.ts +0 -8
  102. package/dist/boilerplates/@batijs/vue-telefunc/files/components/TodoList.vue +0 -33
  103. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+Page.vue +0 -20
  104. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+config.ts +0 -3
  105. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+data.ts +0 -9
  106. package/dist/boilerplates/@batijs/vue-telefunc/types/components/TodoList.telefunc.d.ts +0 -5
  107. package/dist/boilerplates/@batijs/vue-telefunc/types/pages/todo/+config.d.ts +0 -4
  108. package/dist/boilerplates/@batijs/vue-telefunc/types/pages/todo/+data.d.ts +0 -2
  109. package/dist/boilerplates/@batijs/vue-trpc/files/components/TodoListTrpc.vue +0 -31
  110. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+Page.vue +0 -20
  111. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+config.ts +0 -3
  112. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+data.ts +0 -9
  113. package/dist/boilerplates/@batijs/vue-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  114. package/dist/boilerplates/@batijs/vue-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  115. /package/dist/boilerplates/@batijs/{react-telefunc → react}/types/pages/todo/+Page.d.ts +0 -0
  116. /package/dist/boilerplates/@batijs/{react-telefunc → shared-todo}/files/pages/todo/+config.ts +0 -0
  117. /package/dist/boilerplates/@batijs/{react-telefunc → shared-todo}/types/pages/todo/+config.d.ts +0 -0
  118. /package/dist/boilerplates/@batijs/{solid-telefunc → solid}/types/pages/todo/+Page.d.ts +0 -0
@@ -20,8 +20,7 @@ export default function LayoutDefault({ children }: { children: React.ReactNode
20
20
  <Sidebar>
21
21
  <Logo />
22
22
  <Link href="/">Welcome</Link>
23
- {BATI.has("telefunc") ? <Link href="/todo">Todo (telefunc)</Link> : undefined}
24
- {BATI.has("trpc") ? <Link href="/todo-trpc">Todo (tRPC)</Link> : undefined}
23
+ <Link href="/todo">Todo</Link>
25
24
  <Link href="/star-wars">Data Fetching</Link>
26
25
  </Sidebar>
27
26
  <Content>{children}</Content>
@@ -0,0 +1,14 @@
1
+ import type { Data } from "@batijs/shared-todo/pages/todo/+data";
2
+ import React from "react";
3
+ import { useData } from "vike-react/useData";
4
+ import { TodoList } from "./TodoList.js";
5
+
6
+ export default function Page() {
7
+ const todoItemsInitial = useData<Data>();
8
+ return (
9
+ <>
10
+ <h1>To-do List</h1>
11
+ <TodoList initialTodoItems={todoItemsInitial} />
12
+ </>
13
+ );
14
+ }
@@ -0,0 +1,51 @@
1
+ import { onNewTodo } from "@batijs/telefunc/pages/todo/TodoList.telefunc";
2
+ import { trpc } from "@batijs/trpc/trpc/client";
3
+ import React, { useState } from "react";
4
+
5
+ export function TodoList({ initialTodoItems }: { initialTodoItems: { text: string }[] }) {
6
+ const [todoItems, setTodoItems] = useState(initialTodoItems);
7
+ const [newTodo, setNewTodo] = useState("");
8
+ return (
9
+ <>
10
+ <ul>
11
+ {todoItems.map((todoItem) => (
12
+ <li key={todoItem.text}>{todoItem.text}</li>
13
+ ))}
14
+ </ul>
15
+ <div>
16
+ <form
17
+ onSubmit={async (ev) => {
18
+ ev.preventDefault();
19
+
20
+ // Optimistic UI update
21
+ setTodoItems((prev) => [...prev, { text: newTodo }]);
22
+ try {
23
+ if (BATI.has("telefunc")) {
24
+ await onNewTodo({ text: newTodo });
25
+ } else if (BATI.has("trpc")) {
26
+ await trpc.onNewTodo.mutate(newTodo);
27
+ } else {
28
+ const response = await fetch("/api/todo/create", {
29
+ method: "POST",
30
+ body: JSON.stringify({ text: newTodo }),
31
+ headers: {
32
+ "Content-Type": "application/json",
33
+ },
34
+ });
35
+ await response.blob();
36
+ }
37
+ setNewTodo("");
38
+ } catch (e) {
39
+ console.error(e);
40
+ // rollback
41
+ setTodoItems((prev) => prev.slice(0, -1));
42
+ }
43
+ }}
44
+ >
45
+ <input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo} />{" "}
46
+ <button type="submit">Add to-do</button>
47
+ </form>
48
+ </div>
49
+ </>
50
+ );
51
+ }
@@ -7,6 +7,9 @@ declare const _default: {
7
7
  title: string;
8
8
  extends: {
9
9
  name: string;
10
+ require: {
11
+ vike: string;
12
+ };
10
13
  onRenderHtml: "import:vike-react/renderer/onRenderHtml:onRenderHtml";
11
14
  onRenderClient: "import:vike-react/renderer/onRenderClient:onRenderClient";
12
15
  passToClient: string[];
@@ -53,7 +56,7 @@ declare const _default: {
53
56
  server: true;
54
57
  };
55
58
  };
56
- _streamIsRequied: {
59
+ streamIsRequired: {
57
60
  env: {
58
61
  server: true;
59
62
  };
@@ -68,19 +71,19 @@ declare const _default: {
68
71
  client: true;
69
72
  };
70
73
  };
71
- VikeReactQueryWrapper: {
74
+ Wrapper: {
75
+ cumulative: true;
72
76
  env: {
73
77
  client: true;
74
78
  server: true;
75
79
  };
76
80
  };
77
- Wrapper: {
81
+ name: {
78
82
  env: {
79
- client: true;
80
- server: true;
83
+ config: true;
81
84
  };
82
85
  };
83
- name: {
86
+ require: {
84
87
  env: {
85
88
  config: true;
86
89
  };
@@ -0,0 +1,5 @@
1
+ export declare function TodoList({ initialTodoItems }: {
2
+ initialTodoItems: {
3
+ text: string;
4
+ }[];
5
+ }): import("react/jsx-runtime").JSX.Element;
@@ -11,10 +11,10 @@
11
11
  "keywords": [],
12
12
  "author": "",
13
13
  "devDependencies": {
14
- "@auth/core": "^0.31.0",
14
+ "@auth/core": "^0.32.0",
15
15
  "typescript": "^5.4.5",
16
- "vike": "^0.4.172",
17
- "vite": "^5.2.11"
16
+ "vike": "^0.4.174",
17
+ "vite": "^5.2.12"
18
18
  },
19
19
  "dependencies": {}
20
20
  }
@@ -0,0 +1,91 @@
1
+ var __create = Object.create;
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __getProtoOf = Object.getPrototypeOf;
6
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
7
+ var __commonJS = (cb, mod) => function __require() {
8
+ return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
19
+ // If the importer is in node compatibility mode or this is not an ESM
20
+ // file that has been converted to a CommonJS file using a Babel-
21
+ // compatible transform (i.e. "__esModule" has not been set), then set
22
+ // "default" to the CommonJS "module.exports" for node compatibility.
23
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
24
+ mod
25
+ ));
26
+
27
+ // package.json
28
+ var require_package = __commonJS({
29
+ "package.json"(exports, module) {
30
+ module.exports = {
31
+ name: "@batijs/shared-no-db",
32
+ private: true,
33
+ version: "0.0.1",
34
+ description: "",
35
+ type: "module",
36
+ scripts: {
37
+ "check-types": "tsc --noEmit",
38
+ build: "bati-compile-boilerplate"
39
+ },
40
+ keywords: [],
41
+ author: "",
42
+ license: "MIT",
43
+ devDependencies: {
44
+ "@batijs/compile": "workspace:*",
45
+ "@types/node": "^18.19.14",
46
+ lowdb: "^7.0.1"
47
+ },
48
+ dependencies: {
49
+ "@batijs/core": "workspace:*"
50
+ },
51
+ files: [
52
+ "dist/"
53
+ ],
54
+ bati: {
55
+ if: {
56
+ flag: {
57
+ $not: {
58
+ $in: [
59
+ "drizzle"
60
+ ]
61
+ }
62
+ }
63
+ }
64
+ },
65
+ exports: {
66
+ "./database/todoItems": {
67
+ types: "./dist/types/database/todoItems.d.ts"
68
+ }
69
+ },
70
+ typesVersions: {
71
+ "*": {
72
+ "database/todoItems": [
73
+ "./dist/types/database/todoItems.d.ts"
74
+ ]
75
+ }
76
+ }
77
+ };
78
+ }
79
+ });
80
+
81
+ // files/$package.json.ts
82
+ import { addDependency, loadAsJson } from "@batijs/core";
83
+ async function getPackageJson(props) {
84
+ const packageJson = await loadAsJson(props);
85
+ return addDependency(packageJson, await Promise.resolve().then(() => __toESM(require_package(), 1)).then((x) => x.default), {
86
+ dependencies: ["lowdb"]
87
+ });
88
+ }
89
+ export {
90
+ getPackageJson as default
91
+ };
@@ -0,0 +1,13 @@
1
+ import type { LowSync } from "lowdb";
2
+ import { JSONFileSyncPreset } from "lowdb/node";
3
+
4
+ interface TodoItem {
5
+ text: string;
6
+ }
7
+
8
+ const lowDb: LowSync<{ todo: TodoItem[] }> = JSONFileSyncPreset<{ todo: TodoItem[] }>("db.json", {
9
+ todo: [{ text: "Buy milk" }, { text: "Buy strawberries" }],
10
+ });
11
+
12
+ export { lowDb };
13
+ export type { TodoItem };
@@ -0,0 +1,9 @@
1
+ import type { LowSync } from "lowdb";
2
+ interface TodoItem {
3
+ text: string;
4
+ }
5
+ declare const lowDb: LowSync<{
6
+ todo: TodoItem[];
7
+ }>;
8
+ export { lowDb };
9
+ export type { TodoItem };
@@ -0,0 +1,15 @@
1
+ // https://vike.dev/data
2
+ import { db } from "@batijs/drizzle/database/db";
3
+ import { todoTable } from "@batijs/drizzle/database/schema";
4
+ import { lowDb } from "@batijs/shared-no-db/database/todoItems";
5
+
6
+ export type Data = { text: string }[];
7
+
8
+ export default async function data(): Promise<Data> {
9
+ if (BATI.has("drizzle")) {
10
+ return db.select().from(todoTable).all();
11
+ } else {
12
+ lowDb.read();
13
+ return lowDb.data.todo;
14
+ }
15
+ }
@@ -0,0 +1,24 @@
1
+ import { db } from "@batijs/drizzle/database/db";
2
+ import { todoTable } from "@batijs/drizzle/database/schema";
3
+ import { lowDb } from "@batijs/shared-no-db/database/todoItems";
4
+
5
+ export async function createTodoHandler<Context extends Record<string | number | symbol, unknown>>(
6
+ request: Request,
7
+ _context?: Context,
8
+ ): Promise<Response> {
9
+ // In a real case, user-provided data should ALWAYS be validated with tools like zod
10
+ const newTodo = (await request.json()) as { text: string };
11
+
12
+ if (BATI.has("drizzle")) {
13
+ await db.insert(todoTable).values({ text: newTodo.text });
14
+ } else {
15
+ await lowDb.update(({ todo }) => todo.push({ text: newTodo.text }));
16
+ }
17
+
18
+ return new Response(JSON.stringify({ status: "OK" }), {
19
+ status: 200,
20
+ headers: {
21
+ "content-type": "application/json",
22
+ },
23
+ });
24
+ }
@@ -0,0 +1,4 @@
1
+ export type Data = {
2
+ text: string;
3
+ }[];
4
+ export default function data(): Promise<Data>;
@@ -0,0 +1,2 @@
1
+ /// <reference types="node" />
2
+ export declare function createTodoHandler<Context extends Record<string | number | symbol, unknown>>(request: Request, _context?: Context): Promise<Response>;
@@ -42,15 +42,19 @@ var require_package = __commonJS({
42
42
  license: "MIT",
43
43
  devDependencies: {
44
44
  "@batijs/compile": "workspace:*",
45
+ "@batijs/drizzle": "workspace:*",
46
+ "@batijs/shared-todo": "workspace:*",
47
+ "@batijs/telefunc": "workspace:*",
48
+ "@batijs/trpc": "workspace:^",
45
49
  "@types/node": "^18.19.14",
46
50
  "cross-fetch": "^4.0.0",
47
51
  "eslint-plugin-solid": "^0.14.0",
48
52
  "solid-js": "^1.8.17",
49
- tailwindcss: "^3.4.3",
53
+ tailwindcss: "^3.4.4",
50
54
  typescript: "^5.4.5",
51
- vike: "^0.4.172",
55
+ vike: "^0.4.174",
52
56
  "vike-solid": "^0.4.5",
53
- vite: "^5.2.11",
57
+ vite: "^5.2.12",
54
58
  "vite-plugin-solid": "^2.10.2"
55
59
  },
56
60
  dependencies: {
@@ -112,6 +116,12 @@ var require_package = __commonJS({
112
116
  },
113
117
  "./pages/star-wars/index/+title": {
114
118
  types: "./dist/types/pages/star-wars/index/+title.d.ts"
119
+ },
120
+ "./pages/todo/TodoList": {
121
+ types: "./dist/types/pages/todo/TodoList.d.ts"
122
+ },
123
+ "./pages/todo/+Page": {
124
+ types: "./dist/types/pages/todo/+Page.d.ts"
115
125
  }
116
126
  },
117
127
  typesVersions: {
@@ -163,6 +173,12 @@ var require_package = __commonJS({
163
173
  ],
164
174
  "pages/star-wars/index/+title": [
165
175
  "./dist/types/pages/star-wars/index/+title.d.ts"
176
+ ],
177
+ "pages/todo/TodoList": [
178
+ "./dist/types/pages/todo/TodoList.d.ts"
179
+ ],
180
+ "pages/todo/+Page": [
181
+ "./dist/types/pages/todo/+Page.d.ts"
166
182
  ]
167
183
  }
168
184
  }
@@ -20,8 +20,7 @@ export default function LayoutDefault(props: { children?: JSX.Element }) {
20
20
  <Sidebar>
21
21
  <Logo />
22
22
  <Link href="/">Welcome</Link>
23
- {BATI.has("telefunc") ? <Link href="/todo">Todo (telefunc)</Link> : undefined}
24
- {BATI.has("trpc") ? <Link href="/todo-trpc">Todo (tRPC)</Link> : undefined}
23
+ <Link href="/todo">Todo</Link>
25
24
  <Link href="/star-wars">Data Fetching</Link>
26
25
  </Sidebar>
27
26
  <Content>{props.children}</Content>
@@ -0,0 +1,13 @@
1
+ import type { Data } from "@batijs/shared-todo/pages/todo/+data";
2
+ import { useData } from "vike-solid/useData";
3
+ import { TodoList } from "./TodoList.js";
4
+
5
+ export default function Page() {
6
+ const initialTodoItems = useData<Data>();
7
+ return (
8
+ <>
9
+ <h1>To-do List</h1>
10
+ <TodoList initialTodoItems={initialTodoItems} />
11
+ </>
12
+ );
13
+ }
@@ -0,0 +1,49 @@
1
+ import { onNewTodo } from "@batijs/telefunc/pages/todo/TodoList.telefunc";
2
+ import { trpc } from "@batijs/trpc/trpc/client";
3
+ import { createSignal, For, untrack } from "solid-js";
4
+
5
+ export function TodoList(props: { initialTodoItems: { text: string }[] }) {
6
+ const [todoItems, setTodoItems] = createSignal(props.initialTodoItems);
7
+ const [newTodo, setNewTodo] = createSignal("");
8
+ return (
9
+ <>
10
+ <ul>
11
+ <For each={todoItems()}>{(todoItem) => <li>{todoItem.text}</li>}</For>
12
+ </ul>
13
+ <div>
14
+ <form
15
+ onSubmit={async (ev) => {
16
+ ev.preventDefault();
17
+
18
+ // Optimistic UI update
19
+ setTodoItems((prev) => [...prev, { text: untrack(newTodo) }]);
20
+ try {
21
+ if (BATI.has("telefunc")) {
22
+ await onNewTodo({ text: untrack(newTodo) });
23
+ } else if (BATI.has("trpc")) {
24
+ await trpc.onNewTodo.mutate(untrack(newTodo));
25
+ } else {
26
+ const response = await fetch("/api/todo/create", {
27
+ method: "POST",
28
+ body: JSON.stringify({ text: untrack(newTodo) }),
29
+ headers: {
30
+ "Content-Type": "application/json",
31
+ },
32
+ });
33
+ await response.blob();
34
+ }
35
+ setNewTodo("");
36
+ } catch (e) {
37
+ console.error(e);
38
+ // rollback
39
+ setTodoItems((prev) => prev.slice(0, -1));
40
+ }
41
+ }}
42
+ >
43
+ <input type="text" onChange={(ev) => setNewTodo(ev.target.value)} value={newTodo()} />{" "}
44
+ <button type="submit">Add to-do</button>
45
+ </form>
46
+ </div>
47
+ </>
48
+ );
49
+ }
@@ -0,0 +1,5 @@
1
+ export declare function TodoList(props: {
2
+ initialTodoItems: {
3
+ text: string;
4
+ }[];
5
+ }): import("solid-js").JSX.Element;
@@ -44,11 +44,11 @@ var require_package = __commonJS({
44
44
  "@batijs/compile": "workspace:*",
45
45
  "@types/node": "^18.19.14",
46
46
  autoprefixer: "^10.4.19",
47
- daisyui: "^4.11.1",
47
+ daisyui: "^4.12.2",
48
48
  postcss: "^8.4.38",
49
- tailwindcss: "^3.4.3",
50
- vike: "^0.4.172",
51
- vite: "^5.2.11"
49
+ tailwindcss: "^3.4.4",
50
+ vike: "^0.4.174",
51
+ vite: "^5.2.12"
52
52
  },
53
53
  dependencies: {
54
54
  "@batijs/core": "workspace:*"
@@ -42,10 +42,13 @@ var require_package = __commonJS({
42
42
  license: "MIT",
43
43
  devDependencies: {
44
44
  "@batijs/compile": "workspace:*",
45
+ "@batijs/drizzle": "workspace:*",
46
+ "@batijs/shared-no-db": "workspace:*",
47
+ "@batijs/shared-todo": "workspace:*",
45
48
  "@types/node": "^18.19.14",
46
- telefunc: "^0.1.72",
47
- vike: "^0.4.172",
48
- vite: "^5.2.11"
49
+ telefunc: "^0.1.74",
50
+ vike: "^0.4.174",
51
+ vite: "^5.2.12"
49
52
  },
50
53
  dependencies: {
51
54
  "@batijs/core": "workspace:*"
@@ -59,12 +62,18 @@ var require_package = __commonJS({
59
62
  }
60
63
  },
61
64
  exports: {
65
+ "./pages/todo/TodoList.telefunc": {
66
+ types: "./dist/types/pages/todo/TodoList.telefunc.d.ts"
67
+ },
62
68
  "./server/telefunc-handler": {
63
69
  types: "./dist/types/server/telefunc-handler.d.ts"
64
70
  }
65
71
  },
66
72
  typesVersions: {
67
73
  "*": {
74
+ "pages/todo/TodoList.telefunc": [
75
+ "./dist/types/pages/todo/TodoList.telefunc.d.ts"
76
+ ],
68
77
  "server/telefunc-handler": [
69
78
  "./dist/types/server/telefunc-handler.d.ts"
70
79
  ]
@@ -0,0 +1,11 @@
1
+ import { db } from "@batijs/drizzle/database/db";
2
+ import { todoTable } from "@batijs/drizzle/database/schema";
3
+ import { lowDb } from "@batijs/shared-no-db/database/todoItems";
4
+
5
+ export async function onNewTodo({ text }: { text: string }) {
6
+ if (BATI.has("drizzle")) {
7
+ await db.insert(todoTable).values({ text });
8
+ } else {
9
+ await lowDb.update(({ todo }) => todo.push({ text }));
10
+ }
11
+ }
@@ -0,0 +1,3 @@
1
+ export declare function onNewTodo({ text }: {
2
+ text: string;
3
+ }): Promise<void>;
@@ -42,11 +42,13 @@ var require_package = __commonJS({
42
42
  license: "MIT",
43
43
  devDependencies: {
44
44
  "@batijs/compile": "workspace:*",
45
- "@batijs/shared-db": "workspace:*",
45
+ "@batijs/drizzle": "workspace:*",
46
+ "@batijs/shared-no-db": "workspace:*",
47
+ "@batijs/shared-todo": "workspace:*",
46
48
  "@trpc/client": "^10.45.2",
47
49
  "@trpc/server": "^10.45.2",
48
50
  "@types/node": "^18.19.14",
49
- vite: "^5.2.11"
51
+ vite: "^5.2.12"
50
52
  },
51
53
  dependencies: {
52
54
  "@batijs/core": "workspace:*"
@@ -1,4 +1,6 @@
1
- import { todoItems } from "@batijs/shared-db/database/todoItems";
1
+ import { db } from "@batijs/drizzle/database/db";
2
+ import { todoTable } from "@batijs/drizzle/database/schema";
3
+ import { lowDb } from "@batijs/shared-no-db/database/todoItems";
2
4
  import { initTRPC } from "@trpc/server";
3
5
 
4
6
  /**
@@ -26,8 +28,11 @@ export const appRouter = router({
26
28
  throw new Error("Input is not a string");
27
29
  })
28
30
  .mutation(async (opts) => {
29
- todoItems.push({ text: opts.input });
30
- return { todoItems };
31
+ if (BATI.has("drizzle")) {
32
+ await db.insert(todoTable).values({ text: opts.input });
33
+ } else {
34
+ await lowDb.update(({ todo }) => todo.push({ text: opts.input }));
35
+ }
31
36
  }),
32
37
  });
33
38
 
@@ -31,8 +31,6 @@ export declare const trpc: {
31
31
  _input_out: string;
32
32
  _output_in: typeof import("@trpc/server").unsetMarker;
33
33
  _output_out: typeof import("@trpc/server").unsetMarker;
34
- }, {
35
- todoItems: import("@batijs/shared-db/database/todoItems").TodoItem[];
36
- }>>;
34
+ }, void>>;
37
35
  };
38
36
  };
@@ -57,8 +57,6 @@ export declare const appRouter: import("@trpc/server").CreateRouterInner<import(
57
57
  _input_out: string;
58
58
  _output_in: typeof import("@trpc/server").unsetMarker;
59
59
  _output_out: typeof import("@trpc/server").unsetMarker;
60
- }, {
61
- todoItems: import("@batijs/shared-db/database/todoItems").TodoItem[];
62
- }>;
60
+ }, void>;
63
61
  }>;
64
62
  export type AppRouter = typeof appRouter;
@@ -44,8 +44,8 @@ var require_package = __commonJS({
44
44
  "@batijs/compile": "workspace:*",
45
45
  "@types/node": "^18.19.14",
46
46
  "@vite-plugin-vercel/vike": "^7.0.0",
47
- vike: "^0.4.172",
48
- vite: "^5.2.11",
47
+ vike: "^0.4.174",
48
+ vite: "^5.2.12",
49
49
  "vite-plugin-vercel": "^7.0.0"
50
50
  },
51
51
  dependencies: {
@@ -42,18 +42,22 @@ var require_package = __commonJS({
42
42
  license: "MIT",
43
43
  devDependencies: {
44
44
  "@batijs/compile": "workspace:*",
45
+ "@batijs/drizzle": "workspace:*",
46
+ "@batijs/shared-todo": "workspace:*",
47
+ "@batijs/telefunc": "workspace:*",
48
+ "@batijs/trpc": "workspace:^",
45
49
  "@types/node": "^18.19.14",
46
- "@vitejs/plugin-vue": "^5.0.4",
50
+ "@vitejs/plugin-vue": "^5.0.5",
47
51
  "@vue/compiler-sfc": "^3.4.27",
48
52
  "@vue/server-renderer": "^3.4.27",
49
53
  "cross-fetch": "^4.0.0",
50
54
  "eslint-plugin-vue": "^9.26.0",
51
- tailwindcss: "^3.4.3",
55
+ tailwindcss: "^3.4.4",
52
56
  typescript: "^5.4.5",
53
57
  "unplugin-vue-markdown": "^0.26.2",
54
- vike: "^0.4.172",
55
- "vike-vue": "^0.6.6",
56
- vite: "^5.2.11",
58
+ vike: "^0.4.174",
59
+ "vike-vue": "^0.7.1",
60
+ vite: "^5.2.12",
57
61
  vue: "^3.4.27",
58
62
  "vue-gtag": "^2.0.1"
59
63
  },
@@ -3,10 +3,7 @@
3
3
  <Sidebar>
4
4
  <Logo />
5
5
  <Link href="/"> Welcome </Link>
6
- <!-- BATI.has("telefunc") -->
7
- <Link href="/todo"> Todo (telefunc) </Link>
8
- <!-- BATI.has("trpc") -->
9
- <Link href="/todo-trpc"> Todo (tRPC) </Link>
6
+ <Link href="/todo"> Todo </Link>
10
7
  <Link href="/star-wars"> Data Fetching </Link>
11
8
  </Sidebar>
12
9
  <Content><slot /></Content>
@@ -0,0 +1,14 @@
1
+ <template>
2
+ <div>
3
+ <h1>To-do List</h1>
4
+ <TodoList :initial-todo-items="initialTodoItems" />
5
+ </div>
6
+ </template>
7
+
8
+ <script lang="ts" setup>
9
+ import type { Data } from "@batijs/shared-todo/pages/todo/+data";
10
+ import { useData } from "vike-vue/useData";
11
+ import TodoList from "./TodoList.vue";
12
+
13
+ const initialTodoItems = useData<Data>();
14
+ </script>