vona-module-a-orm 5.0.54 → 5.0.56

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('*')) {
@@ -59,6 +59,7 @@ export declare function config(_app: VonaApplication): {
59
59
  client?: keyof import("vona-module-a-redis").IRedisClientRecord;
60
60
  disableInstance?: boolean;
61
61
  };
62
+ emptyArrayAsNull?: boolean;
62
63
  enable?: boolean;
63
64
  meta?: Omit<IOnionOptionsMeta, never> | undefined;
64
65
  };
@@ -81,6 +82,7 @@ export declare function config(_app: VonaApplication): {
81
82
  client?: keyof import("vona-module-a-redis").IRedisClientRecord;
82
83
  disableInstance?: boolean;
83
84
  };
85
+ emptyArrayAsNull?: boolean;
84
86
  enable?: boolean;
85
87
  meta?: Omit<IOnionOptionsMeta, never> | undefined;
86
88
  };
package/dist/index.js CHANGED
@@ -230,9 +230,16 @@ let ServiceDatabase = (_dec$t = Service(), _dec2$t = BeanInfo({
230
230
  return !clientName || clientName === 'default' ? this.getDefaultClientName() : clientName;
231
231
  }
232
232
  getDefaultClientName() {
233
- let defaultClient = this.app.config.database.defaultClient;
233
+ const defaultClient = this.app.config.database.defaultClient;
234
234
  if (typeof defaultClient === 'function') {
235
- defaultClient = defaultClient(this.ctx);
235
+ return defaultClient(this.ctx);
236
+ }
237
+ // check instance
238
+ if (!isNil(this.ctx.instanceName)) {
239
+ const configInstanceBase = this.$scope.instance.service.instance.getConfigInstanceBase(this.ctx.instanceName);
240
+ if (configInstanceBase?.isolate) {
241
+ return configInstanceBase.isolateClient;
242
+ }
236
243
  }
237
244
  return defaultClient;
238
245
  }
@@ -687,10 +694,10 @@ let ServiceDatabaseClient = (_dec$m = Service(), _dec2$m = BeanInfo({
687
694
  // * should not use this.clientConfig.connection, because password is hidden
688
695
  const config = this.getClientConfig(this.clientName, true);
689
696
  config.connection = Object.assign({}, config.connection, connDatabaseName);
690
- // only used by startup, so no consider that workders broadcast
697
+ // only used by startup, so no consider that workers broadcast
691
698
  this.configDatabase.clients[this.clientName] = config;
692
699
  // reload
693
- await this.reload(config);
700
+ await this.scope.service.database.reloadClients(this.clientName, config);
694
701
  }
695
702
  }) || _class$m) || _class$m);
696
703
 
@@ -2252,6 +2259,49 @@ let ServiceCacheQuery = (_dec$c = Service(), _dec2$c = BeanInfo({
2252
2259
  }
2253
2260
  }) || _class$c) || _class$c);
2254
2261
 
2262
+ function handleRelationsCollection(relationsStatic, includeWrapper) {
2263
+ // collect
2264
+ const relations = [];
2265
+ // include
2266
+ if (relationsStatic) {
2267
+ for (const key in relationsStatic) {
2268
+ const relationDef = relationsStatic[key];
2269
+ const relationCur = includeWrapper?.include?.[key];
2270
+ let relationReal;
2271
+ let includeReal;
2272
+ let withReal;
2273
+ let autoload;
2274
+ if (relationCur === false) {
2275
+ continue;
2276
+ } else if (relationCur === true) {
2277
+ relationReal = relationDef;
2278
+ autoload = relationDef.options?.autoload;
2279
+ } else if (typeof relationCur === 'object') {
2280
+ relationReal = deepExtend({}, relationDef, {
2281
+ options: relationCur
2282
+ });
2283
+ includeReal = relationCur.include;
2284
+ withReal = relationCur.with;
2285
+ } else if (relationDef.options?.autoload) {
2286
+ relationReal = relationDef;
2287
+ autoload = relationDef.options?.autoload;
2288
+ } else {
2289
+ continue;
2290
+ }
2291
+ relations.push([key, relationReal, includeReal, withReal, autoload]);
2292
+ }
2293
+ }
2294
+ // with
2295
+ if (includeWrapper?.with) {
2296
+ for (const key in includeWrapper.with) {
2297
+ const relationReal = includeWrapper.with[key];
2298
+ if (!relationReal) continue;
2299
+ relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
2300
+ }
2301
+ }
2302
+ return relations;
2303
+ }
2304
+
2255
2305
  var _dec$b, _dec2$b, _class$b;
