1+ import { asyncNoop , once } from '@julr/utils/functions'
2+
13import { resolveTtl } from '../../helpers.js'
24import { BaseDriver } from '../base_driver.js'
35import type { DatabaseConfig , CacheDriver , DatabaseAdapter } from '../../types/main.js'
@@ -16,9 +18,9 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
1618 #adapter: DatabaseAdapter
1719
1820 /**
19- * A promise that resolves when the table is created
21+ * Initialize by creating the table
2022 */
21- #initialized: Promise < void >
23+ #initializer: ( ) => Promise < any >
2224
2325 /**
2426 * Pruning interval
@@ -30,16 +32,16 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
3032 this . #adapter = adapter
3133
3234 if ( isNamespace ) {
33- this . #initialized = Promise . resolve ( )
35+ this . #initializer = asyncNoop
3436 return
3537 }
3638
3739 this . #adapter. setTableName ( config . tableName || 'bentocache' )
3840
3941 if ( config . autoCreateTable !== false ) {
40- this . #initialized = this . #adapter. createTableIfNotExists ( )
42+ this . #initializer = once ( async ( ) => await this . #adapter. createTableIfNotExists ( ) )
4143 } else {
42- this . #initialized = Promise . resolve ( )
44+ this . #initializer = asyncNoop
4345 }
4446
4547 if ( config . pruneInterval === false ) return
@@ -52,7 +54,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
5254 */
5355 #startPruneInterval( interval : number ) {
5456 this . #pruneInterval = setInterval ( async ( ) => {
55- await this . #initialized
57+ await this . #initializer ( )
5658 await this . #adapter
5759 . pruneExpiredEntries ( )
5860 . catch ( ( err ) => console . error ( '[bentocache] failed to prune expired entries' , err ) )
@@ -83,7 +85,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
8385 * Get a value from the cache
8486 */
8587 async get ( key : string ) {
86- await this . #initialized
88+ await this . #initializer ( )
8789
8890 const result = await this . #adapter. get ( this . getItemKey ( key ) )
8991 if ( ! result ) return
@@ -113,7 +115,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
113115 * Returns true if the value was set, false otherwise
114116 */
115117 async set ( key : string , value : any , ttl ?: number ) {
116- await this . #initialized
118+ await this . #initializer ( )
117119 await this . #adapter. set ( {
118120 key : this . getItemKey ( key ) ,
119121 value,
@@ -127,7 +129,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
127129 * Remove all items from the cache
128130 */
129131 async clear ( ) {
130- await this . #initialized
132+ await this . #initializer ( )
131133
132134 await this . #adapter. clear ( this . prefix )
133135 }
@@ -137,7 +139,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
137139 * Returns true if the key was deleted, false otherwise
138140 */
139141 async delete ( key : string ) {
140- await this . #initialized
142+ await this . #initializer ( )
141143 return this . #adapter. delete ( this . getItemKey ( key ) )
142144 }
143145
@@ -146,7 +148,7 @@ export class DatabaseDriver extends BaseDriver implements CacheDriver<true> {
146148 */
147149 async deleteMany ( keys : string [ ] ) {
148150 if ( keys . length === 0 ) return true
149- await this . #initialized
151+ await this . #initializer ( )
150152
151153 keys = keys . map ( ( key ) => this . getItemKey ( key ) )
152154 const result = await this . #adapter. deleteMany ( keys )
0 commit comments