vona-module-a-orm 5.0.40 → 5.0.42

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -15,6 +15,8 @@ import { Event, BeanEventBase } from 'vona-module-a-event';
15
15
  import { Schedule } from 'vona-module-a-schedule';
16
16
  import { configAllWithIgnoreNull, configAll, configRedisWithIgnoreNull, configRedis } from 'vona-module-a-summer';
17
17
  import { ServiceDatabaseAsyncLocalStorage as ServiceDatabaseAsyncLocalStorage$1, ServiceTransactionConsistency‌ as ServiceTransactionConsistency_ } from 'vona-module-a-orm';
18
+ import { mutate } from 'mutate-on-copy';
19
+ import z from 'zod';
18
20
 
19
21
  var _dec$u, _dec2$u, _class$u;
20
22
  let AopMethodTransaction = (_dec$u = AopMethod(), _dec2$u = BeanInfo({
@@ -1268,6 +1270,8 @@ const SymbolKeyEntity = Symbol('$entity');
1268
1270
  const SymbolKeyEntityMeta = Symbol('$entityMeta');
1269
1271
  const SymbolKeyModelOptions = Symbol('$modelOptions');
1270
1272
 
1273
+ // not use Groups extends string |string[]
1274
+
1271
1275
  const SymbolModelDb = Symbol('SymbolModelDb');
1272
1276
  const SymbolModelTable = Symbol('SymbolModelTable');
1273
1277
  class BeanModelMeta extends BeanBase {
@@ -2400,7 +2404,11 @@ let ServiceRelations = (_dec$a = Service(), _dec2$a = BeanInfo({
2400
2404
  });
2401
2405
  const items = await modelTarget.group(options2, methodOptionsReal);
2402
2406
  for (const entity of entities) {
2403
- entity[relationName] = items.find(item => item[key] === cast(entity).id);
2407
+ const item = items.find(item => item[key] === cast(entity).id);
2408
+ if (item) {
2409
+ delete item[key];
2410
+ }
2411
+ entity[relationName] = item;
2404
2412
  }
2405
2413
  } else {
2406
2414
  const [columns, withKey] = this.__prepareColumnsAndKey(optionsReal.columns, key);
@@ -3709,14 +3717,23 @@ function _DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel) {
3709
3717
  options
3710
3718
  } = relationReal;
3711
3719
  const modelTarget = prepareClassModel(model);
3712
- const optionsReal = deepExtend({}, options, {
3720
+ const optionsReal = Object.assign({}, options, {
3713
3721
  include: includeReal,
3714
3722
  with: withReal
3715
3723
  });
3716
3724
  const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel);
3717
3725
  if (mutateTypeTopLevel) {
3726
+ if (type === 'belongsTo') {
3727
+ // donot mutate
3728
+ return;
3729
+ }
3718
3730
  let schema;
3719
- if (type === 'hasOne' || type === 'belongsTo') {
3731
+ if (type === 'belongsToMany') {
3732
+ schema = v.array(z.object({
3733
+ id: v.tableIdentity()(),
3734
+ deleted: z.boolean().optional()
3735
+ }));
3736
+ } else if (type === 'hasOne') {
3720
3737
  schema = v.lazy(v.optional(), schemaLazy);
3721
3738
  } else {
3722
3739
  schema = v.array(v.lazy(schemaLazy));
@@ -3832,21 +3849,29 @@ function _DtoMutate_raw(modelLike, params, mutateTypeTopLevel, columnsOmitDefaul
3832
3849
  // entity
3833
3850
  let entityClass = getClassEntityFromClassModel(modelClass);
3834
3851
  // columns
3835
- const columns = prepareColumns(params?.columns);
3852
+ let columns = prepareColumns(params?.columns);
3836
3853
  if (columns) {
3837
3854
  if (!topLevel) {
3838
3855
  if (mutateTypeTopLevel === 'create') {
3839
3856
  for (const key of ['deleted', 'id']) {
3840
3857
  const index = columns.indexOf(key);
3841
- if (index > -1) columns.splice(index, 1);
3858
+ if (index > -1) {
3859
+ columns = mutate(columns, copyState => {
3860
+ copyState.splice(index, 1);
3861
+ });
3862
+ }
3842
3863
  }
3843
3864
  } else {
3844
3865
  for (const key of ['deleted', 'id']) {
3845
- if (!columns.includes(key)) columns.unshift(key);
3866
+ if (!columns.includes(key)) {
3867
+ columns = mutate(columns, copyState => {
3868
+ copyState.unshift(key);
3869
+ });
3870
+ }
3846
3871
  }
3847
3872
  }
3848
3873
  }
3849
- entityClass = $Class.pick(entityClass, prepareColumns(params?.columns));
3874
+ entityClass = $Class.pick(entityClass, columns);
3850
3875
  } else {
3851
3876
  const columns = columnsOmitDefault ?? (mutateTypeTopLevel === 'create' ? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] : ['iid', 'createdAt', 'updatedAt']);
3852
3877
  entityClass = $Class.omit(entityClass, prepareColumns(columns));
@@ -3864,9 +3889,11 @@ function DtoCreate(modelLike, params) {
3864
3889
  }
3865
3890
 
3866
3891
  function DtoUpdate(modelLike, params) {
3867
- return $Class.partial(_DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true));
3892
+ return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'], true);
3868
3893
  }
3869
3894
 
3895
+ // not use Partial/$Class.partial, for form render at frontend
3896
+
3870
3897
  const $Dto = {
3871
3898
  create: DtoCreate,
3872
3899
  update: DtoUpdate,
@@ -2,4 +2,4 @@ import type { Constructable } from 'vona';
2
2
  import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
3
3
  import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
4
4
  import type { IModelClassRecord } from '../../types/onion/model.ts';
5
- export declare function DtoCreate<T extends IDtoMutateParams<ModelLike>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord)>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoMutateResult<ModelLike, T>>;
5
+ export declare function DtoCreate<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, 'create', 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt', true>>;
@@ -4,5 +4,5 @@ import type { IDtoGetParams, TypeDtoGetResult } from '../../types/dto/dtoGet.ts'
4
4
  import type { TypeDtoMutateType } from '../../types/dto/dtoMutate.ts';
5
5
  import type { IModelRelationIncludeWrapper } from '../../types/model.ts';
6
6
  import type { IModelClassRecord } from '../../types/onion/model.ts';
7
- export declare function DtoGet<T extends IDtoGetParams<ModelLike>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord)>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoGetResult<ModelLike, T>>;
7
+ export declare function DtoGet<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), T extends IDtoGetParams<ModelLike> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoGetResult<ModelLike, T>>;
8
8
  export declare function _DtoGet_relations<TRecord extends {}, TModel extends BeanModelMeta>(modelClass: Constructable<TModel>, entityClass: Constructable<TRecord>, includeWrapper?: IModelRelationIncludeWrapper, mutateTypeTopLevel?: TypeDtoMutateType): void;
@@ -5,4 +5,4 @@ import type { TypeModelSelectAggrParamsAggrs } from '../../types/modelAggr.ts';
5
5
  import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
6
6
  import type { IModelClassRecord } from '../../types/onion/model.ts';
7
7
  import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
8
- export declare function DtoGroup<Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>, Columns extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord)>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, groups: Groups, aggrs?: Aggrs, columns?: Columns): Constructable<TypeDtoGroupResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], Aggrs, Groups, Columns>>;
8
+ export declare function DtoGroup<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>, Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined, Columns extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, groups: Groups, aggrs?: Aggrs, columns?: Columns): Constructable<TypeDtoGroupResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], Aggrs, Groups, Columns>>;
@@ -4,5 +4,5 @@ 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
- export declare function DtoMutate<T extends IDtoMutateParams<ModelLike>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord)>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<TypeDtoMutateResult<ModelLike, T>>;
8
- export declare function _DtoMutate_raw<T extends IDtoMutateParams<ModelLike>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord), 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): Constructable<TypeDtoMutateResult<ModelLike, T>>;
7
+ 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;
@@ -2,4 +2,4 @@ import type { Constructable } from 'vona';
2
2
  import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
