wraplet 0.28.0 → 0.29.0

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.
Files changed (60) hide show
  1. package/dist/AbstractWraplet.d.ts +16 -28
  2. package/dist/Core/DefaultArgCreator.d.ts +10 -0
  3. package/dist/{DefaultCore.d.ts → Core/DefaultCore.d.ts} +9 -11
  4. package/dist/Core/defaultWrapletCreator.d.ts +6 -0
  5. package/dist/Core/types/ArgCreator.d.ts +9 -0
  6. package/dist/{types → Core/types}/Core.d.ts +8 -21
  7. package/dist/{types → Core/types}/CoreInitOptions.d.ts +1 -1
  8. package/dist/Core/types/DestroyChildListener.d.ts +3 -0
  9. package/dist/{types → Core/types}/DestroyListener.d.ts +1 -1
  10. package/dist/Core/types/InstantiateChildListener.d.ts +3 -0
  11. package/dist/Core/types/WrapletCreator.d.ts +15 -0
  12. package/dist/Map/MapRepeat.d.ts +1 -1
  13. package/dist/Map/MapWrapper.d.ts +1 -1
  14. package/dist/Map/types/DynamicMap.d.ts +1 -1
  15. package/dist/{WrapletChildrenMap.d.ts → Map/utils.d.ts} +2 -2
  16. package/dist/NodeTreeManager/DefaultNodeTreeManager.d.ts +2 -2
  17. package/dist/NodeTreeManager/{NodeTreeManager.d.ts → types/NodeTreeManager.d.ts} +2 -2
  18. package/dist/{types → NodeTreeManager/types}/NodeTreeParent.d.ts +4 -2
  19. package/dist/{utils.d.ts → NodeTreeManager/utils.d.ts} +2 -2
  20. package/dist/Set/DefaultWrapletSet.d.ts +1 -1
  21. package/dist/Set/DefaultWrapletSetReadonly.d.ts +1 -1
  22. package/dist/Set/types/WrapletSet.d.ts +1 -1
  23. package/dist/Set/types/WrapletSetReadonly.d.ts +1 -1
  24. package/dist/Storage/{AbstractNongranularStorage.d.ts → AbstractNongranularKeyValueStorage.d.ts} +3 -2
  25. package/dist/Storage/ElementAttributeStorage.d.ts +2 -2
  26. package/dist/Storage/ElementStorage.d.ts +2 -2
  27. package/dist/Storage/InMemoryKeyValueStorage.d.ts +0 -0
  28. package/dist/Storage/StorageWrapper.d.ts +4 -3
  29. package/dist/Storage/types/KeyValueStorage.d.ts +13 -0
  30. package/dist/Storage/types/{StorageReadonly.d.ts → KeyValueStorageReadonly.d.ts} +1 -1
  31. package/dist/Wraplet/createWrapletApi.d.ts +6 -0
  32. package/dist/Wraplet/types/Status.d.ts +9 -0
  33. package/dist/Wraplet/types/Wraplet.d.ts +8 -0
  34. package/dist/Wraplet/types/WrapletApi.d.ts +12 -0
  35. package/dist/Wraplet/types/WrapletApiFactoryArgs.d.ts +16 -0
  36. package/dist/Wraplet/types/WrapletApiFactoryBasicCallback.d.ts +1 -0
  37. package/dist/{types → Wraplet/types}/WrapletChildDefinition.d.ts +3 -3
  38. package/dist/{types → Wraplet/types}/WrapletChildren.d.ts +2 -2
  39. package/dist/index.cjs +1 -1
  40. package/dist/index.cjs.map +1 -1
  41. package/dist/index.d.ts +14 -9
  42. package/dist/index.js +1 -1
  43. package/dist/index.js.map +1 -1
  44. package/dist/storage.cjs +1 -1
  45. package/dist/storage.cjs.map +1 -1
  46. package/dist/storage.d.ts +3 -2
  47. package/dist/storage.js +1 -1
  48. package/dist/storage.js.map +1 -1
  49. package/dist/types/Groupable.d.ts +4 -2
  50. package/dist/utils/is.d.ts +5 -0
  51. package/dist/{types → utils/types}/Utils.d.ts +0 -5
  52. package/package.json +1 -1
  53. package/dist/Storage/types/Storage.d.ts +0 -9
  54. package/dist/Storage/types/StorageDefaults.d.ts +0 -1
  55. package/dist/types/DestroyChildListener.d.ts +0 -3
  56. package/dist/types/InstantiateChildListener.d.ts +0 -3
  57. package/dist/types/Wraplet.d.ts +0 -15
  58. package/dist/types/WrapletCreator.d.ts +0 -15
  59. /package/dist/{types → Wraplet/types}/ChildInstance.d.ts +0 -0
  60. /package/dist/{types → Wraplet/types}/WrapletChildrenMap.d.ts +0 -0
