@wizzard-packages/persistence 0.1.0 → 0.1.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/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Aziz
3
+ Copyright (c) 2026 Aziz Isapov
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md ADDED
@@ -0,0 +1,44 @@
1
+ # @wizzard-packages/persistence
2
+
3
+ ![npm](https://img.shields.io/npm/v/@wizzard-packages/persistence)
4
+ ![downloads](https://img.shields.io/npm/dm/@wizzard-packages/persistence)
5
+ ![license](https://img.shields.io/npm/l/@wizzard-packages/persistence)
6
+
7
+ Persistence adapters for Wizzard Stepper. Save wizard state to localStorage or memory.
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pnpm add @wizzard-packages/persistence
13
+ ```
14
+
15
+ ## Usage with React
16
+
17
+ ```ts
18
+ import { LocalStorageAdapter } from '@wizzard-packages/persistence';
19
+
20
+ const config = {
21
+ steps,
22
+ persistence: {
23
+ adapter: new LocalStorageAdapter('wizard_'),
24
+ mode: 'onStepChange',
25
+ debounceTime: 300,
26
+ },
27
+ };
28
+ ```
29
+
30
+ ## Adapters
31
+
32
+ - LocalStorageAdapter - persist to browser storage
33
+ - MemoryAdapter - in-memory store (useful for tests)
34
+
35
+ ## Fits in the stack
36
+
37
+ - Core engine: @wizzard-packages/core
38
+ - React bindings: @wizzard-packages/react
39
+ - Optional middleware: @wizzard-packages/middleware
40
+
41
+ ## Links
42
+
43
+ - Repo: https://github.com/ZizzX/wizzard-packages
44
+ - Docs UI: https://zizzx.github.io/wizzard-packages/
package/dist/index.cjs CHANGED
@@ -42,7 +42,7 @@ var LocalStorageAdapter = class {
42
42
  return parsed;
43
43
  }
44
44
  return { data: parsed, timestamp: 0 };
45
- } catch (error) {
45
+ } catch (_error) {
46
46
  return void 0;
47
47
  }
48
48
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LocalStorageAdapter.ts","../src/MemoryAdapter.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * Browser persistence adapter backed by localStorage.\n */\nexport class LocalStorageAdapter implements IPersistenceAdapter {\n private prefix: string;\n\n constructor(prefix: string = 'wizard_') {\n this.prefix = prefix;\n }\n\n private getKey(stepId: string): string {\n return `${this.prefix}${stepId}`;\n }\n\n saveStep<T>(stepId: string, data: T): void {\n if (typeof window === 'undefined') return;\n try {\n const payload = { timestamp: Date.now(), data };\n localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to save step', error);\n }\n }\n\n getStep<T>(stepId: string): T | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed.data as T;\n }\n return parsed as T;\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to get step', error);\n return undefined;\n }\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed as { data: T; timestamp: number };\n }\n return { data: parsed as T, timestamp: 0 };\n } catch (error) {\n return undefined;\n }\n }\n\n clearStep(stepId: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(this.getKey(stepId));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to clear step', error);\n }\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n Object.keys(localStorage).forEach((key) => {\n if (key.startsWith(this.prefix)) {\n localStorage.removeItem(key);\n }\n });\n }\n}\n","import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * In-memory persistence adapter for tests or ephemeral sessions.\n */\nexport class MemoryAdapter implements IPersistenceAdapter {\n private storage: Record<string, any> = {};\n\n saveStep<T>(stepId: string, data: T): void {\n this.storage[stepId] = data;\n }\n\n getStep<T>(stepId: string): T | undefined {\n return this.storage[stepId] as T;\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n const item = this.storage[stepId];\n if (!item) return undefined;\n return { data: item as T, timestamp: Date.now() };\n }\n\n clearStep(stepId: string): void {\n delete this.storage[stepId];\n }\n\n clear(): void {\n this.storage = {};\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/LocalStorageAdapter.ts","../src/MemoryAdapter.ts"],"names":[],"mappings":"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","file":"index.cjs","sourcesContent":["import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * Browser persistence adapter backed by localStorage.\n */\nexport class LocalStorageAdapter implements IPersistenceAdapter {\n private prefix: string;\n\n constructor(prefix: string = 'wizard_') {\n this.prefix = prefix;\n }\n\n private getKey(stepId: string): string {\n return `${this.prefix}${stepId}`;\n }\n\n saveStep<T>(stepId: string, data: T): void {\n if (typeof window === 'undefined') return;\n try {\n const payload = { timestamp: Date.now(), data };\n localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to save step', error);\n }\n }\n\n getStep<T>(stepId: string): T | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed.data as T;\n }\n return parsed as T;\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to get step', error);\n return undefined;\n }\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed as { data: T; timestamp: number };\n }\n return { data: parsed as T, timestamp: 0 };\n } catch (_error) {\n return undefined;\n }\n }\n\n clearStep(stepId: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(this.getKey(stepId));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to clear step', error);\n }\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n Object.keys(localStorage).forEach((key) => {\n if (key.startsWith(this.prefix)) {\n localStorage.removeItem(key);\n }\n });\n }\n}\n","import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * In-memory persistence adapter for tests or ephemeral sessions.\n */\nexport class MemoryAdapter implements IPersistenceAdapter {\n private storage: Record<string, any> = {};\n\n saveStep<T>(stepId: string, data: T): void {\n this.storage[stepId] = data;\n }\n\n getStep<T>(stepId: string): T | undefined {\n return this.storage[stepId] as T;\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n const item = this.storage[stepId];\n if (!item) return undefined;\n return { data: item as T, timestamp: Date.now() };\n }\n\n clearStep(stepId: string): void {\n delete this.storage[stepId];\n }\n\n clear(): void {\n this.storage = {};\n }\n}\n"]}
package/dist/index.js CHANGED
@@ -40,7 +40,7 @@ var LocalStorageAdapter = class {
40
40
  return parsed;
41
41
  }
42
42
  return { data: parsed, timestamp: 0 };
43
- } catch (error) {
43
+ } catch (_error) {
44
44
  return void 0;
45
45
  }
46
46
  }
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/LocalStorageAdapter.ts","../src/MemoryAdapter.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * Browser persistence adapter backed by localStorage.\n */\nexport class LocalStorageAdapter implements IPersistenceAdapter {\n private prefix: string;\n\n constructor(prefix: string = 'wizard_') {\n this.prefix = prefix;\n }\n\n private getKey(stepId: string): string {\n return `${this.prefix}${stepId}`;\n }\n\n saveStep<T>(stepId: string, data: T): void {\n if (typeof window === 'undefined') return;\n try {\n const payload = { timestamp: Date.now(), data };\n localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to save step', error);\n }\n }\n\n getStep<T>(stepId: string): T | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed.data as T;\n }\n return parsed as T;\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to get step', error);\n return undefined;\n }\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed as { data: T; timestamp: number };\n }\n return { data: parsed as T, timestamp: 0 };\n } catch (error) {\n return undefined;\n }\n }\n\n clearStep(stepId: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(this.getKey(stepId));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to clear step', error);\n }\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n Object.keys(localStorage).forEach((key) => {\n if (key.startsWith(this.prefix)) {\n localStorage.removeItem(key);\n }\n });\n }\n}\n","import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * In-memory persistence adapter for tests or ephemeral sessions.\n */\nexport class MemoryAdapter implements IPersistenceAdapter {\n private storage: Record<string, any> = {};\n\n saveStep<T>(stepId: string, data: T): void {\n this.storage[stepId] = data;\n }\n\n getStep<T>(stepId: string): T | undefined {\n return this.storage[stepId] as T;\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n const item = this.storage[stepId];\n if (!item) return undefined;\n return { data: item as T, timestamp: Date.now() };\n }\n\n clearStep(stepId: string): void {\n delete this.storage[stepId];\n }\n\n clear(): void {\n this.storage = {};\n }\n}\n"]}
1
+ {"version":3,"sources":["../src/LocalStorageAdapter.ts","../src/MemoryAdapter.ts"],"names":[],"mappings":"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","file":"index.js","sourcesContent":["import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * Browser persistence adapter backed by localStorage.\n */\nexport class LocalStorageAdapter implements IPersistenceAdapter {\n private prefix: string;\n\n constructor(prefix: string = 'wizard_') {\n this.prefix = prefix;\n }\n\n private getKey(stepId: string): string {\n return `${this.prefix}${stepId}`;\n }\n\n saveStep<T>(stepId: string, data: T): void {\n if (typeof window === 'undefined') return;\n try {\n const payload = { timestamp: Date.now(), data };\n localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to save step', error);\n }\n }\n\n getStep<T>(stepId: string): T | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed.data as T;\n }\n return parsed as T;\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to get step', error);\n return undefined;\n }\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n if (typeof window === 'undefined') return undefined;\n try {\n const item = localStorage.getItem(this.getKey(stepId));\n if (!item) return undefined;\n\n const parsed = JSON.parse(item);\n if (parsed && typeof parsed === 'object' && 'timestamp' in parsed && 'data' in parsed) {\n return parsed as { data: T; timestamp: number };\n }\n return { data: parsed as T, timestamp: 0 };\n } catch (_error) {\n return undefined;\n }\n }\n\n clearStep(stepId: string): void {\n if (typeof window === 'undefined') return;\n try {\n localStorage.removeItem(this.getKey(stepId));\n } catch (error) {\n console.warn('LocalStorageAdapter: Failed to clear step', error);\n }\n }\n\n clear(): void {\n if (typeof window === 'undefined') return;\n Object.keys(localStorage).forEach((key) => {\n if (key.startsWith(this.prefix)) {\n localStorage.removeItem(key);\n }\n });\n }\n}\n","import type { IPersistenceAdapter } from '@wizzard-packages/core';\n\n/**\n * In-memory persistence adapter for tests or ephemeral sessions.\n */\nexport class MemoryAdapter implements IPersistenceAdapter {\n private storage: Record<string, any> = {};\n\n saveStep<T>(stepId: string, data: T): void {\n this.storage[stepId] = data;\n }\n\n getStep<T>(stepId: string): T | undefined {\n return this.storage[stepId] as T;\n }\n\n getStepWithMeta<T>(stepId: string): { data: T; timestamp: number } | undefined {\n const item = this.storage[stepId];\n if (!item) return undefined;\n return { data: item as T, timestamp: Date.now() };\n }\n\n clearStep(stepId: string): void {\n delete this.storage[stepId];\n }\n\n clear(): void {\n this.storage = {};\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@wizzard-packages/persistence",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "Persistence adapters for Wizzard Stepper.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -24,8 +24,17 @@
24
24
  "require": "./dist/index.cjs"
25
25
  }
26
26
  },
27
+ "keywords": [
28
+ "wizard",
29
+ "stepper",
30
+ "persistence",
31
+ "localstorage",
32
+ "state",
33
+ "form"
34
+ ],
35
+ "license": "MIT",
27
36
  "dependencies": {
28
- "@wizzard-packages/core": "0.1.0"
37
+ "@wizzard-packages/core": "0.1.1"
29
38
  },
30
39
  "devDependencies": {
31
40
  "tsup": "^8.3.5",