{"id":32956938,"url":"https://github.com/KID-joker/stokado","last_synced_at":"2025-11-16T17:01:05.189Z","repository":{"id":59451869,"uuid":"537318924","full_name":"KID-joker/stokado","owner":"KID-joker","description":"stokado can proxy objects of any storage-like, providing getter/setter syntax sugars, serialization, subscription listening, expiration setting, one-time value retrieval.","archived":false,"fork":false,"pushed_at":"2024-08-04T09:21:17.000Z","size":433,"stargazers_count":386,"open_issues_count":1,"forks_count":13,"subscribers_count":3,"default_branch":"main","last_synced_at":"2025-09-11T14:38:10.650Z","etag":null,"topics":["disposable","expired","localstorage","once","proxy","serialize","sessionstorage","storage","subscribe","webstorage"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/KID-joker.png","metadata":{"files":{"readme":"README.ja.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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":"2022-09-16T05:34:29.000Z","updated_at":"2025-08-17T18:09:40.000Z","dependencies_parsed_at":"2023-09-23T05:10:44.568Z","dependency_job_id":"c069c22f-3103-42d8-ac5d-68f4791ffdae","html_url":"https://github.com/KID-joker/stokado","commit_stats":{"total_commits":52,"total_committers":2,"mean_commits":26.0,"dds":"0.019230769230769273","last_synced_commit":"b9f54adf5aa930fb608cc0ca8d46b28c5d180ba0"},"previous_names":["kid-joker/proxy-web-storage"],"tags_count":8,"template":false,"template_full_name":null,"purl":"pkg:github/KID-joker/stokado","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KID-joker%2Fstokado","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KID-joker%2Fstokado/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KID-joker%2Fstokado/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KID-joker%2Fstokado/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/KID-joker","download_url":"https://codeload.github.com/KID-joker/stokado/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/KID-joker%2Fstokado/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":284742551,"owners_count":27056072,"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","status":"online","status_checked_at":"2025-11-16T02:00:05.974Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["disposable","expired","localstorage","once","proxy","serialize","sessionstorage","storage","subscribe","webstorage"],"created_at":"2025-11-12T23:00:21.962Z","updated_at":"2025-11-16T17:01:05.164Z","avatar_url":"https://github.com/KID-joker.png","language":"TypeScript","funding_links":[],"categories":["Storage"],"sub_categories":["Runner"],"readme":"```shell\n         __                __  __                __\n  ____  /\\ \\__     ___    /\\ \\/  \\      __      /\\ \\     ___   \n / ,__\\ \\ \\ ,_\\   / __`\\  \\ \\    \u003c    /'__`\\    \\_\\ \\   / __`\\ \n/\\__, `\\ \\ \\ \\/  /\\ \\_\\ \\  \\ \\  ^  \\ /\\ \\_\\.\\_ /\\ ,. \\ /\\ \\_\\ \\\n\\/\\____/  \\ \\ \\_ \\ \\____/   \\ \\_\\ \\_\\\\ \\__/.\\_\\\\ \\____\\\\ \\____/\n \\/___/    \\ \\__\\ \\/___/     \\/_/\\/_/ \\/__/\\/_/ \\/___ / \\/___/ \n            \\/__/\n```\n\n**[English](./README.md) | [中文](./README.zh.md) | 日本語**\n\n[v2 ドキュメント](./v2.md)\n\n\u003e *Stokado*(/stəˈkɑːdoʊ/) は *storage* の[エスペラント語](https://ja.wikipedia.org/wiki/%E3%82%A8%E3%82%B9%E3%83%9A%E3%83%A9%E3%83%B3%E3%83%88)(国際補助語)であり、*Stokado* は *storage* の補助エージェントでもあります。\n\n`stokado` は、任意の `storage` ライクなオブジェクトをプロキシし、ゲッター/セッターのシンタックスシュガー、シリアライゼーション、サブスクリプションリスニング、期限設定、一度だけの値の取得を提供します。\n\n## 使用方法\n\n### インストール\n\n```shell\nnpm install stokado\n```\n\n### プロキシ\n\n```js\nimport { createProxyStorage } from 'stokado'\n\nconst storage = createProxyStorage(localStorage)\n\nstorage.getItem('test')\n```\n\n#### createProxyStorage(storage[, name])\n\n`createProxyStorage` は2つのパラメータを取ります: `storage` ライクなオブジェクトとオプションの `name`。`name` は他のページと `storage` の変更を同期するために使用されます。デフォルトでは、`localStorage` は同じ `name` を持ちますが、`sessionStorage` は持ちません。他のオブジェクトの場合は手動で渡す必要があります。\n\n### 機能\n\n#### 1. シンタックスシュガー\n\nオブジェクト指向のアプローチで直接 `storage` を操作します\n\nもちろん、`localStorage` と `sessionStorage` はネイティブにサポートされています\n\n```js\nconst storage = createProxyStorage(localStorage)\n\nstorage.test = 'hello stokado'\n\nstorage.test // 'hello stokado'\n\ndelete storage.test\n```\n\n`storage` には同じメソッドとプロパティもあります: `key()`, `getItem()`, `setItem()`, `removeItem()`, `clear()`, `length`。\n\n#### 2. シリアライザー\n\nストレージ値の型を変更せずに保持します\n\n```js\n// number\nstorage.test = 0\nstorage.test === 0\n\n// boolean\nstorage.test = false\nstorage.test === false\n\n// undefined\nstorage.test = undefined\nstorage.test === undefined\n\n// null\nstorage.test = null\nstorage.test === null\n\n// object\nstorage.test = { hello: 'world' }\nstorage.test.hello === 'stokado'\n\n// array\nstorage.test = ['hello']\nstorage.test.push('stokado')\nstorage.test.length // 2\n\n// Date\nstorage.test = new Date('2000-01-01T00:00:00.000Z')\nstorage.test.getTime() === 946684800000\n\n// RegExp\nstorage.test = /d(b+)d/g\nstorage.test.test('cdbbdbsbz')\n\n// function\nstorage.test = function () {\n  return 'hello stokado!'\n}\nstorage.test() === 'hello stokado!'\n```\n\n#### 3. サブスクライブ\n\n値の変更をサブスクライブします\n\n```js\nstorage.on(key, callback)\n\nstorage.once(key, callback)\n\nstorage.off([[key], callback])\n```\n\n- `key`: サブスクライブするアイテムの名前。`Object` の `obj.a` や `Array` の `list[0]`、および `Array` の長さをサポートします。\n- `callback`: アイテムが変更されたときに呼び出される関数。`newValue` と `oldValue` を含みます。\n\n**ヒント:** `off` の場合、`callback` が存在する場合は指定されたコールバックのトリガーを削除します。存在しない場合は、`key` にバインドされたすべてのコールバックを削除します。`key` が空の場合は、すべてのリスニングコールバックを削除します。\n\n#### 4. 期限\n\nアイテムの期限を設定します\n\n```js\nstorage.setExpires(key, expires)\n\nstorage.getExpires(key)\n\nstorage.removeExpires(key)\n```\n\n- `key`: 期限を設定するアイテムの名前。\n- `expires`: `string`、`number`、`Date` を受け入れます。\n\n#### 5. 一度だけ\n\n一度だけ値を取得します。これは `storage` を介して通信するために使用できます。\n\n```js\nstorage.setDisposable(key)\n```\n\n- `key`：一度だけの値を設定するアイテムの名前。\n\n#### 6. オプション\n\n指定されたアイテムの `expires` と `disposable` の設定情報を取得します\n\n```js\nstorage.getOptions(key)\n```\n\n`setItem` を使用して `expires` と `disposable` を設定します\n\n```js\nstorage.setItem(key, value, { expires, disposable })\n```\n\n## localForage と一緒に使う\n\n`localForage` は `localStorage` と同じ API を提供しているため、`stokado` と一緒に使用できます。\n\n```js\nimport { createProxyStorage } from 'stokado'\nimport localForage from 'localforage'\n\nconst local = createProxyStorage(localForage, 'localForage')\n```\n\nただし、`localForage` は非同期 API を使用しているため、`Promise` を使用して呼び出す必要があります。\n\n```js\nawait (local.test = 'hello localForage')\n\n// または\n\nawait local.setItem('test', 'hello localForage')\n```\n\n#### 複数のインスタンス\n\n`createInstance` を使用して、異なるストアを指す `localForage` の複数のインスタンスを作成できます。\n\n```js\nconst store = localforage.createInstance({\n  name: 'nameHere'\n})\nconst proxyStore = createProxyStorage(store, 'store')\n\nconst otherStore = localforage.createInstance({\n  name: 'otherName'\n})\nconst proxyOtherStore = createProxyStorage(otherStore, 'otherStore')\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKID-joker%2Fstokado","html_url":"https://awesome.ecosyste.ms/projects/github.com%2FKID-joker%2Fstokado","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2FKID-joker%2Fstokado/lists"}