Skip to content

Commit

Permalink
feat(sifrr-storage): migrate to typescript (#261)
Browse files Browse the repository at this point in the history
* feat(sifrr-storage): migrate to typescript

* chore: add auto generated files

* test: fixes

* chore: fix cookie not found issue

* Update .gitignore
  • Loading branch information
aadityataparia committed Nov 5, 2019
1 parent 83fb4d1 commit 01d6f6c
Show file tree
Hide file tree
Showing 39 changed files with 761 additions and 650 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,8 @@ typings/
.next
dist
.DS_Store
.ts_cache


# test yarns
**/test/public/yarn.lock
3 changes: 2 additions & 1 deletion babel.config.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ module.exports = function(api) {
];

return {
presets
presets,
plugins: [['@babel/plugin-proposal-class-properties', { loose: true }]]
};
};
5 changes: 3 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,8 @@
"homepage": "https://github.com/sifrr/sifrr",
"dependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand All @@ -58,7 +59,7 @@
"ws": "^7.2.0"
},
"resolutions": {
"@sifrr/dev": "0.0.36",
"@sifrr/dev": "0.0.37",
"@sifrr/dom": "file:./packages/browser/sifrr-dom",
"@sifrr/fetch": "file:./packages/browser/sifrr-fetch",
"@sifrr/server": "file:./packages/server/sifrr-server",
Expand Down
3 changes: 2 additions & 1 deletion packages/browser/sifrr-dom/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
"dependencies": {},
"peerDependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand Down
3 changes: 2 additions & 1 deletion packages/browser/sifrr-fetch/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
"dependencies": {},
"peerDependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand Down
3 changes: 2 additions & 1 deletion packages/browser/sifrr-route/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,8 @@
},
"peerDependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand Down
3 changes: 2 additions & 1 deletion packages/browser/sifrr-serviceworker/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,8 @@
"dependencies": {},
"peerDependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand Down
3 changes: 2 additions & 1 deletion packages/browser/sifrr-storage/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,8 @@
"dependencies": {},
"peerDependencies": {},
"devDependencies": {
"@sifrr/dev": "^0.0.36",
"@babel/plugin-proposal-class-properties": "^7.5.5",
"@sifrr/dev": "^0.0.37",
"axios": "^0.19.0",
"cache-manager": "^2.10.0",
"graphql-sequelize": "^9.3.6",
Expand Down
52 changes: 0 additions & 52 deletions packages/browser/sifrr-storage/src/sifrr.storage.js

This file was deleted.

59 changes: 59 additions & 0 deletions packages/browser/sifrr-storage/src/sifrr.storage.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,59 @@
import IndexedDB from './storages/indexeddb';
import WebSQL from './storages/websql';
import LocalStorage from './storages/localstorage';
import Cookies from './storages/cookies';
import JsonStorage from './storages/jsonstorage';
import { StorageOptions } from './storages/types';
import Storage from './storages/storage';

const storages: { [x: string]: typeof Storage } = {
[IndexedDB.type]: IndexedDB,
[WebSQL.type]: WebSQL,
[LocalStorage.type]: LocalStorage,
[Cookies.type]: Cookies,
[JsonStorage.type]: JsonStorage
};

type MainOptions = StorageOptions & {
priority?: string[];
};

function getSupportedStoreFromPriority(
priority: string[] = [],
options: StorageOptions = {}
): Storage {
priority = priority.concat([
IndexedDB.type,
WebSQL.type,
LocalStorage.type,
Cookies.type,
JsonStorage.type
]);
for (let i = 0; i < priority.length; i++) {
let store = storages[priority[i]];
if (store) {
const storage = new store(options);
if (storage.isSupported()) return storage;
}
}
throw Error(
'No compatible storage found. Available types: ' + Object.keys(storages).join(', ') + '.'
);
}

function getStorage(options: string | MainOptions): Storage {
const priority = typeof options === 'string' ? [options] : (options || {}).priority;
const stOptions = typeof options === 'string' ? {} : options;

return getSupportedStoreFromPriority(priority, stOptions);
}

export {
IndexedDB,
WebSQL,
LocalStorage,
Cookies,
JsonStorage,
getStorage,
storages as availableStores
};
Empty file.
56 changes: 0 additions & 56 deletions packages/browser/sifrr-storage/src/storages/cookies.js

This file was deleted.

60 changes: 60 additions & 0 deletions packages/browser/sifrr-storage/src/storages/cookies.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
import Storage from './storage';
import { StorageOptions } from './types';

const date = new Date(0).toUTCString();
const equal = '%3D',
equalRegex = new RegExp(equal, 'g');

class Cookies extends Storage {
constructor(options: StorageOptions) {
super(options);
return (<typeof Cookies>this.constructor)._matchingInstance<Cookies>(this);
}

protected upsert(data: object) {
for (let key in data) {
this.setStore(
`${this.tableName}/${key}=${(<typeof Storage>this.constructor)
.stringify(data[key])
.replace(/=/g, equal)}; path=/`
);
}
return true;
}

protected delete(keys: string[]) {
keys.forEach((k: any) => this.setStore(`${this.tableName}/${k}=; expires=${date}; path=/`));
return true;
}

protected deleteAll() {
return this.keys().then(this.delete.bind(this));
}

protected getStore() {
let result = document.cookie,
ans = {};
result.split('; ').forEach(value => {
let [k, v] = value.split('=');
if (k.indexOf(this.tableName) === 0)
ans[k.slice(this.tableName.length + 1)] = (<typeof Storage>this.constructor).parse(
v.replace(equalRegex, '=')
);
});
return ans;
}

protected setStore(v: string) {
document.cookie = v;
}

hasStore() {
return typeof document.cookie !== 'undefined';
}

static get type() {
return 'cookies';
}
}

export default Cookies;
70 changes: 0 additions & 70 deletions packages/browser/sifrr-storage/src/storages/indexeddb.js

This file was deleted.

0 comments on commit 01d6f6c

Please sign in to comment.