2256
2306
  let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
2257
2307
  module: "a-orm"
@@ -2787,43 +2837,7 @@ let ServiceRelations = (_dec$b = Service(), _dec2$b = BeanInfo({
2787
2837
  return this._model.newInstanceTarget(modelClassTarget, meta?.client, meta?.table);
2788
2838
  }
2789
2839
  handleRelationsCollection(includeWrapper) {
2790
- // collect
2791
- const relations = [];
2792
- // include
2793
- if (this._model.options.relations) {
2794
- for (const key in this._model.options.relations) {
2795
- const relationDef = this._model.options.relations[key];
2796
- const relationCur = includeWrapper?.include?.[key];
2797
- let relationReal;
2798
- let includeReal;
2799
- let withReal;
2800
- if (relationCur === false) {
2801
- continue;
2802
- } else if (relationCur === true) {
2803
- relationReal = relationDef;
2804
- } else if (typeof relationCur === 'object') {
2805
- relationReal = deepExtend({}, relationDef, {
2806
- options: relationCur
2807
- });
2808
- includeReal = relationCur.include;
2809
- withReal = relationCur.with;
2810
- } else if (relationDef.options?.autoload) {
2811
- relationReal = relationDef;
2812
- } else {
2813
- continue;
2814
- }
2815
- relations.push([key, relationReal, includeReal, withReal]);
2816
- }
2817
- }
2818
- // with
2819
- if (includeWrapper?.with) {
2820
- for (const key in includeWrapper.with) {
2821
- const relationReal = includeWrapper.with[key];
2822
- if (!relationReal) continue;
2823
- relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with]);
2824
- }
2825
- }
2826
- return relations;
2840
+ return handleRelationsCollection(this._model.options.relations, includeWrapper);
2827
2841
  }
2828
2842
  }) || _class$b) || _class$b);
2829
2843
 
@@ -3088,10 +3102,10 @@ class BeanModelCache extends BeanModelCrud {
3088
3102
  }
3089
3103
  // 2: mget
3090
3104
  const ids = items.map(item => cast(item).id);
