@loopback/repository 2.5.1 → 2.9.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/CHANGELOG.md +57 -0
- package/dist/decorators/metadata.d.ts +1 -1
- package/dist/decorators/metadata.js +6 -6
- package/dist/decorators/metadata.js.map +1 -1
- package/dist/decorators/model.decorator.d.ts +1 -1
- package/dist/decorators/model.decorator.js +10 -10
- package/dist/decorators/model.decorator.js.map +1 -1
- package/dist/decorators/repository.decorator.js +4 -4
- package/dist/decorators/repository.decorator.js.map +1 -1
- package/dist/define-model-class.d.ts +2 -2
- package/dist/mixins/repository.mixin.d.ts +82 -43
- package/dist/mixins/repository.mixin.js +52 -15
- package/dist/mixins/repository.mixin.js.map +1 -1
- package/dist/model.js +3 -2
- package/dist/model.js.map +1 -1
- package/dist/query.d.ts +30 -0
- package/dist/query.js +50 -0
- package/dist/query.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.decorator.js +2 -2
- package/dist/relations/belongs-to/belongs-to.decorator.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.repository.d.ts +1 -1
- package/dist/relations/has-many/has-many-through-repository.factory.d.ts +11 -0
- package/dist/relations/has-many/has-many-through-repository.factory.js +28 -0
- package/dist/relations/has-many/has-many-through-repository.factory.js.map +1 -0
- package/dist/relations/has-many/has-many-through.helpers.d.ts +87 -14
- package/dist/relations/has-many/has-many-through.helpers.js +114 -20
- package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
- package/dist/relations/has-many/has-many-through.repository.d.ts +38 -2
- package/dist/relations/has-many/has-many-through.repository.js +71 -0
- package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
- package/dist/relations/has-many/has-many.helpers.js +3 -2
- package/dist/relations/has-many/has-many.helpers.js.map +1 -1
- package/dist/relations/has-many/has-many.repository.d.ts +1 -1
- package/dist/relations/has-many/index.d.ts +4 -2
- package/dist/relations/has-many/index.js +4 -2
- package/dist/relations/has-many/index.js.map +1 -1
- package/dist/relations/has-one/has-one.helpers.js +2 -1
- package/dist/relations/has-one/has-one.helpers.js.map +1 -1
- package/dist/relations/has-one/has-one.repository.d.ts +1 -1
- package/dist/relations/relation.decorator.js +7 -7
- package/dist/relations/relation.decorator.js.map +1 -1
- package/dist/relations/relation.types.d.ts +1 -1
- package/dist/relations/relation.types.js +2 -2
- package/dist/relations/relation.types.js.map +1 -1
- package/dist/repositories/constraint-utils.d.ts +10 -0
- package/dist/repositories/constraint-utils.js +16 -1
- package/dist/repositories/constraint-utils.js.map +1 -1
- package/dist/repositories/legacy-juggler-bridge.d.ts +33 -2
- package/dist/repositories/legacy-juggler-bridge.js +34 -0
- package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
- package/dist/type-resolver.js +2 -1
- package/dist/type-resolver.js.map +1 -1
- package/dist/types/index.js +1 -1
- package/dist/types/index.js.map +1 -1
- package/dist/types/null.js +1 -1
- package/dist/types/null.js.map +1 -1
- package/package.json +14 -12
- package/src/decorators/metadata.ts +1 -1
- package/src/decorators/model.decorator.ts +1 -1
- package/src/decorators/repository.decorator.ts +1 -1
- package/src/define-model-class.ts +2 -2
- package/src/mixins/repository.mixin.ts +70 -41
- package/src/model.ts +2 -2
- package/src/query.ts +55 -0
- package/src/relations/belongs-to/belongs-to.decorator.ts +1 -1
- package/src/relations/belongs-to/belongs-to.repository.ts +1 -1
- package/src/relations/has-many/has-many-through-repository.factory.ts +100 -0
- package/src/relations/has-many/has-many-through.helpers.ts +138 -21
- package/src/relations/has-many/has-many-through.repository.ts +174 -2
- package/src/relations/has-many/has-many.helpers.ts +2 -3
- package/src/relations/has-many/has-many.repository.ts +1 -1
- package/src/relations/has-many/index.ts +4 -2
- package/src/relations/has-one/has-one.helpers.ts +1 -2
- package/src/relations/has-one/has-one.repository.ts +1 -1
- package/src/relations/relation.decorator.ts +2 -2
- package/src/relations/relation.types.ts +1 -1
- package/src/repositories/constraint-utils.ts +17 -0
- package/src/repositories/legacy-juggler-bridge.ts +59 -1
- package/src/type-resolver.ts +2 -1
- package/src/types/index.ts +1 -1
- package/src/types/null.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -3,6 +3,63 @@
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
See [Conventional Commits](https://conventionalcommits.org) for commit guidelines.
|
|
5
5
|
|
|
6
|
+
# [2.9.0](https://github.com/strongloop/loopback-next/compare/@loopback/repository@2.8.0...@loopback/repository@2.9.0) (2020-06-30)
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
### Features
|
|
10
|
+
|
|
11
|
+
* add HasManyThroughFactory to Juggler bridge ([c2d4352](https://github.com/strongloop/loopback-next/commit/c2d43524be4fd1345970b29e722e57890f2ea766))
|
|
12
|
+
* **repository:** add link and unlink methods ([31dc4e9](https://github.com/strongloop/loopback-next/commit/31dc4e989ae981732fa43f7f48dfb8f19d5ac796))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
# [2.8.0](https://github.com/strongloop/loopback-next/compare/@loopback/repository@2.7.0...@loopback/repository@2.8.0) (2020-06-23)
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
### Bug Fixes
|
|
22
|
+
|
|
23
|
+
* set node version to >=10.16 to support events.once ([e39da1c](https://github.com/strongloop/loopback-next/commit/e39da1ca47728eafaf83c10ce35b09b03b6a4edc))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### Features
|
|
27
|
+
|
|
28
|
+
* **repository:** implement hasManyThrough repo ([ecd2780](https://github.com/strongloop/loopback-next/commit/ecd2780c034e902e72905f0bbefe3a6fe08c3a2c))
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
|
|
34
|
+
# [2.7.0](https://github.com/strongloop/loopback-next/compare/@loopback/repository@2.6.0...@loopback/repository@2.7.0) (2020-06-11)
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
### Bug Fixes
|
|
38
|
+
|
|
39
|
+
* **repository:** fix DynamicModelCtor type to correctly preserve Props ([927789e](https://github.com/strongloop/loopback-next/commit/927789e254f4db7945201609683ae83a18f1c48d))
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
### Features
|
|
43
|
+
|
|
44
|
+
* **repository:** add hasManyThrough factory and tests ([3304963](https://github.com/strongloop/loopback-next/commit/33049634e2320cd30e5f9403e03db17000dd49cd))
|
|
45
|
+
* **repository:** add more helpers for HasManyThrough ([c795544](https://github.com/strongloop/loopback-next/commit/c7955446c38b2dfd0d064eb6fa4d90a7f76283a2))
|
|
46
|
+
* **repository:** adds fuzzy where filters to WhereBuilder ([7f79805](https://github.com/strongloop/loopback-next/commit/7f798052b33077b12ae2becb5c42453800aa54aa)), closes [#5577](https://github.com/strongloop/loopback-next/issues/5577)
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
# [2.6.0](https://github.com/strongloop/loopback-next/compare/@loopback/repository@2.5.1...@loopback/repository@2.6.0) (2020-05-28)
|
|
53
|
+
|
|
54
|
+
|
|
55
|
+
### Features
|
|
56
|
+
|
|
57
|
+
* **repository:** allow components to contribute models for DI ([e74fc57](https://github.com/strongloop/loopback-next/commit/e74fc5725a52227a4cf37ae7d2796df0f5288142))
|
|
58
|
+
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
|
|
6
63
|
## [2.5.1](https://github.com/strongloop/loopback-next/compare/@loopback/repository@2.5.0...@loopback/repository@2.5.1) (2020-05-20)
|
|
7
64
|
|
|
8
65
|
**Note:** Version bump only for package @loopback/repository
|
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.ModelMetadataHelper = void 0;
|
|
8
|
-
const
|
|
8
|
+
const core_1 = require("@loopback/core");
|
|
9
9
|
const model_1 = require("../model");
|
|
10
10
|
const relations_1 = require("../relations");
|
|
11
11
|
const model_decorator_1 = require("./model.decorator");
|
|
@@ -18,7 +18,7 @@ class ModelMetadataHelper {
|
|
|
18
18
|
* the output of the metadata retrieval functions.
|
|
19
19
|
*/
|
|
20
20
|
static getModelMetadata(target, options) {
|
|
21
|
-
const classDef =
|
|
21
|
+
const classDef = core_1.MetadataInspector.getClassMetadata(model_decorator_1.MODEL_WITH_PROPERTIES_KEY, target,
|
|
22
22
|
// https://github.com/strongloop/loopback-next/issues/4721
|
|
23
23
|
// The `target` can be a subclass for a base model
|
|
24
24
|
{ ...options, ownMetadataOnly: true });
|
|
@@ -29,7 +29,7 @@ class ModelMetadataHelper {
|
|
|
29
29
|
return classDef;
|
|
30
30
|
}
|
|
31
31
|
else {
|
|
32
|
-
const modelMeta =
|
|
32
|
+
const modelMeta = core_1.MetadataInspector.getClassMetadata(model_decorator_1.MODEL_KEY, target, options);
|
|
33
33
|
if (!modelMeta) {
|
|
34
34
|
return {};
|
|
35
35
|
}
|
|
@@ -39,9 +39,9 @@ class ModelMetadataHelper {
|
|
|
39
39
|
const meta = new model_1.ModelDefinition(Object.assign({}, modelMeta));
|
|
40
40
|
// set properties lost from creating instance of ModelDefinition
|
|
41
41
|
Object.assign(meta, modelMeta);
|
|
42
|
-
meta.properties = Object.assign({},
|
|
43
|
-
meta.relations = Object.assign({},
|
|
44
|
-
|
|
42
|
+
meta.properties = Object.assign({}, core_1.MetadataInspector.getAllPropertyMetadata(model_decorator_1.MODEL_PROPERTIES_KEY, target.prototype, options));
|
|
43
|
+
meta.relations = Object.assign({}, core_1.MetadataInspector.getAllPropertyMetadata(relations_1.RELATIONS_KEY, target.prototype, options));
|
|
44
|
+
core_1.MetadataInspector.defineMetadata(model_decorator_1.MODEL_WITH_PROPERTIES_KEY.key, meta, target);
|
|
45
45
|
return meta;
|
|
46
46
|
}
|
|
47
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE
|
|
1
|
+
{"version":3,"file":"metadata.js","sourceRoot":"","sources":["../../src/decorators/metadata.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,yCAAoE;AACpE,oCAAgE;AAChE,4CAA2C;AAC3C,uDAK2B;AAE3B,MAAa,mBAAmB;IAC9B;;;;;;OAMG;IACH,MAAM,CAAC,gBAAgB,CACrB,MAAgB,EAChB,OAA2B;QAE3B,MAAM,QAAQ,GAAG,wBAAiB,CAAC,gBAAgB,CACjD,2CAAyB,EACzB,MAAM;QACN,0DAA0D;QAC1D,kDAAkD;QAClD,EAAC,GAAG,OAAO,EAAE,eAAe,EAAE,IAAI,EAAC,CACpC,CAAC;QACF,yCAAyC;QACzC,uEAAuE;QACvE,iEAAiE;QACjE,IAAI,QAAQ,EAAE;YACZ,OAAO,QAAQ,CAAC;SACjB;aAAM;YACL,MAAM,SAAS,GAAG,wBAAiB,CAAC,gBAAgB,CAClD,2BAAS,EACT,MAAM,EACN,OAAO,CACR,CAAC;YACF,IAAI,CAAC,SAAS,EAAE;gBACd,OAAO,EAAE,CAAC;aACX;iBAAM;gBACL,sEAAsE;gBAEtE,6DAA6D;gBAC7D,MAAM,IAAI,GAAG,IAAI,uBAAe,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,CAAC,CAAC;gBAE/D,gEAAgE;gBAChE,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;gBAE/B,IAAI,CAAC,UAAU,GAAG,MAAM,CAAC,MAAM,CAChB,EAAE,EACf,wBAAiB,CAAC,sBAAsB,CACtC,sCAAoB,EACpB,MAAM,CAAC,SAAS,EAChB,OAAO,CACR,CACF,CAAC;gBAEF,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,MAAM,CACL,EAAE,EACzB,wBAAiB,CAAC,sBAAsB,CACtC,yBAAa,EACb,MAAM,CAAC,SAAS,EAChB,OAAO,CACR,CACF,CAAC;gBAEF,wBAAiB,CAAC,cAAc,CAC9B,2CAAyB,CAAC,GAAG,EAC7B,IAAI,EACJ,MAAM,CACP,CAAC;gBACF,OAAO,IAAI,CAAC;aACb;SACF;IACH,CAAC;CACF;AApED,kDAoEC"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { MetadataAccessor, MetadataMap } from '@loopback/
|
|
1
|
+
import { MetadataAccessor, MetadataMap } from '@loopback/core';
|
|
2
2
|
import { ModelDefinition, ModelDefinitionSyntax, PropertyDefinition, PropertyType } from '../model';
|
|
3
3
|
export declare const MODEL_KEY: MetadataAccessor<Partial<ModelDefinitionSyntax>, ClassDecorator>;
|
|
4
4
|
export declare const MODEL_PROPERTIES_KEY: MetadataAccessor<PropertyDefinition, PropertyDecorator>;
|
|
@@ -5,12 +5,12 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.property = exports.buildModelDefinition = exports.model = exports.MODEL_WITH_PROPERTIES_KEY = exports.MODEL_PROPERTIES_KEY = exports.MODEL_KEY = void 0;
|
|
8
|
-
const
|
|
8
|
+
const core_1 = require("@loopback/core");
|
|
9
9
|
const model_1 = require("../model");
|
|
10
10
|
const relation_decorator_1 = require("../relations/relation.decorator");
|
|
11
|
-
exports.MODEL_KEY =
|
|
12
|
-
exports.MODEL_PROPERTIES_KEY =
|
|
13
|
-
exports.MODEL_WITH_PROPERTIES_KEY =
|
|
11
|
+
exports.MODEL_KEY = core_1.MetadataAccessor.create('loopback:model');
|
|
12
|
+
exports.MODEL_PROPERTIES_KEY = core_1.MetadataAccessor.create('loopback:model-properties');
|
|
13
|
+
exports.MODEL_WITH_PROPERTIES_KEY = core_1.MetadataAccessor.create('loopback:model-and-properties');
|
|
14
14
|
/**
|
|
15
15
|
* Decorator for model definitions
|
|
16
16
|
* @param definition
|
|
@@ -23,7 +23,7 @@ function model(definition) {
|
|
|
23
23
|
const def = Object.assign(definition, {
|
|
24
24
|
name: (_a = definition.name) !== null && _a !== void 0 ? _a : target.name,
|
|
25
25
|
});
|
|
26
|
-
const decorator =
|
|
26
|
+
const decorator = core_1.ClassDecoratorFactory.createDecorator(exports.MODEL_KEY, definition, { decoratorName: '@model' });
|
|
27
27
|
decorator(target);
|
|
28
28
|
// Build "ModelDefinition" and store it on model constructor
|
|
29
29
|
buildModelDefinition(target, def);
|
|
@@ -48,17 +48,17 @@ function buildModelDefinition(target, def) {
|
|
|
48
48
|
}
|
|
49
49
|
const modelDef = new model_1.ModelDefinition(def !== null && def !== void 0 ? def : { name: target.name });
|
|
50
50
|
const prototype = target.prototype;
|
|
51
|
-
const propertyMap = (_a =
|
|
51
|
+
const propertyMap = (_a = core_1.MetadataInspector.getAllPropertyMetadata(exports.MODEL_PROPERTIES_KEY, prototype)) !== null && _a !== void 0 ? _a : {};
|
|
52
52
|
for (const p in propertyMap) {
|
|
53
53
|
const propertyDef = propertyMap[p];
|
|
54
|
-
const designType =
|
|
54
|
+
const designType = core_1.MetadataInspector.getDesignTypeForProperty(prototype, p);
|
|
55
55
|
if (!propertyDef.type) {
|
|
56
56
|
propertyDef.type = designType;
|
|
57
57
|
}
|
|
58
58
|
modelDef.addProperty(p, propertyDef);
|
|
59
59
|
}
|
|
60
60
|
target.definition = modelDef;
|
|
61
|
-
const relationMeta = (_b =
|
|
61
|
+
const relationMeta = (_b = core_1.MetadataInspector.getAllPropertyMetadata(relation_decorator_1.RELATIONS_KEY, prototype)) !== null && _b !== void 0 ? _b : {};
|
|
62
62
|
const relations = {};
|
|
63
63
|
// Build an object keyed by relation names
|
|
64
64
|
Object.values(relationMeta).forEach(r => {
|
|
@@ -74,7 +74,7 @@ exports.buildModelDefinition = buildModelDefinition;
|
|
|
74
74
|
* @returns A property decorator
|
|
75
75
|
*/
|
|
76
76
|
function property(definition) {
|
|
77
|
-
return
|
|
77
|
+
return core_1.PropertyDecoratorFactory.createDecorator(exports.MODEL_PROPERTIES_KEY, Object.assign({}, definition), { decoratorName: '@property' });
|
|
78
78
|
}
|
|
79
79
|
exports.property = property;
|
|
80
80
|
(function (property) {
|
|
@@ -89,7 +89,7 @@ exports.property = property;
|
|
|
89
89
|
*/
|
|
90
90
|
function array(itemType, definition) {
|
|
91
91
|
return function (target, propertyName) {
|
|
92
|
-
const propType =
|
|
92
|
+
const propType = core_1.MetadataInspector.getDesignTypeForProperty(target, propertyName);
|
|
93
93
|
if (propType !== Array) {
|
|
94
94
|
throw new Error(property.ERR_PROP_NOT_ARRAY);
|
|
95
95
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"model.decorator.js","sourceRoot":"","sources":["../../src/decorators/model.decorator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE
|
|
1
|
+
{"version":3,"file":"model.decorator.js","sourceRoot":"","sources":["../../src/decorators/model.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.repository = exports.RepositoryMetadata = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const
|
|
9
|
+
const core_1 = require("@loopback/core");
|
|
10
10
|
const assert_1 = tslib_1.__importDefault(require("assert"));
|
|
11
11
|
const repositories_1 = require("../repositories");
|
|
12
12
|
const legacy_juggler_bridge_1 = require("../repositories/legacy-juggler-bridge");
|
|
@@ -63,11 +63,11 @@ function repository(modelOrRepo, dataSource) {
|
|
|
63
63
|
// Please note key is undefined for constructor. If strictNullChecks
|
|
64
64
|
// is true, the compiler will complain as reflect-metadata won't
|
|
65
65
|
// accept undefined or null for key. Use ! to fool the compiler.
|
|
66
|
-
|
|
66
|
+
core_1.inject('repositories.' + meta.name, meta)(target, key, descriptorOrIndex);
|
|
67
67
|
}
|
|
68
68
|
else {
|
|
69
69
|
// Use repository-factory to create a repository from model + dataSource
|
|
70
|
-
|
|
70
|
+
core_1.inject('', meta, resolve)(target, key, descriptorOrIndex);
|
|
71
71
|
}
|
|
72
72
|
return;
|
|
73
73
|
}
|
|
@@ -85,7 +85,7 @@ exports.repository = repository;
|
|
|
85
85
|
*/
|
|
86
86
|
function getter(nameOrClass) {
|
|
87
87
|
const name = typeof nameOrClass === 'string' ? nameOrClass : nameOrClass.name;
|
|
88
|
-
return
|
|
88
|
+
return core_1.inject.getter(`repositories.${name}`);
|
|
89
89
|
}
|
|
90
90
|
repository.getter = getter;
|
|
91
91
|
})(repository = exports.repository || (exports.repository = {}));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.decorator.js","sourceRoot":"","sources":["../../src/decorators/repository.decorator.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE
|
|
1
|
+
{"version":3,"file":"repository.decorator.js","sourceRoot":"","sources":["../../src/decorators/repository.decorator.ts"],"names":[],"mappings":"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"}
|
|
@@ -49,7 +49,7 @@ export declare function defineModelClass<BaseCtor extends typeof Model, Props ex
|
|
|
49
49
|
* - all prototype fields from `BaseCtor` prototype are inherited and available
|
|
50
50
|
* as prototype fields on the dynamic class
|
|
51
51
|
*/
|
|
52
|
-
export declare type DynamicModelCtor<BaseCtor extends typeof Model, Props extends object> =
|
|
52
|
+
export declare type DynamicModelCtor<BaseCtor extends typeof Model, Props extends object> = {
|
|
53
53
|
/** Model constructor accepting partial model data. */
|
|
54
54
|
new (data?: DataObject<PrototypeOf<BaseCtor> & Props>): PrototypeOf<BaseCtor> & Props;
|
|
55
|
-
};
|
|
55
|
+
} & BaseCtor;
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { Binding, BindingFromClassOptions } from '@loopback/
|
|
1
|
+
import { Binding, BindingFromClassOptions } from '@loopback/core';
|
|
2
2
|
import { Application, Component, Constructor, MixinTarget } from '@loopback/core';
|
|
3
3
|
import { Class } from '../common-types';
|
|
4
4
|
import { SchemaMigrationOptions } from '../datasource';
|
|
5
|
+
import { Model } from '../model';
|
|
5
6
|
import { juggler, Repository } from '../repositories';
|
|
6
|
-
import
|
|
7
|
-
import { Server, ApplicationConfig, ApplicationMetadata, LifeCycleObserver, ServiceOptions } from '@loopback/core';
|
|
7
|
+
import * as loopbackContext from '@loopback/core';
|
|
8
8
|
/**
|
|
9
9
|
* A mixin class for Application that creates a .repository()
|
|
10
10
|
* function to register a repository automatically. Also overrides
|
|
@@ -18,6 +18,12 @@ import { Server, ApplicationConfig, ApplicationMetadata, LifeCycleObserver, Serv
|
|
|
18
18
|
* Please note: the members in the mixin function are documented in a dummy class
|
|
19
19
|
* called <a href="#RepositoryMixinDoc">RepositoryMixinDoc</a>
|
|
20
20
|
*
|
|
21
|
+
* @param superClass - Application class
|
|
22
|
+
* @returns A new class that extends the super class with repository related
|
|
23
|
+
* methods
|
|
24
|
+
*
|
|
25
|
+
* @typeParam T - Type of the application class as the target for the mixin
|
|
26
|
+
*
|
|
21
27
|
*/
|
|
22
28
|
export declare function RepositoryMixin<T extends MixinTarget<Application>>(superClass: T): {
|
|
23
29
|
new (...args: any[]): {
|
|
@@ -112,11 +118,22 @@ export declare function RepositoryMixin<T extends MixinTarget<Application>>(supe
|
|
|
112
118
|
/**
|
|
113
119
|
* Get an instance of a component and mount all it's
|
|
114
120
|
* repositories. This function is intended to be used internally
|
|
115
|
-
* by component()
|
|
121
|
+
* by `component()`.
|
|
116
122
|
*
|
|
117
|
-
*
|
|
123
|
+
* NOTE: Calling `mountComponentRepositories` with a component class
|
|
124
|
+
* constructor is deprecated. You should instantiate the component
|
|
125
|
+
* yourself and provide the component instance instead.
|
|
126
|
+
*
|
|
127
|
+
* @param componentInstanceOrClass - The component to mount repositories of
|
|
128
|
+
* @internal
|
|
118
129
|
*/
|
|
119
|
-
mountComponentRepositories(
|
|
130
|
+
mountComponentRepositories(componentInstanceOrClass: Class<unknown> | RepositoryComponent): void;
|
|
131
|
+
/**
|
|
132
|
+
* Bind all model classes provided by a component.
|
|
133
|
+
* @param component
|
|
134
|
+
* @internal
|
|
135
|
+
*/
|
|
136
|
+
mountComponentModels(component: RepositoryComponent): void;
|
|
120
137
|
/**
|
|
121
138
|
* Update or recreate the database schema for all repositories.
|
|
122
139
|
*
|
|
@@ -131,61 +148,67 @@ export declare function RepositoryMixin<T extends MixinTarget<Application>>(supe
|
|
|
131
148
|
* preserving data or rebuild everything from scratch.
|
|
132
149
|
*/
|
|
133
150
|
migrateSchema(options?: SchemaMigrationOptions): Promise<void>;
|
|
134
|
-
readonly options: ApplicationConfig;
|
|
151
|
+
readonly options: loopbackContext.ApplicationConfig;
|
|
135
152
|
readonly state: string;
|
|
136
153
|
controller: <T_1>(controllerCtor: Constructor<T_1>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_1>;
|
|
137
|
-
server: <T_2 extends Server>(ctor: Constructor<T_2>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_2>;
|
|
138
|
-
servers: <T_3 extends Server>(ctors: Constructor<T_3>[]) => Binding<any>[];
|
|
139
|
-
getServer: <T_4 extends Server>(target: string | Constructor<T_4>) => Promise<T_4>;
|
|
154
|
+
server: <T_2 extends loopbackContext.Server>(ctor: Constructor<T_2>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_2>;
|
|
155
|
+
servers: <T_3 extends loopbackContext.Server>(ctors: Constructor<T_3>[]) => Binding<any>[];
|
|
156
|
+
getServer: <T_4 extends loopbackContext.Server>(target: string | Constructor<T_4>) => Promise<T_4>;
|
|
140
157
|
start: () => Promise<void>;
|
|
141
158
|
stop: () => Promise<void>;
|
|
142
|
-
setMetadata: (metadata: ApplicationMetadata) => void;
|
|
143
|
-
lifeCycleObserver: <T_5 extends LifeCycleObserver>(ctor: Constructor<T_5>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_5>;
|
|
144
|
-
service: <S>(cls: Constructor<S | Provider<S>>, nameOrOptions?: string | ServiceOptions | undefined) => Binding<S>;
|
|
145
|
-
interceptor: (interceptor: Interceptor | Constructor<Provider<Interceptor>>, nameOrOptions?: string | InterceptorBindingOptions | undefined) => Binding<Interceptor>;
|
|
159
|
+
setMetadata: (metadata: loopbackContext.ApplicationMetadata) => void;
|
|
160
|
+
lifeCycleObserver: <T_5 extends loopbackContext.LifeCycleObserver>(ctor: Constructor<T_5>, nameOrOptions?: string | BindingFromClassOptions | undefined) => Binding<T_5>;
|
|
161
|
+
service: <S>(cls: Constructor<S | loopbackContext.Provider<S>>, nameOrOptions?: string | loopbackContext.ServiceOptions | undefined) => Binding<S>;
|
|
162
|
+
interceptor: (interceptor: loopbackContext.Interceptor | Constructor<loopbackContext.Provider<loopbackContext.Interceptor>>, nameOrOptions?: string | loopbackContext.InterceptorBindingOptions | undefined) => Binding<loopbackContext.Interceptor>;
|
|
146
163
|
readonly name: string;
|
|
147
|
-
readonly subscriptionManager: ContextSubscriptionManager;
|
|
148
|
-
readonly parent: Context | undefined;
|
|
149
|
-
emitEvent: <T_6 extends ContextEvent>(type: string, event: T_6) => void;
|
|
164
|
+
readonly subscriptionManager: loopbackContext.ContextSubscriptionManager;
|
|
165
|
+
readonly parent: loopbackContext.Context | undefined;
|
|
166
|
+
emitEvent: <T_6 extends loopbackContext.ContextEvent>(type: string, event: T_6) => void;
|
|
150
167
|
emitError: (err: unknown) => void;
|
|
151
|
-
bind: <ValueType = any>(key: BindingAddress<ValueType>) => Binding<ValueType>;
|
|
168
|
+
bind: <ValueType = any>(key: loopbackContext.BindingAddress<ValueType>) => Binding<ValueType>;
|
|
152
169
|
add: (binding: Binding<unknown>) => Application;
|
|
153
|
-
configure: <ConfigValueType = any>(key?: string | BindingKey<unknown> | undefined) => Binding<ConfigValueType>;
|
|
154
|
-
getConfigAsValueOrPromise: <ConfigValueType_1>(key: BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: ResolutionOptions | undefined) => ValueOrPromise<ConfigValueType_1 | undefined>;
|
|
155
|
-
getConfig: <ConfigValueType_2>(key: BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: ResolutionOptions | undefined) => Promise<ConfigValueType_2 | undefined>;
|
|
156
|
-
getConfigSync: <ConfigValueType_3>(key: BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: ResolutionOptions | undefined) => ConfigValueType_3 | undefined;
|
|
157
|
-
unbind: (key: BindingAddress<unknown>) => boolean;
|
|
158
|
-
subscribe: (observer: ContextEventObserver) => Subscription;
|
|
159
|
-
unsubscribe: (observer: ContextEventObserver) => boolean;
|
|
170
|
+
configure: <ConfigValueType = any>(key?: string | loopbackContext.BindingKey<unknown> | undefined) => Binding<ConfigValueType>;
|
|
171
|
+
getConfigAsValueOrPromise: <ConfigValueType_1>(key: loopbackContext.BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: loopbackContext.ResolutionOptions | undefined) => loopbackContext.ValueOrPromise<ConfigValueType_1 | undefined>;
|
|
172
|
+
getConfig: <ConfigValueType_2>(key: loopbackContext.BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: loopbackContext.ResolutionOptions | undefined) => Promise<ConfigValueType_2 | undefined>;
|
|
173
|
+
getConfigSync: <ConfigValueType_3>(key: loopbackContext.BindingAddress<unknown>, propertyPath?: string | undefined, resolutionOptions?: loopbackContext.ResolutionOptions | undefined) => ConfigValueType_3 | undefined;
|
|
174
|
+
unbind: (key: loopbackContext.BindingAddress<unknown>) => boolean;
|
|
175
|
+
subscribe: (observer: loopbackContext.ContextEventObserver) => loopbackContext.Subscription;
|
|
176
|
+
unsubscribe: (observer: loopbackContext.ContextEventObserver) => boolean;
|
|
160
177
|
close: () => void;
|
|
161
|
-
isSubscribed: (observer: ContextObserver) => boolean;
|
|
162
|
-
createView: <T_7 = unknown>(filter: BindingFilter, comparator?: BindingComparator | undefined) => ContextView<T_7>;
|
|
163
|
-
contains: (key: BindingAddress<unknown>) => boolean;
|
|
164
|
-
isBound: (key: BindingAddress<unknown>) => boolean;
|
|
165
|
-
getOwnerContext: (key: BindingAddress<unknown>) => Context | undefined;
|
|
166
|
-
find: <ValueType_1 = any>(pattern?: string | RegExp | BindingFilter | undefined) => Readonly<Binding<ValueType_1>>[];
|
|
178
|
+
isSubscribed: (observer: loopbackContext.ContextObserver) => boolean;
|
|
179
|
+
createView: <T_7 = unknown>(filter: loopbackContext.BindingFilter, comparator?: loopbackContext.BindingComparator | undefined) => loopbackContext.ContextView<T_7>;
|
|
180
|
+
contains: (key: loopbackContext.BindingAddress<unknown>) => boolean;
|
|
181
|
+
isBound: (key: loopbackContext.BindingAddress<unknown>) => boolean;
|
|
182
|
+
getOwnerContext: (key: loopbackContext.BindingAddress<unknown>) => loopbackContext.Context | undefined;
|
|
183
|
+
find: <ValueType_1 = any>(pattern?: string | RegExp | loopbackContext.BindingFilter | undefined) => Readonly<Binding<ValueType_1>>[];
|
|
167
184
|
findByTag: <ValueType_2 = any>(tagFilter: string | RegExp | Record<string, any>) => Readonly<Binding<ValueType_2>>[];
|
|
168
185
|
get: {
|
|
169
|
-
<ValueType_3>(keyWithPath: BindingAddress<ValueType_3>, session?: ResolutionSession | undefined): Promise<ValueType_3>;
|
|
170
|
-
<ValueType_4>(keyWithPath: BindingAddress<ValueType_4>, options: ResolutionOptions): Promise<ValueType_4 | undefined>;
|
|
186
|
+
<ValueType_3>(keyWithPath: loopbackContext.BindingAddress<ValueType_3>, session?: loopbackContext.ResolutionSession | undefined): Promise<ValueType_3>;
|
|
187
|
+
<ValueType_4>(keyWithPath: loopbackContext.BindingAddress<ValueType_4>, options: loopbackContext.ResolutionOptions): Promise<ValueType_4 | undefined>;
|
|
171
188
|
};
|
|
172
189
|
getSync: {
|
|
173
|
-
<ValueType_5>(keyWithPath: BindingAddress<ValueType_5>, session?: ResolutionSession | undefined): ValueType_5;
|
|
174
|
-
<ValueType_6>(keyWithPath: BindingAddress<ValueType_6>, options?: ResolutionOptions | undefined): ValueType_6 | undefined;
|
|
190
|
+
<ValueType_5>(keyWithPath: loopbackContext.BindingAddress<ValueType_5>, session?: loopbackContext.ResolutionSession | undefined): ValueType_5;
|
|
191
|
+
<ValueType_6>(keyWithPath: loopbackContext.BindingAddress<ValueType_6>, options?: loopbackContext.ResolutionOptions | undefined): ValueType_6 | undefined;
|
|
175
192
|
};
|
|
176
193
|
getBinding: {
|
|
177
|
-
<ValueType_7 = any>(key: BindingAddress<ValueType_7>): Binding<ValueType_7>;
|
|
178
|
-
<ValueType_8>(key: BindingAddress<ValueType_8>, options?: {
|
|
194
|
+
<ValueType_7 = any>(key: loopbackContext.BindingAddress<ValueType_7>): Binding<ValueType_7>;
|
|
195
|
+
<ValueType_8>(key: loopbackContext.BindingAddress<ValueType_8>, options?: {
|
|
179
196
|
optional?: boolean | undefined;
|
|
180
197
|
} | undefined): Binding<ValueType_8> | undefined;
|
|
181
198
|
};
|
|
182
|
-
findOrCreateBinding: <T_8>(key: BindingAddress<T_8>, policy?: BindingCreationPolicy | undefined) => Binding<T_8>;
|
|
183
|
-
getValueOrPromise: <ValueType_9>(keyWithPath: BindingAddress<ValueType_9>, optionsOrSession?: ResolutionOptions | ResolutionSession | undefined) => ValueOrPromise<ValueType_9 | undefined>;
|
|
184
|
-
toJSON: () => JSONObject;
|
|
185
|
-
inspect: (options?: ContextInspectOptions | undefined) => JSONObject;
|
|
199
|
+
findOrCreateBinding: <T_8>(key: loopbackContext.BindingAddress<T_8>, policy?: loopbackContext.BindingCreationPolicy | undefined) => Binding<T_8>;
|
|
200
|
+
getValueOrPromise: <ValueType_9>(keyWithPath: loopbackContext.BindingAddress<ValueType_9>, optionsOrSession?: loopbackContext.ResolutionOptions | loopbackContext.ResolutionSession | undefined) => loopbackContext.ValueOrPromise<ValueType_9 | undefined>;
|
|
201
|
+
toJSON: () => loopbackContext.JSONObject;
|
|
202
|
+
inspect: (options?: loopbackContext.ContextInspectOptions | undefined) => loopbackContext.JSONObject;
|
|
203
|
+
on: {
|
|
204
|
+
(eventName: "bind" | "unbind", listener: loopbackContext.ContextEventListener): Application;
|
|
205
|
+
(event: string | symbol, listener: (...args: any[]) => void): Application;
|
|
206
|
+
};
|
|
207
|
+
once: {
|
|
208
|
+
(eventName: "bind" | "unbind", listener: loopbackContext.ContextEventListener): Application;
|
|
209
|
+
(event: string | symbol, listener: (...args: any[]) => void): Application;
|
|
210
|
+
};
|
|
186
211
|
addListener: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
187
|
-
on: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
188
|
-
once: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
189
212
|
prependListener: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
190
213
|
prependOnceListener: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
191
214
|
removeListener: (event: string | symbol, listener: (...args: any[]) => void) => Application;
|
|
@@ -200,6 +223,22 @@ export declare function RepositoryMixin<T extends MixinTarget<Application>>(supe
|
|
|
200
223
|
listenerCount: (type: string | symbol) => number;
|
|
201
224
|
};
|
|
202
225
|
} & T;
|
|
226
|
+
/**
|
|
227
|
+
* This interface describes additional Component properties
|
|
228
|
+
* allowing components to contribute Repository-related artifacts.
|
|
229
|
+
*/
|
|
230
|
+
export interface RepositoryComponent {
|
|
231
|
+
/**
|
|
232
|
+
* An optional list of Repository classes to bind for dependency injection
|
|
233
|
+
* via `app.repository()` API.
|
|
234
|
+
*/
|
|
235
|
+
repositories?: Class<Repository<Model>>[];
|
|
236
|
+
/**
|
|
237
|
+
* An optional list of Model classes to bind for dependency injection
|
|
238
|
+
* via `app.model()` API.
|
|
239
|
+
*/
|
|
240
|
+
models?: Class<Model>[];
|
|
241
|
+
}
|
|
203
242
|
/**
|
|
204
243
|
* Interface for an Application mixed in with RepositoryMixin
|
|
205
244
|
*/
|
|
@@ -6,12 +6,13 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createModelClassBinding = exports.RepositoryMixinDoc = exports.RepositoryMixin = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const context_1 = require("@loopback/context");
|
|
10
9
|
const core_1 = require("@loopback/core");
|
|
10
|
+
const core_2 = require("@loopback/core");
|
|
11
11
|
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
12
12
|
const keys_1 = require("../keys");
|
|
13
13
|
const repositories_1 = require("../repositories");
|
|
14
14
|
const debug = debug_1.default('loopback:repository:mixin');
|
|
15
|
+
/* eslint-enable @typescript-eslint/no-unused-vars */
|
|
15
16
|
/**
|
|
16
17
|
* A mixin class for Application that creates a .repository()
|
|
17
18
|
* function to register a repository automatically. Also overrides
|
|
@@ -25,6 +26,12 @@ const debug = debug_1.default('loopback:repository:mixin');
|
|
|
25
26
|
* Please note: the members in the mixin function are documented in a dummy class
|
|
26
27
|
* called <a href="#RepositoryMixinDoc">RepositoryMixinDoc</a>
|
|
27
28
|
*
|
|
29
|
+
* @param superClass - Application class
|
|
30
|
+
* @returns A new class that extends the super class with repository related
|
|
31
|
+
* methods
|
|
32
|
+
*
|
|
33
|
+
* @typeParam T - Type of the application class as the target for the mixin
|
|
34
|
+
*
|
|
28
35
|
*/
|
|
29
36
|
function RepositoryMixin(superClass) {
|
|
30
37
|
return class extends superClass {
|
|
@@ -59,10 +66,10 @@ function RepositoryMixin(superClass) {
|
|
|
59
66
|
*/
|
|
60
67
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
61
68
|
repository(repoClass, nameOrOptions) {
|
|
62
|
-
const binding =
|
|
69
|
+
const binding = core_1.createBindingFromClass(repoClass, {
|
|
63
70
|
namespace: keys_1.RepositoryBindings.REPOSITORIES,
|
|
64
71
|
type: keys_1.RepositoryTags.REPOSITORY,
|
|
65
|
-
defaultScope:
|
|
72
|
+
defaultScope: core_1.BindingScope.TRANSIENT,
|
|
66
73
|
...toOptions(nameOrOptions),
|
|
67
74
|
}).tag(keys_1.RepositoryTags.REPOSITORY);
|
|
68
75
|
this.add(binding);
|
|
@@ -114,10 +121,10 @@ function RepositoryMixin(superClass) {
|
|
|
114
121
|
else if (typeof dataSource === 'function') {
|
|
115
122
|
// eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing
|
|
116
123
|
options.name = options.name || dataSource.dataSourceName;
|
|
117
|
-
const binding =
|
|
124
|
+
const binding = core_1.createBindingFromClass(dataSource, {
|
|
118
125
|
namespace: keys_1.RepositoryBindings.DATASOURCES,
|
|
119
126
|
type: keys_1.RepositoryTags.DATASOURCE,
|
|
120
|
-
defaultScope:
|
|
127
|
+
defaultScope: core_1.BindingScope.SINGLETON,
|
|
121
128
|
...options,
|
|
122
129
|
});
|
|
123
130
|
this.add(binding);
|
|
@@ -160,28 +167,58 @@ function RepositoryMixin(superClass) {
|
|
|
160
167
|
*/
|
|
161
168
|
// Unfortunately, TypeScript does not allow overriding methods inherited
|
|
162
169
|
// from mapped types. https://github.com/microsoft/TypeScript/issues/38496
|
|
163
|
-
// eslint-disable-next-line @typescript-eslint/ban-ts-
|
|
170
|
+
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
164
171
|
// @ts-ignore
|
|
165
172
|
component(componentCtor, nameOrOptions) {
|
|
166
173
|
const binding = super.component(componentCtor, nameOrOptions);
|
|
167
|
-
this.
|
|
174
|
+
const instance = this.getSync(binding.key);
|
|
175
|
+
this.mountComponentRepositories(instance);
|
|
176
|
+
this.mountComponentModels(instance);
|
|
168
177
|
return binding;
|
|
169
178
|
}
|
|
170
179
|
/**
|
|
171
180
|
* Get an instance of a component and mount all it's
|
|
172
181
|
* repositories. This function is intended to be used internally
|
|
173
|
-
* by component()
|
|
182
|
+
* by `component()`.
|
|
174
183
|
*
|
|
175
|
-
*
|
|
184
|
+
* NOTE: Calling `mountComponentRepositories` with a component class
|
|
185
|
+
* constructor is deprecated. You should instantiate the component
|
|
186
|
+
* yourself and provide the component instance instead.
|
|
187
|
+
*
|
|
188
|
+
* @param componentInstanceOrClass - The component to mount repositories of
|
|
189
|
+
* @internal
|
|
176
190
|
*/
|
|
177
|
-
mountComponentRepositories(
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
191
|
+
mountComponentRepositories(
|
|
192
|
+
// accept also component class to preserve backwards compatibility
|
|
193
|
+
// TODO(semver-major) Remove support for component class constructor
|
|
194
|
+
componentInstanceOrClass) {
|
|
195
|
+
const component = resolveComponentInstance(this);
|
|
196
|
+
if (component.repositories) {
|
|
197
|
+
for (const repo of component.repositories) {
|
|
182
198
|
this.repository(repo);
|
|
183
199
|
}
|
|
184
200
|
}
|
|
201
|
+
// `Readonly<Application>` is a hack to remove protected members
|
|
202
|
+
// and thus allow `this` to be passed as a value for `ctx`
|
|
203
|
+
function resolveComponentInstance(ctx) {
|
|
204
|
+
if (typeof componentInstanceOrClass !== 'function')
|
|
205
|
+
return componentInstanceOrClass;
|
|
206
|
+
const componentName = componentInstanceOrClass.name;
|
|
207
|
+
const componentKey = `${core_2.CoreBindings.COMPONENTS}.${componentName}`;
|
|
208
|
+
return ctx.getSync(componentKey);
|
|
209
|
+
}
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Bind all model classes provided by a component.
|
|
213
|
+
* @param component
|
|
214
|
+
* @internal
|
|
215
|
+
*/
|
|
216
|
+
mountComponentModels(component) {
|
|
217
|
+
if (!component.models)
|
|
218
|
+
return;
|
|
219
|
+
for (const m of component.models) {
|
|
220
|
+
this.model(m);
|
|
221
|
+
}
|
|
185
222
|
}
|
|
186
223
|
/**
|
|
187
224
|
* Update or recreate the database schema for all repositories.
|
|
@@ -359,7 +396,7 @@ exports.RepositoryMixinDoc = RepositoryMixinDoc;
|
|
|
359
396
|
* @param modelClass - Model class
|
|
360
397
|
*/
|
|
361
398
|
function createModelClassBinding(modelClass) {
|
|
362
|
-
return
|
|
399
|
+
return core_1.Binding.bind(`${keys_1.RepositoryBindings.MODELS}.${modelClass.name}`)
|
|
363
400
|
.to(modelClass)
|
|
364
401
|
.tag(keys_1.RepositoryTags.MODEL);
|
|
365
402
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repository.mixin.js","sourceRoot":"","sources":["../../src/mixins/repository.mixin.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE
|
|
1
|
+
{"version":3,"file":"repository.mixin.js","sourceRoot":"","sources":["../../src/mixins/repository.mixin.ts"],"names":[],"mappings":"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"}
|