vona-module-a-orm 5.1.8 → 5.1.13
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/LICENSE +1 -1
- package/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/dist/.metadata/index.d.ts +3 -2
- package/dist/.metadata/index.d.ts.map +1 -1
- package/dist/bean/bean.database.d.ts +2 -2
- package/dist/bean/bean.database.d.ts.map +1 -1
- package/dist/bean/bean.model.d.ts +1 -1
- package/dist/bean/bean.model.d.ts.map +1 -1
- package/dist/common/buildWhere.d.ts.map +1 -1
- package/dist/common/utils.d.ts +1 -1
- package/dist/common/utils.d.ts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1399 -1393
- package/dist/index.js.map +1 -1
- package/dist/lib/bean.model/bean.model_cache.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_crud.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_crud_inner.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_crud_table.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_knex.d.ts.map +1 -0
- package/dist/{bean → lib}/bean.model/bean.model_meta.d.ts +2 -2
- package/dist/lib/bean.model/bean.model_meta.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_utils.d.ts.map +1 -0
- package/dist/lib/bean.model/bean.model_view.d.ts.map +1 -0
- package/dist/lib/bean.modelBase.d.ts.map +1 -0
- package/dist/lib/dto/dto.d.ts +2 -0
- package/dist/lib/dto/dto.d.ts.map +1 -1
- package/dist/lib/dto/dtoAggregate.d.ts +1 -1
- package/dist/lib/dto/dtoAggregate.d.ts.map +1 -1
- package/dist/lib/dto/dtoCreate.d.ts +1 -1
- package/dist/lib/dto/dtoCreate.d.ts.map +1 -1
- package/dist/lib/dto/dtoGet.d.ts +1 -1
- package/dist/lib/dto/dtoGet.d.ts.map +1 -1
- package/dist/lib/dto/dtoGroup.d.ts +1 -1
- package/dist/lib/dto/dtoGroup.d.ts.map +1 -1
- package/dist/lib/dto/dtoMutate.d.ts +1 -1
- package/dist/lib/dto/dtoMutate.d.ts.map +1 -1
- package/dist/lib/dto/dtoSelectAndCount.d.ts +1 -1
- package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -1
- package/dist/lib/dto/dtoUpdate.d.ts +1 -1
- package/dist/lib/dto/dtoUpdate.d.ts.map +1 -1
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -1
- package/dist/lib/modelCacheBase.d.ts +3 -3
- package/dist/lib/modelCacheBase.d.ts.map +1 -1
- package/dist/lib/relations.d.ts +1 -1
- package/dist/lib/relations.d.ts.map +1 -1
- package/dist/lib/relationsDynamic.d.ts +1 -1
- package/dist/lib/relationsDynamic.d.ts.map +1 -1
- package/dist/lib/relationsMutate.d.ts +1 -1
- package/dist/lib/relationsMutate.d.ts.map +1 -1
- package/dist/lib/relationsStatic.d.ts +1 -1
- package/dist/lib/relationsStatic.d.ts.map +1 -1
- package/dist/service/cacheEntity_.d.ts +1 -1
- package/dist/service/cacheEntity_.d.ts.map +1 -1
- package/dist/service/cacheQuery_.d.ts +1 -1
- package/dist/service/cacheQuery_.d.ts.map +1 -1
- package/dist/service/database.d.ts +2 -2
- package/dist/service/database.d.ts.map +1 -1
- package/dist/{bean/bean.databaseDialectBase.d.ts → service/databaseDialectBase_.d.ts} +2 -2
- package/dist/service/databaseDialectBase_.d.ts.map +1 -0
- package/dist/service/db_.d.ts +2 -2
- package/dist/service/db_.d.ts.map +1 -1
- package/dist/service/relations_.d.ts +1 -1
- package/dist/service/relations_.d.ts.map +1 -1
- package/dist/types/database.d.ts +0 -4
- package/dist/types/database.d.ts.map +1 -1
- package/dist/types/dto/dtoGet.d.ts +3 -1
- package/dist/types/dto/dtoGet.d.ts.map +1 -1
- package/dist/types/dto/dtoMutate.d.ts +3 -2
- package/dist/types/dto/dtoMutate.d.ts.map +1 -1
- package/dist/types/dto/dtoSelectAndCount.d.ts +1 -1
- package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -1
- package/dist/types/model.d.ts +1 -1
- package/dist/types/model.d.ts.map +1 -1
- package/dist/types/modelAggr.d.ts +1 -1
- package/dist/types/modelAggr.d.ts.map +1 -1
- package/dist/types/modelCount.d.ts +1 -1
- package/dist/types/modelCount.d.ts.map +1 -1
- package/dist/types/modelGeneral.d.ts +3 -1
- package/dist/types/modelGeneral.d.ts.map +1 -1
- package/dist/types/modelGroup.d.ts +1 -1
- package/dist/types/modelGroup.d.ts.map +1 -1
- package/dist/types/modelIncrement.d.ts +1 -1
- package/dist/types/modelIncrement.d.ts.map +1 -1
- package/dist/types/modelWhere.d.ts +3 -3
- package/dist/types/modelWhere.d.ts.map +1 -1
- package/dist/types/relations.d.ts +1 -1
- package/dist/types/relations.d.ts.map +1 -1
- package/dist/types/relationsColumns.d.ts +1 -1
- package/dist/types/relationsColumns.d.ts.map +1 -1
- package/dist/types/relationsDef.d.ts +1 -1
- package/dist/types/relationsDef.d.ts.map +1 -1
- package/dist/types/relationsDefDynamic.d.ts +1 -1
- package/dist/types/relationsDefDynamic.d.ts.map +1 -1
- package/dist/types/relationsDefMutate.d.ts +1 -1
- package/dist/types/relationsDefMutate.d.ts.map +1 -1
- package/dist/types/relationsMutate.d.ts +1 -1
- package/dist/types/relationsMutate.d.ts.map +1 -1
- package/dist/types/relationsTables.d.ts +1 -1
- package/dist/types/relationsTables.d.ts.map +1 -1
- package/package.json +11 -8
- package/src/.metadata/index.ts +4 -3
- package/src/bean/bean.database.ts +3 -3
- package/src/bean/bean.model.ts +1 -1
- package/src/bean/schedule.softDeletionPrune.ts +1 -1
- package/src/common/buildWhere.ts +8 -9
- package/src/common/utils.ts +1 -1
- package/src/index.ts +1 -1
- package/src/{bean → lib}/bean.model/bean.model_cache.ts +15 -9
- package/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
- package/src/{bean → lib}/bean.modelBase.ts +0 -5
- package/src/lib/dto/dto.ts +2 -0
- package/src/lib/dto/dtoAggregate.ts +1 -1
- package/src/lib/dto/dtoCreate.ts +1 -1
- package/src/lib/dto/dtoGet.ts +3 -3
- package/src/lib/dto/dtoGroup.ts +1 -1
- package/src/lib/dto/dtoMutate.ts +2 -2
- package/src/lib/dto/dtoSelectAndCount.ts +1 -1
- package/src/lib/dto/dtoUpdate.ts +1 -1
- package/src/lib/index.ts +1 -0
- package/src/lib/modelCacheBase.ts +3 -3
- package/src/lib/relations.ts +1 -1
- package/src/lib/relationsDynamic.ts +1 -1
- package/src/lib/relationsMutate.ts +1 -1
- package/src/lib/relationsStatic.ts +1 -1
- package/src/service/cacheEntity_.ts +1 -1
- package/src/service/cacheQuery_.ts +1 -1
- package/src/service/database.ts +2 -2
- package/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
- package/src/service/db_.ts +2 -2
- package/src/service/relations_.ts +3 -3
- package/src/types/database.ts +0 -5
- package/src/types/dto/dtoGet.ts +4 -1
- package/src/types/dto/dtoMutate.ts +3 -2
- package/src/types/dto/dtoSelectAndCount.ts +1 -1
- package/src/types/model.ts +1 -1
- package/src/types/modelAggr.ts +1 -1
- package/src/types/modelCount.ts +1 -1
- package/src/types/modelGeneral.ts +4 -1
- package/src/types/modelGroup.ts +1 -1
- package/src/types/modelIncrement.ts +1 -1
- package/src/types/modelWhere.ts +2 -2
- package/src/types/relations.ts +1 -1
- package/src/types/relationsColumns.ts +1 -1
- package/src/types/relationsDef.ts +1 -1
- package/src/types/relationsDefDynamic.ts +1 -1
- package/src/types/relationsDefMutate.ts +1 -1
- package/src/types/relationsMutate.ts +1 -1
- package/src/types/relationsTables.ts +1 -1
- package/dist/bean/bean.databaseDialectBase.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_cache.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_crud.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_knex.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_meta.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_utils.d.ts.map +0 -1
- package/dist/bean/bean.model/bean.model_view.d.ts.map +0 -1
- package/dist/bean/bean.modelBase.d.ts.map +0 -1
- /package/dist/{bean → lib}/bean.model/bean.model_cache.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_crud.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_crud_inner.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_crud_table.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_knex.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_utils.d.ts +0 -0
- /package/dist/{bean → lib}/bean.model/bean.model_view.d.ts +0 -0
- /package/dist/{bean → lib}/bean.modelBase.d.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
- /package/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
package/src/common/buildWhere.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
2
|
|
|
3
|
-
import { isNil } from '@cabloy/utils';
|
|
4
3
|
import { cast } from 'vona';
|
|
5
4
|
|
|
6
5
|
import type { ServiceDb } from '../service/db_.ts';
|
|
@@ -31,8 +30,8 @@ function _buildWhereInner<TRecord>(
|
|
|
31
30
|
wheres: TypeModelWhere<TRecord>,
|
|
32
31
|
column?: keyof TRecord,
|
|
33
32
|
) {
|
|
34
|
-
//
|
|
35
|
-
if (wheres === Op.
|
|
33
|
+
// omit
|
|
34
|
+
if (wheres === Op.omit) {
|
|
36
35
|
return;
|
|
37
36
|
}
|
|
38
37
|
// raw
|
|
@@ -73,8 +72,8 @@ function _buildWhereOpJoint<TRecord>(
|
|
|
73
72
|
wheres: TypeModelWhere<TRecord>,
|
|
74
73
|
op: TypeOpsJoint,
|
|
75
74
|
) {
|
|
76
|
-
//
|
|
77
|
-
if (wheres === Op.
|
|
75
|
+
// omit
|
|
76
|
+
if (wheres === Op.omit) {
|
|
78
77
|
return;
|
|
79
78
|
}
|
|
80
79
|
// and/or
|
|
@@ -127,8 +126,8 @@ function _buildWhereColumn<TRecord>(
|
|
|
127
126
|
| TypeModelWhereFieldAll<TRecord, TRecord[keyof TRecord]>,
|
|
128
127
|
op?: TypeOpsNormal,
|
|
129
128
|
) {
|
|
130
|
-
//
|
|
131
|
-
if (value === Op.
|
|
129
|
+
// omit condition
|
|
130
|
+
if (value === Op.omit) {
|
|
132
131
|
return;
|
|
133
132
|
}
|
|
134
133
|
// raw
|
|
@@ -136,8 +135,8 @@ function _buildWhereColumn<TRecord>(
|
|
|
136
135
|
_buildWhereColumnOpNormal(having, db, builder, column, value, op ?? Op.eq);
|
|
137
136
|
return;
|
|
138
137
|
}
|
|
139
|
-
// null
|
|
140
|
-
if (
|
|
138
|
+
// null
|
|
139
|
+
if (value === null) {
|
|
141
140
|
_buildWhereColumnOpNormal(having, db, builder, column, value, op ?? Op.is);
|
|
142
141
|
return;
|
|
143
142
|
}
|
package/src/common/utils.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Constructable } from 'vona';
|
|
|
3
3
|
import { appResource, beanFullNameFromOnionName } from 'vona';
|
|
4
4
|
import { prepareClassType } from 'vona-module-a-openapiutils';
|
|
5
5
|
|
|
6
|
-
import type { BeanModelMeta } from '../
|
|
6
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
7
7
|
import type { TypeModelColumn, TypeModelColumns } from '../types/modelWhere.ts';
|
|
8
8
|
import type { IDecoratorModelOptions, IModelClassRecord } from '../types/onion/model.ts';
|
|
9
9
|
|
package/src/index.ts
CHANGED
|
@@ -3,7 +3,7 @@ import 'bignumber.js';
|
|
|
3
3
|
export * from './.metadata/index.ts';
|
|
4
4
|
|
|
5
5
|
export * from './.metadata/locales.ts';
|
|
6
|
-
export * from './
|
|
6
|
+
export * from './lib/bean.model/bean.model_meta.ts';
|
|
7
7
|
export * from './common/index.ts';
|
|
8
8
|
export * from './extend/index.ts';
|
|
9
9
|
export * from './lib/index.ts';
|
|
@@ -5,6 +5,7 @@ import { parseFirstWord, toLowerCaseFirstChar } from '@cabloy/word-utils';
|
|
|
5
5
|
import BigNumber from 'bignumber.js';
|
|
6
6
|
import { cast, deepExtend, disposeInstance } from 'vona';
|
|
7
7
|
|
|
8
|
+
import type { TypeQueueDoubleDeleteJobData } from '../../bean/queue.doubleDelete.ts';
|
|
8
9
|
import type { ServiceDb } from '../../service/db_.ts';
|
|
9
10
|
import type {
|
|
10
11
|
IDatabaseClientRecord,
|
|
@@ -31,7 +32,6 @@ import type {
|
|
|
31
32
|
TypeModelsClassLikeGeneral,
|
|
32
33
|
TypeModelWhere,
|
|
33
34
|
} from '../../types/index.ts';
|
|
34
|
-
import type { TypeQueueDoubleDeleteJobData } from '../queue.doubleDelete.ts';
|
|
35
35
|
|
|
36
36
|
import { getTargetColumnName } from '../../common/utils.ts';
|
|
37
37
|
import { getCacheModelsClear } from '../../lib/const.ts';
|
|
@@ -860,7 +860,7 @@ export class BeanModelCache<TRecord extends {} = {}> extends BeanModelCrud<TReco
|
|
|
860
860
|
if (!fieldName) throw new Error(`invalid magic method: ${prop}`);
|
|
861
861
|
return (fieldValue: any, data: any, options?: any) => {
|
|
862
862
|
const where = __combineMagicWhere(fieldName, op!, fieldValue);
|
|
863
|
-
if (fieldName === 'id') {
|
|
863
|
+
if (fieldName === 'id' && where.id !== null) {
|
|
864
864
|
data = Object.assign({}, data, where);
|
|
865
865
|
} else {
|
|
866
866
|
options = deepExtend({}, options, { where });
|
|
@@ -879,15 +879,21 @@ export class BeanModelCache<TRecord extends {} = {}> extends BeanModelCrud<TReco
|
|
|
879
879
|
}
|
|
880
880
|
|
|
881
881
|
function __combineMagicWhere(fieldName: string, op: string, fieldValue?: any) {
|
|
882
|
+
if (fieldValue === undefined) {
|
|
883
|
+
if (op === 'eq') {
|
|
884
|
+
return {
|
|
885
|
+
[fieldName]: null,
|
|
886
|
+
};
|
|
887
|
+
}
|
|
888
|
+
throw new Error(`should specify the value for magic method: ${fieldName}/${op}`);
|
|
889
|
+
}
|
|
882
890
|
return {
|
|
883
891
|
[fieldName]:
|
|
884
|
-
|
|
885
|
-
?
|
|
886
|
-
:
|
|
887
|
-
|
|
888
|
-
|
|
889
|
-
[`_${op}_`]: fieldValue,
|
|
890
|
-
},
|
|
892
|
+
op === 'eq'
|
|
893
|
+
? fieldValue
|
|
894
|
+
: {
|
|
895
|
+
[`_${op}_`]: fieldValue,
|
|
896
|
+
},
|
|
891
897
|
};
|
|
892
898
|
}
|
|
893
899
|
|
|
@@ -15,7 +15,7 @@ import type {
|
|
|
15
15
|
TypeModelOptionsTable,
|
|
16
16
|
TypeModelRelationOptionsMetaClient,
|
|
17
17
|
} from '../../types/index.ts';
|
|
18
|
-
import type { BeanModel } from '
|
|
18
|
+
import type { BeanModel } from '../../bean/bean.model.ts';
|
|
19
19
|
|
|
20
20
|
import { getTableOrTableAlias, prepareClassModel } from '../../common/utils.ts';
|
|
21
21
|
import { SymbolKeyEntity, SymbolKeyEntityMeta, SymbolKeyModelOptions } from '../../types/index.ts';
|
package/src/lib/dto/dto.ts
CHANGED
|
@@ -3,6 +3,7 @@ import { DtoCreate } from './dtoCreate.ts';
|
|
|
3
3
|
import { DtoGet } from './dtoGet.ts';
|
|
4
4
|
import { DtoGroup } from './dtoGroup.ts';
|
|
5
5
|
import { DtoListAndCount } from './dtoListAndCount.ts';
|
|
6
|
+
import { DtoMutate } from './dtoMutate.ts';
|
|
6
7
|
import { DtoQuery } from './dtoQuery.ts';
|
|
7
8
|
import { DtoQueryPage } from './dtoQueryPage.ts';
|
|
8
9
|
import { DtoSelectAndCount } from './dtoSelectAndCount.ts';
|
|
@@ -11,6 +12,7 @@ import { DtoUpdate } from './dtoUpdate.ts';
|
|
|
11
12
|
export const $Dto = {
|
|
12
13
|
create: DtoCreate,
|
|
13
14
|
update: DtoUpdate,
|
|
15
|
+
mutate: DtoMutate,
|
|
14
16
|
get: DtoGet,
|
|
15
17
|
aggregate: DtoAggregate,
|
|
16
18
|
group: DtoGroup,
|
|
@@ -4,7 +4,7 @@ import { ensureArray } from '@cabloy/utils';
|
|
|
4
4
|
import { Api, v } from 'vona-module-a-openapiutils';
|
|
5
5
|
import z from 'zod';
|
|
6
6
|
|
|
7
|
-
import type { BeanModelMeta } from '
|
|
7
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
8
8
|
import type { TypeDtoAggrResult } from '../../types/dto/dtoAggregate.ts';
|
|
9
9
|
import type { TypeModelSelectAggrParamsAggrs } from '../../types/modelAggr.ts';
|
|
10
10
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
package/src/lib/dto/dtoCreate.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable } from 'vona';
|
|
2
2
|
|
|
3
|
-
import type { BeanModelMeta } from '
|
|
3
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
4
4
|
import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
|
|
5
5
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
6
|
|
package/src/lib/dto/dtoGet.ts
CHANGED
|
@@ -12,12 +12,12 @@ import {
|
|
|
12
12
|
} from 'vona-module-a-openapiutils';
|
|
13
13
|
import z from 'zod';
|
|
14
14
|
|
|
15
|
-
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
16
15
|
import type { IDtoGetParams, TypeDtoGetResult } from '../../types/dto/dtoGet.ts';
|
|
17
16
|
import type { TypeDtoMutateType } from '../../types/dto/dtoMutate.ts';
|
|
18
17
|
import type { IModelRelationIncludeWrapper } from '../../types/model.ts';
|
|
19
18
|
import type { IDecoratorModelOptions, IModelClassRecord } from '../../types/onion/model.ts';
|
|
20
19
|
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
20
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
21
21
|
|
|
22
22
|
import {
|
|
23
23
|
getClassEntityFromClassModel,
|
|
@@ -53,7 +53,7 @@ function _DtoGet_raw<
|
|
|
53
53
|
// model
|
|
54
54
|
const modelClass = prepareClassModel(modelLike);
|
|
55
55
|
// entity
|
|
56
|
-
let entityClass = getClassEntityFromClassModel(modelClass);
|
|
56
|
+
let entityClass = params?.dtoClass ?? getClassEntityFromClassModel(modelClass);
|
|
57
57
|
// columns
|
|
58
58
|
const columns = prepareColumns(params?.columns);
|
|
59
59
|
// always create a new class, no matter if columns empty
|
|
@@ -164,7 +164,7 @@ function _DtoGet_relation_handle_schemaLazy(
|
|
|
164
164
|
);
|
|
165
165
|
}
|
|
166
166
|
// dynamic
|
|
167
|
-
const entityClass = getClassEntityFromClassModel(modelTarget);
|
|
167
|
+
const entityClass = optionsReal.dtoClass ?? getClassEntityFromClassModel(modelTarget);
|
|
168
168
|
const beanFullName = appResource.getBeanFullName(entityClass);
|
|
169
169
|
const _hashkey = _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLevel);
|
|
170
170
|
const dynamicName = `${beanFullName}_${_hashkey}`;
|
package/src/lib/dto/dtoGroup.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { Constructable } from 'vona';
|
|
|
3
3
|
import { ensureArray } from '@cabloy/utils';
|
|
4
4
|
import { PickClassInner } from 'vona';
|
|
5
5
|
|
|
6
|
-
import type { BeanModelMeta } from '
|
|
6
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
7
7
|
import type { TypeDtoGroupResult } from '../../types/dto/dtoGroup.ts';
|
|
8
8
|
import type { TypeModelSelectAggrParamsAggrs } from '../../types/modelAggr.ts';
|
|
9
9
|
import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
package/src/lib/dto/dtoMutate.ts
CHANGED
|
@@ -3,7 +3,6 @@ import type { Constructable } from 'vona';
|
|
|
3
3
|
import { mutate } from 'mutate-on-copy';
|
|
4
4
|
import { $Class } from 'vona';
|
|
5
5
|
|
|
6
|
-
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
7
6
|
import type {
|
|
8
7
|
IDtoMutateParams,
|
|
9
8
|
TypeDtoMutateResult,
|
|
@@ -13,6 +12,7 @@ import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
|
|
13
12
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
14
13
|
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
15
14
|
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
15
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
16
16
|
|
|
17
17
|
import {
|
|
18
18
|
getClassEntityFromClassModel,
|
|
@@ -52,7 +52,7 @@ export function _DtoMutate_raw<
|
|
|
52
52
|
// model
|
|
53
53
|
const modelClass = prepareClassModel(modelLike);
|
|
54
54
|
// entity
|
|
55
|
-
let entityClass = getClassEntityFromClassModel(modelClass);
|
|
55
|
+
let entityClass = params?.dtoClass ?? getClassEntityFromClassModel(modelClass);
|
|
56
56
|
// columns
|
|
57
57
|
let columns = prepareColumns(params?.columns);
|
|
58
58
|
if (columns) {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable } from 'vona';
|
|
2
2
|
|
|
3
|
-
import type { BeanModelMeta } from '
|
|
3
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
4
4
|
import type { IDtoGetParams } from '../../types/dto/dtoGet.ts';
|
|
5
5
|
import type { TypeDtoSelectAndCountResult } from '../../types/dto/dtoSelectAndCount.ts';
|
|
6
6
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
package/src/lib/dto/dtoUpdate.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable } from 'vona';
|
|
2
2
|
|
|
3
|
-
import type { BeanModelMeta } from '
|
|
3
|
+
import type { BeanModelMeta } from '../bean.model/bean.model_meta.ts';
|
|
4
4
|
import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
|
|
5
5
|
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
6
|
|
package/src/lib/index.ts
CHANGED
|
@@ -3,6 +3,7 @@ export * from './databaseDialect.ts';
|
|
|
3
3
|
export * from './dto/index.ts';
|
|
4
4
|
export * from './entity.ts';
|
|
5
5
|
export * from './model.ts';
|
|
6
|
+
export * from './bean.modelBase.ts';
|
|
6
7
|
export * from './relations.ts';
|
|
7
8
|
export * from './relationsDynamic.ts';
|
|
8
9
|
export * from './relationsMutate.ts';
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ServiceSummerCacheBase, IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
3
|
import { BeanBase, deepExtend } from 'vona';
|
|
4
4
|
|
|
5
|
-
import type { BeanModelCache } from '
|
|
5
|
+
import type { BeanModelCache } from './bean.model/bean.model_cache.ts';
|
|
6
6
|
import type { TypeModelCacheType } from '../types/model.ts';
|
|
7
7
|
import type { ITableRecord } from '../types/onion/table.ts';
|
|
8
8
|
|
|
@@ -25,7 +25,7 @@ export class ModelCacheBase extends BeanBase {
|
|
|
25
25
|
return this.$scope.orm;
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
public getInstance(table: keyof ITableRecord):
|
|
28
|
+
public getInstance(table: keyof ITableRecord): ServiceSummerCacheBase {
|
|
29
29
|
if (this.options === false) throw new Error('cache disabled');
|
|
30
30
|
const beanFullName = this._model.$beanFullName;
|
|
31
31
|
const cacheName = this.getName(table);
|
package/src/lib/relations.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeanModelMeta } from '
|
|
1
|
+
import type { BeanModelMeta } from './bean.model/bean.model_meta.ts';
|
|
2
2
|
import type { TypeModelsClassLikeGeneral } from '../types/relations.ts';
|
|
3
3
|
import type {
|
|
4
4
|
IModelRelationOptionsManyDynamic,
|
|
@@ -2,7 +2,7 @@ import type { TableIdentity } from 'table-identity';
|
|
|
2
2
|
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
5
|
-
import type { BeanModelCache } from '../
|
|
5
|
+
import type { BeanModelCache } from '../lib/bean.model/bean.model_cache.ts';
|
|
6
6
|
import type { ITableRecord } from '../types/onion/table.ts';
|
|
7
7
|
|
|
8
8
|
import { ModelCacheBase } from '../lib/modelCacheBase.ts';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Service } from 'vona-module-a-bean';
|
|
2
2
|
|
|
3
|
-
import type { BeanModelCache } from '../
|
|
3
|
+
import type { BeanModelCache } from '../lib/bean.model/bean.model_cache.ts';
|
|
4
4
|
import type { ITableRecord } from '../types/onion/table.ts';
|
|
5
5
|
|
|
6
6
|
import { ModelCacheBase } from '../lib/modelCacheBase.ts';
|
package/src/service/database.ts
CHANGED
|
@@ -2,7 +2,7 @@ import { isNil } from '@cabloy/utils';
|
|
|
2
2
|
import { appResource, BeanBase, deepExtend } from 'vona';
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
5
|
-
import type {
|
|
5
|
+
import type { ServiceDatabaseDialectBase } from './databaseDialectBase_.ts';
|
|
6
6
|
import type { ConfigDatabaseClient } from '../types/config.ts';
|
|
7
7
|
import type {
|
|
8
8
|
IDatabaseClientDialectRecord,
|
|
@@ -61,7 +61,7 @@ export class ServiceDatabase extends BeanBase {
|
|
|
61
61
|
|
|
62
62
|
prepareClientNameSelector(
|
|
63
63
|
dbInfo: IDbInfo,
|
|
64
|
-
dialect:
|
|
64
|
+
dialect: ServiceDatabaseDialectBase | keyof IDatabaseClientDialectRecord,
|
|
65
65
|
) {
|
|
66
66
|
const dialect2 = typeof dialect === 'string' ? this.bean.database.getDialect(dialect) : dialect;
|
|
67
67
|
if (!dialect2.capabilities.level) return dbInfo.clientName;
|
|
@@ -3,7 +3,7 @@ import type { TableIdentity } from 'table-identity';
|
|
|
3
3
|
|
|
4
4
|
import { isNil, safeBoolean } from '@cabloy/utils';
|
|
5
5
|
import { BeanBase, Virtual } from 'vona';
|
|
6
|
-
import {
|
|
6
|
+
import { Service } from 'vona-module-a-bean';
|
|
7
7
|
|
|
8
8
|
import type { ITableColumn } from '../types/columns.ts';
|
|
9
9
|
import type { ConfigDatabaseClient } from '../types/config.ts';
|
|
@@ -14,9 +14,22 @@ import type {
|
|
|
14
14
|
TypeDatabaseDialectTableColumnsFn,
|
|
15
15
|
} from '../types/dialect.ts';
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
const BOOLEAN_COLUMN_TYPES = ['bit', 'bool', 'boolean'];
|
|
18
|
+
const NUMBER_COLUMN_TYPES = ['int'];
|
|
19
|
+
const TIMESTAMP_COLUMN_TYPE_PREFIXES = ['timestamp'];
|
|
20
|
+
const FLOAT_COLUMN_TYPE_PREFIXES = ['float', 'double'];
|
|
21
|
+
const INTEGER_COLUMN_TYPE_PREFIXES = [
|
|
22
|
+
'tinyint',
|
|
23
|
+
'smallint',
|
|
24
|
+
'mediumint',
|
|
25
|
+
'bigint',
|
|
26
|
+
'numeric',
|
|
27
|
+
'integer',
|
|
28
|
+
];
|
|
29
|
+
|
|
30
|
+
@Service()
|
|
18
31
|
@Virtual()
|
|
19
|
-
export class
|
|
32
|
+
export class ServiceDatabaseDialectBase extends BeanBase {
|
|
20
33
|
protected _capabilities?: IDatabaseDialectCapabilities;
|
|
21
34
|
protected _configBase?: Partial<ConfigDatabaseClient>;
|
|
22
35
|
|
|
@@ -75,11 +88,8 @@ export class BeanDatabaseDialectBase extends BeanBase {
|
|
|
75
88
|
}
|
|
76
89
|
|
|
77
90
|
coerceColumn(column: Knex.ColumnInfo): ITableColumn {
|
|
78
|
-
// result
|
|
79
91
|
const result = { type: column.type } as ITableColumn;
|
|
80
|
-
// coerce
|
|
81
92
|
result.default = this._coerceColumnValue(column.type, column.defaultValue);
|
|
82
|
-
// ok
|
|
83
93
|
return result;
|
|
84
94
|
}
|
|
85
95
|
|
|
@@ -111,22 +121,22 @@ export class BeanDatabaseDialectBase extends BeanBase {
|
|
|
111
121
|
datas: any[],
|
|
112
122
|
): Promise<[TableIdentity[], Knex.QueryBuilder]> {
|
|
113
123
|
if (datas.length === 0) return [[], builder];
|
|
114
|
-
if (isNil(datas[0].id)) {
|
|
115
|
-
let builderFirst: Knex.QueryBuilder | undefined = undefined;
|
|
116
|
-
const ids: TableIdentity[] = [];
|
|
117
|
-
for (const data of datas) {
|
|
118
|
-
const builder2 = builder.clone();
|
|
119
|
-
builder2.insert(data);
|
|
120
|
-
const items = await builder2;
|
|
121
|
-
ids.push(items[0]);
|
|
122
|
-
if (!builderFirst) builderFirst = builder2;
|
|
123
|
-
}
|
|
124
|
-
return [ids, builderFirst ?? builder];
|
|
125
|
-
} else {
|
|
124
|
+
if (!isNil(datas[0].id)) {
|
|
126
125
|
builder.insert(datas);
|
|
127
126
|
await builder;
|
|
128
127
|
return [datas.map(item => item.id), builder];
|
|
129
128
|
}
|
|
129
|
+
|
|
130
|
+
let builderFirst: Knex.QueryBuilder | undefined = undefined;
|
|
131
|
+
const ids: TableIdentity[] = [];
|
|
132
|
+
for (const data of datas) {
|
|
133
|
+
const builder2 = builder.clone();
|
|
134
|
+
builder2.insert(data);
|
|
135
|
+
const items = await builder2;
|
|
136
|
+
ids.push(items[0]);
|
|
137
|
+
if (!builderFirst) builderFirst = builder2;
|
|
138
|
+
}
|
|
139
|
+
return [ids, builderFirst ?? builder];
|
|
130
140
|
}
|
|
131
141
|
|
|
132
142
|
protected async insertAsPg(
|
|
@@ -134,41 +144,28 @@ export class BeanDatabaseDialectBase extends BeanBase {
|
|
|
134
144
|
datas: any[],
|
|
135
145
|
): Promise<[TableIdentity[], Knex.QueryBuilder]> {
|
|
136
146
|
if (datas.length === 0) return [[], builder];
|
|
137
|
-
if (isNil(datas[0].id)) {
|
|
138
|
-
builder.insert(datas).returning('id');
|
|
139
|
-
const items = await builder;
|
|
140
|
-
return [items.map(item => item.id), builder];
|
|
141
|
-
} else {
|
|
147
|
+
if (!isNil(datas[0].id)) {
|
|
142
148
|
builder.insert(datas);
|
|
143
149
|
await builder;
|
|
144
150
|
return [datas.map(item => item.id), builder];
|
|
145
151
|
}
|
|
152
|
+
|
|
153
|
+
builder.insert(datas).returning('id');
|
|
154
|
+
const items = await builder;
|
|
155
|
+
return [items.map(item => item.id), builder];
|
|
146
156
|
}
|
|
147
157
|
|
|
148
158
|
protected _coerceColumnValue(type: string, value) {
|
|
149
|
-
// null
|
|
150
159
|
if (isNil(value)) return undefined;
|
|
151
|
-
|
|
152
|
-
if (
|
|
153
|
-
if (
|
|
154
|
-
if (this._columnTypePrefixes(type, ['timestamp']) && value === 'CURRENT_TIMESTAMP')
|
|
160
|
+
if (BOOLEAN_COLUMN_TYPES.includes(type)) return safeBoolean(value);
|
|
161
|
+
if (NUMBER_COLUMN_TYPES.includes(type)) return this._safeNumber(value);
|
|
162
|
+
if (this._columnTypePrefixes(type, TIMESTAMP_COLUMN_TYPE_PREFIXES) && value === 'CURRENT_TIMESTAMP') {
|
|
155
163
|
return undefined; // new Date();
|
|
156
|
-
if (this._columnTypePrefixes(type, ['float', 'double'])) return this._safeNumber(value);
|
|
157
|
-
if (
|
|
158
|
-
this._columnTypePrefixes(type, [
|
|
159
|
-
'tinyint',
|
|
160
|
-
'smallint',
|
|
161
|
-
'mediumint',
|
|
162
|
-
'bigint',
|
|
163
|
-
'numeric',
|
|
164
|
-
'integer',
|
|
165
|
-
])
|
|
166
|
-
) {
|
|
167
|
-
return this._safeNumber(value);
|
|
168
164
|
}
|
|
165
|
+
if (this._columnTypePrefixes(type, FLOAT_COLUMN_TYPE_PREFIXES)) return this._safeNumber(value);
|
|
166
|
+
if (this._columnTypePrefixes(type, INTEGER_COLUMN_TYPE_PREFIXES)) return this._safeNumber(value);
|
|
169
167
|
// pg: NULL::character varying
|
|
170
168
|
if (value.indexOf('NULL::') === 0) return undefined;
|
|
171
|
-
// others
|
|
172
169
|
return value;
|
|
173
170
|
}
|
|
174
171
|
|
package/src/service/db_.ts
CHANGED
|
@@ -3,7 +3,7 @@ import type { FunctionAny } from 'vona';
|
|
|
3
3
|
import { BeanBase } from 'vona';
|
|
4
4
|
import { Service } from 'vona-module-a-bean';
|
|
5
5
|
|
|
6
|
-
import type {
|
|
6
|
+
import type { ServiceDatabaseDialectBase } from './databaseDialectBase_.ts';
|
|
7
7
|
import type { IDatabaseClientDialectRecord, IDbInfo } from '../types/database.ts';
|
|
8
8
|
import type { ITransactionConsistencyCommitOptions } from '../types/transaction.ts';
|
|
9
9
|
import type { ServiceDatabaseClient } from './databaseClient_.ts';
|
|
@@ -63,7 +63,7 @@ export class ServiceDb extends BeanBase {
|
|
|
63
63
|
return this.client.clientConfig.client;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
get dialect():
|
|
66
|
+
get dialect(): ServiceDatabaseDialectBase {
|
|
67
67
|
return this.bean.database.getDialect(this.dialectName);
|
|
68
68
|
}
|
|
69
69
|
|
|
@@ -4,9 +4,9 @@ import { isNil } from '@cabloy/utils';
|
|
|
4
4
|
import { BeanBase, cast, deepExtend } from 'vona';
|
|
5
5
|
import { Service } from 'vona-module-a-bean';
|
|
6
6
|
|
|
7
|
-
import type { BeanModelCache } from '../
|
|
8
|
-
import type { BeanModelCrud } from '../
|
|
9
|
-
import type { BeanModelMeta } from '../
|
|
7
|
+
import type { BeanModelCache } from '../lib/bean.model/bean.model_cache.ts';
|
|
8
|
+
import type { BeanModelCrud } from '../lib/bean.model/bean.model_crud.ts';
|
|
9
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
10
10
|
import type { IModelMethodOptions, IModelRelationIncludeWrapper } from '../types/model.ts';
|
|
11
11
|
import type { IModelClassRecord } from '../types/onion/model.ts';
|
|
12
12
|
import type { TypeModelClassLike } from '../types/relations.ts';
|
package/src/types/database.ts
CHANGED
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import type { FunctionAny } from 'vona';
|
|
2
2
|
|
|
3
|
-
import type { BeanModel } from '../bean/bean.model.ts';
|
|
4
3
|
import type { ServiceDb } from '../service/db_.ts';
|
|
5
4
|
import type { ConfigDatabase } from './config.ts';
|
|
6
5
|
|
|
@@ -28,10 +27,6 @@ export interface IDatabaseSwitchOptions {
|
|
|
28
27
|
}
|
|
29
28
|
|
|
30
29
|
declare module 'vona' {
|
|
31
|
-
export interface IBeanRecordGlobal {
|
|
32
|
-
model: BeanModel;
|
|
33
|
-
}
|
|
34
|
-
|
|
35
30
|
export interface VonaConfig {
|
|
36
31
|
database: ConfigDatabase;
|
|
37
32
|
}
|
package/src/types/dto/dtoGet.ts
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelMeta } from '../../lib/bean.model/bean.model_meta.ts';
|
|
2
4
|
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
3
5
|
import type { TypeModelColumns } from '../modelWhere.ts';
|
|
4
6
|
import type { IModelClassRecord } from '../onion/model.ts';
|
|
@@ -19,6 +21,7 @@ export interface IBuildDtoGetParams<TRecord, Model extends BeanModelMeta>
|
|
|
19
21
|
|
|
20
22
|
export interface IBuildDtoGetParamsBasic<TRecord> {
|
|
21
23
|
columns?: TypeModelColumns<TRecord>;
|
|
24
|
+
dtoClass?: Constructable<unknown>;
|
|
22
25
|
}
|
|
23
26
|
|
|
24
27
|
export type TypeDtoGetResult<
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TableIdentity } from 'table-identity';
|
|
2
|
-
import type { OmitNever, TypeOmitStringUnion } from 'vona';
|
|
2
|
+
import type { Constructable, OmitNever, TypeOmitStringUnion } from 'vona';
|
|
3
3
|
|
|
4
|
-
import type { BeanModelMeta } from '../../
|
|
4
|
+
import type { BeanModelMeta } from '../../lib/bean.model/bean.model_meta.ts';
|
|
5
5
|
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
6
6
|
import type { TypeModelColumnsStrict } from '../modelWhere.ts';
|
|
7
7
|
import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
|
|
@@ -38,6 +38,7 @@ export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta>
|
|
|
38
38
|
|
|
39
39
|
export interface IBuildDtoMutateParamsBasic<TRecord> {
|
|
40
40
|
columns?: TypeModelColumnsStrict<TRecord>;
|
|
41
|
+
dtoClass?: Constructable<unknown>;
|
|
41
42
|
}
|
|
42
43
|
|
|
43
44
|
export type TypeDtoMutateResult<
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeanModelMeta } from '../../
|
|
1
|
+
import type { BeanModelMeta } from '../../lib/bean.model/bean.model_meta.ts';
|
|
2
2
|
import type { IModelClassRecord } from '../onion/model.ts';
|
|
3
3
|
import type { TypeDtoGetResult } from './dtoGet.ts';
|
|
4
4
|
|
package/src/types/model.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { Knex } from 'knex';
|
|
2
2
|
import type { TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
3
3
|
|
|
4
|
-
import type { BeanModelMeta } from '../
|
|
4
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
5
5
|
import type {
|
|
6
6
|
TypeModelColumn,
|
|
7
7
|
TypeModelColumns,
|
package/src/types/modelAggr.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { OmitNever } from 'vona';
|
|
2
2
|
|
|
3
|
-
import type { BeanModelMeta } from '../
|
|
3
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
4
4
|
import type { IModelSelectParamsJoin } from './model.ts';
|
|
5
5
|
import type { TypeModelColumns, TypeModelWhere } from './modelWhere.ts';
|
|
6
6
|
import type { TypeModelsClassLikeGeneral } from './relations.ts';
|
package/src/types/modelCount.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeanModelMeta } from '../
|
|
1
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
2
2
|
import type { IModelSelectParamsJoin } from './model.ts';
|
|
3
3
|
import type { TypeModelColumn, TypeModelWhere } from './modelWhere.ts';
|
|
4
4
|
import type { TypeModelsClassLikeGeneral } from './relations.ts';
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
2
4
|
import type {
|
|
3
5
|
IModelRelationIncludeWrapper,
|
|
4
6
|
IModelSelectParamsJoin,
|
|
@@ -54,6 +56,7 @@ export interface IBuildModelSelectGeneralParamsBasic<
|
|
|
54
56
|
? TColumn | Array<TColumn>
|
|
55
57
|
: TColumn
|
|
56
58
|
: TypeModelColumnsPatch<TRecord, TColumn>;
|
|
59
|
+
dtoClass?: Constructable<unknown>;
|
|
57
60
|
aggrs?: Aggrs;
|
|
58
61
|
groups?: Groups;
|
|
59
62
|
having?: TypeModelWhere<TRecord, TypeModelSelectGroupParamsColumns<TRecord, Groups, Aggrs>>;
|
package/src/types/modelGroup.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type { BeanModelMeta } from '../
|
|
1
|
+
import type { BeanModelMeta } from '../lib/bean.model/bean.model_meta.ts';
|
|
2
2
|
import type { IModelSelectParamsJoin, IModelSelectParamsOrder } from './model.ts';
|
|
3
3
|
import type { TypeModelSelectAggrParamsAggrs } from './modelAggr.ts';
|
|
4
4
|
import type { TypeModelColumnsStrict, TypeModelWhere } from './modelWhere.ts';
|