vona-module-a-orm 5.0.53 → 5.0.55
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/cli/model/metadata/generate.ts +7 -5
- package/dist/index.js +166 -131
- package/dist/lib/dto/dtoMutate.d.ts +2 -1
- package/dist/lib/relationsDynamic.d.ts +2 -2
- package/dist/lib/relationsMutate.d.ts +2 -2
- package/dist/lib/utils.d.ts +3 -0
- package/dist/service/db_.d.ts +1 -1
- package/dist/service/relations_.d.ts +7 -3
- package/dist/service/transaction_.d.ts +1 -1
- package/dist/types/dto/dtoMutate.d.ts +9 -18
- package/dist/types/relations.d.ts +3 -0
- package/dist/types/relationsDef.d.ts +7 -6
- package/dist/types/relationsDefDynamic.d.ts +4 -4
- package/dist/types/transaction.d.ts +1 -1
- package/package.json +1 -1
|
@@ -113,10 +113,12 @@ function __parseRelation(nodeRelation: t.ObjectProperty) {
|
|
|
113
113
|
function __parseRelationHasOne(args: t.Node[]) {
|
|
114
114
|
// classModel
|
|
115
115
|
const classModel = __parseRelation_classModel(args[0]);
|
|
116
|
+
// key
|
|
117
|
+
const key = __parseRelation_key(args[1]);
|
|
116
118
|
// options
|
|
117
119
|
const options = __parseRelation_options(args[2]);
|
|
118
120
|
// combine
|
|
119
|
-
return `IModelRelationHasOne<${classModel}, ${options.autoload}, ${options.columns}>`;
|
|
121
|
+
return `IModelRelationHasOne<${classModel}, '${key}', ${options.autoload}, ${options.columns}>`;
|
|
120
122
|
}
|
|
121
123
|
|
|
122
124
|
function __parseRelationBelongsTo(args: t.Node[]) {
|
|
@@ -133,14 +135,14 @@ function __parseRelationBelongsTo(args: t.Node[]) {
|
|
|
133
135
|
function __parseRelationHasMany(args: t.Node[]) {
|
|
134
136
|
// classModel
|
|
135
137
|
const classModel = __parseRelation_classModel(args[0]);
|
|
136
|
-
//
|
|
137
|
-
|
|
138
|
+
// key
|
|
139
|
+
const key = __parseRelation_key(args[1]);
|
|
138
140
|
// options
|
|
139
141
|
const options = __parseRelation_options(args[2]);
|
|
140
142
|
// modelJoins
|
|
141
143
|
const modelJoins = __parseRelation_modelJoins(args[3]);
|
|
142
144
|
// combine
|
|
143
|
-
return `IModelRelationHasMany<${classModel}, ${options.autoload}, ${options.columns}
|
|
145
|
+
return `IModelRelationHasMany<${classModel}, '${key}', ${options.autoload}, ${options.columns}, ${modelJoins}, ${options.aggrs}, ${options.groups}>`;
|
|
144
146
|
}
|
|
145
147
|
|
|
146
148
|
function __parseRelationBelongsToMany(args: t.Node[]) {
|
|
@@ -237,7 +239,7 @@ function __parseRelation_options(node: t.Node) {
|
|
|
237
239
|
if (options?.groups) {
|
|
238
240
|
columns = 'undefined';
|
|
239
241
|
} else {
|
|
240
|
-
columns = '\'*\'';
|
|
242
|
+
columns = 'undefined'; // '\'*\'';
|
|
241
243
|
}
|
|
242
244
|
} else {
|
|
243
245
|
if (options?.columns.includes('*')) {
|
package/dist/index.js
CHANGED
|
@@ -415,14 +415,12 @@ let ServiceTransaction = (_dec$o = Service(), _dec2$o = BeanInfo({
|
|
|
415
415
|
get connection() {
|
|
416
416
|
return this.transactionFiber?.connection;
|
|
417
417
|
}
|
|
418
|
-
commit(cb, options) {
|
|
419
|
-
if (options?.ctxPrefer) {
|
|
420
|
-
this.ctx?.commit(cb);
|
|
421
|
-
return;
|
|
422
|
-
}
|
|
418
|
+
async commit(cb, options) {
|
|
423
419
|
const fiber = this.transactionFiber;
|
|
424
420
|
if (!fiber) {
|
|
425
|
-
|
|
421
|
+
if (!options?.ignoreIfNotInTransaction) {
|
|
422
|
+
await cb();
|
|
423
|
+
}
|
|
426
424
|
} else {
|
|
427
425
|
fiber.commit(cb);
|
|
428
426
|
}
|
|
@@ -577,8 +575,8 @@ let ServiceDb = (_dec$n = Service(), _dec2$n = BeanInfo({
|
|
|
577
575
|
get dialect() {
|
|
578
576
|
return this.scope.service.database.getDialect(this.dialectName);
|
|
579
577
|
}
|
|
580
|
-
commit(cb, options) {
|
|
581
|
-
return this.transaction.commit(cb, options);
|
|
578
|
+
async commit(cb, options) {
|
|
579
|
+
return await this.transaction.commit(cb, options);
|
|
582
580
|
}
|
|
583
581
|
compensate(cb) {
|
|
584
582
|
return this.transaction.compensate(cb);
|
|
@@ -2254,6 +2252,49 @@ let ServiceCacheQuery = (_dec$c = Service(), _dec2$c = BeanInfo({
|
|
|
2254
2252
|
}
|
|
2255
2253
|
}) || _class$c) || _class$c);
|
|
2256
2254
|
|
|
2255
|
+
function handleRelationsCollection(relationsStatic, includeWrapper) {
|
|
2256
|
+
// collect
|
|
2257
|
+
const relations = [];
|
|
2258
|
+
// include
|
|
2259
|
+
if (relationsStatic) {
|
|
2260
|
+
for (const key in relationsStatic) {
|
|
2261
|
+
const relationDef = relationsStatic[key];
|
|
2262
|
+
const relationCur = includeWrapper?.include?.[key];
|
|
2263
|
+
let relationReal;
|
|
2264
|
+
let includeReal;
|
|
2265
|
+
let withReal;
|
|
2266
|
+
let autoload;
|
|
2267
|
+
if (relationCur === false) {
|
|
2268
|
+
continue;
|
|
2269
|
+
} else if (relationCur === true) {
|
|
2270
|
+
relationReal = relationDef;
|
|
2271
|
+
autoload = relationDef.options?.autoload;
|
|
2272
|
+
} else if (typeof relationCur === 'object') {
|
|
2273
|
+
relationReal = deepExtend({}, relationDef, {
|
|
2274
|
+
options: relationCur
|
|
2275
|
+
});
|
|
2276
|
+
includeReal = relationCur.include;
|
|
2277
|
+
withReal = relationCur.with;
|
|
2278
|
+
} else if (relationDef.options?.autoload) {
|
|
2279
|
+
relationReal = relationDef;
|
|
2280
|
+
autoload = relationDef.options?.autoload;
|
|
2281
|
+
} else {
|
|
2282
|
+
continue;
|
|
2283
|
+
}
|
|
2284
|
+
relations.push([key, relationReal, includeReal, withReal, autoload]);
|
|
2285
|
+
}
|
|
2286
|
+
}
|
|
2287
|
+
// with
|
|
2288
|
+
if (includeWrapper?.with) {
|
|
2289
|
+
for (const key in includeWrapper.with) {
|
|
2290
|
+
const relationReal = includeWrapper.with[key];
|
|
2291
|
+
if (!relationReal) continue;
|
|
2292
|
+
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
return relations;
|
|
2296
|
+
}
|
|
2297
|
+
|
|
2257
2298
|
var _dec$b, _dec2$b, _class$b;
|
|
2258
2299
|
let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
2259
2300
|
module: "a-orm"
|
|
@@ -2265,21 +2306,25 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
|
2265
2306
|
__init__(model) {
|
|
2266
2307
|
this._model = model;
|
|
2267
2308
|
}
|
|
2268
|
-
async handleRelationsOne(entity, includeWrapper, methodOptions) {
|
|
2309
|
+
async handleRelationsOne(relations, entity, includeWrapper, methodOptions) {
|
|
2269
2310
|
if (!entity) return entity;
|
|
2270
2311
|
// relations
|
|
2271
|
-
|
|
2272
|
-
|
|
2312
|
+
if (!relations) {
|
|
2313
|
+
relations = this.handleRelationsCollection(includeWrapper);
|
|
2314
|
+
}
|
|
2315
|
+
if (relations.length === 0) return entity;
|
|
2273
2316
|
for (const relation of relations) {
|
|
2274
2317
|
await this.__handleRelationOne(entity, relation, methodOptions);
|
|
2275
2318
|
}
|
|
2276
2319
|
return entity;
|
|
2277
2320
|
}
|
|
2278
|
-
async handleRelationsMany(entities, includeWrapper, methodOptions) {
|
|
2321
|
+
async handleRelationsMany(relations, entities, includeWrapper, methodOptions) {
|
|
2279
2322
|
if (entities.length === 0) return entities;
|
|
2280
2323
|
// relations
|
|
2281
|
-
|
|
2282
|
-
|
|
2324
|
+
if (!relations) {
|
|
2325
|
+
relations = this.handleRelationsCollection(includeWrapper);
|
|
2326
|
+
}
|
|
2327
|
+
if (relations.length === 0) return entities;
|
|
2283
2328
|
for (const relation of relations) {
|
|
2284
2329
|
await this.__handleRelationMany(entities, relation, methodOptions);
|
|
2285
2330
|
}
|
|
@@ -2288,7 +2333,7 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
|
2288
2333
|
async handleRelationsMutate(entitiesResult, entities, includeWrapper, methodOptions) {
|
|
2289
2334
|
if (entitiesResult.length === 0) return entitiesResult;
|
|
2290
2335
|
// relations
|
|
2291
|
-
const relations = this.
|
|
2336
|
+
const relations = this.handleRelationsCollection(includeWrapper);
|
|
2292
2337
|
if (!relations) return entitiesResult;
|
|
2293
2338
|
for (const relation of relations) {
|
|
2294
2339
|
entitiesResult = await this.__handleRelationMutate(entitiesResult, entities, relation, methodOptions);
|
|
@@ -2298,7 +2343,7 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
|
2298
2343
|
async handleRelationsDelete(ids, includeWrapper, methodOptions) {
|
|
2299
2344
|
if (ids.length === 0) return;
|
|
2300
2345
|
// relations
|
|
2301
|
-
const relations = this.
|
|
2346
|
+
const relations = this.handleRelationsCollection(includeWrapper);
|
|
2302
2347
|
if (!relations) return;
|
|
2303
2348
|
for (const relation of relations) {
|
|
2304
2349
|
await this.__handleRelationDelete(ids, relation, methodOptions);
|
|
@@ -2756,47 +2801,36 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
|
|
|
2756
2801
|
columns = columns.concat(key);
|
|
2757
2802
|
return [columns, false];
|
|
2758
2803
|
}
|
|
2759
|
-
|
|
2760
|
-
|
|
2761
|
-
|
|
2762
|
-
|
|
2763
|
-
//
|
|
2764
|
-
const
|
|
2765
|
-
|
|
2766
|
-
|
|
2767
|
-
|
|
2768
|
-
|
|
2769
|
-
|
|
2770
|
-
|
|
2771
|
-
|
|
2772
|
-
|
|
2773
|
-
|
|
2774
|
-
|
|
2775
|
-
} else if (relationCur === true) {
|
|
2776
|
-
relationReal = relationDef;
|
|
2777
|
-
} else if (typeof relationCur === 'object') {
|
|
2778
|
-
relationReal = deepExtend({}, relationDef, {
|
|
2779
|
-
options: relationCur
|
|
2780
|
-
});
|
|
2781
|
-
includeReal = relationCur.include;
|
|
2782
|
-
withReal = relationCur.with;
|
|
2783
|
-
} else if (relationDef.options?.autoload) {
|
|
2784
|
-
relationReal = relationDef;
|
|
2785
|
-
} else {
|
|
2786
|
-
continue;
|
|
2804
|
+
prepareColumnsByRelations(relations, options) {
|
|
2805
|
+
if (!options || !options.columns) return [options, undefined];
|
|
2806
|
+
const columns = Array.isArray(options.columns) ? options.columns : [options.columns];
|
|
2807
|
+
if (columns.includes('*')) return [options, undefined];
|
|
2808
|
+
// refKeys
|
|
2809
|
+
const refKeys = [];
|
|
2810
|
+
for (const relation of relations) {
|
|
2811
|
+
const [_relationName, relationReal] = relation;
|
|
2812
|
+
const {
|
|
2813
|
+
type,
|
|
2814
|
+
key
|
|
2815
|
+
} = relationReal;
|
|
2816
|
+
if (type === 'belongsTo') {
|
|
2817
|
+
if (!columns.includes(key)) {
|
|
2818
|
+
columns.push(key);
|
|
2819
|
+
refKeys.push(key);
|
|
2787
2820
|
}
|
|
2788
|
-
relations.push([key, relationReal, includeReal, withReal]);
|
|
2789
|
-
}
|
|
2790
|
-
}
|
|
2791
|
-
// with
|
|
2792
|
-
if (includeWrapper?.with) {
|
|
2793
|
-
for (const key in includeWrapper.with) {
|
|
2794
|
-
const relationReal = includeWrapper.with[key];
|
|
2795
|
-
if (!relationReal) continue;
|
|
2796
|
-
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with]);
|
|
2797
2821
|
}
|
|
2798
2822
|
}
|
|
2799
|
-
|
|
2823
|
+
options = refKeys.length === 0 ? options : {
|
|
2824
|
+
...options,
|
|
2825
|
+
columns
|
|
2826
|
+
};
|
|
2827
|
+
return [options, refKeys];
|
|
2828
|
+
}
|
|
2829
|
+
__getModelTarget(modelClassTarget, meta) {
|
|
2830
|
+
return this._model.newInstanceTarget(modelClassTarget, meta?.client, meta?.table);
|
|
2831
|
+
}
|
|
2832
|
+
handleRelationsCollection(includeWrapper) {
|
|
2833
|
+
return handleRelationsCollection(this._model.options.relations, includeWrapper);
|
|
2800
2834
|
}
|
|
2801
2835
|
}) || _class$b) || _class$b);
|
|
2802
2836
|
|
|
@@ -2923,8 +2957,19 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
2923
2957
|
}
|
|
2924
2958
|
async mget(ids, options) {
|
|
2925
2959
|
if (ids.length === 0) return [];
|
|
2926
|
-
const
|
|
2927
|
-
|
|
2960
|
+
const relations = this.relations.handleRelationsCollection(options);
|
|
2961
|
+
const [options2, refKeys] = this.relations.prepareColumnsByRelations(relations, options);
|
|
2962
|
+
let items = await this.__mget_raw(undefined, ids, options2);
|
|
2963
|
+
if (items.length === 0) return items;
|
|
2964
|
+
items = await this.relations.handleRelationsMany(relations, items, options, options);
|
|
2965
|
+
if (refKeys) {
|
|
2966
|
+
for (const item of items) {
|
|
2967
|
+
for (const refKey of refKeys) {
|
|
2968
|
+
delete item[refKey];
|
|
2969
|
+
}
|
|
2970
|
+
}
|
|
2971
|
+
}
|
|
2972
|
+
return items;
|
|
2928
2973
|
}
|
|
2929
2974
|
async __mget_raw(table, ids, options) {
|
|
2930
2975
|
// table
|
|
@@ -3008,8 +3053,19 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3008
3053
|
};
|
|
3009
3054
|
}
|
|
3010
3055
|
async select(params, options, _modelJoins) {
|
|
3011
|
-
const
|
|
3012
|
-
|
|
3056
|
+
const relations = this.relations.handleRelationsCollection(params);
|
|
3057
|
+
const [params2, refKeys] = this.relations.prepareColumnsByRelations(relations, params);
|
|
3058
|
+
let items = await this.__select_raw(undefined, params2, options);
|
|
3059
|
+
if (items.length === 0) return items;
|
|
3060
|
+
items = await this.relations.handleRelationsMany(relations, items, params, options);
|
|
3061
|
+
if (refKeys) {
|
|
3062
|
+
for (const item of items) {
|
|
3063
|
+
for (const refKey of refKeys) {
|
|
3064
|
+
delete item[refKey];
|
|
3065
|
+
}
|
|
3066
|
+
}
|
|
3067
|
+
}
|
|
3068
|
+
return items;
|
|
3013
3069
|
}
|
|
3014
3070
|
async __select_raw(table, params, options) {
|
|
3015
3071
|
// table
|
|
@@ -3066,8 +3122,17 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3066
3122
|
return items;
|
|
3067
3123
|
}
|
|
3068
3124
|
async get(where, options) {
|
|
3069
|
-
const
|
|
3070
|
-
|
|
3125
|
+
const relations = this.relations.handleRelationsCollection(options);
|
|
3126
|
+
const [options2, refKeys] = this.relations.prepareColumnsByRelations(relations, options);
|
|
3127
|
+
let item = await this.__get_raw(undefined, where, options2);
|
|
3128
|
+
if (!item) return item;
|
|
3129
|
+
item = await this.relations.handleRelationsOne(relations, item, options, options);
|
|
3130
|
+
if (refKeys) {
|
|
3131
|
+
for (const refKey of refKeys) {
|
|
3132
|
+
delete item[refKey];
|
|
3133
|
+
}
|
|
3134
|
+
}
|
|
3135
|
+
return item;
|
|
3071
3136
|
}
|
|
3072
3137
|
async __get_raw(table, where, options) {
|
|
3073
3138
|
// table
|
|
@@ -3269,11 +3334,11 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3269
3334
|
}
|
|
3270
3335
|
async cacheEntityDel(id, table) {
|
|
3271
3336
|
await this.cacheEntityDelInner(id, table);
|
|
3272
|
-
|
|
3273
|
-
this.
|
|
3274
|
-
|
|
3275
|
-
|
|
3276
|
-
}
|
|
3337
|
+
this.db.commit(async () => {
|
|
3338
|
+
await this.cacheEntityDelInner(id, table);
|
|
3339
|
+
}, {
|
|
3340
|
+
ignoreIfNotInTransaction: true
|
|
3341
|
+
});
|
|
3277
3342
|
this._shardingCacheDoubleDelete({
|
|
3278
3343
|
beanFullName: this.$beanFullName,
|
|
3279
3344
|
clientName: this.db.clientName,
|
|
@@ -3288,11 +3353,11 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3288
3353
|
}
|
|
3289
3354
|
async cacheEntityClear(table) {
|
|
3290
3355
|
await this.cacheEntityClearInner(table);
|
|
3291
|
-
|
|
3292
|
-
this.
|
|
3293
|
-
|
|
3294
|
-
|
|
3295
|
-
}
|
|
3356
|
+
this.db.commit(async () => {
|
|
3357
|
+
await this.cacheEntityClearInner(table);
|
|
3358
|
+
}, {
|
|
3359
|
+
ignoreIfNotInTransaction: true
|
|
3360
|
+
});
|
|
3296
3361
|
this._shardingCacheDoubleDelete({
|
|
3297
3362
|
beanFullName: this.$beanFullName,
|
|
3298
3363
|
clientName: this.db.clientName,
|
|
@@ -3307,11 +3372,11 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3307
3372
|
}
|
|
3308
3373
|
async cacheQueryClear(table) {
|
|
3309
3374
|
await this.cacheQueryClearInner(table);
|
|
3310
|
-
|
|
3311
|
-
this.
|
|
3312
|
-
|
|
3313
|
-
|
|
3314
|
-
}
|
|
3375
|
+
this.db.commit(async () => {
|
|
3376
|
+
await this.cacheQueryClearInner(table);
|
|
3377
|
+
}, {
|
|
3378
|
+
ignoreIfNotInTransaction: true
|
|
3379
|
+
});
|
|
3315
3380
|
this._shardingCacheDoubleDelete({
|
|
3316
3381
|
beanFullName: this.$beanFullName,
|
|
3317
3382
|
clientName: this.db.clientName,
|
|
@@ -3327,13 +3392,9 @@ class BeanModelCache extends BeanModelCrud {
|
|
|
3327
3392
|
_shardingCacheDoubleDelete(jobData) {
|
|
3328
3393
|
const doubleDelete = this.scopeOrm.config.sharding.cache.doubleDelete;
|
|
3329
3394
|
if (!doubleDelete) return;
|
|
3330
|
-
|
|
3331
|
-
this.db.commit(() => {
|
|
3332
|
-
this.scopeOrm.queue.doubleDelete.push(jobData);
|
|
3333
|
-
});
|
|
3334
|
-
} else {
|
|
3395
|
+
this.db.commit(() => {
|
|
3335
3396
|
this.scopeOrm.queue.doubleDelete.push(jobData);
|
|
3336
|
-
}
|
|
3397
|
+
});
|
|
3337
3398
|
}
|
|
3338
3399
|
async _cacheQueryClearModelsClear() {
|
|
3339
3400
|
const modelsClear = this._getModelsClear();
|
|
@@ -3930,7 +3991,6 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
3930
3991
|
include: includeReal,
|
|
3931
3992
|
with: withReal
|
|
3932
3993
|
});
|
|
3933
|
-
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel);
|
|
3934
3994
|
if (mutateTypeTopLevel) {
|
|
3935
3995
|
if (type === 'belongsTo') {
|
|
3936
3996
|
// donot mutate
|
|
@@ -3943,13 +4003,17 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
3943
4003
|
deleted: z.boolean().optional()
|
|
3944
4004
|
}));
|
|
3945
4005
|
} else if (type === 'hasOne') {
|
|
4006
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
3946
4007
|
schema = v.lazy(schemaLazy);
|
|
3947
4008
|
// optional = true;
|
|
3948
4009
|
} else {
|
|
4010
|
+
// hasMany
|
|
4011
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
3949
4012
|
schema = v.array(v.lazy(schemaLazy));
|
|
3950
4013
|
}
|
|
3951
4014
|
Api.field(v.optional(), schema)(entityClass.prototype, relationName);
|
|
3952
4015
|
} else {
|
|
4016
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
3953
4017
|
let schema;
|
|
3954
4018
|
let optional = false;
|
|
3955
4019
|
if (type === 'hasOne' || type === 'belongsTo') {
|
|
@@ -3972,10 +4036,10 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
|
|
|
3972
4036
|
}
|
|
3973
4037
|
}
|
|
3974
4038
|
}
|
|
3975
|
-
function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel) {
|
|
4039
|
+
function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation) {
|
|
3976
4040
|
return () => {
|
|
3977
4041
|
if (!autoload) {
|
|
3978
|
-
return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
|
|
4042
|
+
return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
3979
4043
|
}
|
|
3980
4044
|
// dynamic
|
|
3981
4045
|
const entityClass = getClassEntityFromClassModel(modelTarget);
|
|
@@ -3984,16 +4048,16 @@ function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload,
|
|
|
3984
4048
|
const dynamicName = `${beanFullName}_${_hashkey}`;
|
|
3985
4049
|
let entityTarget = getSchemaDynamic(dynamicName);
|
|
3986
4050
|
if (!entityTarget) {
|
|
3987
|
-
entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
|
|
4051
|
+
entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
3988
4052
|
entityTarget[SymbolSchemaDynamicRefId] = dynamicName;
|
|
3989
4053
|
addSchemaDynamic(dynamicName, entityTarget);
|
|
3990
4054
|
}
|
|
3991
4055
|
return entityTarget;
|
|
3992
4056
|
};
|
|
3993
4057
|
}
|
|
3994
|
-
function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel) {
|
|
4058
|
+
function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation) {
|
|
3995
4059
|
if (mutateTypeTopLevel) {
|
|
3996
|
-
return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false); // columnsOmitDefault: undefined
|
|
4060
|
+
return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false, relation); // columnsOmitDefault: undefined
|
|
3997
4061
|
} else {
|
|
3998
4062
|
if (optionsReal.groups) {
|
|
3999
4063
|
return DtoGroup(modelTarget, optionsReal.groups, optionsReal.aggrs, optionsReal.columns);
|
|
@@ -4017,50 +4081,11 @@ function _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLe
|
|
|
4017
4081
|
}
|
|
4018
4082
|
function _DtoGet_relations_collection(modelClass, includeWrapper) {
|
|
4019
4083
|
const beanOptions = appResource.getBean(modelClass);
|
|
4020
|
-
const options = beanOptions
|
|
4021
|
-
|
|
4022
|
-
const relations = [];
|
|
4023
|
-
// include
|
|
4024
|
-
if (options.relations) {
|
|
4025
|
-
for (const key in options.relations) {
|
|
4026
|
-
const relationDef = options.relations[key];
|
|
4027
|
-
const relationCur = includeWrapper?.include?.[key];
|
|
4028
|
-
let relationReal;
|
|
4029
|
-
let includeReal;
|
|
4030
|
-
let withReal;
|
|
4031
|
-
let autoload;
|
|
4032
|
-
if (relationCur === false) {
|
|
4033
|
-
continue;
|
|
4034
|
-
} else if (relationCur === true) {
|
|
4035
|
-
relationReal = relationDef;
|
|
4036
|
-
autoload = relationDef.options?.autoload;
|
|
4037
|
-
} else if (typeof relationCur === 'object') {
|
|
4038
|
-
relationReal = deepExtend({}, relationDef, {
|
|
4039
|
-
options: relationCur
|
|
4040
|
-
});
|
|
4041
|
-
includeReal = relationCur.include;
|
|
4042
|
-
withReal = relationCur.with;
|
|
4043
|
-
} else if (relationDef.options?.autoload) {
|
|
4044
|
-
relationReal = relationDef;
|
|
4045
|
-
autoload = relationDef.options?.autoload;
|
|
4046
|
-
} else {
|
|
4047
|
-
continue;
|
|
4048
|
-
}
|
|
4049
|
-
relations.push([key, relationReal, includeReal, withReal, autoload]);
|
|
4050
|
-
}
|
|
4051
|
-
}
|
|
4052
|
-
// with
|
|
4053
|
-
if (includeWrapper?.with) {
|
|
4054
|
-
for (const key in includeWrapper.with) {
|
|
4055
|
-
const relationReal = includeWrapper.with[key];
|
|
4056
|
-
if (!relationReal) continue;
|
|
4057
|
-
relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
|
|
4058
|
-
}
|
|
4059
|
-
}
|
|
4060
|
-
return relations;
|
|
4084
|
+
const options = beanOptions?.options;
|
|
4085
|
+
return handleRelationsCollection(options?.relations, includeWrapper);
|
|
4061
4086
|
}
|
|
4062
4087
|
|
|
4063
|
-
function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel) {
|
|
4088
|
+
function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel, relation) {
|
|
4064
4089
|
// model
|
|
4065
4090
|
const modelClass = prepareClassModel(modelLike);
|
|
4066
4091
|
// entity
|
|
@@ -4096,13 +4121,23 @@ function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefaul
|
|
|
4096
4121
|
if (!topLevel && mutateTypeTopLevel !== 'create') {
|
|
4097
4122
|
entityClass = $Class.partial(entityClass, ['id', 'deleted']);
|
|
4098
4123
|
}
|
|
4124
|
+
if (!topLevel && relation) {
|
|
4125
|
+
const [_relationName, relationReal] = relation;
|
|
4126
|
+
const {
|
|
4127
|
+
type,
|
|
4128
|
+
key
|
|
4129
|
+
} = relationReal;
|
|
4130
|
+
if (type === 'hasOne' || type === 'hasMany') {
|
|
4131
|
+
entityClass = $Class.omit(entityClass, key);
|
|
4132
|
+
}
|
|
4133
|
+
}
|
|
4099
4134
|
// relations
|
|
4100
4135
|
_DtoGet_relations(modelClass, entityClass, params, mutateTypeTopLevel);
|
|
4101
4136
|
return entityClass;
|
|
4102
4137
|
}
|
|
4103
4138
|
|
|
4104
4139
|
function DtoCreate(modelLike, params) {
|
|
4105
|
-
return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
|
|
4140
|
+
return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
|
|
4106
4141
|
}
|
|
4107
4142
|
|
|
4108
4143
|
function DtoQuery(classRef, keys) {
|
|
@@ -4122,7 +4157,7 @@ function DtoSelectAndCount(modelLike, params) {
|
|
|
4122
4157
|
}
|
|
4123
4158
|
|
|
4124
4159
|
function DtoUpdate(modelLike, params) {
|
|
4125
|
-
return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
|
|
4160
|
+
return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
|
|
4126
4161
|
}
|
|
4127
4162
|
|
|
4128
4163
|
// not use Partial/$Class.partial, for form render at frontend
|
|
@@ -4,5 +4,6 @@ import type { IDtoMutateParams, TypeDtoMutateResult, TypeDtoMutateType } from '.
|
|
|
4
4
|
import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
|
5
5
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
6
|
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
7
|
+
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
7
8
|
export declare function DtoMutate<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoMutateResult<ModelLike, T, 'mutate', undefined, true>>;
|
|
8
|
-
export declare function _DtoMutate_raw<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined, ColumnsOmitDefault extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T, mutateTypeTopLevel?: TypeDtoMutateType, columnsOmitDefault?: ColumnsOmitDefault, topLevel?: boolean): any;
|
|
9
|
+
export declare function _DtoMutate_raw<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoMutateParams<ModelLike> | undefined = undefined, ColumnsOmitDefault extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T, mutateTypeTopLevel?: TypeDtoMutateType, columnsOmitDefault?: ColumnsOmitDefault, topLevel?: boolean, relation?: IRelationItem): any;
|
|
@@ -2,9 +2,9 @@ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
|
|
|
2
2
|
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
3
3
|
import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
4
|
import type { IModelRelationBelongsToDynamic, IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic, IModelRelationOptionsManyDynamic, IModelRelationOptionsOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
5
|
-
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key:
|
|
5
|
+
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS>;
|
|
6
6
|
declare function belongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined>(_classModelSelf: TypeModelClassLike<MODELSelf>, classModel: TypeModelClassLike<MODEL>, key: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationBelongsToDynamic<MODELSelf, MODEL, OPTIONS>;
|
|
7
|
-
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key:
|
|
7
|
+
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS, _modelJoins?: ModelJoins, _group?: Group): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS, ModelJoins, Group>;
|
|
8
8
|
declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined>(classModelMiddle: TypeModelClassLike<MODELMiddle>, classModel: TypeModelClassLike<MODEL>, keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], options?: OPTIONS, _modelJoins?: ModelJoins, _group?: Group): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS, ModelJoins, Group>;
|
|
9
9
|
export declare const $relationDynamic: {
|
|
10
10
|
hasOne: typeof hasOne;
|
|
@@ -3,8 +3,8 @@ import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
|
3
3
|
import type { TypeModelClassLike, TypeModelOfModelLike, TypeSymbolKeyEntity } from '../types/relations.ts';
|
|
4
4
|
import type { IModelRelationBelongsToManyDynamic, IModelRelationHasManyDynamic, IModelRelationHasOneDynamic } from '../types/relationsDefDynamic.ts';
|
|
5
5
|
import type { IModelRelationOptionsBelongsToManyMutate, IModelRelationOptionsManyMutate, IModelRelationOptionsOneMutate } from '../types/relationsDefMutate.ts';
|
|
6
|
-
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key:
|
|
7
|
-
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key:
|
|
6
|
+
declare function hasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, KEY, OPTIONS>;
|
|
7
|
+
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key: KEY, options?: OPTIONS): IModelRelationHasManyDynamic<MODEL, KEY, OPTIONS>;
|
|
8
8
|
declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsBelongsToManyMutate<TypeModelOfModelLike<MODEL>>>(classModelMiddle: TypeModelClassLike<MODELMiddle>, classModel: TypeModelClassLike<MODEL>, keyFrom: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], keyTo: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationBelongsToManyDynamic<MODELMiddle, MODEL, OPTIONS>;
|
|
9
9
|
export declare const $relationMutate: {
|
|
10
10
|
hasOne: typeof hasOne;
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import type { IModelRelationIncludeWrapper } from '../types/model.ts';
|
|
2
|
+
import type { IRelationItem } from '../types/relationsDef.ts';
|
|
3
|
+
export declare function handleRelationsCollection(relationsStatic?: Record<string, any>, includeWrapper?: IModelRelationIncludeWrapper): IRelationItem[];
|
package/dist/service/db_.d.ts
CHANGED
|
@@ -21,6 +21,6 @@ export declare class ServiceDb extends BeanBase {
|
|
|
21
21
|
get connection(): import("knex").Knex<any, any[]>;
|
|
22
22
|
get dialectName(): keyof IDatabaseClientDialectRecord;
|
|
23
23
|
get dialect(): BeanDatabaseDialectBase;
|
|
24
|
-
commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions): void
|
|
24
|
+
commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions): Promise<void>;
|
|
25
25
|
compensate(cb: FunctionAny): void;
|
|
26
26
|
}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { TableIdentity } from 'table-identity';
|
|
2
2
|
import type { BeanModelCache } from '../bean/bean.model/bean.model_cache.ts';
|
|
3
3
|
import type { IModelMethodOptions, IModelRelationIncludeWrapper } from '../types/model.ts';
|
|
4
|
+
import type { IRelationItem } from '../types/relationsDef.ts';
|
|
4
5
|
import { BeanBase } from 'vona';
|
|
5
6
|
export declare class ServiceRelations extends BeanBase {
|
|
6
7
|
protected _model: BeanModelCache;
|
|
7
8
|
protected __init__(model: BeanModelCache): void;
|
|
8
|
-
handleRelationsOne<TRecord extends {}>(entity: TRecord | undefined, includeWrapper?: IModelRelationIncludeWrapper, methodOptions?: IModelMethodOptions): Promise<TRecord | undefined>;
|
|
9
|
-
handleRelationsMany<TRecord extends {}>(entities: TRecord[], includeWrapper?: IModelRelationIncludeWrapper, methodOptions?: IModelMethodOptions): Promise<TRecord[]>;
|
|
9
|
+
handleRelationsOne<TRecord extends {}>(relations: IRelationItem[] | undefined, entity: TRecord | undefined, includeWrapper?: IModelRelationIncludeWrapper, methodOptions?: IModelMethodOptions): Promise<TRecord | undefined>;
|
|
10
|
+
handleRelationsMany<TRecord extends {}>(relations: IRelationItem[] | undefined, entities: TRecord[], includeWrapper?: IModelRelationIncludeWrapper, methodOptions?: IModelMethodOptions): Promise<TRecord[]>;
|
|
10
11
|
handleRelationsMutate<TRecord extends {}>(entitiesResult: TRecord[], entities: TRecord[], includeWrapper: IModelRelationIncludeWrapper | undefined, methodOptions: IModelMethodOptions | undefined): Promise<TRecord[]>;
|
|
11
12
|
handleRelationsDelete(ids: TableIdentity[], includeWrapper?: IModelRelationIncludeWrapper, methodOptions?: IModelMethodOptions): Promise<void>;
|
|
12
13
|
private __handleRelationOne;
|
|
@@ -14,6 +15,9 @@ export declare class ServiceRelations extends BeanBase {
|
|
|
14
15
|
private __handleRelationMutate;
|
|
15
16
|
private __handleRelationDelete;
|
|
16
17
|
private __prepareColumnsAndKey;
|
|
18
|
+
prepareColumnsByRelations<T extends {
|
|
19
|
+
columns?: any;
|
|
20
|
+
}>(relations: IRelationItem[], options?: T): [T | undefined, string[] | undefined];
|
|
17
21
|
private __getModelTarget;
|
|
18
|
-
|
|
22
|
+
handleRelationsCollection(includeWrapper?: IModelRelationIncludeWrapper): IRelationItem[];
|
|
19
23
|
}
|
|
@@ -11,7 +11,7 @@ export declare class ServiceTransaction extends BeanBase {
|
|
|
11
11
|
get transactionFiber(): ServiceTransactionFiber | undefined;
|
|
12
12
|
get inTransaction(): boolean;
|
|
13
13
|
get connection(): knex.Knex.Transaction | undefined;
|
|
14
|
-
commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions): void
|
|
14
|
+
commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions): Promise<void>;
|
|
15
15
|
compensate(cb: FunctionAny): void;
|
|
16
16
|
begin<RESULT>(fn: FunctionAsync<RESULT>, options?: ITransactionOptions): Promise<RESULT>;
|
|
17
17
|
private _isolationLevelRequired;
|
|
@@ -4,7 +4,7 @@ import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
|
4
4
|
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
5
5
|
import type { TypeModelColumnsStrict } from '../modelWhere.ts';
|
|
6
6
|
import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
|
|
7
|
-
import type { TypeModelOfModelLike, TypeSymbolKeyEntity, TypeUtilEntityOmit, TypeUtilEntityPartial, TypeUtilEntitySelector, TypeUtilGetColumnsFromRelationAndIncludeWrapper, TypeUtilGetModelOptions, TypeUtilGetParamsColumns, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType, TypeUtilPrepareColumns } from '../relations.ts';
|
|
7
|
+
import type { TypeModelOfModelLike, TypeSymbolKeyEntity, TypeUtilEntityOmit, TypeUtilEntityPartial, TypeUtilEntitySelector, TypeUtilGetColumnsFromRelationAndIncludeWrapper, TypeUtilGetModelOptions, TypeUtilGetParamsColumns, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationKey, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType, TypeUtilPrepareColumns } from '../relations.ts';
|
|
8
8
|
export type TypeDtoMutateType = 'create' | 'update' | 'mutate';
|
|
9
9
|
export type IDtoMutateParams<ModelLike extends BeanModelMeta | (keyof IModelClassRecord)> = IBuildDtoMutateParams<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>>;
|
|
10
10
|
export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta> extends IModelRelationIncludeWrapper<Model>, IBuildDtoMutateParamsBasic<TRecord> {
|
|
@@ -13,7 +13,7 @@ export interface IBuildDtoMutateParamsBasic<TRecord> {
|
|
|
13
13
|
columns?: TypeModelColumnsStrict<TRecord>;
|
|
14
14
|
}
|
|
15
15
|
export type TypeDtoMutateResult<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeDtoMutateRelationResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>, TOptionsRelation, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>;
|
|
16
|
-
export type TypeDtoMutateRelationResult<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, TColumns = undefined> = TypeDtoMutateRelationResultEntity<TRecord, TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel> & (TModel extends BeanModelMeta ? (OmitNever<TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>> & OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>) : {});
|
|
16
|
+
export type TypeDtoMutateRelationResult<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TMutateTypeTopLevel extends TypeDtoMutateType, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, TColumns = undefined, REFKEY = undefined> = TypeDtoMutateRelationResultEntity<TRecord, TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel, REFKEY> & (TModel extends BeanModelMeta ? (OmitNever<TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>> & OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>) : {});
|
|
17
17
|
type TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel extends TypeDtoMutateType, TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined | unknown> = {
|
|
18
18
|
[RelationName in (keyof TModelOptions['relations'])]: TInclude extends {} ? TInclude[RelationName] extends {} | boolean ? TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel, TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]> : TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>;
|
|
19
19
|
};
|
|
@@ -23,28 +23,19 @@ type TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel extends TypeD
|
|
|
23
23
|
type TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper> = IncludeWrapper extends false ? never : IncludeWrapper extends true ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined> : IncludeWrapper extends {} ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, IncludeWrapper> : never;
|
|
24
24
|
type TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel extends TypeDtoMutateType, Relation> = TypeUtilGetRelationOptionsAutoload<Relation> extends true ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined> : never;
|
|
25
25
|
type TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel extends TypeDtoMutateType, WithRelation> = WithRelation extends false ? never : WithRelation extends true ? never : WithRelation extends {} ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, WithRelation, TypeUtilGetRelationOptions<WithRelation>> : never;
|
|
26
|
-
type TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel, TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>>;
|
|
27
|
-
type TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown, Columns> = TYPE extends 'belongsTo' ? never : TYPE extends 'belongsToMany' ? Array<{
|
|
26
|
+
type TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel, TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetRelationKey<Relation>>;
|
|
27
|
+
type TypeUtilGetDtoMutateEntityByType<TMutateTypeTopLevel extends TypeDtoMutateType, TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown, Columns, REFKEY = undefined> = TYPE extends 'belongsTo' ? never : TYPE extends 'belongsToMany' ? Array<{
|
|
28
28
|
id: TableIdentity;
|
|
29
29
|
deleted?: boolean;
|
|
30
|
-
}> | undefined : TYPE extends 'hasMany' ? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns>> | undefined : TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns> | undefined;
|
|
31
|
-
type TypeDtoMutateRelationResultEntity<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeDtoMutateRelationResultPatch<TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>, TMutateTypeTopLevel, TTopLevel>;
|
|
32
|
-
type TypeDtoMutateRelationResultPatch<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends false ?
|
|
30
|
+
}> | undefined : TYPE extends 'hasMany' ? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY>> | undefined : TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY> | undefined;
|
|
31
|
+
type TypeDtoMutateRelationResultEntity<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined, REFKEY = undefined> = TypeDtoMutateRelationResultPatch<TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>, TMutateTypeTopLevel, TTopLevel, REFKEY>;
|
|
32
|
+
type TypeDtoMutateRelationResultPatch<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined, REFKEY = undefined> = TTopLevel extends false ? TypeUtilEntityOmit<TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>, REFKEY> : TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>;
|
|
33
|
+
type TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends false ? TMutateTypeTopLevel extends 'update' | 'mutate' ? TypeUtilEntityPartial<TRecordResult, 'id' | 'deleted'> : TRecordResult : TRecordResult;
|
|
33
34
|
type TypeDtoMutateRelationResultEntityInner<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = [
|
|
34
35
|
Columns
|
|
35
36
|
] extends [string | string[]] ? TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns, TMutateTypeTopLevel, TTopLevel> : TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel, TColumnsOmitDefault>;
|
|
36
37
|
type TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeUtilEntitySelector<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumns<TypeUtilPrepareColumns<Columns>, TMutateTypeTopLevel, TTopLevel>>>;
|
|
37
38
|
type TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TypeUtilEntityOmit<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel, TColumnsOmitDefault>>>;
|
|
38
39
|
type TypeDtoMutateRelationResultPrepareColumns<TColumns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TTopLevel extends true ? TColumns : TMutateTypeTopLevel extends 'create' ? TypeOmitStringUnion<TColumns, 'deleted' | 'id'> : (TColumns | 'deleted' | 'id');
|
|
39
|
-
type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TColumnsOmitDefault extends string | string[] ? TColumnsOmitDefault : TMutateTypeTopLevel extends 'create' ? [
|
|
40
|
-
'id',
|
|
41
|
-
'iid',
|
|
42
|
-
'deleted',
|
|
43
|
-
'createdAt',
|
|
44
|
-
'updatedAt'
|
|
45
|
-
] : [
|
|
46
|
-
'iid',
|
|
47
|
-
'createdAt',
|
|
48
|
-
'updatedAt'
|
|
49
|
-
];
|
|
40
|
+
type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TColumnsOmitDefault extends string | string[] ? TColumnsOmitDefault : TMutateTypeTopLevel extends 'create' ? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] : ['iid', 'createdAt', 'updatedAt'];
|
|
50
41
|
export {};
|
|
@@ -26,6 +26,9 @@ export type TypeModelParamsRelationOptions<Relation> = boolean | (Omit<TypeUtilG
|
|
|
26
26
|
export type TypeUtilGetRelationType<Relation> = Relation extends {
|
|
27
27
|
type?: infer TYPE;
|
|
28
28
|
} ? TYPE : undefined;
|
|
29
|
+
export type TypeUtilGetRelationKey<Relation> = Relation extends {
|
|
30
|
+
key?: infer KEY;
|
|
31
|
+
} ? KEY : undefined;
|
|
29
32
|
export type TypeUtilGetRelationModel<Relation> = Relation extends {
|
|
30
33
|
model?: ((() => Constructable<infer MODEL extends BeanModelMeta>) | Constructable<infer MODEL extends BeanModelMeta>);
|
|
31
34
|
} ? MODEL : Relation extends {
|
|
@@ -10,22 +10,22 @@ import type { TypeModelClassLike, TypeModelOfModelLike, TypeModelsClassLikeGener
|
|
|
10
10
|
import type { TypeEntityTableColumnNamesOfGeneral, TypeEntityTableColumnsOfGeneral } from './relationsColumns.ts';
|
|
11
11
|
import type { TypeEntityTableNamesOfGeneral } from './relationsTables.ts';
|
|
12
12
|
export type TypeModelRelationType = 'hasOne' | 'belongsTo' | 'hasMany' | 'belongsToMany';
|
|
13
|
-
export interface IModelRelationHasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
13
|
+
export interface IModelRelationHasOne<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity] | undefined = keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
14
14
|
type?: 'hasOne';
|
|
15
15
|
model?: TypeModelClassLike<MODEL>;
|
|
16
|
-
key?:
|
|
16
|
+
key?: KEY;
|
|
17
17
|
options?: IModelRelationOptionsOne<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS>;
|
|
18
18
|
}
|
|
19
|
-
export interface IModelRelationBelongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
19
|
+
export interface IModelRelationBelongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>> {
|
|
20
20
|
type?: 'belongsTo';
|
|
21
21
|
model?: TypeModelClassLike<MODEL>;
|
|
22
22
|
key?: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity];
|
|
23
23
|
options?: IModelRelationOptionsOne<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS>;
|
|
24
24
|
}
|
|
25
|
-
export interface IModelRelationHasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
25
|
+
export interface IModelRelationHasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity] | undefined = keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
26
26
|
type?: 'hasMany';
|
|
27
27
|
model?: TypeModelClassLike<MODEL>;
|
|
28
|
-
key?:
|
|
28
|
+
key?: KEY;
|
|
29
29
|
options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>;
|
|
30
30
|
}
|
|
31
31
|
export interface IModelRelationBelongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]>, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined, Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity]> | undefined = undefined> {
|
|
@@ -36,7 +36,7 @@ export interface IModelRelationBelongsToMany<MODELMiddle extends BeanModelMeta |
|
|
|
36
36
|
keyTo?: keyof TypeModelOfModelLike<MODELMiddle>[TypeSymbolKeyEntity];
|
|
37
37
|
options?: IModelRelationOptionsMany<TypeModelOfModelLike<MODEL>, AUTOLOAD, COLUMNS, ModelJoins, Aggrs, Groups>;
|
|
38
38
|
}
|
|
39
|
-
export interface IModelRelationOptionsOne<MODEL extends BeanModelMeta, AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<MODEL[TypeSymbolKeyEntity]> = TypeModelColumn<MODEL[TypeSymbolKeyEntity]>> extends IModelRelationOptionsMetaWrapper {
|
|
39
|
+
export interface IModelRelationOptionsOne<MODEL extends BeanModelMeta, AUTOLOAD extends boolean = false, COLUMNS extends TypeModelColumn<MODEL[TypeSymbolKeyEntity]> | undefined = TypeModelColumn<MODEL[TypeSymbolKeyEntity]>> extends IModelRelationOptionsMetaWrapper {
|
|
40
40
|
autoload?: AUTOLOAD;
|
|
41
41
|
columns?: TypeModelColumnsPatch<MODEL[TypeSymbolKeyEntity], COLUMNS>;
|
|
42
42
|
}
|
|
@@ -57,3 +57,4 @@ export interface IModelRelationOptionsMetaWrapper {
|
|
|
57
57
|
meta?: IModelRelationOptionsMeta;
|
|
58
58
|
}
|
|
59
59
|
export type TypeModelRelationOptionsMetaClient = '_auto_' | '_initial_' | '_inherit_' | keyof IDatabaseClientRecord | ServiceDb;
|
|
60
|
+
export type IRelationItem = [string, any, any, any, boolean];
|
|
@@ -8,10 +8,10 @@ import type { TypeEntityTableColumnNamesOfGeneral, TypeEntityTableColumnsOfGener
|
|
|
8
8
|
import type { IModelRelationOptionsMetaWrapper } from './relationsDef.ts';
|
|
9
9
|
import type { TypeModelSelectGroupParamsColumnNames } from './relationsGroup.ts';
|
|
10
10
|
import type { TypeEntityTableNamesOfGeneral } from './relationsTables.ts';
|
|
11
|
-
export interface IModelRelationHasOneDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
11
|
+
export interface IModelRelationHasOneDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
12
12
|
type?: 'hasOne';
|
|
13
13
|
model?: TypeModelClassLike<MODEL>;
|
|
14
|
-
key?:
|
|
14
|
+
key?: KEY;
|
|
15
15
|
options?: OPTIONS;
|
|
16
16
|
}
|
|
17
17
|
export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
|
|
@@ -20,10 +20,10 @@ export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta
|
|
|
20
20
|
key?: keyof TypeModelOfModelLike<MODELSelf>[TypeSymbolKeyEntity];
|
|
21
21
|
options?: OPTIONS;
|
|
22
22
|
}
|
|
23
|
-
export interface IModelRelationHasManyDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|
|
23
|
+
export interface IModelRelationHasManyDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), KEY extends keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|
|
24
24
|
type?: 'hasMany';
|
|
25
25
|
model?: TypeModelClassLike<MODEL>;
|
|
26
|
-
key?:
|
|
26
|
+
key?: KEY;
|
|
27
27
|
options?: OPTIONS;
|
|
28
28
|
}
|
|
29
29
|
export interface IModelRelationBelongsToManyDynamic<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> | undefined = undefined, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
|