{"_id":"@david.uhlir/local-db","_rev":"5-19f3b867a82d590e2ba0719f110908fb","name":"@david.uhlir/local-db","dist-tags":{"latest":"0.1.5"},"versions":{"0.1.1":{"name":"@david.uhlir/local-db","version":"0.1.1","keywords":["node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/local-db@0.1.1","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/local-db#readme","bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"bin":{"build-external-libs":"tools/buildModules.js"},"dist":{"shasum":"8d01ad1e7b8d993fc303ce4b04f3e742ca68e26a","tarball":"https://registry.npmjs.org/@david.uhlir/local-db/-/local-db-0.1.1.tgz","fileCount":17,"integrity":"sha512-SNQ70FZrqpWq+EWnbK0m2N/7c8v6QuG0z7q20tCxZI/4EWGsjbCuU7/3wF5aGzhWsD31BNnbr4rsHFk7UIXrjA==","signatures":[{"sig":"MEUCIQDq0grebNdIwgkQSfTxYtYWZ3IgbUE5HDiv1CaSolNEqgIgBYfoavgElkPgqmfz3AVc12Wywpy+FAmU0ojsAawBCr0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":39526},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"c34392d56cac3266925f5788cb9cfb75636e4245","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier --check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/local-db.git","type":"git"},"_npmVersion":"10.9.3","description":"Simple local JSON database with indexes","directories":{},"_nodeVersion":"22.19.0","dependencies":{"charwise":"^3.0.1","@david.uhlir/mutex":"^1.3.8","@david.uhlir/expression":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/local-db_0.1.1_1759346095763_0.03297377072956631","host":"s3://npm-registry-packages-npm-production"}},"0.1.2":{"name":"@david.uhlir/local-db","version":"0.1.2","keywords":["node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/local-db@0.1.2","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/local-db#readme","bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"bin":{"build-external-libs":"tools/buildModules.js"},"dist":{"shasum":"2d1bf054a54add4d589af1536b93947490540079","tarball":"https://registry.npmjs.org/@david.uhlir/local-db/-/local-db-0.1.2.tgz","fileCount":17,"integrity":"sha512-6oE0X/8aIVknC4cNWpL4mdgcifbvY3K6ry2xavgISbwMQNIiIxENHZD3PPDJMkZEsEduS7JbYAPfHRJY+kMeIw==","signatures":[{"sig":"MEUCIDGkKUJShFi+cwKb3twtSpk+LER22yGc+GgOQLPlLsT7AiEA4/uJuOPXFSop/UF1T/ikhTywvF6u+Z99SF9HwBsHO8M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40196},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"79e52f79aec9e6c9bab4a83fe1c2bfd24fb70287","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier --check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/local-db.git","type":"git"},"_npmVersion":"10.9.3","description":"Simple local JSON database with indexes","directories":{},"_nodeVersion":"22.19.0","dependencies":{"charwise":"^3.0.1","@david.uhlir/mutex":"^1.3.8","@david.uhlir/expression":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/local-db_0.1.2_1759347060431_0.9628449159065366","host":"s3://npm-registry-packages-npm-production"}},"0.1.3":{"name":"@david.uhlir/local-db","version":"0.1.3","keywords":["node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/local-db@0.1.3","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/local-db#readme","bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"bin":{"build-external-libs":"tools/buildModules.js"},"dist":{"shasum":"8c388232b85f8c7b4bba46fea6090e7d8bbfdba1","tarball":"https://registry.npmjs.org/@david.uhlir/local-db/-/local-db-0.1.3.tgz","fileCount":17,"integrity":"sha512-JOy7cXvK49PNMIAT7zU69o4LY3bSGgY48Yl829yFGRrDQbQVtMLH5x/9TcjzT+/xts6NLn8uOGXDYUuSoRraWQ==","signatures":[{"sig":"MEUCICkTAxFJdVcmHOZOcM1IP/YAOf5vUYy6UNiE6wikfEGsAiEAh5LNiIbFe3EEbEvD77PXKkWLXiFPTc6G42MlrebKMME=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40461},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"771c0ea35c8efb3e73bcaf9d227b19b265798014","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier --check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/local-db.git","type":"git"},"_npmVersion":"10.9.3","description":"Simple local JSON database with indexes","directories":{},"_nodeVersion":"22.19.0","dependencies":{"charwise":"^3.0.1","@david.uhlir/mutex":"^1.3.8","@david.uhlir/expression":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/local-db_0.1.3_1759347384121_0.17296538948028517","host":"s3://npm-registry-packages-npm-production"}},"0.1.4":{"name":"@david.uhlir/local-db","version":"0.1.4","keywords":["node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","_id":"@david.uhlir/local-db@0.1.4","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"homepage":"https://github.com/daviduhlir/local-db#readme","bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"bin":{"build-external-libs":"tools/buildModules.js"},"dist":{"shasum":"5647df4fe7436b31b885e4c7b309655745ae6502","tarball":"https://registry.npmjs.org/@david.uhlir/local-db/-/local-db-0.1.4.tgz","fileCount":17,"integrity":"sha512-7du/IAZmWNoln2teH0y1aXzq8H6mD2L4BEB6vTL/RuTAJiZL7MEhyUN0b0takAAxTz0Any8pKkRrYYJdqjO6Aw==","signatures":[{"sig":"MEUCIG2CHFt3GjLen0sDmUW+pOLLkOKDQdkjkICp/x55avl+AiEAg67J2GuUlb+Cg5gdA9Am1hSNEEz2E2P4LGmA6p9r+e8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":40615},"main":"dist/index.js","types":"dist/index.d.ts","gitHead":"72abdf5beb0e6f84632284505454455c98d18c90","scripts":{"test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build":"rimraf ./dist && tsc","release":"./scripts/release.sh","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier --check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write"},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"repository":{"url":"git+https://github.com/daviduhlir/local-db.git","type":"git"},"_npmVersion":"10.9.3","description":"Simple local JSON database with indexes","directories":{},"_nodeVersion":"22.19.0","dependencies":{"charwise":"^3.0.1","@david.uhlir/mutex":"^1.3.8","@david.uhlir/expression":"^2.0.1"},"_hasShrinkwrap":false,"devDependencies":{"chai":"^4.3.6","mocha":"^10.0.0","rimraf":"^2.6.2","prettier":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4","@types/node":"^18.11.9","@types/mocha":"^10.0.0"},"_npmOperationalInternal":{"tmp":"tmp/local-db_0.1.4_1759349191937_0.35743988505797764","host":"s3://npm-registry-packages-npm-production"}},"0.1.5":{"name":"@david.uhlir/local-db","version":"0.1.5","description":"Simple local JSON database with indexes","main":"dist/index.js","types":"dist/index.d.ts","scripts":{"build":"rimraf ./dist && tsc","build:release":"rimraf ./dist && tsc --p tsconfig.release.json","prettier-check":"prettier --check --config .prettierrc.json 'lib/**/*.ts'","prettier-format":"prettier --config .prettierrc.json 'lib/**/*.ts' --write","test":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","test:release":"npm run build && ts-mocha --timeout 10000 --type-check -p ./tsconfig.json tests/**/*.spec.ts","release":"./scripts/release.sh"},"bin":{"build-external-libs":"tools/buildModules.js"},"repository":{"type":"git","url":"git+https://github.com/daviduhlir/local-db.git"},"keywords":["node","typescript"],"author":{"name":"David Uhlíř"},"license":"ISC","devDependencies":{"@types/mocha":"^10.0.0","@types/node":"^18.11.9","chai":"^4.3.6","mocha":"^10.0.0","prettier":"^2.6.2","rimraf":"^2.6.2","ts-mocha":"^10.0.0","typescript":"^5.5.4"},"dependencies":{"@david.uhlir/expression":"^2.0.1","@david.uhlir/mutex":"^1.3.8","charwise":"^3.0.1"},"_id":"@david.uhlir/local-db@0.1.5","gitHead":"3d49683fb826a3bf022b6f38b231ffbed94e4653","bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"homepage":"https://github.com/daviduhlir/local-db#readme","_nodeVersion":"22.19.0","_npmVersion":"10.9.3","dist":{"integrity":"sha512-qboITxF7ahniGoB0NtYMV+jwCwG95XWr+uCaXAhUujVoaiI2avskFFdsv3SZx+XlTaMo1qnq8+CDXDCFBL3N7A==","shasum":"fc190fee0467e86ad76507cb86b2424c0a4b7e2f","tarball":"https://registry.npmjs.org/@david.uhlir/local-db/-/local-db-0.1.5.tgz","fileCount":17,"unpackedSize":41482,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCjdReULxHXVhhFutTVw98Zvd8uSOVr9AI3zQ1anD2TSQIhAKBvoPFIbMvNwB77wltV+wDPUSFOmFQUO3c42XQ3jj29"}]},"_npmUser":{"name":"david.uhlir","email":"posta@daviduhlir.cz"},"directories":{},"maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/local-db_0.1.5_1759843176953_0.9651012516433213"},"_hasShrinkwrap":false}},"time":{"created":"2025-10-01T19:14:55.643Z","modified":"2025-10-07T13:19:37.349Z","0.1.1":"2025-10-01T19:14:55.965Z","0.1.2":"2025-10-01T19:31:00.620Z","0.1.3":"2025-10-01T19:36:24.285Z","0.1.4":"2025-10-01T20:06:32.136Z","0.1.5":"2025-10-07T13:19:37.154Z"},"bugs":{"url":"https://github.com/daviduhlir/local-db/issues"},"author":{"name":"David Uhlíř"},"license":"ISC","homepage":"https://github.com/daviduhlir/local-db#readme","keywords":["node","typescript"],"repository":{"type":"git","url":"git+https://github.com/daviduhlir/local-db.git"},"description":"Simple local JSON database with indexes","maintainers":[{"name":"david.uhlir","email":"posta@daviduhlir.cz"}],"readme":"# @david.uhlir/local-db\n\nA simple, lightweight local JSON database with support for indexes and queries. Perfect for Node.js applications that need persistent storage without the complexity of a full database system.\n\n## Features\n\n- **Simple API** - Easy-to-use interface for CRUD operations\n- **JSON file storage** - Human-readable data stored as individual JSON files\n- **Indexed queries** - Create indexes on nested object properties for fast lookups\n- **Range queries** - Support for gt, gte, lt, lte, eq, ne operators\n- **TypeScript support** - Full type definitions included\n- **Thread-safe** - Built-in mutex locking for concurrent access\n- **Nested property indexing** - Index any nested property using dot notation\n\n## Installation\n\n```bash\nnpm install @david.uhlir/local-db\n```\n\n## Quick Start\n\n```typescript\nimport { JsonDBRepository } from '@david.uhlir/local-db'\n\n// Create a database with indexes\nconst db = new JsonDBRepository('./db', {\n  indexes: {\n    name: {\n      path: 'name',\n    },\n    age: {\n      path: 'info.age',\n    },\n  },\n})\n\n// Open the database (required before any operations)\nawait db.open()\n\n// Insert data\nawait db.insert({\n  name: 'David',\n  info: {\n    age: 30,\n  },\n})\n\n// Query by index\nconst users = await db.getIndex('name').get('David')\nconst ageRange = await db.getIndex('age').query({\n  gte: 25,\n  lte: 35,\n})\n\n// Close when done\nawait db.close()\n```\n\n## API Reference\n\n### JsonDBRepository Constructor\n\n```typescript\nnew JsonDBRepository<T, I>(dbPath: string, options?: JsonDBOptions<I>)\n```\n\n**Parameters:**\n- `dbPath` - Path to the database directory (each document stored as `{id}.json`)\n- `options.indexes` - Object defining indexes:\n  - `path` - Dot-notation path to the property to index (e.g., `'info.age'`)\n- `options.baseKey` - Optional custom base key for mutex locking (defaults to hash of dbPath)\n\n**Note:** After creating the database, you must call `await db.open()` before performing any operations.\n\n### open()\n\nOpens the database and initializes all indexes. Must be called before any database operations.\n\n```typescript\nawait db.open()\n```\n\n**Note:** If indexes don't exist, they will be automatically created and populated from existing data.\n\n### close()\n\nCloses the database and all index connections.\n\n```typescript\nawait db.close()\n```\n\n### Methods\n\n#### `insert(data: T): Promise<string>`\n\nInsert a new document into the database. Returns the generated ID.\n\n```typescript\nconst id = await db.insert({\n  name: 'John',\n  info: { age: 40 },\n})\n```\n\n#### `getOne(id: string): Promise<JsonDBEntityWithId<T> | null>`\n\nGet a single document by ID.\n\n```typescript\nconst user = await db.getOne(id)\n```\n\n#### `get(ids: string[]): Promise<JsonDBEntityWithId<T>[]>`\n\nGet multiple documents by IDs.\n\n```typescript\nconst users = await db.get([id1, id2, id3])\n```\n\n#### `getAll(): Promise<JsonDBEntityWithId<T>[]>`\n\nGet all documents in the database.\n\n```typescript\nconst allUsers = await db.getAll()\n```\n\n#### `exists(id: string): Promise<boolean>`\n\nCheck if a document exists.\n\n```typescript\nconst exists = await db.exists(id)\n```\n\n#### `edit(id: string, data: Partial<T>): Promise<void>`\n\nUpdate a document. Automatically updates all indexes.\n\n```typescript\nawait db.edit(id, {\n  info: { age: 31 },\n})\n```\n\n#### `delete(id: string): Promise<void>`\n\nDelete a document. Automatically updates all indexes.\n\n```typescript\nawait db.delete(id)\n```\n\n#### `clear(): Promise<void>`\n\nDelete all documents and clear all indexes.\n\n```typescript\nawait db.clear()\n```\n\n#### `getIndex(indexName: string): JsonDBIndex<T>`\n\nGet an index accessor for querying.\n\n```typescript\nconst nameIndex = db.getIndex('name')\n```\n\n#### `remapIndex(): Promise<void>`\n\nRebuild all indexes from scratch. Useful if index definitions change.\n\n```typescript\nawait db.remapIndex()\n```\n\n### Index Query Methods\n\nOnce you get an index using `getIndex()`, you can use these methods:\n\n#### `get(value: any): Promise<JsonDBEntityWithId<T>[]>`\n\nGet all documents where the indexed field equals the value.\n\n```typescript\nconst davids = await db.getIndex('name').get('David')\n```\n\n#### `getOne(value: any): Promise<JsonDBEntityWithId<T> | null>`\n\nGet the first document where the indexed field equals the value.\n\n```typescript\nconst david = await db.getIndex('name').getOne('David')\n```\n\n#### `exists(value: any): Promise<boolean>`\n\nCheck if any document has the indexed field equal to the value.\n\n```typescript\nconst hasDavid = await db.getIndex('name').exists('David')\n```\n\n#### `query(options: JsonDBIterator): Promise<JsonDBEntityWithId<T>[]>`\n\nQuery documents using range operators.\n\n**Query operators:**\n- `gt` - Greater than\n- `gte` - Greater than or equal\n- `lt` - Less than\n- `lte` - Less than or equal\n- `eq` - Equal to\n- `ne` - Not equal to\n\n```typescript\n// Age between 40 and 60\nconst midAge = await db.getIndex('age').query({\n  gte: 40,\n  lte: 60,\n})\n\n// Not null\nconst withTest = await db.getIndex('test').query({\n  ne: null,\n})\n```\n\n## Example\n\nSee the complete example in the `example/` directory:\n\n```typescript\nimport { JsonDBRepository } from '@david.uhlir/local-db'\n\nconst db = new JsonDBRepository('./db', {\n  indexes: {\n    name: {\n      path: 'name',\n    },\n    age: {\n      path: 'info.age',\n    },\n    test: {\n      path: 'test',\n    },\n  },\n})\n\nasync function main() {\n  // Open the database\n  await db.open()\n\n  // Insert multiple documents\n  await db.insert({\n    name: 'David',\n    info: { age: 30 },\n    test: 'Mr. David',\n  })\n\n  await db.insert({\n    name: 'John',\n    info: { age: 40 },\n    test: 'Mr. John',\n  })\n\n  await db.insert({\n    name: 'Jane',\n    info: { age: 50 },\n    test: 'Ms. Jane',\n  })\n\n  // Get by exact value\n  const david = await db.getIndex('name').get('David')\n  console.log('Found:', david)\n\n  // Query by range\n  const adults = await db.getIndex('age').query({\n    gte: 40,\n    lte: 60,\n  })\n  console.log('Adults 40-60:', adults)\n\n  // Query not null\n  const withTest = await db.getIndex('test').query({\n    ne: null,\n  })\n  console.log('Has test field:', withTest)\n\n  // Close when done\n  await db.close()\n}\n\nmain()\n```\n\nRun the example:\n\n```bash\ncd example\nnpm install\nnpm start\n```\n\n## TypeScript Support\n\nThe library is written in TypeScript and includes full type definitions. You can define your document type:\n\n```typescript\ninterface User {\n  name: string\n  email: string\n  info: {\n    age: number\n    city: string\n  }\n}\n\nconst db = new JsonDBRepository<User, typeof indexes>('./db', {\n  indexes: {\n    name: { path: 'name' },\n    email: { path: 'email' },\n    age: { path: 'info.age' },\n  } as const,\n})\n```\n\nDocuments returned from the database will include a `$id` field:\n\n```typescript\ntype UserWithId = User & { $id: string }\n```\n\n## Multiple Databases with JsonDB\n\nYou can manage multiple related databases using `JsonDB`:\n\n```typescript\nimport { JsonDB, repository } from '@david.uhlir/local-db'\n\ninterface User {\n  name: string\n  age: number\n}\n\ninterface Post {\n  title: string\n  userId: string\n}\n\nconst db = new JsonDB({\n  path: './data',\n  databases: {\n    users: repository<User>({\n      indexes: {\n        name: { path: 'name' },\n      },\n    }),\n    posts: repository<Post>({\n      indexes: {\n        userId: { path: 'userId' },\n      },\n    }),\n  },\n})\n\n// Access individual databases\nconst usersDb = db.getRepository('users')\nconst postsDb = db.getRepository('posts')\n```\n\n## Indexable Types\n\nThe following types can be indexed and queried:\n\n- `string`\n- `number`\n- `boolean`\n- `Date`\n- `null`\n- `object` (hashed)\n\n## Storage Format\n\n- Each document is stored as a separate JSON file: `{id}.json`\n- Indexes are stored as JSON files: `.index-{indexName}.json`\n- Human-readable and can be manually inspected/edited if needed\n- Automatic directory creation\n\n## Performance Tips\n\n1. **Create indexes** for fields you frequently query\n2. **Use `getOne()`** instead of `get()` when you only need one result\n3. **Batch operations** when inserting multiple documents\n4. **Rebuild indexes** with `remapIndex()` if you change index definitions\n5. **Thread-safe** operations using `@david.uhlir/mutex` for concurrent access\n\n## License\n\nISC\n\n## Author\n\nDavid Uhlíř\n\n## Repository\n\nhttps://github.com/daviduhlir/local-db","readmeFilename":"README.md"}