create-taserjs 0.0.2 → 0.0.4
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 +2 -0
- package/dist/cjs/addons/arktype/index.cjs.map +1 -1
- package/dist/cjs/addons/drizzle/index.cjs.map +1 -1
- package/dist/cjs/addons/kysely/index.cjs.map +1 -1
- package/dist/cjs/addons/pino/index.cjs.map +1 -1
- package/dist/cjs/addons/prisma/index.cjs +84 -24
- package/dist/cjs/addons/prisma/index.cjs.map +1 -1
- package/dist/cjs/addons/registry.cjs +1 -1
- package/dist/cjs/addons/registry.cjs.map +1 -1
- package/dist/cjs/addons/types.d.cts +1 -1
- package/dist/cjs/addons/valibot/index.cjs.map +1 -1
- package/dist/cjs/addons/validators.cjs.map +1 -1
- package/dist/cjs/addons/winston/index.cjs.map +1 -1
- package/dist/cjs/addons/zod/index.cjs.map +1 -1
- package/dist/cjs/cli.cjs +5 -0
- package/dist/cjs/cli.cjs.map +1 -1
- package/dist/cjs/commands/create.cjs +44 -11
- package/dist/cjs/commands/create.cjs.map +1 -1
- package/dist/cjs/commands/create.d.cts +1 -0
- package/dist/cjs/core/json-output.cjs.map +1 -1
- package/dist/cjs/core/package-manager.cjs.map +1 -1
- package/dist/cjs/core/package-manager.d.cts +1 -1
- package/dist/cjs/core/parse-options.cjs +7 -7
- package/dist/cjs/core/parse-options.cjs.map +1 -1
- package/dist/cjs/core/parse-options.d.cts +3 -3
- package/dist/cjs/core/project-config.cjs +1 -1
- package/dist/cjs/core/project-config.cjs.map +1 -1
- package/dist/cjs/core/resolve-packages.cjs +41 -7
- package/dist/cjs/core/resolve-packages.cjs.map +1 -1
- package/dist/cjs/core/resolve-packages.d.cts +2 -2
- package/dist/cjs/core/scaffold-engine.cjs +33 -6
- package/dist/cjs/core/scaffold-engine.cjs.map +1 -1
- package/dist/cjs/core/types.cjs +11 -3
- package/dist/cjs/core/types.cjs.map +1 -1
- package/dist/cjs/core/types.d.cts +8 -8
- package/dist/cjs/core/validate-project-name.cjs.map +1 -1
- package/dist/cjs/frameworks/index.cjs +138 -17
- package/dist/cjs/frameworks/index.cjs.map +1 -1
- package/dist/cjs/frameworks/index.d.cts +3 -3
- package/dist/cjs/scaffold.d.cts +1 -1
- package/dist/cjs/templates/base.cjs +6 -6
- package/dist/cjs/templates/base.cjs.map +1 -1
- package/dist/cjs/types.d.cts +1 -1
- package/dist/esm/addons/arktype/index.js.map +1 -1
- package/dist/esm/addons/drizzle/index.js.map +1 -1
- package/dist/esm/addons/kysely/index.js.map +1 -1
- package/dist/esm/addons/pino/index.js.map +1 -1
- package/dist/esm/addons/prisma/index.js +84 -24
- package/dist/esm/addons/prisma/index.js.map +1 -1
- package/dist/esm/addons/registry.js +2 -2
- package/dist/esm/addons/registry.js.map +1 -1
- package/dist/esm/addons/types.d.ts +1 -1
- package/dist/esm/addons/valibot/index.js.map +1 -1
- package/dist/esm/addons/validators.js.map +1 -1
- package/dist/esm/addons/winston/index.js.map +1 -1
- package/dist/esm/addons/zod/index.js.map +1 -1
- package/dist/esm/cli.js +5 -0
- package/dist/esm/cli.js.map +1 -1
- package/dist/esm/commands/create.d.ts +1 -0
- package/dist/esm/commands/create.js +46 -13
- package/dist/esm/commands/create.js.map +1 -1
- package/dist/esm/core/json-output.js.map +1 -1
- package/dist/esm/core/package-manager.d.ts +1 -1
- package/dist/esm/core/package-manager.js.map +1 -1
- package/dist/esm/core/parse-options.d.ts +3 -3
- package/dist/esm/core/parse-options.js +8 -8
- package/dist/esm/core/parse-options.js.map +1 -1
- package/dist/esm/core/project-config.js +1 -1
- package/dist/esm/core/project-config.js.map +1 -1
- package/dist/esm/core/resolve-packages.d.ts +2 -2
- package/dist/esm/core/resolve-packages.js +41 -7
- package/dist/esm/core/resolve-packages.js.map +1 -1
- package/dist/esm/core/scaffold-engine.js +34 -7
- package/dist/esm/core/scaffold-engine.js.map +1 -1
- package/dist/esm/core/types.d.ts +8 -8
- package/dist/esm/core/types.js +11 -3
- package/dist/esm/core/types.js.map +1 -1
- package/dist/esm/core/validate-project-name.js.map +1 -1
- package/dist/esm/frameworks/index.d.ts +3 -3
- package/dist/esm/frameworks/index.js +138 -17
- package/dist/esm/frameworks/index.js.map +1 -1
- package/dist/esm/scaffold.d.ts +1 -1
- package/dist/esm/templates/base.js +6 -6
- package/dist/esm/templates/base.js.map +1 -1
- package/dist/esm/types.d.ts +1 -1
- package/package.json +13 -13
- package/src/addons/arktype/index.ts +2 -2
- package/src/addons/drizzle/index.ts +53 -53
- package/src/addons/kysely/index.ts +42 -42
- package/src/addons/pino/index.ts +12 -12
- package/src/addons/prisma/index.ts +128 -55
- package/src/addons/registry.ts +37 -37
- package/src/addons/types.ts +14 -14
- package/src/addons/valibot/index.ts +2 -2
- package/src/addons/validators.ts +9 -9
- package/src/addons/winston/index.ts +12 -12
- package/src/addons/zod/index.ts +2 -2
- package/src/cli.ts +27 -26
- package/src/commands/create.ts +181 -152
- package/src/core/json-output.ts +4 -4
- package/src/core/package-manager.ts +38 -31
- package/src/core/parse-options.ts +50 -48
- package/src/core/project-config.ts +10 -14
- package/src/core/resolve-packages.ts +79 -41
- package/src/core/scaffold-engine.ts +106 -36
- package/src/core/types.ts +61 -36
- package/src/core/validate-project-name.ts +40 -40
- package/src/frameworks/index.ts +164 -29
- package/src/scaffold.ts +3 -3
- package/src/templates/base.ts +57 -51
- package/src/types.ts +5 -4
|
@@ -1,25 +1,25 @@
|
|
|
1
|
-
import type { AddonDefinition } from
|
|
2
|
-
import type { DbDriver } from
|
|
1
|
+
import type { AddonDefinition } from "../types.js";
|
|
2
|
+
import type { DbDriver } from "../../core/types.js";
|
|
3
3
|
|
|
4
4
|
function schemaSource(driver: DbDriver): string {
|
|
5
5
|
switch (driver) {
|
|
6
|
-
case
|
|
6
|
+
case "postgres":
|
|
7
7
|
return `import { pgTable, serial, text } from 'drizzle-orm/pg-core'
|
|
8
8
|
|
|
9
9
|
export const users = pgTable('users', {
|
|
10
10
|
id: serial('id').primaryKey(),
|
|
11
11
|
email: text('email').notNull(),
|
|
12
12
|
})
|
|
13
|
-
|
|
14
|
-
case
|
|
13
|
+
`;
|
|
14
|
+
case "mysql":
|
|
15
15
|
return `import { mysqlTable, serial, varchar } from 'drizzle-orm/mysql-core'
|
|
16
16
|
|
|
17
17
|
export const users = mysqlTable('users', {
|
|
18
18
|
id: serial('id').primaryKey(),
|
|
19
19
|
email: varchar('email', { length: 255 }).notNull(),
|
|
20
20
|
})
|
|
21
|
-
|
|
22
|
-
case
|
|
21
|
+
`;
|
|
22
|
+
case "sqlite":
|
|
23
23
|
default:
|
|
24
24
|
return `import { sqliteTable, integer, text } from 'drizzle-orm/sqlite-core'
|
|
25
25
|
|
|
@@ -27,13 +27,13 @@ export const users = sqliteTable('users', {
|
|
|
27
27
|
id: integer('id').primaryKey({ autoIncrement: true }),
|
|
28
28
|
email: text('email').notNull(),
|
|
29
29
|
})
|
|
30
|
-
|
|
30
|
+
`;
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
|
|
34
34
|
function dbIndexSource(driver: DbDriver): string {
|
|
35
35
|
switch (driver) {
|
|
36
|
-
case
|
|
36
|
+
case "postgres":
|
|
37
37
|
return `import { drizzle } from 'drizzle-orm/node-postgres'
|
|
38
38
|
import pg from 'pg'
|
|
39
39
|
|
|
@@ -45,8 +45,8 @@ export function createDb() {
|
|
|
45
45
|
})
|
|
46
46
|
return drizzle(pool, { schema })
|
|
47
47
|
}
|
|
48
|
-
|
|
49
|
-
case
|
|
48
|
+
`;
|
|
49
|
+
case "mysql":
|
|
50
50
|
return `import { drizzle } from 'drizzle-orm/mysql2'
|
|
51
51
|
import mysql from 'mysql2/promise'
|
|
52
52
|
|
|
@@ -56,8 +56,8 @@ export function createDb() {
|
|
|
56
56
|
const pool = mysql.createPool(process.env.DATABASE_URL ?? '')
|
|
57
57
|
return drizzle(pool, { schema, mode: 'default' })
|
|
58
58
|
}
|
|
59
|
-
|
|
60
|
-
case
|
|
59
|
+
`;
|
|
60
|
+
case "sqlite":
|
|
61
61
|
default:
|
|
62
62
|
return `import Database from 'better-sqlite3'
|
|
63
63
|
import { drizzle } from 'drizzle-orm/better-sqlite3'
|
|
@@ -69,12 +69,12 @@ export function createDb() {
|
|
|
69
69
|
const client = new Database(filePath)
|
|
70
70
|
return drizzle(client, { schema })
|
|
71
71
|
}
|
|
72
|
-
|
|
72
|
+
`;
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
function drizzleConfigSource(driver: DbDriver): string {
|
|
77
|
-
const dialect = driver ===
|
|
77
|
+
const dialect = driver === "postgres" ? "postgresql" : driver === "mysql" ? "mysql" : "sqlite";
|
|
78
78
|
return `import { defineConfig } from 'drizzle-kit'
|
|
79
79
|
|
|
80
80
|
export default defineConfig({
|
|
@@ -85,74 +85,74 @@ export default defineConfig({
|
|
|
85
85
|
url: process.env.DATABASE_URL ?? '',
|
|
86
86
|
},
|
|
87
87
|
})
|
|
88
|
-
|
|
88
|
+
`;
|
|
89
89
|
}
|
|
90
90
|
|
|
91
91
|
function envExample(driver: DbDriver): string {
|
|
92
92
|
switch (driver) {
|
|
93
|
-
case
|
|
94
|
-
return
|
|
95
|
-
case
|
|
96
|
-
return
|
|
97
|
-
case
|
|
93
|
+
case "postgres":
|
|
94
|
+
return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
|
|
95
|
+
case "mysql":
|
|
96
|
+
return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
|
|
97
|
+
case "sqlite":
|
|
98
98
|
default:
|
|
99
|
-
return
|
|
99
|
+
return "DATABASE_URL=file:./local.db\n";
|
|
100
100
|
}
|
|
101
101
|
}
|
|
102
102
|
|
|
103
103
|
function driverPackages(driver: DbDriver): string[] {
|
|
104
104
|
switch (driver) {
|
|
105
|
-
case
|
|
106
|
-
return [
|
|
107
|
-
case
|
|
108
|
-
return [
|
|
109
|
-
case
|
|
105
|
+
case "postgres":
|
|
106
|
+
return ["pg"];
|
|
107
|
+
case "mysql":
|
|
108
|
+
return ["mysql2"];
|
|
109
|
+
case "sqlite":
|
|
110
110
|
default:
|
|
111
|
-
return [
|
|
111
|
+
return ["better-sqlite3"];
|
|
112
112
|
}
|
|
113
113
|
}
|
|
114
114
|
|
|
115
115
|
function driverDevPackages(driver: DbDriver): string[] {
|
|
116
116
|
switch (driver) {
|
|
117
|
-
case
|
|
118
|
-
return [
|
|
119
|
-
case
|
|
120
|
-
return [
|
|
121
|
-
case
|
|
117
|
+
case "postgres":
|
|
118
|
+
return ["@types/pg"];
|
|
119
|
+
case "sqlite":
|
|
120
|
+
return ["@types/better-sqlite3"];
|
|
121
|
+
case "mysql":
|
|
122
122
|
default:
|
|
123
|
-
return []
|
|
123
|
+
return [];
|
|
124
124
|
}
|
|
125
125
|
}
|
|
126
126
|
|
|
127
127
|
export const drizzleAddon: AddonDefinition = {
|
|
128
|
-
id:
|
|
129
|
-
category:
|
|
128
|
+
id: "drizzle",
|
|
129
|
+
category: "database",
|
|
130
130
|
dependencies(ctx) {
|
|
131
|
-
const driver = ctx.driver ??
|
|
132
|
-
return [
|
|
131
|
+
const driver = ctx.driver ?? "sqlite";
|
|
132
|
+
return ["drizzle-orm", ...driverPackages(driver)];
|
|
133
133
|
},
|
|
134
134
|
devDependencies(ctx) {
|
|
135
|
-
const driver = ctx.driver ??
|
|
136
|
-
return [
|
|
135
|
+
const driver = ctx.driver ?? "sqlite";
|
|
136
|
+
return ["drizzle-kit", ...driverDevPackages(driver)];
|
|
137
137
|
},
|
|
138
138
|
scripts() {
|
|
139
139
|
return {
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
}
|
|
140
|
+
"db:generate": "drizzle-kit generate",
|
|
141
|
+
"db:push": "drizzle-kit push",
|
|
142
|
+
};
|
|
143
143
|
},
|
|
144
144
|
bootBinding() {
|
|
145
145
|
return {
|
|
146
|
-
key:
|
|
147
|
-
importPath:
|
|
148
|
-
factoryName:
|
|
149
|
-
}
|
|
146
|
+
key: "db",
|
|
147
|
+
importPath: "./db/index.js",
|
|
148
|
+
factoryName: "createDb",
|
|
149
|
+
};
|
|
150
150
|
},
|
|
151
151
|
async apply(ctx, write) {
|
|
152
|
-
const driver = ctx.driver ??
|
|
153
|
-
await write(
|
|
154
|
-
await write(
|
|
155
|
-
await write(
|
|
156
|
-
await write(
|
|
152
|
+
const driver = ctx.driver ?? "sqlite";
|
|
153
|
+
await write("src/db/schema.ts", schemaSource(driver));
|
|
154
|
+
await write("src/db/index.ts", dbIndexSource(driver));
|
|
155
|
+
await write("drizzle.config.ts", drizzleConfigSource(driver));
|
|
156
|
+
await write(".env.example", envExample(driver));
|
|
157
157
|
},
|
|
158
|
-
}
|
|
158
|
+
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { AddonDefinition } from
|
|
2
|
-
import type { DbDriver } from
|
|
1
|
+
import type { AddonDefinition } from "../types.js";
|
|
2
|
+
import type { DbDriver } from "../../core/types.js";
|
|
3
3
|
|
|
4
4
|
function schemaTypesSource(): string {
|
|
5
5
|
return `export interface UserTable {
|
|
@@ -10,12 +10,12 @@ function schemaTypesSource(): string {
|
|
|
10
10
|
export interface DB {
|
|
11
11
|
users: UserTable
|
|
12
12
|
}
|
|
13
|
-
|
|
13
|
+
`;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
function dbIndexSource(driver: DbDriver): string {
|
|
17
17
|
switch (driver) {
|
|
18
|
-
case
|
|
18
|
+
case "postgres":
|
|
19
19
|
return `import { Kysely, PostgresDialect } from 'kysely'
|
|
20
20
|
import pg from 'pg'
|
|
21
21
|
|
|
@@ -29,8 +29,8 @@ export function createDb() {
|
|
|
29
29
|
dialect: new PostgresDialect({ pool }),
|
|
30
30
|
})
|
|
31
31
|
}
|
|
32
|
-
|
|
33
|
-
case
|
|
32
|
+
`;
|
|
33
|
+
case "mysql":
|
|
34
34
|
return `import { Kysely, MysqlDialect } from 'kysely'
|
|
35
35
|
import { createPool } from 'mysql2'
|
|
36
36
|
|
|
@@ -42,8 +42,8 @@ export function createDb() {
|
|
|
42
42
|
dialect: new MysqlDialect({ pool }),
|
|
43
43
|
})
|
|
44
44
|
}
|
|
45
|
-
|
|
46
|
-
case
|
|
45
|
+
`;
|
|
46
|
+
case "sqlite":
|
|
47
47
|
default:
|
|
48
48
|
return `import Database from 'better-sqlite3'
|
|
49
49
|
import { Kysely, SqliteDialect } from 'kysely'
|
|
@@ -57,68 +57,68 @@ export function createDb() {
|
|
|
57
57
|
dialect: new SqliteDialect({ database }),
|
|
58
58
|
})
|
|
59
59
|
}
|
|
60
|
-
|
|
60
|
+
`;
|
|
61
61
|
}
|
|
62
62
|
}
|
|
63
63
|
|
|
64
64
|
function driverPackages(driver: DbDriver): string[] {
|
|
65
65
|
switch (driver) {
|
|
66
|
-
case
|
|
67
|
-
return [
|
|
68
|
-
case
|
|
69
|
-
return [
|
|
70
|
-
case
|
|
66
|
+
case "postgres":
|
|
67
|
+
return ["pg"];
|
|
68
|
+
case "mysql":
|
|
69
|
+
return ["mysql2"];
|
|
70
|
+
case "sqlite":
|
|
71
71
|
default:
|
|
72
|
-
return [
|
|
72
|
+
return ["better-sqlite3"];
|
|
73
73
|
}
|
|
74
74
|
}
|
|
75
75
|
|
|
76
76
|
function driverDevPackages(driver: DbDriver): string[] {
|
|
77
77
|
switch (driver) {
|
|
78
|
-
case
|
|
79
|
-
return [
|
|
80
|
-
case
|
|
81
|
-
return [
|
|
82
|
-
case
|
|
78
|
+
case "postgres":
|
|
79
|
+
return ["@types/pg"];
|
|
80
|
+
case "sqlite":
|
|
81
|
+
return ["@types/better-sqlite3"];
|
|
82
|
+
case "mysql":
|
|
83
83
|
default:
|
|
84
|
-
return []
|
|
84
|
+
return [];
|
|
85
85
|
}
|
|
86
86
|
}
|
|
87
87
|
|
|
88
88
|
function envExample(driver: DbDriver): string {
|
|
89
89
|
switch (driver) {
|
|
90
|
-
case
|
|
91
|
-
return
|
|
92
|
-
case
|
|
93
|
-
return
|
|
94
|
-
case
|
|
90
|
+
case "postgres":
|
|
91
|
+
return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
|
|
92
|
+
case "mysql":
|
|
93
|
+
return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
|
|
94
|
+
case "sqlite":
|
|
95
95
|
default:
|
|
96
|
-
return
|
|
96
|
+
return "DATABASE_URL=file:./local.db\n";
|
|
97
97
|
}
|
|
98
98
|
}
|
|
99
99
|
|
|
100
100
|
export const kyselyAddon: AddonDefinition = {
|
|
101
|
-
id:
|
|
102
|
-
category:
|
|
101
|
+
id: "kysely",
|
|
102
|
+
category: "database",
|
|
103
103
|
dependencies(ctx) {
|
|
104
|
-
const driver = ctx.driver ??
|
|
105
|
-
return [
|
|
104
|
+
const driver = ctx.driver ?? "sqlite";
|
|
105
|
+
return ["kysely", ...driverPackages(driver)];
|
|
106
106
|
},
|
|
107
107
|
devDependencies(ctx) {
|
|
108
|
-
const driver = ctx.driver ??
|
|
109
|
-
return driverDevPackages(driver)
|
|
108
|
+
const driver = ctx.driver ?? "sqlite";
|
|
109
|
+
return driverDevPackages(driver);
|
|
110
110
|
},
|
|
111
111
|
bootBinding() {
|
|
112
112
|
return {
|
|
113
|
-
key:
|
|
114
|
-
importPath:
|
|
115
|
-
factoryName:
|
|
116
|
-
}
|
|
113
|
+
key: "db",
|
|
114
|
+
importPath: "./db/index.js",
|
|
115
|
+
factoryName: "createDb",
|
|
116
|
+
};
|
|
117
117
|
},
|
|
118
118
|
async apply(ctx, write) {
|
|
119
|
-
const driver = ctx.driver ??
|
|
120
|
-
await write(
|
|
121
|
-
await write(
|
|
122
|
-
await write(
|
|
119
|
+
const driver = ctx.driver ?? "sqlite";
|
|
120
|
+
await write("src/db/schema.ts", schemaTypesSource());
|
|
121
|
+
await write("src/db/index.ts", dbIndexSource(driver));
|
|
122
|
+
await write(".env.example", envExample(driver));
|
|
123
123
|
},
|
|
124
|
-
}
|
|
124
|
+
};
|
package/src/addons/pino/index.ts
CHANGED
|
@@ -1,30 +1,30 @@
|
|
|
1
|
-
import type { AddonDefinition } from
|
|
1
|
+
import type { AddonDefinition } from "../types.js";
|
|
2
2
|
|
|
3
3
|
export const pinoAddon: AddonDefinition = {
|
|
4
|
-
id:
|
|
5
|
-
category:
|
|
4
|
+
id: "pino",
|
|
5
|
+
category: "logger",
|
|
6
6
|
dependencies() {
|
|
7
|
-
return [
|
|
7
|
+
return ["pino"];
|
|
8
8
|
},
|
|
9
9
|
devDependencies() {
|
|
10
|
-
return []
|
|
10
|
+
return [];
|
|
11
11
|
},
|
|
12
12
|
bootBinding() {
|
|
13
13
|
return {
|
|
14
|
-
key:
|
|
15
|
-
importPath:
|
|
16
|
-
factoryName:
|
|
17
|
-
}
|
|
14
|
+
key: "logger",
|
|
15
|
+
importPath: "./logger.js",
|
|
16
|
+
factoryName: "createLogger",
|
|
17
|
+
};
|
|
18
18
|
},
|
|
19
19
|
async apply(_ctx, write) {
|
|
20
20
|
await write(
|
|
21
|
-
|
|
21
|
+
"src/logger.ts",
|
|
22
22
|
`import pino from 'pino'
|
|
23
23
|
|
|
24
24
|
export function createLogger() {
|
|
25
25
|
return pino({ level: process.env.LOG_LEVEL ?? 'info' })
|
|
26
26
|
}
|
|
27
27
|
`,
|
|
28
|
-
)
|
|
28
|
+
);
|
|
29
29
|
},
|
|
30
|
-
}
|
|
30
|
+
};
|
|
@@ -1,81 +1,154 @@
|
|
|
1
|
-
import type { AddonDefinition } from
|
|
2
|
-
import type { DbDriver } from
|
|
1
|
+
import type { AddonDefinition } from "../types.js";
|
|
2
|
+
import type { DbDriver } from "../../core/types.js";
|
|
3
3
|
|
|
4
4
|
function prismaProvider(driver: DbDriver): string {
|
|
5
5
|
switch (driver) {
|
|
6
|
-
case
|
|
7
|
-
return
|
|
8
|
-
case
|
|
9
|
-
return
|
|
10
|
-
case
|
|
6
|
+
case "postgres":
|
|
7
|
+
return "postgresql";
|
|
8
|
+
case "mysql":
|
|
9
|
+
return "mysql";
|
|
10
|
+
case "sqlite":
|
|
11
11
|
default:
|
|
12
|
-
return
|
|
12
|
+
return "sqlite";
|
|
13
13
|
}
|
|
14
14
|
}
|
|
15
15
|
|
|
16
16
|
function envExample(driver: DbDriver): string {
|
|
17
17
|
switch (driver) {
|
|
18
|
-
case
|
|
19
|
-
return
|
|
20
|
-
case
|
|
21
|
-
return
|
|
22
|
-
case
|
|
18
|
+
case "postgres":
|
|
19
|
+
return "DATABASE_URL=postgresql://user:password@localhost:5432/mydb\n";
|
|
20
|
+
case "mysql":
|
|
21
|
+
return "DATABASE_URL=mysql://user:password@localhost:3306/mydb\n";
|
|
22
|
+
case "sqlite":
|
|
23
23
|
default:
|
|
24
|
-
return
|
|
24
|
+
return "DATABASE_URL=file:./local.db\n";
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
28
|
+
function driverPackages(driver: DbDriver): string[] {
|
|
29
|
+
switch (driver) {
|
|
30
|
+
case "postgres":
|
|
31
|
+
return ["@prisma/adapter-pg", "pg"];
|
|
32
|
+
case "mysql":
|
|
33
|
+
return ["@prisma/adapter-mariadb", "mariadb"];
|
|
34
|
+
case "sqlite":
|
|
35
|
+
default:
|
|
36
|
+
return ["@prisma/adapter-better-sqlite3", "better-sqlite3"];
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
function driverDevPackages(driver: DbDriver): string[] {
|
|
41
|
+
switch (driver) {
|
|
42
|
+
case "postgres":
|
|
43
|
+
return ["@types/pg"];
|
|
44
|
+
case "sqlite":
|
|
45
|
+
return ["@types/better-sqlite3"];
|
|
46
|
+
case "mysql":
|
|
47
|
+
default:
|
|
48
|
+
return [];
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
function dbIndexSource(driver: DbDriver): string {
|
|
53
|
+
switch (driver) {
|
|
54
|
+
case "postgres":
|
|
55
|
+
return `import { PrismaPg } from '@prisma/adapter-pg'
|
|
56
|
+
|
|
57
|
+
import { PrismaClient } from './prisma/client.js'
|
|
58
|
+
|
|
59
|
+
export function createDb() {
|
|
60
|
+
const adapter = new PrismaPg({
|
|
61
|
+
connectionString: process.env.DATABASE_URL,
|
|
62
|
+
})
|
|
63
|
+
return new PrismaClient({ adapter })
|
|
64
|
+
}
|
|
65
|
+
`;
|
|
66
|
+
case "mysql":
|
|
67
|
+
return `import { PrismaMariaDb } from '@prisma/adapter-mariadb'
|
|
68
|
+
|
|
69
|
+
import { PrismaClient } from './prisma/client.js'
|
|
70
|
+
|
|
71
|
+
export function createDb() {
|
|
72
|
+
const adapter = new PrismaMariaDb(process.env.DATABASE_URL ?? 'mariadb://root:@localhost:3306/mydb')
|
|
73
|
+
return new PrismaClient({ adapter })
|
|
74
|
+
}
|
|
75
|
+
`;
|
|
76
|
+
case "sqlite":
|
|
77
|
+
default:
|
|
78
|
+
return `import { PrismaBetterSqlite3 } from '@prisma/adapter-better-sqlite3'
|
|
79
|
+
|
|
80
|
+
import { PrismaClient } from './prisma/client.js'
|
|
81
|
+
|
|
82
|
+
export function createDb() {
|
|
83
|
+
const adapter = new PrismaBetterSqlite3({
|
|
84
|
+
url: process.env.DATABASE_URL ?? 'file:./local.db',
|
|
85
|
+
})
|
|
86
|
+
return new PrismaClient({ adapter })
|
|
87
|
+
}
|
|
88
|
+
`;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
function prismaConfigSource(): string {
|
|
93
|
+
return `import 'dotenv/config'
|
|
94
|
+
import { defineConfig, env } from 'prisma/config'
|
|
95
|
+
|
|
96
|
+
export default defineConfig({
|
|
97
|
+
schema: 'prisma/schema.prisma',
|
|
98
|
+
datasource: {
|
|
99
|
+
url: env('DATABASE_URL'),
|
|
49
100
|
},
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
101
|
+
})
|
|
102
|
+
`;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function schemaSource(driver: DbDriver): string {
|
|
106
|
+
const provider = prismaProvider(driver);
|
|
107
|
+
return `generator client {
|
|
108
|
+
provider = "prisma-client"
|
|
109
|
+
output = "../src/db/prisma"
|
|
57
110
|
}
|
|
58
111
|
|
|
59
112
|
datasource db {
|
|
60
113
|
provider = "${provider}"
|
|
61
|
-
url = env("DATABASE_URL")
|
|
62
114
|
}
|
|
63
115
|
|
|
64
116
|
model User {
|
|
65
117
|
id Int @id @default(autoincrement())
|
|
66
118
|
email String
|
|
67
119
|
}
|
|
68
|
-
|
|
69
|
-
)
|
|
70
|
-
await write(
|
|
71
|
-
'src/db/index.ts',
|
|
72
|
-
`import { PrismaClient } from '@prisma/client'
|
|
73
|
-
|
|
74
|
-
export function createDb() {
|
|
75
|
-
return new PrismaClient()
|
|
120
|
+
`;
|
|
76
121
|
}
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
122
|
+
|
|
123
|
+
export const prismaAddon: AddonDefinition = {
|
|
124
|
+
id: "prisma",
|
|
125
|
+
category: "database",
|
|
126
|
+
dependencies(ctx) {
|
|
127
|
+
const driver = ctx.driver ?? "sqlite";
|
|
128
|
+
return ["@prisma/client", ...driverPackages(driver)];
|
|
80
129
|
},
|
|
81
|
-
|
|
130
|
+
devDependencies(ctx) {
|
|
131
|
+
const driver = ctx.driver ?? "sqlite";
|
|
132
|
+
return ["prisma", ...driverDevPackages(driver)];
|
|
133
|
+
},
|
|
134
|
+
scripts() {
|
|
135
|
+
return {
|
|
136
|
+
"db:generate": "prisma generate",
|
|
137
|
+
"db:push": "prisma db push",
|
|
138
|
+
};
|
|
139
|
+
},
|
|
140
|
+
bootBinding() {
|
|
141
|
+
return {
|
|
142
|
+
key: "db",
|
|
143
|
+
importPath: "./db/index.js",
|
|
144
|
+
factoryName: "createDb",
|
|
145
|
+
};
|
|
146
|
+
},
|
|
147
|
+
async apply(ctx, write) {
|
|
148
|
+
const driver = ctx.driver ?? "sqlite";
|
|
149
|
+
await write("prisma.config.ts", prismaConfigSource());
|
|
150
|
+
await write("prisma/schema.prisma", schemaSource(driver));
|
|
151
|
+
await write("src/db/index.ts", dbIndexSource(driver));
|
|
152
|
+
await write(".env.example", envExample(driver));
|
|
153
|
+
},
|
|
154
|
+
};
|