{"_id":"@pvermeer/dexie-rxjs-addon","_rev":"55-3ec34dc8befaaac94df8e7783985e1fe","name":"@pvermeer/dexie-rxjs-addon","dist-tags":{"latest":"1.1.1","beta":"2.0.0-beta.0"},"versions":{"1.0.0-beta.1":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.1","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"aedaa3126809b126c7572e8a39c551b069cd6e83","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.1.tgz","fileCount":18,"integrity":"sha512-gCrDIS6SAeiCwIrMVov37/pMbaeTfwSVSkIsla+RCOhYzbrgYc2uOB1tNJpS5oRtwckJvqWGLrBxhyXJFj5R9g==","signatures":[{"sig":"MEQCIEFHdf6HcufqWTG76dZB9wVpluSNiSDvP6b0D95LhsvMAiB1l17aUCQyiB38Tx6PY1eRmpEu4sxOkIfI3l+/cUoJpA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":271357,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJePtbTCRA9TVsSAnZWagAA0bgP/1fQ4zqhFY35NsdqmN1a\n4lR/HOqMVRzTdwJrxl2WHi0L3KPZqhOKl4DYR+f5BaSNPG2yFgjP05X4T9+D\nmj1dl6mizvf6IvOHEwsOHSDjkqQfVbA9QQTASuzOjswqudOEny7GYmGEa/Gv\neomNO4EcwCY5tmoRnU2I+T68tD+G2HW2RUDNX+2b/HMigPk/NDeOwzVGlIBm\nwfETEQd+9cneFnOHJZTgo67ykE8D1JcZIcK9i1hjpgtLFBD5lz1D23XQonKE\nXgZH7NT0eiVIq9108xxsPZp1sOU+DB06DESYI0z62PH8Jwr1uXALgIePzEKF\nzzBQhglt76CPbHPwA4MCC9scoePUHOQzEy8+r4DGG/499KKaaS9nPyfJEMY5\nIudHZZHvlO2nuPsIfgwJ5pK0O/Node/XF9KCKeHZOu6xEeSXYLGCpi6no2e1\nTzpe2lbQRzywx8CpcYv5W+PEShdF99ZjIobDENSLoNgyVfmWTUk2xPqWsQy2\nB1stDWcdd1H2LetLr5m1A8eJK4DUYC086pDfvFjSfbL7cuAvduZMRDIeFxAY\nHUfrtqO5MOSYXZJRjGuuiuFxqh72xzGuC2qjJBCxg3qid8JRyJKRi1tgEoE5\n5guLIBZq9RcDdaIrmDEDYAUnNI9DyAg3DunQ3Ckw2I016sn3g9syZnQRbmS8\nLm0A\r\n=XPPn\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","gitHead":"802e9c7262fa30401d42ac53fa245792755e6e8f","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:declaration && npm run build:copy","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","build:copy":"copyfiles -f ./src/types/**/*.d.ts ./dist/types","test:karma":"karma start test/karma.conf.js","test:jasmine":"jasmine --require=ts-node/register --config=test/jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.15.0","dependencies":{"lodash":"^4.17.15","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^6.5.4","dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","copyfiles":"^2.2.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.23","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^17.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.1_1581176530786_0.7064011863200228","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.2":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.2","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"02ba37f17bedcc9a6a114afb61b9f199ef7283f3","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.2.tgz","fileCount":18,"integrity":"sha512-nEtBNRUfcRCTViBTsq++xf90OQU7JFp6aUQmVK9X0JLdW9N7pi9JgDpYEsEk5751udaiIicS6FZWqQbUpO6CYA==","signatures":[{"sig":"MEUCIQC/1YBMXUrana4fuB/tpr67ioQ6flPANrkaql3N0dhpYwIgbhoPeJPZiaqR90RBDAX3G0lJOEReBUG3Vr3bz0FipiY=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":273993,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeQE13CRA9TVsSAnZWagAAypAP/0banhfVt4nLyGPGkiBt\nNPXleGIp3J7ntAtZNTCY1GpxQ7ht7UadVKBdlUGTu5aWsEiw7WaO/XZt9x24\nzVu/1CMfleix05w5WGn3ioxf+pVW9SIfKv9UN/ioNupmd+x0mXRA9E4ZfrFf\nFcwoTdcTu4nxCv9vqT7XD5pYPn4L/NehUPvXkhDtv4wB85cdqdolj6BPqNWH\nyzExGC9uv6Xip/ktn7HOSH19W4SB/NevjfcYX0UTuUqwsmv07Z2vjxyLSv1p\nYFIToRJTqYdtBvJJ9z4Qz4IvCkgl29+yfCOdzXx2OSgwvcs01VG3V3Z5gkhc\nxLyJJD7KSWztW7fDYym8fvOovA//do/r4s8NqLGXM0pgCQp6X9lqhVjq7VdQ\nZUak47Mdv6KiTbyof2JqFy9lEbcybTvw9P2zEaTXMiWdJmHDvZb7fOKQ6sEY\nvY1jmijjyQzrpn+mo9t3S6PG/OgOORgVwCAAWvWea1bCnI963YxGLtUufomq\nPgsvLFYg6T0NtjziZDLTzsAyRJheTapv2wAj6p0MNg/sGhV+CE3TFqOMbZ0k\n/sQtYMKdXwdGNkJ855W+nAqfY71YBfzhzTqhcZn2EoJmDpm1IMV6mei6bZgj\n9bYYeWhCZnBATycOyfAp92bc/RwwzJowt/YwB0CHXro1nbSYf87y1IW+tpAN\nT9Z8\r\n=gw1V\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c924944b83c243950719b487825cf732562a658e","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf coverage/ && rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.json -m es6 -t es6 --outDir dist/es6","test:karma":"karma start test/karma.conf.js","test:jasmine":"jasmine --require=ts-node/register --config=test/jasmine.conf.json","build:bundles":"webpack --config webpack.config.js","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"npm run build && nodemon --ext ts --exec jasmine --require=ts-node/register --config=test/jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.15.0","dependencies":{"lodash":"^4.17.15","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^2.0.4","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.23","@types/lodash-es":"^4.17.3","karma-typescript":"^4.1.1","semantic-release":"^17.0.1","@angular/compiler":"^8.2.14","karma-ie-launcher":"^1.0.0","karma-edge-launcher":"^0.4.2","karma-mocha-reporter":"^2.2.5","karma-opera-launcher":"^1.0.0","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-detect-browsers":"^2.3.3","karma-safari-launcher":"^1.0.0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","karma-phantomjs-launcher":"^1.0.4","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","karma-typescript-es6-transform":"^4.1.1","@commitlint/config-conventional":"^8.3.4","karma-safaritechpreview-launcher":"^2.0.2"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^2.0.4"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.2_1581272438825_0.4227690782515352","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.3":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.3","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"85c4dd4078ea6d29f4f2dca2665c515e82a6a54e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.3.tgz","fileCount":27,"integrity":"sha512-FCwJrg+o8qGOuorHZVVBeQa+4xZipK4upxHCxiVXAIh0LUss3XG1H/+TcmkTeXSNQnfx2Lqyxpt+aU63MP7ohg==","signatures":[{"sig":"MEYCIQD9WRBdRsENjGLBZS4qGezzFi4wz6r5+TEtVU8VqYXMwgIhANutV4i3j3eCvQvmAU3Zxt8SZlrnl8ykLlxEjHDYhJQ8","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":283190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZlT+CRA9TVsSAnZWagAAdzQP/RLw1PoETR0n8P5ND/Hf\n3gfuhaDK6nXOx6vaju9DWWifLy0t3k0wA58+3KMRsPBsD89UaY4TfBxGWLlL\nM8Q6Rjk0YCVM+haM/MFaySCcWb6ntxWGwrnTvCDb3Xw1r7C3dps2BHZvVxBm\nMq4Ixx6BRopWgM6BeloCNzYp8bX08xNglSbpE4dSgrEAPw1kJ3Y3+rMnenlB\nM6B69yBcI60MuMLJp+FLq/w49hibZILw3+fLXtJKIis1Nej+XECoFhCd9Zit\nCQ2JdfBVGwrV+RH8IUAH1zH7KIBlJjkvz6YdHBasz7FGlWgLMIR+Uo/YYxjQ\n8i6TzGH8WR/ywFcw9MQE867+SGwz7Uzso9vE2gq5BDL5xloml37wPuVbfT/0\nnVDmY90xbYqYg9zePitCQLdEZ5JoWXfyiFAe27GIP3LDe6kG7DQi85pRTsMg\nmf/PquvLLwhKNwcHnDr3xynjlOwkC0P8ujc9ZnrvI2SbNbtSe0cbhsuhhH7W\nE9/JVw9xYVr2Eq+ZxxU+wMIjm9caGrFc+qsvRjXgMpd12K0yi3W+6gKDMPHr\n69unkJuDkfTWC4Ofs+poKEpMPWTYL8pKYYSPmyBw9+miIy1tE+06UHr5GFHe\nlGvX7S/YegG/CixZGCBcirfJr1xEO2Neg7iphQWnFsYS43Z2gZPGJGs+bG5S\nQR5C\r\n=OZWe\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"287e4590bdb10812d7ba684b0d68bb3bc2687168","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"lodash":"^4.17.15","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.0.7","karma":"~4.4.1","rimraf":"^3.0.0","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.41.5","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.10","@types/faker":"^4.1.8","@types/karma":"^3.0.5","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.0","@commitlint/cli":"^8.3.4","@ngtools/webpack":"^8.3.23","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.1","@angular/compiler":"^8.2.14","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.3_1583764734086_0.3394168700248055","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.4":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.4","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"3e82662caa04f527f58b4955bb7566258702f708","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.4.tgz","fileCount":27,"integrity":"sha512-k7QBUibvf8uw3u1RmXXdSqvGzTJpehKXztowT3HtoP2+cs0baAKdGgTBK9t6g4QQgfEksFnPPntMw6lSVo2azw==","signatures":[{"sig":"MEUCIBayhEzrT1dNpTAkFHx/5zy7TliiVNtO1N+OB0AxsAbRAiEArZhOp3u9xgA70Wnoz2CO20XNqFMeX3lrYKddKXjengo=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":283420,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZo4oCRA9TVsSAnZWagAAE6wP/RdGwe6g9LhdEjcLC4aQ\nH6ssnvW/4VhWy2nQ5BIy990fuMcmjIkmXpBp/DWNWCuAvxNWfsEv5Spsrnab\n5lTCHENDEyIFpKnkbFTrxQENwxEPYAI7AAJxHBfSCy47L1spruKChlc0EbjN\nDd+MxnLqnI4gh6iC4+VSDoXMvd+/2Is/XS1AbMuYyfIEw2tAAYOSPrkuu2/d\nwy6TlY5n3GcBnXFva7CkdE9SyrIAdLEa6g29ew++qJBsfji5xk3hxJStFpLN\nf+oMJLM2PUutxSA1nqZyyPACL14pDUlkru+smN1oOqBw8JjyURSJ/F+0YSPr\nkqKiOsURh9Wl6nmubfU3TmRtUXDvFaWBMW0PMIbckfI0AsZo2UiLlhYoQs5d\nIf5SFUT/hfi8Mg0A3xW29wDecF4KuzgdBHMg5Pf8i0zvQ7l5aXjRNKWherkc\nAtKQMAplDIVT3DgsdkjvS3P2i89eWQtg62/dpCcfxG/TxDqi/+7UC+SqY+Vu\nWl+K680+dkfdM3sZSULlPwfFZm2FWg/nZOvaGW85Oj/OLMi0ls2w3k6ndR9D\nQw3Mlq7y9i5STPxsvQ7sKsL2yx2yuUxIOyBQxlkIocgCnoiT4Y/wWkddp6Sg\nN7Mdw2E2diV5iCHQw4Ea67o1qdvVfu/Xc6/WfeLXGF0zosNaatV3qzd05OCL\nyvAx\r\n=NMuF\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"0a6e3d480b23ea0d73efbd3e3790eed45519240b","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"patch-package","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"lodash":"^4.17.15","patch-package":"^6.2.1","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/karma":"^3.0.8","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.8","@commitlint/cli":"^8.3.5","@ngtools/webpack":"^8.3.25","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@angular/compiler":"^8.2.14","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.4_1583779368401_0.3409375502674161","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.5":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.5","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.5","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"d8f476aa6fd914d84a6c59e7786f3c0c950db7fb","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.5.tgz","fileCount":28,"integrity":"sha512-n2MPpTPpae0/ZdbdHi3feWTGSPiHom4QUHrSQA/vSnjixDeF++sg94a4DCWD4s0UP8V2iUDbwbNQK/B/wGrYnQ==","signatures":[{"sig":"MEYCIQCHbLynUuT6Qf7BtWM3ZknOUH2GQeYHQr1GkptXLHME8AIhAPXyDOzYDxqbzZrveaJ2ZFUG6TBtpZGEPwA+7Alpt6zB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":290724,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZpDjCRA9TVsSAnZWagAAQ+0P/jyg+e3allmg9MoIbFQJ\ndrSp6UygNc5ecDYuCu0/30pioR8bY0j3Txf6LKVQxiF4v3fVRz08J4j+L6wq\nocm87jaV3IdPitI2oDo9kOqJhRHe9XM76yfT41zb9ZPtwPP7iBjNQYerZFU4\nEUKLB4Xx5Rk2aKgTcp1De9jR04vCiMDStuk7UlurrTt0cSQ6lrFjEOyKHbE7\nGnPNn1vkglGtEv0OvjRNhoLDexIhNC2zaiFHM8ma/ApPjayGtky94T+DXHvW\nqfaGTSYxCOF4K8happIJThbfSIxWOnkHdkrxzd5ETAAhhn1qUJqjUfjL82Uj\ni+RpB+TKPpmOP8U4/3Kdib8h57EdgKZE3RZOmtkSWzetp7UHHJYaKdEn/xMx\nSfvfilDnN9KGRjk6kTFWwKtDODyrlR2HwY/TkAotDSZJoz8jVKlVsei9jenV\nZYDqUUoHjYT4WyGwncmS+nGPYVCFNxa3thEZYZRHUtN2epVpmiinLJf6yzur\nTACNx3K1QVSvBnfP66bwBWlPbYqkG0fVxtEMzxG58mBPSRWqZaNas37sG1GW\nPuFgtVTxeieIoyvNZEeenn7WADeOE0kDydUPk8ahTI9VKQ0O3YVGO7niF7cM\n6WXq4eFfAmlfgLlSbZeIvXwj4Tkn9arqdrQjOuTUG6iQa6L1hVJVTxXQrAIR\nDPvg\r\n=WotS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"9cb9b044e2bf912407cc88db96aa7624ca2d1be4","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf dist/ && rimraf -rf reports/","build:es6":"tsc -p src/tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"patch-package","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"lodash":"^4.17.15","patch-package":"^6.2.1","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/karma":"^3.0.8","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.8","@commitlint/cli":"^8.3.5","@ngtools/webpack":"^8.3.25","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@angular/compiler":"^8.2.14","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.5_1583780066803_0.6713895385851492","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.6":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.6","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.6","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"4224a778b8462c4ca6694db9242f98ff74ca4231","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.6.tgz","fileCount":28,"integrity":"sha512-o4mrKT4qQ6Q+Z/4PbS46uHpTXqwyS0uawfrRu0fStGhkUYkjT8MCGhRrcaxLZIBu0lWHxy6FvFNFdq055WMqiw==","signatures":[{"sig":"MEUCIASNfmUyS1SrBAPzrfNBXV6tb4DKN6Qpxdtd0lqDQDtkAiEAyRYY9NqP41J2EmBGxh8oYxUTrySpaWo5NQ6fXmugl/0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":291182,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeZrInCRA9TVsSAnZWagAAYpYQAJ2HMZJQZ/z5pgwNC3FQ\nDjahhxqE1c/seNhkCehb+9IT5BIeTvVF9VsT1+vBbKChB3QlhN6g/ILr4kv6\nTfP3Bsmp3x3r1HsnV26wcfpfok8P8Z3cEF7g1z1XwUjaM9eb70bOsXwc1MDg\nr/ybVtBT8Tm2r5ORayPw6izy9KgIvppcvXIe05Z5s9Kvg6wB8wqer7vu9Hts\nIGofqyhGnOjYO9NAhR1otguQ6+/fNC0bx5zzVmmror2KRyLfF0bmOfTwXmTN\nBdpnTa+gDuZXnChA5dFXp/8h4p5bruHi0jX6ykAhs1BpvVynQcqo5r1Tlily\nI5ZXBAS4AgrGetZ0YmAul1iq3Dmx/VWRLyM210yW2q4pK0mDE4f3Qf0Dz53a\n1T6dvipiNTxOO6qZwKkBBUHKbdsRL5uOk+hEV7HelZIufeFYfwS8kFTkskVe\negfzImv1o3HMpWeP//8TYeKblxJIKkzeZOUNquii8K/Dn+Js6yIX6WO+vaKk\n+bK6dEmN5DApNbj8am8DJypkugkRSn4J4VmdZIIrlTysl1gXu4wgv10keNhH\nkFI7GNqS9gcfO/tohL7TzxY+YfTvXfvf9t6L8BeUmZclg1p8hDZTI9/aIqY6\nF7aITZ7WVofga1KL7gPtHGtvWJfQKFHJ04IOGmuockzivQ6cIEy2QHLjgDdB\n5LNs\r\n=ae/c\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/es6/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6ad8e3f0a9b715f10b51e41d0b2bbb5bff163ab6","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project test/tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p src/tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"~3.5.3","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/karma":"^3.0.8","jasmine-core":"^3.5.0","@angular/core":"^8.2.14","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@types/jasmine":"^3.5.8","@commitlint/cli":"^8.3.5","@ngtools/webpack":"^8.3.25","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@angular/compiler":"^8.2.14","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@angular/compiler-cli":"^8.2.14","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.3","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.6_1583788582990_0.23954728581274587","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.7":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.7","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.7","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"62c3f7eb803a3a58f848f5b54b37757ff961c6ed","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.7.tgz","fileCount":37,"integrity":"sha512-O538v+R5bNKCXQjMNVwErWmBDqhVW4iPFAyU2pM3jiZD0wZ3zgLcUzLO9j5Ocd0wQwReNlxS61qsXvjz6UUE7w==","signatures":[{"sig":"MEUCIQC8h+XyRGK2r5l2INZYOLFnNoIedTbmrR3Tmu0qiY8IIAIgUSg0jhnEG4rqqwdf94q8K+H8uNKAmT/0EaoG9pHGdeE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":106269,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb11fCRA9TVsSAnZWagAAOtIP/0EHK/Or8qbUIUv7mSJ/\npc8XpR/Fx2uQwhOXVbsZuAhWfwB+NnUsQtypN1KVr+9AoOUWt1HMNKMi70FR\n56aoP7HUtgps1hm5zJQShUL5WHV06+pNZP3zT44p7fQuf/mV6BUqWZ/YP9Ks\nRUi/DmDyleCFUkVLq4UohvnOagpN17CJxRWMQr263BB8yTIS1k7eCfUvLp/5\nReh8EoDAQVAupxjKvdeC3xthfjKWn/ejDTprq8iuWW4urdW9Iu6D9h5QtJkU\nLqmkD1Fad3oNyPCsvIm/4gK8IpSa16G6yb5A3MGVuTfTV3U8a8wt5Yi8J3PG\nsSuRg+vTSvZjM3ULS/nonplK65kbifbPtWUOx0ZOQR8om6ZLLctfHrL2PXx0\nWSFFUmNGw3748N/oDwqZv+ovApXzt+jOR7oAysnbFwZ/Lk9rYHxd2n4+NqV2\n8pzD2xX7ntl5IexMs398dKl1ah/GgplCoOZeJcKnUmRby3B8h2nUMI1Q2NSQ\nOk0EnZyTvZEC8BCEgu2LFqXJU31FW/NADURjkaeAj4rEuMLvq6pfWBziHmxE\n5SjCih+BoQNfAB/jvx32+XBSRJAkTm2YM9GSfAYWgUh2XESo/4QYNwb6URva\n5oEckVsYmrKhYkO2IYXGeO0J9jbHenjNSczTttlXyYrTna6pdm1b8AG8UmW0\nEeem\r\n=wjce\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"4bff5c4deee93a915a2f5869271e42158bc193d4","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.7_1584356703383_0.7485731935194031","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.8":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.8","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.8","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"816c8e1662f7b5dbd752aa5739e4d02b25393e39","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.8.tgz","fileCount":37,"integrity":"sha512-FuXObl03SspXWxSiQrCoPOHjUNOEWRBjyqfslvq+QVySPWR2JDcTjqqv5qSnS+/U2VWw/WezTxcbhrxa49kqyQ==","signatures":[{"sig":"MEYCIQDgf1As6kT+PDY8SgaD/iGMIhbuXiYFAdkBicyrJzHETAIhALlZOASB8XDoZPks944LF0iK39h5S9PTLL9bs0ED3nnw","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":108599,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeb580CRA9TVsSAnZWagAACD0P+QGG2ijvk86/XQ2d9Azy\nDmMF+8DfC7xTzeTzBRAqy7RZ028GkW4uBq8jpqUZpVR+yjXebWD6Wz7eehts\nuxjW5r+IxM7CNcFuM/X6MIZF/sKOytxGnLZSVgBsV+pPbvwffHl4aEf6829Y\nVCfCWWn6AWgZJ5JAZBbyRXr297W6xM6zI++s89223BzZFYOTDNWxx5oyB3dH\n2P2AJ3GowrPbVQN9p93c7eDHPNI0jkP0H02hKJxuxvH4Pxwh+uJ8XNuaBFjP\ndT1Etm8Iqn/utbKJfBlJ6E/lprCLoF+e2+hTaVElPf07zrV4Qs7q3+0FUy4t\n12XJ8VATW61pIEDOQMUT5bIG/50uTKvXl/p7+GDn1DJvAE/Q1YKdnoMmvEgB\nD7AEXQHhoxmq4jH5SfOhBB2zv9vTsdIiFmvPnOUFZIxDKTBJXmQ/5+xJD0UW\nRL+yVWcOj1ambxpxWbpvNuBg38yf2zpXuiESOsEWf8UDxBA9ZudyPZmYb6z6\niNqi50huSJdnELxh5Sx8w8HcPMqPQBS9I92ML31qnhdt4vCOkIwXpEcdNbWT\n2rPW3VnziFb8AbZNosriA3GzhS/MrozxEZ3zfS4qO4koHHlfr5yFSeUXE4Dj\nsR0/0q7tz3vwQbE4MdUbVTD3MPk9SiDXdkL3H34iAHHxXTyHyXUE+RmvJQWF\nNo/X\r\n=PNoE\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c7800152c04630db8408dacd6c16564cacbfff6f","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.8_1584373556049_0.34656643321936675","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.9":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.9","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.9","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"cf550436cd5841a8822040a9d0b6eca938e0352b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.9.tgz","fileCount":41,"integrity":"sha512-rvz/zdukgZeez77zWaxSbGx4OfuXymLzEK9jJ/HkOL3uGDfILo4LtCldhotXYmMDYDRY5wHLo7PpSpXJPaa/9A==","signatures":[{"sig":"MEYCIQDz91AYFGFzQJO41SeatDdLKU4xHPZh63yC3E2uttP+PAIhAPUevEUMx0ZSkpCythNXYhSgj46xd4s3xv0GQzotHjI2","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":115104,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecOLlCRA9TVsSAnZWagAAerYQAIf01bOC8sFwueOLZiN6\nma8sQOd7O214GyrLsEgwXOMp/yu6p/N4Mj3s0Advd07vfSBxBAO3reygfVsg\n8oaZw/MR1WhVCvEBGqB9maHGA6sCmLfSsxB5blIW9Arc4+eUcXnKXxL7XLdn\nvwzycoFwvnE/IgEqEtb6KjDMFQTLZc+/2Xk8lBlZnfmfnFedw4DT/qeRMG6Z\nCL9df+KpFI6hPT36LpVeZdb0TcOoxFxyKjESjBg99F+IAlcQIVqJuI7jBK90\nMraBA8tOeSIWuf8rxSEqqu7A0aoAUjT9m1c9VgFXAibrrQIqHWm9VCqJ6dPD\nbk5AEgQXNBF0wMhdlkHjLGz4QHfr+yO4Xh7TKn2SCNkSHdeBYpXc/a38ZQgw\nQa+hmrmkQZDu1nwu8dH+iR7JtOc6kGFET+fl24bsrwP9f383jjusySECJjEj\nhGVyYQ1tr7J7aVRdf73PqX5XVqkeUACbsO2VVMEFUWn7ambPJfp7XqlOEk1M\nhlMEHFUyhLwM8ivv7goqZey3iNJ7uhye/Wxe6iRnPaLlqrVEwfUdZkHDaTUQ\nozWN9pJ5LNzNYCc5Ivn9WqLIfWv5xessnDj8Dze3T5tJ4l8sQRV2UIpelyf0\nd/oI+bAi+Q82zGPvbJvMUWenFEDRkeviu/FGBPGrx1VEtJg6das/hVJJuSdM\n8KBT\r\n=wvkv\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"0ef1c4a5b319cac343a2ca2828d0aeed06d0a62e","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.9_1584456421168_0.4234558552020704","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.10":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.10","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.10","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"8bd1f0cb5d3d300549fb3873498a7646be575a78","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.10.tgz","fileCount":41,"integrity":"sha512-nH7guHL6DZlTkxLuHMomJyt2/6AlVrhjCfCMnlMsj8iiCHN6zOYpvkZTQppLvpykgrknP5znGBSSPLA4wGIRvQ==","signatures":[{"sig":"MEUCIQDKmM7cYk7x+XQaZqACPRBjWAuio+b5idjyyFKNhLI53AIgAuY57cnfbFi/cxqRl+VZ5MziEkqDqx5h+KqlqnbPNGA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":115521,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecO7vCRA9TVsSAnZWagAAUrsP/iqQUSE7/vQfQthXawOj\nYjbJWXLW+f3+7+VRR1uqJrqaBii1LLE0GZAxFNxqolyXI6dIBKHbmj/bq2sl\nawiNF7Qi8PIiD3eZw7fiyY1KnyLvXyivL/XemRGpcl7yl8wh3RcsfSZyKCnw\n6IvfwmARJYWvT7G0mCZqcnpzbU9mptQVxiApPcfm2uYEg78A0Jig046gig39\nln3AUGjHwAXsErvfoDVVKaF24a3Aq3K6Jl28HD3oQrxAaDxDpkm1jWD+Z1g7\nJ3SX1gASOflsoegVn1rH43WU+TAmM0TzjOfhJsSGzCHUYa2l9U2I6rlY+NTA\nVrF+DWy/JMyt91f4qMDIoZWs0CdbLmRalDw9C4ypi92U2bi+vaDDS3OSfK+8\nphikKXJjNp8ANF/dhrYqsbqciq8t2SHCYR1WafjRY2LDXTksyl7A6nmDpptq\n+mUnDayYn7yT3a2OZtg5oibCJPCn1WvIjugkkK2lykyxeKRMmsOgAjuRqmvG\nvRFVscZ904egNjEcbFqcMLXzJ/2DvaS6OzXzJmvxzlMXGAYvdSxrbBB5F+9J\nxhGfswM1BjEkErUZTjKC6V9HuvPBZBeUCUML3brXhO3pvNwMSuMyRJJr4yWc\nbklGA1RxVyMo4iYv93s8r/Fp4ZQUdfi6IY0mNq3I9AQ2Vf0DoCdnXyZiebY9\nKc0I\r\n=NYtS\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"e89ff68c1789b69190b4249518034b4ab31d1368","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.10_1584459503080_0.8539595520329193","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.11":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.11","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.11","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"8a4c14e3eb296a637d12135a20b9f78ce50c9cda","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.11.tgz","fileCount":41,"integrity":"sha512-VsLsyVf6zKW9oBPIigcK7pSAMsVBDtWWj3IukYFyXE+j3SQsw1J0tuS9vFaaCHnK6ySKo8WPP+lKL+cze/iUoA==","signatures":[{"sig":"MEUCIBZyDfQlEvoYTyk+VY9SBFsZ231q9DdffpIrtu751a/4AiEApSq7kOVy5IMP3c3UAkIpxC93DvExqnE7pdnHkMepc94=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":116245,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJecU7qCRA9TVsSAnZWagAATE4P/3GvVTin08ZZ606M9jW8\nfpi7/24cbwwG2tDU3It9rCbdpmSor1ccdFLawo8g0WRr9I948o4Tubmu9PrI\nfXecaTjK2TMzPTlZxWcUXT237K2veW3VkRf05iVKeTpc3kulzmW077Spd6q7\ng/q9kAbvT1nDYWQ8HCv7cqDiHoVt5X8Ezop7RskWiI0NBNMJoSmZI7Mt5bCe\n/Tr2tXwsDdtbwYgOUd2o+on+tU1ldH4Ne9ETLUd+WScHgzmvv4cj+oGX+Z7N\n9WeHkQacAhFSNV2z5yDZ3hYvGjHNO4qydl4/YbOzR/6phZjGLBo1vIJSCKMl\ncqoHwe1siPEUDujgBp3JJBle5jk/Wq4cwlwLEKXBpzyIYlxZCoNtyYEqWcqi\nRM63C23XGyYp8CeSweNhaQeVOVU/iQovo0qt/xy0GhSmZNfA+gYrO5idxsi5\nFgAYRYhyfeaHCjtXHgTjCQjNyhgzxdDvIHZVEKnv+NPr0SPYv/cACzQTp6Nv\n1kXr8eaqsL9nfY1hnjX42Zu0Xzn7SnTkxnWDwtnN91pFLY6JCrCd4v4GgcFB\nCESsKR/Y1/mw7GL5JDYGirsR4pcxFApABgyqfA6ey0mUPFg3Atv7FWtM5jNR\nrUoUR3SoRLUYyVUZZJIQpffH4Ofy3uKVwwQtTKH3ix+28pInRiP73sswZGhs\ng06/\r\n=ZxxC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding some methods / properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes new methods and properties on Dexie classes:\n\n(*Will be expanded on*)\n\n```ts\n    interface Dexie {\n        /**\n         * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n         * @link https://dexie.org/docs/Observable/Dexie.Observable\n         */\n        changes$: Observable<IDatabaseChange[]>;\n    }\n\n    interface Table<T, Key> {\n        /**\n         * Get a full table as an RxJs observable and observe changes.\n         *\n         * Uses Table.toArray().\n         */\n        $: Observable<T[]>;\n        /**\n         * Get a single record as an RxJs observable and observe changes.\n         *\n         * Uses Table.get().\n         * @param key Primary key to find.\n         */\n        get$(key: Key): Observable<T | undefined>;\n    }\n\n    interface Collection<T, Key> {\n        /**\n         * Get a collection (Table.where()) as an RxJs observable and observe changes.\n         *\n         * Uses Collection.toArray().\n         */\n        $: Observable<T[]>;\n    }\n```\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"d7214cdaa0935ed71bbf5deb9f8a328c750c774f","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.11_1584484074009_0.5152128206553597","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.12":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.12","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.12","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"31d6178931b255f3265efec3d378403c3c529f14","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.12.tgz","fileCount":41,"integrity":"sha512-zre74A8kxSNhfb3b8gA1WHAulkNHQTDX90RB2K/Qo7wERiStagul8rUmzgiDS7HJyrqbc2lOfVn7F2lEdKsY6g==","signatures":[{"sig":"MEUCIBKIfRmE2uDC7cVeKauEO/U6W5pVPYIeX6jaW5v9Is42AiEA6kBH83i2ObOvlm6pW31xmyj9XVwWcCinrH44qC4kpmk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":123501,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJec4GiCRA9TVsSAnZWagAAELoQAJJUQXq5pCWukaFY31Yu\nTuZppYc3zWr8C9m3IaTGYv1USc9YHt8pLc1NWxmwCPrY1binV7RO6qDUYXLD\nKZ79hXpzU1j/cWX85cWhaZ6SEPBTUVRDERv5zDNlAZnWbZlO/H3ckigdOa/T\nXpugI/W7SPcy5wj9YL1Eha2wxIB0bZ5veX071AD1Vqzn3dTyVfLIJpcVO0kC\nZcEnDh6xO0HdVVevk3NpAI6KsoJQMxnS9QiOGs0I/p0YBuzQLy7n6cZqBXfG\nedjY8tasdLUCnU+pELpotCSAJet918n/tL7GCBQEmu8EREyjtBEf+0FBu0JF\neAwSuypjmtRDFhBWV1hCxImsHZo+n/tXEXMAFhAqKnoyqGAlMVncMWza8tNK\ndClwW9lKyK3LFowFbOYPa6mWxJHIJZaZ1serMTnJkHdlnWSsOzl1+MX6eHF3\nqFKO/XgAwy4Zk1+hv60F+XL98X9GtO5PxohU8k/JkF+nr2YHd/SM/Pnj8ws6\n6TC/KZVuc/3sMmbpuC4+Z5XkGtz3mq8vIL5SObizCi8cztReDBjIJBPTRMBA\nAxCHJ+8kcYfoNGgroUaAGepRarYaQgz9zyU4j+YD56/7JLS+a5GXxDx5PaLV\nzyDu6pb/Dw1R+VylSvy01GHwJUiZ1DTfphcWvvwjWdnw4yBTzCDNMIqkLAAD\nnmOB\r\n=oD1I\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"214e42b537fa77b421e8a36d782cc19c45c4048a","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.12_1584628129691_0.9512561275160256","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.13":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.13","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.13","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"77cec891b57c4de80a06ba8b6006f53e8902762a","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.13.tgz","fileCount":41,"integrity":"sha512-Eontx+yRKMOQI+d7MU6xa4MlkWY1KifAi4wHXUcQe8Y5ljwPRf7ITLeRFFQIORmZ6nxr8AnVNYT2dW9gQQfNIQ==","signatures":[{"sig":"MEYCIQCwqxorG/6P9wcn0TjkBqqrtwLINCENWDJPe9xxX2inLwIhAK4vRezQg782FUnEvaeiWzqkB7kUzasCjgiVb1n0LP9z","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":122473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJedOosCRA9TVsSAnZWagAAj3MP/RoCcaD6wJoleDw5OP3e\nRLiwAno4Pn9n0AD6J8XlhCU4+ZvzBqXbtKDmU43WWjl9xJuh4hUVxW/O+Kci\nXSyEwmo1jydecfGnWO5uf2St0lySUFAk25EBSMhpyflPO9576OuhGouEUuRu\n7j+zoHG53mcU58NbkAn6ftNivmhmlrZoNhU/rlSXlXSv+L+QJBfP+0qs7GRc\nSbU+MbOX9iTq7c1tF38Sazp0MyGqlycHBxDT1/TW3wHlGs2Z6T7anc22g2H9\nPKMFzFrxNVzVEluk7MDv51tfto2EzplW8CbVllfAF0YxZDm7apAu0mGZhyjt\n+m/bWiNs2sDIY/qgbyd2PdQmWNJZ0VmV1HuknfavQWS6EUMbzVdPiKCluWQn\nifXoAYwXCuMfBo5NDdNQAjy4yb1CNUTmht2W7usKD3IctVvg7uQMrdOkLK4z\npvZP/Rr2TA6hfj55z1hfRN+sNMmYQJaEQs3PwbARuLlJcJ6EzoJwzOW51610\nb3zOcxE8qBMnaPvXv+7X9krXkOWZfc+rdq5fi4iwtYmdagQA7LhB81f2uHtv\n8bae7g2YQMcl37qLKPNdGdN4xiDBcj/uWZuYX8rrOX5yKjnYK981pf12m10i\nH6uH4yvcy4TFMN9lhXK/YwnpUAtFJRgYmAq5vQBEtWtXN21r0IFO+VRCXR2M\ngSem\r\n=W6C3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"4b3fff7c6f125c3c73bff46c6a1423fe42029d5c","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.13_1584720428138_0.897489440281904","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.14":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.14","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.14","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"f0c1fa0e460430a106063368ddb0c7ffea4188ba","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.14.tgz","fileCount":41,"integrity":"sha512-3us5iE0+iPyt2/k6y8jmol+SC3EWdcP0DqqvfCpwSlqEAgw0j4kEJ3gbfekj/Gyi9IfofDYtXus3MhWwVVvK2A==","signatures":[{"sig":"MEYCIQCcudTmduW+PS6eNdJuDxjF6rBxFKglm6TB7wBwsZLJTwIhALXrILyozb33GPkTWURaN6pv51pVKcsElpUijNfDz78W","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":123919,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJed4jxCRA9TVsSAnZWagAA0WcP/jfS7ZOQoJo+zQljrmo2\nrZhyLj+P7bI004oZYzFFKcxdG1YRTfWTd9RZqkON0cYaNHux6IkiiI2PA90S\nmr518QNSJkbdpYLJqy5NY/6O41UBfhV+JSiQWRtwH4M5mO7ORECF8LTKP/dh\nFmuDKLgiAFxdR6dz5K17A7xX73MAtWykEM/1rKpL6Mx2AuhSJC6vZKTpqU5S\nN0g9RSmhyKI1cPeyVk8AmSfFPzFKb4IZV9dAC0lImepsdarJRZUDGdxwkkl/\nl4P+1gPk9xm2fmv8n7APY2COcDo86vsMHYYRwCEGkmubrYRpkFoR9PuQNL04\nmT2pDJbcCSVDCaGKKn4s0RZsl2D9FofHPtHBuqmthYjo1aMr8J5LZh+OLojA\nz4NVlc1376hEB6brWa7IMuMHQB7uqiNqurD+r4E/2MaxwVdQFjT4cUHZP9Xq\nH+NNAvNFQlvrlwxYzjBFXICalPXx8nlgpZWj4PuDh+80Yl0XYxPup+nZMz6c\nwOPVDzmnuCbvzB0ddh46GPTRAHf/wsndhOw8rqzLm/q8v72LWmr7Fb/BoD9Y\n+ouPrBcAkJeU04Khyy7PqRT0LMOnM/pafKpz4pnoSHVRzpPtcTVcgx5M+ut7\nRpuiNDj2OtiHm2725mYdwXaruQbY04iN3XgMobMwsOScUsxrwk3EmqCU5zo3\nzJad\r\n=S4XJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.org/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.org/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"4b2a2b67991bdc7bbb0389afeedbdb4aa19db1b0","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^4.0.0","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.14_1584892144719_0.9900856900582049","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.15":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.15","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.15","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"304d8a6b216f9f6c7abf83e9b3728108ef1cebdf","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.15.tgz","fileCount":58,"integrity":"sha512-QKERBAvA262Ne+xDFS2ofAd3s6fIWEjSverwglb1zfp8PYGMH+UNzyCBlLBMbO99qFubfnJjKZIrPnNG9Hp9zA==","signatures":[{"sig":"MEQCICe6lF3pAKK+eY2xICD7kgGbShYri+qKLE6uRi2C5OKFAiBVhm6ygAffMayFMMa+qmlBseW6qesQqcMy3gnsli0ZCg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":149604,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.4\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJeeKQgCRA9TVsSAnZWagAAeOIP/1mQykMT1YGaSiaWMsC6\nAQ2dh+JGFSCUOLhJnbLQ/NKsGnhPa9KCS5zBMwRmvIoQt5nTDJLh3pY+uo45\nTkapSj0A6Ghq/xSsz/+2tVTLRXr+ifI01b2sF9wLjTGzRQnl06FdvBhBZf5M\n6d91VNHQn8Kfnbyui0uhx0DNSho5Ce5zdzaQnH5Yyh2wFPJCZDUAYguobOUT\nWqIMNpxmJlwin4+8oq8EulFGsJgD4GIDNUsAxAf2nBymYt70I6is0KmZwfHV\n4qXl0OCgui6IqeawnZfIn4ykRMRAuzP/1Lqw/9cCV58fAVn9xLwLJd02/6Z6\nBuQT4ofzxPhQxRXRjKPNuIL8IyesDQri4Q3mOA+bPPFI+iWg7h9f0HN8cKZ0\ngwFDTMZiHWEUIE9EWZeXHbPyCUpw2ca6mNQ9PrIF3EBojaMcgDH2ZLD66Cz/\nNlsnI0DgWnZUCnrDlmBu3oD5fv7Ra8UDascAeMaFNsA31QowO9ZTz/s9UCzc\nLRXuSj6uR9OXCK2zcbwCHg8a2iRJx9kA5owBqf0iLdpDTPctxMvnnap724GA\ntlI7qTtuMYF/osYm/hpCLM8ecVXGbGfupfBQMz7VwgBnVhUcVsFDa7+ClOpd\nIAuwv8xrkUnpEtboGvadjGXc3DtVFAcrHcRLTVtDEoktCJed1/pkz36vuUGg\ntK6H\r\n=25aG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"pre-push":"if git-branch-is -i -q -r \"master|next|next-major|beta|alpha|^v\\d+\\.\\d+(\\.\\d+)?(-\\S*)?$\"; then npm run test; fi","commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"10a943506b6f264b150c6290d0faa07ab7826862","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run build && npm run lint && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/ && rimraf -rf reports/","patches":"path-exists node_modules && patch-package || cd ../../../ && patch-package --patch-dir node_modules/@pvermeer/dexie-rxjs-addon/patches","build:es6":"tsc -p tsconfig.es6.json","test:karma":"karma start test/karma.conf.js","postinstall":"npm run patches","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","test:jasmine":"cd test && jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","semantic-release":"semantic-release","test:karma:debug":"npm run build && karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","test:jasmine:debug":"cd test && nodemon --ext ts --exec jasmine --require=ts-node/register --config=jasmine.conf.json --reporter=jasmine-console-reporter"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.13.7","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"12.16.1","dependencies":{"tslib":"^1.11.1","lodash":"^4.17.15","patch-package":"^6.2.1","path-exists-cli":"^1.0.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5","faker":"^4.1.0","husky":"^4.2.3","is-ci":"^2.0.0","karma":"~4.4.1","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.5.0","nodemon":"^2.0.2","ts-node":"^8.6.2","webpack":"^4.42.0","lodash-es":"^4.17.15","ts-loader":"^6.2.1","typescript":"^3.8.3","@babel/core":"^7.8.7","webpack-cli":"^3.3.11","@types/faker":"^4.1.10","@types/is-ci":"^2.0.0","@types/karma":"^3.0.8","babel-loader":"^8.0.6","jasmine-core":"^3.5.0","@types/lodash":"^4.14.149","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","@babel/runtime":"^7.8.7","@types/jasmine":"^3.5.9","@commitlint/cli":"^8.3.5","@types/lodash-es":"^4.17.3","semantic-release":"^17.0.4","@babel/preset-env":"^7.8.7","dts-bundle-generator":"^4.0.0","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.2.3","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"github:PVermeer/karma-edgium-launcher#master","@commitlint/travis-cli":"^8.3.5","karma-firefox-launcher":"^1.3.0","license-webpack-plugin":"^2.1.4","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.6.1","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.2","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.0","@babel/plugin-transform-runtime":"^7.8.3","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0-rc.5"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.15_1584964639819_0.27996728634311974","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.16":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.16","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.16","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"91ab65dc9215e225c00d926386c3cecca04abea7","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.16.tgz","fileCount":59,"integrity":"sha512-+KVvxmcrj+LKdjTocgo/6Iw8aNk3LjkYGIhR/r5rWpTYimtQLX+sHyGng5n55USeh66FEm7pptSSe+Ui74ZMcw==","signatures":[{"sig":"MEYCIQD/P30R92E7bvopo89Z0U1wG5Y+nvcBwYsXV1SJbYi0jgIhAJP+xNRw2SRhaCrAGMDyAuWhqNrIaSl966U/15Pyzncb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":143853,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfsQ5hCRA9TVsSAnZWagAA5oMQAJgrV868ro5K9xagGXMI\nzVLOQCXaPpHK2pKbLgsIiQEdYAXLYcOxgndxQkERvvFmC5h3VcloX9CmbXeR\nqYD/cUq6RIcIChawtTK6qiZePgx/rVKnG+gTRZfKrwgx6RTZlzPpzHCt+y+I\nT38BNjfIDbRutUnm0xCdTrmVAOsheqtbmKV7mwJ4FSHBBAoqGXKpcQRDhkRN\nnZ4VzfPkDMjIBY/yl9q5hkIEhKxSCcK7qWkBRQ4inzfWmukK7ZKgck4ZSEZh\nc8w1pcTChUJychMa66cB/4bdKzVoMQB1vjXUig3XOg8LijNG/A9DAxBhi+o0\nna22JAsFOJ3Q99Ln0AefQJs//5C4gJHwkOAwzEArP6e1XFojnklff+vVXqHn\nPpmgBO086QmlRrrRMklkoEcv7n6VFymfC9mjghzQHgw0rm7aKMbBuqxAkJw+\nHjP8b4LqEt19E3z7hvMbCAgbXJMu0PKyO3+/O6HjLGS4XC+WiFqljSaFHyOw\naBQCd1kITuw5QTfrvCiq8loh5/U0V8/A5xYFU0lEj8Tecs2AssXTxndJYfOk\nHOnzuZiSo14UviURkmCyRVZLsZXIR0zMhk2F6rYws5jrqjfeXslAydmiRxcY\nn+x3miFmZEhw07QAa0bNN/SSpPSJn7/DFYtz+8BmeZ3o13LzIyDR2k4pwAz8\nlq31\r\n=Hckd\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c77b23d52e2d1f07fa10f1f48a09575e98fb79fb","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run clean:test && npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/*","prepare":"patch-package","build:es6":"tsc -p tsconfig.es6.json","clean:test":"rimraf -rf reports/*","docker:dev":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev up --build --abort-on-container-exit","test:karma":"karma start test/karma.conf.js","docker:test":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test; docker-compose -f deployments/docker/docker-compose.test.yml -p test down","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","docker:build":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build; docker-compose -f deployments/docker/docker-compose.test.yml -p build down","test:jasmine":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","docker:test:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test","build:es6:watch":"tsc -p tsconfig.es6.json --watch","docker:build:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build","docker:dev:down":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev down","docker:dev:karma":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma run -p 9339:9229 test-karma; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma down","semantic-release":"semantic-release","test:karma:debug":"karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","docker:dev:jasmine":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine run -p 9229:9229 test-jasmine; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine down","test:jasmine:debug":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node-dev --inspect=0.0.0.0:9229 --transpile-only --clear --respawn --rs --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles:watch":"webpack --config webpack.config.js --watch","build:esm-es5:watch":"tsc -p tsconfig.esm-es5.json --watch"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.14.8","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"14.15.0","dependencies":{"tslib":"^1.14.1","lodash":"^4.17.20","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0","faker":"^4.1.0","husky":"^4.3.0","is-ci":"^2.0.0","karma":"~4.4.1","is-wsl":"^2.2.0","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.6.1","nodemon":"^2.0.4","ts-node":"^8.10.2","webpack":"^4.44.2","cross-env":"^7.0.2","is-docker":"^2.1.1","lodash-es":"^4.17.15","ts-loader":"^6.2.2","is-windows":"^1.0.2","typescript":"^3.9.7","@babel/core":"^7.11.6","ts-node-dev":"^1.0.0-pre.63","webpack-cli":"^3.3.12","@types/faker":"^4.1.12","@types/is-ci":"^2.0.0","@types/karma":"^3.0.9","babel-loader":"^8.1.0","jasmine-core":"^3.6.0","@types/lodash":"^4.14.162","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","patch-package":"^6.2.2","@babel/runtime":"^7.11.2","@types/jasmine":"^3.5.14","tsconfig-paths":"^3.9.0","@commitlint/cli":"^8.3.4","@types/lodash-es":"^4.17.3","semantic-release":"^17.1.2","@babel/preset-env":"^7.11.5","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.4.0","@semantic-release/git":"^8.0.0","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"^4.0.0-0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^2.0.0","license-webpack-plugin":"^2.3.0","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.9.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.4","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.6","@babel/plugin-transform-runtime":"^7.11.5","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.16_1605439072826_0.7259129216453493","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.17":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.17","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.17","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"402225a81d543ebff54ea5c40d4eec296dc715d5","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.17.tgz","fileCount":59,"integrity":"sha512-dJQEyHRwtKhkYIDSt055ncTVsvRIKT4xsB6mRw2Iwnw69prq8HgWLTMGR1bYt6GmyK2FIrL6nT/T17DJXxWfJQ==","signatures":[{"sig":"MEUCIQDyJwVWnaRbFO8tM4JcnZ1YjC3LuPsQ/mIdxpkvj8b4sQIgaZboIF2HghdOzqoY+bTFXJ41jWfHaFjXgyEM9quKplw=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":142215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfumZ5CRA9TVsSAnZWagAAGhcP/01bWWzM2cMvj55djabw\nlAcA2OsBczGfZxoTwwLN/TWCSSLEiyYWpulLZaqdHGDG2NoEh90A0KXU+kjt\nBgHPWystCE6Re8a8322S2HWQCDTtOYeXKsut/aQjNrj5SKcJMfEQV3hMiCBJ\nkbUkbPYz4wkSf7lTQoHO6ZOwurqr8aKVAqgmeC+ez6X7wg0Iw0zimcNivlCv\nEMQXEt174yJWjYCHv79adsweRN0wW7gSnqJ6giKH9YxmVX5Uiy9ou6gCxxr/\nGlD6d3VrGwYe0x2UJoZwhcCfe9siMWistDh2b42VSQLV+6LWVwTpTUMgGMqS\nJutu0yB/zfVf++6wJdI162Vvxm0M8AN/10qxgrZWnHXt7Fg+mSf2ewOxcgRB\nBJx7k7Vz1ORflX3bo/6qJuMtmqLuJz3QxLrz/a93u2cwtga6rk6XMwp5Oozx\nrbvOKmXcC2vt2uUnLLfJneDLrbgEnlpqvoohfwAWm1TC7pM7lKxZQ8bTZmZ2\nzyo7q/60nOOkb21GAJLPepu0wySiWX/Bydxbpfou8ZltPRNFdVNS0hN/xSxl\n3gLVxAf6y/Xxb6gnUUG0J5q+cSKUg8juXJDz9cV9xQnLG9lY5iZttKNJm+k9\nD2XVhlnivUT7GDAhNrNNr1YlZ7M0lxc1BFpMYadE9RciyciKdKk3nSZPyj+o\nWuBS\r\n=+UES\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"eb08d6fa5600e04148d1b64ae76b6edb88b632c6","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run clean:test && npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/*","prepare":"patch-package","build:es6":"tsc -p tsconfig.es6.json","clean:test":"rimraf -rf reports/*","docker:dev":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev up --build --abort-on-container-exit","test:karma":"karma start test/karma.conf.js","docker:test":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test; docker-compose -f deployments/docker/docker-compose.test.yml -p test down","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","docker:build":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build; docker-compose -f deployments/docker/docker-compose.test.yml -p build down","test:jasmine":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","docker:test:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test","build:es6:watch":"tsc -p tsconfig.es6.json --watch","docker:build:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build","docker:dev:down":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev down","docker:dev:karma":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma run -p 9339:9229 test-karma; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma down","semantic-release":"semantic-release","test:karma:debug":"karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","docker:dev:jasmine":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine run -p 9229:9229 test-jasmine; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine down","test:jasmine:debug":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node-dev --inspect=0.0.0.0:9229 --transpile-only --clear --respawn --rs --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles:watch":"webpack --config webpack.config.js --watch","build:esm-es5:watch":"tsc -p tsconfig.esm-es5.json --watch"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.14.8","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"14.15.1","dependencies":{"tslib":"^1.14.1","lodash.isequal":"^4.5.0","dexie-observable":"^1.0.0-beta.6"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0","faker":"^4.1.0","husky":"^4.3.0","is-ci":"^2.0.0","karma":"~4.4.1","is-wsl":"^2.2.0","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.6.1","nodemon":"^2.0.4","ts-node":"^8.10.2","webpack":"^4.44.2","cross-env":"^7.0.2","is-docker":"^2.1.1","ts-loader":"^6.2.2","is-windows":"^1.0.2","typescript":"^3.9.7","@babel/core":"^7.11.6","ts-node-dev":"^1.0.0-pre.63","webpack-cli":"^3.3.12","@types/faker":"^4.1.12","@types/is-ci":"^2.0.0","@types/karma":"^3.0.9","babel-loader":"^8.1.0","jasmine-core":"^3.6.0","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","patch-package":"^6.2.2","@babel/runtime":"^7.11.2","@types/jasmine":"^3.5.14","tsconfig-paths":"^3.9.0","@commitlint/cli":"^8.3.4","semantic-release":"^17.1.2","@babel/preset-env":"^7.11.5","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.4.0","@semantic-release/git":"^8.0.0","@types/lodash.isequal":"^4.5.5","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"^4.0.0-0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^2.0.0","license-webpack-plugin":"^2.3.0","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.9.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.4","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.6","@babel/plugin-transform-runtime":"^7.11.5","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.17_1606051448849_0.9363308323469928","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.18":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.18","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.18","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-rxjs-addon#readme","bugs":{"url":"https://github.com/PVermeer/dexie-rxjs-addon/issues"},"dist":{"shasum":"153970be464bbcf37f7f6a6044ff261a6a604bab","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.18.tgz","fileCount":58,"integrity":"sha512-+Gy8ew2SnQYI6gxNAiTZ8HNv8qRmFW42EBJlwR3tcyZ1iXuMysQfVvkfkRt1lXlAgyM0qcva+B2TsSQDhzQ/Sw==","signatures":[{"sig":"MEQCIAbVundH+aDzjGUQdmxqB8Jbzy/qITIuSZ7kXZklzojDAiBkw8PM3tiK2ddInufQHljJLC5SRiiNYbpzxgxYWy8OMg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":135844,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJfunygCRA9TVsSAnZWagAAIUAP/2jda00MXdayMUT5pui8\nfprsqKssvaunl6v+aVLIq2DxSGcmNBqc9vb6kz6kmeGgiFlRZSjgCeiP7OWv\ntq5HfC4jyMBQye96wmRHezpbwRMTYDTBL+5RS/CdzyGpAowhjJLNwjRxfqbC\nluNb4rh8FI3qTrETlN9MQURgU7KtBy5J9Z/XlcRDZXHxEjumlkFVV2ORgb7s\n+vyo6ng4HG4gY6TgV07AY/O2ApbQDeNETsMGZdHBXqPHQDuljyQ5W1sMX0AH\n93a39C1zL7gg8ARPVrpSJTZNliqqq3DEHNulSQ7zcg3yaZroF4In0VJD40Vs\nxdjqwiMaSPBULnx0UI/JnLDWXqbiM83LftoN6hT5TOeZiK6jkPpC7H96VSQx\nG0pUWr5YVeI2gOBInI3Hvr9XPRbZIxIJ2uu/0KSx00FtYTkJwFF2bad/TGa7\nN+nrcVSOUbuPJfZsEYSX3nmaHQVup6/TPIstPxrQ06DrFagX1a8Z3nSQfobe\nBC/a2/KmPZ2BZzivrsPNHQXYFBOIsxiwHD3DjkK9u+pGC/oudS4b65j7EJS1\nuOdKZewlQHamJ7x5WoJw5tpJl6mq7tiAYQc3NtHIzYl6GkAkdGFGPt7lHfzg\ni1j9VzLKxZ+HHWdtYEVfO3KeRrllGNRnVAQOYbNcNmEonm/RXJ17GQXpT+3k\n2Jg1\r\n=vh1y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","husky":{"hooks":{"commit-msg":"commitlint -E HUSKY_GIT_PARAMS"}},"types":"./dist/index.d.ts","module":"dist/esm-es5/index.js","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![Build Status](https://travis-ci.com/PVermeer/dexie-rxjs-addon.svg?branch=master)](https://travis-ci.com/PVermeer/dexie-rxjs-addon)\n[![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. \n```\nnpm install dexie\n```\nAt the time of writing Dexie v3 is in the RC stage. To install this version you have to use the @next npm version. Current version of Dexie.js: [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie@next\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ES6)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is export as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"847311625f985b0c6826fc610f5b68a135ffb723","scripts":{"init":"semantic-release-cli setup","lint":"tslint --project tsconfig.json","test":"npm run clean:test && npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"npm run clean && npm run build:bundles && npm run build:es6 && npm run build:esm-es5 && npm run build:declaration && npm run build:dl-dts","clean":"rimraf -rf dist/*","prepare":"patch-package","build:es6":"tsc -p tsconfig.es6.json","clean:test":"rimraf -rf reports/*","docker:dev":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev up --build --abort-on-container-exit","test:karma":"karma start test/karma.conf.js","docker:test":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test; docker-compose -f deployments/docker/docker-compose.test.yml -p test down","build:dl-dts":"rimraf -rf dist/ts3.4 && downlevel-dts ./dist ./dist/ts3.4","docker:build":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build; docker-compose -f deployments/docker/docker-compose.test.yml -p build down","test:jasmine":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles":"webpack --config webpack.config.js","build:esm-es5":"tsc -p tsconfig.esm-es5.json","test:coverage":"rimraf -rf reports/coverage/ && karma start test/karma.conf.js --browsers ChromeHeadless --reporters dots,coverage-istanbul","docker:test:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.test.yml -p test build && docker-compose -f deployments/docker/docker-compose.test.yml -p test run test","build:es6:watch":"tsc -p tsconfig.es6.json --watch","docker:build:ci":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.yml -p build build && docker-compose -f deployments/docker/docker-compose.yml -p build run build","docker:dev:down":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev down","docker:dev:karma":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma run -p 9339:9229 test-karma; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-karma down","semantic-release":"semantic-release","test:karma:debug":"karma start test/karma.debug.conf.js","build:declaration":"dts-bundle-generator --config dts-bundler.config.js","docker:dev:jasmine":"COMPOSE_DOCKER_CLI_BUILD=1 docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine build && docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine run -p 9229:9229 test-jasmine; docker-compose -f deployments/docker/docker-compose.dev.yml -p dev-jasmine down","test:jasmine:debug":"cross-env TS_NODE_PROJECT='./test/tsconfig.test.json' ts-node-dev --inspect=0.0.0.0:9229 --transpile-only --clear --respawn --rs --require=tsconfig-paths/register node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","build:bundles:watch":"webpack --config webpack.config.js --watch","build:esm-es5:watch":"tsc -p tsconfig.esm-es5.json --watch"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-rxjs-addon.git","type":"git"},"_npmVersion":"6.14.8","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"14.15.1","dependencies":{"tslib":"^1.14.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.10"},"publishConfig":{"access":"public"},"typesVersions":{"<3.8":{"*":["./dist/ts3.4/index.d.ts"]}},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0","faker":"^4.1.0","husky":"^4.3.0","is-ci":"^2.0.0","karma":"~4.4.1","is-wsl":"^2.2.0","rimraf":"^3.0.2","tslint":"^5.20.1","jasmine":"^3.6.1","nodemon":"^2.0.4","ts-node":"^8.10.2","webpack":"^4.44.2","cross-env":"^7.0.2","is-docker":"^2.1.1","ts-loader":"^6.2.2","is-windows":"^1.0.2","typescript":"^3.9.7","@babel/core":"^7.11.6","ts-node-dev":"^1.0.0-pre.63","webpack-cli":"^3.3.12","@types/faker":"^4.1.12","@types/is-ci":"^2.0.0","@types/karma":"^3.0.9","babel-loader":"^8.1.0","jasmine-core":"^3.6.0","downlevel-dts":"^0.4.0","git-branch-is":"^3.1.0","karma-jasmine":"^2.0.1","karma-webpack":"^4.0.2","patch-package":"^6.2.2","@babel/runtime":"^7.11.2","@types/jasmine":"^3.5.14","tsconfig-paths":"^3.9.0","@commitlint/cli":"^8.3.4","semantic-release":"^17.1.2","@babel/preset-env":"^7.11.5","dts-bundle-generator":"^3.3.1","karma-mocha-reporter":"^2.2.5","semantic-release-cli":"^5.4.0","@semantic-release/git":"^8.0.0","@types/lodash.isequal":"^4.5.5","karma-chrome-launcher":"^3.1.0","karma-edgium-launcher":"^4.0.0-0","@commitlint/travis-cli":"^8.3.4","karma-firefox-launcher":"^2.0.0","license-webpack-plugin":"^2.3.0","webpack-node-externals":"^1.7.2","webpack-bundle-analyzer":"^3.9.0","jasmine-console-reporter":"^3.1.0","@semantic-release/changelog":"^3.0.6","karma-jasmine-html-reporter":"^1.5.4","istanbul-instrumenter-loader":"^3.0.1","fork-ts-checker-webpack-plugin":"^4.1.6","@babel/plugin-transform-runtime":"^7.11.5","@commitlint/config-conventional":"^8.3.4","karma-coverage-istanbul-reporter":"^2.1.1"},"peerDependencies":{"rxjs":"^6.5.4","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.18_1606057119485_0.1924539016682798","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.19":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.19","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.19","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"71becd3941b45236833fca8a74e8987769c9ba20","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.19.tgz","fileCount":21,"integrity":"sha512-5nNFkr1mO7BQz3ZRiSST67zf4t26FpNqh9iw7qXFdpltyoJXJk1/sYnyw6sgHi99DueokgNusky8imVgaRk0ww==","signatures":[{"sig":"MEQCIChkQhujBRIlGoKZLq7mhhj1vydn7d4mLRMDkuo1a+03AiAYWRVO49Iz7hxHqH+S6yWvUpWa9IM9jYnfii8bz0hbLA==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":434900,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhmotlCRA9TVsSAnZWagAATzQP/14ZnXmCkjLX6Ca0M1tL\n97s3QcYXN+4HLgJplPXXuA6QkeCstvBCHYc8kTjIyHiTMywV41T1Ihw1bYWN\nOiacXiIboq8yrNwSbE9tEE+HzKY6BXSUfL8g3R1/Pz6TjMLO1gOUeBUoWYuO\nAvkZJaTmUC1XCj1yIonZsrnx2ibZk3Cenj0jlP0fmqI7vqFktwwq69K8qtrG\n0sUmMxg1AxgZ2+YTNdnhCzpDscOQMWhWuLvp+vaRTDQDMGcUh8E6aUW8RCVQ\n52slS1sWd5mOK5MgULsBkycMg+jf2gladxZ+myWBc8HGrPcOn+8el0YukaN2\nuJT9cMuCXiW0EGbvb+DZCQkEWyDaw2Fwdy4fwnVe6JNfuqB0G1qIc/JHmLbV\n0XhZFjNFGRNKOw+wYkHXIF3EJLMjT9x5Dbw+Hx8I8slAAz3nE3cZD6gMgJJJ\nWnQk5lMUattL/FSQqN4QUjvDDfc1x64vix7AU4PV/apRrM8Mm6Lg5VRewsrY\n+mB9IFZHsZGkjuNgZaH/M+Q2LVSBqQRzVDpLEf0bWjbs6gK+YUFIHhewLmzC\nELoD0d+OSgIPnrV0xPwbuH6j5nIbHbu9gpgmzzhewbg2td0+AnzCBjTf8SmQ\n4gEvxcZZuh0FZw4nakQxmTs7z1TW0mlK48h1goycfXNsu823790iraz76L5N\nY3um\r\n=+Oq3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"3025a056e027ca1d53c30f8c5ba2d2df8337c17c","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.19_1637518181665_0.9218666050281041","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.20":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.20","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.20","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"0dfccd791b888ea7cd0e574d991c48f622dbbd88","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.20.tgz","fileCount":21,"integrity":"sha512-2/bnCu5zvee4/H6tny6gLTcjGLaeAGz0pPSuF9KEiQBB9Onu5BRH0uGlGx9z66lBMAI0gvKeL1gGvpLkwa9CSw==","signatures":[{"sig":"MEYCIQD8vIM/24KoW4215aUpkhjV/vMZkCLBUGeTXDXlZoQf7wIhAJTBfDYSyQT/ucpaHwLdAUl6r9vGNbzFLsRZXsNcX1p+","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435152,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzdphCRA9TVsSAnZWagAA2a8P/RkcATa8ke+IaPI6Rp9u\n8WoiFwQzFghWWVKdvh/dnsMoCYoVOWiNIclOvCo/3iHUaw95fLjJ1TEh4LEi\nBOLzEMW1Syye0jXPW2MKlaZvPnftXDMpIckS+BmiHJk4LAzE9eAWQokiV6uo\nkmNOtolPbsuxoFxlfvOvJRnRizx8TRK4EnW6RHttdBIGy6cNc27+xBKBVxn7\ngdeWsAIp8rcAlcH7A5TICiL7s6l7Q5MKWQQU8y0M3lCIlqQ2sCeWHrevvnPW\nS2wXQdTNc58AReD61CMPFxoKXiYcOOi2z3xzZj4rNyoN/QN8fjf8LEk7JzUp\nvF27Aea1SwCtoQx9wu+8FZxsSsXR89LYVS5SqVHVaq1NlLtVJBwyTjtjk9PB\n7NwUUj4iPnzV7sqfTLAI1Vy5KF/rqPQB1jXG4syEkiEvIqWk3iKJr185fdei\nOL5VhFNIf9r1W96ukDe6qASBrI6wwwUaITLB2WHM1kVknjZ8KW7LaflWU1vw\nKZ4Opk4BEjQhf32TgrxzW2de6knPFe3UFVAP8+uGdPmnt+iyQdnZipmMXp3f\napwF1xxU5LQYnmq97JyenXufu3L6avmTYreTsmL7qM/kx+rs7ycg2qtC0hrw\nTej5wv9BuoU6sEY7tePJvVAF6ZF4jm6qtLCXsZXQaeL8/aJCQxScJzfbK8Wy\nD2uT\r\n=1mpH\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"4e419ecbc44432c458b84fa49e31bb1cefb1dee3","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.20_1640880737602_0.95424029870317","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.21":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.21","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.21","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"fc2d36a433de6586b4ebc6809221486788361bc3","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.21.tgz","fileCount":21,"integrity":"sha512-/T9G/0A96fiVD8RU6igUIWE9puWaPkhJiK7rIubKK28VDSm9qvMP3doMxMTi22f8KFW60eZtPQ3zNMTWq9enZQ==","signatures":[{"sig":"MEUCIG+u4Q/6L7H+KRcX0iIOh/DlT7TNIFCHuot4BHaRigHGAiEA+ke8NuRQiQPIaaAJrTAbK2m+zQLpdY65569l0j8XaHI=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":435404,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJhzeqPCRA9TVsSAnZWagAAu40P/2W08eY4h2meBKWzLI4x\nYp63WZV52XY23BQvKmbJbIkhJJNtbhNOK7lGF59LluQ3YQXRJUeMhiVTL+q5\n/WflH7LWDVYeSQ4J/HUwul9xZDD0mx/X1G7wIw0KQA283snW6gG2e0Woc8dP\nLnB0m18Ma9uvOemQsPFFft5FFn1RgPiSlBQZoD4tDmSFSP6piGMlOXPAsROO\n0HaN49kCd4zxSxcZyMIucUgQAoWnt2XytjzI1wlKVU63w1PhU8bzWVrogC66\nqF9yiYwYtHAW3XaqrE2LRiOAZoixkiGBY0LQ0Y5ihMn/V0MGM22brOMdNFWQ\nTJQw+cO25aZrz1rDUxdbtF4M8B/iC47ZRs/T8fiY09Ooki/TF04m3gGHx5I2\nS8FQrsjL3Uqlg1WU8VR/aDKZLpOskYf9st0RO2lMef2IfjAziLBOAAUbn7zz\nb8mR/tJzk9apLGpmiWQhrdStf0nzNF/JSO5gbTqlHLQHr34kxwuj6b95eny4\nhzWBBL3XkrnbCFRDQduDiK6miL8o7OmG/D030/eYclCv8rVz4JbTLJ7mF2aD\nS7OGbHE7C2tJjvTtGhCb9eo0kXQd+NpUVV152d/X5TTB4FBQVlIOV6kShCGp\n5f/sdKwfLBezXmkmJ14o30zi6QgsK1W9q8/piU7PDagghGj9LrwuzXxlQFId\nzjGl\r\n=X/Zx\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"9ad05a2206c91dd0177a08ab3f4323ae515044b9","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.21_1640884879156_0.7757057300575481","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.22":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.22","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.22","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"d6d5c7dda575bafdb20e6a0e9309327f085b39b4","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.22.tgz","fileCount":21,"integrity":"sha512-EQFvjRiCsg9MaXV/Ptt/BRgtIC4wqQ7kOq9Qgp2PDF7xSMYOXzPmp7g9hiWhEczELjh/++pJsQsa+kYZ0VlAMw==","signatures":[{"sig":"MEUCIHR0NQm4lU+SSL2UXjlXafrTnVXS1QTH+NilLglg+wrrAiEAoVUczkaLrrGOkuLu9QmFWG/NfIfnJf5N61RqefN3wOA=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436577,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1DgYCRA9TVsSAnZWagAAycoP/iWSnGergzS/6v9EKy1j\nIxCGwtfLVezGjoGotDbCNuNEo+1+R5B1e7pBxvpH/2UrDX0KGNMzgNc2658W\n3qRSs3fv7dBgO7nTqo0IOmXITiNpkLmzhUocon3LHuYHjjXM3eQJl69QW1t/\nBOZ8asgIPXR4Y6C4qnCsWYmOsKyhbjNKiGZg+K4p+ilOxsbOumSDn29DUoPh\ne4jTTW83eaY7EfNE+c4/QijpiU23p+RpsuONyj8VbsDUMlwbXgqcjXeJyl98\niIXZ5XSc2+ibiljZgRCqKWy49DvWKu/RK6wtOpc0FN+l/L+eUpWQAZZ5meS9\ne5ZaG+XnKAKsx4Y29hHPyZcOnJ4nzIxd0ghxs+6fZFJ6cAvNKAJLdy9+Cf5Y\ni+oakX8v6rn/uKHt6oIyBwECNBbDB7QALg1V4EkOXM7R4SdXpkVPbBfQZ+jt\n/CmgxuTPlh1qf3N1XHW8qHIR8wCCG+ohSpSAanzj1wxAo1S7rS3vUeH0+fIz\ng89tSikyxwEHAM2DdhsH4A6RY3BIbD93XMhorhBSyneIKlUNXHfznPMwgdwV\nzqoD9CHkYcr3HPaPrFzmv5vKUqyWlrvZqfnOZ3C+KstmNU1OoHQ0oo51rBGd\nHXMwH98/cUbb5NHbyJrx0INKd5xiiP9iVK/crDXFG+lEmKdSAK2TnUaQI1Od\nB78f\r\n=jBrR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"ce753649a437913f1427556a0df532119ec51ad7","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.22_1641297944236_0.1966003254860309","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.23":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.23","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.23","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"0cbf3b30764126a05938a740e8b5da2c48e3879b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.23.tgz","fileCount":21,"integrity":"sha512-FlQbqkP3J1kD5jUedAiAZSA8sUpVFTDOr7fU0eA5kKDAY9iSLED0zeRO2ZnHdCdcmISBtGoeO9NsbfRXVyvB4Q==","signatures":[{"sig":"MEQCIHFuHBOBO03fpEpxFnQlnapCMnuWm2fj/v+8ARqYY+lJAiA1fD4Y75O3v7nwPK3J5VxzyHIOz0CHlJH1rocje2yX2A==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":436829,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh1GD+CRA9TVsSAnZWagAAiuwP/2JAmraI86qP2qJOBRBZ\nOJEQP5howh/fnEShWI68x1e15nazCk98OQZDfcgNoeIJhbNWstQNc6odgC/k\nDkoxYM3AX+QHTigXlAbkV6JJbtMoj4yZ0VdLOA+sMxnoREXOVtZ/k9Nt7w2Z\nxnaJMEZ/zJeqsvJxbnDiTkmd+DplvVN3c5pzhyoofHrXwpQxQe4vvsrNu3y2\nqNSmWkfGbPdEZ5+Sv1NISbW8aj2E6ywsXeJCQEFtJJ9p/pyWM9QbMFosmv4s\nx0S/rUue5BgBsJRvFgx0fce7Z+CymeUlUtIDCe42uLrckgKUwqpCkt8pnnX+\nUusVL27nFCRzl5KLaDivVFFd3fuVjcXC3G8zr5YaPqtRMcUAV7iQIkTld1kg\n7rw8joAT61HRB82sxSm6qp+8FYPRp6Ub3IVW4V6UP8Ek4uHZfYZO13zXEUsq\ni3UvkqRU2vlejn4Cr54pglLKGL6q9Y4hxde5i1orYm+T0zNwR57J2SaD0B3x\nMQRxon6h/99acf02+aiAnNMsPq1EfcTmYflEYGKIaKqjNUzPZsyaDrX+LCIc\ngR37E8UQtrUbyCnWEnWDhQBMU1r+GNgKbWL7rqzVy0TV+SRnHHQHQYTGT1Hk\n92k4yg0jt+VjhqKXUNyesJsdm/wWirYtdOSIKn5o+1xATZWwhq7OsAoQYnLS\nym/z\r\n=jU3e\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"ce3d4279426028b8c0a3e0b755860b92d2ddd9f5","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.23_1641308414553_0.26608295468483445","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.24":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.24","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.24","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"70011bb89e23d3e7cd8ba455103d71f996afd0b5","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.24.tgz","fileCount":21,"integrity":"sha512-fogsWdOLWrvyDfzAe9gmIyVTtg7bP74SDBjxz37w85W1nJMZ0IOBEGY0QFUheHNeXdu7ZBeb/fVt3X2dZdv6IQ==","signatures":[{"sig":"MEYCIQC9D8O4HlfMVHSPUUMOPA6+Kuaw6yxdhRHpTrc6im+0ZQIhAL5VxtgyGe0bCImPzuiudegS8uWSlrDyzH6DxcjAypFq","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":440548,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh100eCRA9TVsSAnZWagAANLsQAJTbXNC8XZZW/6zrTy+r\nVepg9E6tY1B2Jw4HvX089Z0JWfQ/3VIjESm8msYZSW/WRHZZmaBGuIVM+uoz\nEYI4LYLJj/ZnJVNU5hmg1E/2AKUa7Whq/a+Tc0up3pPouifhFDhGEKt5WzZD\n0bbgRY9OSJjvx+pj70L5PpkNDoqj7xKFz/PcSLkvc9yEftVsk88kTCp1hNP0\nMNtPNOc7zACvqbAyHaYJH//xwKaKwgtOOm9XAHvsrR9S5/3hnNsRiZOFNE10\nRsN7XzJuy/wM4LiEgzwV9iJW3/Id9ykLcjBcwurVIo/eQVG1vYvYrZ4spRhu\nJgbgWv9AuFHXe1PLFiF/q1gtbecnBYXJ6qRdT/VaVW5vmtjf3/MpDqzIQNeb\nMAUw/WfTTgBXTNkFuPC1InghadnHIBH4/4yUvs86sIn6g3yDyAP6M0bip3G3\nDZ5jdZmzDI7oxNrBhuBen6Zjjhaa2tGCSh1Wwcl/3p6/b56MIE5K6m0RBXl3\ndxXhWhbBI21oCFGPDPEGDDGhnq0Z6ikujzzeQoKasjt8mBYVZoR0o89v/Bo0\nD8tjeZpvNJ8tmwR2PrGkMoNcmQAxTbVhZDoExqArUxkuAOm2RxFMG3wcQWLP\nVsfwGzrAc5lrv9I8uIsR33JjAra3uSG1vs1KsAGpJmsKLU07j27Z4EXSqOnm\nnJ6H\r\n=3bQY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c8d96e5ad470cafc81abf0569066a1973eb5b3d4","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.24_1641499934199_0.8797944299793621","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.25":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.25","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.25","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"4bd60a65a47456ca23291190e37b9f46a44a155e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.25.tgz","fileCount":21,"integrity":"sha512-o03JZr6Fd6OCJkSyzsRqxGRb0PsUsyP/ZSCSWc1xSxlkr6F6Un2kAO+sPekQNgXau6eyazafNYrom5n0rXZVQg==","signatures":[{"sig":"MEUCIGLJ/xpit23pvRVVATNjT8w8GsAhZzRbWvQRkZHhC5ZkAiEAlRii0mT/oDaSYrMp7GRlPxoD76RMwC0H/dWpOtdreys=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":635426,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2H8BCRA9TVsSAnZWagAARzcP/jBQWAokgga9TEQHezcK\nfcTg3qXZymAGJ/RXKXOwDI0+C4GD/eLKA6r4bCvfugXCg945dw4gQPfPqjoG\nQEMwzlYreS6kYpqgAkDxcVW/X2QyJgEgl+c9Omhcqt0qxA0ba2o5qhkXLuWU\nRmDXttcvdQfU2iITMJhJFflH6u2OuWae/vptsdXVXRE4uMZKSf8NT4G+VwZ7\nAJXciz09JNZtUQS1vxXlz2VJGQyzo8GNTKY4YjrteDPvCZGWdnK8SapU9uzR\nZRTiOWo2Mmf9xxIqewUUAphX8Raivnd3ASAwk3UCr6vcaLutIumT1db+Iyci\nhnpBMVeW9Nfsa+BSZpYc9cknOPLI7ZBEABlsNqK8ZGND+lldPbsYgFQF6d6g\nDbFLL0+5m/x9R66QDTPdFiP4O1TL7+Ui2IvL3DvhkcSTYLwJBZT97+LmG8v0\nkWP9WXuqltT4Qu6hYWFI/se1CfQmOKAlZFPacmQypXuF6bt+tSZaRdaUh401\n2TnyczyElLCPGs0GI2kf4/yz3xiy2Bw9R3eSDyzRSEwd3eNX623otoV41eIk\nAIDanhBuq8w0va1CDxRa0nS/D+m1Ci8ZoaeJNq40o+Mzw37euqJj0Ly/YVWP\nWr2M2AZ9g/gfxZgAjayKjYcGJnnTXl6bc3DfpUXgntv1VQU3SrULFg5fgdvq\nhjxH\r\n=doQR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"35c2007587193f83e17538d1ef30a4ef8f693212","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.25_1641578241103_0.28756673544174904","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.26":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.26","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.26","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"af88391d470762d92baf96c30b2214774a0c1dec","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.26.tgz","fileCount":21,"integrity":"sha512-rmUQfHPT4jKrxIXIVsYwed53YFBp3XHjVYY6NwpU5E2nRjbyn4hRDNtWFsjxgixmZcAIDsO8BdiTKGA5ryvqXg==","signatures":[{"sig":"MEYCIQC+jpL5sC8l4OipTRWfcln62+f0L5ZLhCL3v6mUwCDZeQIhAPwj+wOX36jPZoL7btCeUocZhc0N9qXYgdlZYgeELfYb","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":632680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh2aCWCRA9TVsSAnZWagAAlG4P/1xt9IyiVGvgWBH1HWTr\ngbqyE5JaPdw4X90ws7jXYQqep/rFfhEG712Q/S+EDGWu2+WZjwFZ3PxsgCHs\nSerkfXxrZAPKGi2eSIUMcR+QHo+E+Lkt9hsRMYYmyDlMj8Sf36f7RPdyPaEc\nezHMGyGqn6RhYDxj0K3qRjhelvx/ZuX+OtPg9A+Pe+QXak2LfGn4nFKSW/jO\nL8Q2UfAt+c69J2Q5g+3Yv3VsJxqrT3fACaG4dbuPfgxlFUyb2Bgtregi+snr\nV/535mZ9VoT/KDfOEPuHvCIWOTNWKu3gEriy7P8sHBRSHzKHntJuqVghgy/J\nsKorDXBxN/pSHVD6w71wMX//9aCSnJdkyzImba+CTTR7GTZQeSfnZMgUkaD3\n1BG+20/U3V6cRm0vlJvUvi6Cp9Ynn/FHM1G22AmFWzabg8lA4gSond0aNww1\nXyUjz6BgPsqcytFFSICpYNcxs64liJRgyJP2EjrpO1DPRHgkdfD0wcQuDKj8\n66i4pdLuRpxIWVNCQhFnj69l1NeZ8ESADNNovSZPwJ1+Gx4GNeJrqcG7I8tV\nkIXW070HhSuL3FESrVn98eWIZSEwwFlQRYeOlx7n83AlJb7abeVsgLDC17N+\nPhy4Pt5zSvlupWJUDwr5ZcMQpivWvP782UKZJ9TA2BqqgH45aB25MaMMhha5\nJhFF\r\n=fYkN\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"3e9611d83ffc6d1b5653a010695d3193d203e302","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.26_1641652374199_0.49776013035437594","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.27":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.27","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.27","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"ccd228748a9e0d9ee774e4bbcd60c38fab3bd992","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.27.tgz","fileCount":21,"integrity":"sha512-qL727GTeGsifuFUo7uaBV6SmiAyXQuLtd8SLruDyljkqQKTCAOURfuQq14zXfAf6tsoWT3qB8jo+5vf72WTGcg==","signatures":[{"sig":"MEUCIF7VgOquqz5pHNpVw/4eT4zRj013T+vIHrzb8vB+/pu7AiEA5h4gD7a9dc49/O8qRf3ILhcrL98T1t3xRCCg/IUxN/M=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":641778,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh208bCRA9TVsSAnZWagAALtEP/3l6kV8zIga53Z6IXMQw\n5xenBIMnCEK7ilAfnGk5I+f4QCjSQ7tXz4X28eljzud1/sRw+mb/Eo4xcYXp\ny13k4nvMHdXGNc541c44E5DK40gSbfgK5cf0ud8j7dC0qSeYUFMiWqRJFurZ\nON2Z20GqOjQ/Rmx97GZ2pwQiqlf3HrM/i1l29xw2PQOBSwMYur6Zv7sFhy4X\nsBFKEGSihamnhVOo3FM6srJieLcoUqdWa8wjR7+8Ul9Ul84BtOKDWc08HxQu\nDxT/YY+OKG/LqZC31EcRmgfUXPFEGuK9YwH/Jm0oMJIhEhRfrOTS941h3ABO\n0kbWv3F2RsculOgSsP2ujJUqn/ieMzdP5tBPBM2wcq1FTtw+WKD3ctW015ND\ng4W6C5PGSO3udxEbOMKELO8ZO5Xs0FphnDKSEtwFPx+KQfqTXfuraP1YJbuj\n9KQWFNhmzfOg5SoeOhwpyr9tAkcGlT80hdfk7RiiD1OSXZJheolNKAFNzDAR\ny0A73iXgeKUkBbKRRP85SVHKGIcFlKOPp0MoXzcKuZ/fYyVP6UHrjispWapk\np0AHe8mijwbsWjXWkUZtxmgIzRzClqEYQdP7FeeYpDgmUFlD5rKfyy8erIvj\nOKb2IEbgiez8sL8T/eMt+3PWk/ZUpjnmZRsbnep19SmdzNZHRxCOkfOJt58s\n6pGO\r\n=S7Ko\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"21a02961c124a5c2723bdbec90f606a6d538e32c","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.27_1641762587171_0.10901590244965176","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.28":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.28","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.28","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"ec15a0d6475b2ecf86ae52ba821fbd50ae2caf41","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.28.tgz","fileCount":21,"integrity":"sha512-HvCHza7ixlRbTqTpYa6SUzsqTwDicL4cThJT1JF1unEPEPkNk4Jn3W189wd8rchTx3MkrT9bTCimKYq6JQQENg==","signatures":[{"sig":"MEUCIA7eteOZQMbwunDoNSacTxkHFe/BIsZ7sn8kZ5lNZOa6AiEAyBFDjs3J1k8xV8obw/tBmpzV9F3pHbAaNfFqFJ/otrc=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":643156,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh22HLCRA9TVsSAnZWagAAuXcP/jrPSu8BBOWkBOXoQq7r\njLIqntLerwLUWb9xf5WS/7J31/4GNg4vWHEQLasLWQSblM0hnBKGs2nNVKZr\nGvrB9WmW6EQJlwtxep3BMvy68R2DGdTx/UgINaNwCxfZeYMHd/yus/acdA5/\n5z/YXNykDkB9PSzvufthQRY42P6Y3+lF08xiyaiQWRW66tt7m3ZVk2X5Vjjg\n4gbsDNANBf8qfYLnE7KKTxdpW9GWiiQq4RCAo1W3uMJratfG0tk5vWcegscL\n2/CizEmiXh4yVWteJNHxZJ0J/2sVDk0T22aCJqMTGfMEX9zFZbEcQBc3YoNG\nkROaE3bPfsgbQuiA7xdguuwCIYucXWGStTangtomxCU8W+rRPc+gBc7m20TH\ny2ZTgP9RwOvDMXMvktZ0Bfs8vWqUmIM2riQsfCMoXdjQsXrmoHlgQ7zUimDA\niqLXRfUv3QznI+T6UvcXDmv+dP9lMps88vlNz3lJ92bMs2/SEN41PkjliI5N\n2WNJqaXEtGlQ7buOC9M85TJJRSNBvVruoIU0k/VaoxYo+zfDGiJ0LyzTxM1L\nEbc8kSPsVZg0F2ZntRurIC0om1L5ZyuhrQhcQp6002SjgYP/qV2uL/5ieH1/\nyNq9qA9YzCRblc566bglajp66r3BXkyZa75KdplhoFUm1uatBSdaqEYwGSz5\nIVsK\r\n=5WT7\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * ObservableCollection has one method: `toArray()`, since RxJs operators can be used.\n     * Will be exanded on for convenience in the future.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6c73be0b82fcbd3bc7a834e62e7a420c7bc17cb9","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.1","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.28_1641767371704_0.6591923244513962","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.29":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.29","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.29","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"2f7a98c46bfe53679f6eecae540170be59e6f59f","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.29.tgz","fileCount":21,"integrity":"sha512-ZCBHTICUpdaETjZtwWjig1eLXrcCJhw6PuIt7cHOr+sxyTejuJsrDQ0Yj468nFstIpoKh23Y8JKhtcusOTINqA==","signatures":[{"sig":"MEQCICscI8vfrNZEUxMMTd0dGtOu0/pBT+1snW2XEsI7W90fAiBeEDROLg7mo8q3K7hi44Cn92dWsy3XUrE12xOTFBJKzw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":646787,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh6uolCRA9TVsSAnZWagAA6vkP/jBr1RG6GcbJGeTVeO8L\nIGUbppQt6re0xzrTQ3D+EzGW5wvpfa8cMuWbofpVaa7Q6JOmWwX7pyj1qsxD\n+UG0FWwmP4qfWL8oNfZnmSzdIB54tEc4WG2CgEV4126XL/2cDDk9hBKwMvC6\n5KKJCLgUsuO4tTkYY0eW0c/0yZRu9yqwlK87aAwcATw+je0Vidl8cNrs+Cm5\nWxYAQ4vLcccZ4EbSzZe1NNS8gRRk4N/1eKvdr/jHhcUWEqhnrW143lJNmusO\nZy8HjWGSF2FypWVOgaBCO8WfGRibxlqQNIPubP/JzhaecXqAu5Cc3LF/rrLh\n0EusyxHkKkYksvTC8U5Q2g9oTR0BU7tem3M6f1AL9/FQa6ZLgvdxCORLT8bZ\nADN72pAW7KQt+4s4uZynwk/MtWWzOgAr+LXlZYfe7EE8uOPBGIU4QlDRBbec\nNqKreUGOgPvX7tos5aknxH00lawlk5XIdk5S/izc3ncvYO4GeFtdag4hqNqK\n9YSEIEjJoAwdgUY6sk2M3LBjztHOIRFQufnBwrI5MD1BGdPNyPn2oXVoxUK/\nQc9NZXsRx42Hx9s9jfRF280CqbHyIw4w1QETN309atT8ihcawVeD8sQ1/7ql\nH3SiY+cvH+0+7ji2cDrIPF5Rlflmnlp3JKEnPETVnDxukjPxRB2Uu5ZkfuKh\nlgfU\r\n=oCtk\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"2bca9b30c31a703238ac9fd883f844e0bcddfca0","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.29_1642785316905_0.5661331272577075","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.30":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.30","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.30","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"279abffc2f8d27a81d412baea449a6e62f6247cf","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.30.tgz","fileCount":21,"integrity":"sha512-i7VnqieWTHKjZw+YUyT1jwCjXlFu7Zz/a4RoKo1WzwFlm7dcYIkCM86B1+aebT7XO07MT3oBHlE6dCNKkXCEoQ==","signatures":[{"sig":"MEQCIDKGzabjOq95ByvCk4fWzSfe1BReyxpC1L3ud4OPN/EcAiAczAV/bVF2ij/6znF13dut7gP/xHcLDlhclNXewFJDuQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":650584,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9VwCCRA9TVsSAnZWagAAhYEQAJbfEhJaiB1G9eVyN+bE\nmaI82WtpBrrzvUNutmkEitp5OWbMl68D3fpth5153q6pWYgjj2Z47peKGtrv\nlXhv+U4cG4YduVLN0wy+5ZiM87DZVxhECTQPm7oKvC+e6Q02KtfsKUAjVRUz\nlOse4h/wL6kb5WgnCfLS0IZXOzfWrQTXe8WFMfrL2iWRaOmENEQABfm/Yfty\nvnLwVMkGNF8q67R/Cb4ywkn7xjMKjOpytZGM3GNi/CCABi9LHjQdwpWKfrdp\n+476A47n1n8GMaeHS4W62Z/w+iSVy+vWKIC7w2Pz/O0kwN9clLgzrql1lYLs\nxxqEZXrwkMMzwDNnsET1M37NMSkswvPvCGFkNzbEVhbcH1Auq6BKBYz9bR3+\nAEQxzuU4kI8ES2TrNy9Gl0k0Hi6rXw5eyvSjr7jdcRuaz46IzEDeYS2LdwSW\nWNHqwIdRMxINxhVjpH4Sbe4bQYUDFZIrHCtKOWR8eYGG8tTqSLJh9x394SJq\nseUUL5W6OftQhcwibqOF/mCJT0VTZln+UzYIPImu+P8DBFPaVXJqQSGFxDBl\n8M2q1THmYpuCxhTrqI/tvB5j7LMVeCIaSIM2zhiQQDT6cpYvrIXMj38JZYI+\nb4j15W8+GsylNQxKGZEPrctqeJDH4rHWNRltuAfNJfWy/DFBafP2hcoZ+CX7\nCOMg\r\n=Yl5Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"8b66191c8ec95af9955325fdc4029e4818735f1e","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.30_1643469826472_0.6969624347533683","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.31":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.31","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.31","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"c51dcd9650e1b541ea27cf483454ea438d5e00cc","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.31.tgz","fileCount":21,"integrity":"sha512-xWVz455uCDPJLRIi64W4KZhh1slWUjm0LY8QBXMkygFoN36IOPQSe4dUUA/JPWHTMNOo5WyV+ExeS4Rc/86u6g==","signatures":[{"sig":"MEYCIQDO7ApLP2500JpSneJE0plvzQB4tIexM7QRasGn2AsePAIhAMhXACi3LD9Rm7CzAXvV0WtR0/CGCq+B57zXxgfKQRrc","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":647728,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh9smxCRA9TVsSAnZWagAATKkP/0fvSmi/PtTnK+Cgev5X\nNOUIwtcH4J5k6xeCF7YNImitNuTCEDV/PvXSPfCT1E335zwCiwh2q1rKjdp/\ndBbALDsk2spDuX36IY0Ae3a6azsqMpexnrSDkMYOMIrenjWrsHIKOLfrEJXL\n/r/Uv/ahbLWeqhFQN+pe+T9ZCEJvOxtE7Xtl0aYTQ12EDRZKOowPtwmcOn9P\nM0lxoZXZTbALyDznIrcAkZpi+8Fk8Ecurr35jf5ddQEmYtOwpwQo8mNNkdUU\nKyG7Xcrm4A3ROLD4RIT1rUl4i5engkNob/Hae3b+8Jv9h7DmmHGSt8qnTilg\nUIVv0TIN9aTzg9Ckfhi2msxuZlhVPAMZHMv+ZYhS6ORWFhZtfJe6WIlo7Cvx\nB3uTGdh3cwge/PryEqSDHNi2yRW7ZSKRsJ0Ea+QJ5On53M9710U/LY/bqQ/B\nWl82SRg34W2RJTw/Uur0fzHrK9ONx6vm2OQUpkZ2tptf4p1gExVoIpf9RYN6\n3oULwg2aMutKBYA+J79BujTH2860FF5PTRDOa6tVdwHbXfVNV4Skg9kZaxET\nLf7jAjwHq2rCDsjdS+KbTCwSmQcaOgMTpU0A1UQlCJykA0FPQ/1jGsN72fU8\nHGuVEpGfQ73NuZr7gQo0STEyRt8KEKEsHe9FOpszPXWUmvQoMs0l8BVTWhd/\nox4K\r\n=td7u\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"42a83cd8200af4c3869e739617dad82c23a2623e","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run build && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.31_1643563441105_0.8017763849407433","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.32":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.32","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.32","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"84821743d36430fd3adbf2a6ac55eacc59b5bc50","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.32.tgz","fileCount":11,"integrity":"sha512-hud3ObD6yHk3ynJq7a7XtKePlFfupKleB0lNKr/0pyEI1km0dGIV27BINsNc0BmbmClrAMIEUvTy+pNk/AGl6A==","signatures":[{"sig":"MEQCID3NaZagTI1Z/mFHwucC5veRawfmMn8kLEu/whK8HJ2hAiBcEZD6nx5Hrj6WmtJdxg4WF4diOVn8jtb8wTg3rfhU6w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":43680,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+BJ7CRA9TVsSAnZWagAAck0P/ikuTMMZWRIED14AEhWJ\nlpx8tV6cyLEuzzCGxd3Gd206okEGHMvN2u9ArGLduKSRbkUh92UaeXoDi2YQ\n/feGYJON3juO0m0cKFCwzqKcWPDSE9lRwk2D3TuH4BcGkzrhlBy2QksbfBP9\nJRIhe13NvGmf5DNezW+xWG8LagdQOL2GfGinLW6sdQIwYqq6L69rPJdjEoH7\nXGPuSTuAKrMpaMWA66wjIv+NP2zO8g07f+LnuV2P2Rtb8jQrw62UC7Zr7Sce\nsZmwXxPjSyIt5yikOD0bVsnfla6g3ma66mrKXogR3SLyazebPvkVRpDn4wKV\nC0LmcjmY9dJiwu0T1+ULE24fERRJJgPqO0uGEO1nuqFg6alz29jSvImOA44G\nxKcv/xRZD1WH45Wy0KplkDZd080aXmP6h8IAsl2aIEc7AXsNsiY1hVuD7DNS\nQn9QwrX2IUZ3NG8SMUkSbzPAUrnqQ1s6gIJGw5IQrbwF09thppDUij2bMmbB\nS6+Mh7EApY+SfwiHy5ZDpSP4J8cVNFOUX9g1Gvpvl+5RlRzJHf2CKy+CV79o\nXwLhHZZ17RxrX4FYPIQoVmAfwSUAqhpKFwp5L9WhJ8pNbQ55nU0t7nOdP0B0\noCToiXkB/SblgkhyTRnDKBsh5OXmQ0fptUtUbtE9PryP9kqJXRFixm4GKxjv\nYfS0\r\n=i7WJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c1bc1930d1b59b86a4f059fda625e787b19f14ef","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.32_1643647611590_0.9930808487112406","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.33":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.33","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.33","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"c5d9033508b6d52c785cb9e3759124e22a9c8cb8","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.33.tgz","fileCount":21,"integrity":"sha512-5RlWH4ZhEn8Egbw97c5Xr9/RoviPTeVur9QHgVEeNyy22MG8o3BWRRCIOaAAdNSPwDBPGkhrcVRyB5EJTfWs4g==","signatures":[{"sig":"MEUCIQCWM7unBGen11dgg7UTJy1Ov5vkD1UT1i6kQ6CTh0eIpAIgPMMSjQLoVumwmLyyWqQGn65CpkTQ/A/kbkyCT4LZhl4=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":648215,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+CJMCRA9TVsSAnZWagAA87AP/0gRMvRkj7tRLm7MFb7b\nZGBiOe7EqIgfnPbA6JOWaWxyoEvZynWIpI+dnPMnPNm6yq06Q15Yn89+YgxW\n7pP9hVNSemHT/yzoJR/MnI+7ohl3ikJitfQanFbnCH7RwVoDeo7tmy83joly\nRh+nsuQMQMhWA9xtilzWCZ7qs/LniB3Fq4vGr42FaFFDYYxNc0d4kfnIifUr\nXKUVx7633bdy2oRhX8Mg92wrFZB3hpdjkWqTJdfJ6joHfa1lmI/KBEoB3GaP\nRsmgBgluqEBHNH6v7PzS8O5V2u5vA+MR62x+iPjbYtMK+nAGDd8C5/gdwOeC\nvh1h+Y0DQ1zyGrx8eknmrIcjr9g4WjzSxlW7bY/F3RCYk3PPf6a5qUH702Xg\nVcV0mEemUVYJhUWHavVH14fANCbbRuZBkm+g819gsEYHpeuFXyzh8NeWY22H\nkD5wOIzDsPDXqXLf71yk67PUFYOa3AiNtZY4aniKcNhhmhMy+HAE3KhtTM8r\n60DgK+BA+X4TLEQnJc76X/E2Lr48Hp/Xe02YLyAG+uorWfUeYX1DwLr4qYx7\nCU0u4DVoXYliO0CoYdcZaNMLvxGRLk3uQo1tm0sbjq/mjtPDuKbU3faZhr1g\nP7Y/pIBaOqhGTLurWhLGPU+eWS5PVqFEb4auxqUxD5ejmrulws65KK80Skxq\n5niY\r\n=fdKG\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"39fdadfbc48a62478b29653e6ec8aa561110bc57","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.33_1643651660169_0.2725829968831952","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.34":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.34","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.34","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"c1de6de6a7b9cb19c1c6c12ef62390b71117960e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.34.tgz","fileCount":22,"integrity":"sha512-RnQ+5FmFvx7S5YV9xCSXA3qrhfAojMpPPY7BnlXlIiemJx/98gReDTspkHjVZQa32sNT+47YBdCj1Al8Ket4Sw==","signatures":[{"sig":"MEYCIQCwZXgOimcrnXixPuV8L19nJ0Cjp1+LeOSp/F7jQiXwfwIhAKTLx2UNEagphARfW4HnPfvYj7e5Vu5ap//ARc3fuEci","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":642033,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+qT9CRA9TVsSAnZWagAASGQP/0w2F1iQp+zKlmus7AHH\nZDxK4QE7rspekZFdyFkBs+7kxKD0DF8kkKNNPED+zZJ+wiUiVTcGUPc9oxCF\n23JSyMU7s1+Ogtnjd2oV6rsCIjJN4UYYH1FZaynNt3FYuo5SR7YuJJkS1W7m\ncmrwAoSpyEoSCHVqvNaCnlnI0glk4eSKVJjLiuPyncG53yQIvRTEDX0Nwx0G\nxQ+L/aCi+facbnp3VI4c1mBJn2ZVoLyeK626ScBCmpMeXTtE9zPthuHV4I+S\nxW81Vwd9skc7jeIKGFBgSzXv79+iKbmf550NVBl/wkgg6KS3sgi2688KXkgb\nSXfJMBkhHK1smYQk0LLBDb1hxrCdApJPqg9cy28mnZ3xCsC5KFrXVY2CuDVx\nmb08AuK5lfptjiSqq3lQA0j/MhsltvM+bKhfeaT7aWz0esChQlBKUxh+w11+\nlrwlY1CvGBl9CSA/VgZcArX2LGFLg/6oESt9lOFN1nUZLSJV9EAO+ohjGxh8\nH3xTDOd0lXBvBEsaWaHKb97kN/oqwh4wcVzscyYNyKGjHDHYJHts+uxWPFfh\nCaRaINvLaS8epIyF9gPz8l8xuLgJQK03ngM/Saq5DSaPpl3VQjmQ3LJsrsbG\nSJmA0vE6bX9O8LJSO25+/yONeGeRH8SGjSW+8P/yWpP1+psFWugZkrcQmTHt\nvCF4\r\n=LIrC\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"e6120d385bfb46e0ba7e2768321c541d8c49c28f","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.34_1643816189590_0.9669788651204134","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.35":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.35","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.35","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"a6bba52d363851f10fbf05395172cee66721814b","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.35.tgz","fileCount":22,"integrity":"sha512-OlTWzVSpmxgobvPv1jxtGswyDsVXFDX1x9g2bhUeBXazu+joX4o7vpy6fd333hisIgEidOwRPHdpyaXFVTHvZw==","signatures":[{"sig":"MEUCIQDkLuSLaIXJ36Gk0FR7zpDlo4LiJ9b3WtZPBK6WE/O8bQIgbyypxXmRAoFDRFkMpybVwP+hSODmR1QXdKedqrO6Plk=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":642645,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v3.0.13\r\nComment: https://openpgpjs.org\r\n\r\nwsFcBAEBCAAQBQJh+s/9CRA9TVsSAnZWagAAI2gP/i18UWqVtm8FiEX0nPr2\nw2yuDUUkC26B2thKfOPxDJ8e6GEAdqUkT8jPVutOES3FProkaiLIEG5gnYFz\nsUcrOFzjsxm9MjCzTIy/cTEh+hbF726Zq3Jh40qqBvHWZ66dHJsBdAJms3n+\nEhMvN8UL978Xu8iNK4YfSs85td8mmm/rLLfTpQ3JpjvRdu2B1xKXIqt9UjLc\ntepfP+gQaj4MDyZCDIC/eOzcw2Fw5NKse8jLZtQap/e08Zo16LCOGKM8W5TX\nMaSKH9Y4AIVxQ1pP/xoa3NRLf/TeDceLfrVn6uKU83/l01EIRFUwJU4fHQfu\n4wXxwFsoJYy9GByU7Zm+048tymlToh3J3+OBi6WBGvDJvIFeccKRSZkMGTsq\nmcmxr451Cv4JaQZ+GzVACY0H+j4EL3+Jior0c1mNjfluTpQq9OdX52MEFhHI\nG0f3iJ2CMOUz6QZwUPtoX1O88kRnk1SmY0aaswtx8wnuSbHlcQXovrXZZveW\nC90vDFsqkI6I1GetLD6bzaPWv2ZG1ArSGOdO5gal/9lPZBb+GAtV2GqBe089\newDmGTprVFkFfvxL9ooQB5CPzInmMAfM2bVRyg1m4K4gi4AMtS22qZPD4NYD\nsvCB1OuA4eHgJ0MVuChs/CjGe0qcD26KYHC6I4VYJ9A3eKI1fp+0FqbCvTOK\nb277\r\n=Hkuc\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey> {\n        return new ObservableCollection(this._db, this._table, this._table.toCollection());\n    }\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\ttoArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tget(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\twhere(index: string | string[]): ObservableWhereClause<T, TKey>;\n\twhere(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"47fafba3de557b6fc9208ef907656f90a97a5da6","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.13.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.13.2","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.35_1643827197057_0.11521537193665998","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.0-beta.36":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.0-beta.36","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.0-beta.36","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"7f3abab911d508c4674f2d9a5e1f80ea0728fa5a","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.0-beta.36.tgz","fileCount":22,"integrity":"sha512-YwbgdCEq2ySH5xtmgSBIORnKjQSHQuGkkyl2Mawhd6YKPJaQgMrg5stFC7JNaNB9hs/I+W1hlLn3iTtymCg5Hg==","signatures":[{"sig":"MEYCIQCLTlsZ96YwG5EeG77ltaS1JQTR4uEUPS0+wnyvQ8OF6gIhAJgLTDDammZSvxsfKbZSiQarovHqvyk/IxfqhJ7WlTNK","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":726735,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJij3ZZACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqWwhAAgJecppyY3VNjlaIzlVdSpLuS9D5m4EX8FjgEs5jm1F0UyDLk\r\nPFlMQM7GnxvHcrsezyghZLB41DmZmEfhonShhTqeCcjMTKZtTR9kq5sOTkaw\r\n5sUrvKMIO7oLKL89KcXtbyxeF9BuGW6CZYzsuPrVnja0FOwnvmMpGV0Tix9G\r\nfe6a+BO5JhuvbC2yyVKWdBfxNBm3g4RTJFPMF9maC17GTvW1TfnrwmK4WxQ/\r\nZ696eV3qGiEfcYCiaNc0Wf0lYvUERKSgeEz6OJzhPLYlEj0+QyWSn47lvgfx\r\n6/y7xEAIPdwux9LWtVRsxWYX2TL0eurCyXjsxk0Lsq5qqyeL1gHAGJZH4DWG\r\nb4UNTaiP2xLIEElDyA42x803UVb3gJWFaeoPil0KzM/hZc+ziigzQ+c2qsZM\r\n6LFOXDTmTFEBRHJNxnu4lPlQwlA0QE2PB6XOHz3XfDMptT+9XYQi1fOVte19\r\n/jAA72546uZ5ItX1coCgasFQtG5nRfnISAzFkWU3coJOy1XrT5oFc50Q6eRu\r\nPKUiqmze6WHQXNBCAtgQcHS2yY0yicXF3B4VhkYcTVkaMQsXxHsWTtvmnglr\r\nRNjz4OUrAoFD/r0CaBAU+NSj9XXCAnGa0lsXetYJuYRw/VkFw+SWSuXHN0h+\r\n71jxElSmh/jMAeSNWQpXh0VmILR7luLs29A=\r\n=Xmjp\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/test.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"efaed1b598dc0e4abb53af85d547e1bd053adfb4","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.15.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.15.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.0-beta.36_1653569113082_0.5069897101347673","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.1":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.1","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@outlook.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"af1969c8c2e9e7072ff2a057c04d8d7eecf019f8","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.1.tgz","fileCount":22,"integrity":"sha512-IzMOLptIxE1hulTGybJHtk+ad3citzH6zxQ/sl851SU/OAxoNZxlb/OGDm6Wg7ZUKGZFhJZvL7fQc4ZXEWj44g==","signatures":[{"sig":"MEUCIGVUJdCoNDqAgV+Ak3UbrDImspf4r/TLe9nuEds0UEfCAiEA9IK3CLxbGpGuVnllStFpYqW4Y+4hkDWH7HL4skzethQ=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":727190,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2uGjACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqJaw//fqBJyOJlaGoiO34hVJ2+V2UXMnAgQ6tRRonoS7aKklClBur7\r\n+l4hWVQwTphBaevUtIm8pc1T5TQ2zSmi/o4+83dRFyrTaKqaIlvBMvoV7HDK\r\n/BA++meQ8FyE1OpgWC8nEW4yI8pNC6Jm+GkltuaHKypnVFAZhu0suILNyk3b\r\nGYV2JaZgLn+RVbkKIyxxI73OWRR4UUfez3jOKIrzGuBJOpKTMzClgm04/Njk\r\nBCSGroaq7+GtPX8epv6Px+7WNTd91Y6TzPbrKyFkcx5TLKwpzzEUHxscKchr\r\nOWu8Vf7v0wkeDauAngw5MqaEnniuhk9B9N3AuZpgSpm8fUU3062RVzJdQ+xJ\r\n07BFfqEgOwEuORO1dGvRQ48/iSiKL4AFUcxNg8H93VjtNdnnGWm+7tBUybmm\r\nqFrlfeRWT3KT3TkYP1tgujvwGwxAkuA7LwUjnavPAe9ZIEN+mnbJ6eGiiMH2\r\nWX668Fd8dkz6t/VjaeSJHx/34tTNuzH5YBMoEFz/Czsaxa78BjWkSOZXDCzl\r\n0C01nZkGEZunJFUAQNLDkAOT8HAeb21K/SS+Ivl/ppECdvltTRaaHnB3S3EL\r\nIZEYueMwhTs6Dg2ajKVnxfgXeAkW5j5ygfEIKOPRNzNuGKHw+6+rQFSPsTpS\r\nC1rjL3SFttsk+G4Gzh+dSE0bXuqeo9t3Cck=\r\n=U4Gg\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"e85919b74e555361b7ec6dba3ac7c33f65a56e1d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@outlook.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.16.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.1_1658511779551_0.6908359142858413","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.2":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.2","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"77636970ef4aef747c2284f9e7b8ae22efe980ae","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.2.tgz","fileCount":22,"integrity":"sha512-zVCEgJR3DYe/wmx1X6jJNNxX9aV976q8UXGtKXqzK03ch4JDUur9l8FKHKSuo/81wBqQHJ9ktZIkOEdXT+AZLg==","signatures":[{"sig":"MEUCIFhrNANSo04S6uRfYz4iP6l0SpBulMD65uBNoU+zwQb8AiEAoHALk1jLrWzo82SR3ZaF6wOyhR4++p6y7O/XMaNA1v0=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":727417,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJi2ulTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmokfw/+Pp+mwqShXBfVVcLk+GE67GUT+22Uj707WDecHz75e2brO3EJ\r\nSdPq/WeStYrrP5QYY9fmhARwCyiQwxdNXDpg8o1gLECRg+/E1BEYdWlCoZva\r\n4h/DPfwhI4Xi9M8MhXmPc/Is/1aObRpQzFBV67j3+CpEpI3jJGfREoO7e03z\r\n7AZOIH7xsMz1a5KqO0r0zdE2CaI/qsiNuSFx9YHE667f5HTQQ+hie814wFi4\r\nCuEXvKTA4Ce0vKROn6CTJEV74KF2IKip+tp7NPwsuqNc1lixBdWVAgH/K2sw\r\nJ1MjCT0hfDRzpbiDsCtjVlm0buc2YFyFa8IFcicvwd4ZCsudHuR7Kj1sbuhh\r\nQXH2P2p0KUOKBHWKG9onCXhQX7IuXwIKXZJx74YeXh+XOD0/ql+HU3CLLlrm\r\njsCczZe4HHKoBTqFnc823dKTN6tln3XVYNVMnAN6kqef2zg6KeWAOW+js7+o\r\n5AyPinwi7rqA0G2CmaUo9NakO5CCr6utBPIoDMNPqx4o8777HDjSRHOTlS0Z\r\nsmXqzqr8UlCpLMdZNPTO3mbH+b4H7Oqdpe9eomKi5kEQjO6ThxnLLAO+p0rz\r\ny6Hjz4HfBXDaELtlQoGNT/ikjkbB9C+6OG05g0xhWmFjiterVnFl/j2IE1qh\r\nN00MPuOwOzwFFXemYo7njyCIZZA3T8FDIJ4=\r\n=T0B5\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"2436153946c9c4caa88b5e80d00a3b0edbf7f82d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v16.16.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"16.16.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.2_1658513747606_0.9008675849911734","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"98e5ed9d3a378eed3dc1b0d9ef7918ecefdafab4","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.0.tgz","fileCount":23,"integrity":"sha512-OrXDZ33jfjss4DsmD7dKDM0wLgiyMJmbMZ7sZqTh6zGt/RwcsnyDq98q1lF3nBW2e9/3plEFt6RR+sfsugpm9Q==","signatures":[{"sig":"MEQCIBdlgRVAsJJcpGxdIXwdPCRPNVhlacEBao4Db+8Q0HFpAiAjNEihsJdp/rp4AbO44ue/XDGyQjspi1E/HDp8/ZtgIw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":728794,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjaVCGACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoBBg//c8zF7L1ZoBt4ZrdPvGh+osqMN02QPLNFEuaL1yt2eAnvRosJ\r\n7UZD9Rh22+hOkqHtCFL64FnHP7mZxmfgEnBkAbhwAIBL/owDpWSLGfm0m4YZ\r\n/99UEHSGhYD7bkR1atT2fQDy3ScXwgM9b3gi8/dbI2AEho6PVNW2OpuE8lQ9\r\n1NyWM8EjJSb14u+Vuf+l6D8JfRDTnEvWsT/hH4k1c2gDvnQt93j7k4MAL2Ex\r\nckh4ajHxGTC37fNpK42nj3+XuF2QU1z+UOmvGCBEI7dOXlhNCPcylNMkYllQ\r\n89w/b1Z+QVmPVS4CI2FmsuBBPcCxlLfXjHSvHo/NmuLRSVFwWolr1u/CPF98\r\nOC+bCSDwFy939Z/VmQMaEFAhi3ZJX9kNlnZQU3q1i3EZAAyZwVjr/DgN/ikV\r\nHhGvSZ3fgddNJDFDZU/QZ/oAcZVs3iunKO5TCSjEan8GeV+M7kPWfJWuGDK0\r\nf4gtL4hc/doZN3+VlV/P+KMOHqPA7fyOtCwEI4ZIQlzQQWI+BvZ1y1D+b47P\r\nqFUz1IoTK9yW94L9LGPnhBwUdmP4H2XzIAJV/yEsuQVvSjUBYE0/o4r0iZIs\r\nY2gufwU08clFqFElGbwQZLe55usXO7ntcS3jQME18e+fAtDMWwrqN5A1sHS2\r\nyRdlRuaASbzUFjCzl/sDXHZIRqBQY/jo5ZI=\r\n=Q5gY\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"ef7e7b21cfb0d3aea3712ad9f4b3879e73cfd99d","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.0_1667846278161_0.4269304162836094","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.1":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.1","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"e7600417e031e4fa6a92fb8d217d7c5c730b201c","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.1.tgz","fileCount":22,"integrity":"sha512-wRry8Xa/TEwcosGDn0c11/c25aA9Mw4YI4fN/WgtD2SCVwDe7WG0sd0u/Y5c1pLWCfDYrcRfa1yuBv/QEbVQSg==","signatures":[{"sig":"MEQCIB2nhh/5EguCFS+Oh05dtWO16fi4Dti/uqKaGPlsMCcWAiBjbXGK5dtA9qI38huPWZ9MIZLXszKPsBUCpq/ersAaDg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":727766,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJja/H5ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpFBBAAhOpwD/UEN42THcU29+7cS0hEPrirp34rY+nCJQyWPjCDHoio\r\nGfdaTDLIY0fEYsqYZFeeq1U0qqaYiEsNAKdBpozCjh0KyzUO/lA+HHmzD4AF\r\nuOvLZD1UlCHMCAY96ueFM8XSvg7gNwJgqdEqgIAcwCzlSZdMtRriXBHRN5eC\r\n94PIKFqAVdx4qwOscW7jhCXEz3mmVHsHXKUa3uEp0T12htBLjdk8miDqF9MK\r\nTfK5/etB7ZdvN1bHwOyqZfMNMVpSBRJV3mebGhdiykCk3hBhpz10irKumZp/\r\nG6vcSReWxuNXExqi1NIUqMibVsvXdAvogbByXEL9ZCL7i0b2bp+WmBf7iYQA\r\nhHN94DcD2+dshPy/KY6MlHAoirLH8IZO1zElKV3rPwer+QqIojNMFpm+qMMg\r\nZK6ktwX13x0HYMIc4Qbj583vCvEhHLNQHgR6Ce+cyFDl+fAq61BK/inxc+Lg\r\n9DfN1eumwd3rtM4dXgv8PeG6LZBA6+ZVSwos2zcn8/1SVLofBJaLOiPpZRCj\r\nYownl6qmHOEyCvVguFXdCvQ54bqyyXJUYpfvFBW0fDJ1HxGDmof/+AqcI4j0\r\nb9ij3YGSHbW6Ixrqkh3nmdn9m9lz+nzwKriozqKq++McoM/HBKBDqGSvd4OG\r\nAZ8vT3WK5SO5IMpb8ABEhQgFMm7Whs+ndJo=\r\n=8ftP\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"bb51cb35be3f49e34e6dca67bac8ce6d312f0cf4","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/4.0.0/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.3.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.4.0","dexie":"^3.0.3"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.1_1668018680916_0.06615317489278483","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.2":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.2","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"22d9bcd6a77014a4b591b551201ae55b622506a9","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.2.tgz","fileCount":22,"integrity":"sha512-c1sO4lCXYJrJnnw/QDdBktsNgdOLFUyWC4CRLSfMCtGqwr6iOESXix8Vr5F/47i4WCGnxjyTQoBM+9dovl+NUg==","signatures":[{"sig":"MEUCIQCoIvOsOBV8af0LKXIFCeuTbSTilnhWabjsehpESsjCFwIgD78l/vShyfZNc6euV+jkvcNztfBq4LQVWxRpHn2n4nE=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":758473,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjbtcTACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq2xg//bGsDXSYrZlDy92lVYkv6q8s9xUgJbXVIu2dvLDD0UuT/8Wjd\r\nF1JINZD8k1fVl0qAgg4Kf9L0nNUtTF0tBiRHICSlP5x6mgbcTgPHK8vhoftu\r\nG5cV1CHiEnfP9Fn2sSou9yyrDoGsMzdFFmnWu86wDe+Ldy4DzNRUoQTuiVr+\r\nVQutkKFQVbc0XmPcobWiZzjupjgrFh+aX9YIYiOmlKmyqVEyIThacCNvEbIP\r\nbtgl98fga4J2qA6cDsxLzcs9bTU/X+5Z3CoAXPtlu/jQZ+IaGaDPSLxhd/65\r\ngz9TEKd3os4+IH9op52mpz+fOlEDX4fjaNW0YRLPfqTrOY/Sej4oW7mvsndO\r\ncMNXp/PYAiKqYgV1R93y7ZKRBZtjM+YNJCpqg0etexzE+cQwjrff72dkChGw\r\nYc3MwkqznmyFxAmGIqODNE1DMyZM8Ex7ETpcVai8Gc+SHBmIGfMsJ6IzTnR5\r\nPlMYl3/M0H3PzuPvj4EJ9gmrhKhvyjj9LCCCh/+kGIoTylK3BZsbttXau/IG\r\nbBI1dZwQe5SOJsljuyw6Oy/1LSIrVmQhWAUnBmLAsrI0kv6diE1SpDzmpefv\r\nz3nF94IPeb8VzccxrIYdMHoU2ETRbz8uxnq+ZZeGsWfcl65UHU92dRnC7Qzu\r\nOSqpGVfY6EhgMiOFLEviQtWEoZ7MyhNN8aE=\r\n=X1th\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"9f07ebc92a654d468b14a5eaf32043ddf4a3f6a9","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.0.3/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.5.7","dexie":"^3.2.2"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.2_1668208403409_0.6434586782556195","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.3":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.3","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"c94ed6d24079459df4a9dc5277c5d2a4c4e2e87d","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.3.tgz","fileCount":22,"integrity":"sha512-d+/uZjGGdd3fxEz453ZO2qiDV1c5RrXKdvg3ARBIq1w6EalV+7n9bR7h/rLq4XayIMajjdQBx0Tms/+AZtG97A==","signatures":[{"sig":"MEQCIEHuU0gVkOzsfI0BrUe8TqMl3FiUk8eeH+j8Y4oRO5qfAiAaxdCJ1ECa3+gf2uRbYycLN8Er1va5X54Q27r5RSZA+w==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":758824,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjb7FFACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmq97w/+ONzorogeyd+Fe4W/BxEV+AXARe3ZeoReJ1UOjCG3zoapHWFm\r\nV0+RLiSx45HMaXOb8X0fYFtsTz9Z3KTT5EGH0aMc9bSBKU2WTEYoIzq7pxpb\r\nrb68Qu0e8xmfivqlNpVj19RLripPpzR7yu33ov1Hn1CBWylWYT6y4feps3hl\r\nFwbS8gTbZyCpYiBW3I4NEoFOomyDLy4exj8Sf7FqhyACdcfJGwhJGvI29SJK\r\nrxN3Q4Fl9Z248skvwl8wzEYXzeoMe36JXiTA8utsuR95NnXw1N++2C+YZm9c\r\nle1xdwayJumKbog4pZ8AbTi4E9JgWFqCnbzyfVm/hGzSsiTcNaYi5XZeQJeO\r\nXxOiip1/brikVnVA+4osyHeReuHrhNq9gJVr/8Swu3pJM5mFYrQYF7HouVOl\r\nBz7eYeCPVOQNvlJ7YHeTPSoJGBmUj/rD5YUg6B9BuWdsq1tpYkRzNUXlUA1e\r\nolZGCyF7E1EwbNi4yPi9px4phP8FCS7wV/+0G+yA3ZGsnQMbXLs4NSe9NFBT\r\n3kenGjEaC13aE26nY/81Nx/l/XpLtAAjRoeCQEBhThnEN5Oh2hk4bNanrRne\r\nhYgqyw4gbngzLRVYdLZUODRoYlG/E4+7ZJJJpzKF5qnQ0fGVIjbVe5uRsXii\r\nJONNVRH8bmcD7A6nnPga3bpsSFuxwkcApqw=\r\n=Kq8Y\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"691289cc25c05870a56675e26c63eeee7df3d0cb","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.0.3/node@v18.12.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.3_1668264260928_0.10045091189650357","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.4":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.4","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"f6fa2022c32a1a3130917acd0d200f9a7b36ea2e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.4.tgz","fileCount":22,"integrity":"sha512-s+VJ1HpMkvWmUUSKXV18I3DcJkQWohCaijq0DKtcdqcRtcHyI4WErw+IvwK0jYoM6RjoTVWtl85FGY3FQqxHQQ==","signatures":[{"sig":"MEQCIFzSfHijhLPZh8P5fFeSFABkEV6hdW5msQv/bjjO8oIGAiAZS30LgQ1jpJs+IDVJUyvZCf9YHeIfXLm15bJWGsA+YQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":759209,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjjd79ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpxuRAAoBBc2Y5FNyy78Q7MLdNAtDtn+S5yQnT/YIMRJ/DSaJfEw/1L\r\nWT3SZ/ucYUSiJPtcKVZVRNxoSAv/u3cXvFRgsByzbiNr8SbUrCvFNCyRukUU\r\naNRh3vs5zdD5cq+8es9O7ImJJPqzurpdVuS14Ua6UvDhx+o0JoEL93S0fXZG\r\nUaM3fQ8y/Or0w8ZOf2/ft4c4Z35egcsaDeTAhBZ1QB9b1TW4z0L/A/5VfM+V\r\nfzlDFIRRpoKvG/v8q0LVawOh2oAp0V5SFXqY18e+fWmZ8ZuDEp7LYD7Ukd2k\r\nbPCtzcgv0gC47DxXUKPgsqEW/YxmUKHfqK7LNBNZSL6NwRoweBXjWDpxmMpJ\r\nUyndwLGEWrfj0UvICx1liS016ZRx9IzUKO0ZownWAvmftb0ZbpFo11erv0Dx\r\nrX4uMuFgvo9ezckk70ltsExivW+YBH/lSI7/LeObkEZ8uVqqw8Nlk9lxU3T2\r\nrqAQt1Iu9Ubt9yJ0tK1QxbOz9m9cWgWhsgQJusgNVaqTJ+2ihuybGN2vfGXL\r\nPdBWoI8p66vUqtVZx9vU6X4Zoi4crS/CpCVSeBy6IuWQMg2v0h7oglINmJkq\r\nbIbLNXZLlMEbLNX6PmN9viYUc3fWLclGAwRKFlMrhkaRxMZ49emAcEVQfwU9\r\nQZWHjqFBVo9jTOj5MKlJdHuyWsY5dV5WuCM=\r\n=/+jw\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"Dexie RxJs Addon\n======\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\n that combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\nInstall over npm\n----------------\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**: \nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n```\nnpm install dexie\n```\n\nDocumentation\n----------------\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n#### Addon\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n    /**\n     * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n     * @link https://dexie.org/docs/Observable/Dexie.Observable\n     */\n    changes$: Observable<(import('dexie-observable/api').IDatabaseChange[])>;\n}\n```\n\n#### Table.$\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n\t$: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n    /**\n     * Observable stream of table changes.\n     * Emits updated value on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public changes(): Observable<IDatabaseChange[]>;\n    /**\n     * Create an Observable Collection of this table.\n     */\n    public toCollection(): ObservableCollection<T, TKey>;\n\t/**\n\t * Observable stream of the complete Table.\n\t * Emits updated Table array on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic toArray(): Observable<T[]>;\n\t/**\n\t * Observable stream of a get request.\n\t * Emits updated value on changes.\n\t * @note Stays open so unsubscribe.\n\t */\n\tpublic get(keyOrequalityCriterias: TKey | {\n\t\t[key: string]: any;\n\t}): Observable<T | undefined>;\n    /**\n     * Observable stream of a where query.\n     * Emits updated values on changes, including new or updated records that are in range.\n     * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n     * @note Stays open so unsubscribe.\n     */\n\tpublic where(index: string | string[]): ObservableWhereClause<T, TKey>;\n\tpublic where(equalityCriterias: { [key: string]: IndexableType; }): ObservableCollection<T, TKey>;\n    /**\n     * Observable stream of the complete Table orderd by indexed key.\n     * Emits updated Table array on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n        const collection = this._table.orderBy(Array.isArray(index) ? `[${index.join('+')}]` : index);\n        const observableCollection = new ObservableCollection(this._db, this._table, collection);\n        return observableCollection;\n    }\n    /**\n     * Observable stream of the complete Table count.\n     * Emits updated new number on changes.\n     * @note Stays open so unsubscribe.\n     */\n    public count(): Observable<number> {\n        const count$ = this.toCollection().count();\n        return count$;\n    }\n\n    // Mapped Dexie Table methods\n    public filter: (...args: Parameters<Table['filter']>) => ObservableCollection<T, TKey>;\n    public offset: (...args: Parameters<Table['offset']>) => ObservableCollection<T, TKey>;\n    public limit: (...args: Parameters<Table['limit']>) => ObservableCollection<T, TKey>;\n    public reverse: (...args: Parameters<Table['reverse']>) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n```ts\nimport { Subscription } from 'rxjs';\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends); \n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(':id').anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(':id').equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where('customId').equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n     // Logs friend with id 1\n    friend$.subscribe(friend => { console.log(friend); })\n);\nsubs.add(\n    // Logs all 20 friends []\n    table$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs only friends with id 1 and 13 []\n    friends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with id 99 is added to the table\n    noFriends$.subscribe(friends => { console.log(friends); })\n);\nsubs.add(\n    // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n    lateFriend$.subscribe(friends => { console.log(friends); })\n);\n\nawait db.friends.update(1, { name: 'Testie' });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n#### Example (ESM)\n```js\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n    addons: [dexieRxjs]\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (Typescript)\n```ts\nimport Dexie from 'dexie';\nimport { dexieRxjs } from '@pvermeer/dexie-rxjs-addon';\n\ninterface Friend {\n    id?: number;\n    name?: string;\n    shoeSize?: number;\n    age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n    public friends: Dexie.Table<Friend, string>;\n    constructor(name: string) {\n        super(name);\n        dexieRxjs(this);\n        this.version(1).stores({\n            friends: '++id, name, shoeSize, age'\n        });\n    }\n}\n\nconst db = new FriendDatabase('FriendsDatabase');\n\n// Open the database\ndb.open()\n    .then(() => {\n        console.log('DB loaded! :D')\n        // Use Dexie\n    });\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!doctype html>\n<html>\n    <head>\n        <!-- Include Dexie -->\n        <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n        <!-- Include RxJs -->\n        <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n        <!-- Include DexieRxjsAddon (always after dependencies) -->\n        <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n        <script>\n\n            // Define your database\n            const db = new Dexie(\"FriendDatabase\", {\n                addons: [DexieRxjsAddon.dexieRxjs]\n            });\n            db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n            // Open the database\n            db.open()\n                .then(() => {\n                    console.log('DB loaded! :D')\n                    // Do Dexie stuff\n                });\n        </script>\n    </head>\n</html>\n\n```\n\nAPI\n---\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---------------------------------------------------\n\nDexie.js\n========\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"06de7b3cb8a07e954d396511430db9524f63c218","scripts":{"lint":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './tsconfig.json'\"} ./src && npm run lint:test","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","lint:test":"eslint -c ../../.eslintrc.json --parser-options \"{'project': './test/tsconfig.json'\"} ./test","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.0.3/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.5.7"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.4_1670242045241_0.8301108814308229","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3-beta.5":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3-beta.5","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3-beta.5","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"f1a69a653aeb29635daa51eabfe1650239010162","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3-beta.5.tgz","fileCount":22,"integrity":"sha512-jmWF7ACokrM4VR8wSJtJHrWYkPFeNNdgfaaj2mlw5bCV+lCQ5Kz6zRJ+W45g0MUKaWTuZj3QnWVYg44SF467+A==","signatures":[{"sig":"MEQCIDdL9XWfoR/aUsjerPu2INyq4kOMPbtK0cvhaySvabPtAiADDTlqq8F2VaFlnML2k1gkXeCyXrIksCu0ndxb6N9+Xg==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":825682,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjoNPsACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmp9hg/9E0U8jzzHlQ412k1n21epqlSt2dSIwxtkSlxr0hvEBvcmf1HQ\r\nLTcSKdW+2Lk6vCkoWdRLNWYHDlzyIPdISm6t7BcpjhPqRM1WhARcGoXOvZkX\r\nlijcgprCIYw5rsCuE99CWVLe8JeE+R0PDkESwHqQOFER7t0B20LABDqRdoAd\r\nMThEJ4OB2XOlArquHAU460u4FUP3f/BTCu3FkK4NYRIUEy/mlICfO6K1wxzw\r\noDr5LcDLYUvgiupyrKrQbM6QalNM/x9CySLToA9+zF3slmoxMAunYZRpiHH1\r\nOI+ONurRtKs3TH66EL6eLSLJvs9yxBefq9uLnGoR8KJgipjEKLOKS2ZpDbO3\r\n4kBXoEzi6sAckJFIcnrE2CqAtlGqgzhPp35C2Fw9FlBGVRnqQVVf8lZ5WbK0\r\nNVv7vbvSZlEO79zd65h/saDtdulPYX20tOWL2bpxv5b9RwvTCrp4H+ovsWoQ\r\n/GTxQT7I5yzQFy+Zt7F0OkfK2ePw5XkzTJEjkycQjlOIHCpynEkVJjKuIXye\r\n2GpxNzfl3t2D6kIrwOlraG9MoBB4BEqaEbXBBFYs8RreXGacJw9QSy5B9wXY\r\nS54ukEtXNXXDaad3dZVTiBPLW1m0cxW5kH0dErm50b+R5HQqTw7aZ0RHkvI3\r\nfwehxupR1s6tpM22iC/SEy9pK2OdNWPYQcE=\r\n=fKzR\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"e553f7f8912323c4c020cfdd6e34110be2b26469","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3-beta.5_1671484395802_0.7841871736039872","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.3":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.3","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.3","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"300e727d0c8106456357ed4696265202abfdd1a5","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.3.tgz","fileCount":22,"integrity":"sha512-5Qv65FBBlgAvHq6MkUV4MvWV90oYJMXOz4tDyHLTNmeWby/JLFiuAt+2rORF6QXJbzECEEOwUUfCy27VV7CQOQ==","signatures":[{"sig":"MEUCIQDydGqGzlCaFqam5g9ntyVCGgpg6grmSk482bWutYgQtAIgV76I/HVdpdhQCwm2fRDki5kiLEiMiaZllPLdq/gNj/g=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":825907,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjrHU2ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoF4A//RHm2hLQlmTZCEUKR17Jjk0WUlDMrX0qHZfO4Vx+Bg2pj9Q0f\r\nga2t9XqjNWbI6EnMr2Df9JJk7ZnwmqxTeu8lQPQiLUxh5MYB4R7R9Mx3PteJ\r\n8N2TOLNyNzW5SpbOhlGa0C/N5gdVLIvWxS5LU0Ys+YSYEz5d03SeiiBB70wr\r\nbYevE1+duQ7mjMxvS6cuN7epxxVh7/O7MozKcTiZFPI/1phG46Mz0jhPX9Wt\r\nf89vvVAY9z8YcE48vyHr5Jon4sahv93I9tPvZuOdi3sb9MeClcakOZLi30uk\r\nbef7SqSTTVldAOG3TP8Lzxi1NBKHz8JQIf2P5t5ZIDJV0xP15xrP6EC9e/jG\r\nqDMP5MRiZMjZSLWRxbJQrcor65QyVNFK263MFQoxceCdrBsnUCpm5nRUkdcS\r\n+IP3vky+bZ0tf7XN6ApTGXbMbZtyR7eLNldnnskq5qyx3fFB5LHOn21kzia2\r\n5ZoB+6Gbb0LnJbtCVBJIf0S+/PxEjc50ypFqI6L62VJC3sBsjvaq+t+AbpXQ\r\nlnmPPOD7DSI/hgCdngg92X8xbNVAW78FO3ZjUmu1qTtC2fWDxGxUcdo/Pt0l\r\ngbqjTn4OzK9ZT3EOkbGT/862UKkvrX46sOXvWD81TuI2uTF/Lmmnh6dFooO5\r\nwHRxTarzHvudk5Er9cKA+MFqDTW7E2LDO+A=\r\n=bRN4\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"1a396be5b7eba70c9ad2020f74d8de8953859954","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.12.1+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.12.1","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.3_1672246581868_0.5765861495619491","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0-beta.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.0-beta.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.0-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"8f4a8e72b0582283f3084c861823e11713cb7716","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.0-beta.0.tgz","fileCount":22,"integrity":"sha512-ORzjGNuSXCv7WfnUQhvf4mYBbIV26rvpl0cUCteAO6XYklqkDSCvsXPDU8Ue1Y0aGWBM5u7dy8W33MCi7chHTA==","signatures":[{"sig":"MEUCIAT41bGEkEfOJEIxgdwmQ1KMjY32PV7GGMOhjX+Y6kHAAiEAuPE0M7kNYNL/HhDdIJLv59M2Y26hiohfAnlTDlrSe4k=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":816296,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjyurSACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqNxQ//eUkUhoGFzJvpuGxJcJVI2IMWQc4tyB6nK1wEE0QqZdFblBl0\r\nVNvtXQDcLa3EcHPTR15XbTZYC7x8DZ8GEULkIYA3u2m0LQepT20q6EKrR+1D\r\nvd2h5w17tHk6JJkauLOhJtyjQNFhZnkX5+er7b6BjWOKvuKj0GoWnFq/dsDW\r\n/y6HimMj631lYQnY9fyIJL70oi+qd7Ga303cm5aO/npQ2IbOZgvKDh2iGMD+\r\nTWOeBz1zKfxFwhExVLRBi6B1dqdfUyfbExt+yk4OPV5gq49O/O9X91Xaaw3Q\r\n0+ILuSLbZt1otTMoTazNBDeCg30Cso3fwEDe5SzzO0KhfELp7SmjSnUXF1XD\r\ndKiS2WF26ejpFxVz7ULmXB8rR2M9IiImtSLheifLczZQzSLMXHd3ZAc7s+UJ\r\nI+1/bEBeb86wJWkNqx6NwbhVGJ7s4AN8dbj4r5Qt4NBa0+kfYL+AAzBeSqzg\r\nzxDfCaOdCbjh3VhMetEcR4yK9FXiL5IsTaWPa3A6j2I1XM7BWxn4q3sPvqdr\r\nvqJDZRw7a4XTRsurFTcAkJzVSlwt+D/5B8mD8xKfor7Tf0uSN65CcMoZIoey\r\npBQpa+IZn65AJPiRaPPi5r/EF/VpH4yXPqL/Q5oTf7mgclw0n+McykMEKsub\r\naZP+MjMVO3/fFN+bITNIZ+dTX4zVS1t3jng=\r\n=XaUs\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"90a49c461df32f0bc5360f5e77c8a218689c7a74","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.0-beta.0_1674242770146_0.592495686643536","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0-beta.1":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.0-beta.1","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.0-beta.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"df03a964973a2de75687c9261fc9618387be305c","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.0-beta.1.tgz","fileCount":22,"integrity":"sha512-9yCi33/uvWZcozF9o9HA+AdTuWnVQLxJfhwdbMIS/81zFPz6myWhTpOtOJ5zF2OkCa+s5WLzFAAyEhrMURTZ5A==","signatures":[{"sig":"MEYCIQDuKMsn9UVgwuZclT/TAHf2v26ZAhcurSt0Kuh+jfiSGQIhALrSZoJ8TnhAa925VxWsmVRuySV5TfO+BXu+4JPrRLnV","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":818959,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJjzUehACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmoETQ/+LrO2t4a5R1HOp1xE2O8PCcZMhqS4mLTFDyDKJUnLdUNugU+/\r\nlxbDWUdP4Dt/Xj0yRzlIHdGNIPwVoHAjjJVTNbQZGmmcpB9dNKG2Ry3AmnfL\r\nlGFrpCL7EZ09RJv+w+Lza5NGr77yNjSYMByempIYkjM02wYg0kbhl+4+M8Vm\r\n2gr2c3AU3zlXE2BI+9TV5OmNHLQZuU9BcDGwkFDWXgj3A+MmmM2IfpwaFptM\r\nNla0FrcMF81yiaV2eeOZp9JkkecyGjDgHFk5CXGnBGqD5W/APk6BqHqRqbq4\r\nZoXf0DUQW12dt0zX52VaEeWPBdZytmUNXmYuJHLvNjB7HRy8LD0EIgG14yBe\r\nHMLXFWdVjU+zYY6tYuZm4gTignBaeMVGrNfpEgvSq9cq2B8xPUtOxOISpqk9\r\nrSMlHHfWcKfRG42Yqxp+v2p2T7/KNd6y8vJt3hRVo5bI78sHc7MhfvhMGinM\r\nJSpr4dH8rvK70zi+q1HTFUK3XGbLrs8j8ak2iEJvhTOy9nRWuU9NXqLX+OfZ\r\nmny4t5CkWKl3QJrhGnwxmDK+r/fWjC2U9K7NxfH9vKK4zxcCm1nOpx0DKc7H\r\n7aQVnu99hZCO4UnG2UvldHscJ8b6+RL3f8J9wyXuXFYRW8wA4AeXTORENAmW\r\nFcIfJbWzfgCiakCPjosEQEx+pW0Bvuw6RRY=\r\n=pBNJ\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"b6210c823c39825d9eff103bac4e88581be934e0","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^3.0.0-beta.11","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.0-beta.1_1674397601631_0.8058517125796449","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.0.4":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.0.4","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.0.4","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"e24f1acdc4fa26962e73f8f7d74dad86d190c5b4","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.0.4.tgz","fileCount":22,"integrity":"sha512-2UriOmQLUy5Qocd8r5LkKMQSypApV6/qzNa43fQg3Ja3oArfQpknv4Ko+LF2trNe/9RQaeBABtqWX53wOQpBwg==","signatures":[{"sig":"MEUCIQDvSWwIgEMs7jX/t58ctPe40n8XjfoJJMN0hft5sZoWqwIgO7rGbWqUdkSoRAAA6yyLvl+u/pIMy9Np/0FGsThGHr8=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":826351,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0CrAACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2Vmo/OQ//W7nGuhBW9X+bZw2wXrfBzI7dCdC8qfQqp09nB1BVEheuk5Yb\r\nF7BErHzDW0TnK0RaWuLXJYXnT1tj3NjsuUkJR9TtRVL8L14XCGhX3Hb53u1L\r\naV0LGGN+m+8gRfiCNH5fonUncSQJ+CgCocb3DuPLj1ZSM2qTXfWu3uwy7kqK\r\njuH4+80lpXCPH+FrjpdrE7nAudzovNhq2TL2WaQiPO01N5uqX3YYD0Bs6hCU\r\n5azrTZg+LdhFGhKuKwn/eW4asOM6UOOgzl26egeYeORRBNcpyb+uCJwweojM\r\nS51GQQ6ilpLrkXKWpoyUwltoedCc/dwegp+AJI90oNvxXvzoK4JXRaBPOUmq\r\nqn7ghwyzc69K6+GAjwKIYbC9nkr3jOtTR4yYjCLDLm8JXjGlSQG5Npsrbp3c\r\nxYcfZmt6xcEPqH9FY6xtOnwym/uUKvV1p3xIYtDwdJIoH1xtl9lbx5Rp/ZX6\r\njW6oz/APZ5oD1zTfgkOGa84WJ75vYvhP1Cac4LBGVryh7+GdHjJsxzCwHOat\r\nd6GQqWkSl9hHklrG7KnSP1V/lKbaGdKwxn7yB348UtiGgVWS0dZ+eWXjZdVM\r\n60i2QJiuW7HuGwQp1xKBpnIlLWovhxhueqemLFGu/6qF71DB5eZqJZBM9kKl\r\ngkZDLc4abmlj9BHWdB62OOzly3v9Rwa2io0=\r\n=KgT3\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"1fbb739d7f5ea750599feeae7526729e63a9f268","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^4.0.0-beta.13","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.0.4_1674586815873_0.46392762174850555","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0-beta.2":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.0-beta.2","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.0-beta.2","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"36a8227ea6dff0924bdb9ac652c9562186655a6e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.0-beta.2.tgz","fileCount":22,"integrity":"sha512-aEB3rPkhE5fNmUdizePx40BrMbw0NzJNnxDqKXvB2NPxEozPkJNaQO+qTxiSZ/r45mXM5HmC2BPcM29uZWK71Q==","signatures":[{"sig":"MEUCIEDDsRC1jHRDidNZObldZfSflYOd1IYYAlFP4I9TzvrFAiEApFavhHhart4HAgHTqetwLnyv1hi8i71nk0rLfz5jGmg=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":819982,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj0Sd7ACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmpKoA//biDjFQWT03wMXTjFtgN9NwaY8OzBmrjeWYTGIOWXzV96V2r6\r\njR1aLFVpxlSASbt4B8RfhreMIk7htIZ2jp4X3XuoiHLCa7eH2KP4pmALYiyQ\r\nId69LB0GVtI6/t/9M9yxJVx6+nptHSP/RMUHTb6Y6JsXWJt2ymGA230eBSoB\r\nJbG5//ujIEBIO9c7hMoTI3Ym1dAyq7lO+0X0dTCSmxgJ7RJyNJfK8T4D/IUj\r\noMDFP9evph2g0qV8naiNbtqxKToz2JIaLK2NcZlZR2L9wESnSUWK5hjjoPxN\r\nz9migNB0pFbbaDECb1wrbIwEri4yAT16dVK+C+oS+q3E45TxaHc+PzeO5fho\r\nKbJlerrlqDhoAredDaHohTQklXcTrUADoFq/g9g0Mlw2DUTjeRd397RKI7OF\r\nx5R6eyLuJMgb4vUAKL6XugJeQbRyBYRVTDrNvufuRjWhHjLeBe93rrzOA/Ai\r\nv9vpJlWds8UyC2FS51OwXni6I4JrQ3G3H9+YUuqPuPFxOm61RFPnc656tbdF\r\nlVoFaSMoWRa+zoFA12hFVSx0HosS+DtdYZIaYkqUgscLcEWriYsVKHkJsxVn\r\n/qYYYxG6CVHfx/zXunSHMwOAs0iJ/DLCBN7Sfn/Z6TcxhoMU6qROBae0dPVU\r\nj5CzI/9gAkftR6B3u/2wsbNAO/iqy6hbU24=\r\n=9hL0\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie Populate Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"49456eed415ac67ee5c877df981970b17d8bf944","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^4.0.0-beta.13","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.0-beta.2_1674651515349_0.39271443454816946","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"3fee0b5a0c3f4554bb0de93ed3694671b5d3d9ae","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.0.tgz","fileCount":22,"integrity":"sha512-XZfgBFtmgALixiqmsbMlFwOdhlp7qtpnmAddcS2g4zWJh2PKLpm8XuiZqEQ6Ar8DFWBlP4zMNQLgjUcjazhg9Q==","signatures":[{"sig":"MEQCIEo2uHFJYsB+7D3R3dCvnaCnjbjcjdHnPDx57TAgikj6AiBpJc1VC2wo8NXKGnkrwLMK01U8HpoGij+IS2be+oltHw==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":820206,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj3n4hACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqtSw/9FSjdfCgw+tzqirMxZH3M0sT/3aeRetfCBwweIJxDeqQI+9hR\r\n4BE0SpFLI8VqT/SQ//qq+fOJ1L0I8qLkbcXi3/2sW3wtB6ATMyhGPWbeFYyh\r\no7yi2iRI3XYyjA6uuSXGjw3bR6FE5Bg4WwT92mx0l6Qev5uPjnwML/nz+ChP\r\n8NoN3rn+NDSqN1MEE9ZOWX5uAk7JmqGOLzfXW641ulcq8uV7jxjpOWVqUohk\r\n35jCaLyJmIcv5w5bUUyXlryCIFjkr3W8MD8SUSnCU1lY7qASVNHE64Yy9SYb\r\n8MnmhQpuEGgqsOMQIsGD95DfRBjp8vJw9Dtd8c6IQDQLpud83GLCZsFb06mo\r\n/8Yu4LQzRHEyuRtOBDNnvO1OsfS8e3I/R0p5rnTiGuDTQsCv0wUqzgm+PRI2\r\ngWwQUK2FZXzgHVBuXyTdRkILYxo5VKfr6fwomMSRT2PDmIRjA4GLiZLbOuhf\r\nmIN1bjkbrIgUA1GU/qOy1P8w+oOwX4RNOubJpvNgwoamWC2q2b1lwiKXqQib\r\n0e6G6OBjoeVfxRnyWUEiQ3flKwBcwtoA3/PaL+I66YDGIRrBr5mX6aTn+vuv\r\nJV+yfpG8tdsYpVJi/L/O/Yx5edsUAR0vrnjZyTUfGXbHfMveZnyKwBg5AlHi\r\nVp4F6tX4GgOYyQG8CfDTMvUdwh0e21U1fk8=\r\n=bri2\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"802ec1261061e4f9517d8460512989e98506585e","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.13.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.13.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^4.0.0-beta.13","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.0_1675525665427_0.5639439822875165","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.1-beta.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.1-beta.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.1-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"793a3f5d23b605aa024d4b06327fa6dcd259e11e","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.1-beta.0.tgz","fileCount":22,"integrity":"sha512-FHjgSH6L7qaQNk1Vq6ZvdtNkPnXxhFNMBjFAIQWqG1SmTSQIymQ2RjfyF749nBo2Q92fB5VjP0KAiXLHFm0oiw==","signatures":[{"sig":"MEQCIAs+XBMYIj2fWiVJASN3ZXJHISuvHZ+PYmpuk775sSydAiALpzQCJsF+csCIqq1lctS/f72iEwY3/r+QiDhA1yiSZQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":820448,"npm-signature":"-----BEGIN PGP SIGNATURE-----\r\nVersion: OpenPGP.js v4.10.10\r\nComment: https://openpgpjs.org\r\n\r\nwsFzBAEBCAAGBQJj5+IpACEJED1NWxICdlZqFiEECWMYAoorWMhJKdjhPU1b\r\nEgJ2VmqLCg/8DQXCL7ifayKchKDIKXgzmdl5aQVWrO0ef8QVzWLmWNn/Q67H\r\ntKgQ4jTcBD3NE3aKynB4IFnUCHHayXhPAprAMToghed57IBOsgKN+LfadaNo\r\nvjpUBMSDuBmuCM+4g8YMytSKm8LmMDgNHuNk+ZW7Lr9H3CQmV2dYeGNlKAWY\r\nnnrwv4DMOr8N+Nw3e05cHyp4+TGAr6HvBGADXXtQtYHJizMyhI6Kwp13e6gU\r\n+6BVzpPCVpLwF6mGDSLDSa7ZCm0eaCkyAlM4H4G4+Eq425HRZYfIem29x8KE\r\n7IT8NOnrG1tTOg8RHcZizJwuamNoh8661cKmGEC0/2CD+2Ru2luH6+GhKSVM\r\nw4XwN8tvdhN17QMPnrx6PZ4KNtHlxBt2PHpm+raCK/jHef9/qtAAVmOs5lLg\r\nk5sT2+UG43sjeDBzzegDcVWP3xAPZNPM52P5HjpG+kH+BGl+ql4ewzm4Gixv\r\nRKYwU/BbHN29Yq02+f478YH99dA/pu+bJ+sWAMannTo9piX/2iN2PYcvt6Zo\r\nZ6X4RZaPkLwBW/CBAiuLPQ5FgZAJDJqKsx5cTE18ceZ0cW0e6WXr3oPLqY0N\r\n15EE/ND0cXexrKAJVwUuO11y/lAY+6M6eKpqDQnqxmyjEPn9RA+0ePtkxBLp\r\nPY3o2I2kGMjXlZYCR6OkEYpidQUMlNLTU2c=\r\n=tX9v\r\n-----END PGP SIGNATURE-----\r\n"},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie RxJs Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"6513bccedaba5af491f52aa2e9ad3de895bd3a01","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.1.0/node@v18.14.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.14.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^4.0.0-beta.13","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.1-beta.0_1676141097159_0.1258312757341391","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.1":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.1","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.1","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"d0bfeec511b54e9e4ffdb2d4365be205b53e4148","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.1.tgz","fileCount":22,"integrity":"sha512-kTbqJsZKerigYHNFIh4J3/xv7oQ1BNh7YA9+Ertum5ddazOMC5oAO7GKnVvaEdhqLEAUTOpGcRqcKApiQ90GcA==","signatures":[{"sig":"MEQCIFQ7JGFBLdOuGOlFVu/sXvm+zTbPSthtGLs/VcqcgBH8AiB3gmSakxlzglLelGTVNohBpE5NxqCtKvezs6lAOe5MXQ==","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":826927},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","gitHead":"2d91ce711d3d8f6cc2f63692fc5c88a6046c42c1","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v18.16.0+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"18.16.0","dependencies":{"tslib":"^2.4.1","lodash.isequal":"^4.5.0","lodash.uniqwith":"^4.5.0","dexie-observable":"^4.0.0-beta.13","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"rxjs":"^7.8.0"},"peerDependencies":{"rxjs":"^7.0.0","dexie":"^3.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.1_1685013683229_0.24140429413380105","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"1.1.2-beta.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"1.1.2-beta.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@1.1.2-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"04aa9b0c1b7f6ea995261e0abd41f4b3d61a0e74","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-1.1.2-beta.0.tgz","fileCount":22,"integrity":"sha512-YdVUOQqo1wQ9f8Itv1nYtk4uc4GRacMQhiiLv0l1FLAbpwcl1j2dwZFD7JO4SXR2BHzKNSG0mDN6Rb4RuF2dyA==","signatures":[{"sig":"MEYCIQDgzzaY+JRt7gtZfc3vW1Sj02iRFTpWbEJvUxHtghwD4wIhAJsiM8eRUwDTbLbNbgW3DtRi6Cdnqhj6im5olllPGYzC","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":303179},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie RxJs Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"bd8be8ffe3c0f38734770351dff7deafe944145b","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v20.12.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tslib":"^2.4.1","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.0.0","dexie":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_1.1.2-beta.0_1714381972599_0.2355862073376791","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."},"2.0.0-beta.0":{"name":"@pvermeer/dexie-rxjs-addon","version":"2.0.0-beta.0","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"author":{"name":"PVermeer"},"license":"MIT","_id":"@pvermeer/dexie-rxjs-addon@2.0.0-beta.0","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"dist":{"shasum":"d3b3754cb5642e52ea87deb2f82c59431878dad2","tarball":"https://registry.npmjs.org/@pvermeer/dexie-rxjs-addon/-/dexie-rxjs-addon-2.0.0-beta.0.tgz","fileCount":22,"integrity":"sha512-U8pzNWjfO/EJd9iWbUmTsT8/9l9tPb9dnleuPBVHsc1P94DxLFA6hoKSejK66gHgbfKDMRHvinTYHKE1RvfE+w==","signatures":[{"sig":"MEUCIQCeAW/lgjXIZ1MSOj1qFEqs1ShG8b9t9TMG/qi/pIw0JQIgCdPpc/IO90fl/2G+RrSo1duDpxSkTcae41FswM5x71U=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":303720},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","readme":"# Dexie RxJs Addon\n\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n[![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-rxjs-addon/beta.svg)](https://www.npmjs.com/package/@pvermeer/dexie-rxjs-addon)\n![master](https://github.com/pvermeer/dexie-addon-suite-monorepo/actions/workflows/ci.yml/badge.svg?branch=master)\n[![lerna](https://img.shields.io/badge/maintained%20with-lerna-cc00ff.svg)](https://lerna.js.org/)\n[![Conventional Commits](https://img.shields.io/badge/Conventional%20Commits-1.0.0-yellow.svg)](https://conventionalcommits.org)\n\nThis addon can be used as a stand-alone addon for Dexie.js yet is also part of dexie-addon-suite [![NPM Version](https://img.shields.io/npm/v/@pvermeer/dexie-addon-suite/latest.svg)](https://www.npmjs.com/package/@pvermeer/dexie-addon-suite)\nthat combines a number of addons for Dexie. It contains code to combine some addons like populated rxjs observables.\n\n## Install over npm\n\n```\nnpm install @pvermeer/dexie-rxjs-addon rxjs\n```\n\n#### Dependencies\n\n**rxjs**: https://rxjs-dev.firebaseapp.com/\n\n**Dexie.js**:\nDexie RxJs Addon depends on Dexie.js v3. [![NPM Version](https://img.shields.io/npm/v/dexie/latest.svg)](https://www.npmjs.com/package/dexie)\n\n```\nnpm install dexie\n```\n\n## Documentation\n\n#### Extend RxJs to your Dexie Database!\n\nPlugin is written to extend Dexie.js with your own RxJs by adding methods and properties to the Dexie classes.\nRxJs is not bundled so you can use your own implementation.\n\nThis addon implements the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon to detect changes.\n\n### How to use\n\n#### Addon\n\nAdd dexieRxjs() to your Dexie database. See below examples and https://dexie.org for more info.\n\n#### changes$\n\nOn the Dexie database itself you can get an observable for all changes. It reflects the [Dexie.Observable](https://dexie.org/docs/Observable/Dexie.Observable) addon. See https://dexie.org/docs/Observable/Dexie.Observable for more info.\n\n```ts\ninterface Database {\n  /**\n   * Get on('changes') from 'dexie-observable' as an RxJs observable and observe changes.\n   * @link https://dexie.org/docs/Observable/Dexie.Observable\n   */\n  changes$: Observable<import(\"dexie-observable/api\").IDatabaseChange[]>;\n}\n```\n\n#### Table.$\n\nThe Dexie Tables are extended with `$` property. This returns a `ObservableTable` with many normal Table methods but now they return `Observable` instead of a `DexiePromise`.\n\n```ts\ninterface TableExtended<T, TKey> {\n  $: ObservableTable<T, TKey>;\n}\n```\n\n#### ObservableTable\n\nInstead of the `Dexie.Table` an `ObservableTable` is returned after using `$`.\n\n```ts\nclass ObservableTable<T, TKey> {\n  /**\n   * Observable stream of table changes.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public changes(): Observable<IDatabaseChange[]>;\n  /**\n   * Create an Observable Collection of this table.\n   */\n  public toCollection(): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public toArray(): Observable<T[]>;\n  /**\n   * Observable stream of a get request.\n   * Emits updated value on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public get(\n    keyOrequalityCriterias:\n      | TKey\n      | {\n          [key: string]: any;\n        }\n  ): Observable<T | undefined>;\n  /**\n   * Observable stream of a where query.\n   * Emits updated values on changes, including new or updated records that are in range.\n   * @return ObservableWhereClause that behaves like a normal Dexie where-clause or an ObservableCollection.\n   * @note Stays open so unsubscribe.\n   */\n  public where(index: string | string[]): ObservableWhereClause<T, TKey>;\n  public where(equalityCriterias: {\n    [key: string]: IndexableType;\n  }): ObservableCollection<T, TKey>;\n  /**\n   * Observable stream of the complete Table orderd by indexed key.\n   * Emits updated Table array on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public orderBy(index: string | string[]): ObservableCollection<T, TKey> {\n    const collection = this._table.orderBy(\n      Array.isArray(index) ? `[${index.join(\"+\")}]` : index\n    );\n    const observableCollection = new ObservableCollection(\n      this._db,\n      this._table,\n      collection\n    );\n    return observableCollection;\n  }\n  /**\n   * Observable stream of the complete Table count.\n   * Emits updated new number on changes.\n   * @note Stays open so unsubscribe.\n   */\n  public count(): Observable<number> {\n    const count$ = this.toCollection().count();\n    return count$;\n  }\n\n  // Mapped Dexie Table methods\n  public filter: (\n    ...args: Parameters<Table[\"filter\"]>\n  ) => ObservableCollection<T, TKey>;\n  public offset: (\n    ...args: Parameters<Table[\"offset\"]>\n  ) => ObservableCollection<T, TKey>;\n  public limit: (\n    ...args: Parameters<Table[\"limit\"]>\n  ) => ObservableCollection<T, TKey>;\n  public reverse: (\n    ...args: Parameters<Table[\"reverse\"]>\n  ) => ObservableCollection<T, TKey>;\n}\n```\n\n#### Example\n\n```ts\nimport { Subscription } from \"rxjs\";\n\nconst subs = new Subscription();\n\nconst friends = get20Friends(); // Array of 20 friends\nawait db.friends.bulkAdd(Friends);\n\nconst friend$ = await db.friends.$.get(1);\nconst table$ = await db.friends.$.toArray();\nconst friends$ = await db.friends.$.where(\":id\").anyOf([1, 13]).toArray();\n\nconst noFriends$ = await db.friends.$.where(\":id\").equals(99).toArray();\nconst lateFriend$ = await db.friends.$.where(\"customId\").equals(4556).toArray();\n\n// All observables emit on subscribe\nsubs.add(\n  // Logs friend with id 1\n  friend$.subscribe((friend) => {\n    console.log(friend);\n  })\n);\nsubs.add(\n  // Logs all 20 friends []\n  table$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs only friends with id 1 and 13 []\n  friends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with id 99 is added to the table\n  noFriends$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\nsubs.add(\n  // Logs empty array, does not emit until a friend with customId 4556 is added to the table\n  lateFriend$.subscribe((friends) => {\n    console.log(friends);\n  })\n);\n\nawait db.friends.update(1, { name: \"Testie\" });\n// Expect only friend$, table$, friends$ to log their updated results.\n\nawait db.friends.add({ customId: 4556 });\n// Expect only table$ and lateFriend$ to log their results.\n\n// Don't forget to unsubscribe when done! (many ways to handle this, see RxJs documentation and guides / blogs)\nsubs.unsubscribe();\n```\n\n### Load the addon\n\n#### Example (ESM)\n\n```js\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\n// Declare Database\nconst db = new Dexie(\"FriendDatabase\", {\n  addons: [dexieRxjs],\n});\ndb.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (Typescript)\n\n```ts\nimport Dexie from \"dexie\";\nimport { dexieRxjs } from \"@pvermeer/dexie-rxjs-addon\";\n\ninterface Friend {\n  id?: number;\n  name?: string;\n  shoeSize?: number;\n  age?: number;\n}\n\n// Declare Database\nclass FriendsDatabase extends Dexie {\n  public friends: Dexie.Table<Friend, string>;\n  constructor(name: string) {\n    super(name);\n    dexieRxjs(this);\n    this.version(1).stores({\n      friends: \"++id, name, shoeSize, age\",\n    });\n  }\n}\n\nconst db = new FriendDatabase(\"FriendsDatabase\");\n\n// Open the database\ndb.open().then(() => {\n  console.log(\"DB loaded! :D\");\n  // Use Dexie\n});\n```\n\n#### Example (HTML import)\n\nBundled & minified package: <https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js>.\n\nAddon is exported as namespace DexieRxjsAddon\n\n```html\n<!DOCTYPE html>\n<html>\n  <head>\n    <!-- Include Dexie -->\n    <script src=\"https://unpkg.com/dexie@latest/dist/dexie.js\"></script>\n\n    <!-- Include RxJs -->\n    <script src=\"https://unpkg.com/rxjs/dist/bundles/rxjs.umd.min.js\"></script>\n\n    <!-- Include DexieRxjsAddon (always after dependencies) -->\n    <script src=\"https://unpkg.com/@pvermeer/dexie-rxjs-addon@latest/dist/dexie-rxjs-addon.min.js\"></script>\n\n    <script>\n      // Define your database\n      const db = new Dexie(\"FriendDatabase\", {\n        addons: [DexieRxjsAddon.dexieRxjs],\n      });\n      db.version(1).stores({ friends: \"++id, name, shoeSize, age\" });\n\n      // Open the database\n      db.open().then(() => {\n        console.log(\"DB loaded! :D\");\n        // Do Dexie stuff\n      });\n    </script>\n  </head>\n</html>\n```\n\n## API\n\nThe packet exposes a single export:\n\n```ts\nfunction dexieRxjs(db: Dexie): void;\n```\n\nAlso exports some other classes and types to support further extension. See declaration or source.\n\n---\n\n# Dexie.js\n\nDexie.js is a wrapper library for indexedDB - the standard database in the browser. http://dexie.org\n","gitHead":"c319825809c3ece9f5e1083564b84b0cf9a1bcf4","scripts":{"lint":"npm run eslint .","test":"npm run lint && npm run test:jasmine && npm run test:karma","build":"bash ../../scripts/build-package.sh","eslint":"eslint --max-warnings=0 --config ../../.eslintrc.json --ignore-path ../../.gitignore --parser-options project:../../tsconfig.base.json","lint:fix":"npm run eslint:fix .","eslint:fix":"npm run eslint -- --fix","test:karma":"karma start ../../karma.conf.js  --context=$PWD","test:jasmine":"ts-node ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'","test:karma:debug":"karma start ../../karma.conf.js --context=$PWD --debug","test:jasmine:debug":"nodemon --inspect-brk=127.0.0.1:9334 -r ts-node/register ../../node_modules/jasmine/bin/jasmine --reporter=jasmine-console-reporter 'test/unit-tests/jasmine/**/*.spec.ts'"},"_npmUser":{"name":"pvermeer","email":"pim.vermeer@gmail.com"},"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"_npmVersion":"lerna/6.6.2/node@v20.12.2+x64 (linux)","description":"Addon for Dexie.js database to add rxjs observables","directories":{},"_nodeVersion":"20.12.2","dependencies":{"tslib":"^2.4.1","lodash.clonedeep":"^4.5.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"readmeFilename":"README.md","peerDependencies":{"rxjs":"^7.0.0","dexie":"^4.0.0"},"_npmOperationalInternal":{"tmp":"tmp/dexie-rxjs-addon_2.0.0-beta.0_1714411338312_0.400781535018341","host":"s3://npm-registry-packages"},"deprecated":"Package no longer supported. Contact Support at https://www.npmjs.com/support for more info."}},"time":{"created":"2020-02-08T15:42:10.756Z","modified":"2024-12-14T10:46:37.939Z","1.0.0-beta.1":"2020-02-08T15:42:10.936Z","1.0.0-beta.2":"2020-02-09T18:20:38.984Z","1.0.0-beta.3":"2020-03-09T14:38:54.263Z","1.0.0-beta.4":"2020-03-09T18:42:48.599Z","1.0.0-beta.5":"2020-03-09T18:54:26.987Z","1.0.0-beta.6":"2020-03-09T21:16:23.213Z","1.0.0-beta.7":"2020-03-16T11:05:03.493Z","1.0.0-beta.8":"2020-03-16T15:45:56.159Z","1.0.0-beta.9":"2020-03-17T14:47:01.345Z","1.0.0-beta.10":"2020-03-17T15:38:23.215Z","1.0.0-beta.11":"2020-03-17T22:27:54.176Z","1.0.0-beta.12":"2020-03-19T14:28:49.820Z","1.0.0-beta.13":"2020-03-20T16:07:08.261Z","1.0.0-beta.14":"2020-03-22T15:49:04.846Z","1.0.0-beta.15":"2020-03-23T11:57:19.943Z","1.0.0-beta.16":"2020-11-15T11:17:52.960Z","1.0.0-beta.17":"2020-11-22T13:24:09.068Z","1.0.0-beta.18":"2020-11-22T14:58:39.644Z","1.0.0-beta.19":"2021-11-21T18:09:41.880Z","1.0.0-beta.20":"2021-12-30T16:12:17.765Z","1.0.0-beta.21":"2021-12-30T17:21:19.291Z","1.0.0-beta.22":"2022-01-04T12:05:44.435Z","1.0.0-beta.23":"2022-01-04T15:00:14.770Z","1.0.0-beta.24":"2022-01-06T20:12:14.455Z","1.0.0-beta.25":"2022-01-07T17:57:21.295Z","1.0.0-beta.26":"2022-01-08T14:32:54.349Z","1.0.0-beta.27":"2022-01-09T21:09:47.346Z","1.0.0-beta.28":"2022-01-09T22:29:31.920Z","1.0.0-beta.29":"2022-01-21T17:15:17.188Z","1.0.0-beta.30":"2022-01-29T15:23:46.647Z","1.0.0-beta.31":"2022-01-30T17:24:01.355Z","1.0.0-beta.32":"2022-01-31T16:46:51.752Z","1.0.0-beta.33":"2022-01-31T17:54:20.361Z","1.0.0-beta.34":"2022-02-02T15:36:29.749Z","1.0.0-beta.35":"2022-02-02T18:39:57.215Z","1.0.0-beta.36":"2022-05-26T12:45:13.290Z","1.0.1":"2022-07-22T17:42:59.761Z","1.0.2":"2022-07-22T18:15:47.815Z","1.0.3-beta.0":"2022-11-07T18:37:58.402Z","1.0.3-beta.1":"2022-11-09T18:31:21.111Z","1.0.3-beta.2":"2022-11-11T23:13:23.644Z","1.0.3-beta.3":"2022-11-12T14:44:21.146Z","1.0.3-beta.4":"2022-12-05T12:07:25.496Z","1.0.3-beta.5":"2022-12-19T21:13:16.025Z","1.0.3":"2022-12-28T16:56:22.044Z","1.1.0-beta.0":"2023-01-20T19:26:10.346Z","1.1.0-beta.1":"2023-01-22T14:26:41.866Z","1.0.4":"2023-01-24T19:00:16.145Z","1.1.0-beta.2":"2023-01-25T12:58:35.589Z","1.1.0":"2023-02-04T15:47:45.631Z","1.1.1-beta.0":"2023-02-11T18:44:57.367Z","1.1.1":"2023-05-25T11:21:23.436Z","1.1.2-beta.0":"2024-04-29T09:12:52.748Z","2.0.0-beta.0":"2024-04-29T17:22:18.550Z"},"bugs":{"url":"https://github.com/PVermeer/dexie-addon-suite-monorepo/issues"},"author":{"name":"PVermeer"},"license":"MIT","homepage":"https://github.com/PVermeer/dexie-addon-suite-monorepo#readme","keywords":["dexie","dexie.js","indexeddb","database","rxjs","observable"],"repository":{"url":"git+https://github.com/PVermeer/dexie-addon-suite-monorepo.git","type":"git"},"description":"Addon for Dexie.js database to add rxjs observables","maintainers":[{"name":"pvermeer","email":"pim.vermeer@gmail.com"}],"readme":"","readmeFilename":""}