@@ -61,43 +61,58 @@ interface BunSqliteModule {
6161const isReaderSql = ( sql : string ) : boolean =>
6262 / ^ \s * ( s e l e c t | p r a g m a | w i t h | e x p l a i n | v a l u e s ) \b / i. test ( sql ) ;
6363
64+ const createBetterDb = ( filename : string ) : DbLike => {
65+ const BetterSQLite = require ( "better-sqlite3" ) as BetterSqliteConstructor ;
66+ const db = new BetterSQLite ( filename ) ;
67+
68+ return {
69+ prepare : ( sql ) => {
70+ const statement = db . prepare ( sql ) ;
71+ return {
72+ reader : statement . reader ,
73+ all : ( ...parameters ) => statement . all ( parameters ) ,
74+ run : ( ...parameters ) => statement . run ( parameters ) ,
75+ } ;
76+ } ,
77+ serialize : ( ) => db . serialize ( ) ,
78+ close : ( ) => db . close ( ) ,
79+ } ;
80+ } ;
81+
82+ const createBunDb = ( filename : string ) : DbLike => {
83+ const { Database } = require ( "bun:sqlite" ) as BunSqliteModule ;
84+ const db = new Database ( filename ) ;
85+
86+ return {
87+ prepare : ( sql ) => {
88+ const statement = db . prepare ( sql ) ;
89+ return {
90+ reader : isReaderSql ( sql ) ,
91+ all : ( ...parameters ) => statement . all ( ...parameters ) ,
92+ run : ( ...parameters ) => statement . run ( ...parameters ) ,
93+ } ;
94+ } ,
95+ serialize : ( ) => db . serialize ( ) ,
96+ close : ( ) => db . close ( ) ,
97+ } ;
98+ } ;
99+
64100const createDb = ( filename : string ) : DbLike => {
65- try {
66- const BetterSQLite = require ( "better-sqlite3" ) as BetterSqliteConstructor ;
67- const db = new BetterSQLite ( filename ) ;
68-
69- return {
70- prepare : ( sql ) => {
71- const statement = db . prepare ( sql ) ;
72- return {
73- reader : statement . reader ,
74- all : ( ...parameters ) => statement . all ( parameters ) ,
75- run : ( ...parameters ) => statement . run ( parameters ) ,
76- } ;
77- } ,
78- serialize : ( ) => db . serialize ( ) ,
79- close : ( ) => db . close ( ) ,
80- } ;
81- } catch ( error ) {
82- const hasBunRuntime = ( globalThis as Record < string , unknown > ) . Bun != null ;
83- if ( ! hasBunRuntime ) throw error ;
84-
85- const { Database } = require ( "bun:sqlite" ) as BunSqliteModule ;
86- const db = new Database ( filename ) ;
87-
88- return {
89- prepare : ( sql ) => {
90- const statement = db . prepare ( sql ) ;
91- return {
92- reader : isReaderSql ( sql ) ,
93- all : ( ...parameters ) => statement . all ( ...parameters ) ,
94- run : ( ...parameters ) => statement . run ( ...parameters ) ,
95- } ;
96- } ,
97- serialize : ( ) => db . serialize ( ) ,
98- close : ( ) => db . close ( ) ,
99- } ;
101+ const hasBunRuntime = ( globalThis as Record < string , unknown > ) . Bun != null ;
102+
103+ if ( hasBunRuntime ) {
104+ try {
105+ return createBunDb ( filename ) ;
106+ } catch ( bunError ) {
107+ try {
108+ return createBetterDb ( filename ) ;
109+ } catch {
110+ throw bunError ;
111+ }
112+ }
100113 }
114+
115+ return createBetterDb ( filename ) ;
101116} ;
102117
103118export const createBetterSqliteDriver : CreateSqliteDriver =
0 commit comments