3
3
  import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
4
4
  import type { IModelClassRecord } from '../../types/onion/model.ts';
5
- export declare function DtoUpdate<T extends IDtoMutateParams<ModelLike>, ModelLike extends BeanModelMeta | (keyof IModelClassRecord)>(modelLike: ModelLike extends BeanModelMeta ? ((() => Constructable<ModelLike>) | Constructable<ModelLike>) : ModelLike, params?: T): Constructable<Partial<TypeDtoMutateResult<ModelLike, T>>>;
5
+ export declare function DtoUpdate<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, 'update', 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt', true>>;
@@ -2,10 +2,10 @@ 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>>>(classModel: TypeModelClassLike<MODEL>, key: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity], options?: OPTIONS): IModelRelationHasOneDynamic<MODEL, OPTIONS>;
6
- declare function belongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>>>(_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>, 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>;
8
- declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group>, 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>;
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>;
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>;
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;
11
11
  belongsTo: typeof belongsTo;
@@ -1,9 +1,10 @@
1
+ import type { OmitNever, TypeOmitStringUnion } from 'vona';
1
2
  import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
2
3
  import type { IModelRelationIncludeWrapper } from '../model.ts';
3
4
  import type { TypeModelColumnsStrict } from '../modelWhere.ts';
4
- import type { IModelClassRecord } from '../onion/model.ts';
5
- import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../relations.ts';
6
- import type { TypeModelMutateRelationData } from '../relationsMutate.ts';
5
+ import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
6
+ import type { TypeModelOfModelLike, TypeSymbolKeyEntity, TypeUtilEntityOmit, TypeUtilEntityPartial, TypeUtilEntitySelector, TypeUtilGetColumnsFromRelationAndIncludeWrapper, TypeUtilGetModelOptions, TypeUtilGetParamsColumns, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType, TypeUtilPrepareColumns } from '../relations.ts';
7
+ import type { TableIdentity } from '../tableIdentity.ts';
7
8
  export type TypeDtoMutateType = 'create' | 'update' | 'mutate';
8
9
  export type IDtoMutateParams<ModelLike extends BeanModelMeta | (keyof IModelClassRecord)> = IBuildDtoMutateParams<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>>;
9
10
  export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta> extends IModelRelationIncludeWrapper<Model>, IBuildDtoMutateParamsBasic<TRecord> {
@@ -11,4 +12,39 @@ export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta> ext
11
12
  export interface IBuildDtoMutateParamsBasic<TRecord> {
12
13
  columns?: TypeModelColumnsStrict<TRecord>;
13
14
  }
14
- export type TypeDtoMutateResult<ModelLike extends BeanModelMeta | (keyof IModelClassRecord), TOptionsRelation> = TypeModelMutateRelationData<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], TypeModelOfModelLike<ModelLike>, TOptionsRelation>;
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>>>) : {});
17
+ type TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel extends TypeDtoMutateType, TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined | unknown> = {
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
+ };
20
+ type TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel extends TypeDtoMutateType, TWith extends {} | undefined | unknown> = TWith extends {} ? {
21
+ [RelationName in (keyof TWith)]: TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel, TWith[RelationName]>;
22
+ } : {};
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
+ type TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel extends TypeDtoMutateType, Relation> = TypeUtilGetRelationOptionsAutoload<Relation> extends true ? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined> : never;
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<{
28
+ id: TableIdentity;
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;
33
+ type TypeDtoMutateRelationResultEntityInner<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = [
34
+ Columns
35
+ ] extends [string | string[]] ? TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns, TMutateTypeTopLevel, TTopLevel> : TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel, TColumnsOmitDefault>;
36
+ type TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns = undefined, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TTopLevel extends boolean | undefined = undefined> = TypeUtilEntitySelector<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumns<TypeUtilPrepareColumns<Columns>, TMutateTypeTopLevel, TTopLevel>>>;
37
+ type TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined, TColumnsOmitDefault extends string | string[] | undefined = undefined> = TypeUtilEntityOmit<TRecord, TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel, TColumnsOmitDefault>>>;
38
+ 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
+ ];
50
+ export {};
@@ -1,3 +1,4 @@
1
+ import type { OmitNever } from 'vona';
1
2
  import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
