1- import { Injectable } from '@angular/core' ;
1+ import { Injectable , OpaqueToken , Optional } from '@angular/core' ;
22
33import LocalForage from 'localforage' ;
44
@@ -79,12 +79,13 @@ import CordovaSQLiteDriver from 'localforage-cordovasqlitedriver';
7979 * The Storage engine can be configured both with specific storage engine priorities, or custom configuration
8080 * options to pass to localForage. See the localForage config docs for possible options: https://github.com/localForage/localForage#configuration
8181 *
82+ * Note: Any custom configurations will be merged with the default configuration
8283 *
8384 * ```typescript
8485 * import { Storage } from '@ionic/storage';
8586 *
8687 * export function provideStorage() {
87- * return new Storage(['sqlite', 'websql', 'indexeddb'], { name: '__mydb' });
88+ * return new Storage({ name: '__mydb' });
8889 * }
8990 *
9091 * @NgModule ({
@@ -111,26 +112,17 @@ export class Storage {
111112 * Possible driver options are: ['sqlite', 'indexeddb', 'websql', 'localstorage'] and the
112113 * default is that exact ordering.
113114 */
114- constructor ( driverOrder : [ string ] = [ 'sqlite' , 'indexeddb' , 'websql' , 'localstorage' ] , config ?: any ) {
115+ constructor ( @ Optional ( ) config ?: any ) {
115116 this . _dbPromise = new Promise ( ( resolve , reject ) => {
116117 let db : LocalForage ;
117118
118- let dbConfig = {
119- name : '_ionicstorage' ,
120- storeName : '_ionickv'
121- } ;
122-
123- // Merge any custom config options they have
124- if ( config ) {
125- for ( let k in config ) {
126- dbConfig [ k ] = config [ k ] ;
127- }
128- }
119+ const defaultConfig = getDefaultConfig ( ) ;
120+ const actualConfig = Object . assign ( defaultConfig , config || { } ) ;
129121
130122 LocalForage . defineDriver ( CordovaSQLiteDriver ) . then ( ( ) => {
131- db = LocalForage . createInstance ( dbConfig ) ;
123+ db = LocalForage . createInstance ( actualConfig ) ;
132124 } )
133- . then ( ( ) => db . setDriver ( this . _getDriverOrder ( driverOrder ) ) )
125+ . then ( ( ) => db . setDriver ( this . _getDriverOrder ( actualConfig . driverOrder ) ) )
134126 . then ( ( ) => {
135127 this . _driver = db . driver ( ) ;
136128 resolve ( db ) ;
@@ -229,3 +221,24 @@ export class Storage {
229221 return this . _dbPromise . then ( db => db . iterate ( iteratorCallback ) ) ;
230222 }
231223}
224+
225+ export function getDefaultConfig ( ) {
226+ return {
227+ name : '_ionicstorage' ,
228+ storeName : '_ionickv' ,
229+ driverOrder : [ 'sqlite' , 'indexeddb' , 'websql' , 'localstorage' ]
230+ } ;
231+ }
232+
233+ export interface StorageConfig {
234+ name ?: string ;
235+ storeName ?: string ;
236+ driverOrder ?: string [ ] ;
237+ } ;
238+
239+ export function provideStorage ( storageConfig ?: StorageConfig ) {
240+ const config = ! ! storageConfig ? storageConfig : getDefaultConfig ( ) ;
241+ return new Storage ( config ) ;
242+ }
243+
244+ export const StorageConfigToken = new OpaqueToken ( 'STORAGE_CONFIG_TOKEN' ) ;
0 commit comments