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 +35 -8
- package/dist/lib/dto/dtoCreate.d.ts +1 -1
- package/dist/lib/dto/dtoGet.d.ts +1 -1
- package/dist/lib/dto/dtoGroup.d.ts +1 -1
- package/dist/lib/dto/dtoMutate.d.ts +2 -2
- package/dist/lib/dto/dtoUpdate.d.ts +1 -1
- package/dist/lib/relationsDynamic.d.ts +4 -4
- package/dist/types/dto/dtoMutate.d.ts +40 -4
- package/dist/types/modelAggr.d.ts +3 -2
- package/dist/types/relations.d.ts +15 -11
- package/dist/types/relationsAggr.d.ts +1 -1
- package/dist/types/relationsDefDynamic.d.ts +4 -4
- package/dist/types/relationsGroup.d.ts +1 -1
- package/dist/types/relationsMutate.d.ts +9 -5
- package/package.json +1 -1
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
|
-
|
|
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 =
|
|
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 === '
|
|
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
|
-
|
|
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)
|
|
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))
|
|
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,
|
|
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
|
|
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<
|
|
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>>;
|
package/dist/lib/dto/dtoGet.d.ts
CHANGED
|
@@ -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<
|
|
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]
|
|
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<
|
|
8
|
-
export declare function _DtoMutate_raw<
|
|
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<
|
|
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
|
|
6
|
-
declare function belongsTo<MODELSelf extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsOneDynamic<TypeModelOfModelLike<MODEL
|
|
7
|
-
declare function hasMany<MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, ModelJoins, Group
|
|
8
|
-
declare function belongsToMany<MODELMiddle extends BeanModelMeta | (keyof IModelClassRecord), MODEL extends BeanModelMeta | (keyof IModelClassRecord), OPTIONS extends IModelRelationOptionsManyDynamic<TypeModelOfModelLike<MODEL>, 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 {
|
|
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> =
|
|
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
|
|
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
|
|
75
|
+
aggrs?: infer Aggrs;
|
|
76
76
|
} ? Aggrs : undefined;
|
|
77
77
|
export type TypeUtilGetParamsGroups<TParams> = TParams extends {
|
|
78
|
-
groups?: infer Groups
|
|
78
|
+
groups?: infer Groups;
|
|
79
79
|
} ? Groups : undefined;
|
|
80
80
|
export type TypeUtilGetParamsInlcude<TParams> = TParams extends {
|
|
81
|
-
include?: infer INCLUDE
|
|
81
|
+
include?: infer INCLUDE;
|
|
82
82
|
} ? INCLUDE : undefined;
|
|
83
83
|
export type TypeUtilGetParamsWith<TParams> = TParams extends {
|
|
84
|
-
with?: infer WITH
|
|
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
|
|
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> =
|
|
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> =
|
|
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 '
|
|
21
|
-
|
|
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;
|