From 54d0070adec8badb2b75f9ced47af2dd15b3d6f0 Mon Sep 17 00:00:00 2001 From: Artur Arseniev Date: Fri, 6 Jan 2023 16:54:33 +0400 Subject: [PATCH] Migrate LocalStorage to TS --- src/storage_manager/config/config.ts | 15 +------- src/storage_manager/model/IStorage.ts | 9 +++++ src/storage_manager/model/LocalStorage.js | 28 --------------- src/storage_manager/model/LocalStorage.ts | 43 +++++++++++++++++++++++ 4 files changed, 53 insertions(+), 42 deletions(-) create mode 100644 src/storage_manager/model/IStorage.ts delete mode 100644 src/storage_manager/model/LocalStorage.js create mode 100644 src/storage_manager/model/LocalStorage.ts diff --git a/src/storage_manager/config/config.ts b/src/storage_manager/config/config.ts index f073f90c7..a3f636b39 100644 --- a/src/storage_manager/config/config.ts +++ b/src/storage_manager/config/config.ts @@ -1,21 +1,8 @@ import Editor from '../../editor'; +import { LocalStorageConfig } from '../model/LocalStorage'; type AnyObject = Record; -export interface LocalStorageConfig { - /** - * Local key identifier of the project. - * @default 'gjsProject' - */ - key?: string; - - /** - * If enabled, checks if browser supports LocalStorage. - * @default true - */ - checkLocal?: boolean; -} - export interface RemoteStorageConfig { /** * Custom headers. diff --git a/src/storage_manager/model/IStorage.ts b/src/storage_manager/model/IStorage.ts new file mode 100644 index 000000000..02d37970c --- /dev/null +++ b/src/storage_manager/model/IStorage.ts @@ -0,0 +1,9 @@ +export interface StorageOptions {} + +export interface ProjectData {} + +export default interface IStorage { + load: (options?: T) => Promise; + store: (data: ProjectData, options?: T) => Promise; + [key: string]: any; +} diff --git a/src/storage_manager/model/LocalStorage.js b/src/storage_manager/model/LocalStorage.js deleted file mode 100644 index 4f5420747..000000000 --- a/src/storage_manager/model/LocalStorage.js +++ /dev/null @@ -1,28 +0,0 @@ -import { hasWin } from '../../utils/mixins'; - -export default class LocalStorage { - async store(data, opts = {}) { - if (this.hasLocal(opts, true)) { - localStorage.setItem(opts.key, JSON.stringify(data)); - } - } - - async load(opts = {}) { - let result = {}; - - if (this.hasLocal(opts, true)) { - result = JSON.parse(localStorage.getItem(opts.key) || '{}'); - } - - return result; - } - - hasLocal(opts = {}, thr) { - if (opts.checkLocal && (!hasWin() || !localStorage)) { - if (thr) throw new Error('localStorage not available'); - return false; - } - - return true; - } -} diff --git a/src/storage_manager/model/LocalStorage.ts b/src/storage_manager/model/LocalStorage.ts new file mode 100644 index 000000000..aec8a9897 --- /dev/null +++ b/src/storage_manager/model/LocalStorage.ts @@ -0,0 +1,43 @@ +import { hasWin } from '../../utils/mixins'; +import IStorage, { ProjectData } from './IStorage'; + +export interface LocalStorageConfig { + /** + * Local key identifier of the project. + * @default 'gjsProject' + */ + key?: string; + + /** + * If enabled, checks if browser supports LocalStorage. + * @default true + */ + checkLocal?: boolean; +} + +export default class LocalStorage implements IStorage { + async store(data: ProjectData, opts: LocalStorageConfig = {}) { + if (this.hasLocal(opts, true)) { + localStorage.setItem(opts.key!, JSON.stringify(data)); + } + } + + async load(opts: LocalStorageConfig = {}) { + let result = {}; + + if (this.hasLocal(opts, true)) { + result = JSON.parse(localStorage.getItem(opts.key!) || '{}'); + } + + return result; + } + + hasLocal(opts: LocalStorageConfig = {}, thr?: boolean) { + if (opts.checkLocal && (!hasWin() || !localStorage)) { + if (thr) throw new Error('localStorage not available'); + return false; + } + + return true; + } +}