@loopback/repository 4.0.0-alpha.6 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +25 -0
- package/README.md +94 -372
- package/dist/common-types.d.ts +96 -0
- package/dist/common-types.js +24 -0
- package/dist/common-types.js.map +1 -0
- package/dist/connectors/connector.d.ts +48 -0
- package/{lib → dist/connectors}/connector.js +1 -1
- package/dist/connectors/connector.js.map +1 -0
- package/{lib/crud-connector.d.ts → dist/connectors/crud.connector.d.ts} +51 -51
- package/{lib/common-types.js → dist/connectors/crud.connector.js} +2 -2
- package/dist/connectors/crud.connector.js.map +1 -0
- package/dist/connectors/index.d.ts +3 -0
- package/dist/connectors/index.js +11 -0
- package/dist/connectors/index.js.map +1 -0
- package/{lib6/kv-connector.d.ts → dist/connectors/kv.connector.d.ts} +28 -28
- package/{lib/datasource.js → dist/connectors/kv.connector.js} +2 -2
- package/dist/connectors/kv.connector.js.map +1 -0
- package/dist/datasource.d.ts +27 -0
- package/{lib6 → dist}/datasource.js +1 -1
- package/dist/datasource.js.map +1 -0
- package/dist/decorators/index.d.ts +3 -0
- package/dist/decorators/index.js +11 -0
- package/dist/decorators/index.js.map +1 -0
- package/dist/decorators/metadata.d.ts +12 -0
- package/dist/decorators/metadata.js +51 -0
- package/dist/decorators/metadata.js.map +1 -0
- package/dist/decorators/model.decorator.d.ts +40 -0
- package/dist/decorators/model.decorator.js +112 -0
- package/dist/decorators/model.decorator.js.map +1 -0
- package/dist/decorators/repository.decorator.d.ts +106 -0
- package/dist/decorators/repository.decorator.js +114 -0
- package/dist/decorators/repository.decorator.js.map +1 -0
- package/dist/define-model-class.d.ts +55 -0
- package/dist/define-model-class.js +57 -0
- package/dist/define-model-class.js.map +1 -0
- package/dist/define-repository-class.d.ts +119 -0
- package/dist/define-repository-class.js +98 -0
- package/dist/define-repository-class.js.map +1 -0
- package/dist/errors/entity-not-found.error.d.ts +8 -0
- package/dist/errors/entity-not-found.error.js +28 -0
- package/dist/errors/entity-not-found.error.js.map +1 -0
- package/dist/errors/index.d.ts +2 -0
- package/dist/errors/index.js +10 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/errors/invalid-relation.error.d.ts +10 -0
- package/dist/errors/invalid-relation.error.js +28 -0
- package/dist/errors/invalid-relation.error.js.map +1 -0
- package/dist/index.d.ts +30 -0
- package/dist/index.js +39 -0
- package/dist/index.js.map +1 -0
- package/dist/keys.d.ts +34 -0
- package/dist/keys.js +44 -0
- package/dist/keys.js.map +1 -0
- package/dist/mixins/index.d.ts +1 -0
- package/dist/mixins/index.js +9 -0
- package/dist/mixins/index.js.map +1 -0
- package/dist/mixins/repository.mixin.d.ts +377 -0
- package/dist/mixins/repository.mixin.js +405 -0
- package/dist/mixins/repository.mixin.js.map +1 -0
- package/dist/model.d.ts +232 -0
- package/dist/model.js +367 -0
- package/dist/model.js.map +1 -0
- package/dist/relations/belongs-to/belongs-to.accessor.d.ts +17 -0
- package/dist/relations/belongs-to/belongs-to.accessor.js +40 -0
- package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -0
- package/dist/relations/belongs-to/belongs-to.decorator.d.ts +11 -0
- package/dist/relations/belongs-to/belongs-to.decorator.js +64 -0
- package/dist/relations/belongs-to/belongs-to.decorator.js.map +1 -0
- package/dist/relations/belongs-to/belongs-to.helpers.d.ts +17 -0
- package/dist/relations/belongs-to/belongs-to.helpers.js +63 -0
- package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -0
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +14 -0
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +36 -0
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -0
- package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -0
- package/dist/relations/belongs-to/belongs-to.repository.js +33 -0
- package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -0
- package/dist/relations/belongs-to/index.d.ts +4 -0
- package/dist/relations/belongs-to/index.js +12 -0
- package/dist/relations/belongs-to/index.js.map +1 -0
- package/dist/relations/has-many/has-many-through.helpers.d.ts +182 -0
- package/dist/relations/has-many/has-many-through.helpers.js +282 -0
- package/dist/relations/has-many/has-many-through.helpers.js.map +1 -0
- package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +16 -0
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js +78 -0
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -0
- package/dist/relations/has-many/has-many-through.repository-factory.d.ts +17 -0
- package/dist/relations/has-many/has-many-through.repository-factory.js +37 -0
- package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -0
- package/dist/relations/has-many/has-many-through.repository.d.ts +114 -0
- package/dist/relations/has-many/has-many-through.repository.js +103 -0
- package/dist/relations/has-many/has-many-through.repository.js.map +1 -0
- package/dist/relations/has-many/has-many.decorator.d.ts +11 -0
- package/dist/relations/has-many/has-many.decorator.js +36 -0
- package/dist/relations/has-many/has-many.decorator.js.map +1 -0
- package/dist/relations/has-many/has-many.helpers.d.ts +26 -0
- package/dist/relations/has-many/has-many.helpers.js +78 -0
- package/dist/relations/has-many/has-many.helpers.js.map +1 -0
- package/dist/relations/has-many/has-many.inclusion-resolver.d.ts +14 -0
- package/dist/relations/has-many/has-many.inclusion-resolver.js +45 -0
- package/dist/relations/has-many/has-many.inclusion-resolver.js.map +1 -0
- package/dist/relations/has-many/has-many.repository-factory.d.ts +28 -0
- package/dist/relations/has-many/has-many.repository-factory.js +39 -0
- package/dist/relations/has-many/has-many.repository-factory.js.map +1 -0
- package/dist/relations/has-many/has-many.repository.d.ts +54 -0
- package/dist/relations/has-many/has-many.repository.js +38 -0
- package/dist/relations/has-many/has-many.repository.js.map +1 -0
- package/dist/relations/has-many/index.d.ts +6 -0
- package/dist/relations/has-many/index.js +14 -0
- package/dist/relations/has-many/index.js.map +1 -0
- package/dist/relations/has-one/has-one.decorator.d.ts +3 -0
- package/dist/relations/has-one/has-one.decorator.js +37 -0
- package/dist/relations/has-one/has-one.decorator.js.map +1 -0
- package/dist/relations/has-one/has-one.helpers.d.ts +17 -0
- package/dist/relations/has-one/has-one.helpers.js +64 -0
- package/dist/relations/has-one/has-one.helpers.js.map +1 -0
- package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +14 -0
- package/dist/relations/has-one/has-one.inclusion-resolver.js +35 -0
- package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -0
- package/dist/relations/has-one/has-one.repository-factory.d.ts +28 -0
- package/dist/relations/has-one/has-one.repository-factory.js +39 -0
- package/dist/relations/has-one/has-one.repository-factory.js.map +1 -0
- package/dist/relations/has-one/has-one.repository.d.ts +53 -0
- package/dist/relations/has-one/has-one.repository.js +45 -0
- package/dist/relations/has-one/has-one.repository.js.map +1 -0
- package/dist/relations/has-one/index.d.ts +3 -0
- package/dist/relations/has-one/index.js +11 -0
- package/dist/relations/has-one/index.js.map +1 -0
- package/dist/relations/index.d.ts +6 -0
- package/dist/relations/index.js +14 -0
- package/dist/relations/index.js.map +1 -0
- package/dist/relations/relation.decorator.d.ts +39 -0
- package/dist/relations/relation.decorator.js +88 -0
- package/dist/relations/relation.decorator.js.map +1 -0
- package/dist/relations/relation.helpers.d.ts +105 -0
- package/dist/relations/relation.helpers.js +298 -0
- package/dist/relations/relation.helpers.js.map +1 -0
- package/dist/relations/relation.types.d.ts +142 -0
- package/dist/relations/relation.types.js +21 -0
- package/dist/relations/relation.types.js.map +1 -0
- package/dist/repositories/constraint-utils.d.ts +49 -0
- package/dist/repositories/constraint-utils.js +87 -0
- package/dist/repositories/constraint-utils.js.map +1 -0
- package/dist/repositories/index.d.ts +5 -0
- package/dist/repositories/index.js +13 -0
- package/dist/repositories/index.js.map +1 -0
- package/dist/repositories/kv.repository.bridge.d.ts +30 -0
- package/dist/repositories/kv.repository.bridge.js +76 -0
- package/dist/repositories/kv.repository.bridge.js.map +1 -0
- package/dist/repositories/kv.repository.d.ts +74 -0
- package/{lib/crud-connector.js → dist/repositories/kv.repository.js} +2 -2
- package/dist/repositories/kv.repository.js.map +1 -0
- package/dist/repositories/legacy-juggler-bridge.d.ts +305 -0
- package/dist/repositories/legacy-juggler-bridge.js +452 -0
- package/dist/repositories/legacy-juggler-bridge.js.map +1 -0
- package/dist/repositories/repository.d.ts +223 -0
- package/dist/repositories/repository.js +157 -0
- package/dist/repositories/repository.js.map +1 -0
- package/dist/transaction.d.ts +30 -0
- package/dist/transaction.js +18 -0
- package/dist/transaction.js.map +1 -0
- package/dist/type-resolver.d.ts +42 -0
- package/dist/type-resolver.js +61 -0
- package/dist/type-resolver.js.map +1 -0
- package/{lib6 → dist}/types/any.d.ts +1 -1
- package/{lib6 → dist}/types/any.js +3 -2
- package/dist/types/any.js.map +1 -0
- package/{lib6 → dist}/types/array.d.ts +4 -4
- package/{lib → dist}/types/array.js +6 -4
- package/dist/types/array.js.map +1 -0
- package/{lib → dist}/types/boolean.d.ts +1 -1
- package/{lib → dist}/types/boolean.js +3 -2
- package/dist/types/boolean.js.map +1 -0
- package/{lib6 → dist}/types/buffer.d.ts +2 -2
- package/{lib6 → dist}/types/buffer.js +8 -6
- package/dist/types/buffer.js.map +1 -0
- package/{lib → dist}/types/date.d.ts +1 -1
- package/{lib6 → dist}/types/date.js +6 -4
- package/dist/types/date.js.map +1 -0
- package/{lib → dist}/types/index.d.ts +11 -9
- package/dist/types/index.js +49 -0
- package/dist/types/index.js.map +1 -0
- package/{lib6 → dist}/types/model.d.ts +2 -1
- package/{lib → dist}/types/model.js +2 -2
- package/dist/types/model.js.map +1 -0
- package/dist/types/null.d.ts +12 -0
- package/{lib6/types/boolean.js → dist/types/null.js} +12 -11
- package/dist/types/null.js.map +1 -0
- package/{lib6 → dist}/types/number.d.ts +1 -1
- package/{lib6 → dist}/types/number.js +6 -4
- package/dist/types/number.js.map +1 -0
- package/{lib → dist}/types/object.d.ts +1 -1
- package/{lib6 → dist}/types/object.js +7 -6
- package/dist/types/object.js.map +1 -0
- package/{lib → dist}/types/string.d.ts +1 -1
- package/{lib → dist}/types/string.js +3 -2
- package/dist/types/string.js.map +1 -0
- package/{lib → dist}/types/type.d.ts +7 -7
- package/{lib6 → dist}/types/type.js +1 -1
- package/dist/types/type.js.map +1 -0
- package/{lib → dist}/types/union.d.ts +1 -1
- package/{lib6 → dist}/types/union.js +6 -4
- package/dist/types/union.js.map +1 -0
- package/package.json +49 -32
- package/src/common-types.ts +123 -0
- package/src/connectors/connector.ts +70 -0
- package/src/connectors/crud.connector.ts +208 -0
- package/src/connectors/index.ts +8 -0
- package/src/connectors/kv.connector.ts +113 -0
- package/src/datasource.ts +37 -0
- package/src/decorators/index.ts +8 -0
- package/src/decorators/metadata.ts +84 -0
- package/src/decorators/model.decorator.ts +166 -0
- package/src/decorators/repository.decorator.ts +223 -0
- package/src/define-model-class.ts +90 -0
- package/src/define-repository-class.ts +170 -0
- package/src/errors/entity-not-found.error.ts +40 -0
- package/src/errors/index.ts +7 -0
- package/src/errors/invalid-relation.error.ts +39 -0
- package/src/index.ts +36 -0
- package/src/keys.ts +40 -0
- package/{index.d.ts → src/mixins/index.ts} +2 -2
- package/src/mixins/repository.mixin.ts +499 -0
- package/src/model.ts +539 -0
- package/src/relations/belongs-to/belongs-to.accessor.ts +74 -0
- package/src/relations/belongs-to/belongs-to.decorator.ts +81 -0
- package/src/relations/belongs-to/belongs-to.helpers.ts +78 -0
- package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +71 -0
- package/src/relations/belongs-to/belongs-to.repository.ts +55 -0
- package/src/relations/belongs-to/index.ts +9 -0
- package/src/relations/has-many/has-many-through.helpers.ts +361 -0
- package/src/relations/has-many/has-many-through.inclusion-resolver.ts +135 -0
- package/src/relations/has-many/has-many-through.repository-factory.ts +121 -0
- package/src/relations/has-many/has-many-through.repository.ts +318 -0
- package/src/relations/has-many/has-many.decorator.ts +38 -0
- package/src/relations/has-many/has-many.helpers.ts +100 -0
- package/src/relations/has-many/has-many.inclusion-resolver.ts +88 -0
- package/src/relations/has-many/has-many.repository-factory.ts +76 -0
- package/src/relations/has-many/has-many.repository.ts +118 -0
- package/src/relations/has-many/index.ts +11 -0
- package/src/relations/has-one/has-one.decorator.ts +40 -0
- package/src/relations/has-one/has-one.helpers.ts +84 -0
- package/src/relations/has-one/has-one.inclusion-resolver.ts +65 -0
- package/src/relations/has-one/has-one.repository-factory.ts +72 -0
- package/src/relations/has-one/has-one.repository.ts +127 -0
- package/src/relations/has-one/index.ts +8 -0
- package/src/relations/index.ts +11 -0
- package/src/relations/relation.decorator.ts +90 -0
- package/src/relations/relation.helpers.ts +364 -0
- package/src/relations/relation.types.ts +180 -0
- package/src/repositories/constraint-utils.ts +98 -0
- package/src/repositories/index.ts +10 -0
- package/src/repositories/kv.repository.bridge.ts +97 -0
- package/src/repositories/kv.repository.ts +87 -0
- package/src/repositories/legacy-juggler-bridge.ts +788 -0
- package/src/repositories/repository.ts +441 -0
- package/src/transaction.ts +39 -0
- package/src/type-resolver.ts +98 -0
- package/src/types/any.ts +38 -0
- package/src/types/array.ts +53 -0
- package/src/types/boolean.ts +35 -0
- package/src/types/buffer.ts +53 -0
- package/src/types/date.ts +61 -0
- package/src/types/index.ts +52 -0
- package/src/types/model.ts +24 -0
- package/src/types/null.ts +35 -0
- package/src/types/number.ts +42 -0
- package/src/types/object.ts +53 -0
- package/src/types/string.ts +42 -0
- package/src/types/type.ts +51 -0
- package/src/types/union.ts +55 -0
- package/api-docs/apple-touch-icon-114x114-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-144x144-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-57x57-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-72x72-precomposed.png +0 -0
- package/api-docs/apple-touch-icon-precomposed.png +0 -0
- package/api-docs/apple-touch-icon.png +0 -0
- package/api-docs/css/bootstrap.min.css +0 -9
- package/api-docs/css/code-themes/arta.css +0 -158
- package/api-docs/css/code-themes/ascetic.css +0 -50
- package/api-docs/css/code-themes/brown_paper.css +0 -104
- package/api-docs/css/code-themes/brown_papersq.png +0 -0
- package/api-docs/css/code-themes/dark.css +0 -103
- package/api-docs/css/code-themes/default.css +0 -135
- package/api-docs/css/code-themes/far.css +0 -111
- package/api-docs/css/code-themes/github.css +0 -127
- package/api-docs/css/code-themes/googlecode.css +0 -144
- package/api-docs/css/code-themes/idea.css +0 -121
- package/api-docs/css/code-themes/ir_black.css +0 -104
- package/api-docs/css/code-themes/magula.css +0 -121
- package/api-docs/css/code-themes/monokai.css +0 -114
- package/api-docs/css/code-themes/pojoaque.css +0 -104
- package/api-docs/css/code-themes/pojoaque.jpg +0 -0
- package/api-docs/css/code-themes/rainbow.css +0 -114
- package/api-docs/css/code-themes/school_book.css +0 -111
- package/api-docs/css/code-themes/school_book.png +0 -0
- package/api-docs/css/code-themes/sl-theme.css +0 -45
- package/api-docs/css/code-themes/solarized_dark.css +0 -88
- package/api-docs/css/code-themes/solarized_light.css +0 -88
- package/api-docs/css/code-themes/sunburst.css +0 -158
- package/api-docs/css/code-themes/tomorrow-night-blue.css +0 -52
- package/api-docs/css/code-themes/tomorrow-night-bright.css +0 -51
- package/api-docs/css/code-themes/tomorrow-night-eighties.css +0 -51
- package/api-docs/css/code-themes/tomorrow-night.css +0 -52
- package/api-docs/css/code-themes/tomorrow.css +0 -49
- package/api-docs/css/code-themes/vs.css +0 -86
- package/api-docs/css/code-themes/xcode.css +0 -154
- package/api-docs/css/code-themes/zenburn.css +0 -115
- package/api-docs/css/main.css +0 -139
- package/api-docs/favicon.ico +0 -0
- package/api-docs/fonts/0ihfXUL2emPh0ROJezvraLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/fonts/OsJ2DjdpjqFRVUSto6IffLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/fonts/_aijTyevf54tkVDLy-dlnLO3LdcAZYWl9Si6vvxL-qU.woff +0 -0
- package/api-docs/index.html +0 -17872
- package/api-docs/js/main.js +0 -19
- package/api-docs/js/vendor/bootstrap.min.js +0 -6
- package/api-docs/js/vendor/jquery-1.10.1.min.js +0 -6
- package/api-docs/js/vendor/jquery.scrollTo-1.4.3.1.js +0 -218
- package/api-docs/js/vendor/modernizr-2.6.2-respond-1.1.0.min.js +0 -11
- package/index.js +0 -9
- package/lib/common-types.d.ts +0 -44
- package/lib/common-types.js.map +0 -1
- package/lib/connector.d.ts +0 -12
- package/lib/connector.js.map +0 -1
- package/lib/crud-connector.js.map +0 -1
- package/lib/datasource.d.ts +0 -11
- package/lib/datasource.js.map +0 -1
- package/lib/decorators/model.d.ts +0 -14
- package/lib/decorators/model.js +0 -35
- package/lib/decorators/model.js.map +0 -1
- package/lib/decorators/relation.d.ts +0 -65
- package/lib/decorators/relation.js +0 -126
- package/lib/decorators/relation.js.map +0 -1
- package/lib/decorators/repository.d.ts +0 -61
- package/lib/decorators/repository.js +0 -103
- package/lib/decorators/repository.js.map +0 -1
- package/lib/index.d.ts +0 -15
- package/lib/index.js +0 -19
- package/lib/index.js.map +0 -1
- package/lib/kv-connector.d.ts +0 -77
- package/lib/kv-connector.js +0 -7
- package/lib/kv-connector.js.map +0 -1
- package/lib/kv-repository.d.ts +0 -78
- package/lib/kv-repository.js +0 -7
- package/lib/kv-repository.js.map +0 -1
- package/lib/legacy-juggler-bridge.d.ts +0 -44
- package/lib/legacy-juggler-bridge.js +0 -119
- package/lib/legacy-juggler-bridge.js.map +0 -1
- package/lib/loopback-datasource-juggler.d.ts +0 -666
- package/lib/loopback-datasource-juggler.js +0 -8
- package/lib/loopback-datasource-juggler.js.map +0 -1
- package/lib/mixin.d.ts +0 -43
- package/lib/mixin.js +0 -34
- package/lib/mixin.js.map +0 -1
- package/lib/model.d.ts +0 -127
- package/lib/model.js +0 -187
- package/lib/model.js.map +0 -1
- package/lib/query.d.ts +0 -112
- package/lib/query.js +0 -25
- package/lib/query.js.map +0 -1
- package/lib/repository.d.ts +0 -172
- package/lib/repository.js +0 -127
- package/lib/repository.js.map +0 -1
- package/lib/types/any.d.ts +0 -12
- package/lib/types/any.js +0 -35
- package/lib/types/any.js.map +0 -1
- package/lib/types/array.d.ts +0 -14
- package/lib/types/array.js.map +0 -1
- package/lib/types/boolean.js.map +0 -1
- package/lib/types/buffer.d.ts +0 -14
- package/lib/types/buffer.js +0 -57
- package/lib/types/buffer.js.map +0 -1
- package/lib/types/date.js +0 -60
- package/lib/types/date.js.map +0 -1
- package/lib/types/index.js +0 -33
- package/lib/types/index.js.map +0 -1
- package/lib/types/model.d.ts +0 -11
- package/lib/types/model.js.map +0 -1
- package/lib/types/number.d.ts +0 -12
- package/lib/types/number.js +0 -40
- package/lib/types/number.js.map +0 -1
- package/lib/types/object.js +0 -49
- package/lib/types/object.js.map +0 -1
- package/lib/types/string.js.map +0 -1
- package/lib/types/type.js +0 -7
- package/lib/types/type.js.map +0 -1
- package/lib/types/union.js +0 -51
- package/lib/types/union.js.map +0 -1
- package/lib6/common-types.d.ts +0 -44
- package/lib6/common-types.js +0 -7
- package/lib6/common-types.js.map +0 -1
- package/lib6/connector.d.ts +0 -12
- package/lib6/connector.js +0 -7
- package/lib6/connector.js.map +0 -1
- package/lib6/crud-connector.d.ts +0 -130
- package/lib6/crud-connector.js +0 -7
- package/lib6/crud-connector.js.map +0 -1
- package/lib6/datasource.d.ts +0 -11
- package/lib6/datasource.js.map +0 -1
- package/lib6/decorators/model.d.ts +0 -14
- package/lib6/decorators/model.js +0 -35
- package/lib6/decorators/model.js.map +0 -1
- package/lib6/decorators/relation.d.ts +0 -65
- package/lib6/decorators/relation.js +0 -126
- package/lib6/decorators/relation.js.map +0 -1
- package/lib6/decorators/repository.d.ts +0 -61
- package/lib6/decorators/repository.js +0 -113
- package/lib6/decorators/repository.js.map +0 -1
- package/lib6/index.d.ts +0 -15
- package/lib6/index.js +0 -19
- package/lib6/index.js.map +0 -1
- package/lib6/kv-connector.js +0 -7
- package/lib6/kv-connector.js.map +0 -1
- package/lib6/kv-repository.d.ts +0 -78
- package/lib6/kv-repository.js +0 -7
- package/lib6/kv-repository.js.map +0 -1
- package/lib6/legacy-juggler-bridge.d.ts +0 -44
- package/lib6/legacy-juggler-bridge.js +0 -119
- package/lib6/legacy-juggler-bridge.js.map +0 -1
- package/lib6/loopback-datasource-juggler.d.ts +0 -666
- package/lib6/loopback-datasource-juggler.js +0 -8
- package/lib6/loopback-datasource-juggler.js.map +0 -1
- package/lib6/mixin.d.ts +0 -43
- package/lib6/mixin.js +0 -34
- package/lib6/mixin.js.map +0 -1
- package/lib6/model.d.ts +0 -127
- package/lib6/model.js +0 -187
- package/lib6/model.js.map +0 -1
- package/lib6/query.d.ts +0 -112
- package/lib6/query.js +0 -25
- package/lib6/query.js.map +0 -1
- package/lib6/repository.d.ts +0 -172
- package/lib6/repository.js +0 -127
- package/lib6/repository.js.map +0 -1
- package/lib6/types/any.js.map +0 -1
- package/lib6/types/array.js +0 -53
- package/lib6/types/array.js.map +0 -1
- package/lib6/types/boolean.d.ts +0 -12
- package/lib6/types/boolean.js.map +0 -1
- package/lib6/types/buffer.js.map +0 -1
- package/lib6/types/date.d.ts +0 -12
- package/lib6/types/date.js.map +0 -1
- package/lib6/types/index.d.ts +0 -30
- package/lib6/types/index.js +0 -33
- package/lib6/types/index.js.map +0 -1
- package/lib6/types/model.js +0 -25
- package/lib6/types/model.js.map +0 -1
- package/lib6/types/number.js.map +0 -1
- package/lib6/types/object.d.ts +0 -15
- package/lib6/types/object.js.map +0 -1
- package/lib6/types/string.d.ts +0 -12
- package/lib6/types/string.js +0 -40
- package/lib6/types/string.js.map +0 -1
- package/lib6/types/type.d.ts +0 -38
- package/lib6/types/type.js.map +0 -1
- package/lib6/types/union.d.ts +0 -14
- package/lib6/types/union.js.map +0 -1
package/dist/model.js
ADDED
|
@@ -0,0 +1,367 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2017,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/repository
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.rejectNavigationalPropertiesInData = exports.Event = exports.Entity = exports.ValueObject = exports.Model = exports.ModelDefinition = void 0;
|
|
8
|
+
const index_1 = require("./index");
|
|
9
|
+
/**
|
|
10
|
+
* Definition for a model
|
|
11
|
+
*/
|
|
12
|
+
class ModelDefinition {
|
|
13
|
+
constructor(nameOrDef) {
|
|
14
|
+
if (typeof nameOrDef === 'string') {
|
|
15
|
+
nameOrDef = { name: nameOrDef };
|
|
16
|
+
}
|
|
17
|
+
const { name, properties, settings, relations } = nameOrDef;
|
|
18
|
+
this.name = name;
|
|
19
|
+
this.properties = {};
|
|
20
|
+
if (properties) {
|
|
21
|
+
for (const p in properties) {
|
|
22
|
+
this.addProperty(p, properties[p]);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
this.settings = settings !== null && settings !== void 0 ? settings : new Map();
|
|
26
|
+
this.relations = relations !== null && relations !== void 0 ? relations : {};
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Add a property
|
|
30
|
+
* @param name - Property definition or name (string)
|
|
31
|
+
* @param definitionOrType - Definition or property type
|
|
32
|
+
*/
|
|
33
|
+
addProperty(name, definitionOrType) {
|
|
34
|
+
const definition = definitionOrType.type
|
|
35
|
+
? definitionOrType
|
|
36
|
+
: { type: definitionOrType };
|
|
37
|
+
if (definition.id === true &&
|
|
38
|
+
definition.generated === true &&
|
|
39
|
+
definition.type !== undefined &&
|
|
40
|
+
definition.useDefaultIdType === undefined) {
|
|
41
|
+
definition.useDefaultIdType = false;
|
|
42
|
+
}
|
|
43
|
+
this.properties[name] = definition;
|
|
44
|
+
return this;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Add a setting
|
|
48
|
+
* @param name - Setting name
|
|
49
|
+
* @param value - Setting value
|
|
50
|
+
*/
|
|
51
|
+
addSetting(name, value) {
|
|
52
|
+
this.settings[name] = value;
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Define a new relation.
|
|
57
|
+
* @param definition - The definition of the new relation.
|
|
58
|
+
*/
|
|
59
|
+
addRelation(definition) {
|
|
60
|
+
this.relations[definition.name] = definition;
|
|
61
|
+
return this;
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Define a new belongsTo relation.
|
|
65
|
+
* @param name - The name of the belongsTo relation.
|
|
66
|
+
* @param definition - The definition of the belongsTo relation.
|
|
67
|
+
*/
|
|
68
|
+
belongsTo(name, definition) {
|
|
69
|
+
const meta = {
|
|
70
|
+
...definition,
|
|
71
|
+
name,
|
|
72
|
+
type: index_1.RelationType.belongsTo,
|
|
73
|
+
targetsMany: false,
|
|
74
|
+
};
|
|
75
|
+
return this.addRelation(meta);
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Define a new hasOne relation.
|
|
79
|
+
* @param name - The name of the hasOne relation.
|
|
80
|
+
* @param definition - The definition of the hasOne relation.
|
|
81
|
+
*/
|
|
82
|
+
hasOne(name, definition) {
|
|
83
|
+
const meta = {
|
|
84
|
+
...definition,
|
|
85
|
+
name,
|
|
86
|
+
type: index_1.RelationType.hasOne,
|
|
87
|
+
targetsMany: false,
|
|
88
|
+
};
|
|
89
|
+
return this.addRelation(meta);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Define a new hasMany relation.
|
|
93
|
+
* @param name - The name of the hasMany relation.
|
|
94
|
+
* @param definition - The definition of the hasMany relation.
|
|
95
|
+
*/
|
|
96
|
+
hasMany(name, definition) {
|
|
97
|
+
const meta = {
|
|
98
|
+
...definition,
|
|
99
|
+
name,
|
|
100
|
+
type: index_1.RelationType.hasMany,
|
|
101
|
+
targetsMany: true,
|
|
102
|
+
};
|
|
103
|
+
return this.addRelation(meta);
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Get an array of names of ID properties, which are specified in
|
|
107
|
+
* the model settings or properties with `id` attribute.
|
|
108
|
+
*
|
|
109
|
+
* @example
|
|
110
|
+
* ```ts
|
|
111
|
+
* {
|
|
112
|
+
* settings: {
|
|
113
|
+
* id: ['id']
|
|
114
|
+
* }
|
|
115
|
+
* properties: {
|
|
116
|
+
* id: {
|
|
117
|
+
* type: 'string',
|
|
118
|
+
* id: true
|
|
119
|
+
* }
|
|
120
|
+
* }
|
|
121
|
+
* }
|
|
122
|
+
* ```
|
|
123
|
+
*/
|
|
124
|
+
idProperties() {
|
|
125
|
+
if (typeof this.settings.id === 'string') {
|
|
126
|
+
return [this.settings.id];
|
|
127
|
+
}
|
|
128
|
+
else if (Array.isArray(this.settings.id)) {
|
|
129
|
+
return this.settings.id;
|
|
130
|
+
}
|
|
131
|
+
const idProps = Object.keys(this.properties).filter(prop => this.properties[prop].id);
|
|
132
|
+
return idProps;
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
exports.ModelDefinition = ModelDefinition;
|
|
136
|
+
function asJSON(value) {
|
|
137
|
+
if (value == null)
|
|
138
|
+
return value;
|
|
139
|
+
if (typeof value.toJSON === 'function') {
|
|
140
|
+
return value.toJSON();
|
|
141
|
+
}
|
|
142
|
+
// Handle arrays
|
|
143
|
+
if (Array.isArray(value)) {
|
|
144
|
+
return value.map(item => asJSON(item));
|
|
145
|
+
}
|
|
146
|
+
return value;
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Convert a value to a plain object as DTO.
|
|
150
|
+
*
|
|
151
|
+
* - The prototype of the value in primitive types are preserved,
|
|
152
|
+
* like `Date`, `ObjectId`.
|
|
153
|
+
* - If the value is an instance of custom model, call `toObject` to convert.
|
|
154
|
+
* - If the value is an array, convert each element recursively.
|
|
155
|
+
*
|
|
156
|
+
* @param value the value to convert
|
|
157
|
+
* @param options the options
|
|
158
|
+
*/
|
|
159
|
+
function asObject(value, options) {
|
|
160
|
+
if (value == null)
|
|
161
|
+
return value;
|
|
162
|
+
if (typeof value.toObject === 'function') {
|
|
163
|
+
return value.toObject(options);
|
|
164
|
+
}
|
|
165
|
+
if (Array.isArray(value)) {
|
|
166
|
+
return value.map(item => asObject(item, options));
|
|
167
|
+
}
|
|
168
|
+
return value;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Base class for models
|
|
172
|
+
*/
|
|
173
|
+
class Model {
|
|
174
|
+
constructor(data) {
|
|
175
|
+
Object.assign(this, data);
|
|
176
|
+
}
|
|
177
|
+
static get modelName() {
|
|
178
|
+
var _a;
|
|
179
|
+
return ((_a = this.definition) === null || _a === void 0 ? void 0 : _a.name) || this.name;
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Serialize into a plain JSON object
|
|
183
|
+
*/
|
|
184
|
+
toJSON() {
|
|
185
|
+
const def = this.constructor.definition;
|
|
186
|
+
if (def == null || def.settings.strict === false) {
|
|
187
|
+
return this.toObject({ ignoreUnknownProperties: false });
|
|
188
|
+
}
|
|
189
|
+
const copyPropertyAsJson = (key) => {
|
|
190
|
+
const val = asJSON(this[key]);
|
|
191
|
+
if (val !== undefined) {
|
|
192
|
+
json[key] = val;
|
|
193
|
+
}
|
|
194
|
+
};
|
|
195
|
+
const json = {};
|
|
196
|
+
const hiddenProperties = def.settings.hiddenProperties || [];
|
|
197
|
+
for (const p in def.properties) {
|
|
198
|
+
if (p in this && !hiddenProperties.includes(p)) {
|
|
199
|
+
copyPropertyAsJson(p);
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
for (const r in def.relations) {
|
|
203
|
+
const relName = def.relations[r].name;
|
|
204
|
+
if (relName in this) {
|
|
205
|
+
copyPropertyAsJson(relName);
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
return json;
|
|
209
|
+
}
|
|
210
|
+
/**
|
|
211
|
+
* Convert to a plain object as DTO
|
|
212
|
+
*
|
|
213
|
+
* If `ignoreUnknownProperty` is set to false, convert all properties in the
|
|
214
|
+
* model instance, otherwise only convert the ones defined in the model
|
|
215
|
+
* definitions.
|
|
216
|
+
*
|
|
217
|
+
* See function `asObject` for each property's conversion rules.
|
|
218
|
+
*/
|
|
219
|
+
toObject(options) {
|
|
220
|
+
const def = this.constructor.definition;
|
|
221
|
+
const obj = {};
|
|
222
|
+
if ((options === null || options === void 0 ? void 0 : options.ignoreUnknownProperties) === false) {
|
|
223
|
+
const hiddenProperties = (def === null || def === void 0 ? void 0 : def.settings.hiddenProperties) || [];
|
|
224
|
+
for (const p in this) {
|
|
225
|
+
if (!hiddenProperties.includes(p)) {
|
|
226
|
+
const val = this[p];
|
|
227
|
+
obj[p] = asObject(val, options);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
return obj;
|
|
231
|
+
}
|
|
232
|
+
if (def === null || def === void 0 ? void 0 : def.relations) {
|
|
233
|
+
for (const r in def.relations) {
|
|
234
|
+
const relName = def.relations[r].name;
|
|
235
|
+
if (relName in this) {
|
|
236
|
+
obj[relName] = asObject(this[relName], {
|
|
237
|
+
...options,
|
|
238
|
+
ignoreUnknownProperties: false,
|
|
239
|
+
});
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
const props = def.properties;
|
|
244
|
+
const keys = Object.keys(props);
|
|
245
|
+
for (const i in keys) {
|
|
246
|
+
const propertyName = keys[i];
|
|
247
|
+
const val = this[propertyName];
|
|
248
|
+
if (val === undefined)
|
|
249
|
+
continue;
|
|
250
|
+
obj[propertyName] = asObject(val, options);
|
|
251
|
+
}
|
|
252
|
+
return obj;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
exports.Model = Model;
|
|
256
|
+
/**
|
|
257
|
+
* Base class for value objects - An object that contains attributes but has no
|
|
258
|
+
* conceptual identity. They should be treated as immutable.
|
|
259
|
+
*/
|
|
260
|
+
class ValueObject extends Model {
|
|
261
|
+
}
|
|
262
|
+
exports.ValueObject = ValueObject;
|
|
263
|
+
/**
|
|
264
|
+
* Base class for entities which have unique ids
|
|
265
|
+
*/
|
|
266
|
+
class Entity extends Model {
|
|
267
|
+
/**
|
|
268
|
+
* Get the names of identity properties (primary keys).
|
|
269
|
+
*/
|
|
270
|
+
static getIdProperties() {
|
|
271
|
+
return this.definition.idProperties();
|
|
272
|
+
}
|
|
273
|
+
/**
|
|
274
|
+
* Get the identity value for a given entity instance or entity data object.
|
|
275
|
+
*
|
|
276
|
+
* @param entityOrData - The data object for which to determine the identity
|
|
277
|
+
* value.
|
|
278
|
+
*/
|
|
279
|
+
static getIdOf(entityOrData) {
|
|
280
|
+
if (typeof entityOrData.getId === 'function') {
|
|
281
|
+
return entityOrData.getId();
|
|
282
|
+
}
|
|
283
|
+
const idName = this.getIdProperties()[0];
|
|
284
|
+
return entityOrData[idName];
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the identity value. If the identity is a composite key, returns
|
|
288
|
+
* an object.
|
|
289
|
+
*/
|
|
290
|
+
getId() {
|
|
291
|
+
const definition = this.constructor.definition;
|
|
292
|
+
const idProps = definition.idProperties();
|
|
293
|
+
if (idProps.length === 1) {
|
|
294
|
+
return this[idProps[0]];
|
|
295
|
+
}
|
|
296
|
+
if (!idProps.length) {
|
|
297
|
+
throw new Error(`Invalid Entity ${this.constructor.name}:` +
|
|
298
|
+
'missing primary key (id) property');
|
|
299
|
+
}
|
|
300
|
+
return this.getIdObject();
|
|
301
|
+
}
|
|
302
|
+
/**
|
|
303
|
+
* Get the identity as an object, such as `{id: 1}` or
|
|
304
|
+
* `{schoolId: 1, studentId: 2}`
|
|
305
|
+
*/
|
|
306
|
+
getIdObject() {
|
|
307
|
+
const definition = this.constructor.definition;
|
|
308
|
+
const idProps = definition.idProperties();
|
|
309
|
+
const idObj = {};
|
|
310
|
+
for (const idProp of idProps) {
|
|
311
|
+
idObj[idProp] = this[idProp];
|
|
312
|
+
}
|
|
313
|
+
return idObj;
|
|
314
|
+
}
|
|
315
|
+
/**
|
|
316
|
+
* Build the where object for the given id
|
|
317
|
+
* @param id - The id value
|
|
318
|
+
*/
|
|
319
|
+
static buildWhereForId(id) {
|
|
320
|
+
const where = {};
|
|
321
|
+
const idProps = this.definition.idProperties();
|
|
322
|
+
if (idProps.length === 1) {
|
|
323
|
+
where[idProps[0]] = id;
|
|
324
|
+
}
|
|
325
|
+
else {
|
|
326
|
+
for (const idProp of idProps) {
|
|
327
|
+
where[idProp] = id[idProp];
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
return where;
|
|
331
|
+
}
|
|
332
|
+
}
|
|
333
|
+
exports.Entity = Entity;
|
|
334
|
+
/**
|
|
335
|
+
* Domain events
|
|
336
|
+
*/
|
|
337
|
+
class Event {
|
|
338
|
+
}
|
|
339
|
+
exports.Event = Event;
|
|
340
|
+
/**
|
|
341
|
+
* Check model data for navigational properties linking to related models.
|
|
342
|
+
* Throw a descriptive error if any such property is found.
|
|
343
|
+
*
|
|
344
|
+
* @param modelClass Model constructor, e.g. `Product`.
|
|
345
|
+
* @param entityData Model instance or a plain-data object,
|
|
346
|
+
* e.g. `{name: 'pen'}`.
|
|
347
|
+
*/
|
|
348
|
+
function rejectNavigationalPropertiesInData(modelClass, data) {
|
|
349
|
+
const def = modelClass.definition;
|
|
350
|
+
const props = def.properties;
|
|
351
|
+
for (const r in def.relations) {
|
|
352
|
+
const relName = def.relations[r].name;
|
|
353
|
+
if (!(relName in data))
|
|
354
|
+
continue;
|
|
355
|
+
let msg = 'Navigational properties are not allowed in model data ' +
|
|
356
|
+
`(model "${modelClass.modelName}" property "${relName}"), ` +
|
|
357
|
+
'please remove it.';
|
|
358
|
+
if (relName in props) {
|
|
359
|
+
msg +=
|
|
360
|
+
' The error might be invoked by belongsTo relations, please make' +
|
|
361
|
+
' sure the relation name is not the same as the property name.';
|
|
362
|
+
}
|
|
363
|
+
throw new Error(msg);
|
|
364
|
+
}
|
|
365
|
+
}
|
|
366
|
+
exports.rejectNavigationalPropertiesInData = rejectNavigationalPropertiesInData;
|
|
367
|
+
//# sourceMappingURL=model.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model.js","sourceRoot":"","sources":["../src/model.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAGhE,mCAOiB;AAoGjB;;GAEG;AACH,MAAa,eAAe;IAQ1B,YAAY,SAAyC;QACnD,IAAI,OAAO,SAAS,KAAK,QAAQ,EAAE;YACjC,SAAS,GAAG,EAAC,IAAI,EAAE,SAAS,EAAC,CAAC;SAC/B;QACD,MAAM,EAAC,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,SAAS,EAAC,GAAG,SAAS,CAAC;QAE1D,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QAEjB,IAAI,CAAC,UAAU,GAAG,EAAE,CAAC;QACrB,IAAI,UAAU,EAAE;YACd,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE;gBAC1B,IAAI,CAAC,WAAW,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;aACpC;SACF;QAED,IAAI,CAAC,QAAQ,GAAG,QAAQ,aAAR,QAAQ,cAAR,QAAQ,GAAI,IAAI,GAAG,EAAE,CAAC;QACtC,IAAI,CAAC,SAAS,GAAG,SAAS,aAAT,SAAS,cAAT,SAAS,GAAI,EAAE,CAAC;IACnC,CAAC;IAED;;;;OAIG;IACH,WAAW,CACT,IAAY,EACZ,gBAAmD;QAEnD,MAAM,UAAU,GAAI,gBAAuC,CAAC,IAAI;YAC9D,CAAC,CAAE,gBAAuC;YAC1C,CAAC,CAAC,EAAC,IAAI,EAAE,gBAAgB,EAAC,CAAC;QAE7B,IACE,UAAU,CAAC,EAAE,KAAK,IAAI;YACtB,UAAU,CAAC,SAAS,KAAK,IAAI;YAC7B,UAAU,CAAC,IAAI,KAAK,SAAS;YAC7B,UAAU,CAAC,gBAAgB,KAAK,SAAS,EACzC;YACA,UAAU,CAAC,gBAAgB,GAAG,KAAK,CAAC;SACrC;QAED,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,UAAU,CAAC,IAAY,EAAE,KAAU;QACjC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QAC5B,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;OAGG;IACH,WAAW,CAAC,UAA4B;QACtC,IAAI,CAAC,SAAS,CAAC,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC;QAC7C,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;OAIG;IACH,SAAS,CACP,IAAY,EACZ,UAAsE;QAEtE,MAAM,IAAI,GAAwB;YAChC,GAAG,UAAU;YACb,IAAI;YACJ,IAAI,EAAE,oBAAY,CAAC,SAAS;YAC5B,WAAW,EAAE,KAAK;SACnB,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,MAAM,CACJ,IAAY,EACZ,UAAmE;QAEnE,MAAM,IAAI,GAAqB;YAC7B,GAAG,UAAU;YACb,IAAI;YACJ,IAAI,EAAE,oBAAY,CAAC,MAAM;YACzB,WAAW,EAAE,KAAK;SACnB,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACH,OAAO,CACL,IAAY,EACZ,UAAoE;QAEpE,MAAM,IAAI,GAAsB;YAC9B,GAAG,UAAU;YACb,IAAI;YACJ,IAAI,EAAE,oBAAY,CAAC,OAAO;YAC1B,WAAW,EAAE,IAAI;SAClB,CAAC;QACF,OAAO,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;;;;;;;;;;;;;;;OAkBG;IACH,YAAY;QACV,IAAI,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,KAAK,QAAQ,EAAE;YACxC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;SAC3B;aAAM,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE;YAC1C,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;SACzB;QACD,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,MAAM,CACjD,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,EAAE,CACjC,CAAC;QACF,OAAO,OAAO,CAAC;IACjB,CAAC;CACF;AA5JD,0CA4JC;AAED,SAAS,MAAM,CAAC,KAAU;IACxB,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,OAAO,KAAK,CAAC,MAAM,KAAK,UAAU,EAAE;QACtC,OAAO,KAAK,CAAC,MAAM,EAAE,CAAC;KACvB;IACD,gBAAgB;IAChB,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;KACxC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;GAUG;AACH,SAAS,QAAQ,CAAC,KAAU,EAAE,OAAiB;IAC7C,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,KAAK,CAAC;IAChC,IAAI,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,EAAE;QACxC,OAAO,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;KAChC;IACD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;QACxB,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;KACnD;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAa,KAAK;IA2FhB,YAAY,IAAwB;QAClC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC;IA5FD,MAAM,KAAK,SAAS;;QAClB,OAAO,CAAA,MAAA,IAAI,CAAC,UAAU,0CAAE,IAAI,KAAI,IAAI,CAAC,IAAI,CAAC;IAC5C,CAAC;IAID;;OAEG;IACH,MAAM;QACJ,MAAM,GAAG,GAAI,IAAI,CAAC,WAA4B,CAAC,UAAU,CAAC;QAC1D,IAAI,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,CAAC,MAAM,KAAK,KAAK,EAAE;YAChD,OAAO,IAAI,CAAC,QAAQ,CAAC,EAAC,uBAAuB,EAAE,KAAK,EAAC,CAAC,CAAC;SACxD;QAED,MAAM,kBAAkB,GAAG,CAAC,GAAW,EAAE,EAAE;YACzC,MAAM,GAAG,GAAG,MAAM,CAAE,IAAkB,CAAC,GAAG,CAAC,CAAC,CAAC;YAC7C,IAAI,GAAG,KAAK,SAAS,EAAE;gBACrB,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;aACjB;QACH,CAAC,CAAC;QAEF,MAAM,IAAI,GAAc,EAAE,CAAC;QAC3B,MAAM,gBAAgB,GAAa,GAAG,CAAC,QAAQ,CAAC,gBAAgB,IAAI,EAAE,CAAC;QACvE,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,UAAU,EAAE;YAC9B,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;gBAC9C,kBAAkB,CAAC,CAAC,CAAC,CAAC;aACvB;SACF;QAED,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtC,IAAI,OAAO,IAAI,IAAI,EAAE;gBACnB,kBAAkB,CAAC,OAAO,CAAC,CAAC;aAC7B;SACF;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ,CAAC,OAAiB;QACxB,MAAM,GAAG,GAAI,IAAI,CAAC,WAA4B,CAAC,UAAU,CAAC;QAC1D,MAAM,GAAG,GAAc,EAAE,CAAC;QAE1B,IAAI,CAAA,OAAO,aAAP,OAAO,uBAAP,OAAO,CAAE,uBAAuB,MAAK,KAAK,EAAE;YAC9C,MAAM,gBAAgB,GAAa,CAAA,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,QAAQ,CAAC,gBAAgB,KAAI,EAAE,CAAC;YACxE,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;gBACpB,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;oBACjC,MAAM,GAAG,GAAI,IAAkB,CAAC,CAAC,CAAC,CAAC;oBACnC,GAAG,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;iBACjC;aACF;YACD,OAAO,GAAG,CAAC;SACZ;QAED,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,SAAS,EAAE;YAClB,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;gBAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;gBACtC,IAAI,OAAO,IAAI,IAAI,EAAE;oBACnB,GAAG,CAAC,OAAO,CAAC,GAAG,QAAQ,CAAE,IAAkB,CAAC,OAAO,CAAC,EAAE;wBACpD,GAAG,OAAO;wBACV,uBAAuB,EAAE,KAAK;qBAC/B,CAAC,CAAC;iBACJ;aACF;SACF;QAED,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;QAC7B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEhC,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE;YACpB,MAAM,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM,GAAG,GAAI,IAAkB,CAAC,YAAY,CAAC,CAAC;YAE9C,IAAI,GAAG,KAAK,SAAS;gBAAE,SAAS;YAChC,GAAG,CAAC,YAAY,CAAC,GAAG,QAAQ,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;SAC5C;QAED,OAAO,GAAG,CAAC;IACb,CAAC;CAKF;AA9FD,sBA8FC;AAMD;;;GAGG;AACH,MAAsB,WAAY,SAAQ,KAAK;CAA0B;AAAzE,kCAAyE;AAEzE;;GAEG;AACH,MAAa,MAAO,SAAQ,KAAK;IAC/B;;OAEG;IACH,MAAM,CAAC,eAAe;QACpB,OAAO,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;IACxC,CAAC;IAED;;;;;OAKG;IACH,MAAM,CAAC,OAAO,CAAC,YAAuB;QACpC,IAAI,OAAO,YAAY,CAAC,KAAK,KAAK,UAAU,EAAE;YAC5C,OAAO,YAAY,CAAC,KAAK,EAAE,CAAC;SAC7B;QAED,MAAM,MAAM,GAAG,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;QACzC,OAAO,YAAY,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;IAED;;;OAGG;IACH,KAAK;QACH,MAAM,UAAU,GAAI,IAAI,CAAC,WAA6B,CAAC,UAAU,CAAC;QAClE,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,OAAQ,IAAkB,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;SACxC;QACD,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE;YACnB,MAAM,IAAI,KAAK,CACb,kBAAkB,IAAI,CAAC,WAAW,CAAC,IAAI,GAAG;gBACxC,mCAAmC,CACtC,CAAC;SACH;QACD,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5B,CAAC;IAED;;;OAGG;IACH,WAAW;QACT,MAAM,UAAU,GAAI,IAAI,CAAC,WAA6B,CAAC,UAAU,CAAC;QAClE,MAAM,OAAO,GAAG,UAAU,CAAC,YAAY,EAAE,CAAC;QAC1C,MAAM,KAAK,GAAG,EAAS,CAAC;QACxB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;YAC5B,KAAK,CAAC,MAAM,CAAC,GAAI,IAAkB,CAAC,MAAM,CAAC,CAAC;SAC7C;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED;;;OAGG;IACH,MAAM,CAAC,eAAe,CAAC,EAAO;QAC5B,MAAM,KAAK,GAAG,EAAS,CAAC;QACxB,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC;QAC/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE;YACxB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;SACxB;aAAM;YACL,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE;gBAC5B,KAAK,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;aAC5B;SACF;QACD,OAAO,KAAK,CAAC;IACf,CAAC;CACF;AAxED,wBAwEC;AAED;;GAEG;AACH,MAAa,KAAK;CAGjB;AAHD,sBAGC;AAMD;;;;;;;GAOG;AACH,SAAgB,kCAAkC,CAChD,UAAa,EACb,IAAgC;IAEhC,MAAM,GAAG,GAAG,UAAU,CAAC,UAAU,CAAC;IAClC,MAAM,KAAK,GAAG,GAAG,CAAC,UAAU,CAAC;IAE7B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE;QAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACtC,IAAI,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC;YAAE,SAAS;QAEjC,IAAI,GAAG,GACL,wDAAwD;YACxD,WAAW,UAAU,CAAC,SAAS,eAAe,OAAO,MAAM;YAC3D,mBAAmB,CAAC;QAEtB,IAAI,OAAO,IAAI,KAAK,EAAE;YACpB,GAAG;gBACD,iEAAiE;oBACjE,+DAA+D,CAAC;SACnE;QAED,MAAM,IAAI,KAAK,CAAC,GAAG,CAAC,CAAC;KACtB;AACH,CAAC;AAxBD,gFAwBC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Entity } from '../../model';
|
|
2
|
+
import { EntityCrudRepository } from '../../repositories/repository';
|
|
3
|
+
import { BelongsToDefinition, Getter, InclusionResolver } from '../relation.types';
|
|
4
|
+
export interface BelongsToAccessor<Target extends Entity, SourceId> {
|
|
5
|
+
/**
|
|
6
|
+
* Invoke the function to obtain HasManyRepository.
|
|
7
|
+
*/
|
|
8
|
+
(sourceId: SourceId): Promise<Target>;
|
|
9
|
+
/**
|
|
10
|
+
* Use `resolver` property to obtain an InclusionResolver for this relation.
|
|
11
|
+
*/
|
|
12
|
+
inclusionResolver: InclusionResolver<Entity, Target>;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Enforces a BelongsTo constraint on a repository
|
|
16
|
+
*/
|
|
17
|
+
export declare function createBelongsToAccessor<Target extends Entity, TargetId, Source extends Entity, SourceId>(belongsToMetadata: BelongsToDefinition, targetRepoGetter: Getter<EntityCrudRepository<Target, TargetId>>, sourceRepository: EntityCrudRepository<Source, SourceId>): BelongsToAccessor<Target, SourceId>;
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2019. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/repository
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createBelongsToAccessor = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
|
|
10
|
+
const belongs_to_helpers_1 = require("./belongs-to.helpers");
|
|
11
|
+
const belongs_to_inclusion_resolver_1 = require("./belongs-to.inclusion-resolver");
|
|
12
|
+
const belongs_to_repository_1 = require("./belongs-to.repository");
|
|
13
|
+
const debug = (0, debug_1.default)('loopback:repository:relations:belongs-to:accessor');
|
|
14
|
+
/**
|
|
15
|
+
* Enforces a BelongsTo constraint on a repository
|
|
16
|
+
*/
|
|
17
|
+
function createBelongsToAccessor(belongsToMetadata, targetRepoGetter, sourceRepository) {
|
|
18
|
+
const meta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(belongsToMetadata);
|
|
19
|
+
debug('Resolved BelongsTo relation metadata: %o', meta);
|
|
20
|
+
const result = async function getTargetInstanceOfBelongsTo(sourceId) {
|
|
21
|
+
const foreignKey = meta.keyFrom;
|
|
22
|
+
const primaryKey = meta.keyTo;
|
|
23
|
+
const sourceModel = await sourceRepository.findById(sourceId);
|
|
24
|
+
const foreignKeyValue = sourceModel[foreignKey];
|
|
25
|
+
// workaround to check referential integrity.
|
|
26
|
+
// should be removed once the memory connector ref integrity is done
|
|
27
|
+
// GH issue: https://github.com/loopbackio/loopback-next/issues/2333
|
|
28
|
+
if (!foreignKeyValue) {
|
|
29
|
+
return undefined;
|
|
30
|
+
}
|
|
31
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
32
|
+
const constraint = { [primaryKey]: foreignKeyValue };
|
|
33
|
+
const constrainedRepo = new belongs_to_repository_1.DefaultBelongsToRepository(targetRepoGetter, constraint);
|
|
34
|
+
return constrainedRepo.get();
|
|
35
|
+
};
|
|
36
|
+
result.inclusionResolver = (0, belongs_to_inclusion_resolver_1.createBelongsToInclusionResolver)(meta, targetRepoGetter);
|
|
37
|
+
return result;
|
|
38
|
+
}
|
|
39
|
+
exports.createBelongsToAccessor = createBelongsToAccessor;
|
|
40
|
+
//# sourceMappingURL=belongs-to.accessor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"belongs-to.accessor.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.accessor.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AASjC,6DAA8D;AAC9D,mFAAiF;AACjF,mEAAmE;AAEnE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,mDAAmD,CAAC,CAAC;AAchF;;GAEG;AACH,SAAgB,uBAAuB,CAMrC,iBAAsC,EACtC,gBAAgE,EAChE,gBAAwD;IAExD,MAAM,IAAI,GAAG,IAAA,6CAAwB,EAAC,iBAAiB,CAAC,CAAC;IACzD,KAAK,CAAC,0CAA0C,EAAE,IAAI,CAAC,CAAC;IACxD,MAAM,MAAM,GACV,KAAK,UAAU,4BAA4B,CAAC,QAAkB;QAC5D,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC;QAChC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC;QAC9B,MAAM,WAAW,GAAG,MAAM,gBAAgB,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,MAAM,eAAe,GAAG,WAAW,CAAC,UAA0B,CAAC,CAAC;QAChE,6CAA6C;QAC7C,oEAAoE;QACpE,oEAAoE;QACpE,IAAI,CAAC,eAAe,EAAE;YACpB,OAAO,SAA8B,CAAC;SACvC;QACD,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,UAAU,CAAC,EAAE,eAAe,EAAC,CAAC;QACxD,MAAM,eAAe,GAAG,IAAI,kDAA0B,CACpD,gBAAgB,EAChB,UAAgC,CACjC,CAAC;QACF,OAAO,eAAe,CAAC,GAAG,EAAE,CAAC;IAC/B,CAAC,CAAC;IAEJ,MAAM,CAAC,iBAAiB,GAAG,IAAA,gEAAgC,EACzD,IAAI,EACJ,gBAAgB,CACjB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AAtCD,0DAsCC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Entity, EntityResolver, PropertyDefinition } from '../../model';
|
|
2
|
+
import { BelongsToDefinition } from '../relation.types';
|
|
3
|
+
/**
|
|
4
|
+
* Decorator for belongsTo
|
|
5
|
+
* @param targetResolver - A resolver function that returns the target model for
|
|
6
|
+
* a belongsTo relation
|
|
7
|
+
* @param definition - Optional metadata for setting up a belongsTo relation
|
|
8
|
+
* @param propertyDefinition - Optional metadata for setting up the property
|
|
9
|
+
* @returns A property decorator
|
|
10
|
+
*/
|
|
11
|
+
export declare function belongsTo<T extends Entity>(targetResolver: EntityResolver<T>, definition?: Partial<BelongsToDefinition>, propertyDefinition?: Partial<PropertyDefinition>): (decoratedTarget: Entity, decoratedKey: string) => void;
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2018,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/repository
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.belongsTo = void 0;
|
|
8
|
+
const core_1 = require("@loopback/core");
|
|
9
|
+
const decorators_1 = require("../../decorators");
|
|
10
|
+
const relation_decorator_1 = require("../relation.decorator");
|
|
11
|
+
const relation_types_1 = require("../relation.types");
|
|
12
|
+
/**
|
|
13
|
+
* Decorator for belongsTo
|
|
14
|
+
* @param targetResolver - A resolver function that returns the target model for
|
|
15
|
+
* a belongsTo relation
|
|
16
|
+
* @param definition - Optional metadata for setting up a belongsTo relation
|
|
17
|
+
* @param propertyDefinition - Optional metadata for setting up the property
|
|
18
|
+
* @returns A property decorator
|
|
19
|
+
*/
|
|
20
|
+
function belongsTo(targetResolver, definition, propertyDefinition) {
|
|
21
|
+
return function (decoratedTarget, decoratedKey) {
|
|
22
|
+
var _a;
|
|
23
|
+
const propType = (_a = core_1.MetadataInspector.getDesignTypeForProperty(decoratedTarget, decoratedKey)) !== null && _a !== void 0 ? _a : propertyDefinition === null || propertyDefinition === void 0 ? void 0 : propertyDefinition.type;
|
|
24
|
+
if (!propType) {
|
|
25
|
+
const fullPropName = core_1.DecoratorFactory.getTargetName(decoratedTarget, decoratedKey);
|
|
26
|
+
throw new Error(`Cannot infer type of model property ${fullPropName} because ` +
|
|
27
|
+
'TypeScript compiler option `emitDecoratorMetadata` is not set. ' +
|
|
28
|
+
'Please enable `emitDecoratorMetadata` or use the third argument of ' +
|
|
29
|
+
'`@belongsTo` decorator to specify the property type explicitly.');
|
|
30
|
+
}
|
|
31
|
+
const propMeta = Object.assign({},
|
|
32
|
+
// properties provided by the caller
|
|
33
|
+
propertyDefinition,
|
|
34
|
+
// properties enforced by the decorator
|
|
35
|
+
{
|
|
36
|
+
type: propType,
|
|
37
|
+
// TODO(bajtos) Make the foreign key required once our REST API layer
|
|
38
|
+
// allows controller methods to exclude required properties
|
|
39
|
+
// required: true,
|
|
40
|
+
});
|
|
41
|
+
(0, decorators_1.property)(propMeta)(decoratedTarget, decoratedKey);
|
|
42
|
+
// @belongsTo() is typically decorating the foreign key property,
|
|
43
|
+
// e.g. customerId. We need to strip the trailing "Id" suffix from the name.
|
|
44
|
+
const relationName = decoratedKey.replace(/Id$/, '');
|
|
45
|
+
const meta = Object.assign(
|
|
46
|
+
// default values, can be customized by the caller
|
|
47
|
+
{
|
|
48
|
+
keyFrom: decoratedKey,
|
|
49
|
+
name: relationName,
|
|
50
|
+
},
|
|
51
|
+
// properties provided by the caller
|
|
52
|
+
definition,
|
|
53
|
+
// properties enforced by the decorator
|
|
54
|
+
{
|
|
55
|
+
type: relation_types_1.RelationType.belongsTo,
|
|
56
|
+
targetsMany: false,
|
|
57
|
+
source: decoratedTarget.constructor,
|
|
58
|
+
target: targetResolver,
|
|
59
|
+
});
|
|
60
|
+
(0, relation_decorator_1.relation)(meta)(decoratedTarget, decoratedKey);
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
exports.belongsTo = belongsTo;
|
|
64
|
+
//# sourceMappingURL=belongs-to.decorator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"belongs-to.decorator.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.decorator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAmE;AACnE,iDAA0C;AAC1C,8DAA+C;AAE/C,sDAAoE;AAEpE;;;;;;;GAOG;AACH,SAAgB,SAAS,CACvB,cAAiC,EACjC,UAAyC,EACzC,kBAAgD;IAEhD,OAAO,UAAU,eAAuB,EAAE,YAAoB;;QAC5D,MAAM,QAAQ,GACZ,MAAA,wBAAiB,CAAC,wBAAwB,CACxC,eAAe,EACf,YAAY,CACb,mCAAI,kBAAkB,aAAlB,kBAAkB,uBAAlB,kBAAkB,CAAE,IAAI,CAAC;QAEhC,IAAI,CAAC,QAAQ,EAAE;YACb,MAAM,YAAY,GAAG,uBAAgB,CAAC,aAAa,CACjD,eAAe,EACf,YAAY,CACb,CAAC;YACF,MAAM,IAAI,KAAK,CACb,uCAAuC,YAAY,WAAW;gBAC5D,iEAAiE;gBACjE,qEAAqE;gBACrE,iEAAiE,CACpE,CAAC;SACH;QAED,MAAM,QAAQ,GAAuB,MAAM,CAAC,MAAM,CAChD,EAAE;QACF,oCAAoC;QACpC,kBAAkB;QAClB,uCAAuC;QACvC;YACE,IAAI,EAAE,QAAQ;YACd,qEAAqE;YACrE,2DAA2D;YAC3D,kBAAkB;SACnB,CACF,CAAC;QACF,IAAA,qBAAQ,EAAC,QAAQ,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;QAElD,iEAAiE;QACjE,4EAA4E;QAC5E,MAAM,YAAY,GAAG,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAErD,MAAM,IAAI,GAAwB,MAAM,CAAC,MAAM;QAC7C,kDAAkD;QAClD;YACE,OAAO,EAAE,YAAY;YACrB,IAAI,EAAE,YAAY;SACnB;QACD,oCAAoC;QACpC,UAAU;QACV,uCAAuC;QACvC;YACE,IAAI,EAAE,6BAAY,CAAC,SAAS;YAC5B,WAAW,EAAE,KAAK;YAClB,MAAM,EAAE,eAAe,CAAC,WAAW;YACnC,MAAM,EAAE,cAAc;SACvB,CACF,CAAC;QACF,IAAA,6BAAQ,EAAC,IAAI,CAAC,CAAC,eAAe,EAAE,YAAY,CAAC,CAAC;IAChD,CAAC,CAAC;AACJ,CAAC;AA7DD,8BA6DC"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { BelongsToDefinition } from '../relation.types';
|
|
2
|
+
/**
|
|
3
|
+
* Relation definition with optional metadata (e.g. `keyTo`) filled in.
|
|
4
|
+
* @internal
|
|
5
|
+
*/
|
|
6
|
+
export declare type BelongsToResolvedDefinition = BelongsToDefinition & {
|
|
7
|
+
keyFrom: string;
|
|
8
|
+
keyTo: string;
|
|
9
|
+
};
|
|
10
|
+
/**
|
|
11
|
+
* Resolves given belongsTo metadata if target is specified to be a resolver.
|
|
12
|
+
* Mainly used to infer what the `keyTo` property should be from the target's
|
|
13
|
+
* property id metadata
|
|
14
|
+
* @param relationMeta - belongsTo metadata to resolve
|
|
15
|
+
* @internal
|
|
16
|
+
*/
|
|
17
|
+
export declare function resolveBelongsToMetadata(relationMeta: BelongsToDefinition): BelongsToResolvedDefinition;
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2019. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/repository
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.resolveBelongsToMetadata = void 0;
|
|
8
|
+
const tslib_1 = require("tslib");
|
|
9
|
+
const debug_1 = (0, tslib_1.__importDefault)(require("debug"));
|
|
10
|
+
const lodash_1 = require("lodash");
|
|
11
|
+
const errors_1 = require("../../errors");
|
|
12
|
+
const type_resolver_1 = require("../../type-resolver");
|
|
13
|
+
const relation_types_1 = require("../relation.types");
|
|
14
|
+
const debug = (0, debug_1.default)('loopback:repository:relations:belongs-to:helpers');
|
|
15
|
+
/**
|
|
16
|
+
* Resolves given belongsTo metadata if target is specified to be a resolver.
|
|
17
|
+
* Mainly used to infer what the `keyTo` property should be from the target's
|
|
18
|
+
* property id metadata
|
|
19
|
+
* @param relationMeta - belongsTo metadata to resolve
|
|
20
|
+
* @internal
|
|
21
|
+
*/
|
|
22
|
+
function resolveBelongsToMetadata(relationMeta) {
|
|
23
|
+
if (relationMeta.type !== relation_types_1.RelationType.belongsTo) {
|
|
24
|
+
const reason = 'relation type must be BelongsTo';
|
|
25
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
26
|
+
}
|
|
27
|
+
if (!(0, type_resolver_1.isTypeResolver)(relationMeta.target)) {
|
|
28
|
+
const reason = 'target must be a type resolver';
|
|
29
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
30
|
+
}
|
|
31
|
+
const sourceModel = relationMeta.source;
|
|
32
|
+
if (!sourceModel || !sourceModel.modelName) {
|
|
33
|
+
const reason = 'source model must be defined';
|
|
34
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
35
|
+
}
|
|
36
|
+
const targetModel = relationMeta.target();
|
|
37
|
+
const targetName = targetModel.modelName;
|
|
38
|
+
debug('Resolved model %s from given metadata: %o', targetName, targetModel);
|
|
39
|
+
let keyFrom;
|
|
40
|
+
if (relationMeta.keyFrom &&
|
|
41
|
+
relationMeta.source.definition.properties[relationMeta.keyFrom]) {
|
|
42
|
+
keyFrom = relationMeta.keyFrom;
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
keyFrom = (0, lodash_1.camelCase)(targetName + '_id');
|
|
46
|
+
}
|
|
47
|
+
const targetProperties = targetModel.definition.properties;
|
|
48
|
+
debug('relation metadata from %o: %o', targetName, targetProperties);
|
|
49
|
+
if (relationMeta.keyTo && targetProperties[relationMeta.keyTo]) {
|
|
50
|
+
// The explicit cast is needed because of a limitation of type inference
|
|
51
|
+
return Object.assign(relationMeta, {
|
|
52
|
+
keyFrom,
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
const targetPrimaryKey = targetModel.definition.idProperties()[0];
|
|
56
|
+
if (!targetPrimaryKey) {
|
|
57
|
+
const reason = `${targetName} does not have any primary key (id property)`;
|
|
58
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
59
|
+
}
|
|
60
|
+
return Object.assign(relationMeta, { keyFrom, keyTo: targetPrimaryKey });
|
|
61
|
+
}
|
|
62
|
+
exports.resolveBelongsToMetadata = resolveBelongsToMetadata;
|
|
63
|
+
//# sourceMappingURL=belongs-to.helpers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"belongs-to.helpers.js","sourceRoot":"","sources":["../../../src/relations/belongs-to/belongs-to.helpers.ts"],"names":[],"mappings":";AAAA,iDAAiD;AACjD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,+DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAoE;AAEpE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,kDAAkD,CAAC,CAAC;AAW/E;;;;;;GAMG;AACH,SAAgB,wBAAwB,CAAC,YAAiC;IACxE,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,SAAS,EAAE;QAClE,MAAM,MAAM,GAAG,iCAAiC,CAAC;QACjD,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,IAAI,CAAC,IAAA,8BAAc,EAAC,YAAY,CAAC,MAAM,CAAC,EAAE;QACxC,MAAM,MAAM,GAAG,gCAAgC,CAAC;QAChD,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IACxC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,SAAS,EAAE;QAC1C,MAAM,MAAM,GAAG,8BAA8B,CAAC;QAC9C,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,UAAU,GAAG,WAAW,CAAC,SAAS,CAAC;IACzC,KAAK,CAAC,2CAA2C,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;IAE5E,IAAI,OAAO,CAAC;IACZ,IACE,YAAY,CAAC,OAAO;QACpB,YAAY,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,EAC/D;QACA,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC;KAChC;SAAM;QACL,OAAO,GAAG,IAAA,kBAAS,EAAC,UAAU,GAAG,KAAK,CAAC,CAAC;KACzC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,UAAU,CAAC;IAC3D,KAAK,CAAC,+BAA+B,EAAE,UAAU,EAAE,gBAAgB,CAAC,CAAC;IAErE,IAAI,YAAY,CAAC,KAAK,IAAI,gBAAgB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QAC9D,wEAAwE;QACxE,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;YACjC,OAAO;SACR,CAAgC,CAAC;KACnC;IAED,MAAM,gBAAgB,GAAG,WAAW,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,CAAC;IAClE,IAAI,CAAC,gBAAgB,EAAE;QACrB,MAAM,MAAM,GAAG,GAAG,UAAU,8CAA8C,CAAC;QAC3E,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAE,KAAK,EAAE,gBAAgB,EAAC,CAAC,CAAC;AACzE,CAAC;AAhDD,4DAgDC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { Entity } from '../../model';
|
|
2
|
+
import { EntityCrudRepository } from '../../repositories';
|
|
3
|
+
import { BelongsToDefinition, Getter, InclusionResolver } from '../relation.types';
|
|
4
|
+
/**
|
|
5
|
+
* Creates InclusionResolver for BelongsTo relation.
|
|
6
|
+
* Notice that this function only generates the inclusionResolver.
|
|
7
|
+
* It doesn't register it for the source repository.
|
|
8
|
+
*
|
|
9
|
+
* Notice: scope field for inclusion is not supported yet
|
|
10
|
+
*
|
|
11
|
+
* @param meta - resolved BelongsToMetadata
|
|
12
|
+
* @param getTargetRepo - target repository i.e where related instances are
|
|
13
|
+
*/
|
|
14
|
+
export declare function createBelongsToInclusionResolver<Target extends Entity, TargetID, TargetRelations extends object>(meta: BelongsToDefinition, getTargetRepo: Getter<EntityCrudRepository<Target, TargetID, TargetRelations>>): InclusionResolver<Entity, Target>;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
// Copyright IBM Corp. 2019,2020. All Rights Reserved.
|
|
3
|
+
// Node module: @loopback/repository
|
|
4
|
+
// This file is licensed under the MIT License.
|
|
5
|
+
// License text available at https://opensource.org/licenses/MIT
|
|
6
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
|
+
exports.createBelongsToInclusionResolver = void 0;
|
|
8
|
+
const relation_helpers_1 = require("../relation.helpers");
|
|
9
|
+
const belongs_to_helpers_1 = require("./belongs-to.helpers");
|
|
10
|
+
/**
|
|
11
|
+
* Creates InclusionResolver for BelongsTo relation.
|
|
12
|
+
* Notice that this function only generates the inclusionResolver.
|
|
13
|
+
* It doesn't register it for the source repository.
|
|
14
|
+
*
|
|
15
|
+
* Notice: scope field for inclusion is not supported yet
|
|
16
|
+
*
|
|
17
|
+
* @param meta - resolved BelongsToMetadata
|
|
18
|
+
* @param getTargetRepo - target repository i.e where related instances are
|
|
19
|
+
*/
|
|
20
|
+
function createBelongsToInclusionResolver(meta, getTargetRepo) {
|
|
21
|
+
const relationMeta = (0, belongs_to_helpers_1.resolveBelongsToMetadata)(meta);
|
|
22
|
+
return async function fetchIncludedModels(entities, inclusion, options) {
|
|
23
|
+
if (!entities.length)
|
|
24
|
+
return [];
|
|
25
|
+
const sourceKey = relationMeta.keyFrom;
|
|
26
|
+
const sourceIds = entities.map(e => e[sourceKey]);
|
|
27
|
+
const targetKey = relationMeta.keyTo;
|
|
28
|
+
const dedupedSourceIds = (0, relation_helpers_1.deduplicate)(sourceIds);
|
|
29
|
+
const scope = typeof inclusion === 'string' ? {} : inclusion.scope;
|
|
30
|
+
const targetRepo = await getTargetRepo();
|
|
31
|
+
const targetsFound = await (0, relation_helpers_1.findByForeignKeys)(targetRepo, targetKey, dedupedSourceIds.filter(e => e), scope, options);
|
|
32
|
+
return (0, relation_helpers_1.flattenTargetsOfOneToOneRelation)(sourceIds, targetsFound, targetKey);
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
exports.createBelongsToInclusionResolver = createBelongsToInclusionResolver;
|
|
36
|
+
//# sourceMappingURL=belongs-to.inclusion-resolver.js.map
|