├── .babelrc ├── .editorconfig ├── .github ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── ISSUE_TEMPLATE.md └── PULL_REQUEST_TEMPLATE.md ├── .gitignore ├── CHANGELOG.md ├── LICENSE.txt ├── README.md ├── dist ├── es2015 │ ├── connection │ │ ├── connector.interface.js │ │ ├── connector.interface.js.map │ │ ├── connector.js │ │ ├── connector.js.map │ │ ├── idb-event.interface.js │ │ └── idb-event.interface.js.map │ ├── errors │ │ ├── invalid-transaction.js │ │ ├── invalid-transaction.js.map │ │ ├── not-found.js │ │ └── not-found.js.map │ ├── index.js │ ├── index.js.map │ ├── migration │ │ ├── migration.interface.js │ │ ├── migration.interface.js.map │ │ ├── migration.js │ │ └── migration.js.map │ ├── models │ │ ├── aggregate.js │ │ ├── aggregate.js.map │ │ ├── base-model.js │ │ ├── base-model.js.map │ │ ├── base-write-actions.js │ │ ├── base-write-actions.js.map │ │ ├── find-fail-actions.js │ │ ├── find-fail-actions.js.map │ │ ├── find-or-create-actions.js │ │ ├── find-or-create-actions.js.map │ │ ├── model.interface.js │ │ ├── model.interface.js.map │ │ ├── model.js │ │ ├── model.js.map │ │ ├── orm-relation-builder.js │ │ ├── orm-relation-builder.js.map │ │ ├── query-builder.js │ │ ├── query-builder.js.map │ │ ├── relation.builder.js │ │ ├── relation.builder.js.map │ │ ├── search-actions.js │ │ ├── search-actions.js.map │ │ ├── transaction-handling.js │ │ └── transaction-handling.js.map │ ├── relations │ │ ├── has-many-multi.js │ │ ├── has-many-multi.js.map │ │ ├── has-many-through-multi.js │ │ ├── has-many-through-multi.js.map │ │ ├── has-many.js │ │ ├── has-many.js.map │ │ ├── has-one.js │ │ ├── has-one.js.map │ │ ├── relation.interface.js │ │ ├── relation.interface.js.map │ │ ├── relations.js │ │ └── relations.js.map │ ├── utils.js │ └── utils.js.map ├── idb.js └── idb.js.map ├── example ├── index.html └── worker.js ├── package.json ├── src ├── connection │ ├── connector.d.ts │ ├── connector.interface.d.ts │ ├── connector.interface.ts │ ├── connector.ts │ ├── idb-event.interface.d.ts │ └── idb-event.interface.ts ├── errors │ ├── invalid-transaction.d.ts │ ├── invalid-transaction.ts │ ├── not-found.d.ts │ └── not-found.ts ├── index.d.ts ├── index.ts ├── migration │ ├── migration.d.ts │ ├── migration.interface.d.ts │ ├── migration.interface.ts │ └── migration.ts ├── models │ ├── aggregate.d.ts │ ├── aggregate.ts │ ├── base-model.d.ts │ ├── base-model.ts │ ├── base-write-actions.d.ts │ ├── base-write-actions.ts │ ├── find-fail-actions.d.ts │ ├── find-fail-actions.ts │ ├── find-or-create-actions.d.ts │ ├── find-or-create-actions.ts │ ├── model.d.ts │ ├── model.interface.d.ts │ ├── model.interface.ts │ ├── model.ts │ ├── orm-relation-builder.d.ts │ ├── orm-relation-builder.ts │ ├── query-builder.d.ts │ ├── query-builder.ts │ ├── relation.builder.d.ts │ ├── relation.builder.ts │ ├── search-actions.d.ts │ ├── search-actions.ts │ ├── transaction-handling.d.ts │ └── transaction-handling.ts ├── relations │ ├── has-many-multi.d.ts │ ├── has-many-multi.ts │ ├── has-many-through-multi.d.ts │ ├── has-many-through-multi.ts │ ├── has-many.d.ts │ ├── has-many.ts │ ├── has-one.d.ts │ ├── has-one.ts │ ├── relation.interface.d.ts │ ├── relation.interface.ts │ ├── relations.d.ts │ └── relations.ts ├── utils.d.ts └── utils.ts ├── tsconfig.json ├── tslint.json ├── webpack.config.js └── yarn.lock /.babelrc: -------------------------------------------------------------------------------- 1 | { 2 | "presets": ["@babel/env"], 3 | "plugins": ["@babel/plugin-transform-runtime"] 4 | } 5 | -------------------------------------------------------------------------------- /.editorconfig: -------------------------------------------------------------------------------- 1 | # https://editorconfig.org 2 | 3 | root = true 4 | 5 | [*] 6 | charset = utf-8 7 | indent_style = space 8 | indent_size = 2 9 | end_of_line = lf 10 | insert_final_newline = true 11 | trim_trailing_whitespace = true 12 | 13 | [*.md] 14 | insert_final_newline = false 15 | trim_trailing_whitespace = false 16 | -------------------------------------------------------------------------------- /.github/CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and our community a harassment-free experience for everyone, regardless of age, body size, disability, ethnicity, gender identity and expression, level of experience, nationality, personal appearance, race, religion, or sexual identity and orientation. 6 | 7 | ## Our Standards 8 | 9 | Examples of behavior that contributes to creating a positive environment include: 10 | 11 | * Using welcoming and inclusive language 12 | * Being respectful of differing viewpoints and experiences 13 | * Gracefully accepting constructive criticism 14 | * Focusing on what is best for the community 15 | * Showing empathy towards other community members 16 | 17 | Examples of unacceptable behavior by participants include: 18 | 19 | * The use of sexualized language or imagery and unwelcome sexual attention or advances 20 | * Trolling, insulting/derogatory comments, and personal or political attacks 21 | * Public or private harassment 22 | * Publishing others' private information, such as a physical or electronic address, without explicit permission 23 | * Other conduct which could reasonably be considered inappropriate in a professional setting 24 | 25 | ## Our Responsibilities 26 | 27 | Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in response to any instances of unacceptable behavior. 28 | 29 | Project maintainers have the right and responsibility to remove, edit, or reject comments, commits, code, wiki edits, issues, and other contributions that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. 30 | 31 | ## Scope 32 | 33 | This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of representing a project or community include using an official project e-mail address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. 34 | 35 | ## Enforcement 36 | 37 | Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at max.gaurav@ithands.net. The project team will review and investigate all complaints, and will respond in a way that it deems appropriate to the circumstances. The project team is obligated to maintain confidentiality with regard to the reporter of an incident. Further details of specific enforcement policies may be posted separately. 38 | 39 | Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. 40 | 41 | ## Attribution 42 | 43 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available at [http://contributor-covenant.org/version/1/4][version] 44 | 45 | [homepage]: http://contributor-covenant.org 46 | [version]: http://contributor-covenant.org/version/1/4/ 47 | -------------------------------------------------------------------------------- /.github/CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **ORM version:** (check one with "x") 2 | [ ] **1.x** 3 | [ ] **2.x** 4 | 5 | **I'm submitting a ...** (check one with "x") 6 | ``` 7 | [ ] bug report => search github for a similar issue or PR before submitting 8 | [ ] feature request 9 | [ ] support request => Please do not submit support request here, instead use WordPress forums 10 | ``` 11 | 12 | **Tell about your platform** 13 | * Operating System : x.x.x 14 | * Browser and version: Chrome|Firefox|Safari|IE|Edge vx.x.x 15 | 16 | 17 | **Current behavior** 18 | 19 | 20 | **Expected behavior** 21 | 22 | 23 | **Steps to reproduce:** 24 | 25 | 26 | **Minimal reproduction of the problem with instructions** 27 | 30 | 31 | **Related code:** 32 | 33 | ``` 34 | insert any relevant code here 35 | ``` 36 | 37 | **Relevant error:** 38 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | **ORM version:** (check one with "x") 2 | ``` 3 | [ ] 1.x 4 | [ ] 2.x 5 | ``` 6 | 7 | **What kind of change does this PR introduce?** (check one with "x") 8 | ``` 9 | [ ] Bugfix 10 | [ ] Feature 11 | [ ] Code style update (formatting, local variables) 12 | [ ] Refactoring (no functional changes) 13 | [ ] Build related changes 14 | [ ] CI related changes 15 | [ ] Other... Please describe: 16 | ``` 17 | 18 | **Tell about your platform if it fixes a bug** 19 | * Operating System : x.x.x 20 | * Browser and version: Chrome|Firefox|Safari|IE|Edge vx.x.x 21 | 22 | **What is the current behavior?** (You can also link to an open issue here) 23 | 24 | 25 | **What is the new behavior?** -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | .idea 2 | /node_modules 3 | .DS_Store 4 | dist/es2015/tsconfig.tsbuildinfo 5 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog 2 | 3 | ## [3.2.1](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.2.1) _(Latest Release)_ 4 | 5 | ### Added 6 | - Added close connection function **close** to close currently open connection 7 | 8 | ## [3.2.0](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.2.0) 9 | ### Bug Fixes 10 | - Fix **openTransaction** on model not returning ORM Class. 11 | 12 | ### Added 13 | - Sync actions **(sync, syncIndex, syncIndexAll)** to update and retrieve the updated record on success. 14 | - Added schema configuration to allow opt-in for maintaining synced on date when calling sync actions. Will add/update **syncOn** attribute 15 | - Added **saveIndex** to save data on index. It's optimized for single action transaction over update 16 | - Added **saveAllIndex** to save data on all matching index. 17 | 18 | ### Changed 19 | - **Connector** class and **index** file refactored to remove reference of **window** action so that the package can be imported in web workers. 20 | 21 | ### Other 22 | - Refactored **model.ts** file to multiple files to maintain single file single responsibility principle. 23 | 24 | ## [3.1.1](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.1.1) 25 | ### Bug Fixes 26 | - Fixed find or create actions some times opening in read mode only 27 | 28 | ### Added 29 | - Find or create actions now throw **InvalidTransaction** error if transaction is not in write mode 30 | 31 | ## [3.1.0](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.1.0) 32 | ### Added 33 | - Add **firstOrFail, findOrFail, findIndexOrFail** actions which will find the value or throw **NotFound** error 34 | - Add **firstOrCreate, findOrCreate, findIndexOrCreate** actions which will find the value or create new value return it. 35 | - Add **findAllIndex** action which will return all values as array for the matching index. 36 | 37 | ### Changed 38 | - **save** now throws **NotFound** Error over default Error. 39 | - **findIndex** resets the builder settings before finding on index. 40 | - Readme changes with latest usage of library. 41 | 42 | ### Bug Fixes 43 | - Fix: Orm Class instance mapping in Schema for typescript causing interface mismatch 44 | 45 | 46 | ## [3.0.1](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.0.1) 47 | - Readme changes 48 | 49 | ## [3.0.0](https://github.com/maxgaurav/indexeddb-orm/releases/tag/v3.0.0) 50 | 51 | ### Added 52 | - Added **with** to add relation handling. Takes in array of relations. 53 | - Added **withCustom** to add relation of ORM as string values. 54 | - Added **delete** to replace **destroyId**. 55 | - Added **deleteIndex** to delete matching values directly on index. 56 | - Added ORM class instance extending Model class to be used over default Model class 57 | - Added new relation **HasManyThroughMultiEntry**. 58 | - Providing both es6 module for modular programming and direct script based injection through **idb.js** 59 | 60 | ### Deprecation 61 | - Deprecated **relation** function on models to add relation. Use **with**. 62 | - Deprecated **destroyId** function mon models. Use **delete**. 63 | 64 | ### Removals 65 | - Worker instance handling 66 | - Deletion of indexes and object stores by providing drop settings is removed. These are now handled automatically by comparing 67 | existing database structure with table schemas provided. 68 | 69 | ## [2.1.0](https://github.com/maxgaurav/indexeddb-orm) 70 | - Addition of Multi-Entry relation 71 | - Add documentation of usage of multi-entry relation 72 | 73 | ## [2.0.0](https://github.com/maxgaurav/indexeddb-orm) Release _(Breaking Changes)_ 74 | 75 | ### Change 76 | - Main code base moved to typescript 77 | - Web Worker handling changed from event driven to MessageChannel 78 | - MessageChannel implementation in future will allow use of SharedArrayBuffer to improve performance 79 | - Settings now takes **name** over **dbName** for database name 80 | - Settings now takes **version** over **dbVersion** for database version 81 | - New **idb** instance now takes in settings, useWebworker and pathToWebworker parameters over single config settings 82 | - Primary keyPath of objectstores/tables changed to **_id** from **id** 83 | 84 | ### Added 85 | - Dedicated transaction action to both main thread and worker thread 86 | - DB instance gives access to Migration 87 | - DB instance gives access to IDBDatabase 88 | - Models now have **openTransaction** function to create dedicated transaction 89 | 90 | ### Updated 91 | - Model interaction handling to code to be asynchronous 92 | 93 | ### Fixed 94 | - Nested relation not working with normal transaction 95 | 96 | ### Removed 97 | - Removed build folder and replaced with dist folder 98 | - Removed **transaction** function from the main database **DB** instance. Instead use **_model_.openTransaction** 99 | - Removed **get** function and replaced with **all**. 100 | 101 | ## [1.0.1](https://github.com/maxgaurav/indexeddb-orm/tree/orm-1.0.1) Initial Release 102 | - Add base DB interface 103 | - Add migrations 104 | - Add models content on DB connect 105 | - Base Model interaction 106 | - Web Worker implementation 107 | - Model Relations 108 | -------------------------------------------------------------------------------- /LICENSE.txt: -------------------------------------------------------------------------------- 1 | Copyright (c) 2017 Max Gaurav 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. -------------------------------------------------------------------------------- /dist/es2015/connection/connector.interface.js: -------------------------------------------------------------------------------- 1 | //# sourceMappingURL=connector.interface.js.map -------------------------------------------------------------------------------- /dist/es2015/connection/connector.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"connector.interface.js","sourceRoot":"","sources":["../../../src/connection/connector.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /dist/es2015/connection/connector.js: -------------------------------------------------------------------------------- 1 | import { Migration } from "../migration/migration.js"; 2 | import { Model } from "../models/model.js"; 3 | /** 4 | * 5 | */ 6 | export class Connector { 7 | constructor(migrationSchema) { 8 | this.migrationSchema = migrationSchema; 9 | /** 10 | * Database open request 11 | */ 12 | this.dbOpenConnection = null; 13 | /** 14 | * Migration builder instance 15 | */ 16 | this.migration = null; 17 | /** 18 | * IndexedDB Database instance 19 | */ 20 | this.database = null; 21 | } 22 | /** 23 | * Create/Update and connects the database 24 | */ 25 | connect() { 26 | this.dbOpenConnection = this.indexedDB().open(this.migrationSchema.name, this.migrationSchema.version); 27 | return new Promise((resolve, reject) => { 28 | if (this.dbOpenConnection === null) { 29 | throw new Error('Database connection did not open'); 30 | } 31 | this.dbOpenConnection.addEventListener('success', (event) => { 32 | const models = this.completeHandler(event); 33 | resolve(models); 34 | }); 35 | this.dbOpenConnection.addEventListener('error', (event) => { 36 | reject(event); 37 | }); 38 | this.dbOpenConnection.addEventListener('upgradeneeded', async (event) => { 39 | await this.migrateHandler(event); 40 | }); 41 | }); 42 | } 43 | /** 44 | * Deletes the database 45 | */ 46 | destroy(databaseName) { 47 | const request = this.indexedDB().deleteDatabase(databaseName); 48 | return new Promise((resolve, reject) => { 49 | request.addEventListener('success', () => resolve(true)); 50 | request.addEventListener('error', (e) => reject(e)); 51 | }); 52 | } 53 | /** 54 | * Returns the IDBFactory. 55 | */ 56 | indexedDB() { 57 | const idb = indexedDB || self.indexedDB || self.mozIndexedDB || self.webkitIndexedDB || self.msIndexedDB; 58 | if (!idb) { 59 | throw new Error("IndexedDB constructor not found in environment"); 60 | } 61 | return idb; 62 | } 63 | /** 64 | * Called when database version is updated. Runs migrations to update schema structure 65 | * @param event 66 | */ 67 | async migrateHandler(event) { 68 | const migration = new Migration(this.migrationSchema.tables, event.target.result, event.target.transaction); 69 | this.migrationSchema.tables = await migration.run(); 70 | return true; 71 | } 72 | /** 73 | * Called when connection to database is successful. Creates various models for the tables. 74 | * @param event 75 | */ 76 | completeHandler(event) { 77 | const storeNames = this.migrationSchema.tables.map(table => table.name); 78 | const transaction = event.target.transaction || event.target.result.transaction(storeNames); 79 | this.database = event.target.result; 80 | const migration = new Migration(this.migrationSchema.tables, event.target.result, transaction); 81 | this.migration = migration; 82 | const stores = migration.listObjectStores(); 83 | const models = {}; 84 | for (const store of stores) { 85 | const table = this.migrationSchema.tables.find(schema => schema.name === store.name); 86 | Object.defineProperty(models, store.name, { 87 | get: () => { 88 | if (table.ormClass) { 89 | return new table.ormClass(event.target.result, table, this); 90 | } 91 | else { 92 | return new Model(event.target.result, table, this); 93 | } 94 | } 95 | }); 96 | } 97 | return models; 98 | } 99 | /** 100 | * Returns migration instance 101 | */ 102 | getMigration() { 103 | return this.migration; 104 | } 105 | /** 106 | * Returns database instance 107 | */ 108 | getDatabase() { 109 | return this.database; 110 | } 111 | /** 112 | * Opens a transaction to allow fine control on commits. 113 | * @param mode 114 | */ 115 | openTransaction(mode) { 116 | if (this.database === null) { 117 | throw new Error('First initialize the connection using connect.'); 118 | } 119 | const transaction = this.database.transaction(this.migrationSchema.tables.map(table => table.name)); 120 | const models = {}; 121 | for (const table of this.migrationSchema.tables) { 122 | Object.defineProperty(models, table.name, { 123 | get: () => { 124 | const model = new Model(this.database, table, this); 125 | model.setTransaction(transaction); 126 | return model; 127 | } 128 | }); 129 | } 130 | return { models, transaction }; 131 | } 132 | /** 133 | * Closes currently open connection to database 134 | */ 135 | close() { 136 | if (this.database) { 137 | this.database.close(); 138 | return Promise.resolve(true); 139 | } 140 | return Promise.reject('No Connection open'); 141 | } 142 | } 143 | //# sourceMappingURL=connector.js.map -------------------------------------------------------------------------------- /dist/es2015/connection/connector.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"connector.js","sourceRoot":"","sources":["../../../src/connection/connector.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/connection/idb-event.interface.js: -------------------------------------------------------------------------------- 1 | //# sourceMappingURL=idb-event.interface.js.map -------------------------------------------------------------------------------- /dist/es2015/connection/idb-event.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"idb-event.interface.js","sourceRoot":"","sources":["../../../src/connection/idb-event.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /dist/es2015/errors/invalid-transaction.js: -------------------------------------------------------------------------------- 1 | export class InvalidTransaction extends Error { 2 | } 3 | //# sourceMappingURL=invalid-transaction.js.map -------------------------------------------------------------------------------- /dist/es2015/errors/invalid-transaction.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"invalid-transaction.js","sourceRoot":"","sources":["../../../src/errors/invalid-transaction.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,kBAAmB,SAAQ,KAAK;CAE5C"} -------------------------------------------------------------------------------- /dist/es2015/errors/not-found.js: -------------------------------------------------------------------------------- 1 | export class NotFound extends Error { 2 | constructor() { 3 | super('Record not found'); 4 | } 5 | } 6 | //# sourceMappingURL=not-found.js.map -------------------------------------------------------------------------------- /dist/es2015/errors/not-found.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"not-found.js","sourceRoot":"","sources":["../../../src/errors/not-found.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,QAAS,SAAQ,KAAK;IACjC;QACE,KAAK,CAAC,kBAAkB,CAAC,CAAC;IAC5B,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/index.js: -------------------------------------------------------------------------------- 1 | import { Connector } from "./connection/connector.js"; 2 | import { Model } from "./models/model.js"; 3 | import { Migration } from "./migration/migration.js"; 4 | import { CursorDirection, RelationTypes, TransactionModes } from "./models/model.interface.js"; 5 | ((self) => { 6 | self.idb = (schema) => { 7 | return new Connector(schema); 8 | }; 9 | self.idbTypes = { 10 | CursorTypes: { 11 | 'AscendingUnique': CursorDirection.AscendingUnique, 12 | 'Ascending': CursorDirection.Ascending, 13 | 'Descending': CursorDirection.Descending, 14 | 'DescendingUnique': CursorDirection.DescendingUnique 15 | }, 16 | RelationTypes: { 17 | 'HasManyThroughMultiEntry': RelationTypes.HasManyThroughMultiEntry, 18 | 'HasManyMultiEntry': RelationTypes.HasManyMultiEntry, 19 | 'HasMany': RelationTypes.HasMany, 20 | 'HasOne': RelationTypes.HasOne 21 | }, 22 | TransactionModes: { 23 | 'ReadOnly': TransactionModes.ReadOnly, 24 | 'Write': TransactionModes.Write, 25 | 'VersionChange': TransactionModes.VersionChange, 26 | } 27 | }; 28 | })(self); 29 | export { Connector, Model, Migration, RelationTypes, CursorDirection }; 30 | //# sourceMappingURL=index.js.map -------------------------------------------------------------------------------- /dist/es2015/index.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,2BAA2B,CAAC;AACpD,OAAO,EAAC,KAAK,EAAC,MAAM,mBAAmB,CAAC;AACxC,OAAO,EAAC,SAAS,EAAC,MAAM,0BAA0B,CAAC;AACnD,OAAO,EAAC,eAAe,EAAE,aAAa,EAAE,gBAAgB,EAAC,MAAM,6BAA6B,CAAC;AAG7F,CAAC,CAAC,IAAI,EAAE,EAAE;IAER,IAAI,CAAC,GAAG,GAAG,CAAC,MAAgB,EAAE,EAAE;QAC9B,OAAO,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC;IAC/B,CAAC,CAAC;IAEF,IAAI,CAAC,QAAQ,GAAG;QACd,WAAW,EAAE;YACX,iBAAiB,EAAE,eAAe,CAAC,eAAe;YAClD,WAAW,EAAE,eAAe,CAAC,SAAS;YACtC,YAAY,EAAE,eAAe,CAAC,UAAU;YACxC,kBAAkB,EAAE,eAAe,CAAC,gBAAgB;SACrD;QACD,aAAa,EAAE;YACb,0BAA0B,EAAE,aAAa,CAAC,wBAAwB;YAClE,mBAAmB,EAAE,aAAa,CAAC,iBAAiB;YACpD,SAAS,EAAE,aAAa,CAAC,OAAO;YAChC,QAAQ,EAAE,aAAa,CAAC,MAAM;SAC/B;QACD,gBAAgB,EAAE;YAChB,UAAU,EAAE,gBAAgB,CAAC,QAAQ;YACrC,OAAO,EAAE,gBAAgB,CAAC,KAAK;YAC/B,eAAe,EAAE,gBAAgB,CAAC,aAAa;SAChD;KACF,CAAC;AACJ,CAAC,CAAC,CAAC,IAAW,CAAC,CAAC;AAGhB,OAAO,EAAC,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAC,CAAC"} -------------------------------------------------------------------------------- /dist/es2015/migration/migration.interface.js: -------------------------------------------------------------------------------- 1 | export const DEFAULT_SYNC_COLUMN_NAME = 'syncOn'; 2 | //# sourceMappingURL=migration.interface.js.map -------------------------------------------------------------------------------- /dist/es2015/migration/migration.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"migration.interface.js","sourceRoot":"","sources":["../../../src/migration/migration.interface.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,wBAAwB,GAAG,QAAQ,CAAC"} -------------------------------------------------------------------------------- /dist/es2015/migration/migration.js: -------------------------------------------------------------------------------- 1 | import { DEFAULT_SYNC_COLUMN_NAME } from "./migration.interface.js"; 2 | import { DEFAULT_PRIMARY_ID } from "../models/model.interface.js"; 3 | export class Migration { 4 | constructor(tables, db, transaction) { 5 | this.tables = tables; 6 | this.db = db; 7 | this.transaction = transaction; 8 | } 9 | /** 10 | * Runs the migration action to update the database with new stores or deletes unwanted stored and then creates or 11 | * drops indexes for the stores. 12 | */ 13 | async run() { 14 | for (const table of this.tables) { 15 | if (!this.db.objectStoreNames.contains(table.name)) { 16 | table.objectStore = this.createObjectStore(table); 17 | } 18 | else { 19 | table.objectStore = this.transaction.objectStore(table.name); 20 | } 21 | this.createColumns(table, table.objectStore); 22 | this.dropOldColumns(table, table.objectStore); 23 | this.setupSyncColumn(table, table.objectStore); 24 | } 25 | for (const tableName of this.allStoreNames()) { 26 | if (!this.tables.find(table => table.name === tableName)) { 27 | this.db.deleteObjectStore(tableName); 28 | } 29 | } 30 | return this.tables; 31 | } 32 | /** 33 | * Creates an index in object store 34 | * @param column 35 | * @param objectStore 36 | */ 37 | createIndex(column, objectStore) { 38 | const attributes = column.attributes || {}; 39 | const index = column.index || column.name; 40 | return objectStore.createIndex(column.name, index, attributes); 41 | } 42 | /** 43 | * Drops an index in object store 44 | * @param column 45 | * @param objectStore 46 | */ 47 | dropIndex(column, objectStore) { 48 | objectStore.deleteIndex(column); 49 | return true; 50 | } 51 | /** 52 | * Creates new object store 53 | * @param schema 54 | */ 55 | createObjectStore(schema) { 56 | let primary = schema.primary || DEFAULT_PRIMARY_ID; 57 | return this.db.createObjectStore(schema.name, { 58 | keyPath: primary, 59 | autoIncrement: true 60 | }); 61 | } 62 | /** 63 | * Drops existing object store 64 | * @param schema 65 | */ 66 | dropObjectStore(schema) { 67 | return true; 68 | } 69 | /** 70 | * Creates various indexes on object store 71 | * @param table 72 | * @param objectStore 73 | */ 74 | createColumns(table, objectStore) { 75 | for (const column of table.columns) { 76 | if (!objectStore.indexNames.contains(column.name)) { 77 | column.dbIndex = this.createIndex(column, objectStore); 78 | } 79 | } 80 | } 81 | /** 82 | * Drops indexes in object store 83 | * @param table 84 | * @param objectStore 85 | */ 86 | dropOldColumns(table, objectStore) { 87 | const indexNames = objectStore.indexNames; 88 | for (let i = 0; i < indexNames.length; i++) { 89 | if (!table.columns.find(column => column.name === indexNames[i])) { 90 | this.dropIndex(indexNames[i], objectStore); 91 | } 92 | } 93 | } 94 | /** 95 | * Returns a list of all object store names which are in current database 96 | */ 97 | allStoreNames() { 98 | const names = []; 99 | for (let i = 0; i < this.db.objectStoreNames.length; i++) { 100 | names.push(this.db.objectStoreNames[i]); 101 | } 102 | return names; 103 | } 104 | /** 105 | * Returns all object store instances in database 106 | */ 107 | listObjectStores() { 108 | const stores = []; 109 | for (const tableName of this.allStoreNames()) { 110 | stores.push(this.transaction.objectStore(tableName)); 111 | } 112 | return stores; 113 | } 114 | /** 115 | * Returns true if column is to be created 116 | * @param schema 117 | * @param objectStore 118 | */ 119 | setupSyncColumn(schema, objectStore) { 120 | const columnName = schema.syncColumnName || DEFAULT_SYNC_COLUMN_NAME; 121 | if (schema.syncColumn) { 122 | if (!objectStore.indexNames.contains(columnName)) { 123 | this.createIndex({ 124 | name: columnName, 125 | index: columnName 126 | }, objectStore); 127 | } 128 | } 129 | else { 130 | if (objectStore.indexNames.contains(columnName)) { 131 | this.dropIndex(columnName, objectStore); 132 | } 133 | } 134 | } 135 | } 136 | //# sourceMappingURL=migration.js.map -------------------------------------------------------------------------------- /dist/es2015/migration/migration.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"migration.js","sourceRoot":"","sources":["../../../src/migration/migration.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,wBAAwB,EAA+C,MAAM,0BAA0B,CAAC;AAChH,OAAO,EAAC,kBAAkB,EAAC,MAAM,8BAA8B,CAAC;AAEhE,MAAM,OAAO,SAAS;IACpB,YAAmB,MAAqB,EAAS,EAAe,EAAS,WAAkC;QAAxF,WAAM,GAAN,MAAM,CAAe;QAAS,OAAE,GAAF,EAAE,CAAa;QAAS,gBAAW,GAAX,WAAW,CAAuB;IAC3G,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,GAAG;QACd,KAAK,MAAM,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE;YAC/B,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;gBAClD,KAAK,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;aAEnD;iBAAM;gBACL,KAAK,CAAC,WAAW,GAAI,IAAI,CAAC,WAA8B,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;aAClF;YAED,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAC7C,IAAI,CAAC,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;YAC9C,IAAI,CAAC,eAAe,CAAC,KAAK,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC;SAChD;QAED,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC5C,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,EAAE;gBACxD,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,SAAS,CAAC,CAAC;aACtC;SACF;QAED,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,MAAmB,EAAE,WAA2B;QACjE,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;QAC3C,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,IAAI,CAAC;QAC1C,OAAO,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,UAAU,CAAC,CAAC;IACjE,CAAC;IAED;;;;OAIG;IACI,SAAS,CAAC,MAAc,EAAE,WAA2B;QAC1D,WAAW,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;QAEhC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,iBAAiB,CAAC,MAAmB;QAC1C,IAAI,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,kBAAkB,CAAC;QAEnD,OAAO,IAAI,CAAC,EAAE,CAAC,iBAAiB,CAAC,MAAM,CAAC,IAAI,EAAE;YAC5C,OAAO,EAAE,OAAO;YAChB,aAAa,EAAE,IAAI;SACpB,CAAC,CAAC;IACL,CAAC;IAED;;;OAGG;IACI,eAAe,CAAC,MAAmB;QACxC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACO,aAAa,CAAC,KAAkB,EAAE,WAA2B;QACrE,KAAK,MAAM,MAAM,IAAI,KAAK,CAAC,OAAO,EAAE;YAElC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;gBACjD,MAAM,CAAC,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;aACxD;SACF;IACH,CAAC;IAED;;;;OAIG;IACO,cAAc,CAAC,KAAkB,EAAE,WAA2B;QACtE,MAAM,UAAU,GAAG,WAAW,CAAC,UAAU,CAAC;QAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE;gBAChE,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;aAC5C;SACF;IAEH,CAAC;IAED;;OAEG;IACK,aAAa;QACnB,MAAM,KAAK,GAAa,EAAE,CAAC;QAE3B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;YACxD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAC;SACzC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;OAEG;IACI,gBAAgB;QACrB,MAAM,MAAM,GAAqB,EAAE,CAAC;QACpC,KAAK,MAAM,SAAS,IAAI,IAAI,CAAC,aAAa,EAAE,EAAE;YAC5C,MAAM,CAAC,IAAI,CAAE,IAAI,CAAC,WAA8B,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;SAC1E;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACI,eAAe,CAAC,MAAmB,EAAE,WAA2B;QACrE,MAAM,UAAU,GAAG,MAAM,CAAC,cAAc,IAAI,wBAAwB,CAAC;QAErE,IAAI,MAAM,CAAC,UAAU,EAAE;YACrB,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAChD,IAAI,CAAC,WAAW,CAAC;oBACf,IAAI,EAAE,UAAU;oBAChB,KAAK,EAAE,UAAU;iBAClB,EAAE,WAAW,CAAC,CAAC;aACjB;SAEF;aAAM;YACL,IAAI,WAAW,CAAC,UAAU,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;gBAC/C,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,WAAW,CAAC,CAAC;aACzC;SACF;IACH,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/models/aggregate.js: -------------------------------------------------------------------------------- 1 | import { TransactionModes } from "./model.interface.js"; 2 | import { nestedAttributeValue } from "../utils.js"; 3 | import { BaseModel } from "./base-model.js"; 4 | export class Aggregate extends BaseModel { 5 | constructor(db, table) { 6 | super(); 7 | this.db = db; 8 | this.table = table; 9 | } 10 | /** 11 | * Returns the count of matching records 12 | */ 13 | count() { 14 | const tables = [this.table.name]; 15 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 16 | const objectStore = transaction.objectStore(this.table.name); 17 | let request; 18 | if (this.builder.length === 0 && this.indexBuilder === null) { 19 | request = objectStore.count(); 20 | } 21 | else if (this.builder.length === 0 && this.indexBuilder !== null) { 22 | request = objectStore.count(this.keyRange(this.indexBuilder)); 23 | } 24 | else { 25 | request = this.request(objectStore); 26 | } 27 | return new Promise((resolve, reject) => { 28 | let count = 0; 29 | request.addEventListener("success", async (event) => { 30 | if (this.builder.length === 0) { 31 | return resolve(event.target.result); 32 | } 33 | const cursor = event.target.result; 34 | if (cursor) { 35 | if (!this.allowedToProcess(cursor.value)) { 36 | return cursor.continue(); 37 | } 38 | count++; 39 | return cursor.continue(); 40 | } 41 | resolve(count); 42 | }); 43 | request.addEventListener("error", (error) => reject(error)); 44 | }); 45 | } 46 | /** 47 | * Returns average of attribute value on matching records. 48 | * If value is not numeric then its skipped 49 | * @param attribute 50 | */ 51 | average(attribute) { 52 | const tables = [this.table.name]; 53 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 54 | const objectStore = transaction.objectStore(this.table.name); 55 | const request = this.request(objectStore); 56 | return new Promise((resolve, reject) => { 57 | let count = 0; 58 | let total = 0; 59 | request.addEventListener("success", async (event) => { 60 | const cursor = event.target.result; 61 | if (cursor) { 62 | if (!this.allowedToProcess(cursor.value)) { 63 | return cursor.continue(); 64 | } 65 | const value = nestedAttributeValue(attribute, cursor.value); 66 | if (!isNaN(parseFloat(value))) { 67 | total += parseFloat(cursor.value[attribute]); 68 | } 69 | count++; 70 | return cursor.continue(); 71 | } 72 | resolve(total / count); 73 | }); 74 | request.addEventListener("error", (error) => reject(error)); 75 | }); 76 | } 77 | reduce(func, defaultCarry) { 78 | const tables = [this.table.name]; 79 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 80 | const objectStore = transaction.objectStore(this.table.name); 81 | const request = this.request(objectStore); 82 | return new Promise((resolve, reject) => { 83 | let result = defaultCarry; 84 | request.addEventListener("success", async (event) => { 85 | const cursor = event.target.result; 86 | if (cursor) { 87 | if (!this.allowedToProcess(cursor.value)) { 88 | return cursor.continue(); 89 | } 90 | result = func(cursor.value, result); 91 | return cursor.continue(); 92 | } 93 | resolve(result); 94 | }); 95 | request.addEventListener("error", (error) => reject(error)); 96 | }); 97 | } 98 | } 99 | //# sourceMappingURL=aggregate.js.map -------------------------------------------------------------------------------- /dist/es2015/models/aggregate.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"aggregate.js","sourceRoot":"","sources":["../../../src/models/aggregate.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/base-model.js: -------------------------------------------------------------------------------- 1 | import { TransactionHandling } from "./transaction-handling.js"; 2 | export class BaseModel extends TransactionHandling { 3 | /** 4 | * Opens IDBRequest to perform action on object store 5 | * @param objectStore 6 | */ 7 | request(objectStore) { 8 | const direction = this.cursor || undefined; 9 | if (this.indexBuilder) { 10 | const keyRange = this.keyRange(this.indexBuilder); 11 | const cursor = this.indexBuilder.index !== this.primaryId ? objectStore.index(this.indexBuilder.index) : objectStore; 12 | return cursor.openCursor(keyRange, direction); 13 | } 14 | else { 15 | return objectStore.openCursor(undefined, direction); 16 | } 17 | } 18 | } 19 | //# sourceMappingURL=base-model.js.map -------------------------------------------------------------------------------- /dist/es2015/models/base-model.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"base-model.js","sourceRoot":"","sources":["../../../src/models/base-model.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,mBAAmB,EAAC,MAAM,2BAA2B,CAAC;AAG9D,MAAM,OAAgB,SAAU,SAAQ,mBAAmB;IAMzD;;;OAGG;IACO,OAAO,CAAC,WAA2B;QAC3C,MAAM,SAAS,GAAG,IAAI,CAAC,MAAM,IAAI,SAAS,CAAC;QAE3C,IAAI,IAAI,CAAC,YAAY,EAAE;YACrB,MAAM,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAClD,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,KAAK,KAAK,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC;YACrH,OAAO,MAAM,CAAC,UAAU,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;SAC/C;aAAM;YACL,OAAO,WAAW,CAAC,UAAU,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;SACrD;IACH,CAAC;CAEF"} -------------------------------------------------------------------------------- /dist/es2015/models/base-write-actions.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"base-write-actions.js","sourceRoot":"","sources":["../../../src/models/base-write-actions.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/find-fail-actions.js: -------------------------------------------------------------------------------- 1 | import { SearchActions } from "./search-actions.js"; 2 | import { NotFound } from "../errors/not-found.js"; 3 | export class FindFailActions extends SearchActions { 4 | async firstOrFail() { 5 | const record = await this.first(); 6 | if (!record) { 7 | throw new NotFound(); 8 | } 9 | return record; 10 | } 11 | async findOrFail(id) { 12 | const record = await this.find(id); 13 | if (!record) { 14 | throw new NotFound(); 15 | } 16 | return record; 17 | } 18 | async findIndexOrFail(indexName, id) { 19 | const record = await this.findIndex(indexName, id); 20 | if (!record) { 21 | throw new NotFound(); 22 | } 23 | return record; 24 | } 25 | } 26 | //# sourceMappingURL=find-fail-actions.js.map -------------------------------------------------------------------------------- /dist/es2015/models/find-fail-actions.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"find-fail-actions.js","sourceRoot":"","sources":["../../../src/models/find-fail-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,aAAa,EAAC,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAC,QAAQ,EAAC,MAAM,wBAAwB,CAAC;AAEhD,MAAM,OAAgB,eAAgB,SAAQ,aAAa;IAOlD,KAAK,CAAC,WAAW;QACtB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAElC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,QAAQ,EAAE,CAAC;SACtB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAQM,KAAK,CAAC,UAAU,CAAC,EAAO;QAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACnC,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,QAAQ,EAAE,CAAC;SACtB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IASM,KAAK,CAAC,eAAe,CAAC,SAAiB,EAAE,EAAO;QACrD,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,MAAM,EAAE;YACX,MAAM,IAAI,QAAQ,EAAE,CAAC;SACtB;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CAEF"} -------------------------------------------------------------------------------- /dist/es2015/models/find-or-create-actions.js: -------------------------------------------------------------------------------- 1 | import { BaseWriteActions } from "./base-write-actions.js"; 2 | import { TransactionModes } from "./model.interface.js"; 3 | import { InvalidTransaction } from "../errors/invalid-transaction.js"; 4 | export class FindOrCreateActions extends BaseWriteActions { 5 | async firstOrCreate(data) { 6 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 7 | const transaction = this.createTransaction(tables, TransactionModes.Write); 8 | if (transaction.mode !== TransactionModes.Write) { 9 | throw new InvalidTransaction('Transaction not in write mode'); 10 | } 11 | const record = await this.first(); 12 | if (!record) { 13 | return this.create(data); 14 | } 15 | return record; 16 | } 17 | async findOrCreate(id, data) { 18 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 19 | const transaction = this.createTransaction(tables, TransactionModes.Write); 20 | if (transaction.mode !== TransactionModes.Write) { 21 | throw new InvalidTransaction('Transaction not in write mode'); 22 | } 23 | this.setTransaction(transaction); 24 | const record = await this.find(id); 25 | if (!record) { 26 | return this.create(data); 27 | } 28 | return record; 29 | } 30 | async findIndexOrCreate(indexName, id, data) { 31 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 32 | const transaction = this.createTransaction(tables, TransactionModes.Write); 33 | if (transaction.mode !== TransactionModes.Write) { 34 | throw new InvalidTransaction('Transaction not in write mode'); 35 | } 36 | const record = await this.findIndex(indexName, id); 37 | if (!record) { 38 | return this.create(data); 39 | } 40 | return record; 41 | } 42 | } 43 | //# sourceMappingURL=find-or-create-actions.js.map -------------------------------------------------------------------------------- /dist/es2015/models/find-or-create-actions.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"find-or-create-actions.js","sourceRoot":"","sources":["../../../src/models/find-or-create-actions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,gBAAgB,EAAC,MAAM,yBAAyB,CAAC;AACzD,OAAO,EAA8B,gBAAgB,EAAC,MAAM,sBAAsB,CAAC;AACnF,OAAO,EAAC,kBAAkB,EAAC,MAAM,kCAAkC,CAAC;AAEpE,MAAM,OAAgB,mBAAoB,SAAQ,gBAAgB;IAOzD,KAAK,CAAC,aAAa,CAAC,IAAS;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;YAC/C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;SAC/D;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,KAAK,EAAE,CAAC;QAElC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IASM,KAAK,CAAC,YAAY,CAAC,EAAO,EAAE,IAAS;QAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;YAC/C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;SAC/D;QAED,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAEnC,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAUM,KAAK,CAAC,iBAAiB,CAAC,SAAiB,EAAE,EAAO,EAAE,IAAS;QAClE,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;QAC9F,MAAM,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC;QAC3E,IAAI,WAAW,CAAC,IAAI,KAAK,gBAAgB,CAAC,KAAK,EAAE;YAC/C,MAAM,IAAI,kBAAkB,CAAC,+BAA+B,CAAC,CAAC;SAC/D;QAED,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAEnD,IAAI,CAAC,MAAM,EAAE;YACX,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;SAC1B;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/models/model.interface.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Default index name and attribute name for auto-generating key 3 | */ 4 | export const DEFAULT_PRIMARY_ID = '_id'; 5 | /** 6 | * Transaction modes available 7 | */ 8 | export var TransactionModes; 9 | (function (TransactionModes) { 10 | TransactionModes["ReadOnly"] = "readonly"; 11 | TransactionModes["Write"] = "readwrite"; 12 | TransactionModes["VersionChange"] = "versionchange"; 13 | })(TransactionModes || (TransactionModes = {})); 14 | /** 15 | * Relation Types available 16 | */ 17 | export var RelationTypes; 18 | (function (RelationTypes) { 19 | RelationTypes["HasOne"] = "hasOne"; 20 | RelationTypes["HasMany"] = "hasMany"; 21 | RelationTypes["HasManyMultiEntry"] = "hasManyMultiEntry"; 22 | RelationTypes["HasManyThroughMultiEntry"] = "hasManyThroughMultiEntry"; 23 | })(RelationTypes || (RelationTypes = {})); 24 | export var QueryTypes; 25 | (function (QueryTypes) { 26 | QueryTypes["Between"] = "between"; 27 | QueryTypes["Where"] = "where"; 28 | QueryTypes["WhereIn"] = "whereIn"; 29 | QueryTypes["WhereInArray"] = "whereInArray"; 30 | QueryTypes["GreaterThan"] = "gt"; 31 | QueryTypes["GreaterThanEqual"] = "gte"; 32 | QueryTypes["LessThanEqual"] = "lte"; 33 | QueryTypes["LessThan"] = "lt"; 34 | })(QueryTypes || (QueryTypes = {})); 35 | export var CursorDirection; 36 | (function (CursorDirection) { 37 | CursorDirection["Ascending"] = "next"; 38 | CursorDirection["AscendingUnique"] = "nextunique"; 39 | CursorDirection["Descending"] = "prev"; 40 | CursorDirection["DescendingUnique"] = "prevunique"; 41 | })(CursorDirection || (CursorDirection = {})); 42 | //# sourceMappingURL=model.interface.js.map -------------------------------------------------------------------------------- /dist/es2015/models/model.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"model.interface.js","sourceRoot":"","sources":["../../../src/models/model.interface.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,CAAC;AAcxC;;GAEG;AACH,MAAM,CAAN,IAAY,gBAIX;AAJD,WAAY,gBAAgB;IAC1B,yCAAqB,CAAA;IACrB,uCAAmB,CAAA;IACnB,mDAA+B,CAAA;AACjC,CAAC,EAJW,gBAAgB,KAAhB,gBAAgB,QAI3B;AAED;;GAEG;AACH,MAAM,CAAN,IAAY,aAKX;AALD,WAAY,aAAa;IACvB,kCAAiB,CAAA;IACjB,oCAAmB,CAAA;IACnB,wDAAuC,CAAA;IACvC,sEAAqD,CAAA;AACvD,CAAC,EALW,aAAa,KAAb,aAAa,QAKxB;AA6CD,MAAM,CAAN,IAAY,UASX;AATD,WAAY,UAAU;IACpB,iCAAmB,CAAA;IACnB,6BAAe,CAAA;IACf,iCAAmB,CAAA;IACnB,2CAA6B,CAAA;IAC7B,gCAAkB,CAAA;IAClB,sCAAwB,CAAA;IACxB,mCAAqB,CAAA;IACrB,6BAAe,CAAA;AACjB,CAAC,EATW,UAAU,KAAV,UAAU,QASrB;AAED,MAAM,CAAN,IAAY,eAKX;AALD,WAAY,eAAe;IACzB,qCAAkB,CAAA;IAClB,iDAA8B,CAAA;IAC9B,sCAAmB,CAAA;IACnB,kDAA+B,CAAA;AACjC,CAAC,EALW,eAAe,KAAf,eAAe,QAK1B"} -------------------------------------------------------------------------------- /dist/es2015/models/model.js: -------------------------------------------------------------------------------- 1 | import { DEFAULT_PRIMARY_ID, RelationTypes } from "./model.interface.js"; 2 | import { DEFAULT_SYNC_COLUMN_NAME } from "../migration/migration.interface.js"; 3 | import { FindOrCreateActions } from "./find-or-create-actions.js"; 4 | import { HasOne } from "../relations/has-one.js"; 5 | import { HasMany } from "../relations/has-many.js"; 6 | import { HasManyMulti } from "../relations/has-many-multi.js"; 7 | import { HasManyThroughMulti } from "../relations/has-many-through-multi.js"; 8 | import { mergeDeep as mergeDeepUtil } from "../utils.js"; 9 | export class Model extends FindOrCreateActions { 10 | constructor(db, table, connector) { 11 | super(db, table); 12 | this.db = db; 13 | this.table = table; 14 | this.connector = connector; 15 | this.transaction = null; 16 | } 17 | async sync(id, data, mergeDeep = true) { 18 | await this.save(id, this.syncObj(data), mergeDeep); 19 | return this.find(id); 20 | } 21 | async syncIndex(indexName, id, data, mergeDeep = true) { 22 | await this.saveIndex(indexName, id, this.syncObj(data), mergeDeep); 23 | return this.findIndex(indexName, id); 24 | } 25 | async syncAllIndex(indexName, id, data, mergeDeep = true) { 26 | await this.saveAllIndex(indexName, id, this.syncObj(data), mergeDeep); 27 | return this.resetBuilder().whereIndex(indexName, id).all(); 28 | } 29 | /** 30 | * Opens new transaction for all models and returns transaction instance 31 | * @param mode 32 | */ 33 | openTransaction(mode) { 34 | const transaction = this.db.transaction(this.connector.migrationSchema.tables.map(table => table.name)); 35 | const models = {}; 36 | for (const table of this.connector.migrationSchema.tables) { 37 | Object.defineProperty(models, table.name, { 38 | get: () => { 39 | let model; 40 | if (this.table.ormClass) { 41 | model = new this.table.ormClass(this.db, table, this.connector); 42 | } 43 | else { 44 | model = new Model(this.db, table, this.connector); 45 | } 46 | model.setTransaction(transaction); 47 | return model; 48 | } 49 | }); 50 | } 51 | return { models, transaction }; 52 | } 53 | /** 54 | * Loads relations against the model results 55 | * 56 | * @param results 57 | */ 58 | loadRelations(results) { 59 | const relationsArray = []; 60 | for (const relation of this.relations) { 61 | let loader; 62 | switch (relation.type) { 63 | case RelationTypes.HasOne: 64 | loader = new HasOne(this.db, this.connector, this, relation); 65 | relationsArray.push(loader.fetch(results)); 66 | break; 67 | case RelationTypes.HasMany: 68 | loader = new HasMany(this.db, this.connector, this, relation); 69 | relationsArray.push(loader.fetch(results)); 70 | break; 71 | case RelationTypes.HasManyMultiEntry: 72 | loader = new HasManyMulti(this.db, this.connector, this, relation); 73 | relationsArray.push(loader.fetch(results)); 74 | break; 75 | case RelationTypes.HasManyThroughMultiEntry: 76 | loader = new HasManyThroughMulti(this.db, this.connector, this, relation); 77 | relationsArray.push(loader.fetch(results)); 78 | break; 79 | default: 80 | throw new Error(`Unknown relation ${relation.type}`); 81 | } 82 | } 83 | return relationsArray.concat(this.loadCustomRelations(results)); 84 | } 85 | /** 86 | * The primary key of the model 87 | */ 88 | get primaryId() { 89 | return this.table.primary || DEFAULT_PRIMARY_ID; 90 | } 91 | /** 92 | * Loads custom relation created in the ORM classes extending the base model class 93 | * @param results 94 | */ 95 | loadCustomRelations(results) { 96 | const relationPromises = []; 97 | for (const customRelation of this.customRelations) { 98 | if (!Reflect.has(this, customRelation)) { 99 | throw new Error(`Method ${customRelation} not defined.`); 100 | } 101 | const relation = (Reflect.get(this, customRelation)()); 102 | relationPromises.push(relation.fetch(results)); 103 | } 104 | return relationPromises; 105 | } 106 | /** 107 | * Adds sync column if table requires to have sync date 108 | * @param data 109 | */ 110 | syncObj(data) { 111 | if (this.table.syncColumn) { 112 | const attr = this.table.syncColumnName || DEFAULT_SYNC_COLUMN_NAME; 113 | const obj = {}; 114 | obj[attr] = new Date(); 115 | return mergeDeepUtil(data, obj); 116 | } 117 | return data; 118 | } 119 | } 120 | //# sourceMappingURL=model.js.map -------------------------------------------------------------------------------- /dist/es2015/models/model.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/models/model.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/orm-relation-builder.js: -------------------------------------------------------------------------------- 1 | import { QueryBuilder } from "./query-builder.js"; 2 | import { HasOne } from "../relations/has-one.js"; 3 | import { RelationTypes } from "./model.interface.js"; 4 | import { HasMany } from "../relations/has-many.js"; 5 | import { HasManyMulti } from "../relations/has-many-multi.js"; 6 | import { HasManyThroughMulti } from "../relations/has-many-through-multi.js"; 7 | export class OrmRelationBuilder extends QueryBuilder { 8 | /** 9 | * Returns has one relation 10 | * @param model 11 | * @param foreignKey 12 | * @param localKey 13 | * @param parentKeyName 14 | */ 15 | hasOne(model, foreignKey, localKey, parentKeyName) { 16 | const current = this; 17 | const relation = this.convertToRelation(model, RelationTypes.HasOne, foreignKey); 18 | if (localKey) { 19 | relation.localKey = localKey; 20 | } 21 | if (parentKeyName) { 22 | relation.attributeName = parentKeyName; 23 | } 24 | return new HasOne(this.db, this.connector, current, relation); 25 | } 26 | /** 27 | * Returns has many relation 28 | * @param model 29 | * @param foreignKey 30 | * @param localKey 31 | * @param parentKeyName 32 | */ 33 | hasMany(model, foreignKey, localKey, parentKeyName) { 34 | const current = this; 35 | const relation = this.convertToRelation(model, RelationTypes.HasMany, foreignKey); 36 | if (localKey) { 37 | relation.localKey = localKey; 38 | } 39 | if (parentKeyName) { 40 | relation.attributeName = parentKeyName; 41 | } 42 | return new HasMany(this.db, this.connector, current, relation); 43 | } 44 | /** 45 | * Returns has many multi entry relation 46 | * @param model 47 | * @param foreignKey 48 | * @param localKey 49 | * @param parentKeyName 50 | */ 51 | hasManyMultiEntry(model, foreignKey, localKey, parentKeyName) { 52 | const current = this; 53 | const relation = this.convertToRelation(model, RelationTypes.HasManyMultiEntry, foreignKey); 54 | if (localKey) { 55 | relation.localKey = localKey; 56 | } 57 | if (parentKeyName) { 58 | relation.attributeName = parentKeyName; 59 | } 60 | return new HasManyMulti(this.db, this.connector, current, relation); 61 | } 62 | /** 63 | * Returns relation has many through multi entry relation 64 | * @param model 65 | * @param foreignKey 66 | * @param localKey 67 | * @param parentKeyName 68 | */ 69 | hasManyThroughMultiEntry(model, foreignKey, localKey, parentKeyName) { 70 | const current = this; 71 | const relation = this.convertToRelation(model, RelationTypes.HasManyThroughMultiEntry, foreignKey); 72 | if (localKey) { 73 | relation.localKey = localKey; 74 | } 75 | if (parentKeyName) { 76 | relation.attributeName = parentKeyName; 77 | } 78 | return new HasManyThroughMulti(this.db, this.connector, current, relation); 79 | } 80 | convertToRelation(modelConstructor, type, foreignKey) { 81 | const model = this.newModel(modelConstructor); 82 | return { model, type, foreignKey }; 83 | } 84 | newModel(modelConstructor) { 85 | const table = this.connector.migrationSchema.tables.find(tableSchema => tableSchema.name === modelConstructor.TableName); 86 | if (!table) { 87 | throw new Error('Table schema not found'); 88 | } 89 | return new modelConstructor(this.db, table, this.connector); 90 | } 91 | } 92 | //# sourceMappingURL=orm-relation-builder.js.map -------------------------------------------------------------------------------- /dist/es2015/models/orm-relation-builder.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"orm-relation-builder.js","sourceRoot":"","sources":["../../../src/models/orm-relation-builder.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/query-builder.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"query-builder.js","sourceRoot":"","sources":["../../../src/models/query-builder.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/relation.builder.js: -------------------------------------------------------------------------------- 1 | export class RelationBuilder { 2 | constructor() { 3 | /** 4 | * Array of relations to be loaded 5 | */ 6 | this.relations = []; 7 | /** 8 | * Custom relations list 9 | */ 10 | this.customRelations = []; 11 | } 12 | /** 13 | * Returns list of childRelation tables required by the model action 14 | * @param tables 15 | */ 16 | tableNames(tables) { 17 | return tables.map(table => table.name); 18 | } 19 | /** 20 | * Adds childRelation to be fetched 21 | * @param relations 22 | */ 23 | with(relations) { 24 | // first filtering existing relations for same table 25 | const filteredRelations = this.relations.filter(relation => !relations.find(newRelation => newRelation.model === relation.model)); 26 | this.relations = filteredRelations.concat(relations); 27 | return this; 28 | } 29 | /** 30 | * Adds childRelation to be fetched 31 | * 32 | * @deprecated 33 | * @param modelName 34 | * @param type 35 | * @param localKey 36 | * @param foreignKey 37 | * @param func 38 | */ 39 | relation(modelName, type, localKey, foreignKey, func) { 40 | const index = this.relations.findIndex(relation => relation.model === modelName); 41 | if (index !== -1) { 42 | this.relations.splice(index, 1); 43 | } 44 | this.relations.push({ 45 | model: modelName, 46 | type, 47 | localKey, 48 | foreignKey, 49 | func 50 | }); 51 | return this; 52 | } 53 | /** 54 | * Adds custom relations 55 | * @param relations 56 | */ 57 | withCustom(relations) { 58 | const filteredRelations = this.customRelations.filter(relation => !relations.find(newRelation => newRelation === relation)); 59 | this.customRelations = filteredRelations.concat(relations); 60 | return this; 61 | } 62 | } 63 | //# sourceMappingURL=relation.builder.js.map -------------------------------------------------------------------------------- /dist/es2015/models/relation.builder.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"relation.builder.js","sourceRoot":"","sources":["../../../src/models/relation.builder.ts"],"names":[],"mappings":"AAYA,MAAM,OAAgB,eAAe;IAArC;QAEE;;WAEG;QACI,cAAS,GAAe,EAAE,CAAC;QAElC;;WAEG;QACI,oBAAe,GAAa,EAAE,CAAC;IAsExC,CAAC;IApEC;;;OAGG;IACI,UAAU,CAAC,MAAqB;QACrC,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACzC,CAAC;IAED;;;OAGG;IACI,IAAI,CAAC,SAAqB;QAC/B,oDAAoD;QAEpD,MAAM,iBAAiB,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAC7C,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CACzB,WAAW,CAAC,EAAE,CAAC,WAAW,CAAC,KAAK,KAAK,QAAQ,CAAC,KAAK,CAAC,CACvD,CAAC;QACF,IAAI,CAAC,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAErD,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;;OASG;IACI,QAAQ,CACb,SAAiB,EAAE,IAAmB,EAAE,QAAgB,EAAE,UAAkB,EAAE,IAAgE;QAG9I,MAAM,KAAK,GAAG,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC;QAEjF,IAAI,KAAK,KAAK,CAAC,CAAC,EAAE;YAChB,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;SACjC;QAED,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YAClB,KAAK,EAAE,SAAS;YAChB,IAAI;YACJ,QAAQ;YACR,UAAU;YACV,IAAI;SACL,CAAC,CAAC;QAEH,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACI,UAAU,CAAC,SAAmB;QACnC,MAAM,iBAAiB,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,CACnD,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,IAAI,CACzB,WAAW,CAAC,EAAE,CAAC,WAAW,KAAK,QAAQ,CAAC,CAC3C,CAAC;QACF,IAAI,CAAC,eAAe,GAAG,iBAAiB,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAE3D,OAAO,IAAI,CAAC;IACd,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/models/search-actions.js: -------------------------------------------------------------------------------- 1 | import { Aggregate } from "./aggregate.js"; 2 | import { TransactionModes } from "./model.interface.js"; 3 | export class SearchActions extends Aggregate { 4 | all() { 5 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 6 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 7 | const objectStore = transaction.objectStore(this.table.name); 8 | const request = this.request(objectStore); 9 | return new Promise((resolve, reject) => { 10 | let results = []; 11 | request.addEventListener("success", async (event) => { 12 | const cursor = event.target.result; 13 | if (cursor) { 14 | if (!this.allowedToProcess(cursor.value)) { 15 | return cursor.continue(); 16 | } 17 | results.push(cursor.value); 18 | return cursor.continue(); 19 | } 20 | if (results.length === 0 || this.relations.length === 0) { 21 | resolve(results); 22 | } 23 | const relations = this.loadRelations(results); 24 | await Promise.all(relations); 25 | resolve(results); 26 | }); 27 | request.addEventListener("error", (error) => reject(error)); 28 | }); 29 | } 30 | first() { 31 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 32 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 33 | const objectStore = transaction.objectStore(this.table.name); 34 | const request = this.request(objectStore); 35 | return new Promise((resolve, reject) => { 36 | let result; 37 | request.addEventListener("success", async (event) => { 38 | const cursor = event.target.result; 39 | if (cursor) { 40 | if (!this.allowedToProcess(cursor.value)) { 41 | return cursor.continue(); 42 | } 43 | result = cursor.value; 44 | } 45 | if (!result || this.relations.length === 0) { 46 | resolve(result || null); 47 | } 48 | const relations = this.loadRelations([result]); 49 | await Promise.all(relations); 50 | resolve(result); 51 | }); 52 | request.addEventListener("error", (error) => reject(error)); 53 | }); 54 | } 55 | find(id) { 56 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 57 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 58 | const objectStore = transaction.objectStore(this.table.name); 59 | const request = objectStore.get(id); 60 | return new Promise((resolve, reject) => { 61 | request.addEventListener("success", async (event) => { 62 | const result = event.target.result; 63 | if (!result || this.relations.length === 0) { 64 | resolve(result || null); 65 | } 66 | const relations = this.loadRelations([result]); 67 | await Promise.all(relations); 68 | resolve(result || null); 69 | }); 70 | request.addEventListener("error", (error) => reject(error)); 71 | }); 72 | } 73 | findIndex(indexName, id) { 74 | this.resetBuilder(); 75 | const tables = this.tableNames(this.connector.migrationSchema.tables).concat(this.table.name); 76 | const transaction = this.getTransaction(tables, TransactionModes.ReadOnly); 77 | const objectStore = transaction.objectStore(this.table.name); 78 | const request = objectStore.index(indexName).get(id); 79 | return new Promise((resolve, reject) => { 80 | request.addEventListener("success", async (event) => { 81 | const result = event.target.result; 82 | if (!result || this.relations.length === 0) { 83 | resolve(result || null); 84 | } 85 | const relations = this.loadRelations([result]); 86 | await Promise.all(relations); 87 | resolve(result); 88 | }); 89 | request.addEventListener("error", (error) => reject(error)); 90 | }); 91 | } 92 | findAllIndex(indexName, id) { 93 | this.resetBuilder(); 94 | this.whereIndex(indexName, id); 95 | return this.all(); 96 | } 97 | } 98 | //# sourceMappingURL=search-actions.js.map -------------------------------------------------------------------------------- /dist/es2015/models/search-actions.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"search-actions.js","sourceRoot":"","sources":["../../../src/models/search-actions.ts"],"names":[],"mappings":"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"} -------------------------------------------------------------------------------- /dist/es2015/models/transaction-handling.js: -------------------------------------------------------------------------------- 1 | import { OrmRelationBuilder } from "./orm-relation-builder.js"; 2 | export class TransactionHandling extends OrmRelationBuilder { 3 | constructor() { 4 | super(...arguments); 5 | this.transaction = null; 6 | } 7 | /** 8 | * Retrieves current transaction and if ne transaction exists then creates new one. 9 | * 10 | * @param stores 11 | * @param mode 12 | * @param overwrite 13 | */ 14 | getTransaction(stores, mode, overwrite = false) { 15 | if (this.transaction === null || overwrite) { 16 | this.transaction = this.createTransaction(stores, mode); 17 | } 18 | return this.transaction; 19 | } 20 | /** 21 | * Sets transaction for the model 22 | * @param transaction 23 | */ 24 | setTransaction(transaction) { 25 | this.transaction = transaction; 26 | } 27 | /** 28 | * Creates new transaction 29 | * @param stores 30 | * @param mode 31 | */ 32 | createTransaction(stores, mode) { 33 | const transaction = this.db.transaction(stores, mode); 34 | this.setTransaction(transaction); 35 | return transaction; 36 | } 37 | } 38 | //# sourceMappingURL=transaction-handling.js.map -------------------------------------------------------------------------------- /dist/es2015/models/transaction-handling.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"transaction-handling.js","sourceRoot":"","sources":["../../../src/models/transaction-handling.ts"],"names":[],"mappings":"AACA,OAAO,EAAC,kBAAkB,EAAC,MAAM,2BAA2B,CAAC;AAE7D,MAAM,OAAgB,mBAAoB,SAAQ,kBAAkB;IAApE;;QAEY,gBAAW,GAA0B,IAAI,CAAC;IAmCtD,CAAC;IAjCC;;;;;;OAMG;IACI,cAAc,CAAC,MAAgB,EAAE,IAAsB,EAAE,YAAqB,KAAK;QACxF,IAAI,IAAI,CAAC,WAAW,KAAK,IAAI,IAAI,SAAS,EAAE;YAC1C,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;SACzD;QACD,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED;;;OAGG;IACI,cAAc,CAAC,WAA2B;QAC/C,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,iBAAiB,CAAC,MAAgB,EAAE,IAAsB;QAC/D,MAAM,WAAW,GAAG,IAAI,CAAC,EAAE,CAAC,WAAW,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;QACtD,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC;QAEjC,OAAO,WAAW,CAAC;IACrB,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/relations/has-many-multi.js: -------------------------------------------------------------------------------- 1 | import { Relations } from "./relations.js"; 2 | export class HasManyMulti extends Relations { 3 | constructor(db, connector, parentModel, childRelation) { 4 | super(); 5 | this.db = db; 6 | this.connector = connector; 7 | this.parentModel = parentModel; 8 | this.childRelation = childRelation; 9 | } 10 | async fetch(results) { 11 | let model = this.getRelationModel(this.childRelation); 12 | model = this.filteredModel(model, this.childRelation); 13 | const values = results.map(result => result[this.getLocalKey(this.parentModel, this.childRelation)]); 14 | model.whereMultiIndexIn(this.childRelation.foreignKey, values); 15 | const relationResults = await model.all(); 16 | return this.bindResults(results, relationResults, this.childRelation); 17 | } 18 | bindResults(parentResults, relationResults, relation) { 19 | const localKey = this.getLocalKey(this.parentModel, this.childRelation); 20 | parentResults.forEach(parentResult => { 21 | parentResult[this.getAttributeName(this.parentModel, relation)] = relationResults.filter((relationResult) => !!relationResult[relation.foreignKey].find((multiValue) => multiValue === parentResult[localKey])); 22 | }); 23 | return Promise.resolve(parentResults); 24 | } 25 | } 26 | //# sourceMappingURL=has-many-multi.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/has-many-multi.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"has-many-multi.js","sourceRoot":"","sources":["../../../src/relations/has-many-multi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAIzC,MAAM,OAAO,YAAa,SAAQ,SAAS;IAEzC,YACS,EAAe,EACf,SAAoB,EACjB,WAA2B,EAC9B,aAAuB;QAE9B,KAAK,EAAE,CAAC;QALD,OAAE,GAAF,EAAE,CAAa;QACf,cAAS,GAAT,SAAS,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAU;IAGhC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAc;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,CAAC,iBAAiB,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE/D,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAEM,WAAW,CAAC,aAAoB,EAAE,eAAsB,EAAE,QAAkB;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAExE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACnC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CACtF,CAAC,cAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,CACjE,CAAC,UAAe,EAAE,EAAE,CAAC,UAAU,KAAK,YAAY,CAAC,QAAQ,CAAC,CAC3D,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/relations/has-many-through-multi.js: -------------------------------------------------------------------------------- 1 | import { Relations } from "./relations.js"; 2 | export class HasManyThroughMulti extends Relations { 3 | constructor(db, connector, parentModel, childRelation) { 4 | super(); 5 | this.db = db; 6 | this.connector = connector; 7 | this.parentModel = parentModel; 8 | this.childRelation = childRelation; 9 | } 10 | async fetch(results) { 11 | let model = this.getRelationModel(this.childRelation); 12 | model = this.filteredModel(model, this.childRelation); 13 | const values = results.reduce((carry, result) => carry.concat(result[this.getLocalKey(this.parentModel, this.childRelation)]), []); 14 | model.whereIndexIn(this.childRelation.foreignKey, values); 15 | const relationResults = await model.all(); 16 | return this.bindResults(results, relationResults, this.childRelation); 17 | } 18 | bindResults(parentResults, relationResults, relation) { 19 | const localKey = this.getLocalKey(this.parentModel, this.childRelation); 20 | parentResults.forEach(parentResult => { 21 | parentResult[this.getAttributeName(this.parentModel, relation)] = relationResults.filter((relationResult) => !!parentResult[localKey].find((multiValue) => multiValue === relationResult[relation.foreignKey])); 22 | }); 23 | return Promise.resolve(parentResults); 24 | } 25 | } 26 | //# sourceMappingURL=has-many-through-multi.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/has-many-through-multi.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"has-many-through-multi.js","sourceRoot":"","sources":["../../../src/relations/has-many-through-multi.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAIzC,MAAM,OAAO,mBAAoB,SAAQ,SAAS;IAChD,YACS,EAAe,EACf,SAAoB,EACjB,WAA2B,EAC9B,aAAuB;QAE9B,KAAK,EAAE,CAAC;QALD,OAAE,GAAF,EAAE,CAAa;QACf,cAAS,GAAT,SAAS,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAU;IAGhC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAc;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,CAC3B,CAAC,KAAY,EAAE,MAAM,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,EAAE,CAC3G,CAAC;QACF,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE1D,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAEM,WAAW,CAAC,aAAoB,EAAE,eAAsB,EAAE,QAAkB;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAExE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACnC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CACtF,CAAC,cAAmB,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,IAAI,CACpD,CAAC,UAAe,EAAE,EAAE,CAAC,UAAU,KAAK,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,CACxE,CACF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/relations/has-many.js: -------------------------------------------------------------------------------- 1 | import { Relations } from "./relations.js"; 2 | export class HasMany extends Relations { 3 | constructor(db, connector, parentModel, childRelation) { 4 | super(); 5 | this.db = db; 6 | this.connector = connector; 7 | this.parentModel = parentModel; 8 | this.childRelation = childRelation; 9 | } 10 | /** 11 | * Fetch relation results 12 | * @param results 13 | */ 14 | async fetch(results) { 15 | let model = this.getRelationModel(this.childRelation); 16 | model = this.filteredModel(model, this.childRelation); 17 | const values = results.map(result => result[this.getLocalKey(this.parentModel, this.childRelation)]); 18 | model.whereIndexIn(this.childRelation.foreignKey, values); 19 | const relationResults = await model.all(); 20 | return this.bindResults(results, relationResults, this.childRelation); 21 | } 22 | /** 23 | * Bind relation results to parent results 24 | * @param parentResults 25 | * @param relationResults 26 | * @param relation 27 | */ 28 | bindResults(parentResults, relationResults, relation) { 29 | const localKey = this.getLocalKey(this.parentModel, this.childRelation); 30 | parentResults.forEach(parentResult => { 31 | parentResult[this.getAttributeName(this.parentModel, relation)] = relationResults.filter((relationResult) => relationResult[relation.foreignKey] === parentResult[localKey]); 32 | }); 33 | return Promise.resolve(parentResults); 34 | } 35 | } 36 | //# sourceMappingURL=has-many.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/has-many.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"has-many.js","sourceRoot":"","sources":["../../../src/relations/has-many.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAIzC,MAAM,OAAO,OAAQ,SAAQ,SAAS;IAEpC,YACS,EAAe,EACf,SAAoB,EACjB,WAA2B,EAC9B,aAAuB;QAE9B,KAAK,EAAE,CAAC;QALD,OAAE,GAAF,EAAE,CAAa;QACf,cAAS,GAAT,SAAS,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAU;IAGhC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,KAAK,CAAC,OAAc;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtD,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;QACrG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;QAE1D,MAAM,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;QAE1C,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAED;;;;;OAKG;IACI,WAAW,CAAC,aAAoB,EAAE,eAAoB,EAAE,QAAkB;QAC/E,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACxE,aAAa,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE;YACnC,YAAY,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,CACtF,CAAC,cAAmB,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,YAAY,CAAC,QAAQ,CAAC,CACxF,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/relations/has-one.js: -------------------------------------------------------------------------------- 1 | import { Relations } from "./relations.js"; 2 | import { CursorDirection } from "../models/model.interface.js"; 3 | export class HasOne extends Relations { 4 | constructor(db, connector, parentModel, childRelation) { 5 | super(); 6 | this.db = db; 7 | this.connector = connector; 8 | this.parentModel = parentModel; 9 | this.childRelation = childRelation; 10 | } 11 | async fetch(results) { 12 | let model = this.getRelationModel(this.childRelation); 13 | model = this.filteredModel(model, this.childRelation); 14 | let relationResults = []; 15 | // optimizing query 16 | if (results.length === 1) { 17 | model.whereIndex(this.childRelation.foreignKey, results[0][this.getLocalKey(this.parentModel, this.childRelation)]); 18 | relationResults = [await model.first()]; 19 | } 20 | else { 21 | const values = results.map(result => result[this.getLocalKey(this.parentModel, this.childRelation)]); 22 | model.whereIndexIn(this.childRelation.foreignKey, values) 23 | .cursorDirection(CursorDirection.AscendingUnique); 24 | relationResults = await model.all(); 25 | } 26 | return this.bindResults(results, relationResults, this.childRelation); 27 | } 28 | bindResults(parentResults, relationResults, relation) { 29 | const localKey = this.getLocalKey(this.parentModel, this.childRelation); 30 | parentResults.forEach(result => { 31 | const mappedResult = relationResults.find(relationResult => relationResult[relation.foreignKey] === result[localKey]); 32 | result[this.getAttributeName(this.parentModel, relation)] = mappedResult || null; 33 | }); 34 | return Promise.resolve(parentResults); 35 | } 36 | } 37 | //# sourceMappingURL=has-one.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/has-one.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"has-one.js","sourceRoot":"","sources":["../../../src/relations/has-one.ts"],"names":[],"mappings":"AAAA,OAAO,EAAC,SAAS,EAAC,MAAM,gBAAgB,CAAC;AAEzC,OAAO,EAAC,eAAe,EAA2B,MAAM,8BAA8B,CAAC;AAEvF,MAAM,OAAO,MAAO,SAAQ,SAAS;IAEnC,YACS,EAAe,EACf,SAAoB,EACjB,WAA2B,EAC9B,aAAuB;QAE9B,KAAK,EAAE,CAAC;QALD,OAAE,GAAF,EAAE,CAAa;QACf,cAAS,GAAT,SAAS,CAAW;QACjB,gBAAW,GAAX,WAAW,CAAgB;QAC9B,kBAAa,GAAb,aAAa,CAAU;IAGhC,CAAC;IAEM,KAAK,CAAC,KAAK,CAAC,OAAc;QAC/B,IAAI,KAAK,GAAG,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QACtD,KAAK,GAAG,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QAEtD,IAAI,eAAe,GAAU,EAAE,CAAC;QAChC,mBAAmB;QACnB,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACpH,eAAe,GAAG,CAAC,MAAM,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC;SAEzC;aAAM;YACL,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC;YACrG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,EAAE,MAAM,CAAC;iBACtD,eAAe,CAAC,eAAe,CAAC,eAAe,CAAC,CAAC;YAEpD,eAAe,GAAG,MAAM,KAAK,CAAC,GAAG,EAAE,CAAC;SACrC;QAED,OAAO,IAAI,CAAC,WAAW,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;IACxE,CAAC;IAEM,WAAW,CAAC,aAAoB,EAAE,eAAsB,EAAE,QAAkB;QACjF,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,aAAa,CAAC,CAAC;QACxE,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;YAE7B,MAAM,YAAY,GAAG,eAAe,CAAC,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,cAAc,CAAC,QAAQ,CAAC,UAAU,CAAC,KAAK,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;YACtH,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC,GAAG,YAAY,IAAI,IAAI,CAAC;QACnF,CAAC,CAAC,CAAC;QACH,OAAO,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;IACxC,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/relations/relation.interface.js: -------------------------------------------------------------------------------- 1 | //# sourceMappingURL=relation.interface.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/relation.interface.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"relation.interface.js","sourceRoot":"","sources":["../../../src/relations/relation.interface.ts"],"names":[],"mappings":""} -------------------------------------------------------------------------------- /dist/es2015/relations/relations.js: -------------------------------------------------------------------------------- 1 | import { DEFAULT_PRIMARY_ID, } from "../models/model.interface.js"; 2 | import { Model } from "../models/model.js"; 3 | import { QueryBuilder } from "../models/query-builder.js"; 4 | export class Relations extends QueryBuilder { 5 | /** 6 | * Sets builder values created through callback function 7 | * @param model 8 | * @param relation 9 | */ 10 | filteredModel(model, relation) { 11 | model = this.bindBuilder(model); 12 | const builder = new QueryBuilder(); 13 | if (relation.func) { 14 | const query = relation.func(builder); 15 | model.builder = model.builder.concat(query.builder); 16 | model.with(builder.relations); 17 | } 18 | return model; 19 | } 20 | bindBuilder(model) { 21 | model.builder = model.builder.concat(this.builder); 22 | model.with(this.relations); 23 | return model; 24 | } 25 | /** 26 | * Retrieves th childRelation model instance 27 | * @param relation 28 | */ 29 | getRelationModel(relation) { 30 | let model; 31 | if (typeof relation.model === "string") { 32 | const tableSchema = this.connector.migrationSchema.tables.find(table => table.name === relation.model); 33 | if (!tableSchema) { 34 | throw new Error('Table schema not found'); 35 | } 36 | model = new Model(this.db, tableSchema, this.connector); 37 | } 38 | else { 39 | model = relation.model; 40 | } 41 | return model; 42 | } 43 | /** 44 | * Retrieves the local key of parent model 45 | * @param model 46 | * @param relation 47 | */ 48 | getLocalKey(model, relation) { 49 | const primaryKey = model.table.primary || DEFAULT_PRIMARY_ID; 50 | return relation.localKey ? relation.localKey : primaryKey; 51 | } 52 | /** 53 | * Returns the attribute name by which childRelation is to be attached with parent model 54 | * @param model 55 | * @param relation 56 | */ 57 | getAttributeName(model, relation) { 58 | return relation.attributeName || model.table.name; 59 | } 60 | } 61 | //# sourceMappingURL=relations.js.map -------------------------------------------------------------------------------- /dist/es2015/relations/relations.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"relations.js","sourceRoot":"","sources":["../../../src/relations/relations.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,kBAAkB,GAInB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAC,KAAK,EAAC,MAAM,oBAAoB,CAAC;AACzC,OAAO,EAAC,YAAY,EAAC,MAAM,4BAA4B,CAAC;AAIxD,MAAM,OAAgB,SAAU,SAAQ,YAAY;IA0BlD;;;;OAIG;IACI,aAAa,CAAC,KAAqB,EAAE,QAAkB;QAC5D,KAAK,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;QAChC,MAAM,OAAO,GAAG,IAAI,YAAY,EAAE,CAAC;QAEnC,IAAI,QAAQ,CAAC,IAAI,EAAE;YACjB,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YACrC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YACpD,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;SAC/B;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAEM,WAAW,CAAC,KAAqB;QACtC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACnD,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACI,gBAAgB,CAAC,QAAkB;QACxC,IAAI,KAAqB,CAAC;QAE1B,IAAI,OAAO,QAAQ,CAAC,KAAK,KAAK,QAAQ,EAAE;YACtC,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,eAAe,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,QAAQ,CAAC,KAAK,CAAC,CAAC;YACvG,IAAI,CAAC,WAAW,EAAE;gBAChB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;aAC3C;YAED,KAAK,GAAG,IAAI,KAAK,CAAC,IAAI,CAAC,EAAE,EAAE,WAAW,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;SACzD;aAAM;YACL,KAAK,GAAmB,QAAQ,CAAC,KAAK,CAAC;SACxC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;;OAIG;IACI,WAAW,CAAC,KAAqB,EAAE,QAAkB;QAC1D,MAAM,UAAU,GAAG,KAAK,CAAC,KAAK,CAAC,OAAO,IAAI,kBAAkB,CAAC;QAC7D,OAAO,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC,UAAU,CAAC;IAC5D,CAAC;IAED;;;;OAIG;IACI,gBAAgB,CAAC,KAAqB,EAAE,QAAkB;QAC/D,OAAO,QAAQ,CAAC,aAAa,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;IACpD,CAAC;CACF"} -------------------------------------------------------------------------------- /dist/es2015/utils.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Retrieves the nested attribute value using dot "." values 3 | * @param attributeString 4 | * @param value 5 | */ 6 | export function nestedAttributeValue(attributeString, value) { 7 | const attributes = attributeString.split('.'); 8 | let content = value; 9 | for (let index = 0; index < attributes.length; index++) { 10 | if (content[attributes[index]] === undefined) { 11 | return undefined; 12 | } 13 | content = content[attributes[index]]; 14 | } 15 | return content; 16 | } 17 | /** 18 | * Deep merges two object taking first input as reference and second input being the properties to be merged to first. 19 | * @param object1 20 | * @param object2 21 | */ 22 | export function mergeDeep(object1, object2) { 23 | for (const key in object1) { 24 | if (object2.hasOwnProperty(key)) { 25 | if (object2[key] instanceof Object) { 26 | object1[key] = mergeDeep({}, object2[key]); 27 | } 28 | else { 29 | object1[key] = object2[key]; 30 | } 31 | } 32 | } 33 | for (const key in object2) { 34 | if (!object1.hasOwnProperty(key)) { 35 | object1[key] = object2[key]; 36 | } 37 | } 38 | return object1; 39 | } 40 | //# sourceMappingURL=utils.js.map -------------------------------------------------------------------------------- /dist/es2015/utils.js.map: -------------------------------------------------------------------------------- 1 | {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,MAAM,UAAU,oBAAoB,CAAC,eAAuB,EAAE,KAAU;IACtE,MAAM,UAAU,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC9C,IAAI,OAAO,GAAG,KAAK,CAAC;IAEpB,KAAK,IAAI,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,UAAU,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE;QACtD,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,KAAK,SAAS,EAAE;YAC5C,OAAO,SAAS,CAAC;SAClB;QAED,OAAO,GAAG,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;KACtC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CACvB,OAAuC,EACvC,OAAuC;IACvC,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACzB,IAAI,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAC/B,IAAI,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,EAAE;gBAClC,OAAO,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,EAAE,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC;aAC5C;iBAAM;gBACL,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;aAC7B;SACF;KACF;IAED,KAAK,MAAM,GAAG,IAAI,OAAO,EAAE;QACzB,IAAI,CAAC,OAAO,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;YAChC,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;SAC7B;KACF;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"} -------------------------------------------------------------------------------- /example/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 |
4 | 5 |