package/dist/storage.cjs CHANGED
@@ -1,2 +1,2 @@
1
- var t={d:(e,a)=>{for(var s in a)t.o(a,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:a[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{AbstractNongranularStorage:()=>i,ElementAttributeStorage:()=>l,ElementStorage:()=>r,StorageWrapper:()=>s});class a extends Error{}class s{storage;defaults;validators;constructor(t,e,a){this.storage=t,this.defaults=e,this.validators=a}async has(t){return await this.storage.has(t)}async get(t){const e=await this.storage.get(t);return void 0!==e?(this.validateGetValue(t,e),e):this.defaults[t]}async getMultiple(t){const e={...await this.storage.getMultiple(t)};for(const a of t)void 0===e[a]&&(e[a]=this.defaults[a]);return e}async getAll(){const t={...await this.storage.getAll()};for(const e of Object.keys(this.defaults))void 0===t[e]&&(t[e]=this.defaults[e]);return t}async set(t,e){this.validateSetValue(t,e),await this.storage.set(t,e)}async setMultiple(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setMultiple(t)}async setAll(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setAll(t)}async delete(t){await this.storage.delete(t)}async deleteMultiple(t){await this.storage.deleteMultiple(t)}async deleteAll(){await this.storage.deleteAll()}validateGetValue(t,e){if(!this.validators[t](e))throw new a(`Got an invalid value for the key ${String(t)}.`)}validateSetValue(t,e){if(!this.validators[t](e))throw new a(`Attempted to set an invalid value for the key ${String(t)}.`)}}class i{defaults;validators;data=null;options;constructor(t,e,a){this.defaults=t,this.validators=e,this.validateValidators(e),this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...a}}async has(t){return t in await this.getAll()}async get(t){return(await this.getAll())[t]}async getMultiple(t){const e=await this.getAll();return t.reduce((t,a)=>(t[a]=e[a],t),{})}async getAll(){return this.options.keepFresh&&await this.refresh(),this.data||await this.refresh(),this.data}async set(t,e){if(!this.validators[t](e))throw new a(`Attempted to set an invalid value for the key ${String(t)}.`);const s=await this.getValue(),i=JSON.parse(s);i[t]=e,await this.setAll(i)}async setMultiple(t){const e=await this.getAll();await this.setAll({...e,...t})}async setAll(t){await this.setValue(t)}async delete(t){const e=await this.getAll();t in e&&(delete e[t],await this.setValue(e))}async deleteMultiple(t){const e=await this.getAll();for(const a of t)delete e[a];await this.setAll(e)}async deleteAll(){await this.deleteAllValues(),await this.refresh()}async refresh(){this.data=await this.fetchFreshData()}async fetchFreshData(){const t=await this.getValue();if("{"!==t.charAt(0))throw new a("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new a("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t){if(!(e in this.validators))return!1;if(!this.validators[e](t[e]))return!1}return!0}validateValidators(t){for(const e in t)if("function"!=typeof t[e])throw new a(`Validator for ${e} is not a function.`)}}class l extends i{element;attribute;defaults;validators;constructor(t,e,a,s,i={}){super(a,s,i),this.element=t,this.attribute=e,this.defaults=a,this.validators=s}async getValue(){return this.element.getAttribute(this.attribute)||"{}"}async setValue(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}async deleteAllValues(){this.element.removeAttribute(this.attribute)}}class r extends i{element;defaults;validators;constructor(t,e,a,s={}){super(e,a,s),this.element=t,this.defaults=e,this.validators=a}async getValue(){return this.element.textContent||"{}"}async setValue(t){this.element.textContent=JSON.stringify(t)}async deleteAllValues(){this.element.textContent="{}"}}var n=exports;for(var o in e)n[o]=e[o];e.__esModule&&Object.defineProperty(n,"__esModule",{value:!0});
1
+ var t={d:(e,a)=>{for(var s in a)t.o(a,s)&&!t.o(e,s)&&Object.defineProperty(e,s,{enumerable:!0,get:a[s]})},o:(t,e)=>Object.prototype.hasOwnProperty.call(t,e),r:t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})}},e={};t.r(e),t.d(e,{AbstractNongranularKeyValueStorage:()=>n,ElementAttributeStorage:()=>o,ElementStorage:()=>h,KeyValueStorageSymbol:()=>s,StorageWrapper:()=>r,isKeyValueStorage:()=>i});const a=(t,e)=>"object"==typeof t&&null!==t&&!0===t[e],s=Symbol("KeyValueStorage");function i(t){return a(t,s)}class l extends Error{}class r{storage;defaults;validators;[s]=!0;constructor(t,e,a){this.storage=t,this.defaults=e,this.validators=a}async has(t){return await this.storage.has(t)}async get(t){const e=await this.storage.get(t);return void 0!==e?(this.validateGetValue(t,e),e):this.defaults[t]}async getMultiple(t){const e={...await this.storage.getMultiple(t)};for(const a of t)void 0===e[a]&&(e[a]=this.defaults[a]);return e}async getAll(){const t={...await this.storage.getAll()};for(const e of Object.keys(this.defaults))void 0===t[e]&&(t[e]=this.defaults[e]);return t}async set(t,e){this.validateSetValue(t,e),await this.storage.set(t,e)}async setMultiple(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setMultiple(t)}async setAll(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setAll(t)}async delete(t){await this.storage.delete(t)}async deleteMultiple(t){await this.storage.deleteMultiple(t)}async deleteAll(){await this.storage.deleteAll()}validateGetValue(t,e){if(!this.validators[t](e))throw new l(`Got an invalid value for the key ${String(t)}.`)}validateSetValue(t,e){if(!this.validators[t](e))throw new l(`Attempted to set an invalid value for the key ${String(t)}.`)}}class n{defaults;validators;[s]=!0;data=null;options;constructor(t,e,a){this.defaults=t,this.validators=e,this.validateValidators(e),this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...a}}async has(t){return t in await this.getAll()}async get(t){return(await this.getAll())[t]}async getMultiple(t){const e=await this.getAll();return t.reduce((t,a)=>(t[a]=e[a],t),{})}async getAll(){return this.options.keepFresh&&await this.refresh(),this.data||await this.refresh(),this.data}async set(t,e){if(!this.validators[t](e))throw new l(`Attempted to set an invalid value for the key ${String(t)}.`);const a=await this.getValue(),s=JSON.parse(a);s[t]=e,await this.setAll(s)}async setMultiple(t){const e=await this.getAll();await this.setAll({...e,...t})}async setAll(t){await this.setValue(t)}async delete(t){const e=await this.getAll();t in e&&(delete e[t],await this.setValue(e))}async deleteMultiple(t){const e=await this.getAll();for(const a of t)delete e[a];await this.setAll(e)}async deleteAll(){await this.deleteAllValues(),await this.refresh()}async refresh(){this.data=await this.fetchFreshData()}async fetchFreshData(){const t=await this.getValue();if("{"!==t.charAt(0))throw new l("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new l("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t){if(!(e in this.validators))return!1;if(!this.validators[e](t[e]))return!1}return!0}validateValidators(t){for(const e in t)if("function"!=typeof t[e])throw new l(`Validator for ${e} is not a function.`)}}class o extends n{element;attribute;defaults;validators;constructor(t,e,a,s,i={}){super(a,s,i),this.element=t,this.attribute=e,this.defaults=a,this.validators=s}async getValue(){return this.element.getAttribute(this.attribute)||"{}"}async setValue(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}async deleteAllValues(){this.element.removeAttribute(this.attribute)}}class h extends n{element;defaults;validators;constructor(t,e,a,s={}){super(e,a,s),this.element=t,this.defaults=e,this.validators=a}async getValue(){return this.element.textContent||"{}"}async setValue(t){this.element.textContent=JSON.stringify(t)}async deleteAllValues(){this.element.textContent="{}"}}var u=exports;for(var d in e)u[d]=e[d];e.__esModule&&Object.defineProperty(u,"__esModule",{value:!0});
2
2
  //# sourceMappingURL=storage.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.cjs","mappings":"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","sources":["webpack://wraplet/webpack/bootstrap","webpack://wraplet/webpack/runtime/define property getters","webpack://wraplet/webpack/runtime/hasOwnProperty shorthand","webpack://wraplet/webpack/runtime/make namespace object","webpack://wraplet/./src/errors.ts","webpack://wraplet/./src/Storage/StorageWrapper.ts","webpack://wraplet/./src/Storage/AbstractNongranularStorage.ts","webpack://wraplet/./src/Storage/ElementAttributeStorage.ts","webpack://wraplet/./src/Storage/ElementStorage.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","export class MissingRequiredChildError extends Error {\n}\nexport class MapError extends Error {\n}\nexport class RequiredChildDestroyedError extends Error {\n}\nexport class ChildrenAreNotAvailableError extends Error {\n}\nexport class StorageValidationError extends Error {\n}\nexport class ChildrenTooManyFoundError extends Error {\n}\nexport class ChildrenAreAlreadyDestroyedError extends Error {\n}\nexport class InternalLogicError extends Error {\n}\n","import { StorageValidationError } from \"../errors\";\nexport class StorageWrapper {\n storage;\n defaults;\n validators;\n constructor(storage, defaults, validators) {\n this.storage = storage;\n this.defaults = defaults;\n this.validators = validators;\n }\n async has(key) {\n return await this.storage.has(key);\n }\n async get(key) {\n const value = await this.storage.get(key);\n // Only validate when the underlying storage actually returned a value.\n if (value !== undefined) {\n this.validateGetValue(key, value);\n return value;\n }\n return this.defaults[key];\n }\n async getMultiple(keys) {\n const multiple = await this.storage.getMultiple(keys);\n const result = { ...multiple };\n for (const key of keys) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async getAll() {\n const all = await this.storage.getAll();\n const result = { ...all };\n for (const key of Object.keys(this.defaults)) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async set(key, value) {\n this.validateSetValue(key, value);\n await this.storage.set(key, value);\n }\n async setMultiple(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setMultiple(data);\n }\n async setAll(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setAll(data);\n }\n async delete(key) {\n await this.storage.delete(key);\n }\n async deleteMultiple(keys) {\n await this.storage.deleteMultiple(keys);\n }\n async deleteAll() {\n await this.storage.deleteAll();\n }\n validateGetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Got an invalid value for the key ${String(key)}.`);\n }\n }\n validateSetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n }\n}\n","import { StorageValidationError } from \"../errors\";\nexport class AbstractNongranularStorage {\n defaults;\n validators;\n data = null;\n options;\n constructor(defaults, validators, options) {\n this.defaults = defaults;\n this.validators = validators;\n this.validateValidators(validators);\n this.options = {\n keepFresh: true,\n elementOptionsMerger: (defaultOptions, elementOptions) => {\n return { ...defaultOptions, ...elementOptions };\n },\n ...options,\n };\n }\n async has(key) {\n const data = await this.getAll();\n return key in data;\n }\n async get(key) {\n const data = await this.getAll();\n return data[key];\n }\n async getMultiple(keys) {\n const data = await this.getAll();\n return keys.reduce((acc, key) => {\n acc[key] = data[key];\n return acc;\n }, {});\n }\n async getAll() {\n if (this.options.keepFresh) {\n await this.refresh();\n }\n if (!this.data) {\n await this.refresh();\n }\n return this.data;\n }\n async set(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n const attributeValue = await this.getValue();\n const data = JSON.parse(attributeValue);\n data[key] = value;\n await this.setAll(data);\n }\n async setMultiple(data) {\n const oldData = await this.getAll();\n await this.setAll({ ...oldData, ...data });\n }\n async setAll(data) {\n await this.setValue(data);\n }\n async delete(key) {\n const data = await this.getAll();\n if (!(key in data)) {\n return;\n }\n delete data[key];\n await this.setValue(data);\n }\n async deleteMultiple(keys) {\n const data = await this.getAll();\n for (const key of keys) {\n delete data[key];\n }\n await this.setAll(data);\n }\n async deleteAll() {\n await this.deleteAllValues();\n await this.refresh();\n }\n async refresh() {\n this.data = await this.fetchFreshData();\n }\n async fetchFreshData() {\n const dataString = await this.getValue();\n if (dataString.charAt(0) !== \"{\") {\n throw new StorageValidationError(`Data has to be defined as an object.`);\n }\n const data = JSON.parse(dataString);\n if (!this.validateData(data)) {\n throw new StorageValidationError(\"Invalid storage value.\");\n }\n return this.options.elementOptionsMerger(this.defaults, data);\n }\n validateData(data) {\n for (const key in data) {\n if (!(key in this.validators)) {\n return false;\n }\n else if (!this.validators[key](data[key])) {\n return false;\n }\n }\n return true;\n }\n validateValidators(validators) {\n for (const key in validators) {\n if (typeof validators[key] !== \"function\") {\n throw new StorageValidationError(`Validator for ${key} is not a function.`);\n }\n }\n }\n}\n","import { AbstractNongranularStorage } from \"./AbstractNongranularStorage\";\nexport class ElementAttributeStorage extends AbstractNongranularStorage {\n element;\n attribute;\n defaults;\n validators;\n constructor(element, attribute, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.attribute = attribute;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.getAttribute(this.attribute) || \"{}\";\n }\n async setValue(value) {\n this.element.setAttribute(this.attribute, JSON.stringify(value));\n }\n async deleteAllValues() {\n this.element.removeAttribute(this.attribute);\n }\n}\n","import { AbstractNongranularStorage } from \"./AbstractNongranularStorage\";\nexport class ElementStorage extends AbstractNongranularStorage {\n element;\n defaults;\n validators;\n constructor(element, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.textContent || \"{}\";\n }\n async setValue(value) {\n this.element.textContent = JSON.stringify(value);\n }\n async deleteAllValues() {\n this.element.textContent = \"{}\";\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","StorageValidationError","Error","StorageWrapper","storage","defaults","validators","constructor","this","has","undefined","validateGetValue","getMultiple","keys","result","getAll","set","validateSetValue","setMultiple","data","setAll","delete","deleteMultiple","deleteAll","String","AbstractNongranularStorage","options","validateValidators","keepFresh","elementOptionsMerger","defaultOptions","elementOptions","reduce","acc","refresh","attributeValue","getValue","JSON","parse","oldData","setValue","deleteAllValues","fetchFreshData","dataString","charAt","validateData","ElementAttributeStorage","element","attribute","super","getAttribute","setAttribute","stringify","removeAttribute","ElementStorage","textContent"],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"storage.cjs","mappings":"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","sources":["webpack://wraplet/webpack/bootstrap","webpack://wraplet/webpack/runtime/define property getters","webpack://wraplet/webpack/runtime/hasOwnProperty shorthand","webpack://wraplet/webpack/runtime/make namespace object","webpack://wraplet/./src/utils/is.ts","webpack://wraplet/./src/Storage/types/KeyValueStorage.ts","webpack://wraplet/./src/errors.ts","webpack://wraplet/./src/Storage/StorageWrapper.ts","webpack://wraplet/./src/Storage/AbstractNongranularKeyValueStorage.ts","webpack://wraplet/./src/Storage/ElementAttributeStorage.ts","webpack://wraplet/./src/Storage/ElementStorage.ts"],"sourcesContent":["// The require scope\nvar __webpack_require__ = {};\n\n","// define getter functions for harmony exports\n__webpack_require__.d = (exports, definition) => {\n\tfor(var key in definition) {\n\t\tif(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) {\n\t\t\tObject.defineProperty(exports, key, { enumerable: true, get: definition[key] });\n\t\t}\n\t}\n};","__webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop))","// define __esModule on exports\n__webpack_require__.r = (exports) => {\n\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n\t}\n\tObject.defineProperty(exports, '__esModule', { value: true });\n};","/**\n * Generic guard.\n */\nconst is = (object, symbol) => {\n return (typeof object === \"object\" &&\n object !== null &&\n object[symbol] === true);\n};\nexport { is };\n","import { is } from \"../../utils/is\";\nconst KeyValueStorageSymbol = Symbol(\"KeyValueStorage\");\nexport { KeyValueStorageSymbol };\nexport function isKeyValueStorage(object) {\n return is(object, KeyValueStorageSymbol);\n}\n","export class MissingRequiredChildError extends Error {\n}\nexport class MapError extends Error {\n}\nexport class RequiredChildDestroyedError extends Error {\n}\nexport class ChildrenAreNotAvailableError extends Error {\n}\nexport class StorageValidationError extends Error {\n}\nexport class ChildrenTooManyFoundError extends Error {\n}\nexport class ChildrenAreAlreadyDestroyedError extends Error {\n}\nexport class InternalLogicError extends Error {\n}\n","import { KeyValueStorageSymbol, } from \"./types/KeyValueStorage\";\nimport { StorageValidationError } from \"../errors\";\nexport class StorageWrapper {\n storage;\n defaults;\n validators;\n [KeyValueStorageSymbol] = true;\n constructor(storage, defaults, validators) {\n this.storage = storage;\n this.defaults = defaults;\n this.validators = validators;\n }\n async has(key) {\n return await this.storage.has(key);\n }\n async get(key) {\n const value = await this.storage.get(key);\n // Only validate when the underlying storage actually returned a value.\n if (value !== undefined) {\n this.validateGetValue(key, value);\n return value;\n }\n return this.defaults[key];\n }\n async getMultiple(keys) {\n const multiple = await this.storage.getMultiple(keys);\n const result = { ...multiple };\n for (const key of keys) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async getAll() {\n const all = await this.storage.getAll();\n const result = { ...all };\n for (const key of Object.keys(this.defaults)) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async set(key, value) {\n this.validateSetValue(key, value);\n await this.storage.set(key, value);\n }\n async setMultiple(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setMultiple(data);\n }\n async setAll(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setAll(data);\n }\n async delete(key) {\n await this.storage.delete(key);\n }\n async deleteMultiple(keys) {\n await this.storage.deleteMultiple(keys);\n }\n async deleteAll() {\n await this.storage.deleteAll();\n }\n validateGetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Got an invalid value for the key ${String(key)}.`);\n }\n }\n validateSetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n }\n}\n","import { KeyValueStorageSymbol, } from \"./types/KeyValueStorage\";\nimport { StorageValidationError } from \"../errors\";\nexport class AbstractNongranularKeyValueStorage {\n defaults;\n validators;\n [KeyValueStorageSymbol] = true;\n data = null;\n options;\n constructor(defaults, validators, options) {\n this.defaults = defaults;\n this.validators = validators;\n this.validateValidators(validators);\n this.options = {\n keepFresh: true,\n elementOptionsMerger: (defaultOptions, elementOptions) => {\n return { ...defaultOptions, ...elementOptions };\n },\n ...options,\n };\n }\n async has(key) {\n const data = await this.getAll();\n return key in data;\n }\n async get(key) {\n const data = await this.getAll();\n return data[key];\n }\n async getMultiple(keys) {\n const data = await this.getAll();\n return keys.reduce((acc, key) => {\n acc[key] = data[key];\n return acc;\n }, {});\n }\n async getAll() {\n if (this.options.keepFresh) {\n await this.refresh();\n }\n if (!this.data) {\n await this.refresh();\n }\n return this.data;\n }\n async set(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n const attributeValue = await this.getValue();\n const data = JSON.parse(attributeValue);\n data[key] = value;\n await this.setAll(data);\n }\n async setMultiple(data) {\n const oldData = await this.getAll();\n await this.setAll({ ...oldData, ...data });\n }\n async setAll(data) {\n await this.setValue(data);\n }\n async delete(key) {\n const data = await this.getAll();\n if (!(key in data)) {\n return;\n }\n delete data[key];\n await this.setValue(data);\n }\n async deleteMultiple(keys) {\n const data = await this.getAll();\n for (const key of keys) {\n delete data[key];\n }\n await this.setAll(data);\n }\n async deleteAll() {\n await this.deleteAllValues();\n await this.refresh();\n }\n async refresh() {\n this.data = await this.fetchFreshData();\n }\n async fetchFreshData() {\n const dataString = await this.getValue();\n if (dataString.charAt(0) !== \"{\") {\n throw new StorageValidationError(`Data has to be defined as an object.`);\n }\n const data = JSON.parse(dataString);\n if (!this.validateData(data)) {\n throw new StorageValidationError(\"Invalid storage value.\");\n }\n return this.options.elementOptionsMerger(this.defaults, data);\n }\n validateData(data) {\n for (const key in data) {\n if (!(key in this.validators)) {\n return false;\n }\n else if (!this.validators[key](data[key])) {\n return false;\n }\n }\n return true;\n }\n validateValidators(validators) {\n for (const key in validators) {\n if (typeof validators[key] !== \"function\") {\n throw new StorageValidationError(`Validator for ${key} is not a function.`);\n }\n }\n }\n}\n","import { AbstractNongranularKeyValueStorage } from \"./AbstractNongranularKeyValueStorage\";\nexport class ElementAttributeStorage extends AbstractNongranularKeyValueStorage {\n element;\n attribute;\n defaults;\n validators;\n constructor(element, attribute, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.attribute = attribute;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.getAttribute(this.attribute) || \"{}\";\n }\n async setValue(value) {\n this.element.setAttribute(this.attribute, JSON.stringify(value));\n }\n async deleteAllValues() {\n this.element.removeAttribute(this.attribute);\n }\n}\n","import { AbstractNongranularKeyValueStorage } from \"./AbstractNongranularKeyValueStorage\";\nexport class ElementStorage extends AbstractNongranularKeyValueStorage {\n element;\n defaults;\n validators;\n constructor(element, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.textContent || \"{}\";\n }\n async setValue(value) {\n this.element.textContent = JSON.stringify(value);\n }\n async deleteAllValues() {\n this.element.textContent = \"{}\";\n }\n}\n"],"names":["__webpack_require__","exports","definition","key","o","Object","defineProperty","enumerable","get","obj","prop","prototype","hasOwnProperty","call","Symbol","toStringTag","value","is","object","symbol","KeyValueStorageSymbol","isKeyValueStorage","StorageValidationError","Error","StorageWrapper","storage","defaults","validators","constructor","this","has","undefined","validateGetValue","getMultiple","keys","result","getAll","set","validateSetValue","setMultiple","data","setAll","delete","deleteMultiple","deleteAll","String","AbstractNongranularKeyValueStorage","options","validateValidators","keepFresh","elementOptionsMerger","defaultOptions","elementOptions","reduce","acc","refresh","attributeValue","getValue","JSON","parse","oldData","setValue","deleteAllValues","fetchFreshData","dataString","charAt","validateData","ElementAttributeStorage","element","attribute","super","getAttribute","setAttribute","stringify","removeAttribute","ElementStorage","textContent"],"ignoreList":[],"sourceRoot":""}
