@alwatr/local-storage 7.0.8 → 7.0.9

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/CHANGELOG.md CHANGED
@@ -3,6 +3,12 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
5
5
 
6
+ ## [7.0.9](https://github.com/Alwatr/nanolib/compare/@alwatr/local-storage@7.0.8...@alwatr/local-storage@7.0.9) (2026-03-16)
7
+
8
+ ### 🔨 Code Refactoring
9
+
10
+ * migrate build scripts from yarn to bun across multiple packages ([d90e962](https://github.com/Alwatr/nanolib/commit/d90e962f15e5c951e191d5f02341279b6472abc3))
11
+
6
12
  ## [7.0.8](https://github.com/Alwatr/nanolib/compare/@alwatr/local-storage@7.0.7...@alwatr/local-storage@7.0.8) (2026-02-18)
7
13
 
8
14
  **Note:** Version bump only for package @alwatr/local-storage
package/dist/main.cjs CHANGED
@@ -1,4 +1,3 @@
1
- /** 📦 @alwatr/local-storage v7.0.8 */
2
- __dev_mode__: console.debug("📦 @alwatr/local-storage v7.0.8");
3
- "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var main_exports={};__export(main_exports,{LocalStorageProvider:()=>LocalStorageProvider,createLocalStorageProvider:()=>createLocalStorageProvider});module.exports=__toCommonJS(main_exports);var import_logger=require("@alwatr/logger");var LocalStorageProvider=class _LocalStorageProvider{static{this.version="7.0.8"}constructor(config){this.logger_=(0,import_logger.createLogger)(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);this.logger_.logMethodArgs?.("constructor",{config});this.key__=_LocalStorageProvider.getKey(config);_LocalStorageProvider.clearPreviousStorageVersions(config)}static getKey(config){return`${config.name}.v${config.schemaVersion}`}static clearPreviousStorageVersions(config){if(config.schemaVersion<1)return;for(let i=0;i<config.schemaVersion;i++){const oldKey=_LocalStorageProvider.getKey({name:config.name,schemaVersion:i});localStorage.removeItem(oldKey)}}static has(config){const key=_LocalStorageProvider.getKey(config);return localStorage.getItem(key)!==null}has(){return localStorage.getItem(this.key__)!==null}read(){let value=null;try{value=localStorage.getItem(this.key__)}catch(err){this.logger_.error("read","read_local_storage_error",{err})}if(!value){this.logger_.logMethod?.("read//no_value");return null}try{const parsedValue=JSON.parse(value);this.logger_.logMethodFull?.("read//value",void 0,{parsedValue});return parsedValue}catch(err){this.logger_.error("read","read_parse_error",{err});return null}}write(value){this.logger_.logMethodArgs?.("write",{value});let valueStr;try{valueStr=JSON.stringify(value)}catch(err){this.logger_.error("write","write_stringify_error",{err});throw new Error("write_stringify_error")}try{localStorage.setItem(this.key__,valueStr)}catch(err){this.logger_.error("write","write_local_storage_error",{err})}}remove(){localStorage.removeItem(this.key__)}};function createLocalStorageProvider(config){return new LocalStorageProvider(config)}0&&(module.exports={LocalStorageProvider,createLocalStorageProvider});
1
+ /** 📦 @alwatr/local-storage v7.0.9 */
2
+ "use strict";var __defProp=Object.defineProperty;var __getOwnPropDesc=Object.getOwnPropertyDescriptor;var __getOwnPropNames=Object.getOwnPropertyNames;var __hasOwnProp=Object.prototype.hasOwnProperty;var __export=(target,all)=>{for(var name in all)__defProp(target,name,{get:all[name],enumerable:true})};var __copyProps=(to,from,except,desc)=>{if(from&&typeof from==="object"||typeof from==="function"){for(let key of __getOwnPropNames(from))if(!__hasOwnProp.call(to,key)&&key!==except)__defProp(to,key,{get:()=>from[key],enumerable:!(desc=__getOwnPropDesc(from,key))||desc.enumerable})}return to};var __toCommonJS=mod=>__copyProps(__defProp({},"__esModule",{value:true}),mod);var main_exports={};__export(main_exports,{LocalStorageProvider:()=>LocalStorageProvider,createLocalStorageProvider:()=>createLocalStorageProvider});module.exports=__toCommonJS(main_exports);var import_logger=require("@alwatr/logger");var LocalStorageProvider=class _LocalStorageProvider{static{this.version="7.0.9"}constructor(config){this.logger_=(0,import_logger.createLogger)(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);this.logger_.logMethodArgs?.("constructor",{config});this.key__=_LocalStorageProvider.getKey(config);_LocalStorageProvider.clearPreviousStorageVersions(config)}static getKey(config){return`${config.name}.v${config.schemaVersion}`}static clearPreviousStorageVersions(config){if(config.schemaVersion<1)return;for(let i=0;i<config.schemaVersion;i++){const oldKey=_LocalStorageProvider.getKey({name:config.name,schemaVersion:i});localStorage.removeItem(oldKey)}}static has(config){const key=_LocalStorageProvider.getKey(config);return localStorage.getItem(key)!==null}has(){return localStorage.getItem(this.key__)!==null}read(){let value=null;try{value=localStorage.getItem(this.key__)}catch(err){this.logger_.error("read","read_local_storage_error",{err})}if(!value){this.logger_.logMethod?.("read//no_value");return null}try{const parsedValue=JSON.parse(value);this.logger_.logMethodFull?.("read//value",void 0,{parsedValue});return parsedValue}catch(err){this.logger_.error("read","read_parse_error",{err});return null}}write(value){this.logger_.logMethodArgs?.("write",{value});let valueStr;try{valueStr=JSON.stringify(value)}catch(err){this.logger_.error("write","write_stringify_error",{err});throw new Error("write_stringify_error")}try{localStorage.setItem(this.key__,valueStr)}catch(err){this.logger_.error("write","write_local_storage_error",{err})}}remove(){localStorage.removeItem(this.key__)}};function createLocalStorageProvider(config){return new LocalStorageProvider(config)}0&&(module.exports={LocalStorageProvider,createLocalStorageProvider});
4
3
  //# sourceMappingURL=main.cjs.map
package/dist/main.cjs.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/main.ts", "../src/local-storage.provider.ts", "../src/facade.ts"],
4
4
  "sourcesContent": ["export * from './local-storage.provider.js';\nexport * from './facade.js';\nexport type * from './type.js';\n", "import {createLogger} from '@alwatr/logger';\n\nimport type {LocalStorageProviderConfig} from './type.js';\n\n/**\n * A provider class for managing a specific, versioned item in localStorage.\n * It encapsulates the logic for key generation, serialization, and migration.\n *\n * @example\n * ```typescript\n * const userSettings = new LocalStorageProvider({\n * name: 'user-settings',\n * version: 1\n * });\n *\n * // Write new settings\n * userSettings.write({ theme: 'dark', notifications: false });\n *\n * // Read the current settings\n * const currentSettings = userSettings.read();\n * console.log(currentSettings); // { theme: 'dark', notifications: false }\n * ```\n */\nexport class LocalStorageProvider<T extends JsonValue> {\n public static readonly version = __package_version__;\n\n private readonly key__: string;\n protected readonly logger_;\n\n constructor(config: LocalStorageProviderConfig) {\n this.logger_ = createLogger(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);\n this.logger_.logMethodArgs?.('constructor', {config});\n this.key__ = LocalStorageProvider.getKey(config);\n LocalStorageProvider.clearPreviousStorageVersions(config);\n }\n\n /**\n * Generates the versioned storage key.\n * @param meta - An object containing the name and schemaVersion.\n * @returns The versioned key string.\n */\n public static getKey(config: LocalStorageProviderConfig): string {\n return `${config.name}.v${config.schemaVersion}`;\n }\n\n /**\n * Manages data migration by removing all previous versions of the item.\n */\n public static clearPreviousStorageVersions(config: LocalStorageProviderConfig): void {\n if (config.schemaVersion < 1) return;\n\n // Iterate from v1 up to the version just before the current one and remove them.\n for (let i = 0; i < config.schemaVersion; i++) {\n const oldKey = LocalStorageProvider.getKey({name: config.name, schemaVersion: i});\n localStorage.removeItem(oldKey);\n }\n }\n\n /**\n * Checks if a versioned item exists in localStorage for the given configuration.\n * This static method allows checking for the existence of a specific versioned item\n * without instantiating the provider.\n *\n * @param config - The configuration object containing the name and schemaVersion.\n * @returns `true` if the item exists in localStorage, otherwise `false`.\n *\n * @example\n * ```typescript\n * const exists = LocalStorageProvider.has({ name: 'user-form', schemaVersion: 1 });\n * ```\n */\n public static has(config: LocalStorageProviderConfig): boolean {\n const key = LocalStorageProvider.getKey(config);\n return localStorage.getItem(key) !== null;\n }\n\n /**\n * Checks if the current versioned item exists in localStorage.\n *\n * @returns `true` if the item exists in localStorage, otherwise `false`.\n *\n * @example\n * ```typescript\n * const provider = new LocalStorageProvider({ name: 'profile', schemaVersion: 2 });\n * if (provider.has()) {\n * // Item exists\n * }\n * ```\n */\n public has(): boolean {\n return localStorage.getItem(this.key__) !== null;\n }\n\n /**\n * Reads and parses the value from localStorage.\n * If the item doesn't exist or is invalid JSON, returns null.\n */\n public read(): T | null {\n let value: string | null = null;\n\n try {\n value = localStorage.getItem(this.key__);\n }\n catch (err) {\n this.logger_.error('read', 'read_local_storage_error', {err});\n }\n\n if (!value) {\n this.logger_.logMethod?.('read//no_value');\n return null;\n }\n\n try {\n const parsedValue = JSON.parse(value) as T;\n this.logger_.logMethodFull?.('read//value', undefined, {parsedValue});\n return parsedValue;\n }\n catch (err) {\n this.logger_.error('read', 'read_parse_error', {err});\n return null;\n }\n }\n\n /**\n * Serializes and writes a value to localStorage.\n */\n public write(value: T): void {\n this.logger_.logMethodArgs?.('write', {value});\n let valueStr: string;\n try {\n valueStr = JSON.stringify(value);\n }\n catch (err) {\n this.logger_.error('write', 'write_stringify_error', {err});\n throw new Error('write_stringify_error');\n }\n\n try {\n localStorage.setItem(this.key__, valueStr);\n }\n catch (err) {\n this.logger_.error('write', 'write_local_storage_error', {err});\n }\n }\n\n /**\n * Removes the item from localStorage.\n */\n public remove(): void {\n localStorage.removeItem(this.key__);\n }\n}\n", "import {LocalStorageProvider} from './local-storage.provider.js';\n\nimport type {LocalStorageProviderConfig} from './type.js';\n\n/**\n * Factory function to create a new LocalStorageProvider.\n *\n * @param config - The configuration for the provider.\n * @returns An instance of LocalStorageProvider.\n *\n * @example\n * ```typescript\n * const userSettings = createLocalStorageProvider({\n * name: 'user-settings',\n * schemaVersion: 1\n * });\n *\n * // Write new settings\n * userSettings.write({ theme: 'dark', notifications: false });\n *\n * // Read the current settings\n * const currentSettings = userSettings.read();\n * console.log(currentSettings); // { theme: 'dark', notifications: false }\n * ```\n */\nexport function createLocalStorageProvider<T extends JsonValue>(config: LocalStorageProviderConfig): LocalStorageProvider<T> {\n return new LocalStorageProvider<T>(config);\n}\n"],
5
- "mappings": ";;qqBAAA,+LCAA,kBAA2B,0BAuBpB,IAAM,qBAAN,MAAM,qBAA0C,CACrD,YAAuB,QAAU,QAKjC,YAAY,OAAoC,CAC9C,KAAK,WAAU,4BAAa,2BAA2B,OAAO,IAAI,QAAQ,OAAO,aAAa,EAAE,EAChG,KAAK,QAAQ,gBAAgB,cAAe,CAAC,MAAM,CAAC,EACpD,KAAK,MAAQ,sBAAqB,OAAO,MAAM,EAC/C,sBAAqB,6BAA6B,MAAM,CAC1D,CAOA,OAAc,OAAO,OAA4C,CAC/D,MAAO,GAAG,OAAO,IAAI,KAAK,OAAO,aAAa,EAChD,CAKA,OAAc,6BAA6B,OAA0C,CACnF,GAAI,OAAO,cAAgB,EAAG,OAG9B,QAAS,EAAI,EAAG,EAAI,OAAO,cAAe,IAAK,CAC7C,MAAM,OAAS,sBAAqB,OAAO,CAAC,KAAM,OAAO,KAAM,cAAe,CAAC,CAAC,EAChF,aAAa,WAAW,MAAM,CAChC,CACF,CAeA,OAAc,IAAI,OAA6C,CAC7D,MAAM,IAAM,sBAAqB,OAAO,MAAM,EAC9C,OAAO,aAAa,QAAQ,GAAG,IAAM,IACvC,CAeO,KAAe,CACpB,OAAO,aAAa,QAAQ,KAAK,KAAK,IAAM,IAC9C,CAMO,MAAiB,CACtB,IAAI,MAAuB,KAE3B,GAAI,CACF,MAAQ,aAAa,QAAQ,KAAK,KAAK,CACzC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,2BAA4B,CAAC,GAAG,CAAC,CAC9D,CAEA,GAAI,CAAC,MAAO,CACV,KAAK,QAAQ,YAAY,gBAAgB,EACzC,OAAO,IACT,CAEA,GAAI,CACF,MAAM,YAAc,KAAK,MAAM,KAAK,EACpC,KAAK,QAAQ,gBAAgB,cAAe,OAAW,CAAC,WAAW,CAAC,EACpE,OAAO,WACT,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,mBAAoB,CAAC,GAAG,CAAC,EACpD,OAAO,IACT,CACF,CAKO,MAAM,MAAgB,CAC3B,KAAK,QAAQ,gBAAgB,QAAS,CAAC,KAAK,CAAC,EAC7C,IAAI,SACJ,GAAI,CACF,SAAW,KAAK,UAAU,KAAK,CACjC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,wBAAyB,CAAC,GAAG,CAAC,EAC1D,MAAM,IAAI,MAAM,uBAAuB,CACzC,CAEA,GAAI,CACF,aAAa,QAAQ,KAAK,MAAO,QAAQ,CAC3C,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,4BAA6B,CAAC,GAAG,CAAC,CAChE,CACF,CAKO,QAAe,CACpB,aAAa,WAAW,KAAK,KAAK,CACpC,CACF,EC9HO,SAAS,2BAAgD,OAA6D,CAC3H,OAAO,IAAI,qBAAwB,MAAM,CAC3C",
5
+ "mappings": ";qqBAAA,+LCAA,kBAA2B,0BAuBpB,IAAM,qBAAN,MAAM,qBAA0C,CACrD,YAAuB,QAAU,QAKjC,YAAY,OAAoC,CAC9C,KAAK,WAAU,4BAAa,2BAA2B,OAAO,IAAI,QAAQ,OAAO,aAAa,EAAE,EAChG,KAAK,QAAQ,gBAAgB,cAAe,CAAC,MAAM,CAAC,EACpD,KAAK,MAAQ,sBAAqB,OAAO,MAAM,EAC/C,sBAAqB,6BAA6B,MAAM,CAC1D,CAOA,OAAc,OAAO,OAA4C,CAC/D,MAAO,GAAG,OAAO,IAAI,KAAK,OAAO,aAAa,EAChD,CAKA,OAAc,6BAA6B,OAA0C,CACnF,GAAI,OAAO,cAAgB,EAAG,OAG9B,QAAS,EAAI,EAAG,EAAI,OAAO,cAAe,IAAK,CAC7C,MAAM,OAAS,sBAAqB,OAAO,CAAC,KAAM,OAAO,KAAM,cAAe,CAAC,CAAC,EAChF,aAAa,WAAW,MAAM,CAChC,CACF,CAeA,OAAc,IAAI,OAA6C,CAC7D,MAAM,IAAM,sBAAqB,OAAO,MAAM,EAC9C,OAAO,aAAa,QAAQ,GAAG,IAAM,IACvC,CAeO,KAAe,CACpB,OAAO,aAAa,QAAQ,KAAK,KAAK,IAAM,IAC9C,CAMO,MAAiB,CACtB,IAAI,MAAuB,KAE3B,GAAI,CACF,MAAQ,aAAa,QAAQ,KAAK,KAAK,CACzC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,2BAA4B,CAAC,GAAG,CAAC,CAC9D,CAEA,GAAI,CAAC,MAAO,CACV,KAAK,QAAQ,YAAY,gBAAgB,EACzC,OAAO,IACT,CAEA,GAAI,CACF,MAAM,YAAc,KAAK,MAAM,KAAK,EACpC,KAAK,QAAQ,gBAAgB,cAAe,OAAW,CAAC,WAAW,CAAC,EACpE,OAAO,WACT,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,mBAAoB,CAAC,GAAG,CAAC,EACpD,OAAO,IACT,CACF,CAKO,MAAM,MAAgB,CAC3B,KAAK,QAAQ,gBAAgB,QAAS,CAAC,KAAK,CAAC,EAC7C,IAAI,SACJ,GAAI,CACF,SAAW,KAAK,UAAU,KAAK,CACjC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,wBAAyB,CAAC,GAAG,CAAC,EAC1D,MAAM,IAAI,MAAM,uBAAuB,CACzC,CAEA,GAAI,CACF,aAAa,QAAQ,KAAK,MAAO,QAAQ,CAC3C,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,4BAA6B,CAAC,GAAG,CAAC,CAChE,CACF,CAKO,QAAe,CACpB,aAAa,WAAW,KAAK,KAAK,CACpC,CACF,EC9HO,SAAS,2BAAgD,OAA6D,CAC3H,OAAO,IAAI,qBAAwB,MAAM,CAC3C",
6
6
  "names": []
7
7
  }
package/dist/main.mjs CHANGED
@@ -1,4 +1,3 @@
1
- /** 📦 @alwatr/local-storage v7.0.8 */
2
- __dev_mode__: console.debug("📦 @alwatr/local-storage v7.0.8");
3
- import{createLogger}from"@alwatr/logger";var LocalStorageProvider=class _LocalStorageProvider{static{this.version="7.0.8"}constructor(config){this.logger_=createLogger(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);this.logger_.logMethodArgs?.("constructor",{config});this.key__=_LocalStorageProvider.getKey(config);_LocalStorageProvider.clearPreviousStorageVersions(config)}static getKey(config){return`${config.name}.v${config.schemaVersion}`}static clearPreviousStorageVersions(config){if(config.schemaVersion<1)return;for(let i=0;i<config.schemaVersion;i++){const oldKey=_LocalStorageProvider.getKey({name:config.name,schemaVersion:i});localStorage.removeItem(oldKey)}}static has(config){const key=_LocalStorageProvider.getKey(config);return localStorage.getItem(key)!==null}has(){return localStorage.getItem(this.key__)!==null}read(){let value=null;try{value=localStorage.getItem(this.key__)}catch(err){this.logger_.error("read","read_local_storage_error",{err})}if(!value){this.logger_.logMethod?.("read//no_value");return null}try{const parsedValue=JSON.parse(value);this.logger_.logMethodFull?.("read//value",void 0,{parsedValue});return parsedValue}catch(err){this.logger_.error("read","read_parse_error",{err});return null}}write(value){this.logger_.logMethodArgs?.("write",{value});let valueStr;try{valueStr=JSON.stringify(value)}catch(err){this.logger_.error("write","write_stringify_error",{err});throw new Error("write_stringify_error")}try{localStorage.setItem(this.key__,valueStr)}catch(err){this.logger_.error("write","write_local_storage_error",{err})}}remove(){localStorage.removeItem(this.key__)}};function createLocalStorageProvider(config){return new LocalStorageProvider(config)}export{LocalStorageProvider,createLocalStorageProvider};
1
+ /** 📦 @alwatr/local-storage v7.0.9 */
2
+ import{createLogger}from"@alwatr/logger";var LocalStorageProvider=class _LocalStorageProvider{static{this.version="7.0.9"}constructor(config){this.logger_=createLogger(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);this.logger_.logMethodArgs?.("constructor",{config});this.key__=_LocalStorageProvider.getKey(config);_LocalStorageProvider.clearPreviousStorageVersions(config)}static getKey(config){return`${config.name}.v${config.schemaVersion}`}static clearPreviousStorageVersions(config){if(config.schemaVersion<1)return;for(let i=0;i<config.schemaVersion;i++){const oldKey=_LocalStorageProvider.getKey({name:config.name,schemaVersion:i});localStorage.removeItem(oldKey)}}static has(config){const key=_LocalStorageProvider.getKey(config);return localStorage.getItem(key)!==null}has(){return localStorage.getItem(this.key__)!==null}read(){let value=null;try{value=localStorage.getItem(this.key__)}catch(err){this.logger_.error("read","read_local_storage_error",{err})}if(!value){this.logger_.logMethod?.("read//no_value");return null}try{const parsedValue=JSON.parse(value);this.logger_.logMethodFull?.("read//value",void 0,{parsedValue});return parsedValue}catch(err){this.logger_.error("read","read_parse_error",{err});return null}}write(value){this.logger_.logMethodArgs?.("write",{value});let valueStr;try{valueStr=JSON.stringify(value)}catch(err){this.logger_.error("write","write_stringify_error",{err});throw new Error("write_stringify_error")}try{localStorage.setItem(this.key__,valueStr)}catch(err){this.logger_.error("write","write_local_storage_error",{err})}}remove(){localStorage.removeItem(this.key__)}};function createLocalStorageProvider(config){return new LocalStorageProvider(config)}export{LocalStorageProvider,createLocalStorageProvider};
4
3
  //# sourceMappingURL=main.mjs.map
package/dist/main.mjs.map CHANGED
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../src/local-storage.provider.ts", "../src/facade.ts"],
4
4
  "sourcesContent": ["import {createLogger} from '@alwatr/logger';\n\nimport type {LocalStorageProviderConfig} from './type.js';\n\n/**\n * A provider class for managing a specific, versioned item in localStorage.\n * It encapsulates the logic for key generation, serialization, and migration.\n *\n * @example\n * ```typescript\n * const userSettings = new LocalStorageProvider({\n * name: 'user-settings',\n * version: 1\n * });\n *\n * // Write new settings\n * userSettings.write({ theme: 'dark', notifications: false });\n *\n * // Read the current settings\n * const currentSettings = userSettings.read();\n * console.log(currentSettings); // { theme: 'dark', notifications: false }\n * ```\n */\nexport class LocalStorageProvider<T extends JsonValue> {\n public static readonly version = __package_version__;\n\n private readonly key__: string;\n protected readonly logger_;\n\n constructor(config: LocalStorageProviderConfig) {\n this.logger_ = createLogger(`local-storage-provider: ${config.name}, v: ${config.schemaVersion}`);\n this.logger_.logMethodArgs?.('constructor', {config});\n this.key__ = LocalStorageProvider.getKey(config);\n LocalStorageProvider.clearPreviousStorageVersions(config);\n }\n\n /**\n * Generates the versioned storage key.\n * @param meta - An object containing the name and schemaVersion.\n * @returns The versioned key string.\n */\n public static getKey(config: LocalStorageProviderConfig): string {\n return `${config.name}.v${config.schemaVersion}`;\n }\n\n /**\n * Manages data migration by removing all previous versions of the item.\n */\n public static clearPreviousStorageVersions(config: LocalStorageProviderConfig): void {\n if (config.schemaVersion < 1) return;\n\n // Iterate from v1 up to the version just before the current one and remove them.\n for (let i = 0; i < config.schemaVersion; i++) {\n const oldKey = LocalStorageProvider.getKey({name: config.name, schemaVersion: i});\n localStorage.removeItem(oldKey);\n }\n }\n\n /**\n * Checks if a versioned item exists in localStorage for the given configuration.\n * This static method allows checking for the existence of a specific versioned item\n * without instantiating the provider.\n *\n * @param config - The configuration object containing the name and schemaVersion.\n * @returns `true` if the item exists in localStorage, otherwise `false`.\n *\n * @example\n * ```typescript\n * const exists = LocalStorageProvider.has({ name: 'user-form', schemaVersion: 1 });\n * ```\n */\n public static has(config: LocalStorageProviderConfig): boolean {\n const key = LocalStorageProvider.getKey(config);\n return localStorage.getItem(key) !== null;\n }\n\n /**\n * Checks if the current versioned item exists in localStorage.\n *\n * @returns `true` if the item exists in localStorage, otherwise `false`.\n *\n * @example\n * ```typescript\n * const provider = new LocalStorageProvider({ name: 'profile', schemaVersion: 2 });\n * if (provider.has()) {\n * // Item exists\n * }\n * ```\n */\n public has(): boolean {\n return localStorage.getItem(this.key__) !== null;\n }\n\n /**\n * Reads and parses the value from localStorage.\n * If the item doesn't exist or is invalid JSON, returns null.\n */\n public read(): T | null {\n let value: string | null = null;\n\n try {\n value = localStorage.getItem(this.key__);\n }\n catch (err) {\n this.logger_.error('read', 'read_local_storage_error', {err});\n }\n\n if (!value) {\n this.logger_.logMethod?.('read//no_value');\n return null;\n }\n\n try {\n const parsedValue = JSON.parse(value) as T;\n this.logger_.logMethodFull?.('read//value', undefined, {parsedValue});\n return parsedValue;\n }\n catch (err) {\n this.logger_.error('read', 'read_parse_error', {err});\n return null;\n }\n }\n\n /**\n * Serializes and writes a value to localStorage.\n */\n public write(value: T): void {\n this.logger_.logMethodArgs?.('write', {value});\n let valueStr: string;\n try {\n valueStr = JSON.stringify(value);\n }\n catch (err) {\n this.logger_.error('write', 'write_stringify_error', {err});\n throw new Error('write_stringify_error');\n }\n\n try {\n localStorage.setItem(this.key__, valueStr);\n }\n catch (err) {\n this.logger_.error('write', 'write_local_storage_error', {err});\n }\n }\n\n /**\n * Removes the item from localStorage.\n */\n public remove(): void {\n localStorage.removeItem(this.key__);\n }\n}\n", "import {LocalStorageProvider} from './local-storage.provider.js';\n\nimport type {LocalStorageProviderConfig} from './type.js';\n\n/**\n * Factory function to create a new LocalStorageProvider.\n *\n * @param config - The configuration for the provider.\n * @returns An instance of LocalStorageProvider.\n *\n * @example\n * ```typescript\n * const userSettings = createLocalStorageProvider({\n * name: 'user-settings',\n * schemaVersion: 1\n * });\n *\n * // Write new settings\n * userSettings.write({ theme: 'dark', notifications: false });\n *\n * // Read the current settings\n * const currentSettings = userSettings.read();\n * console.log(currentSettings); // { theme: 'dark', notifications: false }\n * ```\n */\nexport function createLocalStorageProvider<T extends JsonValue>(config: LocalStorageProviderConfig): LocalStorageProvider<T> {\n return new LocalStorageProvider<T>(config);\n}\n"],
5
- "mappings": ";;AAAA,OAAQ,iBAAmB,iBAuBpB,IAAM,qBAAN,MAAM,qBAA0C,CACrD,YAAuB,QAAU,QAKjC,YAAY,OAAoC,CAC9C,KAAK,QAAU,aAAa,2BAA2B,OAAO,IAAI,QAAQ,OAAO,aAAa,EAAE,EAChG,KAAK,QAAQ,gBAAgB,cAAe,CAAC,MAAM,CAAC,EACpD,KAAK,MAAQ,sBAAqB,OAAO,MAAM,EAC/C,sBAAqB,6BAA6B,MAAM,CAC1D,CAOA,OAAc,OAAO,OAA4C,CAC/D,MAAO,GAAG,OAAO,IAAI,KAAK,OAAO,aAAa,EAChD,CAKA,OAAc,6BAA6B,OAA0C,CACnF,GAAI,OAAO,cAAgB,EAAG,OAG9B,QAAS,EAAI,EAAG,EAAI,OAAO,cAAe,IAAK,CAC7C,MAAM,OAAS,sBAAqB,OAAO,CAAC,KAAM,OAAO,KAAM,cAAe,CAAC,CAAC,EAChF,aAAa,WAAW,MAAM,CAChC,CACF,CAeA,OAAc,IAAI,OAA6C,CAC7D,MAAM,IAAM,sBAAqB,OAAO,MAAM,EAC9C,OAAO,aAAa,QAAQ,GAAG,IAAM,IACvC,CAeO,KAAe,CACpB,OAAO,aAAa,QAAQ,KAAK,KAAK,IAAM,IAC9C,CAMO,MAAiB,CACtB,IAAI,MAAuB,KAE3B,GAAI,CACF,MAAQ,aAAa,QAAQ,KAAK,KAAK,CACzC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,2BAA4B,CAAC,GAAG,CAAC,CAC9D,CAEA,GAAI,CAAC,MAAO,CACV,KAAK,QAAQ,YAAY,gBAAgB,EACzC,OAAO,IACT,CAEA,GAAI,CACF,MAAM,YAAc,KAAK,MAAM,KAAK,EACpC,KAAK,QAAQ,gBAAgB,cAAe,OAAW,CAAC,WAAW,CAAC,EACpE,OAAO,WACT,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,mBAAoB,CAAC,GAAG,CAAC,EACpD,OAAO,IACT,CACF,CAKO,MAAM,MAAgB,CAC3B,KAAK,QAAQ,gBAAgB,QAAS,CAAC,KAAK,CAAC,EAC7C,IAAI,SACJ,GAAI,CACF,SAAW,KAAK,UAAU,KAAK,CACjC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,wBAAyB,CAAC,GAAG,CAAC,EAC1D,MAAM,IAAI,MAAM,uBAAuB,CACzC,CAEA,GAAI,CACF,aAAa,QAAQ,KAAK,MAAO,QAAQ,CAC3C,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,4BAA6B,CAAC,GAAG,CAAC,CAChE,CACF,CAKO,QAAe,CACpB,aAAa,WAAW,KAAK,KAAK,CACpC,CACF,EC9HO,SAAS,2BAAgD,OAA6D,CAC3H,OAAO,IAAI,qBAAwB,MAAM,CAC3C",
5
+ "mappings": ";AAAA,OAAQ,iBAAmB,iBAuBpB,IAAM,qBAAN,MAAM,qBAA0C,CACrD,YAAuB,QAAU,QAKjC,YAAY,OAAoC,CAC9C,KAAK,QAAU,aAAa,2BAA2B,OAAO,IAAI,QAAQ,OAAO,aAAa,EAAE,EAChG,KAAK,QAAQ,gBAAgB,cAAe,CAAC,MAAM,CAAC,EACpD,KAAK,MAAQ,sBAAqB,OAAO,MAAM,EAC/C,sBAAqB,6BAA6B,MAAM,CAC1D,CAOA,OAAc,OAAO,OAA4C,CAC/D,MAAO,GAAG,OAAO,IAAI,KAAK,OAAO,aAAa,EAChD,CAKA,OAAc,6BAA6B,OAA0C,CACnF,GAAI,OAAO,cAAgB,EAAG,OAG9B,QAAS,EAAI,EAAG,EAAI,OAAO,cAAe,IAAK,CAC7C,MAAM,OAAS,sBAAqB,OAAO,CAAC,KAAM,OAAO,KAAM,cAAe,CAAC,CAAC,EAChF,aAAa,WAAW,MAAM,CAChC,CACF,CAeA,OAAc,IAAI,OAA6C,CAC7D,MAAM,IAAM,sBAAqB,OAAO,MAAM,EAC9C,OAAO,aAAa,QAAQ,GAAG,IAAM,IACvC,CAeO,KAAe,CACpB,OAAO,aAAa,QAAQ,KAAK,KAAK,IAAM,IAC9C,CAMO,MAAiB,CACtB,IAAI,MAAuB,KAE3B,GAAI,CACF,MAAQ,aAAa,QAAQ,KAAK,KAAK,CACzC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,2BAA4B,CAAC,GAAG,CAAC,CAC9D,CAEA,GAAI,CAAC,MAAO,CACV,KAAK,QAAQ,YAAY,gBAAgB,EACzC,OAAO,IACT,CAEA,GAAI,CACF,MAAM,YAAc,KAAK,MAAM,KAAK,EACpC,KAAK,QAAQ,gBAAgB,cAAe,OAAW,CAAC,WAAW,CAAC,EACpE,OAAO,WACT,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,OAAQ,mBAAoB,CAAC,GAAG,CAAC,EACpD,OAAO,IACT,CACF,CAKO,MAAM,MAAgB,CAC3B,KAAK,QAAQ,gBAAgB,QAAS,CAAC,KAAK,CAAC,EAC7C,IAAI,SACJ,GAAI,CACF,SAAW,KAAK,UAAU,KAAK,CACjC,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,wBAAyB,CAAC,GAAG,CAAC,EAC1D,MAAM,IAAI,MAAM,uBAAuB,CACzC,CAEA,GAAI,CACF,aAAa,QAAQ,KAAK,MAAO,QAAQ,CAC3C,OACO,IAAK,CACV,KAAK,QAAQ,MAAM,QAAS,4BAA6B,CAAC,GAAG,CAAC,CAChE,CACF,CAKO,QAAe,CACpB,aAAa,WAAW,KAAK,KAAK,CACpC,CACF,EC9HO,SAAS,2BAAgD,OAA6D,CAC3H,OAAO,IAAI,qBAAwB,MAAM,CAC3C",
6
6
  "names": []
7
7
  }
