@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.
- package/dist/index.d.mts +37 -0
- package/dist/index.mjs +93 -0
- package/package.json +47 -0
package/dist/index.d.mts
ADDED
|
@@ -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
|
+
}
|