@batijs/cli 0.0.196 → 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 (121) 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/$README.md.js +9 -3
  30. package/dist/boilerplates/@batijs/react/files/$package.json.js +25 -9
  31. package/dist/boilerplates/@batijs/react/files/layouts/LayoutDefault.tsx +1 -2
  32. package/dist/boilerplates/@batijs/react/files/pages/todo/+Page.tsx +14 -0
  33. package/dist/boilerplates/@batijs/react/files/pages/todo/TodoList.tsx +51 -0
  34. package/dist/boilerplates/@batijs/react/types/pages/+config.d.ts +9 -6
  35. package/dist/boilerplates/@batijs/react/types/pages/todo/TodoList.d.ts +5 -0
  36. package/dist/boilerplates/@batijs/shared/files/package.json +3 -3
  37. package/dist/boilerplates/@batijs/shared-no-db/files/$package.json.js +91 -0
  38. package/dist/boilerplates/@batijs/shared-no-db/files/database/todoItems.ts +13 -0
  39. package/dist/boilerplates/@batijs/shared-no-db/types/database/todoItems.d.ts +9 -0
  40. package/dist/boilerplates/@batijs/shared-todo/files/pages/todo/+data.ts +15 -0
  41. package/dist/boilerplates/@batijs/shared-todo/files/server/create-todo-handler.ts +24 -0
  42. package/dist/boilerplates/@batijs/shared-todo/types/pages/todo/+data.d.ts +4 -0
  43. package/dist/boilerplates/@batijs/shared-todo/types/server/create-todo-handler.d.ts +2 -0
  44. package/dist/boilerplates/@batijs/solid/files/$README.md.js +9 -3
  45. package/dist/boilerplates/@batijs/solid/files/$package.json.js +19 -3
  46. package/dist/boilerplates/@batijs/solid/files/layouts/LayoutDefault.tsx +1 -2
  47. package/dist/boilerplates/@batijs/solid/files/pages/todo/+Page.tsx +13 -0
  48. package/dist/boilerplates/@batijs/solid/files/pages/todo/TodoList.tsx +49 -0
  49. package/dist/boilerplates/@batijs/solid/types/pages/todo/TodoList.d.ts +5 -0
  50. package/dist/boilerplates/@batijs/tailwindcss/files/$package.json.js +4 -4
  51. package/dist/boilerplates/@batijs/telefunc/files/$package.json.js +12 -3
  52. package/dist/boilerplates/@batijs/telefunc/files/pages/todo/TodoList.telefunc.ts +11 -0
  53. package/dist/boilerplates/@batijs/telefunc/types/pages/todo/TodoList.telefunc.d.ts +3 -0
  54. package/dist/boilerplates/@batijs/trpc/files/$package.json.js +4 -2
  55. package/dist/boilerplates/@batijs/trpc/files/trpc/server.ts +8 -3
  56. package/dist/boilerplates/@batijs/trpc/types/trpc/client.d.ts +1 -3
  57. package/dist/boilerplates/@batijs/trpc/types/trpc/server.d.ts +1 -3
  58. package/dist/boilerplates/@batijs/vercel/files/$package.json.js +2 -2
  59. package/dist/boilerplates/@batijs/vue/files/$README.md.js +9 -3
  60. package/dist/boilerplates/@batijs/vue/files/$package.json.js +9 -5
  61. package/dist/boilerplates/@batijs/vue/files/layouts/LayoutDefault.vue +1 -4
  62. package/dist/boilerplates/@batijs/vue/files/pages/todo/+Page.vue +14 -0
  63. package/dist/boilerplates/@batijs/vue/files/pages/todo/TodoList.vue +49 -0
  64. package/dist/boilerplates/@batijs/vue/types/pages/+config.d.ts +95 -2
  65. package/dist/boilerplates/boilerplates.json +23 -98
  66. package/dist/{chunk-5DE3DJHR.js → chunk-TGVSJ5SD.js} +1 -1
  67. package/dist/index.js +21 -30
  68. package/dist/{prompt-YMZWKECL.js → prompt-XFX2ZGRD.js} +27 -54
  69. package/package.json +8 -8
  70. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/+Page.tsx +0 -27
  71. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/+data.ts +0 -9
  72. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/TodoList.telefunc.ts +0 -6
  73. package/dist/boilerplates/@batijs/react-telefunc/files/pages/todo/TodoList.tsx +0 -30
  74. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/+data.d.ts +0 -2
  75. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/TodoList.d.ts +0 -4
  76. package/dist/boilerplates/@batijs/react-telefunc/types/pages/todo/TodoList.telefunc.d.ts +0 -4
  77. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+Page.tsx +0 -27
  78. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+config.ts +0 -5
  79. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/+data.ts +0 -9
  80. package/dist/boilerplates/@batijs/react-trpc/files/pages/todo-trpc/TodoList.tsx +0 -30
  81. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+Page.d.ts +0 -1
  82. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  83. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  84. package/dist/boilerplates/@batijs/react-trpc/types/pages/todo-trpc/TodoList.d.ts +0 -4
  85. package/dist/boilerplates/@batijs/shared-db/files/database/todoItems.ts +0 -12
  86. package/dist/boilerplates/@batijs/shared-db/types/database/todoItems.d.ts +0 -6
  87. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+Page.tsx +0 -28
  88. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+config.ts +0 -3
  89. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/+data.ts +0 -9
  90. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/TodoList.telefunc.ts +0 -8
  91. package/dist/boilerplates/@batijs/solid-telefunc/files/pages/todo/TodoList.tsx +0 -28
  92. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+config.d.ts +0 -4
  93. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/+data.d.ts +0 -2
  94. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/TodoList.d.ts +0 -4
  95. package/dist/boilerplates/@batijs/solid-telefunc/types/pages/todo/TodoList.telefunc.d.ts +0 -5
  96. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+Page.tsx +0 -28
  97. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+config.ts +0 -3
  98. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/+data.ts +0 -9
  99. package/dist/boilerplates/@batijs/solid-trpc/files/pages/todo-trpc/TodoList.tsx +0 -28
  100. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+Page.d.ts +0 -1
  101. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  102. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  103. package/dist/boilerplates/@batijs/solid-trpc/types/pages/todo-trpc/TodoList.d.ts +0 -4
  104. package/dist/boilerplates/@batijs/vue-telefunc/files/components/TodoList.telefunc.ts +0 -8
  105. package/dist/boilerplates/@batijs/vue-telefunc/files/components/TodoList.vue +0 -33
  106. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+Page.vue +0 -20
  107. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+config.ts +0 -3
  108. package/dist/boilerplates/@batijs/vue-telefunc/files/pages/todo/+data.ts +0 -9
  109. package/dist/boilerplates/@batijs/vue-telefunc/types/components/TodoList.telefunc.d.ts +0 -5
  110. package/dist/boilerplates/@batijs/vue-telefunc/types/pages/todo/+config.d.ts +0 -4
  111. package/dist/boilerplates/@batijs/vue-telefunc/types/pages/todo/+data.d.ts +0 -2
  112. package/dist/boilerplates/@batijs/vue-trpc/files/components/TodoListTrpc.vue +0 -31
  113. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+Page.vue +0 -20
  114. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+config.ts +0 -3
  115. package/dist/boilerplates/@batijs/vue-trpc/files/pages/todo-trpc/+data.ts +0 -9
  116. package/dist/boilerplates/@batijs/vue-trpc/types/pages/todo-trpc/+config.d.ts +0 -4
  117. package/dist/boilerplates/@batijs/vue-trpc/types/pages/todo-trpc/+data.d.ts +0 -2
  118. /package/dist/boilerplates/@batijs/{react-telefunc → react}/types/pages/todo/+Page.d.ts +0 -0
  119. /package/dist/boilerplates/@batijs/{react-telefunc → shared-todo}/files/pages/todo/+config.ts +0 -0
  120. /package/dist/boilerplates/@batijs/{react-telefunc → shared-todo}/types/pages/todo/+config.d.ts +0 -0
  121. /package/dist/boilerplates/@batijs/{solid-telefunc → solid}/types/pages/todo/+Page.d.ts +0 -0
