create-taserjs 0.1.11 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (189) hide show
  1. package/README.md +8 -44
  2. package/dist/cli-9fkoNOJg.js +1237 -0
  3. package/dist/cli-9fkoNOJg.js.map +1 -0
  4. package/dist/cli-DkZddFtU.cjs +1398 -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 +20 -56
  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,116 +0,0 @@
1
- //#region src/frameworks/index.ts
2
- function serverEntryTemplate(framework) {
3
- switch (framework) {
4
- case "hono": return {
5
- fileName: "src/server.ts",
6
- content: `import { Hono } from 'hono'
7
-
8
- const app = new Hono()
9
-
10
- app.get('/host', (c) => {
11
- return c.text('Hello from Hono host!')
12
- })
13
-
14
- export default app
15
- `
16
- };
17
- case "express": return {
18
- fileName: "src/server.node.ts",
19
- content: `import express from 'express'
20
-
21
- const app = express()
22
-
23
- app.get('/host', (_req, res) => {
24
- res.json({ message: 'Hello from Express host!' })
25
- })
26
-
27
- export default app
28
- `
29
- };
30
- case "fastify": return {
31
- fileName: "src/server.node.ts",
32
- content: `import Fastify from 'fastify'
33
-
34
- const app = Fastify()
35
-
36
- app.get('/host', async () => {
37
- return { message: 'Hello from Fastify host!' }
38
- })
39
-
40
- await app.ready()
41
-
42
- export default app.routing
43
- `
44
- };
45
- default: return null;
46
- }
47
- }
48
- var FRAMEWORK_ENTRIES = {
49
- none: {
50
- id: "none",
51
- serverEntry: null,
52
- deps: [],
53
- devDeps: []
54
- },
55
- hono: {
56
- id: "hono",
57
- serverEntry: serverEntryTemplate("hono"),
58
- deps: ["hono"],
59
- devDeps: []
60
- },
61
- express: {
62
- id: "express",
63
- serverEntry: serverEntryTemplate("express"),
64
- deps: ["express"],
65
- devDeps: ["@types/express"]
66
- },
67
- fastify: {
68
- id: "fastify",
69
- serverEntry: serverEntryTemplate("fastify"),
70
- deps: ["fastify"],
71
- devDeps: []
72
- }
73
- };
74
- function nitroConfigTemplate(nitroPreset) {
75
- return `import { defineConfig } from 'nitro/config'
76
-
77
- export default defineConfig({
78
- preset: '${nitroPreset}',
79
- })
80
- `;
81
- }
82
- function viteConfigTemplate(preset) {
83
- if (preset === "none") return `import { defineConfig } from 'vite'
84
- import { taser } from '@taserjs/router-plugin/vite'
85
-
86
- export default defineConfig({
87
- plugins: [taser()],
88
- })
89
- `;
90
- return `import { defineConfig } from 'vite'
91
- import { nitro } from 'nitro/vite'
92
- import { taser } from '@taserjs/router-plugin/vite'
93
-
94
- export default defineConfig({
95
- plugins: [taser(), nitro()],
96
- })
97
- `;
98
- }
99
- function taserTsTemplate() {
100
- return `import { createTaserApp } from '@taserjs/router'
101
-
102
- import { context } from './context.js'
103
-
104
- export default createTaserApp({
105
- response: { validate: true },
106
- }).context(context)
107
- `;
108
- }
109
- //#endregion
110
- exports.FRAMEWORK_ENTRIES = FRAMEWORK_ENTRIES;
111
- exports.nitroConfigTemplate = nitroConfigTemplate;
112
- exports.serverEntryTemplate = serverEntryTemplate;
113
- exports.taserTsTemplate = taserTsTemplate;
114
- exports.viteConfigTemplate = viteConfigTemplate;
115
-
116
- //# sourceMappingURL=index.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.cjs","names":[],"sources":["../../../src/frameworks/index.ts"],"sourcesContent":["import type { DeployTarget, Framework } from \"../core/types.js\";\n\nexport function serverEntryTemplate(\n framework: Framework,\n): { fileName: string; content: string } | null {\n switch (framework) {\n case \"hono\":\n return {\n fileName: \"src/server.ts\",\n content: `import { Hono } from 'hono'\n\nconst app = new Hono()\n\napp.get('/host', (c) => {\n return c.text('Hello from Hono host!')\n})\n\nexport default app\n`,\n };\n case \"express\":\n return {\n fileName: \"src/server.node.ts\",\n content: `import express from 'express'\n\nconst app = express()\n\napp.get('/host', (_req, res) => {\n res.json({ message: 'Hello from Express host!' })\n})\n\nexport default app\n`,\n };\n case \"fastify\":\n return {\n fileName: \"src/server.node.ts\",\n content: `import Fastify from 'fastify'\n\nconst app = Fastify()\n\napp.get('/host', async () => {\n return { message: 'Hello from Fastify host!' }\n})\n\nawait app.ready()\n\nexport default app.routing\n`,\n };\n default:\n return null;\n }\n}\n\nexport type FrameworkEntry = {\n id: Framework;\n serverEntry: { fileName: string; content: string } | null;\n deps: string[];\n devDeps: string[];\n};\n\nexport const FRAMEWORK_ENTRIES: Record<Framework, FrameworkEntry> = {\n none: { id: \"none\", serverEntry: null, deps: [], devDeps: [] },\n hono: { id: \"hono\", serverEntry: serverEntryTemplate(\"hono\"), deps: [\"hono\"], devDeps: [] },\n express: {\n id: \"express\",\n serverEntry: serverEntryTemplate(\"express\"),\n deps: [\"express\"],\n devDeps: [\"@types/express\"],\n },\n fastify: {\n id: \"fastify\",\n // srvx bridges the Fastify Node handler to fetch (see compose codegen).\n serverEntry: serverEntryTemplate(\"fastify\"),\n deps: [\"fastify\"],\n devDeps: [],\n },\n};\n\nexport function nitroConfigTemplate(nitroPreset: string): string {\n return `import { defineConfig } from 'nitro/config'\n\nexport default defineConfig({\n preset: '${nitroPreset}',\n})\n`;\n}\n\nexport function viteConfigTemplate(preset?: DeployTarget): string {\n if (preset === \"none\") {\n return `import { defineConfig } from 'vite'\nimport { taser } from '@taserjs/router-plugin/vite'\n\nexport default defineConfig({\n plugins: [taser()],\n})\n`;\n }\n\n return `import { defineConfig } from 'vite'\nimport { nitro } from 'nitro/vite'\nimport { taser } from '@taserjs/router-plugin/vite'\n\nexport default defineConfig({\n plugins: [taser(), nitro()],\n})\n`;\n}\n\nexport function taserTsTemplate(): string {\n return `import { createTaserApp } from '@taserjs/router'\n\nimport { context } from './context.js'\n\nexport default createTaserApp({\n response: { validate: true },\n}).context(context)\n`;\n}\n"],"mappings":";AAEA,SAAgB,oBACd,WAC8C;CAC9C,QAAQ,WAAR;EACE,KAAK,QACH,OAAO;GACL,UAAU;GACV,SAAS;;;;;;;;;;EAUX;EACF,KAAK,WACH,OAAO;GACL,UAAU;GACV,SAAS;;;;;;;;;;EAUX;EACF,KAAK,WACH,OAAO;GACL,UAAU;GACV,SAAS;;;;;;;;;;;;EAYX;EACF,SACE,OAAO;CACX;AACF;AASA,IAAa,oBAAuD;CAClE,MAAM;EAAE,IAAI;EAAQ,aAAa;EAAM,MAAM,CAAC;EAAG,SAAS,CAAC;CAAE;CAC7D,MAAM;EAAE,IAAI;EAAQ,aAAa,oBAAoB,MAAM;EAAG,MAAM,CAAC,MAAM;EAAG,SAAS,CAAC;CAAE;CAC1F,SAAS;EACP,IAAI;EACJ,aAAa,oBAAoB,SAAS;EAC1C,MAAM,CAAC,SAAS;EAChB,SAAS,CAAC,gBAAgB;CAC5B;CACA,SAAS;EACP,IAAI;EAEJ,aAAa,oBAAoB,SAAS;EAC1C,MAAM,CAAC,SAAS;EAChB,SAAS,CAAC;CACZ;AACF;AAEA,SAAgB,oBAAoB,aAA6B;CAC/D,OAAO;;;aAGI,YAAY;;;AAGzB;AAEA,SAAgB,mBAAmB,QAA+B;CAChE,IAAI,WAAW,QACb,OAAO;;;;;;;CAST,OAAO;;;;;;;;AAQT;AAEA,SAAgB,kBAA0B;CACxC,OAAO;;;;;;;;AAQT"}
@@ -1,18 +0,0 @@
1
- import { DeployTarget, Framework } from '../core/types.js';
2
- export declare function serverEntryTemplate(framework: Framework): {
3
- fileName: string;
4
- content: string;
5
- } | null;
6
- export type FrameworkEntry = {
7
- id: Framework;
8
- serverEntry: {
9
- fileName: string;
10
- content: string;
11
- } | null;
12
- deps: string[];
13
- devDeps: string[];
14
- };
15
- export declare const FRAMEWORK_ENTRIES: Record<Framework, FrameworkEntry>;
16
- export declare function nitroConfigTemplate(nitroPreset: string): string;
17
- export declare function viteConfigTemplate(preset?: DeployTarget): string;
18
- export declare function taserTsTemplate(): string;
@@ -1,3 +0,0 @@
1
- export { scaffoldProject } from './core/scaffold-engine.js';
2
- export { resolvePackages } from './core/resolve-packages.js';
3
- export type { PackageGroups, ScaffoldOptions, ScaffoldResult } from './core/types.js';
@@ -1,97 +0,0 @@
1
- //#region src/templates/base.ts
2
- function packageJsonTemplate(projectName, scripts = {}) {
3
- const pkg = {
4
- name: projectName,
5
- version: "1.0.0",
6
- private: true,
7
- type: "module",
8
- scripts: {
9
- dev: "vite",
10
- build: "vite build",
11
- typecheck: "tsc --noEmit -p tsconfig.json",
12
- "taser:generate": "taser generate",
13
- ...scripts
14
- }
15
- };
16
- return `${JSON.stringify(pkg, null, 2)}\n`;
17
- }
18
- function tsconfigTemplate() {
19
- return `${JSON.stringify({
20
- compilerOptions: {
21
- target: "ES2022",
22
- module: "NodeNext",
23
- strict: true,
24
- skipLibCheck: true,
25
- verbatimModuleSyntax: true,
26
- isolatedModules: true,
27
- noEmit: true
28
- },
29
- include: ["src", ".taser/types/**/*.d.ts"]
30
- }, null, 2)}\n`;
31
- }
32
- function gitignoreTemplate() {
33
- return `node_modules
34
- dist
35
- .output
36
- .taser
37
- .DS_Store
38
- *.log
39
- .env
40
- local.db
41
- drizzle
42
- `;
43
- }
44
- function contextTemplate(bindings) {
45
- const imports = bindings.map((binding) => `import { ${binding.factoryName} } from '${binding.importPath}'`);
46
- const bootBody = bindings.length > 0 ? bindings.map((binding) => ` ${binding.key}: ${binding.factoryName}(),`).join("\n") : "";
47
- const bootBlock = bindings.length > 0 ? ` boot: () => ({\n${bootBody}\n }),` : "";
48
- return `${imports.length > 0 ? `${imports.join("\n")}\n\n` : ""}import { createContext } from '@taserjs/router'
49
-
50
- export const context = createContext({
51
- ${bootBlock}
52
- request: () => ({
53
- requestId: crypto.randomUUID(),
54
- }),
55
- })
56
- `;
57
- }
58
- function rootLayoutTemplate() {
59
- return `import { cors } from '@taserjs/router/cors'
60
- import { t } from '@taserjs/router'
61
-
62
- export default t.layout('/*')
63
- .use(cors())
64
- `;
65
- }
66
- function indexRouteTemplate() {
67
- return `import { t } from '@taserjs/router'
68
- import { json } from '@taserjs/router/reply'
69
-
70
- export default t.get('/').handler((_ctx) => {
71
- return json({ message: 'Welcome to Taser.js' })
72
- })
73
- `;
74
- }
75
- function healthRouteTemplate(ctx) {
76
- const lines = [];
77
- if (ctx.logger) lines.push(" ctx.logger.info('health check')");
78
- if (ctx.db) lines.push(" // ctx.db is available from context boot");
79
- const body = lines.length > 0 ? `${lines.join("\n")}\n` : "";
80
- return `import { t } from '@taserjs/router'
81
- import { json } from '@taserjs/router/reply'
82
-
83
- export default t.get('/health').handler(${lines.length > 0 ? "(ctx)" : "(_ctx)"} => {
84
- ${body} return json({ ok: true })
85
- })
86
- `;
87
- }
88
- //#endregion
89
- exports.contextTemplate = contextTemplate;
90
- exports.gitignoreTemplate = gitignoreTemplate;
91
- exports.healthRouteTemplate = healthRouteTemplate;
92
- exports.indexRouteTemplate = indexRouteTemplate;
93
- exports.packageJsonTemplate = packageJsonTemplate;
94
- exports.rootLayoutTemplate = rootLayoutTemplate;
95
- exports.tsconfigTemplate = tsconfigTemplate;
96
-
97
- //# sourceMappingURL=base.cjs.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"base.cjs","names":[],"sources":["../../../src/templates/base.ts"],"sourcesContent":["import type { BootBinding } from \"../addons/types.js\";\nimport type { ScaffoldContext } from \"../core/types.js\";\n\nexport function packageJsonTemplate(\n projectName: string,\n scripts: Record<string, string> = {},\n): string {\n const pkg = {\n name: projectName,\n version: \"1.0.0\",\n private: true,\n type: \"module\",\n scripts: {\n dev: \"vite\",\n build: \"vite build\",\n typecheck: \"tsc --noEmit -p tsconfig.json\",\n \"taser:generate\": \"taser generate\",\n ...scripts,\n },\n };\n\n return `${JSON.stringify(pkg, null, 2)}\\n`;\n}\n\nexport function tsconfigTemplate(): string {\n return `${JSON.stringify(\n {\n compilerOptions: {\n target: \"ES2022\",\n module: \"NodeNext\",\n strict: true,\n skipLibCheck: true,\n verbatimModuleSyntax: true,\n isolatedModules: true,\n noEmit: true,\n },\n include: [\"src\", \".taser/types/**/*.d.ts\"],\n },\n null,\n 2,\n )}\\n`;\n}\n\nexport function gitignoreTemplate(): string {\n return `node_modules\ndist\n.output\n.taser\n.DS_Store\n*.log\n.env\nlocal.db\ndrizzle\n`;\n}\n\nexport function contextTemplate(bindings: BootBinding[]): string {\n const imports = bindings.map(\n (binding) => `import { ${binding.factoryName} } from '${binding.importPath}'`,\n );\n\n const bootBody =\n bindings.length > 0\n ? bindings.map((binding) => ` ${binding.key}: ${binding.factoryName}(),`).join(\"\\n\")\n : \"\";\n\n const bootBlock = bindings.length > 0 ? ` boot: () => ({\\n${bootBody}\\n }),` : \"\";\n\n const importBlock = imports.length > 0 ? `${imports.join(\"\\n\")}\\n\\n` : \"\";\n\n return `${importBlock}import { createContext } from '@taserjs/router'\n\nexport const context = createContext({\n${bootBlock}\n request: () => ({\n requestId: crypto.randomUUID(),\n }),\n})\n`;\n}\n\nexport function rootLayoutTemplate(): string {\n return `import { cors } from '@taserjs/router/cors'\nimport { t } from '@taserjs/router'\n\nexport default t.layout('/*')\n .use(cors())\n`;\n}\n\nexport function indexRouteTemplate(): string {\n return `import { t } from '@taserjs/router'\nimport { json } from '@taserjs/router/reply'\n\nexport default t.get('/').handler((_ctx) => {\n return json({ message: 'Welcome to Taser.js' })\n})\n`;\n}\n\nexport function healthRouteTemplate(ctx: ScaffoldContext): string {\n const lines: string[] = [];\n\n if (ctx.logger) {\n lines.push(\" ctx.logger.info('health check')\");\n }\n\n if (ctx.db) {\n lines.push(\" // ctx.db is available from context boot\");\n }\n\n const body = lines.length > 0 ? `${lines.join(\"\\n\")}\\n` : \"\";\n const ctxArg = lines.length > 0 ? \"(ctx)\" : \"(_ctx)\";\n\n return `import { t } from '@taserjs/router'\nimport { json } from '@taserjs/router/reply'\n\nexport default t.get('/health').handler(${ctxArg} => {\n${body} return json({ ok: true })\n})\n`;\n}\n"],"mappings":";AAGA,SAAgB,oBACd,aACA,UAAkC,CAAC,GAC3B;CACR,MAAM,MAAM;EACV,MAAM;EACN,SAAS;EACT,SAAS;EACT,MAAM;EACN,SAAS;GACP,KAAK;GACL,OAAO;GACP,WAAW;GACX,kBAAkB;GAClB,GAAG;EACL;CACF;CAEA,OAAO,GAAG,KAAK,UAAU,KAAK,MAAM,CAAC,EAAE;AACzC;AAEA,SAAgB,mBAA2B;CACzC,OAAO,GAAG,KAAK,UACb;EACE,iBAAiB;GACf,QAAQ;GACR,QAAQ;GACR,QAAQ;GACR,cAAc;GACd,sBAAsB;GACtB,iBAAiB;GACjB,QAAQ;EACV;EACA,SAAS,CAAC,OAAO,wBAAwB;CAC3C,GACA,MACA,CACF,EAAE;AACJ;AAEA,SAAgB,oBAA4B;CAC1C,OAAO;;;;;;;;;;AAUT;AAEA,SAAgB,gBAAgB,UAAiC;CAC/D,MAAM,UAAU,SAAS,KACtB,YAAY,YAAY,QAAQ,YAAY,WAAW,QAAQ,WAAW,EAC7E;CAEA,MAAM,WACJ,SAAS,SAAS,IACd,SAAS,KAAK,YAAY,OAAO,QAAQ,IAAI,IAAI,QAAQ,YAAY,IAAI,CAAC,CAAC,KAAK,IAAI,IACpF;CAEN,MAAM,YAAY,SAAS,SAAS,IAAI,qBAAqB,SAAS,WAAW;CAIjF,OAAO,GAFa,QAAQ,SAAS,IAAI,GAAG,QAAQ,KAAK,IAAI,EAAE,QAAQ,GAEjD;;;EAGtB,UAAU;;;;;;AAMZ;AAEA,SAAgB,qBAA6B;CAC3C,OAAO;;;;;;AAMT;AAEA,SAAgB,qBAA6B;CAC3C,OAAO;;;;;;;AAOT;AAEA,SAAgB,oBAAoB,KAA8B;CAChE,MAAM,QAAkB,CAAC;CAEzB,IAAI,IAAI,QACN,MAAM,KAAK,mCAAmC;CAGhD,IAAI,IAAI,IACN,MAAM,KAAK,4CAA4C;CAGzD,MAAM,OAAO,MAAM,SAAS,IAAI,GAAG,MAAM,KAAK,IAAI,EAAE,MAAM;CAG1D,OAAO;;;0CAFQ,MAAM,SAAS,IAAI,UAAU,SAKG;EAC/C,KAAK;;;AAGP"}
@@ -1,9 +0,0 @@
1
- import { BootBinding } from '../addons/types.js';
2
- import { ScaffoldContext } from '../core/types.js';
3
- export declare function packageJsonTemplate(projectName: string, scripts?: Record<string, string>): string;
4
- export declare function tsconfigTemplate(): string;
5
- export declare function gitignoreTemplate(): string;
6
- export declare function contextTemplate(bindings: BootBinding[]): string;
7
- export declare function rootLayoutTemplate(): string;
8
- export declare function indexRouteTemplate(): string;
9
- export declare function healthRouteTemplate(ctx: ScaffoldContext): string;
@@ -1 +0,0 @@
1
- export type { DbDriver, DbOdm, DeployTarget, Framework, LoggerId, PackageGroups, Runtime, ScaffoldOptions, ScaffoldResult, ValidatorId, } from './core/types.js';
@@ -1 +0,0 @@
1
- export declare const arktypeAddon: import('../types.js').AddonDefinition;
@@ -1,7 +0,0 @@
1
- import { ValidatorAddon } from "../validators.js";
2
- //#region src/addons/arktype/index.ts
3
- var arktypeAddon = ValidatorAddon("arktype");
4
- //#endregion
5
- export { arktypeAddon };
6
-
7
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../../../../src/addons/arktype/index.ts"],"sourcesContent":["import { ValidatorAddon } from \"../validators.js\";\n\nexport const arktypeAddon = ValidatorAddon(\"arktype\");\n"],"mappings":";;AAEA,IAAa,eAAe,eAAe,SAAS"}
@@ -1,2 +0,0 @@
1
- import { AddonDefinition } from '../types.js';
2
- export declare const drizzleAddon: 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
- export { drizzleAddon };
130
-
131
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","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 kyselyAddon: 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
- export { kyselyAddon };
102
-
103
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","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 pinoAddon: 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
- export { pinoAddon };
29
-
30
- //# sourceMappingURL=index.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","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 prismaAddon: AddonDefinition;