@wcstack/storage 1.9.0 → 1.9.1

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/dist/auto.js CHANGED
@@ -1,3 +1,3 @@
1
- import { bootstrapStorage } from "./index.esm.js";
2
-
3
- bootstrapStorage();
1
+ import { bootstrapStorage } from "./index.esm.js";
2
+
3
+ bootstrapStorage();
package/dist/auto.min.js CHANGED
@@ -1,3 +1,3 @@
1
- import { bootstrapStorage } from "./index.esm.min.js";
2
-
3
- bootstrapStorage();
1
+ import { bootstrapStorage } from "./index.esm.min.js";
2
+
3
+ bootstrapStorage();
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/StorageCore.ts","../src/autoTrigger.ts","../src/components/Storage.ts","../src/registerComponents.ts","../src/bootstrapStorage.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\ninterface IInternalConfig extends IConfig {\n autoTrigger: boolean;\n triggerAttribute: string;\n tagNames: {\n storage: string;\n };\n}\n\nconst _config: IInternalConfig = {\n autoTrigger: true,\n triggerAttribute: \"data-storagetarget\",\n tagNames: {\n storage: \"wcs-storage\",\n },\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.autoTrigger === \"boolean\") {\n _config.autoTrigger = partialConfig.autoTrigger;\n }\n if (typeof partialConfig.triggerAttribute === \"string\") {\n _config.triggerAttribute = partialConfig.triggerAttribute;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","export function raiseError(message: string): never {\n throw new Error(`[@wcstack/storage] ${message}`);\n}\n","import { raiseError } from \"../raiseError.js\";\nimport { IWcBindable, StorageType } from \"../types.js\";\n\nexport class StorageCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"value\", event: \"wcs-storage:value-changed\", getter: (e: Event) => (e as CustomEvent).detail },\n { name: \"loading\", event: \"wcs-storage:loading-changed\" },\n { name: \"error\", event: \"wcs-storage:error\" },\n ],\n };\n\n private _target: EventTarget;\n private _value: any = null;\n private _loading: boolean = false;\n private _error: any = null;\n private _key: string = \"\";\n private _type: StorageType = \"local\";\n private _storageListener: ((e: StorageEvent) => void) | null = null;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get value(): any {\n return this._value;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get error(): any {\n return this._error;\n }\n\n get key(): string {\n return this._key;\n }\n\n set key(value: string) {\n this._key = value;\n }\n\n get type(): StorageType {\n return this._type;\n }\n\n set type(value: StorageType) {\n if (value !== \"local\" && value !== \"session\") {\n raiseError(`Invalid storage type: \"${value}\". Must be \"local\" or \"session\".`);\n }\n this._type = value;\n }\n\n private _getStorage(): globalThis.Storage {\n return this._type === \"session\" ? sessionStorage : localStorage;\n }\n\n private _setLoading(loading: boolean): void {\n this._loading = loading;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:loading-changed\", {\n detail: loading,\n bubbles: true,\n }));\n }\n\n private _setError(error: any): void {\n this._error = error;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:error\", {\n detail: error,\n bubbles: true,\n }));\n }\n\n private _setValue(value: any): void {\n this._value = value;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:value-changed\", {\n detail: value,\n bubbles: true,\n }));\n }\n\n load(): any {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n const raw = storage.getItem(this._key);\n\n if (raw === null) {\n this._setValue(null);\n } else {\n try {\n this._setValue(JSON.parse(raw));\n } catch {\n this._setValue(raw);\n }\n }\n\n this._setLoading(false);\n return this._value;\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n return null;\n }\n }\n\n save(value: any): void {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n\n if (value === null || value === undefined) {\n storage.removeItem(this._key);\n } else if (typeof value === \"string\") {\n storage.setItem(this._key, value);\n } else {\n storage.setItem(this._key, JSON.stringify(value));\n }\n\n this._setValue(value);\n this._setLoading(false);\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n }\n }\n\n remove(): void {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n storage.removeItem(this._key);\n this._setValue(null);\n this._setLoading(false);\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n }\n }\n\n startSync(): void {\n if (this._storageListener) return;\n\n this._storageListener = (e: StorageEvent) => {\n if (e.key !== this._key) return;\n if (this._type === \"session\") return;\n\n if (e.newValue === null) {\n this._setValue(null);\n } else {\n try {\n this._setValue(JSON.parse(e.newValue));\n } catch {\n this._setValue(e.newValue);\n }\n }\n };\n\n globalThis.addEventListener(\"storage\", this._storageListener);\n }\n\n stopSync(): void {\n if (!this._storageListener) return;\n globalThis.removeEventListener(\"storage\", this._storageListener);\n this._storageListener = null;\n }\n}\n","import { config } from \"./config.js\";\nimport { Storage } from \"./components/Storage.js\";\n\nlet registered = false;\n\nfunction handleClick(event: Event): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\n if (!triggerElement) return;\n\n const storageId = triggerElement.getAttribute(config.triggerAttribute);\n if (!storageId) return;\n\n const storageElement = document.getElementById(storageId) as Storage | null;\n if (!storageElement || !(storageElement instanceof Storage)) return;\n\n event.preventDefault();\n storageElement.save();\n}\n\nexport function registerAutoTrigger(): void {\n if (registered) return;\n registered = true;\n document.addEventListener(\"click\", handleClick);\n}\n\nexport function unregisterAutoTrigger(): void {\n if (!registered) return;\n registered = false;\n document.removeEventListener(\"click\", handleClick);\n}\n","import { config } from \"../config.js\";\nimport { IWcBindable, StorageType } from \"../types.js\";\nimport { StorageCore } from \"../core/StorageCore.js\";\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\n\nexport class Storage extends HTMLElement {\n static hasConnectedCallbackPromise = true;\n static wcBindable: IWcBindable = {\n ...StorageCore.wcBindable,\n properties: [\n ...StorageCore.wcBindable.properties,\n { name: \"trigger\", event: \"wcs-storage:trigger-changed\" },\n ],\n };\n static get observedAttributes(): string[] { return [\"key\", \"type\"]; }\n\n private _core: StorageCore;\n private _trigger: boolean = false;\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\n\n constructor() {\n super();\n this._core = new StorageCore(this);\n }\n\n get key(): string {\n return this.getAttribute(\"key\") || \"\";\n }\n\n set key(value: string) {\n this.setAttribute(\"key\", value);\n }\n\n get type(): StorageType {\n return (this.getAttribute(\"type\") as StorageType) || \"local\";\n }\n\n set type(value: StorageType) {\n this.setAttribute(\"type\", value);\n }\n\n get value(): any {\n return this._core.value;\n }\n\n set value(v: any) {\n if (!this.manual) {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.save(v);\n }\n }\n\n get loading(): boolean {\n return this._core.loading;\n }\n\n get error(): any {\n return this._core.error;\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get manual(): boolean {\n return this.hasAttribute(\"manual\");\n }\n\n set manual(value: boolean) {\n if (value) {\n this.setAttribute(\"manual\", \"\");\n } else {\n this.removeAttribute(\"manual\");\n }\n }\n\n get trigger(): boolean {\n return this._trigger;\n }\n\n set trigger(value: boolean) {\n const v = !!value;\n if (v) {\n this._trigger = true;\n this.save();\n this._trigger = false;\n this.dispatchEvent(new CustomEvent(\"wcs-storage:trigger-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n load(): any {\n this._core.key = this.key;\n this._core.type = this.type;\n return this._core.load();\n }\n\n save(): void {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.save(this._core.value);\n }\n\n remove(): void {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.remove();\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n if (!this.isConnected) return;\n if (name === \"key\" && newValue && !this.manual) {\n this.load();\n }\n if (name === \"type\") {\n this._core.type = (newValue as StorageType) || \"local\";\n }\n }\n\n connectedCallback(): void {\n this.style.display = \"none\";\n if (config.autoTrigger) {\n registerAutoTrigger();\n }\n if (!this.manual && this.key) {\n this.load();\n }\n this._core.startSync();\n this._connectedCallbackPromise = Promise.resolve();\n }\n\n disconnectedCallback(): void {\n this._core.stopSync();\n }\n}\n","import { Storage } from \"./components/Storage.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents(): void {\n if (!customElements.get(config.tagNames.storage)) {\n customElements.define(config.tagNames.storage, Storage);\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapStorage(userConfig?: IWritableConfig): void {\n if (userConfig) {\n setConfig(userConfig);\n }\n registerComponents();\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/StorageCore.ts","../src/autoTrigger.ts","../src/components/Storage.ts","../src/registerComponents.ts","../src/bootstrapStorage.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n storage: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-storagetarget\",\r\n tagNames: {\r\n storage: \"wcs-storage\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/storage] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable, StorageType } from \"../types.js\";\r\n\r\nexport class StorageCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-storage:value-changed\", getter: (e: Event) => (e as CustomEvent).detail },\r\n { name: \"loading\", event: \"wcs-storage:loading-changed\" },\r\n { name: \"error\", event: \"wcs-storage:error\" },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _key: string = \"\";\r\n private _type: StorageType = \"local\";\r\n private _storageListener: ((e: StorageEvent) => void) | null = null;\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get key(): string {\r\n return this._key;\r\n }\r\n\r\n set key(value: string) {\r\n this._key = value;\r\n }\r\n\r\n get type(): StorageType {\r\n return this._type;\r\n }\r\n\r\n set type(value: StorageType) {\r\n if (value !== \"local\" && value !== \"session\") {\r\n raiseError(`Invalid storage type: \"${value}\". Must be \"local\" or \"session\".`);\r\n }\r\n this._type = value;\r\n }\r\n\r\n private _getStorage(): globalThis.Storage {\r\n return this._type === \"session\" ? sessionStorage : localStorage;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setValue(value: any): void {\r\n this._value = value;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:value-changed\", {\r\n detail: value,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n load(): any {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n const raw = storage.getItem(this._key);\r\n\r\n if (raw === null) {\r\n this._setValue(null);\r\n } else {\r\n try {\r\n this._setValue(JSON.parse(raw));\r\n } catch {\r\n this._setValue(raw);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n }\r\n\r\n save(value: any): void {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n\r\n if (value === null || value === undefined) {\r\n storage.removeItem(this._key);\r\n } else if (typeof value === \"string\") {\r\n storage.setItem(this._key, value);\r\n } else {\r\n storage.setItem(this._key, JSON.stringify(value));\r\n }\r\n\r\n this._setValue(value);\r\n this._setLoading(false);\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n }\r\n }\r\n\r\n remove(): void {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n storage.removeItem(this._key);\r\n this._setValue(null);\r\n this._setLoading(false);\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n }\r\n }\r\n\r\n startSync(): void {\r\n if (this._storageListener) return;\r\n\r\n this._storageListener = (e: StorageEvent) => {\r\n if (e.key !== this._key) return;\r\n if (this._type === \"session\") return;\r\n\r\n if (e.newValue === null) {\r\n this._setValue(null);\r\n } else {\r\n try {\r\n this._setValue(JSON.parse(e.newValue));\r\n } catch {\r\n this._setValue(e.newValue);\r\n }\r\n }\r\n };\r\n\r\n globalThis.addEventListener(\"storage\", this._storageListener);\r\n }\r\n\r\n stopSync(): void {\r\n if (!this._storageListener) return;\r\n globalThis.removeEventListener(\"storage\", this._storageListener);\r\n this._storageListener = null;\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Storage } from \"./components/Storage.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const storageId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!storageId) return;\r\n\r\n const storageElement = document.getElementById(storageId) as Storage | null;\r\n if (!storageElement || !(storageElement instanceof Storage)) return;\r\n\r\n event.preventDefault();\r\n storageElement.save();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable, StorageType } from \"../types.js\";\r\nimport { StorageCore } from \"../core/StorageCore.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class Storage extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...StorageCore.wcBindable,\r\n properties: [\r\n ...StorageCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-storage:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"key\", \"type\"]; }\r\n\r\n private _core: StorageCore;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new StorageCore(this);\r\n }\r\n\r\n get key(): string {\r\n return this.getAttribute(\"key\") || \"\";\r\n }\r\n\r\n set key(value: string) {\r\n this.setAttribute(\"key\", value);\r\n }\r\n\r\n get type(): StorageType {\r\n return (this.getAttribute(\"type\") as StorageType) || \"local\";\r\n }\r\n\r\n set type(value: StorageType) {\r\n this.setAttribute(\"type\", value);\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n set value(v: any) {\r\n if (!this.manual) {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.save(v);\r\n }\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.save();\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-storage:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n }\r\n }\r\n\r\n load(): any {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n return this._core.load();\r\n }\r\n\r\n save(): void {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.save(this._core.value);\r\n }\r\n\r\n remove(): void {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.remove();\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (!this.isConnected) return;\r\n if (name === \"key\" && newValue && !this.manual) {\r\n this.load();\r\n }\r\n if (name === \"type\") {\r\n this._core.type = (newValue as StorageType) || \"local\";\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.key) {\r\n this.load();\r\n }\r\n this._core.startSync();\r\n this._connectedCallbackPromise = Promise.resolve();\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this._core.stopSync();\r\n }\r\n}\r\n","import { Storage } from \"./components/Storage.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.storage)) {\r\n customElements.define(config.tagNames.storage, Storage);\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapStorage(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/StorageCore.ts","../src/autoTrigger.ts","../src/components/Storage.ts","../src/bootstrapStorage.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\n\ninterface IInternalConfig extends IConfig {\n autoTrigger: boolean;\n triggerAttribute: string;\n tagNames: {\n storage: string;\n };\n}\n\nconst _config: IInternalConfig = {\n autoTrigger: true,\n triggerAttribute: \"data-storagetarget\",\n tagNames: {\n storage: \"wcs-storage\",\n },\n};\n\nfunction deepFreeze<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n Object.freeze(obj);\n for (const key of Object.keys(obj)) {\n deepFreeze((obj as Record<string, unknown>)[key]);\n }\n return obj;\n}\n\nfunction deepClone<T>(obj: T): T {\n if (obj === null || typeof obj !== \"object\") return obj;\n const clone: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\n }\n return clone as T;\n}\n\nlet frozenConfig: IConfig | null = null;\n\nexport const config: IConfig = _config as IConfig;\n\nexport function getConfig(): IConfig {\n if (!frozenConfig) {\n frozenConfig = deepFreeze(deepClone(_config));\n }\n return frozenConfig;\n}\n\nexport function setConfig(partialConfig: IWritableConfig): void {\n if (typeof partialConfig.autoTrigger === \"boolean\") {\n _config.autoTrigger = partialConfig.autoTrigger;\n }\n if (typeof partialConfig.triggerAttribute === \"string\") {\n _config.triggerAttribute = partialConfig.triggerAttribute;\n }\n if (partialConfig.tagNames) {\n Object.assign(_config.tagNames, partialConfig.tagNames);\n }\n frozenConfig = null;\n}\n","export function raiseError(message: string): never {\n throw new Error(`[@wcstack/storage] ${message}`);\n}\n","import { raiseError } from \"../raiseError.js\";\nimport { IWcBindable, StorageType } from \"../types.js\";\n\nexport class StorageCore extends EventTarget {\n static wcBindable: IWcBindable = {\n protocol: \"wc-bindable\",\n version: 1,\n properties: [\n { name: \"value\", event: \"wcs-storage:value-changed\", getter: (e: Event) => (e as CustomEvent).detail },\n { name: \"loading\", event: \"wcs-storage:loading-changed\" },\n { name: \"error\", event: \"wcs-storage:error\" },\n ],\n };\n\n private _target: EventTarget;\n private _value: any = null;\n private _loading: boolean = false;\n private _error: any = null;\n private _key: string = \"\";\n private _type: StorageType = \"local\";\n private _storageListener: ((e: StorageEvent) => void) | null = null;\n\n constructor(target?: EventTarget) {\n super();\n this._target = target ?? this;\n }\n\n get value(): any {\n return this._value;\n }\n\n get loading(): boolean {\n return this._loading;\n }\n\n get error(): any {\n return this._error;\n }\n\n get key(): string {\n return this._key;\n }\n\n set key(value: string) {\n this._key = value;\n }\n\n get type(): StorageType {\n return this._type;\n }\n\n set type(value: StorageType) {\n if (value !== \"local\" && value !== \"session\") {\n raiseError(`Invalid storage type: \"${value}\". Must be \"local\" or \"session\".`);\n }\n this._type = value;\n }\n\n private _getStorage(): globalThis.Storage {\n return this._type === \"session\" ? sessionStorage : localStorage;\n }\n\n private _setLoading(loading: boolean): void {\n this._loading = loading;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:loading-changed\", {\n detail: loading,\n bubbles: true,\n }));\n }\n\n private _setError(error: any): void {\n this._error = error;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:error\", {\n detail: error,\n bubbles: true,\n }));\n }\n\n private _setValue(value: any): void {\n this._value = value;\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:value-changed\", {\n detail: value,\n bubbles: true,\n }));\n }\n\n load(): any {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n const raw = storage.getItem(this._key);\n\n if (raw === null) {\n this._setValue(null);\n } else {\n try {\n this._setValue(JSON.parse(raw));\n } catch {\n this._setValue(raw);\n }\n }\n\n this._setLoading(false);\n return this._value;\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n return null;\n }\n }\n\n save(value: any): void {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n\n if (value === null || value === undefined) {\n storage.removeItem(this._key);\n } else if (typeof value === \"string\") {\n storage.setItem(this._key, value);\n } else {\n storage.setItem(this._key, JSON.stringify(value));\n }\n\n this._setValue(value);\n this._setLoading(false);\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n }\n }\n\n remove(): void {\n if (!this._key) {\n raiseError(\"key is required.\");\n }\n\n this._setLoading(true);\n this._setError(null);\n\n try {\n const storage = this._getStorage();\n storage.removeItem(this._key);\n this._setValue(null);\n this._setLoading(false);\n } catch (e: any) {\n this._setError(e);\n this._setLoading(false);\n }\n }\n\n startSync(): void {\n if (this._storageListener) return;\n\n this._storageListener = (e: StorageEvent) => {\n if (e.key !== this._key) return;\n if (this._type === \"session\") return;\n\n if (e.newValue === null) {\n this._setValue(null);\n } else {\n try {\n this._setValue(JSON.parse(e.newValue));\n } catch {\n this._setValue(e.newValue);\n }\n }\n };\n\n globalThis.addEventListener(\"storage\", this._storageListener);\n }\n\n stopSync(): void {\n if (!this._storageListener) return;\n globalThis.removeEventListener(\"storage\", this._storageListener);\n this._storageListener = null;\n }\n}\n","import { config } from \"./config.js\";\nimport { Storage } from \"./components/Storage.js\";\n\nlet registered = false;\n\nfunction handleClick(event: Event): void {\n const target = event.target;\n if (!(target instanceof Element)) return;\n\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\n if (!triggerElement) return;\n\n const storageId = triggerElement.getAttribute(config.triggerAttribute);\n if (!storageId) return;\n\n const storageElement = document.getElementById(storageId) as Storage | null;\n if (!storageElement || !(storageElement instanceof Storage)) return;\n\n event.preventDefault();\n storageElement.save();\n}\n\nexport function registerAutoTrigger(): void {\n if (registered) return;\n registered = true;\n document.addEventListener(\"click\", handleClick);\n}\n\nexport function unregisterAutoTrigger(): void {\n if (!registered) return;\n registered = false;\n document.removeEventListener(\"click\", handleClick);\n}\n","import { config } from \"../config.js\";\nimport { IWcBindable, StorageType } from \"../types.js\";\nimport { StorageCore } from \"../core/StorageCore.js\";\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\n\nexport class Storage extends HTMLElement {\n static hasConnectedCallbackPromise = true;\n static wcBindable: IWcBindable = {\n ...StorageCore.wcBindable,\n properties: [\n ...StorageCore.wcBindable.properties,\n { name: \"trigger\", event: \"wcs-storage:trigger-changed\" },\n ],\n };\n static get observedAttributes(): string[] { return [\"key\", \"type\"]; }\n\n private _core: StorageCore;\n private _trigger: boolean = false;\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\n\n constructor() {\n super();\n this._core = new StorageCore(this);\n }\n\n get key(): string {\n return this.getAttribute(\"key\") || \"\";\n }\n\n set key(value: string) {\n this.setAttribute(\"key\", value);\n }\n\n get type(): StorageType {\n return (this.getAttribute(\"type\") as StorageType) || \"local\";\n }\n\n set type(value: StorageType) {\n this.setAttribute(\"type\", value);\n }\n\n get value(): any {\n return this._core.value;\n }\n\n set value(v: any) {\n if (!this.manual) {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.save(v);\n }\n }\n\n get loading(): boolean {\n return this._core.loading;\n }\n\n get error(): any {\n return this._core.error;\n }\n\n get connectedCallbackPromise(): Promise<void> {\n return this._connectedCallbackPromise;\n }\n\n get manual(): boolean {\n return this.hasAttribute(\"manual\");\n }\n\n set manual(value: boolean) {\n if (value) {\n this.setAttribute(\"manual\", \"\");\n } else {\n this.removeAttribute(\"manual\");\n }\n }\n\n get trigger(): boolean {\n return this._trigger;\n }\n\n set trigger(value: boolean) {\n const v = !!value;\n if (v) {\n this._trigger = true;\n this.save();\n this._trigger = false;\n this.dispatchEvent(new CustomEvent(\"wcs-storage:trigger-changed\", {\n detail: false,\n bubbles: true,\n }));\n }\n }\n\n load(): any {\n this._core.key = this.key;\n this._core.type = this.type;\n return this._core.load();\n }\n\n save(): void {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.save(this._core.value);\n }\n\n remove(): void {\n this._core.key = this.key;\n this._core.type = this.type;\n this._core.remove();\n }\n\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\n if (!this.isConnected) return;\n if (name === \"key\" && newValue && !this.manual) {\n this.load();\n }\n if (name === \"type\") {\n this._core.type = (newValue as StorageType) || \"local\";\n }\n }\n\n connectedCallback(): void {\n this.style.display = \"none\";\n if (config.autoTrigger) {\n registerAutoTrigger();\n }\n if (!this.manual && this.key) {\n this.load();\n }\n this._core.startSync();\n this._connectedCallbackPromise = Promise.resolve();\n }\n\n disconnectedCallback(): void {\n this._core.stopSync();\n }\n}\n","import { setConfig } from \"./config.js\";\nimport { registerComponents } from \"./registerComponents.js\";\nimport { IWritableConfig } from \"./types.js\";\n\nexport function bootstrapStorage(userConfig?: IWritableConfig): void {\n if (userConfig) {\n setConfig(userConfig);\n }\n registerComponents();\n}\n","import { Storage } from \"./components/Storage.js\";\nimport { config } from \"./config.js\";\n\nexport function registerComponents(): void {\n if (!customElements.get(config.tagNames.storage)) {\n customElements.define(config.tagNames.storage, Storage);\n }\n}\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","storage","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","raiseError","message","Error","StorageCore","EventTarget","static","protocol","version","properties","name","event","getter","e","detail","_target","_value","_loading","_error","_key","_type","_storageListener","constructor","target","super","this","value","loading","error","type","_getStorage","sessionStorage","localStorage","_setLoading","dispatchEvent","CustomEvent","bubbles","_setError","_setValue","load","raw","getItem","JSON","parse","save","removeItem","setItem","stringify","remove","startSync","newValue","globalThis","addEventListener","stopSync","removeEventListener","registered","handleClick","Element","triggerElement","closest","storageId","getAttribute","storageElement","document","getElementById","Storage","preventDefault","HTMLElement","wcBindable","observedAttributes","_core","_trigger","_connectedCallbackPromise","Promise","resolve","setAttribute","v","manual","connectedCallbackPromise","hasAttribute","removeAttribute","trigger","attributeChangedCallback","_oldValue","isConnected","connectedCallback","style","display","disconnectedCallback","bootstrapStorage","userConfig","partialConfig","assign","customElements","get","define"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.min.js","sources":["../src/config.ts","../src/raiseError.ts","../src/core/StorageCore.ts","../src/autoTrigger.ts","../src/components/Storage.ts","../src/bootstrapStorage.ts","../src/registerComponents.ts"],"sourcesContent":["import { IConfig, IWritableConfig } from \"./types.js\";\r\n\r\ninterface IInternalConfig extends IConfig {\r\n autoTrigger: boolean;\r\n triggerAttribute: string;\r\n tagNames: {\r\n storage: string;\r\n };\r\n}\r\n\r\nconst _config: IInternalConfig = {\r\n autoTrigger: true,\r\n triggerAttribute: \"data-storagetarget\",\r\n tagNames: {\r\n storage: \"wcs-storage\",\r\n },\r\n};\r\n\r\nfunction deepFreeze<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n Object.freeze(obj);\r\n for (const key of Object.keys(obj)) {\r\n deepFreeze((obj as Record<string, unknown>)[key]);\r\n }\r\n return obj;\r\n}\r\n\r\nfunction deepClone<T>(obj: T): T {\r\n if (obj === null || typeof obj !== \"object\") return obj;\r\n const clone: Record<string, unknown> = {};\r\n for (const key of Object.keys(obj)) {\r\n clone[key] = deepClone((obj as Record<string, unknown>)[key]);\r\n }\r\n return clone as T;\r\n}\r\n\r\nlet frozenConfig: IConfig | null = null;\r\n\r\nexport const config: IConfig = _config as IConfig;\r\n\r\nexport function getConfig(): IConfig {\r\n if (!frozenConfig) {\r\n frozenConfig = deepFreeze(deepClone(_config));\r\n }\r\n return frozenConfig;\r\n}\r\n\r\nexport function setConfig(partialConfig: IWritableConfig): void {\r\n if (typeof partialConfig.autoTrigger === \"boolean\") {\r\n _config.autoTrigger = partialConfig.autoTrigger;\r\n }\r\n if (typeof partialConfig.triggerAttribute === \"string\") {\r\n _config.triggerAttribute = partialConfig.triggerAttribute;\r\n }\r\n if (partialConfig.tagNames) {\r\n Object.assign(_config.tagNames, partialConfig.tagNames);\r\n }\r\n frozenConfig = null;\r\n}\r\n","export function raiseError(message: string): never {\r\n throw new Error(`[@wcstack/storage] ${message}`);\r\n}\r\n","import { raiseError } from \"../raiseError.js\";\r\nimport { IWcBindable, StorageType } from \"../types.js\";\r\n\r\nexport class StorageCore extends EventTarget {\r\n static wcBindable: IWcBindable = {\r\n protocol: \"wc-bindable\",\r\n version: 1,\r\n properties: [\r\n { name: \"value\", event: \"wcs-storage:value-changed\", getter: (e: Event) => (e as CustomEvent).detail },\r\n { name: \"loading\", event: \"wcs-storage:loading-changed\" },\r\n { name: \"error\", event: \"wcs-storage:error\" },\r\n ],\r\n };\r\n\r\n private _target: EventTarget;\r\n private _value: any = null;\r\n private _loading: boolean = false;\r\n private _error: any = null;\r\n private _key: string = \"\";\r\n private _type: StorageType = \"local\";\r\n private _storageListener: ((e: StorageEvent) => void) | null = null;\r\n\r\n constructor(target?: EventTarget) {\r\n super();\r\n this._target = target ?? this;\r\n }\r\n\r\n get value(): any {\r\n return this._value;\r\n }\r\n\r\n get loading(): boolean {\r\n return this._loading;\r\n }\r\n\r\n get error(): any {\r\n return this._error;\r\n }\r\n\r\n get key(): string {\r\n return this._key;\r\n }\r\n\r\n set key(value: string) {\r\n this._key = value;\r\n }\r\n\r\n get type(): StorageType {\r\n return this._type;\r\n }\r\n\r\n set type(value: StorageType) {\r\n if (value !== \"local\" && value !== \"session\") {\r\n raiseError(`Invalid storage type: \"${value}\". Must be \"local\" or \"session\".`);\r\n }\r\n this._type = value;\r\n }\r\n\r\n private _getStorage(): globalThis.Storage {\r\n return this._type === \"session\" ? sessionStorage : localStorage;\r\n }\r\n\r\n private _setLoading(loading: boolean): void {\r\n this._loading = loading;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:loading-changed\", {\r\n detail: loading,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setError(error: any): void {\r\n this._error = error;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:error\", {\r\n detail: error,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n private _setValue(value: any): void {\r\n this._value = value;\r\n this._target.dispatchEvent(new CustomEvent(\"wcs-storage:value-changed\", {\r\n detail: value,\r\n bubbles: true,\r\n }));\r\n }\r\n\r\n load(): any {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n const raw = storage.getItem(this._key);\r\n\r\n if (raw === null) {\r\n this._setValue(null);\r\n } else {\r\n try {\r\n this._setValue(JSON.parse(raw));\r\n } catch {\r\n this._setValue(raw);\r\n }\r\n }\r\n\r\n this._setLoading(false);\r\n return this._value;\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n return null;\r\n }\r\n }\r\n\r\n save(value: any): void {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n\r\n if (value === null || value === undefined) {\r\n storage.removeItem(this._key);\r\n } else if (typeof value === \"string\") {\r\n storage.setItem(this._key, value);\r\n } else {\r\n storage.setItem(this._key, JSON.stringify(value));\r\n }\r\n\r\n this._setValue(value);\r\n this._setLoading(false);\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n }\r\n }\r\n\r\n remove(): void {\r\n if (!this._key) {\r\n raiseError(\"key is required.\");\r\n }\r\n\r\n this._setLoading(true);\r\n this._setError(null);\r\n\r\n try {\r\n const storage = this._getStorage();\r\n storage.removeItem(this._key);\r\n this._setValue(null);\r\n this._setLoading(false);\r\n } catch (e: any) {\r\n this._setError(e);\r\n this._setLoading(false);\r\n }\r\n }\r\n\r\n startSync(): void {\r\n if (this._storageListener) return;\r\n\r\n this._storageListener = (e: StorageEvent) => {\r\n if (e.key !== this._key) return;\r\n if (this._type === \"session\") return;\r\n\r\n if (e.newValue === null) {\r\n this._setValue(null);\r\n } else {\r\n try {\r\n this._setValue(JSON.parse(e.newValue));\r\n } catch {\r\n this._setValue(e.newValue);\r\n }\r\n }\r\n };\r\n\r\n globalThis.addEventListener(\"storage\", this._storageListener);\r\n }\r\n\r\n stopSync(): void {\r\n if (!this._storageListener) return;\r\n globalThis.removeEventListener(\"storage\", this._storageListener);\r\n this._storageListener = null;\r\n }\r\n}\r\n","import { config } from \"./config.js\";\r\nimport { Storage } from \"./components/Storage.js\";\r\n\r\nlet registered = false;\r\n\r\nfunction handleClick(event: Event): void {\r\n const target = event.target;\r\n if (!(target instanceof Element)) return;\r\n\r\n const triggerElement = target.closest<Element>(`[${config.triggerAttribute}]`);\r\n if (!triggerElement) return;\r\n\r\n const storageId = triggerElement.getAttribute(config.triggerAttribute);\r\n if (!storageId) return;\r\n\r\n const storageElement = document.getElementById(storageId) as Storage | null;\r\n if (!storageElement || !(storageElement instanceof Storage)) return;\r\n\r\n event.preventDefault();\r\n storageElement.save();\r\n}\r\n\r\nexport function registerAutoTrigger(): void {\r\n if (registered) return;\r\n registered = true;\r\n document.addEventListener(\"click\", handleClick);\r\n}\r\n\r\nexport function unregisterAutoTrigger(): void {\r\n if (!registered) return;\r\n registered = false;\r\n document.removeEventListener(\"click\", handleClick);\r\n}\r\n","import { config } from \"../config.js\";\r\nimport { IWcBindable, StorageType } from \"../types.js\";\r\nimport { StorageCore } from \"../core/StorageCore.js\";\r\nimport { registerAutoTrigger } from \"../autoTrigger.js\";\r\n\r\nexport class Storage extends HTMLElement {\r\n static hasConnectedCallbackPromise = true;\r\n static wcBindable: IWcBindable = {\r\n ...StorageCore.wcBindable,\r\n properties: [\r\n ...StorageCore.wcBindable.properties,\r\n { name: \"trigger\", event: \"wcs-storage:trigger-changed\" },\r\n ],\r\n };\r\n static get observedAttributes(): string[] { return [\"key\", \"type\"]; }\r\n\r\n private _core: StorageCore;\r\n private _trigger: boolean = false;\r\n private _connectedCallbackPromise: Promise<void> = Promise.resolve();\r\n\r\n constructor() {\r\n super();\r\n this._core = new StorageCore(this);\r\n }\r\n\r\n get key(): string {\r\n return this.getAttribute(\"key\") || \"\";\r\n }\r\n\r\n set key(value: string) {\r\n this.setAttribute(\"key\", value);\r\n }\r\n\r\n get type(): StorageType {\r\n return (this.getAttribute(\"type\") as StorageType) || \"local\";\r\n }\r\n\r\n set type(value: StorageType) {\r\n this.setAttribute(\"type\", value);\r\n }\r\n\r\n get value(): any {\r\n return this._core.value;\r\n }\r\n\r\n set value(v: any) {\r\n if (!this.manual) {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.save(v);\r\n }\r\n }\r\n\r\n get loading(): boolean {\r\n return this._core.loading;\r\n }\r\n\r\n get error(): any {\r\n return this._core.error;\r\n }\r\n\r\n get connectedCallbackPromise(): Promise<void> {\r\n return this._connectedCallbackPromise;\r\n }\r\n\r\n get manual(): boolean {\r\n return this.hasAttribute(\"manual\");\r\n }\r\n\r\n set manual(value: boolean) {\r\n if (value) {\r\n this.setAttribute(\"manual\", \"\");\r\n } else {\r\n this.removeAttribute(\"manual\");\r\n }\r\n }\r\n\r\n get trigger(): boolean {\r\n return this._trigger;\r\n }\r\n\r\n set trigger(value: boolean) {\r\n const v = !!value;\r\n if (v) {\r\n this._trigger = true;\r\n this.save();\r\n this._trigger = false;\r\n this.dispatchEvent(new CustomEvent(\"wcs-storage:trigger-changed\", {\r\n detail: false,\r\n bubbles: true,\r\n }));\r\n }\r\n }\r\n\r\n load(): any {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n return this._core.load();\r\n }\r\n\r\n save(): void {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.save(this._core.value);\r\n }\r\n\r\n remove(): void {\r\n this._core.key = this.key;\r\n this._core.type = this.type;\r\n this._core.remove();\r\n }\r\n\r\n attributeChangedCallback(name: string, _oldValue: string | null, newValue: string | null): void {\r\n if (!this.isConnected) return;\r\n if (name === \"key\" && newValue && !this.manual) {\r\n this.load();\r\n }\r\n if (name === \"type\") {\r\n this._core.type = (newValue as StorageType) || \"local\";\r\n }\r\n }\r\n\r\n connectedCallback(): void {\r\n this.style.display = \"none\";\r\n if (config.autoTrigger) {\r\n registerAutoTrigger();\r\n }\r\n if (!this.manual && this.key) {\r\n this.load();\r\n }\r\n this._core.startSync();\r\n this._connectedCallbackPromise = Promise.resolve();\r\n }\r\n\r\n disconnectedCallback(): void {\r\n this._core.stopSync();\r\n }\r\n}\r\n","import { setConfig } from \"./config.js\";\r\nimport { registerComponents } from \"./registerComponents.js\";\r\nimport { IWritableConfig } from \"./types.js\";\r\n\r\nexport function bootstrapStorage(userConfig?: IWritableConfig): void {\r\n if (userConfig) {\r\n setConfig(userConfig);\r\n }\r\n registerComponents();\r\n}\r\n","import { Storage } from \"./components/Storage.js\";\r\nimport { config } from \"./config.js\";\r\n\r\nexport function registerComponents(): void {\r\n if (!customElements.get(config.tagNames.storage)) {\r\n customElements.define(config.tagNames.storage, Storage);\r\n }\r\n}\r\n"],"names":["_config","autoTrigger","triggerAttribute","tagNames","storage","deepFreeze","obj","Object","freeze","key","keys","deepClone","clone","frozenConfig","config","getConfig","raiseError","message","Error","StorageCore","EventTarget","static","protocol","version","properties","name","event","getter","e","detail","_target","_value","_loading","_error","_key","_type","_storageListener","constructor","target","super","this","value","loading","error","type","_getStorage","sessionStorage","localStorage","_setLoading","dispatchEvent","CustomEvent","bubbles","_setError","_setValue","load","raw","getItem","JSON","parse","save","removeItem","setItem","stringify","remove","startSync","newValue","globalThis","addEventListener","stopSync","removeEventListener","registered","handleClick","Element","triggerElement","closest","storageId","getAttribute","storageElement","document","getElementById","Storage","preventDefault","HTMLElement","wcBindable","observedAttributes","_core","_trigger","_connectedCallbackPromise","Promise","resolve","setAttribute","v","manual","connectedCallbackPromise","hasAttribute","removeAttribute","trigger","attributeChangedCallback","_oldValue","isConnected","connectedCallback","style","display","disconnectedCallback","bootstrapStorage","userConfig","partialConfig","assign","customElements","get","define"],"mappings":"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"}
package/package.json CHANGED
@@ -1,72 +1,72 @@
1
- {
2
- "name": "@wcstack/storage",
3
- "version": "1.9.0",
4
- "description": "Declarative persistent storage component for Web Components. Framework-agnostic localStorage/sessionStorage via wc-bindable-protocol.",
5
- "type": "module",
6
- "main": "./dist/index.esm.js",
7
- "module": "./dist/index.esm.js",
8
- "types": "./dist/index.d.ts",
9
- "exports": {
10
- ".": {
11
- "types": "./dist/index.d.ts",
12
- "import": "./dist/index.esm.js"
13
- },
14
- "./auto": "./dist/auto.min.js"
15
- },
16
- "files": [
17
- "dist"
18
- ],
19
- "scripts": {
20
- "clean": "rimraf dist .tsc-out",
21
- "build": "rimraf dist .tsc-out && tsc && rollup -c",
22
- "test": "vitest run",
23
- "test:watch": "vitest",
24
- "test:coverage": "vitest run --coverage",
25
- "lint": "eslint src",
26
- "version:patch": "npm version patch",
27
- "version:minor": "npm version minor",
28
- "version:major": "npm version major",
29
- "prepublishOnly": "npm run build && npm run test:coverage"
30
- },
31
- "keywords": [
32
- "web-components",
33
- "storage",
34
- "localStorage",
35
- "sessionStorage",
36
- "custom-elements",
37
- "wc-bindable",
38
- "declarative",
39
- "persistent",
40
- "zero-dependencies",
41
- "framework-agnostic"
42
- ],
43
- "author": "mogera551",
44
- "homepage": "https://wcstack.github.io",
45
- "repository": {
46
- "type": "git",
47
- "url": "https://github.com/wcstack/wcstack.git",
48
- "directory": "packages/storage"
49
- },
50
- "bugs": {
51
- "url": "https://github.com/wcstack/wcstack/issues"
52
- },
53
- "license": "MIT",
54
- "devDependencies": {
55
- "@eslint/js": "^9.39.1",
56
- "@rollup/plugin-terser": "^0.4.4",
57
- "@rollup/plugin-typescript": "^11.1.6",
58
- "@vitest/coverage-v8": "^4.0.15",
59
- "@vitest/ui": "^4.0.15",
60
- "eslint": "^9.39.1",
61
- "globals": "^16.5.0",
62
- "happy-dom": "^20.0.11",
63
- "rimraf": "^6.0.1",
64
- "rollup": "^4.22.4",
65
- "rollup-plugin-dts": "^6.1.1",
66
- "rollup-plugin-copy": "^3.5.0",
67
- "tslib": "^2.8.1",
68
- "typescript": "^5.9.3",
69
- "typescript-eslint": "^8.49.0",
70
- "vitest": "^4.0.15"
71
- }
72
- }
1
+ {
2
+ "name": "@wcstack/storage",
3
+ "version": "1.9.1",
4
+ "description": "Declarative persistent storage component for Web Components. Framework-agnostic localStorage/sessionStorage via wc-bindable-protocol.",
5
+ "type": "module",
6
+ "main": "./dist/index.esm.js",
7
+ "module": "./dist/index.esm.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "types": "./dist/index.d.ts",
12
+ "import": "./dist/index.esm.js"
13
+ },
14
+ "./auto": "./dist/auto.min.js"
15
+ },
16
+ "files": [
17
+ "dist"
18
+ ],
19
+ "scripts": {
20
+ "clean": "rimraf dist .tsc-out",
21
+ "build": "rimraf dist .tsc-out && tsc && rollup -c",
22
+ "test": "vitest run",
23
+ "test:watch": "vitest",
24
+ "test:coverage": "vitest run --coverage",
25
+ "lint": "eslint src",
26
+ "version:patch": "npm version patch",
27
+ "version:minor": "npm version minor",
28
+ "version:major": "npm version major",
29
+ "prepublishOnly": "npm run build && npm run test:coverage"
30
+ },
31
+ "keywords": [
32
+ "web-components",
33
+ "storage",
34
+ "localStorage",
35
+ "sessionStorage",
36
+ "custom-elements",
37
+ "wc-bindable",
38
+ "declarative",
39
+ "persistent",
40
+ "zero-dependencies",
41
+ "framework-agnostic"
42
+ ],
43
+ "author": "mogera551",
44
+ "homepage": "https://wcstack.github.io",
45
+ "repository": {
46
+ "type": "git",
47
+ "url": "https://github.com/wcstack/wcstack.git",
48
+ "directory": "packages/storage"
49
+ },
50
+ "bugs": {
51
+ "url": "https://github.com/wcstack/wcstack/issues"
52
+ },
53
+ "license": "MIT",
54
+ "devDependencies": {
55
+ "@eslint/js": "^9.39.1",
56
+ "@rollup/plugin-terser": "^0.4.4",
57
+ "@rollup/plugin-typescript": "^11.1.6",
58
+ "@vitest/coverage-v8": "^4.0.15",
59
+ "@vitest/ui": "^4.0.15",
60
+ "eslint": "^9.39.1",
61
+ "globals": "^16.5.0",
62
+ "happy-dom": "^20.0.11",
63
+ "rimraf": "^6.0.1",
64
+ "rollup": "^4.22.4",
65
+ "rollup-plugin-dts": "^6.1.1",
66
+ "rollup-plugin-copy": "^3.5.0",
67
+ "tslib": "^2.8.1",
68
+ "typescript": "^5.9.3",
69
+ "typescript-eslint": "^8.49.0",
70
+ "vitest": "^4.0.15"
71
+ }
72
+ }