3091
- const options2 = params?.columns ? Object.assign({}, options, {
3105
+ const options3 = params?.columns ? Object.assign({}, options, {
3092
3106
  columns: params?.columns
3093
3107
  }) : options;
3094
- return await this.__mget_raw(table, ids, options2);
3108
+ return await this.__mget_raw(table, ids, options3);
3095
3109
  }
3096
3110
  async __select_cache(table, params, options) {
3097
3111
  // check if cache
@@ -3107,6 +3121,7 @@ class BeanModelCache extends BeanModelCrud {
3107
3121
  // cache
3108
3122
  const cache = this.cacheQuery.getInstance(table);
3109
3123
  const items = await cache.get(key, {
3124
+ ...options?.cache,
3110
3125
  get: async () => {
3111
3126
  return await super._select(table, params, options, builder);
3112
3127
  },
@@ -3150,9 +3165,12 @@ class BeanModelCache extends BeanModelCrud {
3150
3165
  params.columns = options?.columns;
3151
3166
  }
3152
3167
  // select
3153
- const options2 = options?.columns ? Object.assign({}, options, {
3154
- columns: undefined
3155
- }) : options;
3168
+ const options2 = deepExtend({}, options, {
3169
+ columns: undefined,
3170
+ cache: {
3171
+ emptyArrayAsNull: true
3172
+ }
3173
+ });
3156
3174
  const items = await this.__select_raw(table, params, options2);
3157
3175
  return items[0];
3158
3176
  }
@@ -3208,13 +3226,16 @@ class BeanModelCache extends BeanModelCrud {
3208
3226
  const where = !isNil(id) ? Object.assign({}, options?.where, {
3209
3227
  id
3210
3228
  }) : options?.where;
3211
- options = Object.assign({}, options, {
3212
- where: undefined
3229
+ const options2 = deepExtend({}, options, {
3230
+ where: undefined,
3231
+ cache: {
3232
+ emptyArrayAsNull: true
3233
+ }
3213
3234
  });
3214
3235
  const items = await this.__select_raw(table, {
3215
3236
  where,
3216
3237
  columns: ['id']
3217
- }, options);
3238
+ }, options2);
3218
3239
  if (items.length === 0) {
3219
3240
  // donothing
3220
3241
  return;
@@ -3266,10 +3287,15 @@ class BeanModelCache extends BeanModelCrud {
3266
3287
  let id = this.__checkCacheKeyValid(where, table);
3267
3288
  if (isNil(id)) {
3268
3289
  // check where and get id
3290
+ const options2 = deepExtend({}, options, {
3291
+ cache: {
3292
+ emptyArrayAsNull: true
3293
+ }
3294
+ });
3269
3295
  const items = await this.__select_raw(table, {
3270
3296
  where,
3271
3297
  columns: ['id']
3272
- }, options);
3298
+ }, options2);
3273
3299
  if (items.length === 0) {
3274
3300
  // donothing
3275
3301
  return;
@@ -3816,71 +3842,17 @@ class Main extends BeanSimple {
3816
3842
  }
3817
3843
  async configLoaded(_config) {}
3818
3844
  }
3819
- async function configDefault(app) {
3820
- return {
3821
- testDatabase: false,
3822
- defaultClient: app.meta.env.DATABASE_DEFAULT_CLIENT,
3823
- clients: {
3824
- pg: {
3825
- client: 'pg',
3826
- connection: {
3827
- host: app.meta.env.DATABASE_CLIENT_PG_HOST,
3828
- port: Number.parseInt(app.meta.env.DATABASE_CLIENT_PG_PORT),
3829
- user: app.meta.env.DATABASE_CLIENT_PG_USER,
3830
- password: app.meta.env.DATABASE_CLIENT_PG_PASSWORD,
3831
- database: app.meta.env.DATABASE_CLIENT_PG_DATABASE
3832
- }
3833
- },
3834
- mysql: {
3835
- client: 'mysql2',
3836
- connection: {
3837
- host: app.meta.env.DATABASE_CLIENT_MYSQL_HOST,
3838
- port: Number.parseInt(app.meta.env.DATABASE_CLIENT_MYSQL_PORT),
3839
- user: app.meta.env.DATABASE_CLIENT_MYSQL_USER,
3840
- password: app.meta.env.DATABASE_CLIENT_MYSQL_PASSWORD,
3841
- database: app.meta.env.DATABASE_CLIENT_MYSQL_DATABASE
3842
- }
3843
- }
3844
- },
3845
- base: {
3846
- pool: {
3847
- min: 0,
3848
- max: 5
3849
- },
3850
- acquireConnectionTimeout: 60000 * 10,
3851
- asyncStackTraces: true
3852
- }
3853
- };
3845
+ async function configDefault(_app) {
3846
+ return {};
3854
3847
  }
3855
3848
  async function configDev(_app) {
3856
- return {
3857
- testDatabase: true,
3858
- base: {
3859
- pool: {
3860
- min: 0,
3861
- max: 1
3862
- }
3863
- }
3864
- };
3849
+ return {};
3865
3850
  }
3866
3851
  async function configProd(_app) {
3867
- return {
3868
- testDatabase: false,
3869
- base: {
3870
- asyncStackTraces: false
3871
- }
3872
- };
3852
+ return {};
3873
3853
  }
3874
3854
  async function configTest(_app) {
3875
- return {
3876
- testDatabase: true,
3877
- base: {
3878
- pool: {
3879
- min: 0,
3880
- max: 1
3881
- }
3882
- }
3883
- };
3855
+ return {};
3884
3856
  }
3885
3857
 
3886
3858
  var _dec, _dec2, _class;
@@ -3984,7 +3956,6 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
3984
3956
  include: includeReal,
3985
3957
  with: withReal
3986
3958
  });
3987
- const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel);
3988
3959
  if (mutateTypeTopLevel) {
3989
3960
  if (type === 'belongsTo') {
3990
3961
  // donot mutate
@@ -3997,13 +3968,17 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
3997
3968
  deleted: z.boolean().optional()
3998
3969
  }));
3999
3970
  } else if (type === 'hasOne') {
3971
+ const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
4000
3972
  schema = v.lazy(schemaLazy);
4001
3973
  // optional = true;
4002
3974
  } else {
3975
+ // hasMany
3976
+ const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
4003
3977
  schema = v.array(v.lazy(schemaLazy));
4004
3978
  }
4005
3979
  Api.field(v.optional(), schema)(entityClass.prototype, relationName);
4006
3980
  } else {
3981
+ const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
4007
3982
  let schema;
4008
3983
  let optional = false;
4009
3984
  if (type === 'hasOne' || type === 'belongsTo') {
@@ -4026,10 +4001,10 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
4026
4001
  }
4027
4002
  }
4028
4003
  }
