Updated documentation
This commit is contained in:
parent
9757b7aaca
commit
09bbfc0b75
23
README.md
23
README.md
@ -46,7 +46,7 @@
|
|||||||
|
|
||||||
Persist is an updated version of [webstorage-decorators](https://git.zakscode.com/ztimson/webstorage-decorators), a library which saves variables to local or session storage.
|
Persist is an updated version of [webstorage-decorators](https://git.zakscode.com/ztimson/webstorage-decorators), a library which saves variables to local or session storage.
|
||||||
|
|
||||||
This library aims to improve upon the original's limitations by using the new [Proxy Objects](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy). Improvements include:
|
This library aims to improve upon the original's limitations by using the new [Proxy Object](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy). Improvements include:
|
||||||
- Supports both objects & decorators
|
- Supports both objects & decorators
|
||||||
- Proxy object ensures all changes are tracked including impure functions
|
- Proxy object ensures all changes are tracked including impure functions
|
||||||
- [Proto]types and functions can be preserved by passing the `type` option
|
- [Proto]types and functions can be preserved by passing the `type` option
|
||||||
@ -80,6 +80,27 @@ console.log(theme.current); // Output: light
|
|||||||
theme.current = 'dark'; // You can ommit `.value` when using the decorator
|
theme.current = 'dark'; // You can ommit `.value` when using the decorator
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Advanced uses:
|
||||||
|
|
||||||
|
```ts
|
||||||
|
import {Persist} from 'ztimson/persist';
|
||||||
|
|
||||||
|
// Options are the same for both the persist decorator and object:
|
||||||
|
let example = new Persist<string[]>('example', {
|
||||||
|
storage: SessionStorage, // Use a different storage solution
|
||||||
|
default: [], // Default value if stored value === undefined
|
||||||
|
type: Array // Ensures [proto]type & methods are restored
|
||||||
|
});
|
||||||
|
|
||||||
|
// Callback when changes are made
|
||||||
|
example.watch(value => console.log(`Length - ${value.length}`));
|
||||||
|
example.value = [1, 2, 3];
|
||||||
|
// Output: Length - 3
|
||||||
|
example.value.pop(); // Impure changes are saved
|
||||||
|
// Output: Length - 2
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
### Built With
|
### Built With
|
||||||
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/)
|
[![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/)
|
||||||
|
|
||||||
|
72
package-lock.json
generated
72
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "persist",
|
"name": "persist",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "persist",
|
"name": "persist",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@types/jest": "^29.5.11",
|
"@types/jest": "^29.5.11",
|
||||||
@ -14,7 +14,6 @@
|
|||||||
"jest-junit": "^16.0.0",
|
"jest-junit": "^16.0.0",
|
||||||
"ts-jest": "^29.1.1",
|
"ts-jest": "^29.1.1",
|
||||||
"typedoc": "^0.25.4",
|
"typedoc": "^0.25.4",
|
||||||
"typedoc-plugin-markdown": "^3.17.1",
|
|
||||||
"typescript": "^5.3.3"
|
"typescript": "^5.3.3"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1895,27 +1894,6 @@
|
|||||||
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/handlebars": {
|
|
||||||
"version": "4.7.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz",
|
|
||||||
"integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"minimist": "^1.2.5",
|
|
||||||
"neo-async": "^2.6.2",
|
|
||||||
"source-map": "^0.6.1",
|
|
||||||
"wordwrap": "^1.0.0"
|
|
||||||
},
|
|
||||||
"bin": {
|
|
||||||
"handlebars": "bin/handlebars"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.4.7"
|
|
||||||
},
|
|
||||||
"optionalDependencies": {
|
|
||||||
"uglify-js": "^3.1.4"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/has-flag": {
|
"node_modules/has-flag": {
|
||||||
"version": "4.0.0",
|
"version": "4.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
|
||||||
@ -2988,15 +2966,6 @@
|
|||||||
"node": "*"
|
"node": "*"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/minimist": {
|
|
||||||
"version": "1.2.8",
|
|
||||||
"resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz",
|
|
||||||
"integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==",
|
|
||||||
"dev": true,
|
|
||||||
"funding": {
|
|
||||||
"url": "https://github.com/sponsors/ljharb"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/mkdirp": {
|
"node_modules/mkdirp": {
|
||||||
"version": "1.0.4",
|
"version": "1.0.4",
|
||||||
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz",
|
||||||
@ -3021,12 +2990,6 @@
|
|||||||
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
"integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==",
|
||||||
"dev": true
|
"dev": true
|
||||||
},
|
},
|
||||||
"node_modules/neo-async": {
|
|
||||||
"version": "2.6.2",
|
|
||||||
"resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz",
|
|
||||||
"integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/node-int64": {
|
"node_modules/node-int64": {
|
||||||
"version": "0.4.0",
|
"version": "0.4.0",
|
||||||
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
|
"resolved": "https://registry.npmjs.org/node-int64/-/node-int64-0.4.0.tgz",
|
||||||
@ -3694,18 +3657,6 @@
|
|||||||
"typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x"
|
"typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/typedoc-plugin-markdown": {
|
|
||||||
"version": "3.17.1",
|
|
||||||
"resolved": "https://registry.npmjs.org/typedoc-plugin-markdown/-/typedoc-plugin-markdown-3.17.1.tgz",
|
|
||||||
"integrity": "sha512-QzdU3fj0Kzw2XSdoL15ExLASt2WPqD7FbLeaqwT70+XjKyTshBnUlQA5nNREO1C2P8Uen0CDjsBLMsCQ+zd0lw==",
|
|
||||||
"dev": true,
|
|
||||||
"dependencies": {
|
|
||||||
"handlebars": "^4.7.7"
|
|
||||||
},
|
|
||||||
"peerDependencies": {
|
|
||||||
"typedoc": ">=0.24.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/typedoc/node_modules/brace-expansion": {
|
"node_modules/typedoc/node_modules/brace-expansion": {
|
||||||
"version": "2.0.1",
|
"version": "2.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
|
||||||
@ -3743,19 +3694,6 @@
|
|||||||
"node": ">=14.17"
|
"node": ">=14.17"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/uglify-js": {
|
|
||||||
"version": "3.17.4",
|
|
||||||
"resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz",
|
|
||||||
"integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==",
|
|
||||||
"dev": true,
|
|
||||||
"optional": true,
|
|
||||||
"bin": {
|
|
||||||
"uglifyjs": "bin/uglifyjs"
|
|
||||||
},
|
|
||||||
"engines": {
|
|
||||||
"node": ">=0.8.0"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"node_modules/undici-types": {
|
"node_modules/undici-types": {
|
||||||
"version": "5.26.5",
|
"version": "5.26.5",
|
||||||
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
"resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
|
||||||
@ -3851,12 +3789,6 @@
|
|||||||
"node": ">= 8"
|
"node": ">= 8"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"node_modules/wordwrap": {
|
|
||||||
"version": "1.0.0",
|
|
||||||
"resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz",
|
|
||||||
"integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==",
|
|
||||||
"dev": true
|
|
||||||
},
|
|
||||||
"node_modules/wrap-ansi": {
|
"node_modules/wrap-ansi": {
|
||||||
"version": "7.0.0",
|
"version": "7.0.0",
|
||||||
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
"resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "persist",
|
"name": "persist",
|
||||||
"version": "1.0.1",
|
"version": "1.0.2",
|
||||||
"description": "Sync variables with the local/session storage using proxy objects & decorators",
|
"description": "Sync variables with the local/session storage using proxy objects & decorators",
|
||||||
"repository": "https://git.zakscode.com/ztimson/persistance",
|
"repository": "https://git.zakscode.com/ztimson/persistance",
|
||||||
"author": "Zak Timson",
|
"author": "Zak Timson",
|
||||||
|
@ -68,6 +68,11 @@ export class Persist<T> {
|
|||||||
this.load();
|
this.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Notify listeners of change */
|
||||||
|
private notify(value: T) {
|
||||||
|
Object.values(this.watches).forEach(watch => watch(value));
|
||||||
|
}
|
||||||
|
|
||||||
/** Delete value from storage */
|
/** Delete value from storage */
|
||||||
clear() {
|
clear() {
|
||||||
this.storage.removeItem(this.key);
|
this.storage.removeItem(this.key);
|
||||||
@ -101,11 +106,6 @@ export class Persist<T> {
|
|||||||
|
|
||||||
/** Return current value */
|
/** Return current value */
|
||||||
valueOf() { return this.value; }
|
valueOf() { return this.value; }
|
||||||
|
|
||||||
/** Notify listeners of change */
|
|
||||||
private notify(value: T) {
|
|
||||||
Object.values(this.watches).forEach(watch => watch(value));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
Loading…
Reference in New Issue
Block a user