@chocbite/ts-lib-localstorage 1.0.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.
@@ -0,0 +1,37 @@
1
+ import { Option, ResultOk } from "@chocbite/ts-lib-result";
2
+ import { StateROAW } from "@chocbite/ts-lib-state";
3
+
4
+ //#region src/index.d.ts
5
+ declare const settings_set_name_transform: (transform: (name: string) => string) => void;
6
+ /**Initialises the storage for the package
7
+ * @param package_name use import {name} from ("../package.json")
8
+ * @param package_version use import {version} from ("../package.json")*/
9
+ declare const storage_init: (package_name: string, package_version: string) => StorageGroup;
10
+ /**Group of storage should never be instantiated manually use storage_init*/
11
+ declare class StorageGroup {
12
+ private path_id;
13
+ private settings;
14
+ private sub_groups;
15
+ readonly version_changed: string | undefined;
16
+ constructor(path: string, version_changed?: string);
17
+ /**Makes a storage subgroup for this group
18
+ * @param id unique identifier for this subgroup in the parent group*/
19
+ make_sub_group(id: string): StorageGroup;
20
+ /**Gets value of storage or fallbacks to default
21
+ * @param id unique identifier for this storage in the parent group
22
+ * @param fallback value to use if no storage is stored
23
+ * @param check function to check if the stored value is valid, if not the fallback will be used
24
+ * @param version_changed function called when the version of the package changed to migrate old value to new formats */
25
+ get<T>(id: string, fallback: T, check?: (parsed: unknown) => Option<T>, version_changed?: (existing: string, oldVersion: string) => T): ResultOk<T>;
26
+ /**Sets value of storage, that has not been registered to a state
27
+ * @param id unique identifier for this storage in the parent group
28
+ * @param value value to set*/
29
+ set(id: string, value: any): void;
30
+ /**Registers a state to storage
31
+ * @param id unique identifier for this storage in the parent group
32
+ * @param state state object representing the storage's value */
33
+ register<READ, TYPE = READ>(id: string, state: StateROAW<READ>, transform?: (state: ResultOk<READ>) => TYPE): void;
34
+ }
35
+ //#endregion
36
+ export { StorageGroup, settings_set_name_transform, storage_init };
37
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2luZGV4LnRzIl0sIm1hcHBpbmdzIjoiOzs7O2NBSWEsMkJBQUEsR0FDWCxTQUFBLEdBQVksSUFBQTs7QUFEZDs7Y0FtQmEsWUFBQSxHQUFnQixZQUFBLFVBQXNCLGVBQUEsYUFBdUIsWUFBQTs7Y0EyQjdELFlBQUE7RUFBQSxRQUNILE9BQUE7RUFBQSxRQUNBLFFBQUE7RUFBQSxRQUNBLFVBQUE7RUFBQSxTQUNDLGVBQUE7Y0FFRyxJQUFBLFVBQWMsZUFBQTtFQWpDdUI7O0VBd0NqRCxjQUFBLENBQWUsRUFBQSxXQUFVLFlBQUE7RUF2QjFCO0FBVUQ7Ozs7RUEyQkUsR0FBQSxHQUFBLENBQ0UsRUFBQSxVQUNBLFFBQUEsRUFBVSxDQUFBLEVBQ1YsS0FBQSxJQUFTLE1BQUEsY0FBb0IsTUFBQSxDQUFPLENBQUEsR0FDcEMsZUFBQSxJQUFtQixRQUFBLFVBQWtCLFVBQUEsYUFBdUIsQ0FBQSxHQUMzRCxRQUFBLENBQVMsQ0FBQTtFQUYwQjs7O0VBd0J0QyxHQUFBLENBQUksRUFBQSxVQUFZLEtBQUE7RUF0QmI7OztFQStCSCxRQUFBLGNBQXNCLElBQUEsQ0FBQSxDQUNwQixFQUFBLFVBQ0EsS0FBQSxFQUFPLFNBQUEsQ0FBVSxJQUFBLEdBQ2pCLFNBQUEsSUFBYSxLQUFBLEVBQU8sUUFBQSxDQUFTLElBQUEsTUFBVSxJQUFBO0FBQUEifQ==
package/dist/index.mjs ADDED
@@ -0,0 +1,93 @@
1
+ import { ok } from "@chocbite/ts-lib-result";
2
+ //#region src/index.ts
3
+ let name_transformer;
4
+ const settings_set_name_transform = (transform) => {
5
+ name_transformer = transform;
6
+ };
7
+ const packages = localStorage["settings/packageVersions"];
8
+ let package_versions = {};
9
+ try {
10
+ package_versions = packages ? JSON.parse(packages) : {};
11
+ } catch (_e) {}
12
+ let store_package_versions_timeout;
13
+ const BOTTOM_GROUPS = {};
14
+ /**Initialises the storage for the package
15
+ * @param package_name use import {name} from ("../package.json")
16
+ * @param package_version use import {version} from ("../package.json")*/
17
+ const storage_init = (package_name, package_version) => {
18
+ if (name_transformer) package_name = name_transformer(package_name);
19
+ let changed;
20
+ if (package_versions[package_name] !== package_version) {
21
+ changed = package_versions[package_name];
22
+ package_versions[package_name] = package_version;
23
+ if (store_package_versions_timeout) clearTimeout(store_package_versions_timeout);
24
+ store_package_versions_timeout = window.setTimeout(() => {
25
+ localStorage["storage/packageVersions"] = JSON.stringify(package_versions);
26
+ }, 1e3);
27
+ }
28
+ return BOTTOM_GROUPS[package_name] = new StorageGroup(package_name, changed ? changed : void 0);
29
+ };
30
+ var Storage = class {
31
+ state;
32
+ constructor(state) {
33
+ this.state = state;
34
+ }
35
+ };
36
+ /**Group of storage should never be instantiated manually use storage_init*/
37
+ var StorageGroup = class StorageGroup {
38
+ path_id;
39
+ settings = {};
40
+ sub_groups = {};
41
+ version_changed;
42
+ constructor(path, version_changed) {
43
+ this.version_changed = version_changed;
44
+ this.path_id = path;
45
+ }
46
+ /**Makes a storage subgroup for this group
47
+ * @param id unique identifier for this subgroup in the parent group*/
48
+ make_sub_group(id) {
49
+ if (id in this.sub_groups) throw new Error("Sub group already registered " + id);
50
+ return this.sub_groups[id] = new StorageGroup(this.path_id + "/" + id, this.version_changed);
51
+ }
52
+ /**Gets value of storage or fallbacks to default
53
+ * @param id unique identifier for this storage in the parent group
54
+ * @param fallback value to use if no storage is stored
55
+ * @param check function to check if the stored value is valid, if not the fallback will be used
56
+ * @param version_changed function called when the version of the package changed to migrate old value to new formats */
57
+ get(id, fallback, check, version_changed) {
58
+ const saved = localStorage.getItem(this.path_id + "/" + id);
59
+ if (saved === null) return ok(fallback);
60
+ try {
61
+ if (this.version_changed && version_changed) {
62
+ const changed_value = version_changed(saved, this.version_changed);
63
+ localStorage.setItem(this.path_id + "/" + id, JSON.stringify(changed_value));
64
+ return ok(changed_value);
65
+ }
66
+ if (check) return ok(check(JSON.parse(saved)).unwrap_or(fallback));
67
+ return ok(JSON.parse(saved));
68
+ } catch (e) {
69
+ return ok(fallback);
70
+ }
71
+ }
72
+ /**Sets value of storage, that has not been registered to a state
73
+ * @param id unique identifier for this storage in the parent group
74
+ * @param value value to set*/
75
+ set(id, value) {
76
+ if (id in this.settings) throw new Error("Storage is registered " + this.path_id + "/" + id);
77
+ localStorage[this.path_id + "/" + id] = JSON.stringify(value);
78
+ }
79
+ /**Registers a state to storage
80
+ * @param id unique identifier for this storage in the parent group
81
+ * @param state state object representing the storage's value */
82
+ register(id, state, transform) {
83
+ if (id in this.settings) throw new Error("Storage already registered " + this.path_id + "/" + id);
84
+ this.settings[id] = new Storage(state);
85
+ state.sub((value) => {
86
+ localStorage[this.path_id + "/" + id] = JSON.stringify(transform ? transform(value) : value.value);
87
+ });
88
+ }
89
+ };
90
+ //#endregion
91
+ export { StorageGroup, settings_set_name_transform, storage_init };
92
+
93
+ //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXgubWpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9pbmRleC50cyJdLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBvaywgdHlwZSBPcHRpb24sIHR5cGUgUmVzdWx0T2sgfSBmcm9tIFwiQGNob2NiaXRlL3RzLWxpYi1yZXN1bHRcIjtcbmltcG9ydCB0eXBlIHsgU3RhdGVST0FXIH0gZnJvbSBcIkBjaG9jYml0ZS90cy1saWItc3RhdGVcIjtcblxubGV0IG5hbWVfdHJhbnNmb3JtZXI6ICgobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcpIHwgdW5kZWZpbmVkO1xuZXhwb3J0IGNvbnN0IHNldHRpbmdzX3NldF9uYW1lX3RyYW5zZm9ybSA9IChcbiAgdHJhbnNmb3JtOiAobmFtZTogc3RyaW5nKSA9PiBzdHJpbmcsXG4pID0+IHtcbiAgbmFtZV90cmFuc2Zvcm1lciA9IHRyYW5zZm9ybTtcbn07XG5cbmNvbnN0IHBhY2thZ2VzID0gbG9jYWxTdG9yYWdlW1wic2V0dGluZ3MvcGFja2FnZVZlcnNpb25zXCJdIGFzIHN0cmluZyB8IHVuZGVmaW5lZDtcbmxldCBwYWNrYWdlX3ZlcnNpb25zOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge307XG50cnkge1xuICBwYWNrYWdlX3ZlcnNpb25zID0gcGFja2FnZXNcbiAgICA/IChKU09OLnBhcnNlKHBhY2thZ2VzKSBhcyB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9KVxuICAgIDoge307XG59IGNhdGNoIChfZSkge31cbmxldCBzdG9yZV9wYWNrYWdlX3ZlcnNpb25zX3RpbWVvdXQ6IG51bWJlciB8IHVuZGVmaW5lZDtcbmNvbnN0IEJPVFRPTV9HUk9VUFM6IHsgW2tleTogc3RyaW5nXTogU3RvcmFnZUdyb3VwIH0gPSB7fTtcblxuLyoqSW5pdGlhbGlzZXMgdGhlIHN0b3JhZ2UgZm9yIHRoZSBwYWNrYWdlXG4gKiBAcGFyYW0gcGFja2FnZV9uYW1lIHVzZSBpbXBvcnQge25hbWV9IGZyb20gKFwiLi4vcGFja2FnZS5qc29uXCIpXG4gKiBAcGFyYW0gcGFja2FnZV92ZXJzaW9uIHVzZSBpbXBvcnQge3ZlcnNpb259IGZyb20gKFwiLi4vcGFja2FnZS5qc29uXCIpKi9cbmV4cG9ydCBjb25zdCBzdG9yYWdlX2luaXQgPSAocGFja2FnZV9uYW1lOiBzdHJpbmcsIHBhY2thZ2VfdmVyc2lvbjogc3RyaW5nKSA9PiB7XG4gIGlmIChuYW1lX3RyYW5zZm9ybWVyKSBwYWNrYWdlX25hbWUgPSBuYW1lX3RyYW5zZm9ybWVyKHBhY2thZ2VfbmFtZSk7XG4gIGxldCBjaGFuZ2VkOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIGlmIChwYWNrYWdlX3ZlcnNpb25zW3BhY2thZ2VfbmFtZV0gIT09IHBhY2thZ2VfdmVyc2lvbikge1xuICAgIGNoYW5nZWQgPSBwYWNrYWdlX3ZlcnNpb25zW3BhY2thZ2VfbmFtZV07XG4gICAgcGFja2FnZV92ZXJzaW9uc1twYWNrYWdlX25hbWVdID0gcGFja2FnZV92ZXJzaW9uO1xuICAgIGlmIChzdG9yZV9wYWNrYWdlX3ZlcnNpb25zX3RpbWVvdXQpXG4gICAgICBjbGVhclRpbWVvdXQoc3RvcmVfcGFja2FnZV92ZXJzaW9uc190aW1lb3V0KTtcbiAgICBzdG9yZV9wYWNrYWdlX3ZlcnNpb25zX3RpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2VbXCJzdG9yYWdlL3BhY2thZ2VWZXJzaW9uc1wiXSA9XG4gICAgICAgIEpTT04uc3RyaW5naWZ5KHBhY2thZ2VfdmVyc2lvbnMpO1xuICAgIH0sIDEwMDApO1xuICB9XG4gIHJldHVybiAoQk9UVE9NX0dST1VQU1twYWNrYWdlX25hbWVdID0gbmV3IFN0b3JhZ2VHcm91cChcbiAgICBwYWNrYWdlX25hbWUsXG4gICAgY2hhbmdlZCA/IGNoYW5nZWQgOiB1bmRlZmluZWQsXG4gICkpO1xufTtcblxuY2xhc3MgU3RvcmFnZSB7XG4gIHJlYWRvbmx5IHN0YXRlOiBTdGF0ZVJPQVc8YW55PjtcbiAgY29uc3RydWN0b3Ioc3RhdGU6IFN0YXRlUk9BVzxhbnk+KSB7XG4gICAgdGhpcy5zdGF0ZSA9IHN0YXRlO1xuICB9XG59XG5cbi8qKkdyb3VwIG9mIHN0b3JhZ2Ugc2hvdWxkIG5ldmVyIGJlIGluc3RhbnRpYXRlZCBtYW51YWxseSB1c2Ugc3RvcmFnZV9pbml0Ki9cbmV4cG9ydCBjbGFzcyBTdG9yYWdlR3JvdXAge1xuICBwcml2YXRlIHBhdGhfaWQ6IHN0cmluZztcbiAgcHJpdmF0ZSBzZXR0aW5nczogeyBba2V5OiBzdHJpbmddOiBTdG9yYWdlIH0gPSB7fTtcbiAgcHJpdmF0ZSBzdWJfZ3JvdXBzOiB7IFtrZXk6IHN0cmluZ106IFN0b3JhZ2VHcm91cCB9ID0ge307XG4gIHJlYWRvbmx5IHZlcnNpb25fY2hhbmdlZDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKHBhdGg6IHN0cmluZywgdmVyc2lvbl9jaGFuZ2VkPzogc3RyaW5nKSB7XG4gICAgdGhpcy52ZXJzaW9uX2NoYW5nZWQgPSB2ZXJzaW9uX2NoYW5nZWQ7XG4gICAgdGhpcy5wYXRoX2lkID0gcGF0aDtcbiAgfVxuXG4gIC8qKk1ha2VzIGEgc3RvcmFnZSBzdWJncm91cCBmb3IgdGhpcyBncm91cFxuICAgKiBAcGFyYW0gaWQgdW5pcXVlIGlkZW50aWZpZXIgZm9yIHRoaXMgc3ViZ3JvdXAgaW4gdGhlIHBhcmVudCBncm91cCovXG4gIG1ha2Vfc3ViX2dyb3VwKGlkOiBzdHJpbmcpIHtcbiAgICBpZiAoaWQgaW4gdGhpcy5zdWJfZ3JvdXBzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3ViIGdyb3VwIGFscmVhZHkgcmVnaXN0ZXJlZCBcIiArIGlkKTtcbiAgICByZXR1cm4gKHRoaXMuc3ViX2dyb3Vwc1tpZF0gPSBuZXcgU3RvcmFnZUdyb3VwKFxuICAgICAgdGhpcy5wYXRoX2lkICsgXCIvXCIgKyBpZCxcbiAgICAgIHRoaXMudmVyc2lvbl9jaGFuZ2VkLFxuICAgICkpO1xuICB9XG5cbiAgLyoqR2V0cyB2YWx1ZSBvZiBzdG9yYWdlIG9yIGZhbGxiYWNrcyB0byBkZWZhdWx0XG4gICAqIEBwYXJhbSBpZCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdG9yYWdlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAgICogQHBhcmFtIGZhbGxiYWNrIHZhbHVlIHRvIHVzZSBpZiBubyBzdG9yYWdlIGlzIHN0b3JlZFxuICAgKiBAcGFyYW0gY2hlY2sgZnVuY3Rpb24gdG8gY2hlY2sgaWYgdGhlIHN0b3JlZCB2YWx1ZSBpcyB2YWxpZCwgaWYgbm90IHRoZSBmYWxsYmFjayB3aWxsIGJlIHVzZWRcbiAgICogQHBhcmFtIHZlcnNpb25fY2hhbmdlZCBmdW5jdGlvbiBjYWxsZWQgd2hlbiB0aGUgdmVyc2lvbiBvZiB0aGUgcGFja2FnZSBjaGFuZ2VkIHRvIG1pZ3JhdGUgb2xkIHZhbHVlIHRvIG5ldyBmb3JtYXRzICovXG4gIGdldDxUPihcbiAgICBpZDogc3RyaW5nLFxuICAgIGZhbGxiYWNrOiBULFxuICAgIGNoZWNrPzogKHBhcnNlZDogdW5rbm93bikgPT4gT3B0aW9uPFQ+LFxuICAgIHZlcnNpb25fY2hhbmdlZD86IChleGlzdGluZzogc3RyaW5nLCBvbGRWZXJzaW9uOiBzdHJpbmcpID0+IFQsXG4gICk6IFJlc3VsdE9rPFQ+IHtcbiAgICBjb25zdCBzYXZlZCA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKHRoaXMucGF0aF9pZCArIFwiL1wiICsgaWQpO1xuICAgIGlmIChzYXZlZCA9PT0gbnVsbCkgcmV0dXJuIG9rKGZhbGxiYWNrKTtcbiAgICB0cnkge1xuICAgICAgaWYgKHRoaXMudmVyc2lvbl9jaGFuZ2VkICYmIHZlcnNpb25fY2hhbmdlZCkge1xuICAgICAgICBjb25zdCBjaGFuZ2VkX3ZhbHVlID0gdmVyc2lvbl9jaGFuZ2VkKHNhdmVkLCB0aGlzLnZlcnNpb25fY2hhbmdlZCk7XG4gICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFxuICAgICAgICAgIHRoaXMucGF0aF9pZCArIFwiL1wiICsgaWQsXG4gICAgICAgICAgSlNPTi5zdHJpbmdpZnkoY2hhbmdlZF92YWx1ZSksXG4gICAgICAgICk7XG4gICAgICAgIHJldHVybiBvayhjaGFuZ2VkX3ZhbHVlKTtcbiAgICAgIH1cbiAgICAgIGlmIChjaGVjaykgcmV0dXJuIG9rKGNoZWNrKEpTT04ucGFyc2Uoc2F2ZWQpKS51bndyYXBfb3IoZmFsbGJhY2spKTtcbiAgICAgIHJldHVybiBvayhKU09OLnBhcnNlKHNhdmVkKSBhcyBUKTtcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICByZXR1cm4gb2soZmFsbGJhY2spO1xuICAgIH1cbiAgfVxuXG4gIC8qKlNldHMgdmFsdWUgb2Ygc3RvcmFnZSwgdGhhdCBoYXMgbm90IGJlZW4gcmVnaXN0ZXJlZCB0byBhIHN0YXRlXG4gICAqIEBwYXJhbSBpZCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdG9yYWdlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAgICogQHBhcmFtIHZhbHVlIHZhbHVlIHRvIHNldCovXG4gIHNldChpZDogc3RyaW5nLCB2YWx1ZTogYW55KSB7XG4gICAgaWYgKGlkIGluIHRoaXMuc2V0dGluZ3MpXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoXCJTdG9yYWdlIGlzIHJlZ2lzdGVyZWQgXCIgKyB0aGlzLnBhdGhfaWQgKyBcIi9cIiArIGlkKTtcbiAgICBsb2NhbFN0b3JhZ2VbdGhpcy5wYXRoX2lkICsgXCIvXCIgKyBpZF0gPSBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7XG4gIH1cblxuICAvKipSZWdpc3RlcnMgYSBzdGF0ZSB0byBzdG9yYWdlXG4gICAqIEBwYXJhbSBpZCB1bmlxdWUgaWRlbnRpZmllciBmb3IgdGhpcyBzdG9yYWdlIGluIHRoZSBwYXJlbnQgZ3JvdXBcbiAgICogQHBhcmFtIHN0YXRlIHN0YXRlIG9iamVjdCByZXByZXNlbnRpbmcgdGhlIHN0b3JhZ2UncyB2YWx1ZSAqL1xuICByZWdpc3RlcjxSRUFELCBUWVBFID0gUkVBRD4oXG4gICAgaWQ6IHN0cmluZyxcbiAgICBzdGF0ZTogU3RhdGVST0FXPFJFQUQ+LFxuICAgIHRyYW5zZm9ybT86IChzdGF0ZTogUmVzdWx0T2s8UkVBRD4pID0+IFRZUEUsXG4gICkge1xuICAgIGlmIChpZCBpbiB0aGlzLnNldHRpbmdzKVxuICAgICAgdGhyb3cgbmV3IEVycm9yKFwiU3RvcmFnZSBhbHJlYWR5IHJlZ2lzdGVyZWQgXCIgKyB0aGlzLnBhdGhfaWQgKyBcIi9cIiArIGlkKTtcbiAgICB0aGlzLnNldHRpbmdzW2lkXSA9IG5ldyBTdG9yYWdlKHN0YXRlKTtcbiAgICBzdGF0ZS5zdWIoKHZhbHVlKSA9PiB7XG4gICAgICBsb2NhbFN0b3JhZ2VbdGhpcy5wYXRoX2lkICsgXCIvXCIgKyBpZF0gPSBKU09OLnN0cmluZ2lmeShcbiAgICAgICAgdHJhbnNmb3JtID8gdHJhbnNmb3JtKHZhbHVlKSA6IHZhbHVlLnZhbHVlLFxuICAgICAgKTtcbiAgICB9KTtcbiAgfVxufVxuIl0sIm1hcHBpbmdzIjoiOztBQUdBLElBQUk7QUFDSixNQUFhLCtCQUNYLGNBQ0c7QUFDSCxvQkFBbUI7O0FBR3JCLE1BQU0sV0FBVyxhQUFhO0FBQzlCLElBQUksbUJBQThDLEVBQUU7QUFDcEQsSUFBSTtBQUNGLG9CQUFtQixXQUNkLEtBQUssTUFBTSxTQUFTLEdBQ3JCLEVBQUU7U0FDQyxJQUFJO0FBQ2IsSUFBSTtBQUNKLE1BQU0sZ0JBQWlELEVBQUU7Ozs7QUFLekQsTUFBYSxnQkFBZ0IsY0FBc0Isb0JBQTRCO0FBQzdFLEtBQUksaUJBQWtCLGdCQUFlLGlCQUFpQixhQUFhO0NBQ25FLElBQUk7QUFDSixLQUFJLGlCQUFpQixrQkFBa0IsaUJBQWlCO0FBQ3RELFlBQVUsaUJBQWlCO0FBQzNCLG1CQUFpQixnQkFBZ0I7QUFDakMsTUFBSSwrQkFDRixjQUFhLCtCQUErQjtBQUM5QyxtQ0FBaUMsT0FBTyxpQkFBaUI7QUFDdkQsZ0JBQWEsNkJBQ1gsS0FBSyxVQUFVLGlCQUFpQjtLQUNqQyxJQUFLOztBQUVWLFFBQVEsY0FBYyxnQkFBZ0IsSUFBSSxhQUN4QyxjQUNBLFVBQVUsVUFBVSxLQUFBLEVBQ3JCOztBQUdILElBQU0sVUFBTixNQUFjO0NBQ1o7Q0FDQSxZQUFZLE9BQXVCO0FBQ2pDLE9BQUssUUFBUTs7OztBQUtqQixJQUFhLGVBQWIsTUFBYSxhQUFhO0NBQ3hCO0NBQ0EsV0FBK0MsRUFBRTtDQUNqRCxhQUFzRCxFQUFFO0NBQ3hEO0NBRUEsWUFBWSxNQUFjLGlCQUEwQjtBQUNsRCxPQUFLLGtCQUFrQjtBQUN2QixPQUFLLFVBQVU7Ozs7Q0FLakIsZUFBZSxJQUFZO0FBQ3pCLE1BQUksTUFBTSxLQUFLLFdBQ2IsT0FBTSxJQUFJLE1BQU0sa0NBQWtDLEdBQUc7QUFDdkQsU0FBUSxLQUFLLFdBQVcsTUFBTSxJQUFJLGFBQ2hDLEtBQUssVUFBVSxNQUFNLElBQ3JCLEtBQUssZ0JBQ047Ozs7Ozs7Q0FRSCxJQUNFLElBQ0EsVUFDQSxPQUNBLGlCQUNhO0VBQ2IsTUFBTSxRQUFRLGFBQWEsUUFBUSxLQUFLLFVBQVUsTUFBTSxHQUFHO0FBQzNELE1BQUksVUFBVSxLQUFNLFFBQU8sR0FBRyxTQUFTO0FBQ3ZDLE1BQUk7QUFDRixPQUFJLEtBQUssbUJBQW1CLGlCQUFpQjtJQUMzQyxNQUFNLGdCQUFnQixnQkFBZ0IsT0FBTyxLQUFLLGdCQUFnQjtBQUNsRSxpQkFBYSxRQUNYLEtBQUssVUFBVSxNQUFNLElBQ3JCLEtBQUssVUFBVSxjQUFjLENBQzlCO0FBQ0QsV0FBTyxHQUFHLGNBQWM7O0FBRTFCLE9BQUksTUFBTyxRQUFPLEdBQUcsTUFBTSxLQUFLLE1BQU0sTUFBTSxDQUFDLENBQUMsVUFBVSxTQUFTLENBQUM7QUFDbEUsVUFBTyxHQUFHLEtBQUssTUFBTSxNQUFNLENBQU07V0FDMUIsR0FBRztBQUNWLFVBQU8sR0FBRyxTQUFTOzs7Ozs7Q0FPdkIsSUFBSSxJQUFZLE9BQVk7QUFDMUIsTUFBSSxNQUFNLEtBQUssU0FDYixPQUFNLElBQUksTUFBTSwyQkFBMkIsS0FBSyxVQUFVLE1BQU0sR0FBRztBQUNyRSxlQUFhLEtBQUssVUFBVSxNQUFNLE1BQU0sS0FBSyxVQUFVLE1BQU07Ozs7O0NBTS9ELFNBQ0UsSUFDQSxPQUNBLFdBQ0E7QUFDQSxNQUFJLE1BQU0sS0FBSyxTQUNiLE9BQU0sSUFBSSxNQUFNLGdDQUFnQyxLQUFLLFVBQVUsTUFBTSxHQUFHO0FBQzFFLE9BQUssU0FBUyxNQUFNLElBQUksUUFBUSxNQUFNO0FBQ3RDLFFBQU0sS0FBSyxVQUFVO0FBQ25CLGdCQUFhLEtBQUssVUFBVSxNQUFNLE1BQU0sS0FBSyxVQUMzQyxZQUFZLFVBQVUsTUFBTSxHQUFHLE1BQU0sTUFDdEM7SUFDRCJ9
package/package.json ADDED
@@ -0,0 +1,47 @@
1
+ {
2
+ "name": "@chocbite/ts-lib-localstorage",
3
+ "version": "1.0.0",
4
+ "description": "Helpers for using localStorage and states in a Typescript",
5
+ "author": "chocolateandmilkwin",
6
+ "license": "MIT",
7
+ "type": "module",
8
+ "private": false,
9
+ "module": "./dist/index.mjs",
10
+ "types": "./dist/index.d.mts",
11
+ "publishConfig": {
12
+ "access": "public"
13
+ },
14
+ "exports": {
15
+ ".": {
16
+ "import": "./dist/index.mjs",
17
+ "types": "./dist/index.d.mts"
18
+ }
19
+ },
20
+ "files": [
21
+ "dist"
22
+ ],
23
+ "scripts": {
24
+ "dev": "vite --port 9956",
25
+ "build": "tsdown src/index.ts",
26
+ "lint": "eslint src/**/*.ts",
27
+ "test": "vitest run",
28
+ "check-deps": "npx depcheck",
29
+ "check-trials": "tsc --noEmit",
30
+ "prepublishOnly": "npm run check-deps && npm run check-trials && npm run build",
31
+ "upgrades": "npx npm-check-updates --target semver",
32
+ "upgrade": "npx npm-check-updates --target semver -u && npm install"
33
+ },
34
+ "devDependencies": {
35
+ "@chocbite/ts-supplement-eslint": "^1.0.3",
36
+ "@vitest/browser-playwright": "^4.1.9",
37
+ "eslint": "^10.5.0",
38
+ "tsdown": "^0.21.10",
39
+ "typescript": "^6.0.3",
40
+ "vite": "^8.1.0",
41
+ "vitest": "^4.1.9"
42
+ },
43
+ "dependencies": {
44
+ "@chocbite/ts-lib-result": "^1.4.1",
45
+ "@chocbite/ts-lib-state": "^2.2.1"
46
+ }
47
+ }