@wizzard-packages/persistence 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2025 Aziz
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/dist/index.cjs ADDED
@@ -0,0 +1,94 @@
1
+ 'use strict';
2
+
3
+ // src/LocalStorageAdapter.ts
4
+ var LocalStorageAdapter = class {
5
+ constructor(prefix = "wizard_") {
6
+ this.prefix = prefix;
7
+ }
8
+ getKey(stepId) {
9
+ return `${this.prefix}${stepId}`;
10
+ }
11
+ saveStep(stepId, data) {
12
+ if (typeof window === "undefined") return;
13
+ try {
14
+ const payload = { timestamp: Date.now(), data };
15
+ localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));
16
+ } catch (error) {
17
+ console.warn("LocalStorageAdapter: Failed to save step", error);
18
+ }
19
+ }
20
+ getStep(stepId) {
21
+ if (typeof window === "undefined") return void 0;
22
+ try {
23
+ const item = localStorage.getItem(this.getKey(stepId));
24
+ if (!item) return void 0;
25
+ const parsed = JSON.parse(item);
26
+ if (parsed && typeof parsed === "object" && "timestamp" in parsed && "data" in parsed) {
27
+ return parsed.data;
28
+ }
29
+ return parsed;
30
+ } catch (error) {
31
+ console.warn("LocalStorageAdapter: Failed to get step", error);
32
+ return void 0;
33
+ }
34
+ }
35
+ getStepWithMeta(stepId) {
36
+ if (typeof window === "undefined") return void 0;
37
+ try {
38
+ const item = localStorage.getItem(this.getKey(stepId));
39
+ if (!item) return void 0;
40
+ const parsed = JSON.parse(item);
41
+ if (parsed && typeof parsed === "object" && "timestamp" in parsed && "data" in parsed) {
42
+ return parsed;
43
+ }
44
+ return { data: parsed, timestamp: 0 };
45
+ } catch (error) {
46
+ return void 0;
47
+ }
48
+ }
49
+ clearStep(stepId) {
50
+ if (typeof window === "undefined") return;
51
+ try {
52
+ localStorage.removeItem(this.getKey(stepId));
53
+ } catch (error) {
54
+ console.warn("LocalStorageAdapter: Failed to clear step", error);
55
+ }
56
+ }
57
+ clear() {
58
+ if (typeof window === "undefined") return;
59
+ Object.keys(localStorage).forEach((key) => {
60
+ if (key.startsWith(this.prefix)) {
61
+ localStorage.removeItem(key);
62
+ }
63
+ });
64
+ }
65
+ };
66
+
67
+ // src/MemoryAdapter.ts
68
+ var MemoryAdapter = class {
69
+ constructor() {
70
+ this.storage = {};
71
+ }
72
+ saveStep(stepId, data) {
73
+ this.storage[stepId] = data;
74
+ }
75
+ getStep(stepId) {
76
+ return this.storage[stepId];
77
+ }
78
+ getStepWithMeta(stepId) {
79
+ const item = this.storage[stepId];
80
+ if (!item) return void 0;
81
+ return { data: item, timestamp: Date.now() };
82
+ }
83
+ clearStep(stepId) {
84
+ delete this.storage[stepId];
85
+ }
86
+ clear() {
87
+ this.storage = {};
88
+ }
89
+ };
90
+
91
+ exports.LocalStorageAdapter = LocalStorageAdapter;
92
+ exports.MemoryAdapter = MemoryAdapter;
93
+ //# sourceMappingURL=index.cjs.map
94
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/LocalStorageAdapter.ts","../src/MemoryAdapter.ts"],"names":[],"mappings":";;;AAKO,IAAM,sBAAN,MAAyD;AAAA,EAG9D,WAAA,CAAY,SAAiB,SAAA,EAAW;AACtC,IAAA,IAAA,CAAK,MAAA,GAAS,MAAA;AAAA,EAChB;AAAA,EAEQ,OAAO,MAAA,EAAwB;AACrC,IAAA,OAAO,CAAA,EAAG,IAAA,CAAK,MAAM,CAAA,EAAG,MAAM,CAAA,CAAA;AAAA,EAChC;AAAA,EAEA,QAAA,CAAY,QAAgB,IAAA,EAAe;AACzC,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,IAAI;AACF,MAAA,MAAM,UAAU,EAAE,SAAA,EAAW,IAAA,CAAK,GAAA,IAAO,IAAA,EAAK;AAC9C,MAAA,YAAA,CAAa,OAAA,CAAQ,KAAK,MAAA,CAAO,MAAM,GAAG,IAAA,CAAK,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,IACnE,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,4CAA4C,KAAK,CAAA;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,QAAW,MAAA,EAA+B;AACxC,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AACrD,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA,CAAA;AAElB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,MAAA,IAAI,UAAU,OAAO,MAAA,KAAW,YAAY,WAAA,IAAe,MAAA,IAAU,UAAU,MAAA,EAAQ;AACrF,QAAA,OAAO,MAAA,CAAO,IAAA;AAAA,MAChB;AACA,MAAA,OAAO,MAAA;AAAA,IACT,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,2CAA2C,KAAK,CAAA;AAC7D,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,gBAAmB,MAAA,EAA4D;AAC7E,IAAA,IAAI,OAAO,MAAA,KAAW,WAAA,EAAa,OAAO,MAAA;AAC1C,IAAA,IAAI;AACF,MAAA,MAAM,OAAO,YAAA,CAAa,OAAA,CAAQ,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AACrD,MAAA,IAAI,CAAC,MAAM,OAAO,KAAA,CAAA;AAElB,MAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,IAAI,CAAA;AAC9B,MAAA,IAAI,UAAU,OAAO,MAAA,KAAW,YAAY,WAAA,IAAe,MAAA,IAAU,UAAU,MAAA,EAAQ;AACrF,QAAA,OAAO,MAAA;AAAA,MACT;AACA,MAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAa,SAAA,EAAW,CAAA,EAAE;AAAA,IAC3C,SAAS,KAAA,EAAO;AACd,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF;AAAA,EAEA,UAAU,MAAA,EAAsB;AAC9B,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,IAAI;AACF,MAAA,YAAA,CAAa,UAAA,CAAW,IAAA,CAAK,MAAA,CAAO,MAAM,CAAC,CAAA;AAAA,IAC7C,SAAS,KAAA,EAAO;AACd,MAAA,OAAA,CAAQ,IAAA,CAAK,6CAA6C,KAAK,CAAA;AAAA,IACjE;AAAA,EACF;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAI,OAAO,WAAW,WAAA,EAAa;AACnC,IAAA,MAAA,CAAO,IAAA,CAAK,YAAY,CAAA,CAAE,OAAA,CAAQ,CAAC,GAAA,KAAQ;AACzC,MAAA,IAAI,GAAA,CAAI,UAAA,CAAW,IAAA,CAAK,MAAM,CAAA,EAAG;AAC/B,QAAA,YAAA,CAAa,WAAW,GAAG,CAAA;AAAA,MAC7B;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AACF;;;ACvEO,IAAM,gBAAN,MAAmD;AAAA,EAAnD,WAAA,GAAA;AACL,IAAA,IAAA,CAAQ,UAA+B,EAAC;AAAA,EAAA;AAAA,EAExC,QAAA,CAAY,QAAgB,IAAA,EAAe;AACzC,IAAA,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA,GAAI,IAAA;AAAA,EACzB;AAAA,EAEA,QAAW,MAAA,EAA+B;AACxC,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EAC5B;AAAA,EAEA,gBAAmB,MAAA,EAA4D;AAC7E,IAAA,MAAM,IAAA,GAAO,IAAA,CAAK,OAAA,CAAQ,MAAM,CAAA;AAChC,IAAA,IAAI,CAAC,MAAM,OAAO,MAAA;AAClB,IAAA,OAAO,EAAE,IAAA,EAAM,IAAA,EAAW,SAAA,EAAW,IAAA,CAAK,KAAI,EAAE;AAAA,EAClD;AAAA,EAEA,UAAU,MAAA,EAAsB;AAC9B,IAAA,OAAO,IAAA,CAAK,QAAQ,MAAM,CAAA;AAAA,EAC5B;AAAA,EAEA,KAAA,GAAc;AACZ,IAAA,IAAA,CAAK,UAAU,EAAC;AAAA,EAClB;AACF","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"]}
@@ -0,0 +1,35 @@
1
+ import { IPersistenceAdapter } from '@wizzard-packages/core';
2
+
3
+ /**
4
+ * Browser persistence adapter backed by localStorage.
5
+ */
6
+ declare class LocalStorageAdapter implements IPersistenceAdapter {
7
+ private prefix;
8
+ constructor(prefix?: string);
9
+ private getKey;
10
+ saveStep<T>(stepId: string, data: T): void;
11
+ getStep<T>(stepId: string): T | undefined;
12
+ getStepWithMeta<T>(stepId: string): {
13
+ data: T;
14
+ timestamp: number;
15
+ } | undefined;
16
+ clearStep(stepId: string): void;
17
+ clear(): void;
18
+ }
19
+
20
+ /**
21
+ * In-memory persistence adapter for tests or ephemeral sessions.
22
+ */
23
+ declare class MemoryAdapter implements IPersistenceAdapter {
24
+ private storage;
25
+ saveStep<T>(stepId: string, data: T): void;
26
+ getStep<T>(stepId: string): T | undefined;
27
+ getStepWithMeta<T>(stepId: string): {
28
+ data: T;
29
+ timestamp: number;
30
+ } | undefined;
31
+ clearStep(stepId: string): void;
32
+ clear(): void;
33
+ }
34
+
35
+ export { LocalStorageAdapter, MemoryAdapter };
@@ -0,0 +1,35 @@
1
+ import { IPersistenceAdapter } from '@wizzard-packages/core';
2
+
3
+ /**
4
+ * Browser persistence adapter backed by localStorage.
5
+ */
6
+ declare class LocalStorageAdapter implements IPersistenceAdapter {
7
+ private prefix;
8
+ constructor(prefix?: string);
9
+ private getKey;
10
+ saveStep<T>(stepId: string, data: T): void;
11
+ getStep<T>(stepId: string): T | undefined;
12
+ getStepWithMeta<T>(stepId: string): {
13
+ data: T;
14
+ timestamp: number;
15
+ } | undefined;
16
+ clearStep(stepId: string): void;
17
+ clear(): void;
18
+ }
19
+
20
+ /**
21
+ * In-memory persistence adapter for tests or ephemeral sessions.
22
+ */
23
+ declare class MemoryAdapter implements IPersistenceAdapter {
24
+ private storage;
25
+ saveStep<T>(stepId: string, data: T): void;
26
+ getStep<T>(stepId: string): T | undefined;
27
+ getStepWithMeta<T>(stepId: string): {
28
+ data: T;
29
+ timestamp: number;
30
+ } | undefined;
31
+ clearStep(stepId: string): void;
32
+ clear(): void;
33
+ }
34
+
35
+ export { LocalStorageAdapter, MemoryAdapter };
package/dist/index.js ADDED
@@ -0,0 +1,91 @@
1
+ // src/LocalStorageAdapter.ts
2
+ var LocalStorageAdapter = class {
3
+ constructor(prefix = "wizard_") {
4
+ this.prefix = prefix;
5
+ }
6
+ getKey(stepId) {
7
+ return `${this.prefix}${stepId}`;
8
+ }
9
+ saveStep(stepId, data) {
10
+ if (typeof window === "undefined") return;
11
+ try {
12
+ const payload = { timestamp: Date.now(), data };
13
+ localStorage.setItem(this.getKey(stepId), JSON.stringify(payload));
14
+ } catch (error) {
15
+ console.warn("LocalStorageAdapter: Failed to save step", error);
16
+ }
17
+ }
18
+ getStep(stepId) {
19
+ if (typeof window === "undefined") return void 0;
20
+ try {
21
+ const item = localStorage.getItem(this.getKey(stepId));
22
+ if (!item) return void 0;
23
+ const parsed = JSON.parse(item);
24
+ if (parsed && typeof parsed === "object" && "timestamp" in parsed && "data" in parsed) {
25
+ return parsed.data;
26
+ }
27
+ return parsed;
28
+ } catch (error) {
29
+ console.warn("LocalStorageAdapter: Failed to get step", error);
30
+ return void 0;
31
+ }
32
+ }
33
+ getStepWithMeta(stepId) {
34
+ if (typeof window === "undefined") return void 0;
35
+ try {
36
+ const item = localStorage.getItem(this.getKey(stepId));
37
+ if (!item) return void 0;
38
+ const parsed = JSON.parse(item);
39
+ if (parsed && typeof parsed === "object" && "timestamp" in parsed && "data" in parsed) {
40
+ return parsed;
41
+ }
42
+ return { data: parsed, timestamp: 0 };
43
+ } catch (error) {
44
+ return void 0;
45
+ }
46
+ }
47
+ clearStep(stepId) {
48
+ if (typeof window === "undefined") return;
49
+ try {
50
+ localStorage.removeItem(this.getKey(stepId));
51
+ } catch (error) {
52
+ console.warn("LocalStorageAdapter: Failed to clear step", error);
53
+ }
54
+ }
55
+ clear() {
56
+ if (typeof window === "undefined") return;
57
+ Object.keys(localStorage).forEach((key) => {
58
+ if (key.startsWith(this.prefix)) {
59
+ localStorage.removeItem(key);
60
+ }
61
+ });
62
+ }
63
+ };
64
+
65
+ // src/MemoryAdapter.ts
66
+ var MemoryAdapter = class {
67
+ constructor() {
68
+ this.storage = {};
69
+ }
70
+ saveStep(stepId, data) {
71
+ this.storage[stepId] = data;
72
+ }
73
+ getStep(stepId) {
74
+ return this.storage[stepId];
75
+ }
76
+ getStepWithMeta(stepId) {
77
+ const item = this.storage[stepId];
78
+ if (!item) return void 0;
79
+ return { data: item, timestamp: Date.now() };
80
+ }
81
+ clearStep(stepId) {
82
+ delete this.storage[stepId];
83
+ }
84
+ clear() {
85
+ this.storage = {};
86
+ }
87
+ };
88
+
89
+ export { LocalStorageAdapter, MemoryAdapter };
90
+ //# sourceMappingURL=index.js.map
91
+ //# sourceMappingURL=index.js.map
@@ -0,0 +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"]}
package/package.json ADDED
@@ -0,0 +1,43 @@
1
+ {
2
+ "name": "@wizzard-packages/persistence",
3
+ "version": "0.1.0",
4
+ "description": "Persistence adapters for Wizzard Stepper.",
5
+ "repository": {
6
+ "type": "git",
7
+ "url": "https://github.com/ZizzX/wizzard-packages.git",
8
+ "directory": "packages/persistence"
9
+ },
10
+ "type": "module",
11
+ "main": "./dist/index.cjs",
12
+ "module": "./dist/index.js",
13
+ "types": "./dist/index.d.ts",
14
+ "files": [
15
+ "dist"
16
+ ],
17
+ "publishConfig": {
18
+ "access": "public"
19
+ },
20
+ "exports": {
21
+ ".": {
22
+ "types": "./dist/index.d.ts",
23
+ "import": "./dist/index.js",
24
+ "require": "./dist/index.cjs"
25
+ }
26
+ },
27
+ "dependencies": {
28
+ "@wizzard-packages/core": "0.1.0"
29
+ },
30
+ "devDependencies": {
31
+ "tsup": "^8.3.5",
32
+ "typescript": "^5.7.2",
33
+ "vitest": "^4.0.16"
34
+ },
35
+ "scripts": {
36
+ "build": "tsup",
37
+ "dev": "tsup src/index.ts --format cjs,esm --watch --dts",
38
+ "lint": "eslint .",
39
+ "test": "vitest",
40
+ "test:run": "vitest run",
41
+ "type-check": "tsc --noEmit"
42
+ }
43
+ }