{"id":24965773,"url":"https://github.com/allnulled/lsw-store","last_synced_at":"2025-03-29T01:19:24.417Z","repository":{"id":274429250,"uuid":"922854287","full_name":"allnulled/lsw-store","owner":"allnulled","description":"Store tool for LSW","archived":false,"fork":false,"pushed_at":"2025-03-24T17:50:06.000Z","size":9,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-24T18:46:09.499Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/allnulled.png","metadata":{"files":{"readme":"README.html","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-01-27T07:46:46.000Z","updated_at":"2025-03-24T17:50:09.000Z","dependencies_parsed_at":"2025-03-24T18:34:11.975Z","dependency_job_id":"bad855b0-30e9-4912-b0f5-2cf095833505","html_url":"https://github.com/allnulled/lsw-store","commit_stats":null,"previous_names":["allnulled/lsw-store"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Flsw-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Flsw-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Flsw-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/allnulled%2Flsw-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/allnulled","download_url":"https://codeload.github.com/allnulled/lsw-store/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246122472,"owners_count":20726834,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-02-03T11:16:10.688Z","updated_at":"2025-03-29T01:19:24.410Z","avatar_url":"https://github.com/allnulled.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003c!DOCTYPE html\u003e\n        \u003chtml\u003e\n        \u003chead\u003e\n            \u003cmeta charset=\"UTF-8\"\u003e\n            \u003ctitle\u003elsw-store\u003c/title\u003e\n            \u003cstyle\u003e\n/* From extension vscode.github */\n/*---------------------------------------------------------------------------------------------\n *  Copyright (c) Microsoft Corporation. All rights reserved.\n *  Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\n\n.vscode-dark img[src$=\\#gh-light-mode-only],\n.vscode-light img[src$=\\#gh-dark-mode-only],\n.vscode-high-contrast:not(.vscode-high-contrast-light) img[src$=\\#gh-light-mode-only],\n.vscode-high-contrast-light img[src$=\\#gh-dark-mode-only] {\n\tdisplay: none;\n}\n\n\u003c/style\u003e\n            \n        \u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/markdown.css\"\u003e\n\u003clink rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/gh/Microsoft/vscode/extensions/markdown-language-features/media/highlight.css\"\u003e\n\u003cstyle\u003e\n            body {\n                font-family: -apple-system, BlinkMacSystemFont, 'Segoe WPC', 'Segoe UI', system-ui, 'Ubuntu', 'Droid Sans', sans-serif;\n                font-size: 14px;\n                line-height: 1.6;\n            }\n        \u003c/style\u003e\n        \u003cstyle\u003e\n.task-list-item {\r\n    list-style-type: none;\r\n}\r\n\r\n.task-list-item-checkbox {\r\n    margin-left: -20px;\r\n    vertical-align: middle;\r\n    pointer-events: none;\r\n}\n\u003c/style\u003e\n\u003cstyle\u003e\n:root {\n  --color-note: #0969da;\n  --color-tip: #1a7f37;\n  --color-warning: #9a6700;\n  --color-severe: #bc4c00;\n  --color-caution: #d1242f;\n  --color-important: #8250df;\n}\n\n\u003c/style\u003e\n\u003cstyle\u003e\n@media (prefers-color-scheme: dark) {\n  :root {\n    --color-note: #2f81f7;\n    --color-tip: #3fb950;\n    --color-warning: #d29922;\n    --color-severe: #db6d28;\n    --color-caution: #f85149;\n    --color-important: #a371f7;\n  }\n}\n\n\u003c/style\u003e\n\u003cstyle\u003e\n.markdown-alert {\n  padding: 0.5rem 1rem;\n  margin-bottom: 16px;\n  color: inherit;\n  border-left: .25em solid #888;\n}\n\n.markdown-alert\u003e:first-child {\n  margin-top: 0\n}\n\n.markdown-alert\u003e:last-child {\n  margin-bottom: 0\n}\n\n.markdown-alert .markdown-alert-title {\n  display: flex;\n  font-weight: 500;\n  align-items: center;\n  line-height: 1\n}\n\n.markdown-alert .markdown-alert-title .octicon {\n  margin-right: 0.5rem;\n  display: inline-block;\n  overflow: visible !important;\n  vertical-align: text-bottom;\n  fill: currentColor;\n}\n\n.markdown-alert.markdown-alert-note {\n  border-left-color: var(--color-note);\n}\n\n.markdown-alert.markdown-alert-note .markdown-alert-title {\n  color: var(--color-note);\n}\n\n.markdown-alert.markdown-alert-important {\n  border-left-color: var(--color-important);\n}\n\n.markdown-alert.markdown-alert-important .markdown-alert-title {\n  color: var(--color-important);\n}\n\n.markdown-alert.markdown-alert-warning {\n  border-left-color: var(--color-warning);\n}\n\n.markdown-alert.markdown-alert-warning .markdown-alert-title {\n  color: var(--color-warning);\n}\n\n.markdown-alert.markdown-alert-tip {\n  border-left-color: var(--color-tip);\n}\n\n.markdown-alert.markdown-alert-tip .markdown-alert-title {\n  color: var(--color-tip);\n}\n\n.markdown-alert.markdown-alert-caution {\n  border-left-color: var(--color-caution);\n}\n\n.markdown-alert.markdown-alert-caution .markdown-alert-title {\n  color: var(--color-caution);\n}\n\n\u003c/style\u003e\n        \n        \u003c/head\u003e\n        \u003cbody class=\"vscode-body vscode-light\"\u003e\n            \u003ch1 id=\"lsw-store\"\u003elsw-store\u003c/h1\u003e\n\u003cp\u003eGestor de estado para navegador y node.js.\u003c/p\u003e\n\u003cp\u003eBranch from \u003ca href=\"https://github.com/allnulled/universal-store\"\u003e@allnulled/universal-store\u003c/a\u003e.\u003c/p\u003e\n\u003ch2 id=\"instalación\"\u003eInstalación\u003c/h2\u003e\n\u003ch3 id=\"descargar-la-librería\"\u003eDescargar la librería\u003c/h3\u003e\n\u003cpre\u003e\u003ccode\u003enpm install -s @allnulled/universal-store\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"importar-la-librería\"\u003eImportar la librería\u003c/h3\u003e\n\u003ch4 id=\"modos-de-importar-la-librería\"\u003eModos de importar la librería\u003c/h4\u003e\n\u003cp\u003eDado que usa otras librerías, y pueden quererse usar desde otros módulos o no, puedes usar el archivo:\u003c/p\u003e\n\u003cul\u003e\n\u003cli\u003e\u003ccode\u003estore.js\u003c/code\u003e: este fichero tiene todas las APIs necesarias. Incluye:\n\u003cul\u003e\n\u003cli\u003e\u003ca href=\"https://github.com/allnulled/universal-file-system\"\u003e\u003ccode\u003eufs\u003c/code\u003e\u003c/a\u003e o \u003ca href=\"https://github.com/allnulled/universal-file-system\"\u003e\u003ccode\u003euniversal-file-system\u003c/code\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003c/li\u003e\n\u003cli\u003e\u003ccode\u003estore.unbundled.js\u003c/code\u003e: este fichero solo tiene la parte que le es propia, y sobreentiende que cargarás las otras librerías necesarias por tu propia cuenta.\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp\u003e\u003cstrong\u003eNOTA:\u003c/strong\u003e Por defecto, se usa \u003ccode\u003estore.unbundled.js\u003c/code\u003e.\u003c/p\u003e\n\u003ch4 id=\"en-nodejs\"\u003eEn node.js\u003c/h4\u003e\n\u003cp\u003ePuedes usar \u003ccode\u003erequire\u003c/code\u003e o \u003ccode\u003eimport\u003c/code\u003e indistintamente para importar el módulo.\u003c/p\u003e\n\u003ch4 id=\"en-browser\"\u003eEn browser\u003c/h4\u003e\n\u003cpre\u003e\u003ccode class=\"language-html\"\u003e\u003cspan class=\"hljs-tag\"\u003e\u0026lt;\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003esrc\u003c/span\u003e=\u003cspan class=\"hljs-string\"\u003e\u0026quot;node_modules/@allnulled/universal-store/dist/store.js\u0026quot;\u003c/span\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"hljs-tag\"\u003e\u0026lt;/\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eO alternativamente:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-html\"\u003e\u003cspan class=\"hljs-tag\"\u003e\u0026lt;\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003esrc\u003c/span\u003e=\u003cspan class=\"hljs-string\"\u003e\u0026quot;node_modules/@allnulled/universal-store/dist/lib/ufs.js\u0026quot;\u003c/span\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"hljs-tag\"\u003e\u0026lt;/\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e\u0026gt;\u003c/span\u003e\n\u003cspan class=\"hljs-tag\"\u003e\u0026lt;\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e \u003cspan class=\"hljs-attr\"\u003esrc\u003c/span\u003e=\u003cspan class=\"hljs-string\"\u003e\u0026quot;node_modules/@allnulled/universal-store/dist/store.unbundled.js\u0026quot;\u003c/span\u003e\u0026gt;\u003c/span\u003e\u003cspan class=\"hljs-tag\"\u003e\u0026lt;/\u003cspan class=\"hljs-name\"\u003escript\u003c/span\u003e\u0026gt;\u003c/span\u003e\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch2 id=\"api\"\u003eAPI\u003c/h2\u003e\n\u003ch3 id=\"crear-una-store\"\u003eCrear una store\u003c/h3\u003e\n\u003cp\u003ePara crear una store, desde node.js puedes:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-js\"\u003e\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e store = \u003cspan class=\"hljs-built_in\"\u003erequire\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;@allnulled/universal-store\u0026quot;\u003c/span\u003e).\u003cspan class=\"hljs-title function_\"\u003ecreate\u003c/span\u003e();\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eSi estás en browser y no usas módulos, o si estás en node.js y no quieres usar require, puedes:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-js\"\u003e\u003cspan class=\"hljs-keyword\"\u003econst\u003c/span\u003e store = \u003cspan class=\"hljs-title class_\"\u003eUniversalStore\u003c/span\u003e.\u003cspan class=\"hljs-title function_\"\u003ecreate\u003c/span\u003e();\n\u003c/code\u003e\u003c/pre\u003e\n\u003ch3 id=\"usar-una-store\"\u003eUsar una store\u003c/h3\u003e\n\u003cp\u003eLos métodos de la API disponibles por defecto son:\u003c/p\u003e\n\u003cpre\u003e\u003ccode class=\"language-js\"\u003estore.\u003cspan class=\"hljs-title function_\"\u003eget\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003eset\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003ewatch\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-keyword\"\u003efunction\u003c/span\u003e(\u003cspan class=\"hljs-params\"\u003eevent, property_path, value\u003c/span\u003e) {});\nstore.\u003cspan class=\"hljs-title function_\"\u003eunwatch\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e, previous_function);\nstore.\u003cspan class=\"hljs-title function_\"\u003edelete\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003epush\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/array\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003epop\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/array\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003eunshift\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/array\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003eshift\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/array\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003eadd\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/object\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-string\"\u003e\u0026quot;key\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003eremove\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/object\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-string\"\u003e\u0026quot;key\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003esplice\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/array\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e5\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e10\u003c/span\u003e, ...[\u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e, \u003cspan class=\"hljs-number\"\u003e1\u003c/span\u003e]);\nstore.\u003cspan class=\"hljs-title function_\"\u003eextend\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id/to/object\u0026quot;\u003c/span\u003e, { \u003cspan class=\"hljs-attr\"\u003emore\u003c/span\u003e: \u003cspan class=\"hljs-string\"\u003e\u0026quot;props\u0026quot;\u003c/span\u003e });\nstore.\u003cspan class=\"hljs-title function_\"\u003emodify\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;property/id\u0026quot;\u003c/span\u003e, \u003cspan class=\"hljs-keyword\"\u003efunction\u003c/span\u003e(\u003cspan class=\"hljs-params\"\u003evalue\u003c/span\u003e) { \u003cspan class=\"hljs-keyword\"\u003ereturn\u003c/span\u003e \u003cspan class=\"hljs-string\"\u003e\u0026quot;new value\u0026quot;\u003c/span\u003e; });\nstore.\u003cspan class=\"hljs-title function_\"\u003ehydrate\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;file_to_read_from.json\u0026quot;\u003c/span\u003e);\nstore.\u003cspan class=\"hljs-title function_\"\u003edehydrate\u003c/span\u003e(\u003cspan class=\"hljs-string\"\u003e\u0026quot;file_to_write_to.json\u0026quot;\u003c/span\u003e);\n\u003c/code\u003e\u003c/pre\u003e\n\u003cp\u003eTodos son métodos síncronos y no tienen alternativa.\u003c/p\u003e\n\u003cp\u003eLos métodos \u003ccode\u003ehydrate\u003c/code\u003e y \u003ccode\u003edehydrate\u003c/code\u003e están polyfileados con la librería \u003ccode\u003eufs\u003c/code\u003e o \u003ccode\u003euniversal-file-system\u003c/code\u003e, de \u003ca href=\"https://github.com/allnulled/universal-file-system\"\u003eallnulled\u003c/a\u003e también. Así que puedes persistir el estado del store tanto en node.js como en el browser.\u003c/p\u003e\n\n            \n            \n        \u003c/body\u003e\n        \u003c/html\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Flsw-store","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fallnulled%2Flsw-store","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fallnulled%2Flsw-store/lists"}