create-taserjs 0.1.12 → 0.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +8 -44
  2. package/dist/cli-CBhdDKHU.cjs +1398 -0
  3. package/dist/cli-hL7a4VS0.js +1237 -0
  4. package/dist/cli-hL7a4VS0.js.map +1 -0
  5. package/dist/cli.cjs +4 -0
  6. package/dist/cli.d.cts +4 -0
  7. package/dist/cli.d.cts.map +1 -0
  8. package/dist/cli.d.ts +4 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/cli.js +3 -0
  11. package/dist/index.cjs +25 -0
  12. package/dist/index.d.cts +119 -0
  13. package/dist/index.d.cts.map +1 -0
  14. package/dist/index.d.ts +119 -0
  15. package/dist/index.d.ts.map +1 -0
  16. package/dist/index.js +2 -0
  17. package/package.json +39 -9
  18. package/src/addons/drizzle/index.ts +37 -40
  19. package/src/addons/kysely/index.ts +19 -22
  20. package/src/addons/pino/index.ts +2 -2
  21. package/src/addons/prisma/index.ts +18 -22
  22. package/src/addons/registry.ts +37 -73
  23. package/src/addons/types.ts +12 -13
  24. package/src/addons/validators.ts +22 -23
  25. package/src/addons/winston/index.ts +3 -3
  26. package/src/cli.ts +96 -56
  27. package/src/commands/create.ts +118 -249
  28. package/src/core/package-manager.ts +36 -55
  29. package/src/core/scaffold-engine.ts +100 -75
  30. package/src/core/targets.ts +19 -55
  31. package/src/core/types.ts +18 -53
  32. package/src/index.ts +8 -0
  33. package/src/templates/base.ts +139 -51
  34. package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
  35. package/dist/cjs/addons/arktype/index.cjs +0 -6
  36. package/dist/cjs/addons/arktype/index.cjs.map +0 -1
  37. package/dist/cjs/addons/arktype/index.d.cts +0 -1
  38. package/dist/cjs/addons/drizzle/index.cjs +0 -131
  39. package/dist/cjs/addons/drizzle/index.cjs.map +0 -1
  40. package/dist/cjs/addons/drizzle/index.d.cts +0 -2
  41. package/dist/cjs/addons/kysely/index.cjs +0 -103
  42. package/dist/cjs/addons/kysely/index.cjs.map +0 -1
  43. package/dist/cjs/addons/kysely/index.d.cts +0 -2
  44. package/dist/cjs/addons/pino/index.cjs +0 -30
  45. package/dist/cjs/addons/pino/index.cjs.map +0 -1
  46. package/dist/cjs/addons/pino/index.d.cts +0 -2
  47. package/dist/cjs/addons/prisma/index.cjs +0 -133
  48. package/dist/cjs/addons/prisma/index.cjs.map +0 -1
  49. package/dist/cjs/addons/prisma/index.d.cts +0 -2
  50. package/dist/cjs/addons/registry.cjs +0 -65
  51. package/dist/cjs/addons/registry.cjs.map +0 -1
  52. package/dist/cjs/addons/registry.d.cts +0 -5
  53. package/dist/cjs/addons/types.d.cts +0 -16
  54. package/dist/cjs/addons/valibot/index.cjs +0 -6
  55. package/dist/cjs/addons/valibot/index.cjs.map +0 -1
  56. package/dist/cjs/addons/valibot/index.d.cts +0 -1
  57. package/dist/cjs/addons/validators.cjs +0 -38
  58. package/dist/cjs/addons/validators.cjs.map +0 -1
  59. package/dist/cjs/addons/validators.d.cts +0 -5
  60. package/dist/cjs/addons/winston/index.cjs +0 -34
  61. package/dist/cjs/addons/winston/index.cjs.map +0 -1
  62. package/dist/cjs/addons/winston/index.d.cts +0 -2
  63. package/dist/cjs/addons/zod/index.cjs +0 -6
  64. package/dist/cjs/addons/zod/index.cjs.map +0 -1
  65. package/dist/cjs/addons/zod/index.d.cts +0 -1
  66. package/dist/cjs/cli.cjs +0 -65
  67. package/dist/cjs/cli.cjs.map +0 -1
  68. package/dist/cjs/cli.d.cts +0 -2
  69. package/dist/cjs/commands/create.cjs +0 -332
  70. package/dist/cjs/commands/create.cjs.map +0 -1
  71. package/dist/cjs/commands/create.d.cts +0 -14
  72. package/dist/cjs/core/json-output.cjs +0 -16
  73. package/dist/cjs/core/json-output.cjs.map +0 -1
  74. package/dist/cjs/core/json-output.d.cts +0 -4
  75. package/dist/cjs/core/package-manager.cjs +0 -56
  76. package/dist/cjs/core/package-manager.cjs.map +0 -1
  77. package/dist/cjs/core/package-manager.d.cts +0 -8
  78. package/dist/cjs/core/parse-options.cjs +0 -95
  79. package/dist/cjs/core/parse-options.cjs.map +0 -1
  80. package/dist/cjs/core/parse-options.d.cts +0 -35
  81. package/dist/cjs/core/project-config.cjs +0 -23
  82. package/dist/cjs/core/project-config.cjs.map +0 -1
  83. package/dist/cjs/core/project-config.d.cts +0 -2
  84. package/dist/cjs/core/resolve-packages.cjs +0 -58
  85. package/dist/cjs/core/resolve-packages.cjs.map +0 -1
  86. package/dist/cjs/core/resolve-packages.d.cts +0 -2
  87. package/dist/cjs/core/scaffold-engine.cjs +0 -72
  88. package/dist/cjs/core/scaffold-engine.cjs.map +0 -1
  89. package/dist/cjs/core/scaffold-engine.d.cts +0 -2
  90. package/dist/cjs/core/targets.cjs +0 -171
  91. package/dist/cjs/core/targets.cjs.map +0 -1
  92. package/dist/cjs/core/targets.d.cts +0 -49
  93. package/dist/cjs/core/types.cjs +0 -52
  94. package/dist/cjs/core/types.cjs.map +0 -1
  95. package/dist/cjs/core/types.d.cts +0 -57
  96. package/dist/cjs/core/validate-project-name.cjs +0 -44
  97. package/dist/cjs/core/validate-project-name.cjs.map +0 -1
  98. package/dist/cjs/core/validate-project-name.d.cts +0 -1
  99. package/dist/cjs/frameworks/index.cjs +0 -116
  100. package/dist/cjs/frameworks/index.cjs.map +0 -1
  101. package/dist/cjs/frameworks/index.d.cts +0 -18
  102. package/dist/cjs/scaffold.d.cts +0 -3
  103. package/dist/cjs/templates/base.cjs +0 -97
  104. package/dist/cjs/templates/base.cjs.map +0 -1
  105. package/dist/cjs/templates/base.d.cts +0 -9
  106. package/dist/cjs/types.d.cts +0 -1
  107. package/dist/esm/addons/arktype/index.d.ts +0 -1
  108. package/dist/esm/addons/arktype/index.js +0 -7
  109. package/dist/esm/addons/arktype/index.js.map +0 -1
  110. package/dist/esm/addons/drizzle/index.d.ts +0 -2
  111. package/dist/esm/addons/drizzle/index.js +0 -131
  112. package/dist/esm/addons/drizzle/index.js.map +0 -1
  113. package/dist/esm/addons/kysely/index.d.ts +0 -2
  114. package/dist/esm/addons/kysely/index.js +0 -103
  115. package/dist/esm/addons/kysely/index.js.map +0 -1
  116. package/dist/esm/addons/pino/index.d.ts +0 -2
  117. package/dist/esm/addons/pino/index.js +0 -30
  118. package/dist/esm/addons/pino/index.js.map +0 -1
  119. package/dist/esm/addons/prisma/index.d.ts +0 -2
  120. package/dist/esm/addons/prisma/index.js +0 -133
  121. package/dist/esm/addons/prisma/index.js.map +0 -1
  122. package/dist/esm/addons/registry.d.ts +0 -5
  123. package/dist/esm/addons/registry.js +0 -63
  124. package/dist/esm/addons/registry.js.map +0 -1
  125. package/dist/esm/addons/types.d.ts +0 -16
  126. package/dist/esm/addons/valibot/index.d.ts +0 -1
  127. package/dist/esm/addons/valibot/index.js +0 -7
  128. package/dist/esm/addons/valibot/index.js.map +0 -1
  129. package/dist/esm/addons/validators.d.ts +0 -5
  130. package/dist/esm/addons/validators.js +0 -36
  131. package/dist/esm/addons/validators.js.map +0 -1
  132. package/dist/esm/addons/winston/index.d.ts +0 -2
  133. package/dist/esm/addons/winston/index.js +0 -34
  134. package/dist/esm/addons/winston/index.js.map +0 -1
  135. package/dist/esm/addons/zod/index.d.ts +0 -1
  136. package/dist/esm/addons/zod/index.js +0 -7
  137. package/dist/esm/addons/zod/index.js.map +0 -1
  138. package/dist/esm/cli.d.ts +0 -2
  139. package/dist/esm/cli.js +0 -62
  140. package/dist/esm/cli.js.map +0 -1
  141. package/dist/esm/commands/create.d.ts +0 -14
  142. package/dist/esm/commands/create.js +0 -327
  143. package/dist/esm/commands/create.js.map +0 -1
  144. package/dist/esm/core/json-output.d.ts +0 -4
  145. package/dist/esm/core/json-output.js +0 -14
  146. package/dist/esm/core/json-output.js.map +0 -1
  147. package/dist/esm/core/package-manager.d.ts +0 -8
  148. package/dist/esm/core/package-manager.js +0 -53
  149. package/dist/esm/core/package-manager.js.map +0 -1
  150. package/dist/esm/core/parse-options.d.ts +0 -35
  151. package/dist/esm/core/parse-options.js +0 -89
  152. package/dist/esm/core/parse-options.js.map +0 -1
  153. package/dist/esm/core/project-config.d.ts +0 -2
  154. package/dist/esm/core/project-config.js +0 -21
  155. package/dist/esm/core/project-config.js.map +0 -1
  156. package/dist/esm/core/resolve-packages.d.ts +0 -2
  157. package/dist/esm/core/resolve-packages.js +0 -58
  158. package/dist/esm/core/resolve-packages.js.map +0 -1
  159. package/dist/esm/core/scaffold-engine.d.ts +0 -2
  160. package/dist/esm/core/scaffold-engine.js +0 -70
  161. package/dist/esm/core/scaffold-engine.js.map +0 -1
  162. package/dist/esm/core/targets.d.ts +0 -49
  163. package/dist/esm/core/targets.js +0 -166
  164. package/dist/esm/core/targets.js.map +0 -1
  165. package/dist/esm/core/types.d.ts +0 -57
  166. package/dist/esm/core/types.js +0 -45
  167. package/dist/esm/core/types.js.map +0 -1
  168. package/dist/esm/core/validate-project-name.d.ts +0 -1
  169. package/dist/esm/core/validate-project-name.js +0 -42
  170. package/dist/esm/core/validate-project-name.js.map +0 -1
  171. package/dist/esm/frameworks/index.d.ts +0 -18
  172. package/dist/esm/frameworks/index.js +0 -112
  173. package/dist/esm/frameworks/index.js.map +0 -1
  174. package/dist/esm/scaffold.d.ts +0 -3
  175. package/dist/esm/templates/base.d.ts +0 -9
  176. package/dist/esm/templates/base.js +0 -91
  177. package/dist/esm/templates/base.js.map +0 -1
  178. package/dist/esm/types.d.ts +0 -1
  179. package/src/addons/arktype/index.ts +0 -3
  180. package/src/addons/valibot/index.ts +0 -3
  181. package/src/addons/zod/index.ts +0 -3
  182. package/src/core/json-output.ts +0 -13
  183. package/src/core/parse-options.ts +0 -167
  184. package/src/core/project-config.ts +0 -32
  185. package/src/core/resolve-packages.ts +0 -69
  186. package/src/core/validate-project-name.ts +0 -55
  187. package/src/frameworks/index.ts +0 -120
  188. package/src/scaffold.ts +0 -3
  189. package/src/types.ts +0 -12
