{"_id":"@arn4v/meerkat","_rev":"2-30a793dae915468327fe0a49f6de85e1","name":"@arn4v/meerkat","dist-tags":{"latest":"0.3.0"},"versions":{"0.1.0":{"name":"@arn4v/meerkat","version":"0.1.0","description":"Meerkat is document database for Node.js built on top of SQLite, which exposes a MongoDB-like API.","main":"dist/index.js","types":"dist/index.d.ts","keywords":["mongodb","sqlite"],"author":{"name":"Arnav Gosain","email":"arnav@arnavgosain.com"},"devDependencies":{"@faker-js/faker":"^7.6.0","@types/better-sqlite3":"^7.6.2","@types/node":"^18.11.0","tsup":"^6.2.3","typescript":"^4.8.4","vitest":"^0.24.1"},"dependencies":{"@fabiospampinato/is":"^2.2.0","better-sqlite3":"^7.6.2","bson":"^4.7.0","fast-json-patch":"^3.1.1","rambda":"^7.3.0","sqlite3":"^5.1.2","superjson":"^1.10.1","ts-toolbelt":"^9.6.0"},"scripts":{"build":"rm -rf dist && tsup src/index.ts --dts","prepublish":"pnpm build","test":"vitest"},"_id":"@arn4v/meerkat@0.1.0","_integrity":"sha512-Ht/ywy91gFEJ6Ve39FZf0fBaG0HLHsoQgZqREtNWrS/6GqY6iQ1RjEHEUj3l9pYyDjo6TiOHHMNXolkJ870iMw==","_resolved":"/private/var/folders/hy/m12_9cyx4xs5w0837748323m0000gn/T/608ece1b56d172cb5a07fe51e3e70b08/arn4v-meerkat-0.1.0.tgz","_from":"file:arn4v-meerkat-0.1.0.tgz","_nodeVersion":"16.14.2","_npmVersion":"8.8.0","dist":{"integrity":"sha512-Ht/ywy91gFEJ6Ve39FZf0fBaG0HLHsoQgZqREtNWrS/6GqY6iQ1RjEHEUj3l9pYyDjo6TiOHHMNXolkJ870iMw==","shasum":"e762d67feb021a2aa09c74dca3df22a8afc776fa","tarball":"https://registry.npmjs.org/@arn4v/meerkat/-/meerkat-0.1.0.tgz","fileCount":4,"unpackedSize":16874,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEYCIQCGxPYL0JvLyORk5HmM7wCZxcI/4SGuES/aJ7tl97+vuAIhAPQRhESHJh+z7VNFVxgiPw+aEC2UnFJVjgc3cgcf9aBn"}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSeWYACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmpx/Q//Qsr1Wg7YD8FTN+y7/v2Ac/avMS4BV6cwjc6VPNIHtvayE01e\r\n1VXbhfFU3nJTcr4jA5Gdtc9myXch2kfP82WSpplnfT+HSwfzt4NoAX1q4dLk\r\njPCYt4IRauafUXppMfL6uRytY5v1PgGrX8mz4r7c/b4Qg9CGFmsX91nPUe78\r\nuyLLr/ZXrMrSZBK9wcb4uU7+sxCOIT739q3NOgonTBs15c479DQqHmvB7CPd\r\nEFbs//uUihtwLCgWLkpMHyGdrR1MgnEWp8zrtcPTTUhtcmoKontGjJNMspjz\r\nYudn5X0muxcNGa/0ZClE7WCEcmk8/r2euWFLf0SOmG8UnypQ2NtKJ/9tNvxW\r\nBwj6fnuRdmcPo165JdwNKha2gHyeP/nKH88v46EPqbzN6qAGk8zQjLCcxO2p\r\nomwbOG2ms5u2JcEeb9S/ZmgX+4eYCdk2K/LSMcUfvMmOr0Wqqg8nI3uVQ+Zg\r\no8zM0SfcjJm+rn2wGq/jvjXelhOxxbbmCppRk726S4etjTkJOUlnVjEEzJO9\r\nG7j1ZEJY+x/kqOC7TeaNG3zDVp0mCrRLzl1quBtBsV1kNKealHcoH+iYMUMi\r\n3jKuHCCWVghSsjrjOe0Z8ipVRzo22Y40HnVSvCZovXuxlEIm93DqXrFEZLKl\r\nr/zPqNeooX1p9DyzxswUDg2JZ30LQuX5wCk=\r\n=hjay\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arn4v","email":"arnav@arnavgosain.com"},"directories":{},"maintainers":[{"name":"arn4v","email":"arnav@arnavgosain.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meerkat_0.1.0_1665787288579_0.1209661307986134"},"_hasShrinkwrap":false},"0.2.0":{"name":"@arn4v/meerkat","version":"0.2.0","description":"Meerkat is document database for Node.js built on top of SQLite, which exposes a MongoDB-like API.","main":"dist/index.js","types":"dist/index.d.ts","keywords":["mongodb","sqlite"],"author":{"name":"Arnav Gosain","email":"arnav@arnavgosain.com"},"devDependencies":{"@faker-js/faker":"^7.6.0","@types/better-sqlite3":"^7.6.2","@types/node":"^18.11.0","tsup":"^6.2.3","typescript":"^4.8.4","vitest":"^0.24.1"},"dependencies":{"@fabiospampinato/is":"^2.2.0","better-sqlite3":"^7.6.2","bson":"^4.7.0","fast-json-patch":"^3.1.1","rambda":"^7.3.0","sqlite3":"^5.1.2","superjson":"^1.10.1","ts-toolbelt":"^9.6.0"},"peerDependencies":{"better-sqlite3":"^7.6.2"},"scripts":{"build":"rm -rf dist && tsup src/index.ts --format esm,cjs --dts","prepublish":"pnpm build","test":"vitest"},"_id":"@arn4v/meerkat@0.2.0","_integrity":"sha512-5+eadCT5S0p+wnZhSsxRElKa/FEwQvqvWTa0/iXOujcgX9wFiPMNTQHe/2UigK99wdG5me8HBoBge+t4lmkbeg==","_resolved":"/private/var/folders/hy/m12_9cyx4xs5w0837748323m0000gn/T/95cda1c84a6f77b2ffae91549415c856/arn4v-meerkat-0.2.0.tgz","_from":"file:arn4v-meerkat-0.2.0.tgz","_nodeVersion":"16.14.2","_npmVersion":"8.8.0","dist":{"integrity":"sha512-5+eadCT5S0p+wnZhSsxRElKa/FEwQvqvWTa0/iXOujcgX9wFiPMNTQHe/2UigK99wdG5me8HBoBge+t4lmkbeg==","shasum":"d9bcaa3d7ad116b12b89b55b6f486a941c149fa1","tarball":"https://registry.npmjs.org/@arn4v/meerkat/-/meerkat-0.2.0.tgz","fileCount":5,"unpackedSize":25843,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQC247bsA8SYy8dsfUbzBQTrJkAPxdb8azU/m9yi2ZWq8gIgKOeoZamAyh4XV2RWAxc3MDiLcEKO5cItgQdfJ72kd0Y="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSfSMACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoKyxAAjwY9rWF7ZTO1SGt+AnaPjGSDKTlPnMzjmVMspoI6M0jAuyzK\r\niq/8KMlou8/AUinh+RkSGno4K6KiHS9dmnhrwwCb6RTezWwNiUoizlcpWvrn\r\n+WT6f/GxOyR0mQRFgisQ3MtdVGSviqussdnEHGt9hx0Ac3wKtii1mMKMFCp7\r\nc+btRktJKJo9zCq//EZhlPuBiJPB8ZSDGWTYBDKJ50NarTc3tCYcCnWFKbAz\r\nBWsZfyQ5f2oN3+rNq5ePp9kvsZ/npV9jQYQz4HYDTml4ymyImTfigOxtFHla\r\nCGWCKUJ8phZ6H3Diuvq2BHGH0r2MgFIAZM4VBO0lJZNbXvVUFBVJUAj1cotg\r\nToLQtkUoAbLroqdIGYfnt5WuiHDgzLhN+H1dU7x+IAQiTuxKmelFQVXTb8G3\r\nGliZzd+cXgbfamZhxQ/I/EV6iVsoZyBZER95b1OCDolqfgrm6ZJmAvYhAkan\r\nJPgqCL//svIkh/htFwL5crJg/yTNpNWYtrk2CV49ZXF4JX8xd6a3+xCh/cSt\r\nxioLUhoADmvzVLdGO1zycIaPGAsKu1yyEOx7RLtaHKQ/mhERmWGeFeN05zzu\r\nhxuYAcb74L9v2m6RNBXyBFXGk7dAudsgY/gv/HMi4IvVuH70ZQbipNUdL+eK\r\nntuO9ur/kCF6/AxhWxp7A5HIK+X04GCsjDA=\r\n=wfCc\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arn4v","email":"arnav@arnavgosain.com"},"directories":{},"maintainers":[{"name":"arn4v","email":"arnav@arnavgosain.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meerkat_0.2.0_1665791115794_0.3871216986319461"},"_hasShrinkwrap":false},"0.3.0":{"name":"@arn4v/meerkat","version":"0.3.0","description":"Meerkat is document database for Node.js built on top of SQLite, which exposes a MongoDB-like API.","main":"dist/index.js","types":"dist/index.d.ts","keywords":["mongodb","sqlite"],"author":{"name":"Arnav Gosain","email":"arnav@arnavgosain.com"},"devDependencies":{"@faker-js/faker":"^7.6.0","@types/better-sqlite3":"^7.6.2","@types/node":"^18.11.0","tsup":"^6.2.3","typescript":"^4.8.4","vitest":"^0.24.1"},"dependencies":{"better-sqlite3":"^7.6.2","bson":"^4.7.0","fast-json-patch":"^3.1.1","rambda":"^7.3.0","sqlite3":"^5.1.2","superjson":"^1.10.1","ts-toolbelt":"^9.6.0"},"peerDependencies":{"better-sqlite3":"^7.6.2"},"scripts":{"build":"rm -rf dist && tsup src/index.ts --format esm,cjs --dts","prepublish":"pnpm build","test":"vitest"},"_id":"@arn4v/meerkat@0.3.0","_integrity":"sha512-bk66mZtycWs81gBNwNA/nP3+hb1wiyyvp6VU4ufHDasaFP66tghck1tCeWr17mpAx863WpBEvfYvmeVuTSnMCg==","_resolved":"/private/var/folders/hy/m12_9cyx4xs5w0837748323m0000gn/T/62b1ee96a06bdf1580997d44028d89d4/arn4v-meerkat-0.3.0.tgz","_from":"file:arn4v-meerkat-0.3.0.tgz","_nodeVersion":"16.14.2","_npmVersion":"8.8.0","dist":{"integrity":"sha512-bk66mZtycWs81gBNwNA/nP3+hb1wiyyvp6VU4ufHDasaFP66tghck1tCeWr17mpAx863WpBEvfYvmeVuTSnMCg==","shasum":"df84b086779a991449e2497d6bacff0b1c4d7c4a","tarball":"https://registry.npmjs.org/@arn4v/meerkat/-/meerkat-0.3.0.tgz","fileCount":5,"unpackedSize":26002,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQCGdsCpBMGx6GO/kFecSBh04xnpnMsRjfclIW9TCltdYAIgAbUzsc7GHHGXJcbdC2sVCYn6u85vTc9y4/W6NPgop4k="}],"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjSfY6ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoGZhAAg8Q4VrOXFfQSOv3y1ouYD7JfmO1agDrQFJMCGHeVuuxFxjUX\r\nYWd6xeJBl4xL1gN0tHmrTcdyahHpZAFhal9pCcHvzhq/pjRhredlRQXjGEId\r\nOtSKkzKPUEx3EQdrZjPeYsCau1zKUNO7zDDrNut4ahzhC+Qwe//Wr7B6dtRi\r\nrasxp68KbkmJEYckaFqCUvUxPhcyUXM7TlpXZEEJFRB8SskoUyYQZAVLvo9b\r\nPnwRRLqFyvnOpTL61YRkoVkGByTPgAL2cmUm996wG9JR6K53JRBpCUm3O+/O\r\noiC/qJujI2tYM1Ft0G98yuoYFXYmm52ApeoAJZh5OhyLP2yiqhW9cK0+1Nx8\r\npBwG63Ce/f96pO4GRJAvpvnDuZw6ioo22WjpsoIQJohceHG4jBZPoS9+Jvt8\r\nnsAIVharE5HTA0SNAsplwGeBxk5f+BkSyewvFOds/qUMyOXSPub54zgSpO3W\r\nuLE1LwMpQt5Le4n7qZizsaiPFYXt7i8USFykQkBraRYFozZY7HhzdfMlb3tp\r\nXAc0v2yLHwbAR1EV0OhMSctirZHCWeywx9oDQShvEolM2lnC3PA/cbqpjDTQ\r\nm4hJQ9JJ37eeLWY9TITwGdt1SpZPYXR9YZFDXAbXWoOvp8vNoEZ1NFfEVrX8\r\ngNAd0GgLPl2w9JjrICRZ+FXNcxv+7wS959I=\r\n=skYi\r\n-----END PGP SIGNATURE-----\r\n"},"_npmUser":{"name":"arn4v","email":"arnav@arnavgosain.com"},"directories":{},"maintainers":[{"name":"arn4v","email":"arnav@arnavgosain.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/meerkat_0.3.0_1665791546238_0.5725856290794011"},"_hasShrinkwrap":false}},"time":{"created":"2022-10-14T22:41:28.517Z","0.1.0":"2022-10-14T22:41:28.838Z","modified":"2022-10-14T23:52:26.564Z","0.2.0":"2022-10-14T23:45:16.038Z","0.3.0":"2022-10-14T23:52:26.488Z"},"maintainers":[{"name":"arn4v","email":"arnav@arnavgosain.com"}],"description":"Meerkat is document database for Node.js built on top of SQLite, which exposes a MongoDB-like API.","keywords":["mongodb","sqlite"],"author":{"name":"Arnav Gosain","email":"arnav@arnavgosain.com"},"readme":"# Meerkat\n\nMeerkat is document database for Node.js built on top of SQLite, which exposes a MongoDB-like API.\n\n## Motivation\n\nI make a lot of local-first software for personal use – custom RSS reader, CLI tools, etc. For this kind of work, my go-to database has been SQLite due to its embedded nature.\n\nBut I spend a lot of time modelling my database schema because, well, SQLite is an SQL database at the end of the day and I wanted something more Mongo-like, but still embedded.\n\nThe core motivation for Meerkat is to build a MongoDB-like API on top of SQLite for Node.js.\n\n## Quick Start\n\n```ts\nimport { Database, Document, ObjectID } from \"meerkatdb\";\n\n// Document generic automatically adds `_id` of type ObjectID (bson)\ntype TodoDocument = Document<{\n  title: string;\n\n  // All optional keys must have an explicit null type\n  // Undefined is not valid\n  description: string | null;\n\n  status: \"pending\" | \"in_progress\" | \"completed\";\n}>;\n\nconst db = new Database(\":memory:\");\nconst todoCollection = db.collection<TodoDocument>(\"todos\");\n\nfunction addTodo({\n  title,\n  description,\n}: Pick<TodoDocument, \"title\" | \"description\"> &\n  Partial<Pick<TodoDocument, \"_id\">>) {\n  const todoId = todoCollection.insertOne({\n    title,\n    description,\n  });\n\n  return todoCollection.findOne({ _id: todoId });\n}\n\nasync function deleteTodo(_id: string) {\n  todoCollection.deleteOne({\n    _id,\n  });\n}\n\nconst newTodo = addTodo({\n  title: : \"Finish refactoring users module\"\n})\n```\n","readmeFilename":"README.md"}