global-store 1.0.0-beta.21 → 1.0.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +1 -1
- package/dist/global-store.js +2 -0
- package/dist/global-store.js.map +1 -0
- package/index.js.flow +2 -2
- package/lib/compareVersion.d.ts +2 -1
- package/lib/compareVersion.d.ts.map +1 -0
- package/lib/compareVersion.js +5 -10
- package/lib/compareVersion.js.map +1 -1
- package/lib/createAsyncStore.d.ts +3 -2
- package/lib/createAsyncStore.d.ts.map +1 -0
- package/lib/createAsyncStore.js +16 -60
- package/lib/createAsyncStore.js.map +1 -1
- package/lib/createStore.d.ts +3 -2
- package/lib/createStore.d.ts.map +1 -0
- package/lib/createStore.js +14 -13
- package/lib/createStore.js.map +1 -1
- package/lib/index.d.ts +5 -4
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +4 -22
- package/lib/index.js.map +1 -1
- package/lib/shouldInvokeInitializer.d.ts +2 -1
- package/lib/shouldInvokeInitializer.d.ts.map +1 -0
- package/lib/shouldInvokeInitializer.js +8 -11
- package/lib/shouldInvokeInitializer.js.map +1 -1
- package/lib/toVersionArray.d.ts +3 -2
- package/lib/toVersionArray.d.ts.map +1 -0
- package/lib/toVersionArray.js +2 -7
- package/lib/toVersionArray.js.map +1 -1
- package/lib/types.d.ts +8 -3
- package/lib/types.d.ts.map +1 -0
- package/lib/types.js +1 -2
- package/lib/typesInternal.d.ts +5 -4
- package/lib/typesInternal.d.ts.map +1 -0
- package/lib/typesInternal.js +1 -2
- package/lib/util.d.ts +4 -3
- package/lib/util.d.ts.map +1 -0
- package/lib/util.js +24 -40
- package/lib/util.js.map +1 -1
- package/package.json +44 -65
- package/{README.md → readme.md} +18 -20
- package/dist/compareVersion.d.ts +0 -7
- package/dist/createAsyncStore.d.ts +0 -12
- package/dist/createStore.d.ts +0 -28
- package/dist/global-store.es.js +0 -127
- package/dist/global-store.es.js.map +0 -1
- package/dist/global-store.es5.js +0 -2
- package/dist/global-store.es5.js.map +0 -1
- package/dist/global-store.systemjs.js +0 -141
- package/dist/global-store.systemjs.js.map +0 -1
- package/dist/index.d.ts +0 -4
- package/dist/shouldInvokeInitializer.d.ts +0 -2
- package/dist/toVersionArray.d.ts +0 -3
- package/dist/types.d.ts +0 -9
- package/dist/util.d.ts +0 -14
- package/libm/compareVersion.d.ts +0 -7
- package/libm/compareVersion.js +0 -13
- package/libm/compareVersion.js.map +0 -1
- package/libm/createAsyncStore.d.ts +0 -12
- package/libm/createAsyncStore.js +0 -27
- package/libm/createAsyncStore.js.map +0 -1
- package/libm/createStore.d.ts +0 -28
- package/libm/createStore.js +0 -16
- package/libm/createStore.js.map +0 -1
- package/libm/index.d.ts +0 -4
- package/libm/index.js +0 -5
- package/libm/index.js.map +0 -1
- package/libm/shouldInvokeInitializer.d.ts +0 -2
- package/libm/shouldInvokeInitializer.js +0 -14
- package/libm/shouldInvokeInitializer.js.map +0 -1
- package/libm/toVersionArray.d.ts +0 -3
- package/libm/toVersionArray.js +0 -5
- package/libm/toVersionArray.js.map +0 -1
- package/libm/types.d.ts +0 -9
- package/libm/types.js +0 -2
- package/libm/types.js.map +0 -1
- package/libm/typesInternal.d.ts +0 -16
- package/libm/typesInternal.js +0 -2
- package/libm/typesInternal.js.map +0 -1
- package/libm/util.d.ts +0 -14
- package/libm/util.js +0 -57
- package/libm/util.js.map +0 -1
- package/ts/compareVersion.spec.ts +0 -9
- package/ts/compareVersion.ts +0 -14
- package/ts/createAsyncStore.spec.ts +0 -142
- package/ts/createAsyncStore.ts +0 -31
- package/ts/createStore.spec.ts +0 -217
- package/ts/createStore.ts +0 -43
- package/ts/index.spec.ts +0 -7
- package/ts/index.ts +0 -5
- package/ts/shouldInvokeInitializer.spec.ts +0 -41
- package/ts/shouldInvokeInitializer.ts +0 -17
- package/ts/toVersionArray.ts +0 -8
- package/ts/types.ts +0 -12
- package/ts/typesInternal.ts +0 -21
- package/ts/util.ts +0 -69
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"global-store.systemjs.js","sources":["../ts/toVersionArray.ts","../ts/compareVersion.ts","../ts/shouldInvokeInitializer.ts","../ts/util.ts","../ts/createStore.ts","../ts/createAsyncStore.ts"],"sourcesContent":["import { StoreVersion } from './types'\n\nexport type ParsedVersion = [number, number, number]\n\nexport function toVersionArray(v: StoreVersion): ParsedVersion {\n return typeof v === 'number' ? [0, 0, v] :\n v.split('.').map(v => parseInt(v, 10)) as ParsedVersion\n}\n","import { toVersionArray } from './toVersionArray'\nimport { StoreVersion } from './types'\n\n/**\n * Compare version.\n * Positive when processed > current\n * Negative when processed < current\n */\nexport function compareVersion(processed: StoreVersion, current: StoreVersion) {\n const v1 = toVersionArray(processed)\n const v2 = toVersionArray(current)\n return v1[0] !== v2[0] ? v1[0] - v2[0] :\n v1[1] !== v2[1] ? v1[1] - v2[1] : v1[2] - v2[2]\n}\n","import { ParsedVersion, toVersionArray } from './toVersionArray'\nimport { StoreVersion } from './types'\n\nexport function shouldInvokeInitializer(versions: StoreVersion[], version: StoreVersion) {\n const vs = versions.map(toVersionArray)\n const v = toVersionArray(version)\n return noMatchMajor(vs, v) || hasNewVersion(vs, v)\n}\n\nfunction noMatchMajor(versions: ParsedVersion[], version: ParsedVersion) {\n return !versions.some(v => v[0] === version[0])\n}\n\nfunction hasNewVersion(versions: ParsedVersion[], version: ParsedVersion) {\n return versions.filter(v => v[0] === version[0])\n .some(v => version[1] > v[1] || (version[1] === v[1] && version[2] > v[2]))\n}\n","import { compareVersion } from './compareVersion'\nimport { createStore } from './createStore'\nimport { shouldInvokeInitializer } from './shouldInvokeInitializer'\nimport { StoreInitializer, StoreValue, StoreVersion } from './types'\nimport { StoreCreator, StoreId, Stores } from './typesInternal'\n\nexport function getStoreValue<T extends StoreValue>(stores: Stores, id: StoreId): T {\n return getStore(stores, id).value as T\n}\n\nexport function initStoreValue<T extends StoreValue>(stores: Stores, id: StoreId, version: StoreVersion, initializer: StoreInitializer<T>) {\n const store = getStore(stores, id)\n if (shouldInvokeInitializer(store.versions, version)) {\n store.initializers.push(initializer as StoreInitializer<StoreValue>)\n store.value = initializer(store.value as T, store.versions)\n store.versions.push(version)\n }\n}\n\nexport function resetStoreValue(stores: Stores, id: StoreId) {\n const store = getStore(stores, id)\n const versions = store.versions\n store.versions = []\n store.value = store.initializers.reduce<StoreValue>((value, initializer, i) => {\n value = initializer(value, store.versions)\n store.versions.push(versions[i])\n return value\n }, {})\n}\n\nexport function getStore(stores: Stores, id: StoreId) {\n const moduleStore = stores[id.moduleName] = stores[id.moduleName] || Object.create(null)\n const key = id.key ?? 'default'\n return moduleStore[key] = moduleStore[key] || { versions: [], value: {}, initializers: [] }\n}\n\nexport function resolveCreators(moduleName: string, key: string, storeCreators: Array<StoreCreator<any>>, cs: typeof createStore) {\n sortByVersion(storeCreators).forEach(({ version, resolve, initializer }) => resolve(cs({ moduleName, key, version, initializer })))\n}\n\nexport function sortByVersion<S>(storeCreators: Array<StoreCreator<S>>) {\n return storeCreators.sort((a, b) => compareVersion(a.version, b.version))\n}\n\nexport function freezeStoreValue(stores: Stores, id: StoreId, value?: StoreValue) {\n const store = getStore(stores, id)\n store.value = value ?\n Object.isFrozen(value) ? value : Object.freeze(value) :\n freezeValue(store.value)\n}\n\nfunction freezeValue(storeValue: StoreValue) {\n if (Object.isFrozen(storeValue)) throw TypeError('Frozen value cannot be freezed again')\n\n Object.keys(storeValue).forEach(k => freezeIfIsArray(storeValue, k))\n // istanbul ignore next\n if (Object.getOwnPropertySymbols) {\n Object.getOwnPropertySymbols(storeValue).forEach(k => freezeIfIsArray(storeValue, k))\n }\n\n return Object.freeze(storeValue)\n}\n\nfunction freezeIfIsArray(storeValue: StoreValue, k: string | number | symbol) {\n const value = storeValue[k]\n if (Array.isArray(value)) {\n storeValue[k] = Object.freeze(value)\n }\n}\n","import { StoreOptions, StoreValue } from './types'\nimport { Stores } from './typesInternal'\nimport { freezeStoreValue, getStoreValue, initStoreValue, resetStoreValue } from './util'\n\nexport type Store<T extends StoreValue> = {\n /**\n * The store value.\n */\n readonly value: T,\n /**\n * Freezes the store value.\n * @param value Optional new store value.\n * If supplied, this value will be freezed and used as the store value.\n * You can use this update the store value and freeze part of it.\n * If not supplied,\n * the original value will be freezed and its array property will also be freezed.\n */\n freeze(value?: { [k in keyof T]: Readonly<T[k]> }): void,\n /**\n * Resets the store to its initial value.\n * You should only use this during testing.\n */\n reset(): void,\n}\n\nconst stores = Object.create(null) as Stores\n\n/**\n * Creates a store of type T.\n * @see https://www.npmjs.com/package/global-store\n */\nexport function createStore<\n T extends StoreValue\n>({ moduleName, key, version, initializer }: StoreOptions<T>): Store<T> {\n const id = { moduleName, key }\n initStoreValue(stores, id, version, initializer)\n\n return {\n get value() { return getStoreValue<T>(stores, id) },\n freeze(value) { return freezeStoreValue(stores, id, value) },\n reset() { return resetStoreValue(stores, id) }\n }\n}\n","import { createStore, Store } from './createStore'\nimport { StoreOptions, StoreValue } from './types'\nimport { StoreCreators } from './typesInternal'\nimport { resolveCreators } from './util'\n\nconst asyncStoreCreators = Object.create(null) as StoreCreators<Store<any>>\n\n/**\n * Creates a store of type T asynchronously.\n * @see https://github.com/unional/global-store#createAsyncStore\n */\nexport async function createAsyncStore<T extends StoreValue>({ moduleName, key, version, initializer }: StoreOptions<T>): Promise<Store<T>> {\n return new Promise(resolve => {\n const creatorsOfModules = asyncStoreCreators[moduleName] = asyncStoreCreators[moduleName] || Object.create(null)\n const k = key ?? 'default'\n const storeCreators = creatorsOfModules[k] = creatorsOfModules[k] || []\n storeCreators.push({ version, resolve, initializer })\n })\n}\n\n/**\n * Initializes the stores for `createAsyncStore()`.\n * @see https://github.com/unional/global-store#initializeAsyncStore\n */\nexport function initializeAsyncStore(moduleName: string, key?: string) {\n const creatorsOfModules = asyncStoreCreators[moduleName]\n if (!creatorsOfModules) return\n\n const keys = key ? [key] : Object.keys(creatorsOfModules)\n keys.forEach(key => resolveCreators(moduleName, key, creatorsOfModules[key], createStore))\n}\n"],"names":[],"mappings":";;;;;;;;;;;;MAIM,SAAU,cAAc,CAAC,CAAe,EAAA;MAC5C,IAAA,OAAO,OAAO,CAAC,KAAK,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;MACtC,QAAA,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAA;MAC3D;;MCJA;;;;MAIG;MACa,SAAA,cAAc,CAAC,SAAuB,EAAE,OAAqB,EAAA;MAC3E,IAAA,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;MACpC,IAAA,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;UAClC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;MACpC,QAAA,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;MACnD;;MCVgB,SAAA,uBAAuB,CAAC,QAAwB,EAAE,OAAqB,EAAA;UACrF,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;MACvC,IAAA,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;MACjC,IAAA,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;MACpD,CAAC;MAED,SAAS,YAAY,CAAC,QAAyB,EAAE,OAAsB,EAAA;MACrE,IAAA,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;MACjD,CAAC;MAED,SAAS,aAAa,CAAC,QAAyB,EAAE,OAAsB,EAAA;MACtE,IAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;MAC7C,SAAA,IAAI,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;MAC/E;;MCVgB,SAAA,aAAa,CAAuB,MAAc,EAAE,EAAW,EAAA;UAC7E,OAAO,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAU,CAAA;MACxC,CAAC;MAEK,SAAU,cAAc,CAAuB,MAAc,EAAE,EAAW,EAAE,OAAqB,EAAE,WAAgC,EAAA;UACvI,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;UAClC,IAAI,uBAAuB,CAAC,KAAK,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE;MACpD,QAAA,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,WAA2C,CAAC,CAAA;MACpE,QAAA,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,KAAU,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;MAC3D,QAAA,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;MAC7B,KAAA;MACH,CAAC;MAEe,SAAA,eAAe,CAAC,MAAc,EAAE,EAAW,EAAA;UACzD,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;MAClC,IAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAA;MAC/B,IAAA,KAAK,CAAC,QAAQ,GAAG,EAAE,CAAA;MACnB,IAAA,KAAK,CAAC,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,MAAM,CAAa,CAAC,KAAK,EAAE,WAAW,EAAE,CAAC,KAAI;cAC5E,KAAK,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;cAC1C,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAA;MAChC,QAAA,OAAO,KAAK,CAAA;WACb,EAAE,EAAE,CAAC,CAAA;MACR,CAAC;MAEe,SAAA,QAAQ,CAAC,MAAc,EAAE,EAAW,EAAA;UAClD,MAAM,WAAW,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,MAAM,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;MACxF,IAAA,MAAM,GAAG,GAAG,EAAE,CAAC,GAAG,IAAI,SAAS,CAAA;UAC/B,OAAO,WAAW,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,CAAA;MAC7F,CAAC;MAEK,SAAU,eAAe,CAAC,UAAkB,EAAE,GAAW,EAAE,aAAuC,EAAE,EAAsB,EAAA;MAC9H,IAAA,aAAa,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,CAAA;MACrI,CAAC;MAEK,SAAU,aAAa,CAAI,aAAqC,EAAA;UACpE,OAAO,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,cAAc,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;MAC3E,CAAC;eAEe,gBAAgB,CAAC,MAAc,EAAE,EAAW,EAAE,KAAkB,EAAA;UAC9E,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA;MAClC,IAAA,KAAK,CAAC,KAAK,GAAG,KAAK;MACjB,QAAA,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,GAAG,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;MACrD,QAAA,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;MAC5B,CAAC;MAED,SAAS,WAAW,CAAC,UAAsB,EAAA;MACzC,IAAA,IAAI,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC;MAAE,QAAA,MAAM,SAAS,CAAC,sCAAsC,CAAC,CAAA;MAExF,IAAA,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;;UAEpE,IAAI,MAAM,CAAC,qBAAqB,EAAE;MAChC,QAAA,MAAM,CAAC,qBAAqB,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,eAAe,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,CAAA;MACtF,KAAA;MAED,IAAA,OAAO,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAA;MAClC,CAAC;MAED,SAAS,eAAe,CAAC,UAAsB,EAAE,CAA2B,EAAA;MAC1E,IAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAA;MAC3B,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;cACxB,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;MACrC,KAAA;MACH;;MC3CA,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,CAAA;MAE5C;;;MAGG;MACG,SAAU,WAAW,CAEzB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAmB,EAAA;MAC1D,IAAA,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAA;UAC9B,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;UAEhD,OAAO;cACL,IAAI,KAAK,GAAK,EAAA,OAAO,aAAa,CAAI,MAAM,EAAE,EAAE,CAAC,CAAA,EAAE;MACnD,QAAA,MAAM,CAAC,KAAK,EAAI,EAAA,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA,EAAE;cAC5D,KAAK,GAAA,EAAK,OAAO,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,EAAE;WAC/C,CAAA;MACH;;MCrCA,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA8B,CAAA;MAE3E;;;MAGG;MACI,eAAe,gBAAgB,CAAuB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAmB,EAAA;MACrH,IAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;MAC3B,QAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;MAChH,QAAA,MAAM,CAAC,GAAG,GAAG,IAAI,SAAS,CAAA;MAC1B,QAAA,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;cACvE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;MACvD,KAAC,CAAC,CAAA;MACJ,CAAC;MAED;;;MAGG;MACa,SAAA,oBAAoB,CAAC,UAAkB,EAAE,GAAY,EAAA;MACnE,IAAA,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;MACxD,IAAA,IAAI,CAAC,iBAAiB;cAAE,OAAM;MAE9B,IAAA,MAAM,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;UACzD,IAAI,CAAC,OAAO,CAAC,GAAG,IAAI,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;MAC5F;;;;;;;;"}
|
package/dist/index.d.ts
DELETED
package/dist/toVersionArray.d.ts
DELETED
package/dist/types.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare type StoreValue = Record<string | symbol, unknown>;
|
|
2
|
-
export declare type StoreVersion = `${number}.${number}.${number}` | number;
|
|
3
|
-
export declare type StoreInitializer<T extends StoreValue> = (current: StoreValue, processedVersions: StoreVersion[]) => T;
|
|
4
|
-
export interface StoreOptions<T extends StoreValue> {
|
|
5
|
-
moduleName: string;
|
|
6
|
-
key?: string;
|
|
7
|
-
version: StoreVersion;
|
|
8
|
-
initializer: StoreInitializer<T>;
|
|
9
|
-
}
|
package/dist/util.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createStore } from './createStore';
|
|
2
|
-
import { StoreInitializer, StoreValue, StoreVersion } from './types';
|
|
3
|
-
import { StoreCreator, StoreId, Stores } from './typesInternal';
|
|
4
|
-
export declare function getStoreValue<T extends StoreValue>(stores: Stores, id: StoreId): T;
|
|
5
|
-
export declare function initStoreValue<T extends StoreValue>(stores: Stores, id: StoreId, version: StoreVersion, initializer: StoreInitializer<T>): void;
|
|
6
|
-
export declare function resetStoreValue(stores: Stores, id: StoreId): void;
|
|
7
|
-
export declare function getStore(stores: Stores, id: StoreId): {
|
|
8
|
-
versions: StoreVersion[];
|
|
9
|
-
initializers: StoreInitializer<StoreValue>[];
|
|
10
|
-
value: StoreValue;
|
|
11
|
-
};
|
|
12
|
-
export declare function resolveCreators(moduleName: string, key: string, storeCreators: Array<StoreCreator<any>>, cs: typeof createStore): void;
|
|
13
|
-
export declare function sortByVersion<S>(storeCreators: Array<StoreCreator<S>>): StoreCreator<S>[];
|
|
14
|
-
export declare function freezeStoreValue(stores: Stores, id: StoreId, value?: StoreValue): void;
|
package/libm/compareVersion.d.ts
DELETED
package/libm/compareVersion.js
DELETED
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import { toVersionArray } from './toVersionArray';
|
|
2
|
-
/**
|
|
3
|
-
* Compare version.
|
|
4
|
-
* Positive when processed > current
|
|
5
|
-
* Negative when processed < current
|
|
6
|
-
*/
|
|
7
|
-
export function compareVersion(processed, current) {
|
|
8
|
-
const v1 = toVersionArray(processed);
|
|
9
|
-
const v2 = toVersionArray(current);
|
|
10
|
-
return v1[0] !== v2[0] ? v1[0] - v2[0] :
|
|
11
|
-
v1[1] !== v2[1] ? v1[1] - v2[1] : v1[2] - v2[2];
|
|
12
|
-
}
|
|
13
|
-
//# sourceMappingURL=compareVersion.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"compareVersion.js","sourceRoot":"","sources":["../ts/compareVersion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGjD;;;;GAIG;AACH,MAAM,UAAU,cAAc,CAAC,SAAuB,EAAE,OAAqB;IAC3E,MAAM,EAAE,GAAG,cAAc,CAAC,SAAS,CAAC,CAAA;IACpC,MAAM,EAAE,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IAClC,OAAO,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;QACtC,EAAE,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAA;AACnD,CAAC"}
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import { Store } from './createStore';
|
|
2
|
-
import { StoreOptions, StoreValue } from './types';
|
|
3
|
-
/**
|
|
4
|
-
* Creates a store of type T asynchronously.
|
|
5
|
-
* @see https://github.com/unional/global-store#createAsyncStore
|
|
6
|
-
*/
|
|
7
|
-
export declare function createAsyncStore<T extends StoreValue>({ moduleName, key, version, initializer }: StoreOptions<T>): Promise<Store<T>>;
|
|
8
|
-
/**
|
|
9
|
-
* Initializes the stores for `createAsyncStore()`.
|
|
10
|
-
* @see https://github.com/unional/global-store#initializeAsyncStore
|
|
11
|
-
*/
|
|
12
|
-
export declare function initializeAsyncStore(moduleName: string, key?: string): void;
|
package/libm/createAsyncStore.js
DELETED
|
@@ -1,27 +0,0 @@
|
|
|
1
|
-
import { createStore } from './createStore';
|
|
2
|
-
import { resolveCreators } from './util';
|
|
3
|
-
const asyncStoreCreators = Object.create(null);
|
|
4
|
-
/**
|
|
5
|
-
* Creates a store of type T asynchronously.
|
|
6
|
-
* @see https://github.com/unional/global-store#createAsyncStore
|
|
7
|
-
*/
|
|
8
|
-
export async function createAsyncStore({ moduleName, key, version, initializer }) {
|
|
9
|
-
return new Promise(resolve => {
|
|
10
|
-
const creatorsOfModules = asyncStoreCreators[moduleName] = asyncStoreCreators[moduleName] || Object.create(null);
|
|
11
|
-
const k = key ?? 'default';
|
|
12
|
-
const storeCreators = creatorsOfModules[k] = creatorsOfModules[k] || [];
|
|
13
|
-
storeCreators.push({ version, resolve, initializer });
|
|
14
|
-
});
|
|
15
|
-
}
|
|
16
|
-
/**
|
|
17
|
-
* Initializes the stores for `createAsyncStore()`.
|
|
18
|
-
* @see https://github.com/unional/global-store#initializeAsyncStore
|
|
19
|
-
*/
|
|
20
|
-
export function initializeAsyncStore(moduleName, key) {
|
|
21
|
-
const creatorsOfModules = asyncStoreCreators[moduleName];
|
|
22
|
-
if (!creatorsOfModules)
|
|
23
|
-
return;
|
|
24
|
-
const keys = key ? [key] : Object.keys(creatorsOfModules);
|
|
25
|
-
keys.forEach(key => resolveCreators(moduleName, key, creatorsOfModules[key], createStore));
|
|
26
|
-
}
|
|
27
|
-
//# sourceMappingURL=createAsyncStore.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createAsyncStore.js","sourceRoot":"","sources":["../ts/createAsyncStore.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAS,MAAM,eAAe,CAAA;AAGlD,OAAO,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAExC,MAAM,kBAAkB,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAA8B,CAAA;AAE3E;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAuB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAmB;IACrH,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE;QAC3B,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,GAAG,kBAAkB,CAAC,UAAU,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QAChH,MAAM,CAAC,GAAG,GAAG,IAAI,SAAS,CAAA;QAC1B,MAAM,aAAa,GAAG,iBAAiB,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QACvE,aAAa,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC,CAAC,CAAA;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,UAAkB,EAAE,GAAY;IACnE,MAAM,iBAAiB,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAA;IACxD,IAAI,CAAC,iBAAiB;QAAE,OAAM;IAE9B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;IACzD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,eAAe,CAAC,UAAU,EAAE,GAAG,EAAE,iBAAiB,CAAC,GAAG,CAAC,EAAE,WAAW,CAAC,CAAC,CAAA;AAC5F,CAAC"}
|
package/libm/createStore.d.ts
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
import { StoreOptions, StoreValue } from './types';
|
|
2
|
-
export declare type Store<T extends StoreValue> = {
|
|
3
|
-
/**
|
|
4
|
-
* The store value.
|
|
5
|
-
*/
|
|
6
|
-
readonly value: T;
|
|
7
|
-
/**
|
|
8
|
-
* Freezes the store value.
|
|
9
|
-
* @param value Optional new store value.
|
|
10
|
-
* If supplied, this value will be freezed and used as the store value.
|
|
11
|
-
* You can use this update the store value and freeze part of it.
|
|
12
|
-
* If not supplied,
|
|
13
|
-
* the original value will be freezed and its array property will also be freezed.
|
|
14
|
-
*/
|
|
15
|
-
freeze(value?: {
|
|
16
|
-
[k in keyof T]: Readonly<T[k]>;
|
|
17
|
-
}): void;
|
|
18
|
-
/**
|
|
19
|
-
* Resets the store to its initial value.
|
|
20
|
-
* You should only use this during testing.
|
|
21
|
-
*/
|
|
22
|
-
reset(): void;
|
|
23
|
-
};
|
|
24
|
-
/**
|
|
25
|
-
* Creates a store of type T.
|
|
26
|
-
* @see https://www.npmjs.com/package/global-store
|
|
27
|
-
*/
|
|
28
|
-
export declare function createStore<T extends StoreValue>({ moduleName, key, version, initializer }: StoreOptions<T>): Store<T>;
|
package/libm/createStore.js
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { freezeStoreValue, getStoreValue, initStoreValue, resetStoreValue } from './util';
|
|
2
|
-
const stores = Object.create(null);
|
|
3
|
-
/**
|
|
4
|
-
* Creates a store of type T.
|
|
5
|
-
* @see https://www.npmjs.com/package/global-store
|
|
6
|
-
*/
|
|
7
|
-
export function createStore({ moduleName, key, version, initializer }) {
|
|
8
|
-
const id = { moduleName, key };
|
|
9
|
-
initStoreValue(stores, id, version, initializer);
|
|
10
|
-
return {
|
|
11
|
-
get value() { return getStoreValue(stores, id); },
|
|
12
|
-
freeze(value) { return freezeStoreValue(stores, id, value); },
|
|
13
|
-
reset() { return resetStoreValue(stores, id); }
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
//# sourceMappingURL=createStore.js.map
|
package/libm/createStore.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"createStore.js","sourceRoot":"","sources":["../ts/createStore.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,aAAa,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAA;AAuBzF,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAW,CAAA;AAE5C;;;GAGG;AACH,MAAM,UAAU,WAAW,CAEzB,EAAE,UAAU,EAAE,GAAG,EAAE,OAAO,EAAE,WAAW,EAAmB;IAC1D,MAAM,EAAE,GAAG,EAAE,UAAU,EAAE,GAAG,EAAE,CAAA;IAC9B,cAAc,CAAC,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,WAAW,CAAC,CAAA;IAEhD,OAAO;QACL,IAAI,KAAK,KAAK,OAAO,aAAa,CAAI,MAAM,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC;QACnD,MAAM,CAAC,KAAK,IAAI,OAAO,gBAAgB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,CAAA,CAAC,CAAC;QAC5D,KAAK,KAAK,OAAO,eAAe,CAAC,MAAM,EAAE,EAAE,CAAC,CAAA,CAAC,CAAC;KAC/C,CAAA;AACH,CAAC"}
|
package/libm/index.d.ts
DELETED
package/libm/index.js
DELETED
package/libm/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../ts/index.ts"],"names":[],"mappings":"AAAA,cAAc,oBAAoB,CAAA;AAClC,cAAc,eAAe,CAAA;AAC7B,OAAO,EAAE,WAAW,IAAI,OAAO,EAAE,MAAM,eAAe,CAAA;AACtD,cAAc,SAAS,CAAA"}
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { toVersionArray } from './toVersionArray';
|
|
2
|
-
export function shouldInvokeInitializer(versions, version) {
|
|
3
|
-
const vs = versions.map(toVersionArray);
|
|
4
|
-
const v = toVersionArray(version);
|
|
5
|
-
return noMatchMajor(vs, v) || hasNewVersion(vs, v);
|
|
6
|
-
}
|
|
7
|
-
function noMatchMajor(versions, version) {
|
|
8
|
-
return !versions.some(v => v[0] === version[0]);
|
|
9
|
-
}
|
|
10
|
-
function hasNewVersion(versions, version) {
|
|
11
|
-
return versions.filter(v => v[0] === version[0])
|
|
12
|
-
.some(v => version[1] > v[1] || (version[1] === v[1] && version[2] > v[2]));
|
|
13
|
-
}
|
|
14
|
-
//# sourceMappingURL=shouldInvokeInitializer.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"shouldInvokeInitializer.js","sourceRoot":"","sources":["../ts/shouldInvokeInitializer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAiB,cAAc,EAAE,MAAM,kBAAkB,CAAA;AAGhE,MAAM,UAAU,uBAAuB,CAAC,QAAwB,EAAE,OAAqB;IACrF,MAAM,EAAE,GAAG,QAAQ,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;IACvC,MAAM,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAA;IACjC,OAAO,YAAY,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,aAAa,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;AACpD,CAAC;AAED,SAAS,YAAY,CAAC,QAAyB,EAAE,OAAsB;IACrE,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,SAAS,aAAa,CAAC,QAAyB,EAAE,OAAsB;IACtE,OAAO,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC;SAC7C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;AAC/E,CAAC"}
|
package/libm/toVersionArray.d.ts
DELETED
package/libm/toVersionArray.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"toVersionArray.js","sourceRoot":"","sources":["../ts/toVersionArray.ts"],"names":[],"mappings":"AAIA,MAAM,UAAU,cAAc,CAAC,CAAe;IAC5C,OAAO,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACxC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAkB,CAAA;AAC3D,CAAC"}
|
package/libm/types.d.ts
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
export declare type StoreValue = Record<string | symbol, unknown>;
|
|
2
|
-
export declare type StoreVersion = `${number}.${number}.${number}` | number;
|
|
3
|
-
export declare type StoreInitializer<T extends StoreValue> = (current: StoreValue, processedVersions: StoreVersion[]) => T;
|
|
4
|
-
export interface StoreOptions<T extends StoreValue> {
|
|
5
|
-
moduleName: string;
|
|
6
|
-
key?: string;
|
|
7
|
-
version: StoreVersion;
|
|
8
|
-
initializer: StoreInitializer<T>;
|
|
9
|
-
}
|
package/libm/types.js
DELETED
package/libm/types.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../ts/types.ts"],"names":[],"mappings":""}
|
package/libm/typesInternal.d.ts
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
import { StoreInitializer, StoreVersion, StoreValue } from './types';
|
|
2
|
-
export interface StoreId {
|
|
3
|
-
moduleName: string;
|
|
4
|
-
key?: string;
|
|
5
|
-
}
|
|
6
|
-
export declare type Stores = Record<StoreId['moduleName'], Record<string, {
|
|
7
|
-
versions: StoreVersion[];
|
|
8
|
-
initializers: StoreInitializer<StoreValue>[];
|
|
9
|
-
value: StoreValue;
|
|
10
|
-
}>>;
|
|
11
|
-
export interface StoreCreator<S> {
|
|
12
|
-
version: StoreVersion;
|
|
13
|
-
resolve: (store: S) => void;
|
|
14
|
-
initializer: StoreInitializer<StoreValue>;
|
|
15
|
-
}
|
|
16
|
-
export declare type StoreCreators<Store> = Record<StoreId['moduleName'], Record<string, Array<StoreCreator<Store>>>>;
|
package/libm/typesInternal.js
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"typesInternal.js","sourceRoot":"","sources":["../ts/typesInternal.ts"],"names":[],"mappings":""}
|
package/libm/util.d.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { createStore } from './createStore';
|
|
2
|
-
import { StoreInitializer, StoreValue, StoreVersion } from './types';
|
|
3
|
-
import { StoreCreator, StoreId, Stores } from './typesInternal';
|
|
4
|
-
export declare function getStoreValue<T extends StoreValue>(stores: Stores, id: StoreId): T;
|
|
5
|
-
export declare function initStoreValue<T extends StoreValue>(stores: Stores, id: StoreId, version: StoreVersion, initializer: StoreInitializer<T>): void;
|
|
6
|
-
export declare function resetStoreValue(stores: Stores, id: StoreId): void;
|
|
7
|
-
export declare function getStore(stores: Stores, id: StoreId): {
|
|
8
|
-
versions: StoreVersion[];
|
|
9
|
-
initializers: StoreInitializer<StoreValue>[];
|
|
10
|
-
value: StoreValue;
|
|
11
|
-
};
|
|
12
|
-
export declare function resolveCreators(moduleName: string, key: string, storeCreators: Array<StoreCreator<any>>, cs: typeof createStore): void;
|
|
13
|
-
export declare function sortByVersion<S>(storeCreators: Array<StoreCreator<S>>): StoreCreator<S>[];
|
|
14
|
-
export declare function freezeStoreValue(stores: Stores, id: StoreId, value?: StoreValue): void;
|
package/libm/util.js
DELETED
|
@@ -1,57 +0,0 @@
|
|
|
1
|
-
import { compareVersion } from './compareVersion';
|
|
2
|
-
import { shouldInvokeInitializer } from './shouldInvokeInitializer';
|
|
3
|
-
export function getStoreValue(stores, id) {
|
|
4
|
-
return getStore(stores, id).value;
|
|
5
|
-
}
|
|
6
|
-
export function initStoreValue(stores, id, version, initializer) {
|
|
7
|
-
const store = getStore(stores, id);
|
|
8
|
-
if (shouldInvokeInitializer(store.versions, version)) {
|
|
9
|
-
store.initializers.push(initializer);
|
|
10
|
-
store.value = initializer(store.value, store.versions);
|
|
11
|
-
store.versions.push(version);
|
|
12
|
-
}
|
|
13
|
-
}
|
|
14
|
-
export function resetStoreValue(stores, id) {
|
|
15
|
-
const store = getStore(stores, id);
|
|
16
|
-
const versions = store.versions;
|
|
17
|
-
store.versions = [];
|
|
18
|
-
store.value = store.initializers.reduce((value, initializer, i) => {
|
|
19
|
-
value = initializer(value, store.versions);
|
|
20
|
-
store.versions.push(versions[i]);
|
|
21
|
-
return value;
|
|
22
|
-
}, {});
|
|
23
|
-
}
|
|
24
|
-
export function getStore(stores, id) {
|
|
25
|
-
const moduleStore = stores[id.moduleName] = stores[id.moduleName] || Object.create(null);
|
|
26
|
-
const key = id.key ?? 'default';
|
|
27
|
-
return moduleStore[key] = moduleStore[key] || { versions: [], value: {}, initializers: [] };
|
|
28
|
-
}
|
|
29
|
-
export function resolveCreators(moduleName, key, storeCreators, cs) {
|
|
30
|
-
sortByVersion(storeCreators).forEach(({ version, resolve, initializer }) => resolve(cs({ moduleName, key, version, initializer })));
|
|
31
|
-
}
|
|
32
|
-
export function sortByVersion(storeCreators) {
|
|
33
|
-
return storeCreators.sort((a, b) => compareVersion(a.version, b.version));
|
|
34
|
-
}
|
|
35
|
-
export function freezeStoreValue(stores, id, value) {
|
|
36
|
-
const store = getStore(stores, id);
|
|
37
|
-
store.value = value ?
|
|
38
|
-
Object.isFrozen(value) ? value : Object.freeze(value) :
|
|
39
|
-
freezeValue(store.value);
|
|
40
|
-
}
|
|
41
|
-
function freezeValue(storeValue) {
|
|
42
|
-
if (Object.isFrozen(storeValue))
|
|
43
|
-
throw TypeError('Frozen value cannot be freezed again');
|
|
44
|
-
Object.keys(storeValue).forEach(k => freezeIfIsArray(storeValue, k));
|
|
45
|
-
// istanbul ignore next
|
|
46
|
-
if (Object.getOwnPropertySymbols) {
|
|
47
|
-
Object.getOwnPropertySymbols(storeValue).forEach(k => freezeIfIsArray(storeValue, k));
|
|
48
|
-
}
|
|
49
|
-
return Object.freeze(storeValue);
|
|
50
|
-
}
|
|
51
|
-
function freezeIfIsArray(storeValue, k) {
|
|
52
|
-
const value = storeValue[k];
|
|
53
|
-
if (Array.isArray(value)) {
|
|
54
|
-
storeValue[k] = Object.freeze(value);
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
//# sourceMappingURL=util.js.map
|
package/libm/util.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"util.js","sourceRoot":"","sources":["../ts/util.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { compareVersion } from './compareVersion'
|
|
2
|
-
|
|
3
|
-
test('processed > current returns positive', () => {
|
|
4
|
-
expect(compareVersion('1.0.0', '0.2.3') > 0).toBeTruthy()
|
|
5
|
-
})
|
|
6
|
-
|
|
7
|
-
test('processed < current returns negative', () => {
|
|
8
|
-
expect(compareVersion('1.0.0', '1.2.3') < 0).toBeTruthy()
|
|
9
|
-
})
|
package/ts/compareVersion.ts
DELETED
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
import { toVersionArray } from './toVersionArray'
|
|
2
|
-
import { StoreVersion } from './types'
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* Compare version.
|
|
6
|
-
* Positive when processed > current
|
|
7
|
-
* Negative when processed < current
|
|
8
|
-
*/
|
|
9
|
-
export function compareVersion(processed: StoreVersion, current: StoreVersion) {
|
|
10
|
-
const v1 = toVersionArray(processed)
|
|
11
|
-
const v2 = toVersionArray(current)
|
|
12
|
-
return v1[0] !== v2[0] ? v1[0] - v2[0] :
|
|
13
|
-
v1[1] !== v2[1] ? v1[1] - v2[1] : v1[2] - v2[2]
|
|
14
|
-
}
|
|
@@ -1,142 +0,0 @@
|
|
|
1
|
-
import { AssertOrder } from 'assertron'
|
|
2
|
-
import { createAsyncStore, initializeAsyncStore } from '.'
|
|
3
|
-
|
|
4
|
-
test('calling initializeAsyncStore() with no createAsyncStore() call does nothing', () => {
|
|
5
|
-
initializeAsyncStore('unknown-module')
|
|
6
|
-
})
|
|
7
|
-
|
|
8
|
-
test('init single store with key', async () => {
|
|
9
|
-
const moduleName = 'module-one-store-init-with-key'
|
|
10
|
-
const key = '6e9dec9c-db22-4bbd-a088-ce734e34b5fd'
|
|
11
|
-
const p = createAsyncStore({ moduleName, key, version: 0, initializer: () => ({ a: 1 }) })
|
|
12
|
-
|
|
13
|
-
initializeAsyncStore(moduleName, key)
|
|
14
|
-
|
|
15
|
-
const store = await p
|
|
16
|
-
|
|
17
|
-
expect(store.value.a).toBe(1)
|
|
18
|
-
})
|
|
19
|
-
|
|
20
|
-
test('init single store without key', async () => {
|
|
21
|
-
const moduleName = 'module-one-store-init-without-key'
|
|
22
|
-
const key = '720d0a3b-a301-4c34-9fd9-41bb7510a5f9'
|
|
23
|
-
const p = createAsyncStore({ moduleName, key, version: 0, initializer: () => ({ a: 1 }) })
|
|
24
|
-
|
|
25
|
-
initializeAsyncStore(moduleName)
|
|
26
|
-
|
|
27
|
-
const store = await p
|
|
28
|
-
|
|
29
|
-
expect(store.value.a).toBe(1)
|
|
30
|
-
})
|
|
31
|
-
|
|
32
|
-
test('init multiple createAsyncStore calls with key', async () => {
|
|
33
|
-
const moduleName = 'module-multi-stores-init-with-key'
|
|
34
|
-
const key = '4f9a6b0c-8756-4c5b-9e98-030b1f973dbd'
|
|
35
|
-
const p1 = createAsyncStore({ moduleName, key, version: 0, initializer: () => ({ a: 1 }) })
|
|
36
|
-
const p2 = createAsyncStore({ moduleName, key, version: 0, initializer: () => ({ a: 1 }) })
|
|
37
|
-
|
|
38
|
-
initializeAsyncStore(moduleName, key)
|
|
39
|
-
|
|
40
|
-
const store1 = await p1
|
|
41
|
-
const store2 = await p2
|
|
42
|
-
|
|
43
|
-
expect(store1.value.a).toBe(1)
|
|
44
|
-
expect(store2.value.a).toBe(1)
|
|
45
|
-
|
|
46
|
-
store1.value.a = 2
|
|
47
|
-
expect(store2.value.a).toBe(2)
|
|
48
|
-
})
|
|
49
|
-
|
|
50
|
-
test('init multiple stores in the same module without key', async () => {
|
|
51
|
-
const moduleName = 'module-multi-stores-init-without-key'
|
|
52
|
-
const p1 = createAsyncStore({ moduleName, key: '4f9a6b0c-8756-4c5b-9e98-030b1f973dbd', version: 0, initializer: () => ({ a: 1 }) })
|
|
53
|
-
const p2 = createAsyncStore({ moduleName, key: '3856d28c-5a8e-4edc-9ec4-6b777dbf87cb', version: 0, initializer: () => ({ b: 2 }) })
|
|
54
|
-
|
|
55
|
-
initializeAsyncStore(moduleName)
|
|
56
|
-
|
|
57
|
-
const store1 = await p1
|
|
58
|
-
const store2 = await p2
|
|
59
|
-
|
|
60
|
-
expect(store1.value.a).toBe(1)
|
|
61
|
-
expect(store2.value.b).toBe(2)
|
|
62
|
-
})
|
|
63
|
-
|
|
64
|
-
test('init stores with different numeric versions is ordered by version', async () => {
|
|
65
|
-
const o = new AssertOrder(2)
|
|
66
|
-
const moduleName = 'num-version'
|
|
67
|
-
const key = '2197e51e-8d14-4706-8f4f-f1beacb5a388'
|
|
68
|
-
const p1 = createAsyncStore({
|
|
69
|
-
moduleName, key, version: 1, initializer: (prev) => {
|
|
70
|
-
expect(prev).toEqual({});
|
|
71
|
-
o.once(1);
|
|
72
|
-
return { a: 1 };
|
|
73
|
-
}
|
|
74
|
-
})
|
|
75
|
-
const p2 = createAsyncStore({
|
|
76
|
-
moduleName, key, version: 3, initializer: (prev) => {
|
|
77
|
-
expect(prev).toEqual({ a: 1 });
|
|
78
|
-
o.once(2);
|
|
79
|
-
return { ...prev, b: 2 };
|
|
80
|
-
}
|
|
81
|
-
})
|
|
82
|
-
|
|
83
|
-
initializeAsyncStore(moduleName)
|
|
84
|
-
|
|
85
|
-
const store2 = await p2
|
|
86
|
-
const store1 = await p1
|
|
87
|
-
|
|
88
|
-
expect(store1.value.a).toBe(1)
|
|
89
|
-
expect(store2.value.b).toBe(2)
|
|
90
|
-
|
|
91
|
-
o.end()
|
|
92
|
-
})
|
|
93
|
-
|
|
94
|
-
test('init stores with different string versions is ordered by version', async () => {
|
|
95
|
-
const o = new AssertOrder(8)
|
|
96
|
-
const moduleName = 'str-version'
|
|
97
|
-
const key = '9fda28d3-8478-417f-b27d-f28b7c5fc93f'
|
|
98
|
-
|
|
99
|
-
const promises = [
|
|
100
|
-
createAsyncStore({ moduleName, key, version: '1.0.0', initializer: () => { o.once(5); return { a: 1 }; } }),
|
|
101
|
-
createAsyncStore({ moduleName, key, version: '1.1.0', initializer: () => { o.once(6); return { a: 1 }; } }),
|
|
102
|
-
createAsyncStore({ moduleName, key, version: '0.0.0', initializer: () => { o.once(1); return { a: 1 }; } }),
|
|
103
|
-
createAsyncStore({ moduleName, key, version: '0.0.1', initializer: () => { o.once(2); return { a: 1 }; } }),
|
|
104
|
-
createAsyncStore({ moduleName, key, version: '0.1.0', initializer: () => { o.once(3); return { a: 1 }; } }),
|
|
105
|
-
createAsyncStore({ moduleName, key, version: '0.1.1', initializer: () => { o.once(4); return { a: 1 }; } }),
|
|
106
|
-
createAsyncStore({ moduleName, key, version: '1.1.1', initializer: () => { o.once(7); return { a: 1 }; } }),
|
|
107
|
-
createAsyncStore({ moduleName, key, version: '2.0.0', initializer: () => { o.once(8); return { a: 1 }; } })
|
|
108
|
-
]
|
|
109
|
-
|
|
110
|
-
initializeAsyncStore(moduleName)
|
|
111
|
-
|
|
112
|
-
await Promise.all(promises)
|
|
113
|
-
|
|
114
|
-
o.end()
|
|
115
|
-
})
|
|
116
|
-
|
|
117
|
-
test('number version is compared to the patch value of string version', async () => {
|
|
118
|
-
const o = new AssertOrder(4)
|
|
119
|
-
const moduleName = 'mix-version'
|
|
120
|
-
const key = '9fda28d3-8478-417f-b27d-f28b7c5fc93f'
|
|
121
|
-
|
|
122
|
-
const promises = [
|
|
123
|
-
createAsyncStore({ moduleName, key, version: 1, initializer: () => { o.once(1); return { a: 1 }; } }),
|
|
124
|
-
createAsyncStore({ moduleName, key, version: '0.0.2', initializer: () => { o.once(2); return { a: 1 }; } }),
|
|
125
|
-
createAsyncStore({ moduleName, key, version: 3, initializer: () => { o.once(3); return { a: 1 }; } }),
|
|
126
|
-
createAsyncStore({ moduleName, key, version: '0.1.0', initializer: () => { o.once(4); return { a: 1 }; } })
|
|
127
|
-
]
|
|
128
|
-
|
|
129
|
-
initializeAsyncStore(moduleName)
|
|
130
|
-
|
|
131
|
-
await Promise.all(promises)
|
|
132
|
-
|
|
133
|
-
o.end()
|
|
134
|
-
})
|
|
135
|
-
|
|
136
|
-
test('key is optional', async () => {
|
|
137
|
-
const moduleName = 'async-key-optional'
|
|
138
|
-
const p = createAsyncStore({ moduleName, version: '1.0.0', initializer: () => ({ a: 1 }) })
|
|
139
|
-
initializeAsyncStore(moduleName)
|
|
140
|
-
const store = await p
|
|
141
|
-
expect(store.value.a).toBe(1)
|
|
142
|
-
})
|
package/ts/createAsyncStore.ts
DELETED
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
import { createStore, Store } from './createStore'
|
|
2
|
-
import { StoreOptions, StoreValue } from './types'
|
|
3
|
-
import { StoreCreators } from './typesInternal'
|
|
4
|
-
import { resolveCreators } from './util'
|
|
5
|
-
|
|
6
|
-
const asyncStoreCreators = Object.create(null) as StoreCreators<Store<any>>
|
|
7
|
-
|
|
8
|
-
/**
|
|
9
|
-
* Creates a store of type T asynchronously.
|
|
10
|
-
* @see https://github.com/unional/global-store#createAsyncStore
|
|
11
|
-
*/
|
|
12
|
-
export async function createAsyncStore<T extends StoreValue>({ moduleName, key, version, initializer }: StoreOptions<T>): Promise<Store<T>> {
|
|
13
|
-
return new Promise(resolve => {
|
|
14
|
-
const creatorsOfModules = asyncStoreCreators[moduleName] = asyncStoreCreators[moduleName] || Object.create(null)
|
|
15
|
-
const k = key ?? 'default'
|
|
16
|
-
const storeCreators = creatorsOfModules[k] = creatorsOfModules[k] || []
|
|
17
|
-
storeCreators.push({ version, resolve, initializer })
|
|
18
|
-
})
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
/**
|
|
22
|
-
* Initializes the stores for `createAsyncStore()`.
|
|
23
|
-
* @see https://github.com/unional/global-store#initializeAsyncStore
|
|
24
|
-
*/
|
|
25
|
-
export function initializeAsyncStore(moduleName: string, key?: string) {
|
|
26
|
-
const creatorsOfModules = asyncStoreCreators[moduleName]
|
|
27
|
-
if (!creatorsOfModules) return
|
|
28
|
-
|
|
29
|
-
const keys = key ? [key] : Object.keys(creatorsOfModules)
|
|
30
|
-
keys.forEach(key => resolveCreators(moduleName, key, creatorsOfModules[key], createStore))
|
|
31
|
-
}
|