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.
@@ -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
- // // key
137
- // const key = __parseRelation_key(args[1]);
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},${modelJoins},${options.aggrs},${options.groups}>`;
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
- this.ctx?.commit(cb);
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
- const relations = this.__handleRelationsCollection(includeWrapper);
2272
- if (!relations) return entity;
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
- const relations = this.__handleRelationsCollection(includeWrapper);
2282
- if (!relations) return entities;
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.__handleRelationsCollection(includeWrapper);
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.__handleRelationsCollection(includeWrapper);
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
- __getModelTarget(modelClassTarget, meta) {
2760
- return this._model.newInstanceTarget(modelClassTarget, meta?.client, meta?.table);
2761
- }
2762
- __handleRelationsCollection(includeWrapper) {
2763
- // collect
2764
- const relations = [];
2765
- // include
2766
- if (this._model.options.relations) {
2767
- for (const key in this._model.options.relations) {
2768
- const relationDef = this._model.options.relations[key];
2769
- const relationCur = includeWrapper?.include?.[key];
2770
- let relationReal;
2771
- let includeReal;
2772
- let withReal;
2773
- if (relationCur === false) {
2774
- continue;
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
- return relations;
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 items = await this.__mget_raw(undefined, ids, options);
2927
- return await this.relations.handleRelationsMany(items, options, options);
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 items = await this.__select_raw(undefined, params, options);
3012
- return await this.relations.handleRelationsMany(items, params, options);
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 item = await this.__get_raw(undefined, where, options);
3070
- return await this.relations.handleRelationsOne(item, options, options);
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
- if (this.db.inTransaction) {
3273
- this.db.commit(async () => {
3274
- await this.cacheEntityDelInner(id, table);
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
- if (this.db.inTransaction) {
3292
- this.db.commit(async () => {
3293
- await this.cacheEntityClearInner(table);
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
- if (this.db.inTransaction) {
3311
- this.db.commit(async () => {
3312
- await this.cacheQueryClearInner(table);
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
- if (this.db.inTransaction) {
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.options;
4021
- // collect
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: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, OPTIONS>;
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: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], options?: OPTIONS, _modelJoins?: ModelJoins, _group?: Group): IModelRelationHasManyDynamic<MODEL, OPTIONS, ModelJoins, Group>;
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: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, OPTIONS>;
7
- declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyMutate<TypeModelOfModelLike<MODEL>>>(classModel: TypeModelClassLike<MODEL>, key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationHasManyDynamic<MODEL, OPTIONS>;
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[];
@@ -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
- private __handleRelationsCollection;
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 ? TMutateTypeTopLevel extends 'update' | 'mutate' ? TypeUtilEntityPartial<TRecordResult, 'id' | 'deleted'> : TRecordResult : TRecordResult;
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?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
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?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
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?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
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?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
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> {
@@ -14,5 +14,5 @@ export interface ITransactionOptions {
14
14
  propagation?: TypeTransactionPropagation;
15
15
  }
16
16
  export interface ITransactionConsistencyCommitOptions {
17
- ctxPrefer?: boolean;
17
+ ignoreIfNotInTransaction?: boolean;
18
18
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "vona-module-a-orm",
3
3
  "type": "module",
4
- "version": "5.0.53",
4
+ "version": "5.0.55",
5
5
  "title": "a-orm",
6
6
  "vonaModule": {
7
7
  "capabilities": {