diff --git a/angular-localForage/angular-localForage-tests.ts b/angular-localForage/angular-localForage-tests.ts
new file mode 100644
index 000000000..8b31143c2
--- /dev/null
+++ b/angular-localForage/angular-localForage-tests.ts
@@ -0,0 +1,126 @@
+///
+///
+
+var app = angular.module('angular-localForage-tests', ['LocalForageModule']);
+app.config(function (localStorageServiceProvider:angular.localForage.ILocalForageProvider) {
+
+ //TODO
+});
+
+var $rootScope:angular.IRootScopeService,
+ $localForage:angular.localForage.ILocalForageService,
+ instanceVersion = 0;
+
+// create a fresh instance
+$localForage.clear().then(function () {
+ $localForage = $localForage.createInstance({
+ name: ++instanceVersion
+ });
+});
+
+$localForage.getItem('this key is unknown').then(function (value) {
+
+});
+
+
+$localForage.setItem('myName', 'Olivier Combe').then(function (data) {
+
+ $localForage.getItem('myName').then(function (data) {
+ });
+});
+
+var values = ['Olivier Combe', 'AngularJs', 'Open Source'];
+
+$localForage.setItem(['myName', 'myPassion', 'myHobbie'], values).then(function (data) {
+
+ $localForage.getItem(['myHobbie', 'myName']).then(function (data) {
+ });
+
+});
+
+$localForage.removeItem('myName').then(function () {
+
+ $localForage.getItem('myName').then(function (data) {
+ });
+
+});
+
+$localForage.removeItem(['myName', 'myPassion']).then(function () {
+
+ $localForage.getItem(['myName', 'myPassion', 'myHobbie']).then(function (data) {
+ });
+
+});
+
+$localForage.pull('myName').then(function (data) {
+
+ $localForage.getItem('myName').then(function (data) {
+ });
+
+});
+$localForage.pull(['myName', 'myPassion']).then(function (data) {
+
+ $localForage.getItem(['myName', 'myPassion', 'myHobbie']).then(function (data) {
+ });
+
+});
+
+
+$localForage.setItem('myName', 'Olivier Combe').then(function (d) {
+
+ $localForage.getItem('myName').then(function (data) {
+ });
+
+});
+
+
+$localForage.setDriver('localStorageWrapper').then(function () {
+ $localForage.setItem('myName', 'Olivier Combe').then(function (d) {
+ $localForage.getItem('myName').then(function (data) {
+ });
+ });
+});
+
+$localForage.setItem('myArray', [{
+ $$hashKey: '00A',
+ name: 'Olivier Combe'
+}]).then(function (d) {
+
+ $localForage.getItem('myArray').then(function (data) {
+ });
+
+});
+
+$localForage.setDriver('localStorageWrapper').then(function () {
+ $localForage.setItem('myArray', [{
+ $$hashKey: '00A',
+ name: 'Olivier Combe'
+ }]).then(function (d) {
+
+ $localForage.getItem('myArray').then(function (data) {
+ });
+
+ });
+});
+
+var aFileParts = ["hey!<\/b><\/a>"];
+var oMyBlob = new Blob(aFileParts, {"type": "text\/xml"}); // the blob
+
+$localForage.setItem('myBlob', oMyBlob).then(function (data) {
+});
+
+// $localForage.setItem(['myName', 'myPassion', 'myHobbie'], 'value');
+
+// $localForage.setItem();
+
+
+$localForage.iterate(function (value, key) {
+}).then(function (data) {
+});
+
+$localForage.iterate(function (value, key) {
+ if (key == 'myPassion') {
+ return value;
+ }
+}).then(function (data) {
+});
diff --git a/angular-localForage/angular-localForage.d.ts b/angular-localForage/angular-localForage.d.ts
new file mode 100644
index 000000000..ee2aeeb6d
--- /dev/null
+++ b/angular-localForage/angular-localForage.d.ts
@@ -0,0 +1,63 @@
+// Type definitions for angular-localForage 1.2.2
+// Project: https://github.com/ocombe/angular-localForage
+// Definitions by: Stefan Steinhart
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+///
+
+declare module angular.localForage {
+
+ interface LocalForageConfig {
+ driver?:string;
+ name?:string | number;
+ version?:number;
+ storeName?:string;
+ description?:string;
+ }
+
+ interface ILocalForageProvider {
+ config(config:LocalForageConfig):void;
+ setNotify(onItemSet:boolean, onItemRemove:boolean):void;
+ }
+
+ interface ILocalForageService {
+ setDriver(driver:string):angular.IPromise;
+ driver():lf.ILocalForage;
+
+ setItem(key:string, value:any):angular.IPromise;
+ setItem(keys:Array, values:Array):angular.IPromise;
+
+ getItem(key:string):angular.IPromise;
+ getItem(keys:Array):angular.IPromise>;
+
+ removeItem(key:string | Array):angular.IPromise;
+
+ pull(key:string):angular.IPromise;
+ pull(keys:Array):angular.IPromise>;
+
+ clear():angular.IPromise;
+
+ key(n:number):angular.IPromise;
+
+ keys():angular.IPromise;
+
+ length():angular.IPromise;
+
+ iterate(iteratorCallback:(value:string | number, key:string)=>T):angular.IPromise;
+
+ bind($scope:ng.IScope, key:string):void;
+
+ bind($scope:ng.IScope, config:{
+ key:string;
+ defaultValue:any;
+ scopeKey:string;
+ name:string;
+ }):void;
+
+ unbind($scope:ng.IScope, key:string, scopeKey?:string):void;
+
+ createInstance(config:LocalForageConfig):ILocalForageService;
+ instance(name:string):ILocalForageService;
+ }
+}