@@ -1,5 +1,4 @@
1
1
  import type { BootBinding } from "../addons/types.js";
2
- import type { ScaffoldContext } from "../core/types.js";
3
2
 
4
3
  export function packageJsonTemplate(
5
4
  projectName: string,
@@ -7,14 +6,13 @@ export function packageJsonTemplate(
7
6
  ): string {
8
7
  const pkg = {
9
8
  name: projectName,
10
- version: "1.0.0",
9
+ version: "0.0.1",
11
10
  private: true,
12
11
  type: "module",
13
12
  scripts: {
14
13
  dev: "vite",
15
14
  build: "vite build",
16
- typecheck: "tsc --noEmit -p tsconfig.json",
17
- "taser:generate": "taser generate",
15
+ start: "node dist/serve.mjs",
18
16
  ...scripts,
19
17
  },
20
18
  };
@@ -28,13 +26,18 @@ export function tsconfigTemplate(): string {
28
26
  compilerOptions: {
29
27
  target: "ES2022",
30
28
  module: "NodeNext",
29
+ moduleResolution: "NodeNext",
31
30
  strict: true,
32
31
  skipLibCheck: true,
33
- verbatimModuleSyntax: true,
34
- isolatedModules: true,
35
- noEmit: true,
32
+ esModuleInterop: true,
36
33
  },
37
- include: ["src", ".taser/types/**/*.d.ts"],
34
+ include: [
35
+ "src/**/*",
36
+ "src/.taserjs/**/*",
37
+ "taserjs.config.ts",
38
+ "vite.config.ts",
39
+ "nitro.config.ts",
40
+ ],
38
41
  },
39
42
  null,
40
43
  2,
@@ -42,81 +45,166 @@ export function tsconfigTemplate(): string {
42
45
  }
43
46
 
44
47
  export function gitignoreTemplate(): string {
45
- return `node_modules
46
- dist
47
- .output
48
- .taser
49
- .DS_Store
50
- *.log
48
+ return `node_modules/
49
+ dist/
50
+ .output/
51
+ .taserjs/
51
52
  .env
53
+ .env.*
54
+ !.env.example
55
+ *.log
52
56
  local.db
53
- drizzle
57
+ drizzle/
58
+ `;
59
+ }
60
+
61
+ export function taserConfigTemplate(): string {
62
+ return `import { defineConfig } from "@taserjs/cli";
63
+
64
+ export default defineConfig({
65
+ serverDir: "src",
66
+ routesDir: "routes",
67
+ outputDir: ".taserjs",
68
+ app: "taser.ts",
69
+ });
70
+ `;
71
+ }
72
+
73
+ export function viteConfigTemplate(preset: string = "none"): string {
74
+ if (preset === "none") {
75
+ return `import { defineConfig } from "vite";
76
+ import { taser } from "@taserjs/plugin/vite";
77
+
78
+ export default defineConfig({
79
+ plugins: [taser()],
80
+ });
81
+ `;
82
+ }
83
+
84
+ return `import { defineConfig } from "vite";
85
+ import { nitro } from "nitro/vite";
86
+ import { taser } from "@taserjs/plugin/vite";
87
+
88
+ export default defineConfig({
89
+ plugins: [taser(), nitro()],
90
+ });
91
+ `;
92
+ }
93
+
94
+ export function nitroConfigTemplate(preset: string): string {
95
+ return `import { defineConfig } from "nitro/config";
96
+ import { taser } from "@taserjs/plugin/nitro";
97
+
98
+ export default defineConfig({
99
+ preset: "${preset}",
100
+ modules: [taser({ standalone: true })],
101
+ });
54
102
  `;
55
103
  }
56
104
 
57
105
  export function contextTemplate(bindings: BootBinding[]): string {
58
- const imports = bindings.map(
59
- (binding) => `import { ${binding.factoryName} } from '${binding.importPath}'`,
60
- );
106
+ const imports = bindings.map((b) => `import { ${b.factoryName} } from "${b.importPath}";`);
61
107
 
62
108
  const bootBody =
63
- bindings.length > 0
64
- ? bindings.map((binding) => ` ${binding.key}: ${binding.factoryName}(),`).join("\n")
65
- : "";
66
-
67
- const bootBlock = bindings.length > 0 ? ` boot: () => ({\n${bootBody}\n }),` : "";
109
+ bindings.length > 0 ? bindings.map((b) => ` ${b.key}: ${b.factoryName}(),`).join("\n") : "";
68
110
 
111
+ const bootBlock = bindings.length > 0 ? ` boot: () => ({\n${bootBody}\n }),\n` : "";
69
112
  const importBlock = imports.length > 0 ? `${imports.join("\n")}\n\n` : "";
70
113
 
71
- return `${importBlock}import { createContext } from '@taserjs/router'
114
+ return `${importBlock}import { createContext } from "@taserjs/router";
72
115
 
73
116
  export const context = createContext({
74
- ${bootBlock}
75
- request: () => ({
117
+ ${bootBlock} request: () => ({
76
118
  requestId: crypto.randomUUID(),
77
119
  }),
78
- })
120
+ });
121
+ `;
122
+ }
123
+
124
+ export function taserTsTemplate(): string {
125
+ return `import { defineTaser } from "@taserjs/router";
126
+ import { context } from "./context.js";
127
+
128
+ export default defineTaser().context(context);
79
129
  `;
80
130
  }
81
131
 
82
132
  export function rootLayoutTemplate(): string {
83
- return `import { cors } from '@taserjs/router/cors'
84
- import { t } from '@taserjs/router'
133
+ return `import { t } from "@taserjs/router";
85
134
 
86
- export default t.layout('/*')
87
- .use(cors())
135
+ export default t.layout("/*").use(async (_args, next) => {
136
+ return await next();
137
+ });
88
138
  `;
89
139
  }
90
140
 
91
141
  export function indexRouteTemplate(): string {
92
- return `import { t } from '@taserjs/router'
93
- import { json } from '@taserjs/router/reply'
142
+ return `import { t } from "@taserjs/router";
94
143
 
95
- export default t.get('/').handler((_ctx) => {
96
- return json({ message: 'Welcome to Taser.js' })
97
- })
144
+ export default t.get("/").handler(() => {
145
+ return Response.json({ message: "Welcome to Taser.js!" });
146
+ });
98
147
  `;
99
148
  }
100
149
 
101
- export function healthRouteTemplate(ctx: ScaffoldContext): string {
102
- const lines: string[] = [];
150
+ export function staticRoutesGenTemplate(): string {
151
+ return `// @ts-nocheck
152
+ import { createTaserApp } from "@taserjs/runtime";
153
+ import taser from "../taser.js";
154
+ import layout_0 from "../routes/$.js";
155
+ import route_0 from "../routes/index.get.js";
156
+
157
+ export type LayoutTree = {
158
+ "/*": typeof layout_0;
159
+ };
160
+
161
+ export const layoutManifest = {
162
+ "/*": layout_0,
163
+ } as const;
164
+
165
+ export const routeManifest = {
166
+ layouts: layoutManifest,
167
+ routes: {
168
+ "/": {
169
+ GET: {
170
+ layouts: ["/*"],
171
+ route: route_0,
172
+ },
173
+ },
174
+ },
175
+ } as const;
176
+
177
+ export type RouteManifest = typeof routeManifest;
103
178
 
104
- if (ctx.logger) {
105
- lines.push(" ctx.logger.info('health check')");
106
- }
179
+ export const app = createTaserApp(routeManifest, taser);
180
+ export default app;
181
+ export const createApp = (overrideTaser?: typeof taser) =>
182
+ createTaserApp(routeManifest, overrideTaser ?? taser);
107
183
 
108
- if (ctx.db) {
109
- lines.push(" // ctx.db is available from context boot");
110
- }
184
+ export type RoutePath = "/";
111
185
 
112
- const body = lines.length > 0 ? `${lines.join("\n")}\n` : "";
113
- const ctxArg = lines.length > 0 ? "(ctx)" : "(_ctx)";
186
+ export type LayoutHierarchy = {
187
+ "/*": readonly [];
188
+ };
114
189
 
115
- return `import { t } from '@taserjs/router'
116
- import { json } from '@taserjs/router/reply'
190
+ export type RouteByPathMethod = {
191
+ "/": {
192
+ GET: {
193
+ layouts: readonly ["/*"];
194
+ };
195
+ };
196
+ };
197
+
198
+ export type AppContext = typeof taser.$Infer.Context;
117
199
 
118
- export default t.get('/health').handler(${ctxArg} => {
119
- ${body} return json({ ok: true })
120
- })
200
+ declare module "@taserjs/router" {
201
+ interface RouterRegister {
202
+ RoutePath: RoutePath;
203
+ LayoutTree: LayoutTree;
204
+ LayoutHierarchy: LayoutHierarchy;
205
+ RouteByPathMethod: RouteByPathMethod;
206
+ AppContext: AppContext;
207
+ }
208
+ }
121
209
  `;
122
210
  }
@@ -1,23 +0,0 @@
1
- //#region \0rolldown/runtime.js
2
- var __create = Object.create;
3
- var __defProp = Object.defineProperty;
4
- var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
- var __getOwnPropNames = Object.getOwnPropertyNames;
6
- var __getProtoOf = Object.getPrototypeOf;
7
- var __hasOwnProp = Object.prototype.hasOwnProperty;
8
- var __copyProps = (to, from, except, desc) => {
9
- if (from && typeof from === "object" || typeof from === "function") for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
10
- key = keys[i];
11
- if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, {
12
- get: ((k) => from[k]).bind(null, key),
13
- enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
14
- });
15
- }
16
- return to;
17
- };
18
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule || !__hasOwnProp.call(mod, "default") ? __defProp(target, "default", {
19
- value: mod,
20
- enumerable: true
21
- }) : target, mod));
22
- //#endregion
23
- exports.__toESM = __toESM;
@@ -1,6 +0,0 @@
1
- //#region src/addons/arktype/index.ts
2
- var arktypeAddon = require("../validators.cjs").ValidatorAddon("arktype");
3
- //#endregion
4
- exports.arktypeAddon = arktypeAddon;
5
-
6
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/arktype/index.ts"],"sourcesContent":["import { ValidatorAddon } from \"../validators.js\";\n\nexport const arktypeAddon = ValidatorAddon(\"arktype\");\n"],"mappings":";AAEA,IAAa,0CAAe,CAAA,CAAA,eAAe,SAAS"}
@@ -1 +0,0 @@
1
- export declare const arktypeAddon: import('../types.js').AddonDefinition;
@@ -1,131 +0,0 @@
1
- //#region src/addons/drizzle/index.ts
2
- function schemaSource(driver) {
3
- switch (driver) {
4
- case "postgres": return `import { pgTable, serial, text } from 'drizzle-orm/pg-core'
5
-
6
- export const users = pgTable('users', {
7
- id: serial('id').primaryKey(),
8
- email: text('email').notNull(),
9
- })
10
- `;
11
- case "mysql": return `import { mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core'
12
-
13
- export const users = mysqlTable('users', {
14
- id: serial('id').primaryKey(),
15
- email: varchar('email', { length: 255 }).notNull(),
16
- })
17
- `;
18
- default: return `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'
19
-
20
- export const users = sqliteTable('users', {
21
- id: integer('id').primaryKey({ autoIncrement: true }),
22
- email: text('email').notNull(),
23
- })
24
- `;
25
- }
26
- }
27
- function dbIndexSource(driver) {
28
- switch (driver) {
29
- case "postgres": return `import { drizzle } from 'drizzle-orm/node-postgres'
30
- import pg from 'pg'
31
-
32
- import * as schema from './schema.js'
33
-
34
- export function createDb() {
35
- const pool = new pg.Pool({
36
- connectionString: process.env.DATABASE_URL,
37
- })
38
- return drizzle(pool, { schema })
39
- }
40
- `;
41
- case "mysql": return `import { drizzle } from 'drizzle-orm/mysql2'
42
- import mysql from 'mysql2/promise'
43
-
44
- import * as schema from './schema.js'
45
-
46
- export function createDb() {
47
- const pool = mysql.createPool(process.env.DATABASE_URL ?? '')
48
- return drizzle(pool, { schema, mode: 'default' })
49
- }
50
- `;
51
- default: return `import Database from 'better-sqlite3'
52
- import { drizzle } from 'drizzle-orm/better-sqlite3'
53
-
54
- import * as schema from './schema.js'
55
-
56
- export function createDb() {
57
- const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')
58
- const client = new Database(filePath)
59
- return drizzle(client, { schema })
60
- }
61
- `;
62
- }
63
- }
64
- function drizzleConfigSource(driver) {
65
- return `import { defineConfig } from 'drizzle-kit'
66
-
67
- export default defineConfig({
68
- schema: './src/db/schema.ts',
69
- out: './drizzle',
70
- dialect: '${driver === "postgres" ? "postgresql" : driver === "mysql" ? "mysql" : "sqlite"}',
71
- dbCredentials: {
72
- url: process.env.DATABASE_URL ?? '',
73
- },
74
- })
75
- `;
76
- }
77
- function envExample(driver) {
78
- switch (driver) {
79
- case "postgres": return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
80
- case "mysql": return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
81
- default: return "DATABASE_URL=file:./local.db\n";
82
- }
83
- }
84
- function driverPackages(driver) {
85
- switch (driver) {
86
- case "postgres": return ["pg"];
87
- case "mysql": return ["mysql2"];
88
- default: return ["better-sqlite3"];
89
- }
90
- }
91
- function driverDevPackages(driver) {
92
- switch (driver) {
93
- case "postgres": return ["@types/pg"];
94
- case "sqlite": return ["@types/better-sqlite3"];
95
- default: return [];
96
- }
97
- }
98
- var drizzleAddon = {
99
- id: "drizzle",
100
- category: "database",
101
- dependencies(ctx) {
102
- return ["drizzle-orm", ...driverPackages(ctx.driver ?? "sqlite")];
103
- },
104
- devDependencies(ctx) {
105
- return ["drizzle-kit", ...driverDevPackages(ctx.driver ?? "sqlite")];
106
- },
107
- scripts() {
108
- return {
109
- "db:generate": "drizzle-kit generate",
110
- "db:push": "drizzle-kit push"
111
- };
112
- },
113
- bootBinding() {
114
- return {
115
- key: "db",
116
- importPath: "./db/index.js",
117
- factoryName: "createDb"
118
- };
119
- },
120
- async apply(ctx, write) {
121
- const driver = ctx.driver ?? "sqlite";
122
- await write("src/db/schema.ts", schemaSource(driver));
123
- await write("src/db/index.ts", dbIndexSource(driver));
124
- await write("drizzle.config.ts", drizzleConfigSource(driver));
125
- await write(".env.example", envExample(driver));
126
- }
127
- };
128
- //#endregion
129
- exports.drizzleAddon = drizzleAddon;
130
-
131
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/drizzle/index.ts"],"sourcesContent":["import type { AddonDefinition } from \"../types.js\";\nimport type { DbDriver } from \"../../core/types.js\";\n\nfunction schemaSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { pgTable, serial, text } from 'drizzle-orm/pg-core'\n\nexport const users = pgTable('users', {\n id: serial('id').primaryKey(),\n email: text('email').notNull(),\n})\n`;\n case \"mysql\":\n return `import { mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core'\n\nexport const users = mysqlTable('users', {\n id: serial('id').primaryKey(),\n email: varchar('email', { length: 255 }).notNull(),\n})\n`;\n case \"sqlite\":\n default:\n return `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'\n\nexport const users = sqliteTable('users', {\n id: integer('id').primaryKey({ autoIncrement: true }),\n email: text('email').notNull(),\n})\n`;\n }\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { drizzle } from 'drizzle-orm/node-postgres'\nimport pg from 'pg'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n })\n return drizzle(pool, { schema })\n}\n`;\n case \"mysql\":\n return `import { drizzle } from 'drizzle-orm/mysql2'\nimport mysql from 'mysql2/promise'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const pool = mysql.createPool(process.env.DATABASE_URL ?? '')\n return drizzle(pool, { schema, mode: 'default' })\n}\n`;\n case \"sqlite\":\n default:\n return `import Database from 'better-sqlite3'\nimport { drizzle } from 'drizzle-orm/better-sqlite3'\n\nimport * as schema from './schema.js'\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')\n const client = new Database(filePath)\n return drizzle(client, { schema })\n}\n`;\n }\n}\n\nfunction drizzleConfigSource(driver: DbDriver): string {\n const dialect = driver === \"postgres\" ? \"postgresql\" : driver === \"mysql\" ? \"mysql\" : \"sqlite\";\n return `import { defineConfig } from 'drizzle-kit'\n\nexport default defineConfig({\n schema: './src/db/schema.ts',\n out: './drizzle',\n dialect: '${dialect}',\n dbCredentials: {\n url: process.env.DATABASE_URL ?? '',\n },\n})\n`;\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n\";\n case \"mysql\":\n return \"DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n\";\n case \"sqlite\":\n default:\n return \"DATABASE_URL=file:./local.db\\n\";\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"pg\"];\n case \"mysql\":\n return [\"mysql2\"];\n case \"sqlite\":\n default:\n return [\"better-sqlite3\"];\n }\n}\n\nfunction driverDevPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"@types/pg\"];\n case \"sqlite\":\n return [\"@types/better-sqlite3\"];\n case \"mysql\":\n default:\n return [];\n }\n}\n\nexport const drizzleAddon: AddonDefinition = {\n id: \"drizzle\",\n category: \"database\",\n dependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"drizzle-orm\", ...driverPackages(driver)];\n },\n devDependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"drizzle-kit\", ...driverDevPackages(driver)];\n },\n scripts() {\n return {\n \"db:generate\": \"drizzle-kit generate\",\n \"db:push\": \"drizzle-kit push\",\n };\n },\n bootBinding() {\n return {\n key: \"db\",\n importPath: \"./db/index.js\",\n factoryName: \"createDb\",\n };\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? \"sqlite\";\n await write(\"src/db/schema.ts\", schemaSource(driver));\n await write(\"src/db/index.ts\", dbIndexSource(driver));\n await write(\"drizzle.config.ts\", drizzleConfigSource(driver));\n await write(\".env.example\", envExample(driver));\n },\n};\n"],"mappings":";AAGA,SAAS,aAAa,QAA0B;CAC9C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;EAOT,KAAK,SACH,OAAO;;;;;;;EAQT,SACE,OAAO;;;;;;;CAOX;AACF;AAEA,SAAS,cAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;;EAYT,KAAK,SACH,OAAO;;;;;;;;;;EAWT,SACE,OAAO;;;;;;;;;;;CAWX;AACF;AAEA,SAAS,oBAAoB,QAA0B;CAErD,OAAO;;;;;cADS,WAAW,aAAa,eAAe,WAAW,UAAU,UAAU,SAMlE;;;;;;AAMtB;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,SAAS,eAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,SAAS,kBAAkB,QAA4B;CACrD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,WAAW;EACrB,KAAK,UACH,OAAO,CAAC,uBAAuB;EAEjC,SACE,OAAO,CAAC;CACZ;AACF;AAEA,IAAa,eAAgC;CAC3C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,eAAe,GAAG,eADX,IAAI,UAAU,QACkB,CAAC;CAClD;CACA,gBAAgB,KAAK;EAEnB,OAAO,CAAC,eAAe,GAAG,kBADX,IAAI,UAAU,QACqB,CAAC;CACrD;CACA,UAAU;EACR,OAAO;GACL,eAAe;GACf,WAAW;EACb;CACF;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,aAAa,MAAM,CAAC;EACpD,MAAM,MAAM,mBAAmB,cAAc,MAAM,CAAC;EACpD,MAAM,MAAM,qBAAqB,oBAAoB,MAAM,CAAC;EAC5D,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF"}
@@ -1,2 +0,0 @@
1
- import { AddonDefinition } from '../types.js';
2
- export declare const drizzleAddon: AddonDefinition;
@@ -1,103 +0,0 @@
1
- //#region src/addons/kysely/index.ts
2
- function schemaTypesSource() {
3
- return `export interface UserTable {
4
- id: number
5
- email: string
6
- }
7
-
8
- export interface DB {
9
- users: UserTable
10
- }
11
- `;
12
- }
13
- function dbIndexSource(driver) {
14
- switch (driver) {
15
- case "postgres": return `import { Kysely, PostgresDialect } from 'kysely'
16
- import pg from 'pg'
17
-
18
- import type { DB } from './schema.js'
19
-
20
- export function createDb() {
21
- const pool = new pg.Pool({
22
- connectionString: process.env.DATABASE_URL,
23
- })
24
- return new Kysely<DB>({
25
- dialect: new PostgresDialect({ pool }),
26
- })
27
- }
28
- `;
29
- case "mysql": return `import { Kysely, MysqlDialect } from 'kysely'
30
- import { createPool } from 'mysql2'
31
-
32
- import type { DB } from './schema.js'
33
-
34
- export function createDb() {
35
- const pool = createPool(process.env.DATABASE_URL ?? '')
36
- return new Kysely<DB>({
37
- dialect: new MysqlDialect({ pool }),
38
- })
39
- }
40
- `;
41
- default: return `import Database from 'better-sqlite3'
42
- import { Kysely, SqliteDialect } from 'kysely'
43
-
44
- import type { DB } from './schema.js'
45
-
46
- export function createDb() {
47
- const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')
48
- const database = new Database(filePath)
49
- return new Kysely<DB>({
50
- dialect: new SqliteDialect({ database }),
51
- })
52
- }
53
- `;
54
- }
55
- }
56
- function driverPackages(driver) {
57
- switch (driver) {
58
- case "postgres": return ["pg"];
59
- case "mysql": return ["mysql2"];
60
- default: return ["better-sqlite3"];
61
- }
62
- }
63
- function driverDevPackages(driver) {
64
- switch (driver) {
65
- case "postgres": return ["@types/pg"];
66
- case "sqlite": return ["@types/better-sqlite3"];
67
- default: return [];
68
- }
69
- }
70
- function envExample(driver) {
71
- switch (driver) {
72
- case "postgres": return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
73
- case "mysql": return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
74
- default: return "DATABASE_URL=file:./local.db\n";
75
- }
76
- }
77
- var kyselyAddon = {
78
- id: "kysely",
79
- category: "database",
80
- dependencies(ctx) {
81
- return ["kysely", ...driverPackages(ctx.driver ?? "sqlite")];
82
- },
83
- devDependencies(ctx) {
84
- return driverDevPackages(ctx.driver ?? "sqlite");
85
- },
86
- bootBinding() {
87
- return {
88
- key: "db",
89
- importPath: "./db/index.js",
90
- factoryName: "createDb"
91
- };
92
- },
93
- async apply(ctx, write) {
94
- const driver = ctx.driver ?? "sqlite";
95
- await write("src/db/schema.ts", schemaTypesSource());
96
- await write("src/db/index.ts", dbIndexSource(driver));
97
- await write(".env.example", envExample(driver));
98
- }
99
- };
100
- //#endregion
101
- exports.kyselyAddon = kyselyAddon;
102
-
103
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/kysely/index.ts"],"sourcesContent":["import type { AddonDefinition } from \"../types.js\";\nimport type { DbDriver } from \"../../core/types.js\";\n\nfunction schemaTypesSource(): string {\n return `export interface UserTable {\n id: number\n email: string\n}\n\nexport interface DB {\n users: UserTable\n}\n`;\n}\n\nfunction dbIndexSource(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return `import { Kysely, PostgresDialect } from 'kysely'\nimport pg from 'pg'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const pool = new pg.Pool({\n connectionString: process.env.DATABASE_URL,\n })\n return new Kysely<DB>({\n dialect: new PostgresDialect({ pool }),\n })\n}\n`;\n case \"mysql\":\n return `import { Kysely, MysqlDialect } from 'kysely'\nimport { createPool } from 'mysql2'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const pool = createPool(process.env.DATABASE_URL ?? '')\n return new Kysely<DB>({\n dialect: new MysqlDialect({ pool }),\n })\n}\n`;\n case \"sqlite\":\n default:\n return `import Database from 'better-sqlite3'\nimport { Kysely, SqliteDialect } from 'kysely'\n\nimport type { DB } from './schema.js'\n\nexport function createDb() {\n const filePath = (process.env.DATABASE_URL ?? 'file:./local.db').replace(/^file:/, '')\n const database = new Database(filePath)\n return new Kysely<DB>({\n dialect: new SqliteDialect({ database }),\n })\n}\n`;\n }\n}\n\nfunction driverPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"pg\"];\n case \"mysql\":\n return [\"mysql2\"];\n case \"sqlite\":\n default:\n return [\"better-sqlite3\"];\n }\n}\n\nfunction driverDevPackages(driver: DbDriver): string[] {\n switch (driver) {\n case \"postgres\":\n return [\"@types/pg\"];\n case \"sqlite\":\n return [\"@types/better-sqlite3\"];\n case \"mysql\":\n default:\n return [];\n }\n}\n\nfunction envExample(driver: DbDriver): string {\n switch (driver) {\n case \"postgres\":\n return \"DATABASE_URL=postgresql://user:password@localhost:5432/mydb\\n\";\n case \"mysql\":\n return \"DATABASE_URL=mysql://user:password@localhost:3306/mydb\\n\";\n case \"sqlite\":\n default:\n return \"DATABASE_URL=file:./local.db\\n\";\n }\n}\n\nexport const kyselyAddon: AddonDefinition = {\n id: \"kysely\",\n category: \"database\",\n dependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return [\"kysely\", ...driverPackages(driver)];\n },\n devDependencies(ctx) {\n const driver = ctx.driver ?? \"sqlite\";\n return driverDevPackages(driver);\n },\n bootBinding() {\n return {\n key: \"db\",\n importPath: \"./db/index.js\",\n factoryName: \"createDb\",\n };\n },\n async apply(ctx, write) {\n const driver = ctx.driver ?? \"sqlite\";\n await write(\"src/db/schema.ts\", schemaTypesSource());\n await write(\"src/db/index.ts\", dbIndexSource(driver));\n await write(\".env.example\", envExample(driver));\n },\n};\n"],"mappings":";AAGA,SAAS,oBAA4B;CACnC,OAAO;;;;;;;;;AAST;AAEA,SAAS,cAAc,QAA0B;CAC/C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;;;;;;;;;;;;;;EAcT,KAAK,SACH,OAAO;;;;;;;;;;;;EAaT,SACE,OAAO;;;;;;;;;;;;;CAaX;AACF;AAEA,SAAS,eAAe,QAA4B;CAClD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,IAAI;EACd,KAAK,SACH,OAAO,CAAC,QAAQ;EAElB,SACE,OAAO,CAAC,gBAAgB;CAC5B;AACF;AAEA,SAAS,kBAAkB,QAA4B;CACrD,QAAQ,QAAR;EACE,KAAK,YACH,OAAO,CAAC,WAAW;EACrB,KAAK,UACH,OAAO,CAAC,uBAAuB;EAEjC,SACE,OAAO,CAAC;CACZ;AACF;AAEA,SAAS,WAAW,QAA0B;CAC5C,QAAQ,QAAR;EACE,KAAK,YACH,OAAO;EACT,KAAK,SACH,OAAO;EAET,SACE,OAAO;CACX;AACF;AAEA,IAAa,cAA+B;CAC1C,IAAI;CACJ,UAAU;CACV,aAAa,KAAK;EAEhB,OAAO,CAAC,UAAU,GAAG,eADN,IAAI,UAAU,QACa,CAAC;CAC7C;CACA,gBAAgB,KAAK;EAEnB,OAAO,kBADQ,IAAI,UAAU,QACE;CACjC;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,KAAK,OAAO;EACtB,MAAM,SAAS,IAAI,UAAU;EAC7B,MAAM,MAAM,oBAAoB,kBAAkB,CAAC;EACnD,MAAM,MAAM,mBAAmB,cAAc,MAAM,CAAC;EACpD,MAAM,MAAM,gBAAgB,WAAW,MAAM,CAAC;CAChD;AACF"}
@@ -1,2 +0,0 @@
1
- import { AddonDefinition } from '../types.js';
2
- export declare const kyselyAddon: AddonDefinition;
@@ -1,30 +0,0 @@
1
- //#region src/addons/pino/index.ts
2
- var pinoAddon = {
3
- id: "pino",
4
- category: "logger",
5
- dependencies() {
6
- return ["pino"];
7
- },
8
- devDependencies() {
9
- return [];
10
- },
11
- bootBinding() {
12
- return {
13
- key: "logger",
14
- importPath: "./logger.js",
15
- factoryName: "createLogger"
16
- };
17
- },
18
- async apply(_ctx, write) {
19
- await write("src/logger.ts", `import pino from 'pino'
20
-
21
- export function createLogger() {
22
- return pino({ level: process.env.LOG_LEVEL ?? 'info' })
23
- }
24
- `);
25
- }
26
- };
27
- //#endregion
28
- exports.pinoAddon = pinoAddon;
29
-
30
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../../src/addons/pino/index.ts"],"sourcesContent":["import type { AddonDefinition } from \"../types.js\";\n\nexport const pinoAddon: AddonDefinition = {\n id: \"pino\",\n category: \"logger\",\n dependencies() {\n return [\"pino\"];\n },\n devDependencies() {\n return [];\n },\n bootBinding() {\n return {\n key: \"logger\",\n importPath: \"./logger.js\",\n factoryName: \"createLogger\",\n };\n },\n async apply(_ctx, write) {\n await write(\n \"src/logger.ts\",\n `import pino from 'pino'\n\nexport function createLogger() {\n return pino({ level: process.env.LOG_LEVEL ?? 'info' })\n}\n`,\n );\n },\n};\n"],"mappings":";AAEA,IAAa,YAA6B;CACxC,IAAI;CACJ,UAAU;CACV,eAAe;EACb,OAAO,CAAC,MAAM;CAChB;CACA,kBAAkB;EAChB,OAAO,CAAC;CACV;CACA,cAAc;EACZ,OAAO;GACL,KAAK;GACL,YAAY;GACZ,aAAa;EACf;CACF;CACA,MAAM,MAAM,MAAM,OAAO;EACvB,MAAM,MACJ,iBACA;;;;;CAMF;CACF;AACF"}
@@ -1,2 +0,0 @@
1
- import { AddonDefinition } from '../types.js';
2
- export declare const pinoAddon: AddonDefinition;