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.
- package/README.md +8 -44
- package/dist/cli-CBhdDKHU.cjs +1398 -0
- package/dist/cli-hL7a4VS0.js +1237 -0
- package/dist/cli-hL7a4VS0.js.map +1 -0
- package/dist/cli.cjs +4 -0
- package/dist/cli.d.cts +4 -0
- package/dist/cli.d.cts.map +1 -0
- package/dist/cli.d.ts +4 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +3 -0
- package/dist/index.cjs +25 -0
- package/dist/index.d.cts +119 -0
- package/dist/index.d.cts.map +1 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +2 -0
- package/package.json +39 -9
- package/src/addons/drizzle/index.ts +37 -40
- package/src/addons/kysely/index.ts +19 -22
- package/src/addons/pino/index.ts +2 -2
- package/src/addons/prisma/index.ts +18 -22
- package/src/addons/registry.ts +37 -73
- package/src/addons/types.ts +12 -13
- package/src/addons/validators.ts +22 -23
- package/src/addons/winston/index.ts +3 -3
- package/src/cli.ts +96 -56
- package/src/commands/create.ts +118 -249
- package/src/core/package-manager.ts +36 -55
- package/src/core/scaffold-engine.ts +100 -75
- package/src/core/targets.ts +19 -55
- package/src/core/types.ts +18 -53
- package/src/index.ts +8 -0
- package/src/templates/base.ts +139 -51
- package/dist/cjs/_virtual/_rolldown/runtime.cjs +0 -23
- package/dist/cjs/addons/arktype/index.cjs +0 -6
- package/dist/cjs/addons/arktype/index.cjs.map +0 -1
- package/dist/cjs/addons/arktype/index.d.cts +0 -1
- package/dist/cjs/addons/drizzle/index.cjs +0 -131
- package/dist/cjs/addons/drizzle/index.cjs.map +0 -1
- package/dist/cjs/addons/drizzle/index.d.cts +0 -2
- package/dist/cjs/addons/kysely/index.cjs +0 -103
- package/dist/cjs/addons/kysely/index.cjs.map +0 -1
- package/dist/cjs/addons/kysely/index.d.cts +0 -2
- package/dist/cjs/addons/pino/index.cjs +0 -30
- package/dist/cjs/addons/pino/index.cjs.map +0 -1
- package/dist/cjs/addons/pino/index.d.cts +0 -2
- package/dist/cjs/addons/prisma/index.cjs +0 -133
- package/dist/cjs/addons/prisma/index.cjs.map +0 -1
- package/dist/cjs/addons/prisma/index.d.cts +0 -2
- package/dist/cjs/addons/registry.cjs +0 -65
- package/dist/cjs/addons/registry.cjs.map +0 -1
- package/dist/cjs/addons/registry.d.cts +0 -5
- package/dist/cjs/addons/types.d.cts +0 -16
- package/dist/cjs/addons/valibot/index.cjs +0 -6
- package/dist/cjs/addons/valibot/index.cjs.map +0 -1
- package/dist/cjs/addons/valibot/index.d.cts +0 -1
- package/dist/cjs/addons/validators.cjs +0 -38
- package/dist/cjs/addons/validators.cjs.map +0 -1
- package/dist/cjs/addons/validators.d.cts +0 -5
- package/dist/cjs/addons/winston/index.cjs +0 -34
- package/dist/cjs/addons/winston/index.cjs.map +0 -1
- package/dist/cjs/addons/winston/index.d.cts +0 -2
- package/dist/cjs/addons/zod/index.cjs +0 -6
- package/dist/cjs/addons/zod/index.cjs.map +0 -1
- package/dist/cjs/addons/zod/index.d.cts +0 -1
- package/dist/cjs/cli.cjs +0 -65
- package/dist/cjs/cli.cjs.map +0 -1
- package/dist/cjs/cli.d.cts +0 -2
- package/dist/cjs/commands/create.cjs +0 -332
- package/dist/cjs/commands/create.cjs.map +0 -1
- package/dist/cjs/commands/create.d.cts +0 -14
- package/dist/cjs/core/json-output.cjs +0 -16
- package/dist/cjs/core/json-output.cjs.map +0 -1
- package/dist/cjs/core/json-output.d.cts +0 -4
- package/dist/cjs/core/package-manager.cjs +0 -56
- package/dist/cjs/core/package-manager.cjs.map +0 -1
- package/dist/cjs/core/package-manager.d.cts +0 -8
- package/dist/cjs/core/parse-options.cjs +0 -95
- package/dist/cjs/core/parse-options.cjs.map +0 -1
- package/dist/cjs/core/parse-options.d.cts +0 -35
- package/dist/cjs/core/project-config.cjs +0 -23
- package/dist/cjs/core/project-config.cjs.map +0 -1
- package/dist/cjs/core/project-config.d.cts +0 -2
- package/dist/cjs/core/resolve-packages.cjs +0 -58
- package/dist/cjs/core/resolve-packages.cjs.map +0 -1
- package/dist/cjs/core/resolve-packages.d.cts +0 -2
- package/dist/cjs/core/scaffold-engine.cjs +0 -72
- package/dist/cjs/core/scaffold-engine.cjs.map +0 -1
- package/dist/cjs/core/scaffold-engine.d.cts +0 -2
- package/dist/cjs/core/targets.cjs +0 -171
- package/dist/cjs/core/targets.cjs.map +0 -1
- package/dist/cjs/core/targets.d.cts +0 -49
- package/dist/cjs/core/types.cjs +0 -52
- package/dist/cjs/core/types.cjs.map +0 -1
- package/dist/cjs/core/types.d.cts +0 -57
- package/dist/cjs/core/validate-project-name.cjs +0 -44
- package/dist/cjs/core/validate-project-name.cjs.map +0 -1
- package/dist/cjs/core/validate-project-name.d.cts +0 -1
- package/dist/cjs/frameworks/index.cjs +0 -116
- package/dist/cjs/frameworks/index.cjs.map +0 -1
- package/dist/cjs/frameworks/index.d.cts +0 -18
- package/dist/cjs/scaffold.d.cts +0 -3
- package/dist/cjs/templates/base.cjs +0 -97
- package/dist/cjs/templates/base.cjs.map +0 -1
- package/dist/cjs/templates/base.d.cts +0 -9
- package/dist/cjs/types.d.cts +0 -1
- package/dist/esm/addons/arktype/index.d.ts +0 -1
- package/dist/esm/addons/arktype/index.js +0 -7
- package/dist/esm/addons/arktype/index.js.map +0 -1
- package/dist/esm/addons/drizzle/index.d.ts +0 -2
- package/dist/esm/addons/drizzle/index.js +0 -131
- package/dist/esm/addons/drizzle/index.js.map +0 -1
- package/dist/esm/addons/kysely/index.d.ts +0 -2
- package/dist/esm/addons/kysely/index.js +0 -103
- package/dist/esm/addons/kysely/index.js.map +0 -1
- package/dist/esm/addons/pino/index.d.ts +0 -2
- package/dist/esm/addons/pino/index.js +0 -30
- package/dist/esm/addons/pino/index.js.map +0 -1
- package/dist/esm/addons/prisma/index.d.ts +0 -2
- package/dist/esm/addons/prisma/index.js +0 -133
- package/dist/esm/addons/prisma/index.js.map +0 -1
- package/dist/esm/addons/registry.d.ts +0 -5
- package/dist/esm/addons/registry.js +0 -63
- package/dist/esm/addons/registry.js.map +0 -1
- package/dist/esm/addons/types.d.ts +0 -16
- package/dist/esm/addons/valibot/index.d.ts +0 -1
- package/dist/esm/addons/valibot/index.js +0 -7
- package/dist/esm/addons/valibot/index.js.map +0 -1
- package/dist/esm/addons/validators.d.ts +0 -5
- package/dist/esm/addons/validators.js +0 -36
- package/dist/esm/addons/validators.js.map +0 -1
- package/dist/esm/addons/winston/index.d.ts +0 -2
- package/dist/esm/addons/winston/index.js +0 -34
- package/dist/esm/addons/winston/index.js.map +0 -1
- package/dist/esm/addons/zod/index.d.ts +0 -1
- package/dist/esm/addons/zod/index.js +0 -7
- package/dist/esm/addons/zod/index.js.map +0 -1
- package/dist/esm/cli.d.ts +0 -2
- package/dist/esm/cli.js +0 -62
- package/dist/esm/cli.js.map +0 -1
- package/dist/esm/commands/create.d.ts +0 -14
- package/dist/esm/commands/create.js +0 -327
- package/dist/esm/commands/create.js.map +0 -1
- package/dist/esm/core/json-output.d.ts +0 -4
- package/dist/esm/core/json-output.js +0 -14
- package/dist/esm/core/json-output.js.map +0 -1
- package/dist/esm/core/package-manager.d.ts +0 -8
- package/dist/esm/core/package-manager.js +0 -53
- package/dist/esm/core/package-manager.js.map +0 -1
- package/dist/esm/core/parse-options.d.ts +0 -35
- package/dist/esm/core/parse-options.js +0 -89
- package/dist/esm/core/parse-options.js.map +0 -1
- package/dist/esm/core/project-config.d.ts +0 -2
- package/dist/esm/core/project-config.js +0 -21
- package/dist/esm/core/project-config.js.map +0 -1
- package/dist/esm/core/resolve-packages.d.ts +0 -2
- package/dist/esm/core/resolve-packages.js +0 -58
- package/dist/esm/core/resolve-packages.js.map +0 -1
- package/dist/esm/core/scaffold-engine.d.ts +0 -2
- package/dist/esm/core/scaffold-engine.js +0 -70
- package/dist/esm/core/scaffold-engine.js.map +0 -1
- package/dist/esm/core/targets.d.ts +0 -49
- package/dist/esm/core/targets.js +0 -166
- package/dist/esm/core/targets.js.map +0 -1
- package/dist/esm/core/types.d.ts +0 -57
- package/dist/esm/core/types.js +0 -45
- package/dist/esm/core/types.js.map +0 -1
- package/dist/esm/core/validate-project-name.d.ts +0 -1
- package/dist/esm/core/validate-project-name.js +0 -42
- package/dist/esm/core/validate-project-name.js.map +0 -1
- package/dist/esm/frameworks/index.d.ts +0 -18
- package/dist/esm/frameworks/index.js +0 -112
- package/dist/esm/frameworks/index.js.map +0 -1
- package/dist/esm/scaffold.d.ts +0 -3
- package/dist/esm/templates/base.d.ts +0 -9
- package/dist/esm/templates/base.js +0 -91
- package/dist/esm/templates/base.js.map +0 -1
- package/dist/esm/types.d.ts +0 -1
- package/src/addons/arktype/index.ts +0 -3
- package/src/addons/valibot/index.ts +0 -3
- package/src/addons/zod/index.ts +0 -3
- package/src/core/json-output.ts +0 -13
- package/src/core/parse-options.ts +0 -167
- package/src/core/project-config.ts +0 -32
- package/src/core/resolve-packages.ts +0 -69
- package/src/core/validate-project-name.ts +0 -55
- package/src/frameworks/index.ts +0 -120
- package/src/scaffold.ts +0 -3
- 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;
|
package/dist/cjs/scaffold.d.cts
DELETED
|
@@ -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;
|
package/dist/cjs/types.d.cts
DELETED
|
@@ -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 +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,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,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,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"}
|