From 6062a2c9d8d90abf67dd93c201d63d63bbc55e13 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Mon, 14 Sep 2015 03:06:47 +0200 Subject: [PATCH 1/5] updated localforage to use es6 promises definitions + enabled es6 imports + fixed up generics also updated angular-localForage due to a breaking change in the interface --- angular-localForage/angular-localForage.d.ts | 2 +- localForage/localForage-tests.ts | 39 +++++++++----------- localForage/localForage.d.ts | 33 +++++++++-------- 3 files changed, 37 insertions(+), 37 deletions(-) diff --git a/angular-localForage/angular-localForage.d.ts b/angular-localForage/angular-localForage.d.ts index 6186d79d34..a43a449455 100644 --- a/angular-localForage/angular-localForage.d.ts +++ b/angular-localForage/angular-localForage.d.ts @@ -23,7 +23,7 @@ declare module angular.localForage { interface ILocalForageService { setDriver(driver:string):angular.IPromise; - driver():lf.ILocalForage; + driver():lf.ILocalForage; setItem(key:string, value:any):angular.IPromise; setItem(keys:Array, values:Array):angular.IPromise; diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts index 15638c1cb2..a3cc0eb384 100644 --- a/localForage/localForage-tests.ts +++ b/localForage/localForage-tests.ts @@ -1,13 +1,6 @@ /// -declare var localForage: lf.ILocalForage; -declare var callback: lf.ICallback; -declare var iterateCallback: lf.IIterateCallback; -declare var errorCallback: lf.IErrorCallback; -declare var keyCallback: lf.IKeyCallback; -declare var keysCallback: lf.IKeysCallback; -declare var numberCallback: lf.INumberCallback; -declare var promise: lf.IPromise; +import * as localForage from "localforage"; () => { localForage.clear((err: any) => { @@ -40,9 +33,12 @@ declare var promise: lf.IPromise; var newStr: string = str }); - localForage.getItem("key").then((err: any, str: string) => { - var newError: any = err; - var newStr: string = str + localForage.getItem("key").then((value) => { + var newStr: string = value + }); + + localForage.getItem("keyNumber").then((value) => { + var newValue: number = value }); localForage.setItem("key", "value",(err: any, str: string) => { @@ -50,19 +46,20 @@ declare var promise: lf.IPromise; var newStr: string = str }); - localForage.setItem("key", "value").then((err: any, str: string) => { - var newError: any = err; - var newStr: string = str; + localForage.setItem("key", "value").then((value) => { + var v: string = value; + }); + + localForage.setItem("keyNumber", 1337).then((value) => { + var v: number = value; }); localForage.removeItem("key",(err: any) => { var newError: any = err; }); - - localForage.removeItem("key").then((err: any, str: string) => { - var newError: any = err; - var newStr: string = str - }); - - promise.then(callback); + + localForage.removeItem("key") + .then( () => { + + }); } diff --git a/localForage/localForage.d.ts b/localForage/localForage.d.ts index b5c40dd616..9800cec2f3 100644 --- a/localForage/localForage.d.ts +++ b/localForage/localForage.d.ts @@ -3,20 +3,22 @@ // Definitions by: yuichi david pichsenmeister // Definitions: https://github.com/borisyankov/DefinitelyTyped +/// + declare module lf { - interface ILocalForage { + interface ILocalForage { /** * Removes every key from the database, returning it to a blank slate. */ - clear(callback: IErrorCallback): void + clear(callback: IErrorCallback): void; /** * Iterate over all value/key pairs in datastore. */ - iterate(iterateCallback: IIterateCallback): void + iterate(iterateCallback: IIterateCallback): void; /** * Get the name of a key based on its ID. */ - key(keyIndex: number, callback: IKeyCallback): void + key(keyIndex: number, callback: IKeyCallback): void; /** * Get the list of all keys in the datastore. */ @@ -24,23 +26,23 @@ declare module lf { /** * Gets the number of keys in the offline store (i.e. its “length”). */ - length(callback: INumberCallback): void + length(callback: INumberCallback): void; /** * Gets an item from the storage library and supplies the result to a callback. * If the key does not exist, getItem() will return null. */ - getItem(key: string, callback: ICallback): void - getItem(key: string): IPromise + getItem(key: string, callback: ICallback): void; + getItem(key: string): Promise; /** * Saves data to an offline store. */ - setItem(key: string, value: T, callback: ICallback): void - setItem(key: string, value: T): IPromise + setItem(key: string, value: T, callback: ICallback): void; + setItem(key: string, value: T): Promise; /** * Removes the value of a key from the offline store. */ - removeItem(key: string, callback: IErrorCallback): void - removeItem(key: string): IPromise + removeItem(key: string, callback: IErrorCallback): void; + removeItem(key: string): Promise; } interface ICallback { @@ -65,9 +67,10 @@ declare module lf { interface INumberCallback { (err: any, numberOfKeys: number): void - } + } +} - interface IPromise { - then(callback: ICallback): void - } +declare module 'localforage' { + var tmp: lf.ILocalForage; + export = tmp; } \ No newline at end of file From efa4f9d53222369df7eb2827dd6d63527bea05cd Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Tue, 15 Sep 2015 00:42:46 +0200 Subject: [PATCH 2/5] included more definitions --- localForage/localForage-tests.ts | 22 ++++++++++++++++------ localForage/localForage.d.ts | 31 +++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 10 deletions(-) diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts index a3cc0eb384..ae1f034192 100644 --- a/localForage/localForage-tests.ts +++ b/localForage/localForage-tests.ts @@ -25,7 +25,7 @@ import * as localForage from "localforage"; localForage.keys((err: any, keys: Array) => { var newError: any = err; - var newArray: Array = keys; + var newArray: Array = keys; }); localForage.getItem("key",(err: any, str: string) => { @@ -35,7 +35,7 @@ import * as localForage from "localforage"; localForage.getItem("key").then((value) => { var newStr: string = value - }); + }); localForage.getItem("keyNumber").then((value) => { var newValue: number = value @@ -44,8 +44,8 @@ import * as localForage from "localforage"; localForage.setItem("key", "value",(err: any, str: string) => { var newError: any = err; var newStr: string = str - }); - + }); + localForage.setItem("key", "value").then((value) => { var v: string = value; }); @@ -54,12 +54,22 @@ import * as localForage from "localforage"; var v: number = value; }); - localForage.removeItem("key",(err: any) => { - var newError: any = err; + localForage.removeItem("key",(err: any) => { + var newError: any = err; }); localForage.removeItem("key") .then( () => { }); + + var config = localForage.default.config({ + name: "testyo", + driver: localForage.default.LOCALSTORAGE + }); + + var store = localForage.default.createInstance({ + name: "da instance", + driver: localForage.default.LOCALSTORAGE + }); } diff --git a/localForage/localForage.d.ts b/localForage/localForage.d.ts index 9800cec2f3..cd1ee1d33a 100644 --- a/localForage/localForage.d.ts +++ b/localForage/localForage.d.ts @@ -6,7 +6,9 @@ /// declare module lf { + interface ILocalForage { + default: ILocalForageStatic; /** * Removes every key from the database, returning it to a blank slate. */ @@ -45,6 +47,27 @@ declare module lf { removeItem(key: string): Promise; } + interface ILocalForageStatic { + INDEXEDDB: string; + LOCALSTORAGE: string; + WEBSQL: string; + + config(options?: ILocalForageConfig): boolean; + createInstance(options?: ILocalForageConfig): ILocalForage; + defineDriver(driverObject?: any): void; + setDriver(driver: string): void; + supports(driverName: string): boolean; + } + + interface ILocalForageConfig { + description?: string; + driver?: string; + name?: string; + size?: number; + storeName?: string; + version?: number; + } + interface ICallback { (err: any, value: T): void } @@ -67,10 +90,10 @@ declare module lf { interface INumberCallback { (err: any, numberOfKeys: number): void - } + } } -declare module 'localforage' { - var tmp: lf.ILocalForage; - export = tmp; +declare module "localforage" { + var tmp: lf.ILocalForage; + export = tmp; } \ No newline at end of file From 1f88c485c472c7addcf5d24f69b19a2c0ae6a54a Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Tue, 15 Sep 2015 23:23:06 +0200 Subject: [PATCH 3/5] improved localforage to use default exports (the way it usually should be imported) --- localForage/localForage-tests.ts | 10 +++++----- localForage/localForage.d.ts | 16 ++++++++++++---- 2 files changed, 17 insertions(+), 9 deletions(-) diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts index ae1f034192..1ba6611d3e 100644 --- a/localForage/localForage-tests.ts +++ b/localForage/localForage-tests.ts @@ -1,6 +1,6 @@ /// -import * as localForage from "localforage"; +import {default as localForage} from "localforage"; () => { localForage.clear((err: any) => { @@ -63,13 +63,13 @@ import * as localForage from "localforage"; }); - var config = localForage.default.config({ + var config = localForage.config({ name: "testyo", - driver: localForage.default.LOCALSTORAGE + driver: localForage.LOCALSTORAGE }); - var store = localForage.default.createInstance({ + var store = localForage.createInstance({ name: "da instance", - driver: localForage.default.LOCALSTORAGE + driver: localForage.LOCALSTORAGE }); } diff --git a/localForage/localForage.d.ts b/localForage/localForage.d.ts index cd1ee1d33a..9adb9ca1d8 100644 --- a/localForage/localForage.d.ts +++ b/localForage/localForage.d.ts @@ -7,8 +7,7 @@ declare module lf { - interface ILocalForage { - default: ILocalForageStatic; + interface ILocalForage extends ILocalForageStatic { /** * Removes every key from the database, returning it to a blank slate. */ @@ -52,9 +51,18 @@ declare module lf { LOCALSTORAGE: string; WEBSQL: string; + /** + * Set and persist localForage options. This must be called before any other calls to localForage are made, but can be called after localForage is loaded. + * If you set any config values with this method they will persist after driver changes, so you can call config() then setDriver() + * @param {ILocalForageConfig} options? + */ config(options?: ILocalForageConfig): boolean; createInstance(options?: ILocalForageConfig): ILocalForage; defineDriver(driverObject?: any): void; + /** + * Force usage of a particular driver or drivers, if available. + * @param {string} driver + */ setDriver(driver: string): void; supports(driverName: string): boolean; } @@ -94,6 +102,6 @@ declare module lf { } declare module "localforage" { - var tmp: lf.ILocalForage; - export = tmp; + var localforage: lf.ILocalForage; + export default localforage; } \ No newline at end of file From f0fee739c30aafa4a8cdfdd9ddf982d4ec72ba35 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Thu, 17 Sep 2015 00:23:45 +0200 Subject: [PATCH 4/5] merged conflicts taking theirs --- localForage/localForage-tests.ts | 46 +++----------------------------- 1 file changed, 4 insertions(+), 42 deletions(-) diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts index ae6d49ae84..bb824b7312 100644 --- a/localForage/localForage-tests.ts +++ b/localForage/localForage-tests.ts @@ -1,10 +1,6 @@ /// -<<<<<<< HEAD -import {default as localForage} from "localforage"; -======= declare var localForage: LocalForage; ->>>>>>> 5f480287834a2615274eea31574b713e64decf17 () => { localForage.clear((err: any) => { @@ -29,7 +25,7 @@ declare var localForage: LocalForage; localForage.keys((err: any, keys: Array) => { var newError: any = err; - var newArray: Array = keys; + var newArray: Array = keys; }); localForage.getItem("key",(err: any, str: string) => { @@ -37,57 +33,23 @@ declare var localForage: LocalForage; var newStr: string = str }); -<<<<<<< HEAD - localForage.getItem("key").then((value) => { - var newStr: string = value - }); - - localForage.getItem("keyNumber").then((value) => { - var newValue: number = value -======= localForage.getItem("key").then((str: string) => { var newStr: string = str; ->>>>>>> 5f480287834a2615274eea31574b713e64decf17 }); localForage.setItem("key", "value",(err: any, str: string) => { var newError: any = err; var newStr: string = str - }); - - localForage.setItem("key", "value").then((value) => { - var v: string = value; }); -<<<<<<< HEAD - localForage.setItem("keyNumber", 1337).then((value) => { - var v: number = value; -======= localForage.setItem("key", "value").then((str: string) => { var newStr: string = str; ->>>>>>> 5f480287834a2615274eea31574b713e64decf17 }); - localForage.removeItem("key",(err: any) => { - var newError: any = err; + localForage.removeItem("key",(err: any) => { + var newError: any = err; }); - - localForage.removeItem("key") - .then( () => { - - }); -<<<<<<< HEAD - var config = localForage.config({ - name: "testyo", - driver: localForage.LOCALSTORAGE - }); - - var store = localForage.createInstance({ - name: "da instance", - driver: localForage.LOCALSTORAGE -======= localForage.removeItem("key").then(() => { ->>>>>>> 5f480287834a2615274eea31574b713e64decf17 }); -} +} \ No newline at end of file From c192586e9e3c5180e271dbd21e7295aaf1dcdbb6 Mon Sep 17 00:00:00 2001 From: Stephen Lautier Date: Thu, 17 Sep 2015 00:43:21 +0200 Subject: [PATCH 5/5] changes: - added default export for localforage module (for style es6 imports) - added createInstance method - some minor doc - changed driver to accept also a string (to use their property e.g. localforage.LOCALSTORAGE - added some minor tests --- localForage/localForage-tests.ts | 10 ++++++++++ localForage/localForage.d.ts | 19 +++++++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/localForage/localForage-tests.ts b/localForage/localForage-tests.ts index bb824b7312..6f162e8c4b 100644 --- a/localForage/localForage-tests.ts +++ b/localForage/localForage-tests.ts @@ -52,4 +52,14 @@ declare var localForage: LocalForage; localForage.removeItem("key").then(() => { }); + + var config = localForage.config({ + name: "testyo", + driver: localForage.LOCALSTORAGE + }); + + var store = localForage.createInstance({ + name: "da instance", + driver: localForage.LOCALSTORAGE + }); } \ No newline at end of file diff --git a/localForage/localForage.d.ts b/localForage/localForage.d.ts index d169d01e3f..cd12bb4f32 100644 --- a/localForage/localForage.d.ts +++ b/localForage/localForage.d.ts @@ -6,7 +6,7 @@ /// interface LocalForageOptions { - driver?: LocalForageDriver | LocalForageDriver[]; + driver?: string | LocalForageDriver | LocalForageDriver[]; name?: string; @@ -46,9 +46,19 @@ interface LocalForage { WEBSQL: string; INDEXEDDB: string; - config(options: LocalForageOptions): void; + /** + * Set and persist localForage options. This must be called before any other calls to localForage are made, but can be called after localForage is loaded. + * If you set any config values with this method they will persist after driver changes, so you can call config() then setDriver() + * @param {ILocalForageConfig} options? + */ + config(options: LocalForageOptions): boolean; + createInstance(options: LocalForageOptions): LocalForage; driver(): LocalForageDriver; + /** + * Force usage of a particular driver or drivers, if available. + * @param {string} driver + */ setDriver(driver: string | string[]): Promise; setDriver(driver: string | string[], callback: () => void, errorCallback: (error: any) => void): void; defineDriver(driver: LocalForageDriver): Promise; @@ -79,3 +89,8 @@ interface LocalForage { iterate(iteratee: (value: any, key: string, iterationNumber: number) => any, callback: (err: any, result: any) => void): void; } + +declare module "localforage" { + var localforage: LocalForage; + export default localforage; +} \ No newline at end of file