package/dist/storage.d.ts CHANGED
@@ -1,8 +1,9 @@
1
1
  export { StorageWrapper } from "./Storage/StorageWrapper";
2
- export { AbstractNongranularStorage } from "./Storage/AbstractNongranularStorage";
2
+ export { AbstractNongranularKeyValueStorage } from "./Storage/AbstractNongranularKeyValueStorage";
3
3
  export { ElementAttributeStorage } from "./Storage/ElementAttributeStorage";
4
4
  export { ElementStorage } from "./Storage/ElementStorage";
5
+ export { isKeyValueStorage, KeyValueStorageSymbol, } from "./Storage/types/KeyValueStorage";
5
6
  export type { ElementOptionsMerger } from "./Storage/ElementOptionsMerger";
6
- export type { Storage } from "./Storage/types/Storage";
7
+ export type { KeyValueStorage } from "./Storage/types/KeyValueStorage";
7
8
  export type { StorageValidators, StorageValidator, } from "./Storage/types/StorageValidators";
8
9
  export type { NongranularStorageOptions } from "./Storage/NongranularStorageOptions";
package/dist/storage.js CHANGED
@@ -1,2 +1,2 @@
1
- class t extends Error{}class e{storage;defaults;validators;constructor(t,e,a){this.storage=t,this.defaults=e,this.validators=a}async has(t){return await this.storage.has(t)}async get(t){const e=await this.storage.get(t);return void 0!==e?(this.validateGetValue(t,e),e):this.defaults[t]}async getMultiple(t){const e={...await this.storage.getMultiple(t)};for(const a of t)void 0===e[a]&&(e[a]=this.defaults[a]);return e}async getAll(){const t={...await this.storage.getAll()};for(const e of Object.keys(this.defaults))void 0===t[e]&&(t[e]=this.defaults[e]);return t}async set(t,e){this.validateSetValue(t,e),await this.storage.set(t,e)}async setMultiple(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setMultiple(t)}async setAll(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setAll(t)}async delete(t){await this.storage.delete(t)}async deleteMultiple(t){await this.storage.deleteMultiple(t)}async deleteAll(){await this.storage.deleteAll()}validateGetValue(e,a){if(!this.validators[e](a))throw new t(`Got an invalid value for the key ${String(e)}.`)}validateSetValue(e,a){if(!this.validators[e](a))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`)}}class a{defaults;validators;data=null;options;constructor(t,e,a){this.defaults=t,this.validators=e,this.validateValidators(e),this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...a}}async has(t){return t in await this.getAll()}async get(t){return(await this.getAll())[t]}async getMultiple(t){const e=await this.getAll();return t.reduce((t,a)=>(t[a]=e[a],t),{})}async getAll(){return this.options.keepFresh&&await this.refresh(),this.data||await this.refresh(),this.data}async set(e,a){if(!this.validators[e](a))throw new t(`Attempted to set an invalid value for the key ${String(e)}.`);const s=await this.getValue(),i=JSON.parse(s);i[e]=a,await this.setAll(i)}async setMultiple(t){const e=await this.getAll();await this.setAll({...e,...t})}async setAll(t){await this.setValue(t)}async delete(t){const e=await this.getAll();t in e&&(delete e[t],await this.setValue(e))}async deleteMultiple(t){const e=await this.getAll();for(const a of t)delete e[a];await this.setAll(e)}async deleteAll(){await this.deleteAllValues(),await this.refresh()}async refresh(){this.data=await this.fetchFreshData()}async fetchFreshData(){const e=await this.getValue();if("{"!==e.charAt(0))throw new t("Data has to be defined as an object.");const a=JSON.parse(e);if(!this.validateData(a))throw new t("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,a)}validateData(t){for(const e in t){if(!(e in this.validators))return!1;if(!this.validators[e](t[e]))return!1}return!0}validateValidators(e){for(const a in e)if("function"!=typeof e[a])throw new t(`Validator for ${a} is not a function.`)}}class s extends a{element;attribute;defaults;validators;constructor(t,e,a,s,i={}){super(a,s,i),this.element=t,this.attribute=e,this.defaults=a,this.validators=s}async getValue(){return this.element.getAttribute(this.attribute)||"{}"}async setValue(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}async deleteAllValues(){this.element.removeAttribute(this.attribute)}}class i extends a{element;defaults;validators;constructor(t,e,a,s={}){super(e,a,s),this.element=t,this.defaults=e,this.validators=a}async getValue(){return this.element.textContent||"{}"}async setValue(t){this.element.textContent=JSON.stringify(t)}async deleteAllValues(){this.element.textContent="{}"}}export{a as AbstractNongranularStorage,s as ElementAttributeStorage,i as ElementStorage,e as StorageWrapper};
1
+ const t=Symbol("KeyValueStorage");function e(e){return(e=>"object"==typeof e&&null!==e&&!0===e[t])(e)}class a extends Error{}class s{storage;defaults;validators;[t]=!0;constructor(t,e,a){this.storage=t,this.defaults=e,this.validators=a}async has(t){return await this.storage.has(t)}async get(t){const e=await this.storage.get(t);return void 0!==e?(this.validateGetValue(t,e),e):this.defaults[t]}async getMultiple(t){const e={...await this.storage.getMultiple(t)};for(const a of t)void 0===e[a]&&(e[a]=this.defaults[a]);return e}async getAll(){const t={...await this.storage.getAll()};for(const e of Object.keys(this.defaults))void 0===t[e]&&(t[e]=this.defaults[e]);return t}async set(t,e){this.validateSetValue(t,e),await this.storage.set(t,e)}async setMultiple(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setMultiple(t)}async setAll(t){for(const e in t)this.validateSetValue(e,t[e]);await this.storage.setAll(t)}async delete(t){await this.storage.delete(t)}async deleteMultiple(t){await this.storage.deleteMultiple(t)}async deleteAll(){await this.storage.deleteAll()}validateGetValue(t,e){if(!this.validators[t](e))throw new a(`Got an invalid value for the key ${String(t)}.`)}validateSetValue(t,e){if(!this.validators[t](e))throw new a(`Attempted to set an invalid value for the key ${String(t)}.`)}}class i{defaults;validators;[t]=!0;data=null;options;constructor(t,e,a){this.defaults=t,this.validators=e,this.validateValidators(e),this.options={keepFresh:!0,elementOptionsMerger:(t,e)=>({...t,...e}),...a}}async has(t){return t in await this.getAll()}async get(t){return(await this.getAll())[t]}async getMultiple(t){const e=await this.getAll();return t.reduce((t,a)=>(t[a]=e[a],t),{})}async getAll(){return this.options.keepFresh&&await this.refresh(),this.data||await this.refresh(),this.data}async set(t,e){if(!this.validators[t](e))throw new a(`Attempted to set an invalid value for the key ${String(t)}.`);const s=await this.getValue(),i=JSON.parse(s);i[t]=e,await this.setAll(i)}async setMultiple(t){const e=await this.getAll();await this.setAll({...e,...t})}async setAll(t){await this.setValue(t)}async delete(t){const e=await this.getAll();t in e&&(delete e[t],await this.setValue(e))}async deleteMultiple(t){const e=await this.getAll();for(const a of t)delete e[a];await this.setAll(e)}async deleteAll(){await this.deleteAllValues(),await this.refresh()}async refresh(){this.data=await this.fetchFreshData()}async fetchFreshData(){const t=await this.getValue();if("{"!==t.charAt(0))throw new a("Data has to be defined as an object.");const e=JSON.parse(t);if(!this.validateData(e))throw new a("Invalid storage value.");return this.options.elementOptionsMerger(this.defaults,e)}validateData(t){for(const e in t){if(!(e in this.validators))return!1;if(!this.validators[e](t[e]))return!1}return!0}validateValidators(t){for(const e in t)if("function"!=typeof t[e])throw new a(`Validator for ${e} is not a function.`)}}class l extends i{element;attribute;defaults;validators;constructor(t,e,a,s,i={}){super(a,s,i),this.element=t,this.attribute=e,this.defaults=a,this.validators=s}async getValue(){return this.element.getAttribute(this.attribute)||"{}"}async setValue(t){this.element.setAttribute(this.attribute,JSON.stringify(t))}async deleteAllValues(){this.element.removeAttribute(this.attribute)}}class n extends i{element;defaults;validators;constructor(t,e,a,s={}){super(e,a,s),this.element=t,this.defaults=e,this.validators=a}async getValue(){return this.element.textContent||"{}"}async setValue(t){this.element.textContent=JSON.stringify(t)}async deleteAllValues(){this.element.textContent="{}"}}export{i as AbstractNongranularKeyValueStorage,l as ElementAttributeStorage,n as ElementStorage,t as KeyValueStorageSymbol,s as StorageWrapper,e as isKeyValueStorage};
2
2
  //# sourceMappingURL=storage.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"storage.js","mappings":"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","sources":["webpack://wraplet/./src/errors.ts","webpack://wraplet/./src/Storage/StorageWrapper.ts","webpack://wraplet/./src/Storage/AbstractNongranularStorage.ts","webpack://wraplet/./src/Storage/ElementAttributeStorage.ts","webpack://wraplet/./src/Storage/ElementStorage.ts"],"sourcesContent":["export class MissingRequiredChildError extends Error {\n}\nexport class MapError extends Error {\n}\nexport class RequiredChildDestroyedError extends Error {\n}\nexport class ChildrenAreNotAvailableError extends Error {\n}\nexport class StorageValidationError extends Error {\n}\nexport class ChildrenTooManyFoundError extends Error {\n}\nexport class ChildrenAreAlreadyDestroyedError extends Error {\n}\nexport class InternalLogicError extends Error {\n}\n","import { StorageValidationError } from \"../errors\";\nexport class StorageWrapper {\n storage;\n defaults;\n validators;\n constructor(storage, defaults, validators) {\n this.storage = storage;\n this.defaults = defaults;\n this.validators = validators;\n }\n async has(key) {\n return await this.storage.has(key);\n }\n async get(key) {\n const value = await this.storage.get(key);\n // Only validate when the underlying storage actually returned a value.\n if (value !== undefined) {\n this.validateGetValue(key, value);\n return value;\n }\n return this.defaults[key];\n }\n async getMultiple(keys) {\n const multiple = await this.storage.getMultiple(keys);\n const result = { ...multiple };\n for (const key of keys) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async getAll() {\n const all = await this.storage.getAll();\n const result = { ...all };\n for (const key of Object.keys(this.defaults)) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async set(key, value) {\n this.validateSetValue(key, value);\n await this.storage.set(key, value);\n }\n async setMultiple(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setMultiple(data);\n }\n async setAll(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setAll(data);\n }\n async delete(key) {\n await this.storage.delete(key);\n }\n async deleteMultiple(keys) {\n await this.storage.deleteMultiple(keys);\n }\n async deleteAll() {\n await this.storage.deleteAll();\n }\n validateGetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Got an invalid value for the key ${String(key)}.`);\n }\n }\n validateSetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n }\n}\n","import { StorageValidationError } from \"../errors\";\nexport class AbstractNongranularStorage {\n defaults;\n validators;\n data = null;\n options;\n constructor(defaults, validators, options) {\n this.defaults = defaults;\n this.validators = validators;\n this.validateValidators(validators);\n this.options = {\n keepFresh: true,\n elementOptionsMerger: (defaultOptions, elementOptions) => {\n return { ...defaultOptions, ...elementOptions };\n },\n ...options,\n };\n }\n async has(key) {\n const data = await this.getAll();\n return key in data;\n }\n async get(key) {\n const data = await this.getAll();\n return data[key];\n }\n async getMultiple(keys) {\n const data = await this.getAll();\n return keys.reduce((acc, key) => {\n acc[key] = data[key];\n return acc;\n }, {});\n }\n async getAll() {\n if (this.options.keepFresh) {\n await this.refresh();\n }\n if (!this.data) {\n await this.refresh();\n }\n return this.data;\n }\n async set(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n const attributeValue = await this.getValue();\n const data = JSON.parse(attributeValue);\n data[key] = value;\n await this.setAll(data);\n }\n async setMultiple(data) {\n const oldData = await this.getAll();\n await this.setAll({ ...oldData, ...data });\n }\n async setAll(data) {\n await this.setValue(data);\n }\n async delete(key) {\n const data = await this.getAll();\n if (!(key in data)) {\n return;\n }\n delete data[key];\n await this.setValue(data);\n }\n async deleteMultiple(keys) {\n const data = await this.getAll();\n for (const key of keys) {\n delete data[key];\n }\n await this.setAll(data);\n }\n async deleteAll() {\n await this.deleteAllValues();\n await this.refresh();\n }\n async refresh() {\n this.data = await this.fetchFreshData();\n }\n async fetchFreshData() {\n const dataString = await this.getValue();\n if (dataString.charAt(0) !== \"{\") {\n throw new StorageValidationError(`Data has to be defined as an object.`);\n }\n const data = JSON.parse(dataString);\n if (!this.validateData(data)) {\n throw new StorageValidationError(\"Invalid storage value.\");\n }\n return this.options.elementOptionsMerger(this.defaults, data);\n }\n validateData(data) {\n for (const key in data) {\n if (!(key in this.validators)) {\n return false;\n }\n else if (!this.validators[key](data[key])) {\n return false;\n }\n }\n return true;\n }\n validateValidators(validators) {\n for (const key in validators) {\n if (typeof validators[key] !== \"function\") {\n throw new StorageValidationError(`Validator for ${key} is not a function.`);\n }\n }\n }\n}\n","import { AbstractNongranularStorage } from \"./AbstractNongranularStorage\";\nexport class ElementAttributeStorage extends AbstractNongranularStorage {\n element;\n attribute;\n defaults;\n validators;\n constructor(element, attribute, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.attribute = attribute;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.getAttribute(this.attribute) || \"{}\";\n }\n async setValue(value) {\n this.element.setAttribute(this.attribute, JSON.stringify(value));\n }\n async deleteAllValues() {\n this.element.removeAttribute(this.attribute);\n }\n}\n","import { AbstractNongranularStorage } from \"./AbstractNongranularStorage\";\nexport class ElementStorage extends AbstractNongranularStorage {\n element;\n defaults;\n validators;\n constructor(element, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.textContent || \"{}\";\n }\n async setValue(value) {\n this.element.textContent = JSON.stringify(value);\n }\n async deleteAllValues() {\n this.element.textContent = \"{}\";\n }\n}\n"],"names":["StorageValidationError","Error","StorageWrapper","storage","defaults","validators","constructor","this","has","key","get","value","undefined","validateGetValue","getMultiple","keys","result","getAll","Object","set","validateSetValue","setMultiple","data","setAll","delete","deleteMultiple","deleteAll","String","AbstractNongranularStorage","options","validateValidators","keepFresh","elementOptionsMerger","defaultOptions","elementOptions","reduce","acc","refresh","attributeValue","getValue","JSON","parse","oldData","setValue","deleteAllValues","fetchFreshData","dataString","charAt","validateData","ElementAttributeStorage","element","attribute","super","getAttribute","setAttribute","stringify","removeAttribute","ElementStorage","textContent"],"ignoreList":[],"sourceRoot":""}