4029
- function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel) {
4004
+ function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation) {
4030
4005
  return () => {
4031
4006
  if (!autoload) {
4032
- return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
4007
+ return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
4033
4008
  }
4034
4009
  // dynamic
4035
4010
  const entityClass = getClassEntityFromClassModel(modelTarget);
@@ -4038,16 +4013,16 @@ function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload,
4038
4013
  const dynamicName = `${beanFullName}_${_hashkey}`;
4039
4014
  let entityTarget = getSchemaDynamic(dynamicName);
4040
4015
  if (!entityTarget) {
4041
- entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel);
4016
+ entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
4042
4017
  entityTarget[SymbolSchemaDynamicRefId] = dynamicName;
4043
4018
  addSchemaDynamic(dynamicName, entityTarget);
4044
4019
  }
4045
4020
  return entityTarget;
4046
4021
  };
4047
4022
  }
4048
- function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel) {
4023
+ function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation) {
4049
4024
  if (mutateTypeTopLevel) {
4050
- return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false); // columnsOmitDefault: undefined
4025
+ return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false, relation); // columnsOmitDefault: undefined
4051
4026
  } else {
4052
4027
  if (optionsReal.groups) {
4053
4028
  return DtoGroup(modelTarget, optionsReal.groups, optionsReal.aggrs, optionsReal.columns);
@@ -4071,50 +4046,11 @@ function _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLe
4071
4046
  }
4072
4047
  function _DtoGet_relations_collection(modelClass, includeWrapper) {
4073
4048
  const beanOptions = appResource.getBean(modelClass);
4074
- const options = beanOptions.options;
4075
- // collect
4076
- const relations = [];
4077
- // include
4078
- if (options.relations) {
4079
- for (const key in options.relations) {
4080
- const relationDef = options.relations[key];
4081
- const relationCur = includeWrapper?.include?.[key];
4082
- let relationReal;
4083
- let includeReal;
4084
- let withReal;
4085
- let autoload;
4086
- if (relationCur === false) {
4087
- continue;
4088
- } else if (relationCur === true) {
4089
- relationReal = relationDef;
4090
- autoload = relationDef.options?.autoload;
4091
- } else if (typeof relationCur === 'object') {
4092
- relationReal = deepExtend({}, relationDef, {
4093
- options: relationCur
4094
- });
4095
- includeReal = relationCur.include;
4096
- withReal = relationCur.with;
4097
- } else if (relationDef.options?.autoload) {
4098
- relationReal = relationDef;
4099
- autoload = relationDef.options?.autoload;
4100
- } else {
4101
- continue;
4102
- }
4103
- relations.push([key, relationReal, includeReal, withReal, autoload]);
4104
- }
4105
- }
4106
- // with
4107
- if (includeWrapper?.with) {
4108
- for (const key in includeWrapper.with) {
4109
- const relationReal = includeWrapper.with[key];
4110
- if (!relationReal) continue;
4111
- relations.push([key, relationReal, relationReal.options?.include, relationReal.options?.with, false]);
4112
- }
4113
- }
4114
- return relations;
4049
+ const options = beanOptions?.options;
4050
+ return handleRelationsCollection(options?.relations, includeWrapper);
4115
4051
  }
4116
4052
 
4117
- function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel) {
4053
+ function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefault, topLevel, relation) {
4118
4054
  // model
4119
4055
  const modelClass = prepareClassModel(modelLike);
4120
4056
  // entity
@@ -4150,13 +4086,23 @@ function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefaul
4150
4086
  if (!topLevel && mutateTypeTopLevel !== 'create') {
4151
4087
  entityClass = $Class.partial(entityClass, ['id', 'deleted']);
4152
4088
  }
4089
+ if (!topLevel && relation) {
4090
+ const [_relationName, relationReal] = relation;
4091
+ const {
4092
+ type,
4093
+ key
4094
+ } = relationReal;
4095
+ if (type === 'hasOne' || type === 'hasMany') {
4096
+ entityClass = $Class.omit(entityClass, key);
4097
+ }
4098
+ }
4153
4099
  // relations
4154
4100
  _DtoGet_relations(modelClass, entityClass, params, mutateTypeTopLevel);
4155
4101
  return entityClass;
4156
4102
  }
