@@ -195,18 +195,16 @@ export default defineAddon({
195
195
sv . file ( `drizzle.config.${ ext } ` , ( content ) => {
196
196
const { ast, generateCode } = parseScript ( content ) ;
197
197
198
- imports . addNamed ( ast , 'drizzle-kit' , { defineConfig : 'defineConfig' } ) ;
198
+ imports . addNamed ( ast , { from : 'drizzle-kit' , imports : { defineConfig : 'defineConfig' } } ) ;
199
199
200
- common . addStatement (
201
- ast ,
202
- common . statementFromString (
200
+ ast . body . push (
201
+ common . parseStatement (
203
202
"if (!process.env.DATABASE_URL) throw new Error('DATABASE_URL is not set');"
204
203
)
205
204
) ;
206
205
207
- exports . defaultExport (
208
- ast ,
209
- common . expressionFromString ( `
206
+ exports . createDefault ( ast , {
207
+ fallback : common . parseExpression ( `
210
208
defineConfig({
211
209
schema: "./src/lib/server/db/schema.${ typescript ? 'ts' : 'js' } ",
212
210
dialect: "${ options . sqlite === 'turso' ? 'turso' : options . database } ",
@@ -217,7 +215,7 @@ export default defineAddon({
217
215
verbose: true,
218
216
strict: true
219
217
})` )
220
- ) ;
218
+ } ) ;
221
219
222
220
return generateCode ( ) ;
223
221
} ) ;
@@ -227,128 +225,190 @@ export default defineAddon({
227
225
228
226
let userSchemaExpression ;
229
227
if ( options . database === 'sqlite' ) {
230
- imports . addNamed ( ast , 'drizzle-orm/sqlite-core' , {
231
- sqliteTable : 'sqliteTable' ,
232
- integer : 'integer'
228
+ imports . addNamed ( ast , {
229
+ from : 'drizzle-orm/sqlite-core' ,
230
+ imports : {
231
+ sqliteTable : 'sqliteTable' ,
232
+ integer : 'integer'
233
+ }
233
234
} ) ;
234
235
235
- userSchemaExpression = common . expressionFromString ( `sqliteTable('user', {
236
+ userSchemaExpression = common . parseExpression ( `sqliteTable('user', {
236
237
id: integer('id').primaryKey(),
237
238
age: integer('age')
238
239
})` ) ;
239
240
}
240
241
if ( options . database === 'mysql' ) {
241
- imports . addNamed ( ast , 'drizzle-orm/mysql-core' , {
242
- mysqlTable : 'mysqlTable' ,
243
- serial : 'serial' ,
244
- int : 'int'
242
+ imports . addNamed ( ast , {
243
+ from : 'drizzle-orm/mysql-core' ,
244
+ imports : {
245
+ mysqlTable : 'mysqlTable' ,
246
+ serial : 'serial' ,
247
+ int : 'int'
248
+ }
245
249
} ) ;
246
250
247
- userSchemaExpression = common . expressionFromString ( `mysqlTable('user', {
251
+ userSchemaExpression = common . parseExpression ( `mysqlTable('user', {
248
252
id: serial('id').primaryKey(),
249
253
age: int('age'),
250
254
})` ) ;
251
255
}
252
256
if ( options . database === 'postgresql' ) {
253
- imports . addNamed ( ast , 'drizzle-orm/pg-core' , {
254
- pgTable : 'pgTable' ,
255
- serial : 'serial' ,
256
- integer : 'integer'
257
+ imports . addNamed ( ast , {
258
+ from : 'drizzle-orm/pg-core' ,
259
+ imports : {
260
+ pgTable : 'pgTable' ,
261
+ serial : 'serial' ,
262
+ integer : 'integer'
263
+ }
257
264
} ) ;
258
265
259
- userSchemaExpression = common . expressionFromString ( `pgTable('user', {
266
+ userSchemaExpression = common . parseExpression ( `pgTable('user', {
260
267
id: serial('id').primaryKey(),
261
268
age: integer('age'),
262
269
})` ) ;
263
270
}
264
271
265
272
if ( ! userSchemaExpression ) throw new Error ( 'unreachable state...' ) ;
266
- const userIdentifier = variables . declaration ( ast , 'const' , 'user' , userSchemaExpression ) ;
267
- exports . namedExport ( ast , 'user' , userIdentifier ) ;
273
+ const userIdentifier = variables . declaration ( ast , {
274
+ kind : 'const' ,
275
+ name : 'user' ,
276
+ value : userSchemaExpression
277
+ } ) ;
278
+ exports . createNamed ( ast , {
279
+ name : 'user' ,
280
+ fallback : userIdentifier
281
+ } ) ;
268
282
269
283
return generateCode ( ) ;
270
284
} ) ;
271
285
272
286
sv . file ( `${ kit ?. libDirectory } /server/db/index.${ ext } ` , ( content ) => {
273
287
const { ast, generateCode } = parseScript ( content ) ;
274
288
275
- imports . addNamed ( ast , '$env/dynamic/private' , { env : 'env' } ) ;
276
- imports . addNamespace ( ast , './schema' , 'schema' ) ;
289
+ imports . addNamed ( ast , {
290
+ from : '$env/dynamic/private' ,
291
+ imports : { env : 'env' }
292
+ } ) ;
293
+ imports . addNamespace ( ast , { from : './schema' , as : 'schema' } ) ;
277
294
278
295
// env var checks
279
- const dbURLCheck = common . statementFromString (
296
+ const dbURLCheck = common . parseStatement (
280
297
"if (!env.DATABASE_URL) throw new Error('DATABASE_URL is not set');"
281
298
) ;
282
- common . addStatement ( ast , dbURLCheck ) ;
299
+ ast . body . push ( dbURLCheck ) ;
283
300
284
301
let clientExpression ;
285
302
// SQLite
286
303
if ( options . sqlite === 'better-sqlite3' ) {
287
- imports . addDefault ( ast , 'better-sqlite3' , 'Database' ) ;
288
- imports . addNamed ( ast , 'drizzle-orm/better-sqlite3' , { drizzle : 'drizzle' } ) ;
304
+ imports . addDefault ( ast , { from : 'better-sqlite3' , as : 'Database' } ) ;
305
+ imports . addNamed ( ast , {
306
+ from : 'drizzle-orm/better-sqlite3' ,
307
+ imports : { drizzle : 'drizzle' }
308
+ } ) ;
289
309
290
- clientExpression = common . expressionFromString ( 'new Database(env.DATABASE_URL)' ) ;
310
+ clientExpression = common . parseExpression ( 'new Database(env.DATABASE_URL)' ) ;
291
311
}
292
312
if ( options . sqlite === 'libsql' || options . sqlite === 'turso' ) {
293
- imports . addNamed ( ast , '@libsql/client' , { createClient : 'createClient' } ) ;
294
- imports . addNamed ( ast , 'drizzle-orm/libsql' , { drizzle : 'drizzle' } ) ;
313
+ imports . addNamed ( ast , {
314
+ from : '@libsql/client' ,
315
+ imports : { createClient : 'createClient' }
316
+ } ) ;
317
+ imports . addNamed ( ast , {
318
+ from : 'drizzle-orm/libsql' ,
319
+ imports : { drizzle : 'drizzle' }
320
+ } ) ;
295
321
296
322
if ( options . sqlite === 'turso' ) {
297
- imports . addNamed ( ast , '$app/environment' , { dev : 'dev' } ) ;
323
+ imports . addNamed ( ast , {
324
+ from : '$app/environment' ,
325
+ imports : { dev : 'dev' }
326
+ } ) ;
298
327
// auth token check in prod
299
- const authTokenCheck = common . statementFromString (
328
+ const authTokenCheck = common . parseStatement (
300
329
"if (!dev && !env.DATABASE_AUTH_TOKEN) throw new Error('DATABASE_AUTH_TOKEN is not set');"
301
330
) ;
302
- common . addStatement ( ast , authTokenCheck ) ;
331
+ ast . body . push ( authTokenCheck ) ;
303
332
304
- clientExpression = common . expressionFromString (
333
+ clientExpression = common . parseExpression (
305
334
'createClient({ url: env.DATABASE_URL, authToken: env.DATABASE_AUTH_TOKEN })'
306
335
) ;
307
336
} else {
308
- clientExpression = common . expressionFromString ( 'createClient({ url: env.DATABASE_URL })' ) ;
337
+ clientExpression = common . parseExpression ( 'createClient({ url: env.DATABASE_URL })' ) ;
309
338
}
310
339
}
311
340
// MySQL
312
341
if ( options . mysql === 'mysql2' || options . mysql === 'planetscale' ) {
313
- imports . addDefault ( ast , 'mysql2/promise' , 'mysql' ) ;
314
- imports . addNamed ( ast , 'drizzle-orm/mysql2' , { drizzle : 'drizzle' } ) ;
342
+ imports . addDefault ( ast , { from : 'mysql2/promise' , as : 'mysql' } ) ;
343
+ imports . addNamed ( ast , {
344
+ from : 'drizzle-orm/mysql2' ,
345
+ imports : { drizzle : 'drizzle' }
346
+ } ) ;
315
347
316
- clientExpression = common . expressionFromString ( 'mysql.createPool(env.DATABASE_URL)' ) ;
348
+ clientExpression = common . parseExpression ( 'mysql.createPool(env.DATABASE_URL)' ) ;
317
349
}
318
350
// PostgreSQL
319
351
if ( options . postgresql === 'neon' ) {
320
- imports . addNamed ( ast , '@neondatabase/serverless' , { neon : 'neon' } ) ;
321
- imports . addNamed ( ast , 'drizzle-orm/neon-http' , { drizzle : 'drizzle' } ) ;
352
+ imports . addNamed ( ast , {
353
+ from : '@neondatabase/serverless' ,
354
+ imports : { neon : 'neon' }
355
+ } ) ;
356
+ imports . addNamed ( ast , {
357
+ from : 'drizzle-orm/neon-http' ,
358
+ imports : { drizzle : 'drizzle' }
359
+ } ) ;
322
360
323
- clientExpression = common . expressionFromString ( 'neon(env.DATABASE_URL)' ) ;
361
+ clientExpression = common . parseExpression ( 'neon(env.DATABASE_URL)' ) ;
324
362
}
325
363
if ( options . postgresql === 'postgres.js' ) {
326
- imports . addDefault ( ast , 'postgres' , 'postgres' ) ;
327
- imports . addNamed ( ast , 'drizzle-orm/postgres-js' , { drizzle : 'drizzle' } ) ;
364
+ imports . addDefault ( ast , { from : 'postgres' , as : 'postgres' } ) ;
365
+ imports . addNamed ( ast , {
366
+ from : 'drizzle-orm/postgres-js' ,
367
+ imports : { drizzle : 'drizzle' }
368
+ } ) ;
328
369
329
- clientExpression = common . expressionFromString ( 'postgres(env.DATABASE_URL)' ) ;
370
+ clientExpression = common . parseExpression ( 'postgres(env.DATABASE_URL)' ) ;
330
371
}
331
372
332
373
if ( ! clientExpression ) throw new Error ( 'unreachable state...' ) ;
333
- const clientIdentifier = variables . declaration ( ast , 'const' , 'client' , clientExpression ) ;
334
- common . addStatement ( ast , clientIdentifier ) ;
374
+ ast . body . push (
375
+ variables . declaration ( ast , {
376
+ kind : 'const' ,
377
+ name : 'client' ,
378
+ value : clientExpression
379
+ } )
380
+ ) ;
335
381
336
382
// create drizzle function call
337
- const drizzleCall = functions . callByIdentifier ( 'drizzle' , [ 'client' ] ) ;
383
+ const drizzleCall = functions . createCall ( {
384
+ name : 'drizzle' ,
385
+ args : [ 'client' ] ,
386
+ useIdentifiers : true
387
+ } ) ;
338
388
339
389
// add schema to support `db.query`
340
390
const paramObject = object . create ( {
341
- schema : variables . identifier ( 'schema' )
391
+ schema : variables . createIdentifier ( 'schema' )
342
392
} ) ;
343
393
if ( options . database === 'mysql' ) {
344
394
const mode = options . mysql === 'planetscale' ? 'planetscale' : 'default' ;
345
- object . property ( paramObject , 'mode' , common . createLiteral ( mode ) ) ;
395
+ object . property ( paramObject , {
396
+ name : 'mode' ,
397
+ fallback : common . createLiteral ( mode )
398
+ } ) ;
346
399
}
347
400
drizzleCall . arguments . push ( paramObject ) ;
348
401
349
402
// create `db` export
350
- const db = variables . declaration ( ast , 'const' , 'db' , drizzleCall ) ;
351
- exports . namedExport ( ast , 'db' , db ) ;
403
+ const db = variables . declaration ( ast , {
404
+ kind : 'const' ,
405
+ name : 'db' ,
406
+ value : drizzleCall
407
+ } ) ;
408
+ exports . createNamed ( ast , {
409
+ name : 'db' ,
410
+ fallback : db
411
+ } ) ;
352
412
353
413
return generateCode ( ) ;
354
414
} ) ;
0 commit comments