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.
Files changed (111) hide show
  1. package/README.md +2 -0
  2. package/dist/cjs/addons/arktype/index.cjs.map +1 -1
  3. package/dist/cjs/addons/drizzle/index.cjs.map +1 -1
  4. package/dist/cjs/addons/kysely/index.cjs.map +1 -1
  5. package/dist/cjs/addons/pino/index.cjs.map +1 -1
  6. package/dist/cjs/addons/prisma/index.cjs +84 -24
  7. package/dist/cjs/addons/prisma/index.cjs.map +1 -1
  8. package/dist/cjs/addons/registry.cjs +1 -1
  9. package/dist/cjs/addons/registry.cjs.map +1 -1
  10. package/dist/cjs/addons/types.d.cts +1 -1
  11. package/dist/cjs/addons/valibot/index.cjs.map +1 -1
  12. package/dist/cjs/addons/validators.cjs.map +1 -1
  13. package/dist/cjs/addons/winston/index.cjs.map +1 -1
  14. package/dist/cjs/addons/zod/index.cjs.map +1 -1
  15. package/dist/cjs/cli.cjs +5 -0
  16. package/dist/cjs/cli.cjs.map +1 -1
  17. package/dist/cjs/commands/create.cjs +44 -11
  18. package/dist/cjs/commands/create.cjs.map +1 -1
  19. package/dist/cjs/commands/create.d.cts +1 -0
  20. package/dist/cjs/core/json-output.cjs.map +1 -1
  21. package/dist/cjs/core/package-manager.cjs.map +1 -1
  22. package/dist/cjs/core/package-manager.d.cts +1 -1
  23. package/dist/cjs/core/parse-options.cjs +7 -7
  24. package/dist/cjs/core/parse-options.cjs.map +1 -1
  25. package/dist/cjs/core/parse-options.d.cts +3 -3
  26. package/dist/cjs/core/project-config.cjs +1 -1
  27. package/dist/cjs/core/project-config.cjs.map +1 -1
  28. package/dist/cjs/core/resolve-packages.cjs +41 -7
  29. package/dist/cjs/core/resolve-packages.cjs.map +1 -1
  30. package/dist/cjs/core/resolve-packages.d.cts +2 -2
  31. package/dist/cjs/core/scaffold-engine.cjs +33 -6
  32. package/dist/cjs/core/scaffold-engine.cjs.map +1 -1
  33. package/dist/cjs/core/types.cjs +11 -3
  34. package/dist/cjs/core/types.cjs.map +1 -1
  35. package/dist/cjs/core/types.d.cts +8 -8
  36. package/dist/cjs/core/validate-project-name.cjs.map +1 -1
  37. package/dist/cjs/frameworks/index.cjs +138 -17
  38. package/dist/cjs/frameworks/index.cjs.map +1 -1
  39. package/dist/cjs/frameworks/index.d.cts +3 -3
  40. package/dist/cjs/scaffold.d.cts +1 -1
  41. package/dist/cjs/templates/base.cjs +6 -6
  42. package/dist/cjs/templates/base.cjs.map +1 -1
  43. package/dist/cjs/types.d.cts +1 -1
  44. package/dist/esm/addons/arktype/index.js.map +1 -1
  45. package/dist/esm/addons/drizzle/index.js.map +1 -1
  46. package/dist/esm/addons/kysely/index.js.map +1 -1
  47. package/dist/esm/addons/pino/index.js.map +1 -1
  48. package/dist/esm/addons/prisma/index.js +84 -24
  49. package/dist/esm/addons/prisma/index.js.map +1 -1
  50. package/dist/esm/addons/registry.js +2 -2
  51. package/dist/esm/addons/registry.js.map +1 -1
  52. package/dist/esm/addons/types.d.ts +1 -1
  53. package/dist/esm/addons/valibot/index.js.map +1 -1
  54. package/dist/esm/addons/validators.js.map +1 -1
  55. package/dist/esm/addons/winston/index.js.map +1 -1
  56. package/dist/esm/addons/zod/index.js.map +1 -1
  57. package/dist/esm/cli.js +5 -0
  58. package/dist/esm/cli.js.map +1 -1
  59. package/dist/esm/commands/create.d.ts +1 -0
  60. package/dist/esm/commands/create.js +46 -13
  61. package/dist/esm/commands/create.js.map +1 -1
  62. package/dist/esm/core/json-output.js.map +1 -1
  63. package/dist/esm/core/package-manager.d.ts +1 -1
  64. package/dist/esm/core/package-manager.js.map +1 -1
  65. package/dist/esm/core/parse-options.d.ts +3 -3
  66. package/dist/esm/core/parse-options.js +8 -8
  67. package/dist/esm/core/parse-options.js.map +1 -1
  68. package/dist/esm/core/project-config.js +1 -1
  69. package/dist/esm/core/project-config.js.map +1 -1
  70. package/dist/esm/core/resolve-packages.d.ts +2 -2
  71. package/dist/esm/core/resolve-packages.js +41 -7
  72. package/dist/esm/core/resolve-packages.js.map +1 -1
  73. package/dist/esm/core/scaffold-engine.js +34 -7
  74. package/dist/esm/core/scaffold-engine.js.map +1 -1
  75. package/dist/esm/core/types.d.ts +8 -8
  76. package/dist/esm/core/types.js +11 -3
  77. package/dist/esm/core/types.js.map +1 -1
  78. package/dist/esm/core/validate-project-name.js.map +1 -1
  79. package/dist/esm/frameworks/index.d.ts +3 -3
  80. package/dist/esm/frameworks/index.js +138 -17
  81. package/dist/esm/frameworks/index.js.map +1 -1
  82. package/dist/esm/scaffold.d.ts +1 -1
  83. package/dist/esm/templates/base.js +6 -6
  84. package/dist/esm/templates/base.js.map +1 -1
  85. package/dist/esm/types.d.ts +1 -1
  86. package/package.json +13 -13
  87. package/src/addons/arktype/index.ts +2 -2
  88. package/src/addons/drizzle/index.ts +53 -53
  89. package/src/addons/kysely/index.ts +42 -42
  90. package/src/addons/pino/index.ts +12 -12
  91. package/src/addons/prisma/index.ts +128 -55
  92. package/src/addons/registry.ts +37 -37
  93. package/src/addons/types.ts +14 -14
  94. package/src/addons/valibot/index.ts +2 -2
  95. package/src/addons/validators.ts +9 -9
  96. package/src/addons/winston/index.ts +12 -12
  97. package/src/addons/zod/index.ts +2 -2
  98. package/src/cli.ts +27 -26
  99. package/src/commands/create.ts +181 -152
  100. package/src/core/json-output.ts +4 -4
  101. package/src/core/package-manager.ts +38 -31
  102. package/src/core/parse-options.ts +50 -48
  103. package/src/core/project-config.ts +10 -14
  104. package/src/core/resolve-packages.ts +79 -41
  105. package/src/core/scaffold-engine.ts +106 -36
  106. package/src/core/types.ts +61 -36
  107. package/src/core/validate-project-name.ts +40 -40
  108. package/src/frameworks/index.ts +164 -29
  109. package/src/scaffold.ts +3 -3
  110. package/src/templates/base.ts +57 -51
  111. package/src/types.ts +5 -4