2
3
  import type { IModelSelectParamsJoin } from './model.ts';
3
4
  import type { TypeModelColumns, TypeModelWhere } from './modelWhere.ts';
@@ -12,9 +13,9 @@ export interface TypeModelSelectAggrParamsAggrs<TRecord> {
12
13
  min?: TypeEntityTableColumnNamesForAggrs<TRecord> | Array<TypeEntityTableColumnNamesForAggrs<TRecord>>;
13
14
  }
14
15
  export type TypeEntityTableColumnNamesForAggrs<Entity> = keyof TypeEntityTableColumnsForAggrs<Entity>;
15
- export type TypeEntityTableColumnsForAggrs<Entity> = Omit<{
16
+ export type TypeEntityTableColumnsForAggrs<Entity> = OmitNever<Omit<{
16
17
  [K in keyof Entity as Entity[K] extends number | undefined ? K : never]: Entity[K];
17
- }, 'id' | 'iid'>;
18
+ }, 'id' | 'iid'>>;
18
19
  export interface IBuildModelSelectAggrParams<TRecord, Model extends BeanModelMeta | undefined = undefined, TableNames = undefined, ColumnNames = keyof TRecord, Columns extends {} | undefined = undefined> extends IBuildModelSelectAggrParamsBasic<TRecord, Model, TableNames, ColumnNames, Columns> {
19
20
  }