1
+ {"version":3,"file":"storage.js","mappings":"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","sources":["webpack://wraplet/./src/utils/is.ts","webpack://wraplet/./src/Storage/types/KeyValueStorage.ts","webpack://wraplet/./src/errors.ts","webpack://wraplet/./src/Storage/StorageWrapper.ts","webpack://wraplet/./src/Storage/AbstractNongranularKeyValueStorage.ts","webpack://wraplet/./src/Storage/ElementAttributeStorage.ts","webpack://wraplet/./src/Storage/ElementStorage.ts"],"sourcesContent":["/**\n * Generic guard.\n */\nconst is = (object, symbol) => {\n return (typeof object === \"object\" &&\n object !== null &&\n object[symbol] === true);\n};\nexport { is };\n","import { is } from \"../../utils/is\";\nconst KeyValueStorageSymbol = Symbol(\"KeyValueStorage\");\nexport { KeyValueStorageSymbol };\nexport function isKeyValueStorage(object) {\n return is(object, KeyValueStorageSymbol);\n}\n","export class MissingRequiredChildError extends Error {\n}\nexport class MapError extends Error {\n}\nexport class RequiredChildDestroyedError extends Error {\n}\nexport class ChildrenAreNotAvailableError extends Error {\n}\nexport class StorageValidationError extends Error {\n}\nexport class ChildrenTooManyFoundError extends Error {\n}\nexport class ChildrenAreAlreadyDestroyedError extends Error {\n}\nexport class InternalLogicError extends Error {\n}\n","import { KeyValueStorageSymbol, } from \"./types/KeyValueStorage\";\nimport { StorageValidationError } from \"../errors\";\nexport class StorageWrapper {\n storage;\n defaults;\n validators;\n [KeyValueStorageSymbol] = true;\n constructor(storage, defaults, validators) {\n this.storage = storage;\n this.defaults = defaults;\n this.validators = validators;\n }\n async has(key) {\n return await this.storage.has(key);\n }\n async get(key) {\n const value = await this.storage.get(key);\n // Only validate when the underlying storage actually returned a value.\n if (value !== undefined) {\n this.validateGetValue(key, value);\n return value;\n }\n return this.defaults[key];\n }\n async getMultiple(keys) {\n const multiple = await this.storage.getMultiple(keys);\n const result = { ...multiple };\n for (const key of keys) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async getAll() {\n const all = await this.storage.getAll();\n const result = { ...all };\n for (const key of Object.keys(this.defaults)) {\n if (result[key] === undefined) {\n result[key] = this.defaults[key];\n }\n }\n return result;\n }\n async set(key, value) {\n this.validateSetValue(key, value);\n await this.storage.set(key, value);\n }\n async setMultiple(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setMultiple(data);\n }\n async setAll(data) {\n for (const key in data) {\n this.validateSetValue(key, data[key]);\n }\n await this.storage.setAll(data);\n }\n async delete(key) {\n await this.storage.delete(key);\n }\n async deleteMultiple(keys) {\n await this.storage.deleteMultiple(keys);\n }\n async deleteAll() {\n await this.storage.deleteAll();\n }\n validateGetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Got an invalid value for the key ${String(key)}.`);\n }\n }\n validateSetValue(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n }\n}\n","import { KeyValueStorageSymbol, } from \"./types/KeyValueStorage\";\nimport { StorageValidationError } from \"../errors\";\nexport class AbstractNongranularKeyValueStorage {\n defaults;\n validators;\n [KeyValueStorageSymbol] = true;\n data = null;\n options;\n constructor(defaults, validators, options) {\n this.defaults = defaults;\n this.validators = validators;\n this.validateValidators(validators);\n this.options = {\n keepFresh: true,\n elementOptionsMerger: (defaultOptions, elementOptions) => {\n return { ...defaultOptions, ...elementOptions };\n },\n ...options,\n };\n }\n async has(key) {\n const data = await this.getAll();\n return key in data;\n }\n async get(key) {\n const data = await this.getAll();\n return data[key];\n }\n async getMultiple(keys) {\n const data = await this.getAll();\n return keys.reduce((acc, key) => {\n acc[key] = data[key];\n return acc;\n }, {});\n }\n async getAll() {\n if (this.options.keepFresh) {\n await this.refresh();\n }\n if (!this.data) {\n await this.refresh();\n }\n return this.data;\n }\n async set(key, value) {\n if (!this.validators[key](value)) {\n throw new StorageValidationError(`Attempted to set an invalid value for the key ${String(key)}.`);\n }\n const attributeValue = await this.getValue();\n const data = JSON.parse(attributeValue);\n data[key] = value;\n await this.setAll(data);\n }\n async setMultiple(data) {\n const oldData = await this.getAll();\n await this.setAll({ ...oldData, ...data });\n }\n async setAll(data) {\n await this.setValue(data);\n }\n async delete(key) {\n const data = await this.getAll();\n if (!(key in data)) {\n return;\n }\n delete data[key];\n await this.setValue(data);\n }\n async deleteMultiple(keys) {\n const data = await this.getAll();\n for (const key of keys) {\n delete data[key];\n }\n await this.setAll(data);\n }\n async deleteAll() {\n await this.deleteAllValues();\n await this.refresh();\n }\n async refresh() {\n this.data = await this.fetchFreshData();\n }\n async fetchFreshData() {\n const dataString = await this.getValue();\n if (dataString.charAt(0) !== \"{\") {\n throw new StorageValidationError(`Data has to be defined as an object.`);\n }\n const data = JSON.parse(dataString);\n if (!this.validateData(data)) {\n throw new StorageValidationError(\"Invalid storage value.\");\n }\n return this.options.elementOptionsMerger(this.defaults, data);\n }\n validateData(data) {\n for (const key in data) {\n if (!(key in this.validators)) {\n return false;\n }\n else if (!this.validators[key](data[key])) {\n return false;\n }\n }\n return true;\n }\n validateValidators(validators) {\n for (const key in validators) {\n if (typeof validators[key] !== \"function\") {\n throw new StorageValidationError(`Validator for ${key} is not a function.`);\n }\n }\n }\n}\n","import { AbstractNongranularKeyValueStorage } from \"./AbstractNongranularKeyValueStorage\";\nexport class ElementAttributeStorage extends AbstractNongranularKeyValueStorage {\n element;\n attribute;\n defaults;\n validators;\n constructor(element, attribute, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.attribute = attribute;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.getAttribute(this.attribute) || \"{}\";\n }\n async setValue(value) {\n this.element.setAttribute(this.attribute, JSON.stringify(value));\n }\n async deleteAllValues() {\n this.element.removeAttribute(this.attribute);\n }\n}\n","import { AbstractNongranularKeyValueStorage } from \"./AbstractNongranularKeyValueStorage\";\nexport class ElementStorage extends AbstractNongranularKeyValueStorage {\n element;\n defaults;\n validators;\n constructor(element, defaults, validators, options = {}) {\n super(defaults, validators, options);\n this.element = element;\n this.defaults = defaults;\n this.validators = validators;\n }\n async getValue() {\n return this.element.textContent || \"{}\";\n }\n async setValue(value) {\n this.element.textContent = JSON.stringify(value);\n }\n async deleteAllValues() {\n this.element.textContent = \"{}\";\n }\n}\n"],"names":["KeyValueStorageSymbol","Symbol","isKeyValueStorage","object","is","StorageValidationError","Error","StorageWrapper","storage","defaults","validators","constructor","this","has","key","get","value","undefined","validateGetValue","getMultiple","keys","result","getAll","Object","set","validateSetValue","setMultiple","data","setAll","delete","deleteMultiple","deleteAll","String","AbstractNongranularKeyValueStorage","options","validateValidators","keepFresh","elementOptionsMerger","defaultOptions","elementOptions","reduce","acc","refresh","attributeValue","getValue","JSON","parse","oldData","setValue","deleteAllValues","fetchFreshData","dataString","charAt","validateData","ElementAttributeStorage","element","attribute","super","getAttribute","setAttribute","stringify","removeAttribute","ElementStorage","textContent"],"ignoreList":[],"sourceRoot":""}
@@ -3,8 +3,10 @@ declare const GroupableSymbol: unique symbol;
3
3
  export { GroupableSymbol };