@@ -1,25 +1,25 @@
1
- import type { AddonDefinition } from '../types.js'
2
- import type { DbDriver } from '../../core/types.js'
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 'postgres':
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 'mysql':
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 'sqlite':
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 'postgres':
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 'mysql':
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 'sqlite':
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 === 'postgres' ? 'postgresql' : driver === 'mysql' ? 'mysql' : 'sqlite'
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 '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':
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 'DATABASE_URL=file:./local.db\n'
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 'postgres':
106
- return ['pg']
107
- case 'mysql':
108
- return ['mysql2']
109
- case 'sqlite':
105
+ case "postgres":
106
+ return ["pg"];
107
+ case "mysql":
108
+ return ["mysql2"];
109
+ case "sqlite":
110
110
  default:
111
- return ['better-sqlite3']
111
+ return ["better-sqlite3"];
112
112
  }
113
113
  }
114
114
 
115
115
  function driverDevPackages(driver: DbDriver): string[] {
116
116
  switch (driver) {
117
- case 'postgres':
118
- return ['@types/pg']
119
- case 'sqlite':
120
- return ['@types/better-sqlite3']
121
- case 'mysql':
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: 'drizzle',
129
- category: 'database',
128
+ id: "drizzle",
129
+ category: "database",
130
130
  dependencies(ctx) {
131
- const driver = ctx.driver ?? 'sqlite'
132
- return ['drizzle-orm', ...driverPackages(driver)]
131
+ const driver = ctx.driver ?? "sqlite";
132
+ return ["drizzle-orm", ...driverPackages(driver)];
133
133
  },
134
134
  devDependencies(ctx) {
135
- const driver = ctx.driver ?? 'sqlite'
136
- return ['drizzle-kit', ...driverDevPackages(driver)]
135
+ const driver = ctx.driver ?? "sqlite";
136
+ return ["drizzle-kit", ...driverDevPackages(driver)];
137
137
  },
138
138
  scripts() {
139
139
  return {
140
- 'db:generate': 'drizzle-kit generate',
141
- 'db:push': 'drizzle-kit push',
142
- }
140
+ "db:generate": "drizzle-kit generate",
141
+ "db:push": "drizzle-kit push",
142
+ };
143
143
  },
144
144
  bootBinding() {
145
145
  return {
146
- key: 'db',
147
- importPath: './db/index.js',
148
- factoryName: 'createDb',
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 ?? '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))
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 '../types.js'
2
- import type { DbDriver } from '../../core/types.js'
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 'postgres':
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 'mysql':
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 'sqlite':
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 'postgres':
67
- return ['pg']
68
- case 'mysql':
69
- return ['mysql2']
70
- case 'sqlite':
66
+ case "postgres":
67
+ return ["pg"];
68
+ case "mysql":
69
+ return ["mysql2"];
70
+ case "sqlite":
71
71
  default:
72
- return ['better-sqlite3']
72
+ return ["better-sqlite3"];
73
73
  }
74
74
  }
75
75
 
76
76
  function driverDevPackages(driver: DbDriver): string[] {
77
77
  switch (driver) {
78
- case 'postgres':
79
- return ['@types/pg']
80
- case 'sqlite':
81
- return ['@types/better-sqlite3']
82
- case 'mysql':
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 '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':
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 'DATABASE_URL=file:./local.db\n'
96
+ return "DATABASE_URL=file:./local.db\n";
97
97
  }
98
98
  }
99
99
 
100
100
  export const kyselyAddon: AddonDefinition = {
101
- id: 'kysely',
102
- category: 'database',
101
+ id: "kysely",
102
+ category: "database",
103
103
  dependencies(ctx) {
104
- const driver = ctx.driver ?? 'sqlite'
105
- return ['kysely', ...driverPackages(driver)]
104
+ const driver = ctx.driver ?? "sqlite";
105
+ return ["kysely", ...driverPackages(driver)];
106
106
  },
107
107
  devDependencies(ctx) {
108
- const driver = ctx.driver ?? 'sqlite'
109
- return driverDevPackages(driver)
108
+ const driver = ctx.driver ?? "sqlite";
109
+ return driverDevPackages(driver);
110
110
  },
111
111
  bootBinding() {
112
112
  return {
113
- key: 'db',
114
- importPath: './db/index.js',
115
- factoryName: 'createDb',
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 ?? '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))
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
+ };
@@ -1,30 +1,30 @@
1
- import type { AddonDefinition } from '../types.js'
1
+ import type { AddonDefinition } from "../types.js";
2
2
 
3
3
  export const pinoAddon: AddonDefinition = {
4
- id: 'pino',
5
- category: 'logger',
4
+ id: "pino",
5
+ category: "logger",
6
6
  dependencies() {
7
- return ['pino']
7
+ return ["pino"];
8
8
  },
9
9
  devDependencies() {
10
- return []
10
+ return [];
11
11
  },
12
12
  bootBinding() {
13
13
  return {
14
- key: 'logger',
15
- importPath: './logger.js',
16
- factoryName: 'createLogger',
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
- 'src/logger.ts',
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 '../types.js'
2
- import type { DbDriver } from '../../core/types.js'
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 'postgres':
7
- return 'postgresql'
8
- case 'mysql':
9
- return 'mysql'
10
- case 'sqlite':
6
+ case "postgres":
7
+ return "postgresql";
8
+ case "mysql":
9
+ return "mysql";
10
+ case "sqlite":
11
11
  default:
12
- return 'sqlite'
12
+ return "sqlite";
13
13
  }
14
14
  }
15
15
 
16
16
  function envExample(driver: DbDriver): string {
17
17
  switch (driver) {
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':
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 'DATABASE_URL=file:./local.db\n'
24
+ return "DATABASE_URL=file:./local.db\n";
25
25
  }
26
26
  }
27
27
 
28
- export const prismaAddon: AddonDefinition = {
29
- id: 'prisma',
30
- category: 'database',
31
- dependencies() {
32
- return ['@prisma/client']
33
- },
34
- devDependencies() {
35
- return ['prisma']
36
- },
37
- scripts() {
38
- return {
39
- 'db:generate': 'prisma generate',
40
- 'db:push': 'prisma db push',
41
- }
42
- },
43
- bootBinding() {
44
- return {
45
- key: 'db',
46
- importPath: './db/index.js',
47
- factoryName: 'createDb',
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
- async apply(ctx, write) {
51
- const driver = ctx.driver ?? 'sqlite'
52
- const provider = prismaProvider(driver)
53
- await write(
54
- 'prisma/schema.prisma',
55
- `generator client {
56
- provider = "prisma-client-js"
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
- await write('.env.example', envExample(driver))
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
+ };