20
21
  export interface IBuildModelSelectAggrParamsBasic<TRecord, _Model extends BeanModelMeta | undefined = undefined, TableNames = undefined, ColumnNames = keyof TRecord, Columns extends {} | undefined = undefined> {
@@ -43,7 +43,7 @@ export type TypeUtilGetRelationModelOptions<Relation> = TypeUtilGetModelOptions<
43
43
  export type TypeUtilGetRelationEntity<Relation> = TypeUtilGetModelEntity<TypeUtilGetRelationModel<Relation>>;
44
44
  export type TypeUtilGetRelationEntityMeta<Relation> = TypeUtilGetModelEntityMeta<TypeUtilGetRelationModel<Relation>>;
45
45
  export type TypeUtilGetRelationOptions<Relation> = Relation extends {
46
- options?: infer OPTIONS extends {};
46
+ options?: infer OPTIONS;
47
47
  } ? OPTIONS : undefined;
48
48
  export type TypeUtilGetRelationOptionsAutoload<Relation> = Relation extends {
49
49
  options?: {
@@ -69,32 +69,36 @@ export type TypeUtilGetModelOptions<Model extends BeanModelMeta | undefined> = M
69
69
  export type TypeUtilGetModelEntity<Model extends BeanModelMeta | undefined> = Model extends BeanModelMeta ? Model[TypeSymbolKeyEntity] : undefined;
70
70
  export type TypeUtilGetModelEntityMeta<Model extends BeanModelMeta | undefined> = Model extends BeanModelMeta ? Model[TypeSymbolKeyEntityMeta] : undefined;
71
71
  export type TypeUtilGetModelOnionName<Model extends BeanModelMeta | undefined> = Model extends BeanModelMeta ? Model['$onionName'] : undefined;
72
- export type TypeUtilGetRelationEntityByType<Relation, IncludeWrapper extends {} | undefined> = TypeUtilGetEntityByType<TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetAggrsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetGroupsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>>;
73
- export type TypeUtilGetEntityByType<TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined, Columns, Aggrs, Groups> = TYPE extends 'hasMany' | 'belongsToMany' ? Groups extends string | string[] ? Array<TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns, Aggrs, Groups>> : (Aggrs extends {} ? TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns, Aggrs> | undefined : Array<TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns>>) : TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns> | undefined;
72
+ export type TypeUtilGetRelationEntityByType<Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetEntityByType<TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper, TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetAggrsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>, TypeUtilGetGroupsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>>;
73
+ export type TypeUtilGetEntityByType<TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown, Columns, Aggrs, Groups> = TYPE extends 'hasMany' | 'belongsToMany' ? Groups extends string | string[] ? Array<TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns, Aggrs, Groups>> : (Aggrs extends {} ? TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns, Aggrs> | undefined : Array<TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns>>) : TypeModelRelationResult<TRecord, TModel, IncludeWrapper, Columns> | undefined;
74
74
  export type TypeUtilGetParamsAggrs<TParams> = TParams extends {
75
- aggrs?: infer Aggrs extends {};
75
+ aggrs?: infer Aggrs;
76
76
  } ? Aggrs : undefined;
77
77
  export type TypeUtilGetParamsGroups<TParams> = TParams extends {
78
- groups?: infer Groups extends string | string[];
78
+ groups?: infer Groups;
79
79
  } ? Groups : undefined;
80
80
  export type TypeUtilGetParamsInlcude<TParams> = TParams extends {
81
- include?: infer INCLUDE extends {};
81
+ include?: infer INCLUDE;
82
82
  } ? INCLUDE : undefined;
83
83
  export type TypeUtilGetParamsWith<TParams> = TParams extends {
84
- with?: infer WITH extends {};
84
+ with?: infer WITH;
85
85
  } ? WITH : undefined;
86
86
  export type TypeUtilGetParamsColumns<TParams> = TParams extends {
87
87
  columns?: infer COLUMNS;
88
88
  } ? COLUMNS : undefined;
89
89
  export type TypeUtilPrepareColumns<TColumns> = TColumns extends '*' | ['*'] ? undefined : TColumns extends string[] ? TColumns[number] : TColumns extends string ? TColumns : undefined;
90
90
  export type TypeUtilEntitySelector<TRecord, TColumns> = [TColumns] extends [keyof TRecord] ? Pick<TRecord, TColumns> : TRecord;
91
- export type TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined> = TypeUtilGetParamsColumns<IncludeWrapper> extends string | string[] ? TypeUtilGetParamsColumns<IncludeWrapper> : TypeUtilGetRelationOptionsColumns<Relation>;
91
+ export type TypeUtilEntityOmit<TRecord, TColumns> = [TColumns] extends [keyof TRecord] ? Omit<TRecord, TColumns> : TRecord;
92
+ export type TypeUtilEntityPartial<TRecord, TColumns> = [
93
+ TColumns
94
+ ] extends [keyof TRecord] ? Partial<Pick<TRecord, TColumns>> & Omit<TRecord, TColumns> : TRecord;
95
+ export type TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetParamsColumns<IncludeWrapper> extends string | string[] ? TypeUtilGetParamsColumns<IncludeWrapper> : TypeUtilGetRelationOptionsColumns<Relation>;
92
96
  export type TypeModelRelationResult<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TColumns = undefined, Aggrs = undefined, Groups = undefined> = Groups extends string | string[] ? TypeModelGroupRelationResultGroups<TRecord, Aggrs, Groups, TColumns> : Aggrs extends {} ? TypeModelAggrRelationResultAggrs<Aggrs> : TypeModelRelationResult_Normal<TRecord, TModel, TOptionsRelation, TColumns>;
93
97
  export type TypeModelRelationResult_Normal<TRecord, TModel extends BeanModelMeta | undefined, TOptionsRelation, TColumns = undefined> = TypeUtilEntitySelector<TRecord, TypeUtilPrepareColumns<TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>>> & (TModel extends BeanModelMeta ? (OmitNever<TypeModelRelationResultMergeInclude<TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>> & OmitNever<TypeModelRelationResultMergeWith<TypeUtilGetParamsWith<TOptionsRelation>>>) : {});
94
- export type TypeModelRelationResultMergeInclude<TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined> = {
95
- [RelationName in (keyof TModelOptions['relations'])]: TInclude[RelationName] extends {} | boolean ? TypeModelRelationResultMergeIncludeWrapper<TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeModelRelationResultMergeAutoload<TModelOptions['relations'][RelationName]>;
98
+ export type TypeModelRelationResultMergeInclude<TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined | unknown> = {
99
+ [RelationName in (keyof TModelOptions['relations'])]: TInclude extends {} ? TInclude[RelationName] extends {} | boolean ? TypeModelRelationResultMergeIncludeWrapper<TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeModelRelationResultMergeAutoload<TModelOptions['relations'][RelationName]> : TypeModelRelationResultMergeAutoload<TModelOptions['relations'][RelationName]>;
96
100
  };
97
- export type TypeModelRelationResultMergeWith<TWith extends {} | undefined> = TWith extends {} ? {
101
+ export type TypeModelRelationResultMergeWith<TWith extends {} | undefined | unknown> = TWith extends {} ? {
98
102
  [RelationName in (keyof TWith)]: TypeModelRelationResultMergeWithRelation<TWith[RelationName]>;
99
103
  } : {};
100
104
  export type TypeModelRelationResultMergeAutoload<Relation> = TypeUtilGetRelationOptionsAutoload<Relation> extends true ? TypeUtilGetRelationEntityByType<Relation, undefined> : never;
@@ -10,7 +10,7 @@ export type TypeRecordAggrsValues<TRecord extends Record<string, any>> = TRecord
10
10
  export type TypeRecordAggrsValuesToObject<AggrValues extends string> = {
11
11
  [K in AggrValues]: BigNumber | undefined;
12
12
  };
13
- export type TypeUtilGetAggrsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined> = TypeUtilGetRelationOptionsAggrs<Relation> extends {} ? TypeUtilGetParamsAggrs<IncludeWrapper> extends {} ? TypeUtilGetAggrsFromRelationAndIncludeWrapper_Mixed<TypeUtilGetRelationOptionsAggrs<Relation>, TypeUtilGetParamsAggrs<IncludeWrapper>> : TypeUtilGetRelationOptionsAggrs<Relation> : undefined;
13
+ export type TypeUtilGetAggrsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetRelationOptionsAggrs<Relation> extends {} ? TypeUtilGetParamsAggrs<IncludeWrapper> extends {} ? TypeUtilGetAggrsFromRelationAndIncludeWrapper_Mixed<TypeUtilGetRelationOptionsAggrs<Relation>, TypeUtilGetParamsAggrs<IncludeWrapper>> : TypeUtilGetRelationOptionsAggrs<Relation> : undefined;
14
14
  export type TypeUtilGetAggrsFromRelationAndIncludeWrapper_Mixed<RelationAggrs extends {}, IncludeWrapperAggrs extends {}> = {
15
15
  [K in keyof RelationAggrs]: K extends string ? K extends keyof IncludeWrapperAggrs ? IncludeWrapperAggrs[K] : RelationAggrs[K] : undefined;
16
16
  };
@@ -8,25 +8,25 @@ 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>> = {}> {
11
+ export interface IModelRelationHasOneDynamic<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
12
12
  type?: 'hasOne';
13
13
  model?: TypeModelClassLike<MODEL>;
14
14
  key?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
15
15
  options?: OPTIONS;
16
16
  }
17
- export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> = {}> {
17
+ export interface IModelRelationBelongsToDynamic<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL>> | undefined = undefined> {
18
18
  type?: 'belongsTo';
19
19
  model?: TypeModelClassLike<MODEL>;
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> = {}, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
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> {
24
24
  type?: 'hasMany';
25
25
  model?: TypeModelClassLike<MODEL>;
26
26
  key?: keyof TypeModelOfModelLike<MODEL>[TypeSymbolKeyEntity];
27
27
  options?: OPTIONS;
28
28
  }
29
- export interface IModelRelationBelongsToManyDynamic<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group> = {}, ModelJoins extends TypeModelsClassLikeGeneral | undefined = undefined, Group extends boolean | undefined = undefined> {
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> {
30
30
  type?: 'belongsToMany';
31
31
  modelMiddle?: TypeModelClassLike<MODELMiddle>;
32
32
  model?: TypeModelClassLike<MODEL>;
@@ -18,4 +18,4 @@ export type TypeModelSelectGroupParamsColumns<TRecord, ColumnNames extends TypeM
18
18
  export type TypeModelAggrRelationResultAggrsToNumberType<Columns> = {
19
19
  [K in keyof Columns]: number | string;
20
20
  };
21
- export type TypeUtilGetGroupsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined> = TypeUtilGetParamsGroups<IncludeWrapper> extends string | string[] ? TypeUtilGetParamsGroups<IncludeWrapper> : TypeUtilGetRelationOptionsGroups<Relation>;
21
+ export type TypeUtilGetGroupsFromRelationAndIncludeWrapper<Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilGetParamsGroups<IncludeWrapper> extends string | string[] ? TypeUtilGetParamsGroups<IncludeWrapper> : TypeUtilGetRelationOptionsGroups<Relation>;
@@ -3,6 +3,7 @@ import type { BeanModelMeta } from '../bean/bean.model/bean.model_meta.ts';
3
3
  import type { IDecoratorModelOptions } from './onion/model.ts';
4
4
  import type { TypeUtilGetModelOptions, TypeUtilGetParamsInlcude, TypeUtilGetParamsWith, TypeUtilGetRelationEntity, TypeUtilGetRelationModel, TypeUtilGetRelationOptions, TypeUtilGetRelationOptionsAutoload, TypeUtilGetRelationType } from './relations.ts';
5
5
  import type { IModelRelationOptionsMetaWrapper } from './relationsDef.ts';
6
+ import type { TableIdentity } from './tableIdentity.ts';
6
7
  export type TypeModelMutateParamsInclude<MODEL extends BeanModelMeta | undefined> = TypeModelMutateParamsIncludeByModelOptions<TypeUtilGetModelOptions<MODEL>>;
7
8
  export type TypeModelMutateParamsIncludeByModelOptions<ModelOptions extends IDecoratorModelOptions | undefined> = ModelOptions extends IDecoratorModelOptions ? {
8
9
  [relationName in keyof ModelOptions['relations']]?: TypeModelMutateParamsRelationOptions<ModelOptions['relations'][relationName]>;
@@ -11,14 +12,17 @@ export type TypeModelMutateParamsRelationOptions<Relation> = boolean | (IModelRe
11
12
  include?: TypeModelMutateParamsInclude<TypeUtilGetRelationModel<Relation>>;
12
13
  with?: Record<string, unknown>;
13
14
  });
14
- export type TypeModelMutateRelationResultMergeInclude<TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined> = {
15
- [RelationName in (keyof TModelOptions['relations'])]: TInclude[RelationName] extends {} | boolean ? TypeModelMutateRelationResultMergeIncludeWrapper<TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeModelMutateRelationResultMergeAutoload<TModelOptions['relations'][RelationName]>;
15
+ export type TypeModelMutateRelationResultMergeInclude<TModelOptions extends IDecoratorModelOptions, TInclude extends {} | undefined | unknown> = {
16
+ [RelationName in (keyof TModelOptions['relations'])]: TInclude extends {} ? TInclude[RelationName] extends {} | boolean ? TypeModelMutateRelationResultMergeIncludeWrapper<TModelOptions['relations'][RelationName], TInclude[RelationName]> : TypeModelMutateRelationResultMergeAutoload<TModelOptions['relations'][RelationName]> : TypeModelMutateRelationResultMergeAutoload<TModelOptions['relations'][RelationName]>;
16
17
  };
17
18
  export type TypeModelMutateRelationResultMergeAutoload<Relation> = TypeUtilGetRelationOptionsAutoload<Relation> extends true ? TypeUtilMutateGetRelationEntityByType<Relation, undefined> : never;
18
19
  export type TypeModelMutateRelationResultMergeIncludeWrapper<Relation, IncludeWrapper> = IncludeWrapper extends false ? never : IncludeWrapper extends true ? TypeUtilMutateGetRelationEntityByType<Relation, undefined> : IncludeWrapper extends {} ? TypeUtilMutateGetRelationEntityByType<Relation, IncludeWrapper> : never;
19
- export type TypeUtilMutateGetRelationEntityByType<Relation, IncludeWrapper extends {} | undefined> = TypeUtilMutateGetEntityByType<TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper>;
20
- export type TypeUtilMutateGetEntityByType<TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined> = TYPE extends 'hasMany' | 'belongsToMany' ? Array<TypeModelMutateRelationData<TRecord, TModel, IncludeWrapper>> | undefined : TypeModelMutateRelationData<TRecord, TModel, IncludeWrapper> | undefined;
21
- export type TypeModelMutateRelationResultMergeWith<TWith extends {} | undefined> = TWith extends {} ? {
20
+ export type TypeUtilMutateGetRelationEntityByType<Relation, IncludeWrapper extends {} | undefined | unknown> = TypeUtilMutateGetEntityByType<TypeUtilGetRelationEntity<Relation>, TypeUtilGetRelationType<Relation>, TypeUtilGetRelationModel<Relation>, IncludeWrapper>;
21
+ export type TypeUtilMutateGetEntityByType<TRecord, TYPE, TModel extends BeanModelMeta | undefined, IncludeWrapper extends {} | undefined | unknown> = TYPE extends 'belongsTo' ? never : TYPE extends 'belongsToMany' ? Array<{
22
+ id: TableIdentity;
23
+ deleted?: boolean;
24
+ }> | undefined : TYPE extends 'hasMany' ? Array<TypeModelMutateRelationData<TRecord, TModel, IncludeWrapper>> | undefined : TypeModelMutateRelationData<TRecord, TModel, IncludeWrapper> | undefined;
25
+ export type TypeModelMutateRelationResultMergeWith<TWith extends {} | undefined | unknown> = TWith extends {} ? {
22
26
  [RelationName in (keyof TWith)]: TypeModelMutateRelationResultMergeWithRelation<TWith[RelationName]>;
23
27
  } : {};
24
28
  export type TypeModelMutateRelationResultMergeWithRelation<WithRelation> = WithRelation extends false ? never : WithRelation extends true ? never : WithRelation extends {} ? TypeUtilMutateGetRelationEntityByType<WithRelation, TypeUtilGetRelationOptions<WithRelation>> : never;
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.40",
4
+ "version": "5.0.42",
5
5
  "title": "a-orm",
6
6
  "vonaModule": {
7
7
  "capabilities": {