package/package.json CHANGED
@@ -1,18 +1,17 @@
1
1
  {
2
2
  "name": "@alwatr/local-storage",
3
3
  "description": "A modern, simple, and robust solution for managing versioned JSON objects in the browser's `localStorage`. This package provides a clean, class-based API with a factory function to ensure your application's data persistence is safe, maintainable, and future-proof.",
4
- "version": "7.0.8",
4
+ "version": "7.0.9",
5
5
  "author": "S. Ali Mihandoost <ali.mihandoost@gmail.com>",
6
6
  "bugs": "https://github.com/Alwatr/nanolib/issues",
7
7
  "dependencies": {
8
- "@alwatr/logger": "6.0.17"
8
+ "@alwatr/logger": "6.0.18"
9
9
  },
10
10
  "devDependencies": {
11
- "@alwatr/nano-build": "6.4.1",
11
+ "@alwatr/nano-build": "6.4.2",
12
12
  "@alwatr/prettier-config": "6.0.2",
13
13
  "@alwatr/tsconfig-base": "6.0.4",
14
- "@alwatr/type-helper": "7.0.1",
15
- "@jest/globals": "^30.2.0",
14
+ "@alwatr/type-helper": "7.0.2",
16
15
  "typescript": "^5.9.3"
17
16
  },
18
17
  "exports": {
@@ -60,21 +59,21 @@
60
59
  "directory": "packages/local-storage"
61
60
  },
62
61
  "scripts": {
63
- "b": "yarn run build",
64
- "build": "yarn run build:ts && yarn run build:es",
62
+ "b": "bun run build",
63
+ "build": "bun run build:ts && bun run build:es",
65
64
  "build:es": "nano-build --preset=module",
66
65
  "build:ts": "tsc --build",
67
- "c": "yarn run clean",
68
- "cb": "yarn run clean && yarn run build",
66
+ "c": "bun run clean",
67
+ "cb": "bun run clean && bun run build",
69
68
  "clean": "rm -rfv dist *.tsbuildinfo",
70
- "d": "yarn run build:es && yarn node --enable-source-maps --trace-warnings",
71
- "w": "yarn run watch",
72
- "watch": "yarn run watch:ts & yarn run watch:es",
73
- "watch:es": "yarn run build:es --watch",
74
- "watch:ts": "yarn run build:ts --watch --preserveWatchOutput"
69
+ "d": "bun run build:es && bun --enable-source-maps --trace-warnings",
70
+ "w": "bun run watch",
71
+ "watch": "bun run watch:ts & bun run watch:es",
72
+ "watch:es": "bun run build:es --watch",
73
+ "watch:ts": "bun run build:ts --watch --preserveWatchOutput"
75
74
  },
76
75
  "sideEffects": false,
77
76
  "type": "module",
78
77
  "types": "./dist/main.d.ts",
79
- "gitHead": "f9f9ba54b319ce8ccc6968059b222e89f4b5d149"
78
+ "gitHead": "c3889e3756b0a0f9b935a1b702a1373ac52cb379"
80
79
  }