4
4
  export interface Groupable {
5
5
  [GroupableSymbol]: true;
6
- setGroupsExtractor(callback: GroupExtractor): void;
7
- getGroups(): string[];
6
+ wraplet: {
7
+ setGroupsExtractor(callback: GroupExtractor): void;
8
+ getGroups(): string[];
9
+ };
8
10
  }
9
11
  export declare function isGroupable(object: unknown): object is Groupable;
10
12
  declare const defaultGroupableAttribute = "data-js-wraplet-groupable";
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generic guard.
3
+ */
4
+ declare const is: <T extends object>(object: unknown, symbol: symbol) => object is T;
5
+ export { is };
@@ -7,8 +7,3 @@ export type InstantiableReturnType<T> = T extends {
7
7
  export type Nullable<T> = {
8
8
  [K in keyof T]: T[K] | null;
9
9
  };
10
- /**
11
- * Generic guard.
12
- */
13
- declare const is: <T extends object>(object: unknown, symbol: symbol) => object is T;
14
- export { is };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "wraplet",
3
- "version": "0.28.0",
3
+ "version": "0.29.0",
4
4
  "description": "",
5
5
  "main": "dist/index.js",
6
6
  "type": "module",
@@ -1,9 +0,0 @@
1
- import { StorageReadonly } from "./StorageReadonly";
2
- export interface Storage<D extends Record<string, unknown>> extends StorageReadonly<D> {
3
- set: <T extends keyof D>(key: T, value: D[T]) => Promise<void>;
4
- setMultiple: (data: Partial<D>) => Promise<void>;
5
- setAll: (data: D) => Promise<void>;
6
- delete: (key: keyof D) => Promise<void>;
7
- deleteMultiple: (keys: (keyof D)[]) => Promise<void>;
8
- deleteAll: () => Promise<void>;
9
- }
@@ -1 +0,0 @@
1
- export type StorageDefaults<D extends Record<string, unknown>> = Record<keyof D, Exclude<D[keyof D], undefined>>;
@@ -1,3 +0,0 @@
1
- import { WrapletChildrenMap } from "./WrapletChildrenMap";
2
- import { ChildInstance } from "./ChildInstance";
3
- export type DestroyChildListener<M extends WrapletChildrenMap, K extends keyof M> = (wraplet: ChildInstance<M, K>, id: K) => void;
@@ -1,3 +0,0 @@
1
- import { WrapletChildrenMap } from "./WrapletChildrenMap";
2
- import { ChildInstance } from "./ChildInstance";
3
- export type InstantiateChildListener<M extends WrapletChildrenMap, K extends keyof M> = (wraplet: ChildInstance<M, K>, id: K) => void;
@@ -1,15 +0,0 @@
1
- import { DestroyListener } from "./DestroyListener";
2
- declare const WrapletSymbol: unique symbol;
3
- export { WrapletSymbol };
4
- export interface Wraplet<N extends Node = Node> {
5
- [WrapletSymbol]: true;
6
- isInitialized: boolean;
7
- isGettingInitialized: boolean;
8
- isDestroyed: boolean;
9
- isGettingDestroyed: boolean;
10
- accessNode(callback: (node: N) => void): void;
11
- destroy(): Promise<void>;
12
- initialize(): Promise<void>;
13
- addDestroyListener(callback: DestroyListener<N>): void;
14
- }
15
- export declare function isWraplet<N extends Node>(object: unknown): object is Wraplet<N>;
@@ -1,15 +0,0 @@
1
- import { Wraplet } from "./Wraplet";
2
- import { MapWrapper } from "../Map/MapWrapper";
3
- import { WrapletChildrenMap, WrapletChildrenMapWithDefaults } from "./WrapletChildrenMap";
4
- import { CoreInitOptions } from "./CoreInitOptions";
5
- import { Constructable } from "./Utils";
6
- export type WrapletCreator<N extends Node, M extends WrapletChildrenMap> = (args: WrapletCreatorArgs<N, M>) => Wraplet<N>;
7
- export type WrapletCreatorArgs<N extends Node, M extends WrapletChildrenMap> = {
8
- id: keyof M;
9
- Class: Constructable<Wraplet<N>>;
10
- element: Node;
11
- map: MapWrapper<WrapletChildrenMapWithDefaults>;
12
- initOptions: CoreInitOptions<M>;
13
- args: unknown[];
14
- defaultCreator: WrapletCreator<N, M>;
15
- };