@@ -41,23 +41,27 @@ var require_package = __commonJS({
41
41
  author: "",
42
42
  license: "MIT",
43
43
  devDependencies: {
44
- "@babel/core": "^7.24.6",
45
- "@babel/plugin-syntax-flow": "^7.24.6",
46
- "@babel/plugin-transform-react-jsx": "^7.24.6",
47
- "@batijs/compile": "workspace:*",
44
+ "@batijs/compile": "workspace:^",
45
+ "@batijs/drizzle": "workspace:^",
46
+ "@batijs/shared-todo": "workspace:^",
47
+ "@batijs/telefunc": "workspace:^",
48
+ "@batijs/trpc": "workspace:^",
49
+ "@babel/core": "^7.24.7",
50
+ "@babel/plugin-syntax-flow": "^7.24.7",
51
+ "@babel/plugin-transform-react-jsx": "^7.24.7",
48
52
  "@types/node": "^18.19.14",
49
53
  "@types/react": "^18.3.3",
50
54
  "@types/react-dom": "^18.3.0",
51
55
  "@vitejs/plugin-react": "^4.3.0",
52
56
  "cross-fetch": "^4.0.0",
53
- "eslint-plugin-react": "^7.34.1",
57
+ "eslint-plugin-react": "^7.34.2",
54
58
  react: "^18.3.1",
55
59
  "react-dom": "^18.3.1",
56
- tailwindcss: "^3.4.3",
60
+ tailwindcss: "^3.4.4",
57
61
  typescript: "^5.4.5",
58
- vike: "^0.4.172",
59
- "vike-react": "^0.4.10",
60
- vite: "^5.2.11"
62
+ vike: "^0.4.174",
63
+ "vike-react": "^0.4.13",
64
+ vite: "^5.2.12"
61
65
  },
62
66
  dependencies: {
63
67
  "@batijs/core": "workspace:*"
@@ -118,6 +122,12 @@ var require_package = __commonJS({
118
122
  },
119
123
  "./pages/star-wars/index/+title": {
120
124
  types: "./dist/types/pages/star-wars/index/+title.d.ts"
125
+ },
126
+ "./pages/todo/TodoList": {
127
+ types: "./dist/types/pages/todo/TodoList.d.ts"
128
+ },
129
+ "./pages/todo/+Page": {
130
+ types: "./dist/types/pages/todo/+Page.d.ts"
121
131
  }
122
132
  },
123
133
  typesVersions: {
@@ -169,6 +179,12 @@ var require_package = __commonJS({
169
179
  ],
170
180
  "pages/star-wars/index/+title": [
171
181
  "./dist/types/pages/star-wars/index/+title.d.ts"
182
+ ],
183
+ "pages/todo/TodoList": [
184
+ "./dist/types/pages/todo/TodoList.d.ts"
185
+ ],
186
+ "pages/todo/+Page": [
187
+ "./dist/types/pages/todo/+Page.d.ts"
172
188
  ]
173
189
  }
174
190
  }
@@ -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>;
@@ -3,32 +3,38 @@ import { loadReadme } from "@batijs/core";
3
3
  async function getReadme(props) {
4
4
  const content = await loadReadme(props);
5
5
  const about = `
6
+
6
7
  This app is ready to start. It's powered by [Vike](https://vike.dev) and [SolidJS](https://www.solidjs.com/guides/getting-started).
7
8
 
8
9
  ### \`/pages/+config.ts\`
9
- Such files are [the interface](https://vike.dev/config) between Vike and your code. It defines:
10
+
11
+ Such \`+\` files are [the interface](https://vike.dev/config) between Vike and your code. It defines:
10
12
  - A default [\`<Layout>\` component](https://vike.dev/Layout) (that wraps your [\`<Page>\` components](https://vike.dev/Page)).
11
13
  - A default [\`title\`](https://vike.dev/head).
12
14
  - Default [\`<head>\` tags](https://vike.dev/head).
13
15
 
14
16
  ### Routing
17
+
15
18
  [Vike's built-in router](https://vike.dev/routing) lets you choose between:
16
19
  - [Filesystem Routing](https://vike.dev/filesystem-routing) (the URL of a page is determined based on where its \`+Page.jsx\` file is located on the filesystem)
17
20
  - [Route Strings](https://vike.dev/route-string)
18
21
  - [Route Functions](https://vike.dev/route-function)
19
22
 
20
23
  ### \`/pages/_error/+Page.jsx\`
24
+
21
25
  The [error page](https://vike.dev/error-page) which is rendered when errors occur.
22
26
 
23
27
  ### \`/pages/+onPageTransitionStart.ts\` and \`/pages/+onPageTransitionEnd.ts\`
28
+
24
29
  The [\`onPageTransitionStart()\` hook](https://vike.dev/onPageTransitionStart), together with [\`onPageTransitionEnd()\`](https://vike.dev/onPageTransitionEnd), enables you to implement page transition animations.
25
30
 
26
31
  ### SSR
32
+
27
33
  SSR is enabled by default. You can [disable it](https://vike.dev/ssr) for all your pages or only for some pages.
28
34
 
29
35
  ### HTML Streaming
30
- You can enable/disable [HTML streaming](https://vike.dev/streaming) for all your pages, or only for some pages while still using it for others.
31
- `;
36
+
37
+ You can enable/disable [HTML streaming](https://vike.dev/streaming) for all your pages, or only for some pages while still using it for others.`;
32
38
  content.addAbout(about);
33
39
  return content.finalize();
34
40
  }
@@ -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:*"