4157
4103
 
4158
4104
  function DtoCreate(modelLike, params) {
4159
- return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
4105
+ return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
4160
4106
  }
4161
4107
 
4162
4108
  function DtoQuery(classRef, keys) {
@@ -4176,7 +4122,7 @@ function DtoSelectAndCount(modelLike, params) {
4176
4122
  }
4177
4123
 
4178
4124
  function DtoUpdate(modelLike, params) {
4179
- return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
4125
+ return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true, undefined);
4180
4126
  }
4181
4127
 
4182
4128
  // 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[];
package/dist/main.d.ts CHANGED
@@ -6,4 +6,4 @@ export declare class Main extends BeanSimple implements IModuleMain {
6
6
  moduleLoaded(): Promise<void>;
7
7
  configLoaded(_config: any): Promise<void>;
8
8
  }
9
- export declare function configDefault(app: VonaApplication): Promise<PowerPartial<ConfigDatabase>>;
9
+ export declare function configDefault(_app: VonaApplication): Promise<PowerPartial<ConfigDatabase>>;
@@ -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 {};
@@ -1,4 +1,5 @@
1
1
  import type { Knex } from 'knex';
2
+ import type { TSummerCacheActionOptions } from 'vona-module-a-summer';
2
3
  import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
3
4
  import type { TypeModelColumn, TypeModelColumns, TypeModelColumnsPatch, TypeModelWhere } from './modelWhere.ts';
4
5
  import type { TypeModelOfModelLike, TypeModelParamsInclude, TypeModelsClassLikeGeneral, TypeSymbolKeyEntity } from './relations.ts';
@@ -51,6 +52,7 @@ export interface IModelMethodOptionsGeneral {
51
52
  disableCacheQuery?: boolean;
52
53
  disableCacheEntity?: boolean;
53
54
  deleted?: boolean;
55
+ cache?: TSummerCacheActionOptions<unknown, unknown>;
54
56
  }
55
57
  export interface IModelInsertOptionsGeneral<_TRecord, Model extends BeanModelMeta | undefined = undefined> extends IModelMethodOptionsGeneral, IModelMutateRelationIncludeWrapper<Model> {
56
58
  }
@@ -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,4 +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];
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> {
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.54",
4
+ "version": "5.0.56",
5
5
  "title": "a-orm",
6
6
  "vonaModule": {
7
7
  "capabilities": {