@loopback/repository 4.1.0 → 5.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/dist/connectors/index.js +3 -3
- package/dist/connectors/index.js.map +1 -1
- package/dist/decorators/index.js +3 -3
- package/dist/decorators/index.js.map +1 -1
- package/dist/decorators/repository.decorator.js +1 -1
- package/dist/decorators/repository.decorator.js.map +1 -1
- package/dist/define-model-class.js +1 -1
- package/dist/define-model-class.js.map +1 -1
- package/dist/define-repository-class.js +1 -1
- package/dist/define-repository-class.js.map +1 -1
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.js +3 -2
- package/dist/errors/index.js.map +1 -1
- package/dist/errors/invalid-polymorphism.error.d.ts +5 -0
- package/dist/errors/invalid-polymorphism.error.js +22 -0
- package/dist/errors/invalid-polymorphism.error.js.map +1 -0
- package/dist/index.js +16 -16
- package/dist/index.js.map +1 -1
- package/dist/mixins/index.js +1 -1
- package/dist/mixins/index.js.map +1 -1
- package/dist/mixins/repository.mixin.js +1 -1
- package/dist/mixins/repository.mixin.js.map +1 -1
- package/dist/model.d.ts +7 -1
- package/dist/model.js +14 -0
- package/dist/model.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.accessor.d.ts +6 -2
- package/dist/relations/belongs-to/belongs-to.accessor.js +19 -6
- package/dist/relations/belongs-to/belongs-to.accessor.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.helpers.d.ts +3 -0
- package/dist/relations/belongs-to/belongs-to.helpers.js +33 -9
- package/dist/relations/belongs-to/belongs-to.helpers.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.d.ts +5 -2
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js +81 -8
- package/dist/relations/belongs-to/belongs-to.inclusion-resolver.js.map +1 -1
- package/dist/relations/belongs-to/belongs-to.repository.d.ts +28 -5
- package/dist/relations/belongs-to/belongs-to.repository.js +49 -10
- package/dist/relations/belongs-to/belongs-to.repository.js.map +1 -1
- package/dist/relations/belongs-to/index.js +4 -4
- package/dist/relations/belongs-to/index.js.map +1 -1
- package/dist/relations/has-many/has-many-through.helpers.d.ts +3 -0
- package/dist/relations/has-many/has-many-through.helpers.js +26 -2
- package/dist/relations/has-many/has-many-through.helpers.js.map +1 -1
- package/dist/relations/has-many/has-many-through.inclusion-resolver.d.ts +3 -1
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js +93 -22
- package/dist/relations/has-many/has-many-through.inclusion-resolver.js.map +1 -1
- package/dist/relations/has-many/has-many-through.repository-factory.d.ts +3 -1
- package/dist/relations/has-many/has-many-through.repository-factory.js +7 -1
- package/dist/relations/has-many/has-many-through.repository-factory.js.map +1 -1
- package/dist/relations/has-many/has-many-through.repository.d.ts +66 -11
- package/dist/relations/has-many/has-many-through.repository.js +211 -35
- package/dist/relations/has-many/has-many-through.repository.js.map +1 -1
- package/dist/relations/has-many/has-many.helpers.js +1 -1
- package/dist/relations/has-many/has-many.helpers.js.map +1 -1
- package/dist/relations/has-many/has-many.inclusion-resolver.js +1 -1
- package/dist/relations/has-many/has-many.inclusion-resolver.js.map +1 -1
- package/dist/relations/has-many/has-many.repository-factory.js +1 -1
- package/dist/relations/has-many/has-many.repository-factory.js.map +1 -1
- package/dist/relations/has-many/index.js +6 -6
- package/dist/relations/has-many/index.js.map +1 -1
- package/dist/relations/has-one/has-one.helpers.d.ts +3 -0
- package/dist/relations/has-one/has-one.helpers.js +35 -9
- package/dist/relations/has-one/has-one.helpers.js.map +1 -1
- package/dist/relations/has-one/has-one.inclusion-resolver.d.ts +6 -3
- package/dist/relations/has-one/has-one.inclusion-resolver.js +82 -7
- package/dist/relations/has-one/has-one.inclusion-resolver.js.map +1 -1
- package/dist/relations/has-one/has-one.repository-factory.d.ts +9 -3
- package/dist/relations/has-one/has-one.repository-factory.js +14 -4
- package/dist/relations/has-one/has-one.repository-factory.js.map +1 -1
- package/dist/relations/has-one/has-one.repository.d.ts +58 -11
- package/dist/relations/has-one/has-one.repository.js +118 -15
- package/dist/relations/has-one/has-one.repository.js.map +1 -1
- package/dist/relations/has-one/index.js +3 -3
- package/dist/relations/has-one/index.js.map +1 -1
- package/dist/relations/index.d.ts +2 -0
- package/dist/relations/index.js +8 -6
- package/dist/relations/index.js.map +1 -1
- package/dist/relations/references-many/index.d.ts +4 -0
- package/dist/relations/references-many/index.js +12 -0
- package/dist/relations/references-many/index.js.map +1 -0
- package/dist/relations/references-many/references-many.accessor.d.ts +17 -0
- package/dist/relations/references-many/references-many.accessor.js +40 -0
- package/dist/relations/references-many/references-many.accessor.js.map +1 -0
- package/dist/relations/references-many/references-many.decorator.d.ts +11 -0
- package/dist/relations/references-many/references-many.decorator.js +73 -0
- package/dist/relations/references-many/references-many.decorator.js.map +1 -0
- package/dist/relations/references-many/references-many.helpers.d.ts +17 -0
- package/dist/relations/references-many/references-many.helpers.js +63 -0
- package/dist/relations/references-many/references-many.helpers.js.map +1 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.d.ts +14 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.js +42 -0
- package/dist/relations/references-many/references-many.inclusion-resolver.js.map +1 -0
- package/dist/relations/references-many/references-many.repository.d.ts +28 -0
- package/dist/relations/references-many/references-many.repository.js +33 -0
- package/dist/relations/references-many/references-many.repository.js.map +1 -0
- package/dist/relations/relation.decorator.d.ts +0 -6
- package/dist/relations/relation.decorator.js +1 -13
- package/dist/relations/relation.decorator.js.map +1 -1
- package/dist/relations/relation.filter.solver.d.ts +2 -0
- package/dist/relations/relation.filter.solver.js +57 -0
- package/dist/relations/relation.filter.solver.js.map +1 -0
- package/dist/relations/relation.helpers.js +19 -4
- package/dist/relations/relation.helpers.js.map +1 -1
- package/dist/relations/relation.types.d.ts +52 -1
- package/dist/relations/relation.types.js.map +1 -1
- package/dist/repositories/index.js +5 -5
- package/dist/repositories/index.js.map +1 -1
- package/dist/repositories/legacy-juggler-bridge.d.ts +35 -8
- package/dist/repositories/legacy-juggler-bridge.js +38 -16
- package/dist/repositories/legacy-juggler-bridge.js.map +1 -1
- package/dist/types/array.js +1 -1
- package/dist/types/array.js.map +1 -1
- package/dist/types/buffer.js +1 -1
- package/dist/types/buffer.js.map +1 -1
- package/dist/types/date.js +1 -1
- package/dist/types/date.js.map +1 -1
- package/dist/types/number.js +1 -1
- package/dist/types/number.js.map +1 -1
- package/dist/types/object.js +1 -1
- package/dist/types/object.js.map +1 -1
- package/dist/types/union.js +1 -1
- package/dist/types/union.js.map +1 -1
- package/package.json +16 -16
- package/src/errors/index.ts +1 -0
- package/src/errors/invalid-polymorphism.error.ts +28 -0
- package/src/model.ts +19 -0
- package/src/relations/belongs-to/belongs-to.accessor.ts +35 -6
- package/src/relations/belongs-to/belongs-to.helpers.ts +36 -9
- package/src/relations/belongs-to/belongs-to.inclusion-resolver.ts +108 -17
- package/src/relations/belongs-to/belongs-to.repository.ts +77 -17
- package/src/relations/has-many/has-many-through.helpers.ts +27 -1
- package/src/relations/has-many/has-many-through.inclusion-resolver.ts +117 -26
- package/src/relations/has-many/has-many-through.repository-factory.ts +21 -3
- package/src/relations/has-many/has-many-through.repository.ts +343 -76
- package/src/relations/has-one/has-one.helpers.ts +40 -13
- package/src/relations/has-one/has-one.inclusion-resolver.ts +109 -15
- package/src/relations/has-one/has-one.repository-factory.ts +34 -6
- package/src/relations/has-one/has-one.repository.ts +188 -35
- package/src/relations/index.ts +2 -0
- package/src/relations/references-many/index.ts +9 -0
- package/src/relations/references-many/references-many.accessor.ts +76 -0
- package/src/relations/references-many/references-many.decorator.ts +100 -0
- package/src/relations/references-many/references-many.helpers.ts +82 -0
- package/src/relations/references-many/references-many.inclusion-resolver.ts +80 -0
- package/src/relations/references-many/references-many.repository.ts +55 -0
- package/src/relations/relation.decorator.ts +0 -12
- package/src/relations/relation.filter.solver.ts +56 -0
- package/src/relations/relation.helpers.ts +16 -1
- package/src/relations/relation.types.ts +51 -0
- package/src/repositories/legacy-juggler-bridge.ts +78 -14
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { Count, DataObject, Entity, EntityCrudRepository, Filter, Getter, Options, Where } from '../..';
|
|
1
|
+
import { Count, DataObject, Entity, EntityCrudRepository, Filter, Getter, Options, TypeResolver, Where } from '../..';
|
|
2
2
|
/**
|
|
3
3
|
* CRUD operations for a target repository of a HasManyThrough relation
|
|
4
4
|
*
|
|
@@ -10,39 +10,69 @@ export interface HasManyThroughRepository<Target extends Entity, TargetID, Throu
|
|
|
10
10
|
* Create a target model instance
|
|
11
11
|
* @param targetModelData - The target model data
|
|
12
12
|
* @param options - Options for the operation
|
|
13
|
+
* options.polymorphicType a string or a string array of polymorphic type names
|
|
14
|
+
* specify of which concrete model the created instance should be
|
|
13
15
|
* @returns A promise which resolves to the newly created target model instance
|
|
14
16
|
*/
|
|
15
17
|
create(targetModelData: DataObject<Target>, options?: Options & {
|
|
16
18
|
throughData?: DataObject<Through>;
|
|
17
19
|
throughOptions?: Options;
|
|
20
|
+
} & {
|
|
21
|
+
polymorphicType?: string;
|
|
18
22
|
}): Promise<Target>;
|
|
19
23
|
/**
|
|
20
24
|
* Find target model instance(s)
|
|
21
25
|
* @param filter - A filter object for where, order, limit, etc.
|
|
22
26
|
* @param options - Options for the operation
|
|
27
|
+
* options.throughOptions.discriminator - target discriminator field on through
|
|
28
|
+
* options.polymorphicType a string or a string array of polymorphic type names
|
|
29
|
+
* to specify which repositories should are expected to be searched
|
|
30
|
+
* It is highly recommended to contain this param especially for
|
|
31
|
+
* datasources using deplicated ids across tables
|
|
23
32
|
* @returns A promise which resolves with the found target instance(s)
|
|
24
33
|
*/
|
|
25
34
|
find(filter?: Filter<Target>, options?: Options & {
|
|
26
|
-
throughOptions?: Options
|
|
35
|
+
throughOptions?: Options & {
|
|
36
|
+
discriminator?: string;
|
|
37
|
+
};
|
|
38
|
+
} & {
|
|
39
|
+
polymorphicType?: string | string[];
|
|
27
40
|
}): Promise<Target[]>;
|
|
28
41
|
/**
|
|
29
42
|
* Delete multiple target model instances
|
|
30
43
|
* @param where - Instances within the where scope are deleted
|
|
31
44
|
* @param options
|
|
45
|
+
* options.throughOptions.discriminator - target discriminator field on through
|
|
46
|
+
* options.polymorphicType a string or a string array of polymorphic type names
|
|
47
|
+
* to specify which repositories should are expected to be searched
|
|
48
|
+
* It is highly recommended to contain this param especially for
|
|
49
|
+
* datasources using deplicated ids across tables
|
|
32
50
|
* @returns A promise which resolves the deleted target model instances
|
|
33
51
|
*/
|
|
34
52
|
delete(where?: Where<Target>, options?: Options & {
|
|
35
|
-
throughOptions?: Options
|
|
53
|
+
throughOptions?: Options & {
|
|
54
|
+
discriminator?: string;
|
|
55
|
+
};
|
|
56
|
+
} & {
|
|
57
|
+
polymorphicType?: string | string[];
|
|
36
58
|
}): Promise<Count>;
|
|
37
59
|
/**
|
|
38
60
|
* Patch multiple target model instances
|
|
39
61
|
* @param dataObject - The fields and their new values to patch
|
|
40
62
|
* @param where - Instances within the where scope are patched
|
|
41
63
|
* @param options
|
|
64
|
+
* options.throughOptions.discriminator - target discriminator field on through
|
|
65
|
+
* options.isPolymorphic - whether dataObject is a dictionary
|
|
42
66
|
* @returns A promise which resolves the patched target model instances
|
|
43
67
|
*/
|
|
44
|
-
patch(dataObject: DataObject<Target
|
|
45
|
-
|
|
68
|
+
patch(dataObject: DataObject<Target> | {
|
|
69
|
+
[polymorphicType: string]: DataObject<Target>;
|
|
70
|
+
}, where?: Where<Target>, options?: Options & {
|
|
71
|
+
throughOptions?: Options & {
|
|
72
|
+
discriminator?: string;
|
|
73
|
+
};
|
|
74
|
+
} & {
|
|
75
|
+
isPolymorphic?: boolean;
|
|
46
76
|
}): Promise<Count>;
|
|
47
77
|
/**
|
|
48
78
|
* Creates a new many-to-many association to an existing target model instance
|
|
@@ -80,26 +110,51 @@ export interface HasManyThroughRepository<Target extends Entity, TargetID, Throu
|
|
|
80
110
|
* released.
|
|
81
111
|
*/
|
|
82
112
|
export declare class DefaultHasManyThroughRepository<TargetEntity extends Entity, TargetID, TargetRepository extends EntityCrudRepository<TargetEntity, TargetID>, ThroughEntity extends Entity, ThroughID, ThroughRepository extends EntityCrudRepository<ThroughEntity, ThroughID>> implements HasManyThroughRepository<TargetEntity, TargetID, ThroughEntity> {
|
|
83
|
-
getTargetRepository: Getter<TargetRepository
|
|
113
|
+
getTargetRepository: Getter<TargetRepository> | {
|
|
114
|
+
[repoType: string]: Getter<TargetRepository>;
|
|
115
|
+
};
|
|
84
116
|
getThroughRepository: Getter<ThroughRepository>;
|
|
85
117
|
getTargetConstraintFromThroughModels: (throughInstances: ThroughEntity[]) => DataObject<TargetEntity>;
|
|
86
118
|
getTargetKeys: (throughInstances: ThroughEntity[]) => TargetID[];
|
|
87
119
|
getThroughConstraintFromSource: () => DataObject<ThroughEntity>;
|
|
88
120
|
getTargetIds: (targetInstances: TargetEntity[]) => TargetID[];
|
|
89
121
|
getThroughConstraintFromTarget: (targetID: TargetID[]) => DataObject<ThroughEntity>;
|
|
90
|
-
|
|
122
|
+
targetResolver: TypeResolver<Entity, typeof Entity>;
|
|
123
|
+
throughResolver: TypeResolver<Entity, typeof Entity>;
|
|
124
|
+
constructor(getTargetRepository: Getter<TargetRepository> | {
|
|
125
|
+
[repoType: string]: Getter<TargetRepository>;
|
|
126
|
+
}, getThroughRepository: Getter<ThroughRepository>, getTargetConstraintFromThroughModels: (throughInstances: ThroughEntity[]) => DataObject<TargetEntity>, getTargetKeys: (throughInstances: ThroughEntity[]) => TargetID[], getThroughConstraintFromSource: () => DataObject<ThroughEntity>, getTargetIds: (targetInstances: TargetEntity[]) => TargetID[], getThroughConstraintFromTarget: (targetID: TargetID[]) => DataObject<ThroughEntity>, targetResolver: TypeResolver<Entity, typeof Entity>, throughResolver: TypeResolver<Entity, typeof Entity>);
|
|
127
|
+
getTargetRepositoryDict: {
|
|
128
|
+
[repoType: string]: Getter<TargetRepository>;
|
|
129
|
+
};
|
|
91
130
|
create(targetModelData: DataObject<TargetEntity>, options?: Options & {
|
|
92
131
|
throughData?: DataObject<ThroughEntity>;
|
|
93
132
|
throughOptions?: Options;
|
|
133
|
+
} & {
|
|
134
|
+
polymorphicType?: string;
|
|
94
135
|
}): Promise<TargetEntity>;
|
|
95
136
|
find(filter?: Filter<TargetEntity>, options?: Options & {
|
|
96
|
-
throughOptions?: Options
|
|
137
|
+
throughOptions?: Options & {
|
|
138
|
+
discriminator?: string;
|
|
139
|
+
};
|
|
140
|
+
} & {
|
|
141
|
+
polymorphicType?: string | string[];
|
|
97
142
|
}): Promise<TargetEntity[]>;
|
|
98
143
|
delete(where?: Where<TargetEntity>, options?: Options & {
|
|
99
|
-
throughOptions?: Options
|
|
144
|
+
throughOptions?: Options & {
|
|
145
|
+
discriminator?: string;
|
|
146
|
+
};
|
|
147
|
+
} & {
|
|
148
|
+
polymorphicType?: string | string[];
|
|
100
149
|
}): Promise<Count>;
|
|
101
|
-
patch(dataObject: DataObject<TargetEntity
|
|
102
|
-
|
|
150
|
+
patch(dataObject: DataObject<TargetEntity> | {
|
|
151
|
+
[polymorphicType: string]: DataObject<TargetEntity>;
|
|
152
|
+
}, where?: Where<TargetEntity>, options?: Options & {
|
|
153
|
+
throughOptions?: Options & {
|
|
154
|
+
discriminator?: string;
|
|
155
|
+
};
|
|
156
|
+
} & {
|
|
157
|
+
isPolymorphic?: boolean;
|
|
103
158
|
}): Promise<Count>;
|
|
104
159
|
link(targetId: TargetID, options?: Options & {
|
|
105
160
|
throughData?: DataObject<ThroughEntity>;
|
|
@@ -5,6 +5,7 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.DefaultHasManyThroughRepository = void 0;
|
|
8
|
+
const lodash_1 = require("lodash");
|
|
8
9
|
const __1 = require("../..");
|
|
9
10
|
/**
|
|
10
11
|
* a class for CRUD operations for hasManyThrough relation.
|
|
@@ -14,7 +15,7 @@ const __1 = require("../..");
|
|
|
14
15
|
* released.
|
|
15
16
|
*/
|
|
16
17
|
class DefaultHasManyThroughRepository {
|
|
17
|
-
constructor(getTargetRepository, getThroughRepository, getTargetConstraintFromThroughModels, getTargetKeys, getThroughConstraintFromSource, getTargetIds, getThroughConstraintFromTarget) {
|
|
18
|
+
constructor(getTargetRepository, getThroughRepository, getTargetConstraintFromThroughModels, getTargetKeys, getThroughConstraintFromSource, getTargetIds, getThroughConstraintFromTarget, targetResolver, throughResolver) {
|
|
18
19
|
this.getTargetRepository = getTargetRepository;
|
|
19
20
|
this.getThroughRepository = getThroughRepository;
|
|
20
21
|
this.getTargetConstraintFromThroughModels = getTargetConstraintFromThroughModels;
|
|
@@ -22,57 +23,232 @@ class DefaultHasManyThroughRepository {
|
|
|
22
23
|
this.getThroughConstraintFromSource = getThroughConstraintFromSource;
|
|
23
24
|
this.getTargetIds = getTargetIds;
|
|
24
25
|
this.getThroughConstraintFromTarget = getThroughConstraintFromTarget;
|
|
26
|
+
this.targetResolver = targetResolver;
|
|
27
|
+
this.throughResolver = throughResolver;
|
|
28
|
+
if (typeof getTargetRepository === 'function') {
|
|
29
|
+
this.getTargetRepositoryDict = {
|
|
30
|
+
[targetResolver().name]: getTargetRepository,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
else {
|
|
34
|
+
this.getTargetRepositoryDict = getTargetRepository;
|
|
35
|
+
}
|
|
25
36
|
}
|
|
26
37
|
async create(targetModelData, options) {
|
|
27
|
-
|
|
38
|
+
let targetPolymorphicTypeName = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
39
|
+
if (targetPolymorphicTypeName) {
|
|
40
|
+
if (!this.getTargetRepositoryDict[targetPolymorphicTypeName]) {
|
|
41
|
+
throw new __1.InvalidPolymorphismError(targetPolymorphicTypeName);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
46
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
47
|
+
}
|
|
48
|
+
targetPolymorphicTypeName = this.targetResolver().name;
|
|
49
|
+
if (!this.getTargetRepositoryDict[targetPolymorphicTypeName]) {
|
|
50
|
+
throw new __1.InvalidPolymorphismError(targetPolymorphicTypeName);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
const targetRepository = await this.getTargetRepositoryDict[targetPolymorphicTypeName]();
|
|
28
54
|
const targetInstance = await targetRepository.create(targetModelData, options);
|
|
29
55
|
await this.link(targetInstance.getId(), options);
|
|
30
56
|
return targetInstance;
|
|
31
57
|
}
|
|
32
58
|
async find(filter, options) {
|
|
33
|
-
|
|
34
|
-
const
|
|
59
|
+
var _a;
|
|
60
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
61
|
+
let targetPolymorphicTypes = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
62
|
+
let allKeys;
|
|
63
|
+
if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
|
|
64
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
65
|
+
}
|
|
66
|
+
else {
|
|
67
|
+
if (!targetDiscriminatorOnThrough) {
|
|
68
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
69
|
+
}
|
|
70
|
+
if (!targetPolymorphicTypes || targetPolymorphicTypes.length === 0) {
|
|
71
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
72
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
if (typeof targetPolymorphicTypes === 'string') {
|
|
76
|
+
targetPolymorphicTypes = [targetPolymorphicTypes];
|
|
77
|
+
}
|
|
78
|
+
allKeys = [];
|
|
79
|
+
new Set(targetPolymorphicTypes).forEach(element => {
|
|
80
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
81
|
+
allKeys.push(element);
|
|
82
|
+
}
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
}
|
|
35
86
|
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
36
|
-
const
|
|
37
|
-
const targetConstraint = this.getTargetConstraintFromThroughModels(throughInstances);
|
|
38
|
-
return targetRepository.find((0, __1.constrainFilter)(filter, targetConstraint), options);
|
|
39
|
-
}
|
|
40
|
-
async delete(where, options) {
|
|
41
|
-
const targetRepository = await this.getTargetRepository();
|
|
87
|
+
const throughCategorized = {};
|
|
42
88
|
const throughRepository = await this.getThroughRepository();
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// TODO(Agnes): this performance can be improved by only fetching related data
|
|
48
|
-
// TODO: add target ids to the `where` constraint
|
|
49
|
-
const targets = await targetRepository.find({ where });
|
|
50
|
-
const targetIds = this.getTargetIds(targets);
|
|
51
|
-
if (targetIds.length > 0) {
|
|
52
|
-
const targetConstraint = this.getThroughConstraintFromTarget(targetIds);
|
|
53
|
-
const constraints = { ...targetConstraint, ...sourceConstraint };
|
|
54
|
-
await throughRepository.deleteAll((0, __1.constrainDataObject)({}, constraints), options === null || options === void 0 ? void 0 : options.throughOptions);
|
|
89
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
90
|
+
let concreteTargetType;
|
|
91
|
+
if (!targetDiscriminatorOnThrough) {
|
|
92
|
+
concreteTargetType = this.targetResolver().name;
|
|
55
93
|
}
|
|
94
|
+
else {
|
|
95
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
96
|
+
}
|
|
97
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
101
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
102
|
+
}
|
|
103
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
104
|
+
throughCategorized[concreteTargetType] = [];
|
|
105
|
+
}
|
|
106
|
+
throughCategorized[concreteTargetType].push(element);
|
|
107
|
+
});
|
|
108
|
+
let allTargets = [];
|
|
109
|
+
for (const key of Object.keys(throughCategorized)) {
|
|
110
|
+
const targetRepository = await this.getTargetRepositoryDict[key]();
|
|
111
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[key]);
|
|
112
|
+
allTargets = allTargets.concat(await targetRepository.find((0, __1.constrainFilter)(filter, targetConstraint), Object.assign((0, lodash_1.cloneDeep)(options !== null && options !== void 0 ? options : {}), { polymorphicType: key })));
|
|
113
|
+
}
|
|
114
|
+
return allTargets;
|
|
115
|
+
}
|
|
116
|
+
async delete(where, options) {
|
|
117
|
+
var _a, _b, _c;
|
|
118
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
119
|
+
let targetPolymorphicTypes = options === null || options === void 0 ? void 0 : options.polymorphicType;
|
|
120
|
+
let allKeys;
|
|
121
|
+
if (Object.keys(this.getTargetRepositoryDict).length <= 1) {
|
|
122
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
56
123
|
}
|
|
57
124
|
else {
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
125
|
+
if (!targetDiscriminatorOnThrough) {
|
|
126
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
127
|
+
}
|
|
128
|
+
if (!targetPolymorphicTypes || targetPolymorphicTypes.length === 0) {
|
|
129
|
+
console.warn('It is highly recommended to specify the polymorphicTypes param when using polymorphic types.');
|
|
130
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
if (typeof targetPolymorphicTypes === 'string') {
|
|
134
|
+
targetPolymorphicTypes = [targetPolymorphicTypes];
|
|
135
|
+
}
|
|
136
|
+
allKeys = [];
|
|
137
|
+
new Set(targetPolymorphicTypes).forEach(element => {
|
|
138
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
139
|
+
allKeys.push(element);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
145
|
+
let totalCount = 0;
|
|
146
|
+
const throughCategorized = {};
|
|
147
|
+
const throughRepository = await this.getThroughRepository();
|
|
148
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
149
|
+
let concreteTargetType;
|
|
150
|
+
if (!targetDiscriminatorOnThrough) {
|
|
151
|
+
concreteTargetType = this.targetResolver().name;
|
|
152
|
+
}
|
|
153
|
+
else {
|
|
154
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
155
|
+
}
|
|
156
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
159
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
160
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
161
|
+
}
|
|
162
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
163
|
+
throughCategorized[concreteTargetType] = [];
|
|
164
|
+
}
|
|
165
|
+
throughCategorized[concreteTargetType].push(element);
|
|
166
|
+
});
|
|
167
|
+
for (const targetKey of Object.keys(throughCategorized)) {
|
|
168
|
+
const targetRepository = await this.getTargetRepositoryDict[targetKey]();
|
|
169
|
+
if (where) {
|
|
170
|
+
// only delete related through models
|
|
171
|
+
// TODO(Agnes): this performance can be improved by only fetching related data
|
|
172
|
+
// TODO: add target ids to the `where` constraint
|
|
173
|
+
const targets = await targetRepository.find({ where });
|
|
174
|
+
const targetIds = this.getTargetIds(targets);
|
|
175
|
+
if (targetIds.length > 0) {
|
|
176
|
+
const targetConstraint = this.getThroughConstraintFromTarget(targetIds);
|
|
177
|
+
const constraints = { ...targetConstraint, ...sourceConstraint };
|
|
178
|
+
await throughRepository.deleteAll((0, __1.constrainDataObject)({}, constraints), options === null || options === void 0 ? void 0 : options.throughOptions);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
// otherwise, delete through models that relate to the sourceId
|
|
183
|
+
const targetFkValues = this.getTargetKeys(throughCategorized[targetKey]);
|
|
184
|
+
// delete through instances that have the targets that are going to be deleted
|
|
185
|
+
const throughFkConstraint = this.getThroughConstraintFromTarget(targetFkValues);
|
|
186
|
+
await throughRepository.deleteAll((0, __1.constrainWhereOr)({}, [sourceConstraint, throughFkConstraint]));
|
|
187
|
+
}
|
|
188
|
+
// delete target(s)
|
|
189
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[targetKey]);
|
|
190
|
+
totalCount +=
|
|
191
|
+
(_c = (_b = (await targetRepository.deleteAll((0, __1.constrainWhere)(where, targetConstraint), options))) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
|
|
63
192
|
}
|
|
64
|
-
|
|
65
|
-
const targetConstraint = this.getTargetConstraintFromThroughModels(throughInstances);
|
|
66
|
-
return targetRepository.deleteAll((0, __1.constrainWhere)(where, targetConstraint), options);
|
|
193
|
+
return { count: totalCount };
|
|
67
194
|
}
|
|
68
195
|
// only allows patch target instances for now
|
|
69
196
|
async patch(dataObject, where, options) {
|
|
70
|
-
|
|
71
|
-
const
|
|
197
|
+
var _a, _b, _c;
|
|
198
|
+
const targetDiscriminatorOnThrough = (_a = options === null || options === void 0 ? void 0 : options.throughOptions) === null || _a === void 0 ? void 0 : _a.discriminator;
|
|
199
|
+
const isMultipleTypes = options === null || options === void 0 ? void 0 : options.isPolymorphic;
|
|
200
|
+
let allKeys;
|
|
201
|
+
if (!targetDiscriminatorOnThrough) {
|
|
202
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
203
|
+
console.warn('It is highly recommended to specify the targetDiscriminatorOnThrough param when using polymorphic types.');
|
|
204
|
+
}
|
|
205
|
+
}
|
|
206
|
+
if (!isMultipleTypes) {
|
|
207
|
+
if (Object.keys(this.getTargetRepositoryDict).length > 1) {
|
|
208
|
+
console.warn('It is highly recommended to specify the isMultipleTypes param and pass in a dictionary of dataobjects when using polymorphic types.');
|
|
209
|
+
}
|
|
210
|
+
allKeys = Object.keys(this.getTargetRepositoryDict);
|
|
211
|
+
}
|
|
212
|
+
else {
|
|
213
|
+
allKeys = [];
|
|
214
|
+
new Set(Object.keys(dataObject)).forEach(element => {
|
|
215
|
+
if (Object.keys(this.getTargetRepositoryDict).includes(element)) {
|
|
216
|
+
allKeys.push(element);
|
|
217
|
+
}
|
|
218
|
+
});
|
|
219
|
+
}
|
|
72
220
|
const sourceConstraint = this.getThroughConstraintFromSource();
|
|
73
|
-
const
|
|
74
|
-
const
|
|
75
|
-
|
|
221
|
+
const throughCategorized = {};
|
|
222
|
+
const throughRepository = await this.getThroughRepository();
|
|
223
|
+
(await throughRepository.find((0, __1.constrainFilter)(undefined, sourceConstraint), options === null || options === void 0 ? void 0 : options.throughOptions)).forEach(element => {
|
|
224
|
+
let concreteTargetType;
|
|
225
|
+
if (!targetDiscriminatorOnThrough) {
|
|
226
|
+
concreteTargetType = this.targetResolver().name;
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
concreteTargetType = String(element[targetDiscriminatorOnThrough]);
|
|
230
|
+
}
|
|
231
|
+
if (!allKeys.includes(concreteTargetType)) {
|
|
232
|
+
return;
|
|
233
|
+
}
|
|
234
|
+
if (!this.getTargetRepositoryDict[concreteTargetType]) {
|
|
235
|
+
throw new __1.InvalidPolymorphismError(concreteTargetType, targetDiscriminatorOnThrough);
|
|
236
|
+
}
|
|
237
|
+
if (!throughCategorized[concreteTargetType]) {
|
|
238
|
+
throughCategorized[concreteTargetType] = [];
|
|
239
|
+
}
|
|
240
|
+
throughCategorized[concreteTargetType].push(element);
|
|
241
|
+
});
|
|
242
|
+
let updatedCount = 0;
|
|
243
|
+
for (const key of Object.keys(throughCategorized)) {
|
|
244
|
+
const targetRepository = await this.getTargetRepositoryDict[key]();
|
|
245
|
+
const targetConstraint = this.getTargetConstraintFromThroughModels(throughCategorized[key]);
|
|
246
|
+
updatedCount +=
|
|
247
|
+
(_c = (_b = (await targetRepository.updateAll((0, __1.constrainDataObject)(isMultipleTypes
|
|
248
|
+
? dataObject[key]
|
|
249
|
+
: dataObject, targetConstraint), (0, __1.constrainWhere)(where, targetConstraint), options))) === null || _b === void 0 ? void 0 : _b.count) !== null && _c !== void 0 ? _c : 0;
|
|
250
|
+
}
|
|
251
|
+
return { count: updatedCount };
|
|
76
252
|
}
|
|
77
253
|
async link(targetId, options) {
|
|
78
254
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many-through.repository.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many-through.repository.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"has-many-through.repository.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many-through.repository.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.resolveHasManyMetaHelper = exports.resolveHasManyMetadata = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const debug_1 =
|
|
9
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
10
10
|
const lodash_1 = require("lodash");
|
|
11
11
|
const errors_1 = require("../../errors");
|
|
12
12
|
const type_resolver_1 = require("../../type-resolver");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE
|
|
1
|
+
{"version":3,"file":"has-many.helpers.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.helpers.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AACjC,mCAAiC;AACjC,yCAAkD;AAClD,uDAAmD;AACnD,sDAAkE;AAElE,MAAM,KAAK,GAAG,IAAA,eAAY,EAAC,gDAAgD,CAAC,CAAC;AAW7E;;;;;;GAMG;AACH,SAAgB,sBAAsB,CACpC,YAA+B;;IAE/B,2DAA2D;IAC3D,YAAY,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;IAEtD,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,EAAE,CAAC;IAC1C,MAAM,qBAAqB,GAAG,MAAA,WAAW,CAAC,UAAU,0CAAE,UAAU,CAAC;IAEjE,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM,CAAC;IAExC,IAAI,YAAY,CAAC,KAAK,IAAI,qBAAqB,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;QACnE,wEAAwE;QACxE,OAAO,YAAyC,CAAC;KAClD;IAED,KAAK,CACH,2CAA2C,EAC3C,WAAW,CAAC,SAAS,EACrB,WAAW,CACZ,CAAC;IACF,MAAM,aAAa,GAAG,IAAA,kBAAS,EAAC,WAAW,CAAC,SAAS,GAAG,KAAK,CAAC,CAAC;IAC/D,MAAM,oBAAoB,GAAG,qBAAqB,CAAC,aAAa,CAAC,CAAC;IAElE,IAAI,CAAC,oBAAoB,EAAE;QACzB,MAAM,MAAM,GAAG,gBAAgB,WAAW,CAAC,IAAI,yCAAyC,aAAa,EAAE,CAAC;QACxG,MAAM,IAAI,6BAAoB,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACtD;IAED,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE;QACjC,KAAK,EAAE,aAAa;KACQ,CAAC,CAAC;AAClC,CAAC;AAhCD,wDAgCC;AAED;;;;;;;GAOG;AACH,SAAgB,wBAAwB,CACtC,YAA+B;IAE/B,IAAK,YAAY,CAAC,IAAqB,KAAK,6BAAY,CAAC,OAAO,EAAE;QAChE,MAAM,MAAM,GAAG,+BAA+B,CAAC;QAC/C,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;IACD,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,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,CAAC;KAC5C;IACD,OAAO,MAAM,CAAC,MAAM,CAAC,YAAY,EAAE,EAAC,OAAO,EAAC,CAAsB,CAAC;AACrE,CAAC;AA5BD,4DA4BC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createHasManyInclusionResolver = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const debug_1 =
|
|
9
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
10
10
|
const relation_helpers_1 = require("../relation.helpers");
|
|
11
11
|
const has_many_helpers_1 = require("./has-many.helpers");
|
|
12
12
|
const debug = (0, debug_1.default)('loopback:repository:relations:has-many:inclusion-resolver');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAGhE
|
|
1
|
+
{"version":3,"file":"has-many.inclusion-resolver.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.inclusion-resolver.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAGhE,0DAAiC;AAIjC,0DAI6B;AAE7B,yDAA0D;AAE1D,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAEF;;;;;;;;;GASG;AACH,SAAgB,8BAA8B,CAK5C,IAAuB,EACvB,aAEC;IAED,MAAM,YAAY,GAAG,IAAA,yCAAsB,EAAC,IAAI,CAAC,CAAC;IAElD,OAAO,KAAK,UAAU,kBAAkB,CACtC,QAAkB,EAClB,SAA0B,EAC1B,OAAiB;QAEjB,IAAI,CAAC,QAAQ,CAAC,MAAM;YAAE,OAAO,EAAE,CAAC;QAEhC,KAAK,CAAC,sCAAsC,EAAE,QAAQ,CAAC,CAAC;QACxD,KAAK,CAAC,oBAAoB,EAAE,YAAY,CAAC,CAAC;QAE1C,MAAM,SAAS,GAAG,YAAY,CAAC,OAAO,CAAC;QACvC,MAAM,SAAS,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAE,CAAe,CAAC,SAAS,CAAC,CAAC,CAAC;QACjE,MAAM,SAAS,GAAG,YAAY,CAAC,KAA4B,CAAC;QAE5D,KAAK,CAAC,aAAa,EAAE,EAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAC,CAAC,CAAC;QACxD,KAAK,CACH,gBAAgB,EAChB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAC7B,CAAC;QAEF,MAAM,KAAK,GACT,OAAO,SAAS,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAE,SAAS,CAAC,KAAwB,CAAC;QAE3E,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QACzC,MAAM,YAAY,GAAG,MAAM,IAAA,oCAAiB,EAC1C,UAAU,EACV,SAAS,EACT,SAAS,EACT,KAAK,EACL,OAAO,CACR,CAAC;QAEF,KAAK,CAAC,gBAAgB,EAAE,YAAY,CAAC,CAAC;QAEtC,MAAM,MAAM,GAAG,IAAA,oDAAiC,EAC9C,SAAS,EACT,YAAY,EACZ,SAAS,CACV,CAAC;QAEF,KAAK,CAAC,2BAA2B,EAAE,MAAM,CAAC,CAAC;QAC3C,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;AACJ,CAAC;AAvDD,wEAuDC"}
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.createHasManyRepositoryFactory = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const debug_1 =
|
|
9
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
10
10
|
const has_many_helpers_1 = require("./has-many.helpers");
|
|
11
11
|
const has_many_inclusion_resolver_1 = require("./has-many.inclusion-resolver");
|
|
12
12
|
const has_many_repository_1 = require("./has-many.repository");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"has-many.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE
|
|
1
|
+
{"version":3,"file":"has-many.repository-factory.js","sourceRoot":"","sources":["../../../src/relations/has-many/has-many.repository-factory.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;;AAEhE,0DAAiC;AAKjC,yDAA0D;AAC1D,+EAA6E;AAC7E,+DAG+B;AAE/B,MAAM,KAAK,GAAG,IAAA,eAAY,EACxB,2DAA2D,CAC5D,CAAC;AAiBF;;;;;;;;;;;;GAYG;AACH,SAAgB,8BAA8B,CAK5C,gBAAmC,EACnC,sBAAsE;IAEtE,MAAM,IAAI,GAAG,IAAA,yCAAsB,EAAC,gBAAgB,CAAC,CAAC;IACtD,KAAK,CAAC,wCAAwC,EAAE,IAAI,CAAC,CAAC;IACtD,MAAM,MAAM,GAAqD,UAC/D,OAAuB;QAEvB,8DAA8D;QAC9D,MAAM,UAAU,GAAQ,EAAC,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,OAAO,EAAC,CAAC;QAChD,OAAO,IAAI,8CAAwB,CAIjC,sBAAsB,EAAE,UAAgC,CAAC,CAAC;IAC9D,CAAC,CAAC;IACF,MAAM,CAAC,iBAAiB,GAAG,IAAA,4DAA8B,EACvD,IAAI,EACJ,sBAAsB,CACvB,CAAC;IACF,OAAO,MAAM,CAAC;AAChB,CAAC;AA1BD,wEA0BC"}
|
|
@@ -5,10 +5,10 @@
|
|
|
5
5
|
// License text available at https://opensource.org/licenses/MIT
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
const tslib_1 = require("tslib");
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
8
|
+
tslib_1.__exportStar(require("./has-many.repository-factory"), exports);
|
|
9
|
+
tslib_1.__exportStar(require("./has-many-through.repository-factory"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./has-many-through.repository"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./has-many.decorator"), exports);
|
|
12
|
+
tslib_1.__exportStar(require("./has-many.inclusion-resolver"), exports);
|
|
13
|
+
tslib_1.__exportStar(require("./has-many.repository"), exports);
|
|
14
14
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/has-many/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/relations/has-many/index.ts"],"names":[],"mappings":";AAAA,sDAAsD;AACtD,oCAAoC;AACpC,+CAA+C;AAC/C,gEAAgE;;;AAEhE,wEAA8C;AAC9C,gFAAsD;AACtD,wEAA8C;AAC9C,+DAAqC;AACrC,wEAA8C;AAC9C,gEAAsC"}
|
|
@@ -6,6 +6,9 @@ import { HasOneDefinition } from '../relation.types';
|
|
|
6
6
|
export declare type HasOneResolvedDefinition = HasOneDefinition & {
|
|
7
7
|
keyFrom: string;
|
|
8
8
|
keyTo: string;
|
|
9
|
+
polymorphic: false | {
|
|
10
|
+
discriminator: string;
|
|
11
|
+
};
|
|
9
12
|
};
|
|
10
13
|
/**
|
|
11
14
|
* Resolves given hasOne metadata if target is specified to be a resolver.
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
7
7
|
exports.resolveHasOneMetadata = void 0;
|
|
8
8
|
const tslib_1 = require("tslib");
|
|
9
|
-
const debug_1 =
|
|
9
|
+
const debug_1 = tslib_1.__importDefault(require("debug"));
|
|
10
10
|
const lodash_1 = require("lodash");
|
|
11
11
|
const errors_1 = require("../../errors");
|
|
12
12
|
const type_resolver_1 = require("../../type-resolver");
|
|
@@ -45,20 +45,46 @@ function resolveHasOneMetadata(relationMeta) {
|
|
|
45
45
|
else {
|
|
46
46
|
keyFrom = sourceModel.getIdProperties()[0];
|
|
47
47
|
}
|
|
48
|
+
let keyTo;
|
|
48
49
|
// Make sure that if it already keys to the foreign key property,
|
|
49
50
|
// the key exists in the target model
|
|
50
51
|
if (relationMeta.keyTo && targetModelProperties[relationMeta.keyTo]) {
|
|
51
52
|
// The explicit cast is needed because of a limitation of type inference
|
|
52
|
-
|
|
53
|
+
keyTo = relationMeta.keyTo;
|
|
53
54
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
55
|
+
else {
|
|
56
|
+
debug('Resolved model %s from given metadata: %o', targetModel.modelName, targetModel);
|
|
57
|
+
keyTo = (0, lodash_1.camelCase)(sourceModel.modelName + '_id');
|
|
58
|
+
const hasDefaultFkProperty = targetModelProperties[keyTo];
|
|
59
|
+
if (!hasDefaultFkProperty) {
|
|
60
|
+
const reason = `target model ${targetModel.name} is missing definition of foreign key ${keyTo}`;
|
|
61
|
+
throw new errors_1.InvalidRelationError(reason, relationMeta);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let polymorphic;
|
|
65
|
+
if (relationMeta.polymorphic === undefined ||
|
|
66
|
+
relationMeta.polymorphic === false ||
|
|
67
|
+
!relationMeta.polymorphic) {
|
|
68
|
+
const polymorphicFalse = false;
|
|
69
|
+
polymorphic = polymorphicFalse;
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
if (relationMeta.polymorphic === true) {
|
|
73
|
+
const polymorphicObject = {
|
|
74
|
+
discriminator: (0, lodash_1.camelCase)(relationMeta.target().name + '_type'),
|
|
75
|
+
};
|
|
76
|
+
polymorphic = polymorphicObject;
|
|
77
|
+
}
|
|
78
|
+
else {
|
|
79
|
+
const polymorphicObject = relationMeta.polymorphic;
|
|
80
|
+
polymorphic = polymorphicObject;
|
|
81
|
+
}
|
|
60
82
|
}
|
|
61
|
-
return Object.assign(relationMeta, {
|
|
83
|
+
return Object.assign(relationMeta, {
|
|
84
|
+
keyFrom: keyFrom,
|
|
85
|
+
keyTo: keyTo,
|
|
86
|
+
polymorphic: polymorphic,
|
|
87
|
+
});
|
|
62
88
|
}
|
|
63
89
|
exports.resolveHasOneMetadata = resolveHasOneMetadata;
|
|
64
90
|
//# sourceMappingURL=has-one.helpers.js.map
|