{"id":23789971,"url":"https://github.com/blackglory/extra-disk-store","last_synced_at":"2026-01-18T23:34:55.865Z","repository":{"id":64126173,"uuid":"572592643","full_name":"BlackGlory/extra-disk-store","owner":"BlackGlory","description":"🌲 A disk-based persistent store","archived":false,"fork":false,"pushed_at":"2024-09-24T18:03:35.000Z","size":1346,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-01-01T17:17:48.565Z","etag":null,"topics":["esm","library","nodejs","npm-package","typescript"],"latest_commit_sha":null,"homepage":"https://www.npmjs.com/package/extra-disk-store","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/BlackGlory.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2022-11-30T15:52:51.000Z","updated_at":"2024-09-24T18:03:38.000Z","dependencies_parsed_at":"2023-01-14T23:31:08.179Z","dependency_job_id":null,"html_url":"https://github.com/BlackGlory/extra-disk-store","commit_stats":null,"previous_names":[],"tags_count":12,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fextra-disk-store","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fextra-disk-store/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fextra-disk-store/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/BlackGlory%2Fextra-disk-store/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/BlackGlory","download_url":"https://codeload.github.com/BlackGlory/extra-disk-store/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":232327033,"owners_count":18505993,"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":["esm","library","nodejs","npm-package","typescript"],"created_at":"2025-01-01T17:17:50.532Z","updated_at":"2026-01-18T23:34:55.824Z","avatar_url":"https://github.com/BlackGlory.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# extra-disk-store\nA disk-based persistent store.\n\n## Install\n```sh\nnpm install --save extra-disk-store\n# or\nyarn add extra-disk-store\n```\n\n## Usage\n```ts\nimport { DiskStore } from 'extra-disk-store'\n\nconst store = await DiskStore.create('/tmp/store')\nawait store.set('key', Buffer.from('value'))\nconst value = store.get('key')?.toString()\n```\n\n## API\n### DiskStore\n```ts\nclass DiskStore {\n  static create(filename?: string): Promise\u003cDiskStore\u003e\n\n  close(): void\n\n  has(key: string): boolean\n  get(key: string): Buffer | undefined\n  set(key: string, value: Buffer): void\n  delete(key: string): void\n  clear(): void\n\n  keys(): IterableIterator\u003cstring\u003e\n}\n```\n\n### DiskStoreWithCache\n```ts\ninterface ICache {\n  set(key: string, value: Buffer | false): void\n  get(key: string): Buffer | false | undefined\n  delete(key: string): void\n  clear(): void\n}\n\nclass DiskStoreWithCache {\n  constructor(store: DiskStore, cache: ICache)\n\n  close(): void\n\n  has(key: string): boolean\n  get(key: string): Buffer | undefined\n  set(key: string, value: Buffer): void\n  delete(key: string): void\n  clear(): void\n\n  keys(): IterableIterator\u003cstring\u003e\n}\n```\n\n### DiskStoreView\n```ts\ninterface IKeyConverter\u003cT\u003e {\n  toString: (value: T) =\u003e string\n  fromString: (value: string) =\u003e T | undefined\n}\n\ninterface IValueConverter\u003cT\u003e {\n  toBuffer: (value: T) =\u003e Buffer\n  fromBuffer: (value: Buffer) =\u003e T\n}\n\nclass DiskStoreView\u003cK, V\u003e {\n  constructor(\n    store: DiskStore | DiskStoreWithCache\n  , keyConverter: IKeyConverter\u003cK\u003e\n  , valueConverter: IValueConverter\u003cV\u003e\n  ) {}\n\n  has(key: K): boolean\n  get(key: K): V | undefined\n\n  set(key: K, value: V): void\n\n  delete(key: K): void\n  clear(): void\n\n  keys(): IterableIterator\u003cK\u003e\n}\n```\n\n### DiskStoreAsyncView\n```ts\ninterface IKeyAsyncConverter\u003cT\u003e {\n  toString: (value: T) =\u003e Awaitable\u003cstring\u003e\n  fromString: (value: string) =\u003e Awaitable\u003cT | undefined\u003e\n}\n\ninterface IValueAsyncConverter\u003cT\u003e {\n  toBuffer: (value: T) =\u003e Awaitable\u003cBuffer\u003e\n  fromBuffer: (value: Buffer) =\u003e Awaitable\u003cT\u003e\n}\n\nclass DiskStoreAsyncView\u003cK, V\u003e {\n  constructor(\n    store: DiskStore | DiskStoreWithCache\n  , keyConverter: IKeyAsyncConverter\u003cK\u003e\n  , valueConverter: IValueAsyncConverter\u003cV\u003e\n  ) {}\n\n  has(key: K): Promise\u003cboolean\u003e\n  get(key: K): Promise\u003cV | undefined\u003e\n\n  set(key: K, value: V): Promise\u003cvoid\u003e\n\n  delete(key: K): Promise\u003cvoid\u003e\n  clear(): void\n\n  keys(): AsyncIterableIterator\u003cK\u003e\n}\n```\n\n### Converters\n#### PassthroughKeyConverter\n```ts\nclass PassthroughKeyConverter implements IKeyConverter\u003cstring\u003e\n```\n\n#### PassthroughValueConverter\n```ts\nclass PassthroughValueConverter implements IValueConverter\u003cBuffer\u003e\n```\n\n#### IndexKeyConverter\n```ts\nclass IndexKeyConverter implements IKeyConverter\u003cnumber\u003e\n```\n\n#### PrefixKeyConverter\n```ts\nclass PrefixKeyConverter\u003cT\u003e implements IKeyConverter\u003cT\u003e {\n  constructor(keyConverter: IKeyConverter\u003cT\u003e, prefix: string)\n}\n```\n\n#### PrefixKeyAsyncConverter\n```ts\nclass PrefixKeyAsyncConverter\u003cT\u003e implements IKeyAsyncConverter\u003cT\u003e {\n  constructor(\n    keyConverter: IKeyConverter\u003cT\u003e | IKeyAsyncConverter\u003cT\u003e\n  , prefix: string\n  )\n\n  toString(value: T): Promise\u003cstring\u003e\n  fromString(value: string): Promise\u003cT | undefined\u003e\n}\n```\n\n#### JSONKeyConverter\n```ts\nclass JSONKeyConverter\u003cT\u003e implements IKeyConverter\u003cT\u003e\n```\n\n#### JSONValueConverter\n```ts\nclass JSONValueConverter\u003cT\u003e implements IValueConverter\u003cT\u003e {\n  constructor(encoding: BufferEncoding = 'utf-8')\n}\n```\n\n#### LZ4ValueConverter\n```ts\nclass LZ4ValueConverter\u003cT\u003e implements IValueConverter\u003cT\u003e {\n  constructor(valueConverter: IValueConverter\u003cT\u003e)\n}\n```\n\n#### LZ4ValueAsyncConverter\n```ts\nclass LZ4ValueAsyncConverter\u003cT\u003e implements IValueAsyncConverter\u003cT\u003e {\n  constructor(valueConverter: IValueConverter\u003cT\u003e | IValueAsyncConverter\u003cT\u003e)\n\n  toBuffer(value: T): Promise\u003cBuffer\u003e\n  fromBuffer(value: Buffer): Promise\u003cT\u003e\n}\n```\n\n#### ZstandardValueAsyncConverter\n```ts\nclass ZstandardValueAsyncConverter\u003cT\u003e implements IValueAsyncConverter\u003cT\u003e {\n  constructor(\n    valueConverter: IValueConverter\u003cT\u003e | IValueAsyncConverter\u003cT\u003e\n  , level: number\n  )\n\n  toBuffer(value: T): Promise\u003cBuffer\u003e\n  fromBuffer(value: Buffer): Promise\u003cT\u003e\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackglory%2Fextra-disk-store","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fblackglory%2Fextra-disk-store","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fblackglory%2Fextra-disk-store/lists"}