From 09bbfc0b75962a69777ae4ef918a9f1e026dd19d Mon Sep 17 00:00:00 2001 From: ztimson Date: Wed, 27 Dec 2023 17:39:59 -0500 Subject: [PATCH] Updated documentation --- README.md | 23 ++++++++++++++- package-lock.json | 72 ++--------------------------------------------- package.json | 2 +- src/persist.ts | 10 +++---- 4 files changed, 30 insertions(+), 77 deletions(-) diff --git a/README.md b/README.md index 5569b51..787d242 100644 --- a/README.md +++ b/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. -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 - Proxy object ensures all changes are tracked including impure functions - [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 ``` +Advanced uses: + +```ts +import {Persist} from 'ztimson/persist'; + +// Options are the same for both the persist decorator and object: +let example = new Persist('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 [![TypeScript](https://img.shields.io/badge/TypeScript-3178C6?style=for-the-badge&logo=typescript&logoColor=white)](https://typescriptlang.org/) diff --git a/package-lock.json b/package-lock.json index eefe8fc..22d94dc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "persist", - "version": "1.0.1", + "version": "1.0.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "persist", - "version": "1.0.1", + "version": "1.0.2", "license": "MIT", "devDependencies": { "@types/jest": "^29.5.11", @@ -14,7 +14,6 @@ "jest-junit": "^16.0.0", "ts-jest": "^29.1.1", "typedoc": "^0.25.4", - "typedoc-plugin-markdown": "^3.17.1", "typescript": "^5.3.3" } }, @@ -1895,27 +1894,6 @@ "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", "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": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2988,15 +2966,6 @@ "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": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -3021,12 +2990,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "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": { "version": "0.4.0", "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" } }, - "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": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", @@ -3743,19 +3694,6 @@ "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": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -3851,12 +3789,6 @@ "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": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", diff --git a/package.json b/package.json index a85afe7..a03ba3e 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "persist", - "version": "1.0.1", + "version": "1.0.2", "description": "Sync variables with the local/session storage using proxy objects & decorators", "repository": "https://git.zakscode.com/ztimson/persistance", "author": "Zak Timson", diff --git a/src/persist.ts b/src/persist.ts index 8160541..d2c140c 100644 --- a/src/persist.ts +++ b/src/persist.ts @@ -68,6 +68,11 @@ export class Persist { this.load(); } + /** Notify listeners of change */ + private notify(value: T) { + Object.values(this.watches).forEach(watch => watch(value)); + } + /** Delete value from storage */ clear() { this.storage.removeItem(this.key); @@ -101,11 +106,6 @@ export class Persist { /** Return current value */ valueOf() { return this.value; } - - /** Notify listeners of change */ - private notify(value: T) { - Object.values(this.watches).forEach(watch => watch(value)); - } } /**