From 0ffd1d0c7a4c5252cc0b52b07e4727bb4d3ffa37 Mon Sep 17 00:00:00 2001 From: Mike Hartington Date: Mon, 31 Aug 2020 12:25:58 -0400 Subject: [PATCH] fix(storage): better detect ssr envs Change the way that ssr/node envs are detected --- package-lock.json | 14 ++++++++++---- package.json | 9 +++++---- src/index.ts | 4 ++-- src/storage.ts | 43 +++++++++++++++++++++++++------------------ 4 files changed, 42 insertions(+), 28 deletions(-) diff --git a/package-lock.json b/package-lock.json index 49b8c98..a0a74cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,9 +1,15 @@ { "name": "@ionic/storage", - "version": "2.2.0", + "version": "2.3.0", "lockfileVersion": 1, "requires": true, "dependencies": { + "@angular/common": { + "version": "9.1.12", + "resolved": "https://registry.npmjs.org/@angular/common/-/common-9.1.12.tgz", + "integrity": "sha512-XSIqkbM6VV1yixF9zuzeE5eqN1VsiXS517K2VU0XgCRSAzhVhLOeKsdYjeLf7PdSu/HgW/Tr81H+isi9A9I0YA==", + "dev": true + }, "@angular/compiler": { "version": "9.1.12", "resolved": "https://registry.npmjs.org/@angular/compiler/-/compiler-9.1.12.tgz", @@ -167,9 +173,9 @@ "dev": true }, "@types/node": { - "version": "12.12.51", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.51.tgz", - "integrity": "sha512-6ILqt8iNThALrxDv2Q4LyYFQxULQz96HKNIFd4s9QRQaiHINYeUpLqeU/2IU7YMtvipG1fQVAy//vY8/fX1Y9w==", + "version": "12.12.54", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.54.tgz", + "integrity": "sha512-ge4xZ3vSBornVYlDnk7yZ0gK6ChHf/CHB7Gl1I0Jhah8DDnEQqBzgohYG4FX4p81TNirSETOiSyn+y1r9/IR6w==", "dev": true }, "@types/normalize-package-data": { diff --git a/package.json b/package.json index 0587192..7a36a4f 100644 --- a/package.json +++ b/package.json @@ -31,10 +31,11 @@ "localforage-cordovasqlitedriver": "1.7.0" }, "devDependencies": { - "@angular/compiler": "9", - "@angular/compiler-cli": "9", - "@angular/core": "9", - "@types/node": "12", + "@angular/common": "^9.1.12", + "@angular/compiler": "^9.1.12", + "@angular/compiler-cli": "^9.1.12", + "@angular/core": "^9.1.12", + "@types/node": "^12.12.54", "canonical-path": "0.0.2", "conventional-changelog-cli": "^2.0.1", "cpr": "^2.0.0", diff --git a/src/index.ts b/src/index.ts index 631d7df..47f3c56 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,4 +1,4 @@ -import { NgModule, ModuleWithProviders } from '@angular/core'; +import { NgModule, ModuleWithProviders, PLATFORM_ID } from '@angular/core'; import { getDefaultConfig, provideStorage, @@ -19,7 +19,7 @@ export class IonicStorageModule { { provide: Storage, useFactory: provideStorage, - deps: [StorageConfigToken] + deps: [StorageConfigToken, PLATFORM_ID ] } ] }; diff --git a/src/storage.ts b/src/storage.ts index 4e5de0d..74efb11 100644 --- a/src/storage.ts +++ b/src/storage.ts @@ -1,4 +1,5 @@ -import { InjectionToken } from '@angular/core'; +import { InjectionToken, Inject, PLATFORM_ID } from '@angular/core'; +import { isPlatformServer } from '@angular/common'; import * as LocalForage from 'localforage'; @@ -109,9 +110,12 @@ export class Storage { * Possible driver options are: ['sqlite', 'indexeddb', 'websql', 'localstorage'] and the * default is that exact ordering. */ - constructor(config: StorageConfig) { + constructor( + config: StorageConfig, + @Inject(PLATFORM_ID) private platformId: Object + ) { this._dbPromise = new Promise((resolve, reject) => { - if (typeof process !== 'undefined') { + if (isPlatformServer(this.platformId)) { const noopDriver = getNoopDriver(); resolve(noopDriver); return; @@ -133,7 +137,7 @@ export class Storage { this._driver = db.driver(); resolve(db); }) - .catch(reason => reject(reason)); + .catch((reason) => reject(reason)); }); } @@ -154,8 +158,8 @@ export class Storage { } /** @hidden */ - private _getDriverOrder(driverOrder) { - return driverOrder.map(driver => { + private _getDriverOrder(driverOrder: string[]) { + return driverOrder.map((driver: string) => { switch (driver) { case 'sqlite': return CordovaSQLiteDriver._driver; @@ -175,7 +179,7 @@ export class Storage { * @returns Returns a promise with the value of the given key */ get(key: string): Promise { - return this._dbPromise.then(db => db.getItem(key)); + return this._dbPromise.then((db) => db.getItem(key)); } /** @@ -185,7 +189,7 @@ export class Storage { * @returns Returns a promise that resolves when the key and value are set */ set(key: string, value: any): Promise { - return this._dbPromise.then(db => db.setItem(key, value)); + return this._dbPromise.then((db) => db.setItem(key, value)); } /** @@ -194,7 +198,7 @@ export class Storage { * @returns Returns a promise that resolves when the value is removed */ remove(key: string): Promise { - return this._dbPromise.then(db => db.removeItem(key)); + return this._dbPromise.then((db) => db.removeItem(key)); } /** @@ -202,21 +206,21 @@ export class Storage { * @returns Returns a promise that resolves when the store is cleared */ clear(): Promise { - return this._dbPromise.then(db => db.clear()); + return this._dbPromise.then((db) => db.clear()); } /** * @returns Returns a promise that resolves with the number of keys stored. */ length(): Promise { - return this._dbPromise.then(db => db.length()); + return this._dbPromise.then((db) => db.length()); } /** * @returns Returns a promise that resolves with the keys in the store. */ keys(): Promise { - return this._dbPromise.then(db => db.keys()); + return this._dbPromise.then((db) => db.keys()); } /** @@ -227,7 +231,7 @@ export class Storage { forEach( iteratorCallback: (value: any, key: string, iterationNumber: Number) => any ): Promise { - return this._dbPromise.then(db => db.iterate(iteratorCallback)); + return this._dbPromise.then((db) => db.iterate(iteratorCallback)); } } @@ -237,7 +241,7 @@ export function getDefaultConfig() { name: '_ionicstorage', storeName: '_ionickv', dbKey: '_ionickey', - driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage'] + driverOrder: ['sqlite', 'indexeddb', 'websql', 'localstorage'], }; } @@ -258,9 +262,12 @@ export const StorageConfigToken = new InjectionToken( ); /** @hidden */ -export function provideStorage(storageConfig: StorageConfig): Storage { +export function provideStorage( + storageConfig: StorageConfig, + platformID: Object +): Storage { const config = !!storageConfig ? storageConfig : getDefaultConfig(); - return new Storage(config); + return new Storage(config, platformID); } function getNoopDriver() { @@ -273,7 +280,7 @@ function getNoopDriver() { clear: noop, length: () => 0, keys: () => [], - iterate: noop + iterate: noop, }; return driver; -} \ No newline at end of file +}