vona-module-a-orm 5.0.96 → 5.1.2
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 +0 -0
- package/cli/entity/metadata/generate.ts +2 -1
- package/cli/model/metadata/generate.ts +6 -2
- package/cli/model/metadata/magic.ts +15 -6
- package/dist/.metadata/index.d.ts +1 -0
- package/dist/.metadata/index.d.ts.map +1 -0
- package/dist/.metadata/locales.d.ts +1 -0
- package/dist/.metadata/locales.d.ts.map +1 -0
- package/dist/.metadata/this.d.ts +1 -0
- package/dist/.metadata/this.d.ts.map +1 -0
- package/dist/bean/aopMethod.transaction.d.ts +2 -1
- package/dist/bean/aopMethod.transaction.d.ts.map +1 -0
- package/dist/bean/bean.database.d.ts +2 -1
- package/dist/bean/bean.database.d.ts.map +1 -0
- package/dist/bean/bean.databaseDialectBase.d.ts +2 -1
- package/dist/bean/bean.databaseDialectBase.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_cache.d.ts +5 -1
- package/dist/bean/bean.model/bean.model_cache.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_crud.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud_inner.d.ts +3 -1
- package/dist/bean/bean.model/bean.model_crud_inner.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_crud_table.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_crud_table.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_knex.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_knex.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_meta.d.ts +3 -2
- package/dist/bean/bean.model/bean.model_meta.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_utils.d.ts +5 -3
- package/dist/bean/bean.model/bean.model_utils.d.ts.map +1 -0
- package/dist/bean/bean.model/bean.model_view.d.ts +1 -0
- package/dist/bean/bean.model/bean.model_view.d.ts.map +1 -0
- package/dist/bean/bean.model.d.ts +1 -0
- package/dist/bean/bean.model.d.ts.map +1 -0
- package/dist/bean/bean.modelBase.d.ts +1 -0
- package/dist/bean/bean.modelBase.d.ts.map +1 -0
- package/dist/bean/broadcast.columnsClear.d.ts +2 -1
- package/dist/bean/broadcast.columnsClear.d.ts.map +1 -0
- package/dist/bean/event.clientNameReal.d.ts +2 -1
- package/dist/bean/event.clientNameReal.d.ts.map +1 -0
- package/dist/bean/event.columnsClear.d.ts +2 -1
- package/dist/bean/event.columnsClear.d.ts.map +1 -0
- package/dist/bean/hmr.entity.d.ts +1 -0
- package/dist/bean/hmr.entity.d.ts.map +1 -0
- package/dist/bean/hmr.model.d.ts +1 -0
- package/dist/bean/hmr.model.d.ts.map +1 -0
- package/dist/bean/queue.doubleDelete.d.ts +2 -1
- package/dist/bean/queue.doubleDelete.d.ts.map +1 -0
- package/dist/bean/schedule.softDeletionPrune.d.ts +1 -0
- package/dist/bean/schedule.softDeletionPrune.d.ts.map +1 -0
- package/dist/common/buildWhere.d.ts +1 -0
- package/dist/common/buildWhere.d.ts.map +1 -0
- package/dist/common/checkWhere.d.ts +1 -0
- package/dist/common/checkWhere.d.ts.map +1 -0
- package/dist/common/index.d.ts +1 -0
- package/dist/common/index.d.ts.map +1 -0
- package/dist/common/utils.d.ts +2 -1
- package/dist/common/utils.d.ts.map +1 -0
- package/dist/config/config.d.ts +1 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/errors.d.ts +1 -0
- package/dist/config/errors.d.ts.map +1 -0
- package/dist/config/locale/en-us.d.ts +1 -0
- package/dist/config/locale/en-us.d.ts.map +1 -0
- package/dist/config/locale/zh-cn.d.ts +1 -0
- package/dist/config/locale/zh-cn.d.ts.map +1 -0
- package/dist/extend/index.d.ts +1 -0
- package/dist/extend/index.d.ts.map +1 -0
- package/dist/extend/schemaBuilder.d.ts +1 -0
- package/dist/extend/schemaBuilder.d.ts.map +1 -0
- package/dist/extend/tableBuilder.d.ts +1 -0
- package/dist/extend/tableBuilder.d.ts.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +94 -15
- package/dist/index.js.map +1 -0
- package/dist/lib/const.d.ts +1 -0
- package/dist/lib/const.d.ts.map +1 -0
- package/dist/lib/databaseDialect.d.ts +1 -0
- package/dist/lib/databaseDialect.d.ts.map +1 -0
- package/dist/lib/dto/dto.d.ts +3 -0
- package/dist/lib/dto/dto.d.ts.map +1 -0
- package/dist/lib/dto/dtoAggregate.d.ts +3 -2
- package/dist/lib/dto/dtoAggregate.d.ts.map +1 -0
- package/dist/lib/dto/dtoCreate.d.ts +2 -1
- package/dist/lib/dto/dtoCreate.d.ts.map +1 -0
- package/dist/lib/dto/dtoGet.d.ts +2 -1
- package/dist/lib/dto/dtoGet.d.ts.map +1 -0
- package/dist/lib/dto/dtoGroup.d.ts +2 -1
- package/dist/lib/dto/dtoGroup.d.ts.map +1 -0
- package/dist/lib/dto/dtoListAndCount.d.ts +4 -0
- package/dist/lib/dto/dtoListAndCount.d.ts.map +1 -0
- package/dist/lib/dto/dtoMutate.d.ts +3 -2
- package/dist/lib/dto/dtoMutate.d.ts.map +1 -0
- package/dist/lib/dto/dtoQuery.d.ts +1 -0
- package/dist/lib/dto/dtoQuery.d.ts.map +1 -0
- package/dist/lib/dto/dtoQueryPage.d.ts +1 -0
- package/dist/lib/dto/dtoQueryPage.d.ts.map +1 -0
- package/dist/lib/dto/dtoSelectAndCount.d.ts +2 -1
- package/dist/lib/dto/dtoSelectAndCount.d.ts.map +1 -0
- package/dist/lib/dto/dtoUpdate.d.ts +2 -1
- package/dist/lib/dto/dtoUpdate.d.ts.map +1 -0
- package/dist/lib/dto/index.d.ts +1 -0
- package/dist/lib/dto/index.d.ts.map +1 -0
- package/dist/lib/entity.d.ts +1 -0
- package/dist/lib/entity.d.ts.map +1 -0
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/model.d.ts +1 -0
- package/dist/lib/model.d.ts.map +1 -0
- package/dist/lib/modelCacheBase.d.ts +2 -1
- package/dist/lib/modelCacheBase.d.ts.map +1 -0
- package/dist/lib/relations.d.ts +5 -4
- package/dist/lib/relations.d.ts.map +1 -0
- package/dist/lib/relationsDynamic.d.ts +5 -4
- package/dist/lib/relationsDynamic.d.ts.map +1 -0
- package/dist/lib/relationsMutate.d.ts +4 -3
- package/dist/lib/relationsMutate.d.ts.map +1 -0
- package/dist/lib/relationsStatic.d.ts +1 -0
- package/dist/lib/relationsStatic.d.ts.map +1 -0
- package/dist/lib/utils.d.ts +1 -0
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/main.d.ts +2 -1
- package/dist/main.d.ts.map +1 -0
- package/dist/service/cacheEntity_.d.ts +1 -0
- package/dist/service/cacheEntity_.d.ts.map +1 -0
- package/dist/service/cacheQuery_.d.ts +1 -0
- package/dist/service/cacheQuery_.d.ts.map +1 -0
- package/dist/service/columnsCache_.d.ts +2 -1
- package/dist/service/columnsCache_.d.ts.map +1 -0
- package/dist/service/columns_.d.ts +2 -1
- package/dist/service/columns_.d.ts.map +1 -0
- package/dist/service/database.d.ts +2 -1
- package/dist/service/database.d.ts.map +1 -0
- package/dist/service/databaseAsyncLocalStorage_.d.ts +1 -0
- package/dist/service/databaseAsyncLocalStorage_.d.ts.map +1 -0
- package/dist/service/databaseClient_.d.ts +2 -1
- package/dist/service/databaseClient_.d.ts.map +1 -0
- package/dist/service/db_.d.ts +2 -1
- package/dist/service/db_.d.ts.map +1 -0
- package/dist/service/entityResolver_.d.ts +1 -0
- package/dist/service/entityResolver_.d.ts.map +1 -0
- package/dist/service/modelResolver_.d.ts +1 -0
- package/dist/service/modelResolver_.d.ts.map +1 -0
- package/dist/service/relations_.d.ts +2 -1
- package/dist/service/relations_.d.ts.map +1 -0
- package/dist/service/transactionAsyncLocalStorage_.d.ts +1 -0
- package/dist/service/transactionAsyncLocalStorage_.d.ts.map +1 -0
- package/dist/service/transactionConsistency/342/200/214_.d.ts +1 -0
- package/dist/service/transactionConsistency/342/200/214_.d.ts.map +1 -0
- package/dist/service/transactionFiber_.d.ts +1 -0
- package/dist/service/transactionFiber_.d.ts.map +1 -0
- package/dist/service/transactionState_.d.ts +2 -1
- package/dist/service/transactionState_.d.ts.map +1 -0
- package/dist/service/transaction_.d.ts +2 -1
- package/dist/service/transaction_.d.ts.map +1 -0
- package/dist/types/columns.d.ts +1 -0
- package/dist/types/columns.d.ts.map +1 -0
- package/dist/types/config.d.ts +1 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/database.d.ts +1 -0
- package/dist/types/database.d.ts.map +1 -0
- package/dist/types/depth.d.ts +1 -0
- package/dist/types/depth.d.ts.map +1 -0
- package/dist/types/dialect.d.ts +1 -0
- package/dist/types/dialect.d.ts.map +1 -0
- package/dist/types/dto/dtoAggregate.d.ts +1 -0
- package/dist/types/dto/dtoAggregate.d.ts.map +1 -0
- package/dist/types/dto/dtoGet.d.ts +3 -2
- package/dist/types/dto/dtoGet.d.ts.map +1 -0
- package/dist/types/dto/dtoGroup.d.ts +1 -0
- package/dist/types/dto/dtoGroup.d.ts.map +1 -0
- package/dist/types/dto/dtoListAndCount.d.ts +8 -0
- package/dist/types/dto/dtoListAndCount.d.ts.map +1 -0
- package/dist/types/dto/dtoMutate.d.ts +8 -9
- package/dist/types/dto/dtoMutate.d.ts.map +1 -0
- package/dist/types/dto/dtoQueryBase.d.ts +1 -0
- package/dist/types/dto/dtoQueryBase.d.ts.map +1 -0
- package/dist/types/dto/dtoQueryPageBase.d.ts +1 -0
- package/dist/types/dto/dtoQueryPageBase.d.ts.map +1 -0
- package/dist/types/dto/dtoSelectAndCount.d.ts +2 -1
- package/dist/types/dto/dtoSelectAndCount.d.ts.map +1 -0
- package/dist/types/dto/index.d.ts +2 -0
- package/dist/types/dto/index.d.ts.map +1 -0
- package/dist/types/entity.d.ts +1 -0
- package/dist/types/entity.d.ts.map +1 -0
- package/dist/types/entityBase.d.ts +1 -0
- package/dist/types/entityBase.d.ts.map +1 -0
- package/dist/types/entityBaseEmpty.d.ts +1 -0
- package/dist/types/entityBaseEmpty.d.ts.map +1 -0
- package/dist/types/entityBaseInner.d.ts +1 -0
- package/dist/types/entityBaseInner.d.ts.map +1 -0
- package/dist/types/entityBaseSimple.d.ts +1 -0
- package/dist/types/entityBaseSimple.d.ts.map +1 -0
- package/dist/types/extra.d.ts +1 -0
- package/dist/types/extra.d.ts.map +1 -0
- package/dist/types/index.d.ts +2 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/logger.d.ts +1 -0
- package/dist/types/logger.d.ts.map +1 -0
- package/dist/types/model.d.ts +3 -2
- package/dist/types/model.d.ts.map +1 -0
- package/dist/types/modelAggr.d.ts +2 -1
- package/dist/types/modelAggr.d.ts.map +1 -0
- package/dist/types/modelCount.d.ts +2 -1
- package/dist/types/modelCount.d.ts.map +1 -0
- package/dist/types/modelGeneral.d.ts +4 -3
- package/dist/types/modelGeneral.d.ts.map +1 -0
- package/dist/types/modelGroup.d.ts +2 -1
- package/dist/types/modelGroup.d.ts.map +1 -0
- package/dist/types/modelIncrement.d.ts +19 -0
- package/dist/types/modelIncrement.d.ts.map +1 -0
- package/dist/types/modelWhere.d.ts +2 -1
- package/dist/types/modelWhere.d.ts.map +1 -0
- package/dist/types/onion/databaseDialect.d.ts +1 -0
- package/dist/types/onion/databaseDialect.d.ts.map +1 -0
- package/dist/types/onion/entity.d.ts +1 -0
- package/dist/types/onion/entity.d.ts.map +1 -0
- package/dist/types/onion/index.d.ts +1 -0
- package/dist/types/onion/index.d.ts.map +1 -0
- package/dist/types/onion/model.d.ts +1 -0
- package/dist/types/onion/model.d.ts.map +1 -0
- package/dist/types/onion/table.d.ts +1 -0
- package/dist/types/onion/table.d.ts.map +1 -0
- package/dist/types/relations.d.ts +10 -11
- package/dist/types/relations.d.ts.map +1 -0
- package/dist/types/relationsAggr.d.ts +2 -1
- package/dist/types/relationsAggr.d.ts.map +1 -0
- package/dist/types/relationsColumns.d.ts +5 -4
- package/dist/types/relationsColumns.d.ts.map +1 -0
- package/dist/types/relationsDef.d.ts +5 -4
- package/dist/types/relationsDef.d.ts.map +1 -0
- package/dist/types/relationsDefDynamic.d.ts +6 -5
- package/dist/types/relationsDefDynamic.d.ts.map +1 -0
- package/dist/types/relationsDefMutate.d.ts +1 -0
- package/dist/types/relationsDefMutate.d.ts.map +1 -0
- package/dist/types/relationsGroup.d.ts +1 -0
- package/dist/types/relationsGroup.d.ts.map +1 -0
- package/dist/types/relationsMutate.d.ts +4 -3
- package/dist/types/relationsMutate.d.ts.map +1 -0
- package/dist/types/relationsTables.d.ts +1 -0
- package/dist/types/relationsTables.d.ts.map +1 -0
- package/dist/types/transaction.d.ts +1 -0
- package/dist/types/transaction.d.ts.map +1 -0
- package/dist-cli/entity/metadata/generate.js +1 -1
- package/dist-cli/model/metadata/generate.js +4 -2
- package/dist-cli/model/metadata/magic.js +2 -2
- package/package.json +40 -36
- package/src/.metadata/index.ts +348 -0
- package/src/.metadata/locales.ts +13 -0
- package/src/.metadata/this.ts +2 -0
- package/src/bean/aopMethod.transaction.ts +18 -0
- package/src/bean/bean.database.ts +57 -0
- package/src/bean/bean.databaseDialectBase.ts +149 -0
- package/src/bean/bean.model/bean.model_cache.ts +815 -0
- package/src/bean/bean.model/bean.model_crud.ts +46 -0
- package/src/bean/bean.model/bean.model_crud_inner.ts +281 -0
- package/src/bean/bean.model/bean.model_crud_table.ts +59 -0
- package/src/bean/bean.model/bean.model_knex.ts +60 -0
- package/src/bean/bean.model/bean.model_meta.ts +204 -0
- package/src/bean/bean.model/bean.model_utils.ts +275 -0
- package/src/bean/bean.model/bean.model_view.ts +129 -0
- package/src/bean/bean.model.ts +8 -0
- package/src/bean/bean.modelBase.ts +8 -0
- package/src/bean/broadcast.columnsClear.ts +24 -0
- package/src/bean/event.clientNameReal.ts +10 -0
- package/src/bean/event.columnsClear.ts +13 -0
- package/src/bean/hmr.entity.ts +12 -0
- package/src/bean/hmr.model.ts +16 -0
- package/src/bean/queue.doubleDelete.ts +29 -0
- package/src/bean/schedule.softDeletionPrune.ts +45 -0
- package/src/common/buildWhere.ts +238 -0
- package/src/common/checkWhere.ts +128 -0
- package/src/common/index.ts +3 -0
- package/src/common/utils.ts +74 -0
- package/src/config/config.ts +60 -0
- package/src/config/errors.ts +3 -0
- package/src/config/locale/en-us.ts +8 -0
- package/src/config/locale/zh-cn.ts +8 -0
- package/src/extend/index.ts +12 -0
- package/src/extend/schemaBuilder.ts +29 -0
- package/src/extend/tableBuilder.ts +87 -0
- package/src/index.ts +10 -0
- package/src/lib/const.ts +58 -0
- package/src/lib/databaseDialect.ts +7 -0
- package/src/lib/dto/dto.ts +21 -0
- package/src/lib/dto/dtoAggregate.ts +51 -0
- package/src/lib/dto/dtoCreate.ts +14 -0
- package/src/lib/dto/dtoGet.ts +159 -0
- package/src/lib/dto/dtoGroup.ts +57 -0
- package/src/lib/dto/dtoListAndCount.ts +16 -0
- package/src/lib/dto/dtoMutate.ts +82 -0
- package/src/lib/dto/dtoQuery.ts +9 -0
- package/src/lib/dto/dtoQueryPage.ts +9 -0
- package/src/lib/dto/dtoSelectAndCount.ts +20 -0
- package/src/lib/dto/dtoUpdate.ts +16 -0
- package/src/lib/dto/index.ts +1 -0
- package/src/lib/entity.ts +25 -0
- package/src/lib/index.ts +9 -0
- package/src/lib/model.ts +7 -0
- package/src/lib/modelCacheBase.ts +98 -0
- package/src/lib/relations.ts +118 -0
- package/src/lib/relationsDynamic.ts +75 -0
- package/src/lib/relationsMutate.ts +60 -0
- package/src/lib/relationsStatic.ts +18 -0
- package/src/lib/utils.ts +45 -0
- package/src/main.ts +79 -0
- package/src/service/cacheEntity_.ts +37 -0
- package/src/service/cacheQuery_.ts +20 -0
- package/src/service/columnsCache_.ts +69 -0
- package/src/service/columns_.ts +64 -0
- package/src/service/database.ts +126 -0
- package/src/service/databaseAsyncLocalStorage_.ts +29 -0
- package/src/service/databaseClient_.ts +124 -0
- package/src/service/db_.ts +77 -0
- package/src/service/entityResolver_.ts +25 -0
- package/src/service/modelResolver_.ts +19 -0
- package/src/service/relations_.ts +444 -0
- package/src/service/transactionAsyncLocalStorage_.ts +31 -0
- package/src/service/transactionConsistency/342/200/214_.ts +37 -0
- package/src/service/transactionFiber_.ts +42 -0
- package/src/service/transactionState_.ts +35 -0
- package/src/service/transaction_.ts +147 -0
- package/src/types/columns.ts +8 -0
- package/src/types/config.ts +23 -0
- package/src/types/database.ts +64 -0
- package/src/types/depth.ts +55 -0
- package/src/types/dialect.ts +17 -0
- package/src/types/dto/dtoAggregate.ts +3 -0
- package/src/types/dto/dtoGet.ts +23 -0
- package/src/types/dto/dtoGroup.ts +3 -0
- package/src/types/dto/dtoListAndCount.ts +7 -0
- package/src/types/dto/dtoMutate.ts +231 -0
- package/src/types/dto/dtoQueryBase.ts +18 -0
- package/src/types/dto/dtoQueryPageBase.ts +18 -0
- package/src/types/dto/dtoSelectAndCount.ts +11 -0
- package/src/types/dto/index.ts +8 -0
- package/src/types/entity.ts +15 -0
- package/src/types/entityBase.ts +11 -0
- package/src/types/entityBaseEmpty.ts +1 -0
- package/src/types/entityBaseInner.ts +18 -0
- package/src/types/entityBaseSimple.ts +9 -0
- package/src/types/extra.ts +23 -0
- package/src/types/index.ts +30 -0
- package/src/types/logger.ts +6 -0
- package/src/types/model.ts +152 -0
- package/src/types/modelAggr.ts +69 -0
- package/src/types/modelCount.ts +40 -0
- package/src/types/modelGeneral.ts +61 -0
- package/src/types/modelGroup.ts +48 -0
- package/src/types/modelIncrement.ts +50 -0
- package/src/types/modelWhere.ts +85 -0
- package/src/types/onion/databaseDialect.ts +22 -0
- package/src/types/onion/entity.ts +33 -0
- package/src/types/onion/index.ts +4 -0
- package/src/types/onion/model.ts +68 -0
- package/src/types/onion/table.ts +1 -0
- package/src/types/relations.ts +243 -0
- package/src/types/relationsAggr.ts +31 -0
- package/src/types/relationsColumns.ts +116 -0
- package/src/types/relationsDef.ts +152 -0
- package/src/types/relationsDefDynamic.ts +128 -0
- package/src/types/relationsDefMutate.ts +11 -0
- package/src/types/relationsGroup.ts +58 -0
- package/src/types/relationsMutate.ts +118 -0
- package/src/types/relationsTables.ts +38 -0
- package/src/types/transaction.ts +23 -0
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
import type knex from 'knex';
|
|
2
|
+
import type { Knex } from 'knex';
|
|
3
|
+
import type { FunctionAny, FunctionAsync } from 'vona';
|
|
4
|
+
|
|
5
|
+
import { BeanBase } from 'vona';
|
|
6
|
+
import { Service } from 'vona-module-a-bean';
|
|
7
|
+
|
|
8
|
+
import type { ITransactionConsistencyCommitOptions, ITransactionOptions } from '../types/transaction.ts';
|
|
9
|
+
import type { ServiceDb } from './db_.ts';
|
|
10
|
+
import type { ServiceTransactionFiber } from './transactionFiber_.ts';
|
|
11
|
+
|
|
12
|
+
import { TransactionIsolationLevelsMap } from '../types/transaction.ts';
|
|
13
|
+
import { ServiceTransactionAsyncLocalStorage } from './transactionAsyncLocalStorage_.ts';
|
|
14
|
+
|
|
15
|
+
@Service()
|
|
16
|
+
export class ServiceTransaction extends BeanBase {
|
|
17
|
+
private _db: ServiceDb;
|
|
18
|
+
|
|
19
|
+
protected __init__(db: ServiceDb) {
|
|
20
|
+
this._db = db;
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
get transactionState() {
|
|
24
|
+
return this.bean._getBean(ServiceTransactionAsyncLocalStorage).transactionState;
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
get transactionFiber(): ServiceTransactionFiber | undefined {
|
|
28
|
+
return this.transactionState.get(this._db);
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
get inTransaction() {
|
|
32
|
+
return !!this.transactionFiber;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
get connection(): knex.Knex.Transaction | undefined {
|
|
36
|
+
return this.transactionFiber?.connection;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
async commit(cb: FunctionAny, options?: ITransactionConsistencyCommitOptions) {
|
|
40
|
+
const fiber = this.transactionFiber;
|
|
41
|
+
if (!fiber) {
|
|
42
|
+
if (!options?.ignoreIfNotInTransaction) {
|
|
43
|
+
await cb();
|
|
44
|
+
}
|
|
45
|
+
} else {
|
|
46
|
+
fiber.commit(cb);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
compensate(cb: FunctionAny) {
|
|
51
|
+
const fiber = this.transactionFiber;
|
|
52
|
+
if (fiber) {
|
|
53
|
+
fiber.compensate(cb);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
async begin<RESULT>(fn: FunctionAsync<RESULT>, options?: ITransactionOptions): Promise<RESULT> {
|
|
58
|
+
// transactionOptions
|
|
59
|
+
const transactionOptions = Object.assign({}, options, { propagation: undefined });
|
|
60
|
+
// propagation
|
|
61
|
+
const propagation = options?.propagation ?? 'REQUIRED';
|
|
62
|
+
if (propagation === 'REQUIRED') {
|
|
63
|
+
// required
|
|
64
|
+
return this._isolationLevelRequired(fn, transactionOptions);
|
|
65
|
+
} else if (propagation === 'SUPPORTS') {
|
|
66
|
+
// supports
|
|
67
|
+
if (this.inTransaction) {
|
|
68
|
+
return this._isolationLevelRequired(fn, transactionOptions);
|
|
69
|
+
} else {
|
|
70
|
+
return fn();
|
|
71
|
+
}
|
|
72
|
+
} else if (propagation === 'MANDATORY') {
|
|
73
|
+
// mandatory
|
|
74
|
+
if (this.inTransaction) {
|
|
75
|
+
return this._isolationLevelRequired(fn, transactionOptions);
|
|
76
|
+
} else {
|
|
77
|
+
throw new Error('transaction error: EnumTransactionPropagation.MANDATORY');
|
|
78
|
+
}
|
|
79
|
+
} else if (propagation === 'REQUIRES_NEW') {
|
|
80
|
+
// requires_new
|
|
81
|
+
if (!this.inTransaction) {
|
|
82
|
+
return this._isolationLevelRequired(fn, transactionOptions);
|
|
83
|
+
} else {
|
|
84
|
+
return this.bean.database.switchDbIsolate(() => {
|
|
85
|
+
return this.bean.database.current.transaction.begin(() => {
|
|
86
|
+
return fn();
|
|
87
|
+
}, transactionOptions);
|
|
88
|
+
}, this._db.info);
|
|
89
|
+
}
|
|
90
|
+
} else if (propagation === 'NOT_SUPPORTED') {
|
|
91
|
+
if (!this.inTransaction) {
|
|
92
|
+
return fn();
|
|
93
|
+
} else {
|
|
94
|
+
return this.bean.database.switchDbIsolate(fn, this._db.info);
|
|
95
|
+
}
|
|
96
|
+
} else if (propagation === 'NEVER') {
|
|
97
|
+
if (!this.inTransaction) {
|
|
98
|
+
return fn();
|
|
99
|
+
} else {
|
|
100
|
+
throw new Error('transaction error: EnumTransactionPropagation.NEVER');
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
throw new Error('transaction error: unknown propagation');
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
private async _isolationLevelRequired<RESULT>(fn: FunctionAsync<RESULT>, options?: ITransactionOptions): Promise<RESULT> {
|
|
107
|
+
let res: RESULT;
|
|
108
|
+
// begin
|
|
109
|
+
let fiber: ServiceTransactionFiber | undefined;
|
|
110
|
+
if (!this.inTransaction) {
|
|
111
|
+
const connection = this._db.client.connection;
|
|
112
|
+
const transactionConnection = await connection.transaction(_translateTransactionOptions(options));
|
|
113
|
+
fiber = this.transactionState.add(this._db, transactionConnection);
|
|
114
|
+
}
|
|
115
|
+
// fn
|
|
116
|
+
try {
|
|
117
|
+
res = await fn();
|
|
118
|
+
} catch (err) {
|
|
119
|
+
if (fiber) {
|
|
120
|
+
await fiber.doRollback();
|
|
121
|
+
this.transactionState.remove(this._db);
|
|
122
|
+
}
|
|
123
|
+
throw err;
|
|
124
|
+
}
|
|
125
|
+
try {
|
|
126
|
+
if (fiber) {
|
|
127
|
+
await fiber.doCommit();
|
|
128
|
+
this.transactionState.remove(this._db);
|
|
129
|
+
}
|
|
130
|
+
} catch (err) {
|
|
131
|
+
if (fiber) {
|
|
132
|
+
await fiber.doRollback();
|
|
133
|
+
this.transactionState.remove(this._db);
|
|
134
|
+
}
|
|
135
|
+
throw err;
|
|
136
|
+
}
|
|
137
|
+
return res;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
function _translateTransactionOptions(options?: ITransactionOptions): Knex.TransactionConfig | undefined {
|
|
142
|
+
if (!options) return undefined;
|
|
143
|
+
return {
|
|
144
|
+
isolationLevel: TransactionIsolationLevelsMap[options.isolationLevel ?? 'DEFAULT'] as any,
|
|
145
|
+
readOnly: options.readOnly,
|
|
146
|
+
};
|
|
147
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { Knex } from 'knex';
|
|
2
|
+
import type { VonaContext } from 'vona';
|
|
3
|
+
|
|
4
|
+
import type { IDatabaseClientDialectRecord, IDatabaseClientRecord } from './database.ts';
|
|
5
|
+
import type { IDatabaseDialectRecord } from './onion/databaseDialect.ts';
|
|
6
|
+
|
|
7
|
+
export type TypeDefaultClientNameFn = (ctx?: VonaContext) => keyof IDatabaseClientRecord;
|
|
8
|
+
|
|
9
|
+
export type TypeDefaultClientName = TypeDefaultClientNameFn | keyof IDatabaseClientRecord;
|
|
10
|
+
|
|
11
|
+
export interface ConfigDatabaseClient extends Omit<Knex.Config, 'client'> {
|
|
12
|
+
client: keyof IDatabaseClientDialectRecord;
|
|
13
|
+
}
|
|
14
|
+
export interface ConfigDatabase {
|
|
15
|
+
testDatabase: boolean;
|
|
16
|
+
defaultClient: TypeDefaultClientName;
|
|
17
|
+
clients: Record<keyof IDatabaseClientRecord, ConfigDatabaseClient>;
|
|
18
|
+
base: ConfigDatabaseClient;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export type IDataBaseConfigDialects = {
|
|
22
|
+
[KEY in keyof IDatabaseClientDialectRecord]: keyof IDatabaseDialectRecord;
|
|
23
|
+
};
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { FunctionAny } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModel } from '../bean/bean.model.ts';
|
|
4
|
+
import type { ServiceDb } from '../service/db_.ts';
|
|
5
|
+
import type { ConfigDatabase } from './config.ts';
|
|
6
|
+
|
|
7
|
+
export interface IDbInfo {
|
|
8
|
+
level: number;
|
|
9
|
+
clientName: keyof IDatabaseClientRecord;
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
export interface IDatabaseClientRecord {
|
|
13
|
+
default: never;
|
|
14
|
+
sqlite3: never;
|
|
15
|
+
pg: never;
|
|
16
|
+
mysql: never;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export interface IDatabaseClientDialectRecord {
|
|
20
|
+
'better-sqlite3': never;
|
|
21
|
+
'pg': never;
|
|
22
|
+
'mysql': never;
|
|
23
|
+
'mysql2': never;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
export interface IDatabaseSwitchOptions {
|
|
27
|
+
clientName?: keyof IDatabaseClientRecord;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
declare module 'vona' {
|
|
31
|
+
export interface IBeanRecordGlobal {
|
|
32
|
+
model: BeanModel;
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
export interface VonaConfig {
|
|
36
|
+
database: ConfigDatabase;
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
export interface VonaContext {
|
|
40
|
+
get db(): ServiceDb;
|
|
41
|
+
commit(cb: FunctionAny): void;
|
|
42
|
+
commitsDone(): Promise<void>;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export interface VonaConfigEnv {
|
|
46
|
+
// default
|
|
47
|
+
DATABASE_DEFAULT_CLIENT: string | undefined;
|
|
48
|
+
// sqlite3
|
|
49
|
+
DATABASE_CLIENT_SQLITE3_FILENAME: string | undefined;
|
|
50
|
+
DATABASE_CLIENT_SQLITE3_NATIVEBINDING: string | 'true' | 'false' | undefined;
|
|
51
|
+
// pg
|
|
52
|
+
DATABASE_CLIENT_PG_HOST: string | undefined;
|
|
53
|
+
DATABASE_CLIENT_PG_PORT: string | undefined;
|
|
54
|
+
DATABASE_CLIENT_PG_USER: string | undefined;
|
|
55
|
+
DATABASE_CLIENT_PG_PASSWORD: string | undefined;
|
|
56
|
+
DATABASE_CLIENT_PG_DATABASE: string | undefined;
|
|
57
|
+
// mysql
|
|
58
|
+
DATABASE_CLIENT_MYSQL_HOST: string | undefined;
|
|
59
|
+
DATABASE_CLIENT_MYSQL_PORT: string | undefined;
|
|
60
|
+
DATABASE_CLIENT_MYSQL_USER: string | undefined;
|
|
61
|
+
DATABASE_CLIENT_MYSQL_PASSWORD: string | undefined;
|
|
62
|
+
DATABASE_CLIENT_MYSQL_DATABASE: string | undefined;
|
|
63
|
+
}
|
|
64
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
export type TypeDepthPrevMax = 50;
|
|
2
|
+
export type TypeDepthPrev = [
|
|
3
|
+
never,
|
|
4
|
+
0,
|
|
5
|
+
1,
|
|
6
|
+
2,
|
|
7
|
+
3,
|
|
8
|
+
4,
|
|
9
|
+
5,
|
|
10
|
+
6,
|
|
11
|
+
7,
|
|
12
|
+
8,
|
|
13
|
+
9,
|
|
14
|
+
10,
|
|
15
|
+
11,
|
|
16
|
+
12,
|
|
17
|
+
13,
|
|
18
|
+
14,
|
|
19
|
+
15,
|
|
20
|
+
16,
|
|
21
|
+
17,
|
|
22
|
+
18,
|
|
23
|
+
19,
|
|
24
|
+
20,
|
|
25
|
+
21,
|
|
26
|
+
22,
|
|
27
|
+
23,
|
|
28
|
+
24,
|
|
29
|
+
25,
|
|
30
|
+
26,
|
|
31
|
+
27,
|
|
32
|
+
28,
|
|
33
|
+
29,
|
|
34
|
+
30,
|
|
35
|
+
31,
|
|
36
|
+
32,
|
|
37
|
+
33,
|
|
38
|
+
34,
|
|
39
|
+
35,
|
|
40
|
+
36,
|
|
41
|
+
37,
|
|
42
|
+
38,
|
|
43
|
+
39,
|
|
44
|
+
40,
|
|
45
|
+
41,
|
|
46
|
+
42,
|
|
47
|
+
43,
|
|
48
|
+
44,
|
|
49
|
+
45,
|
|
50
|
+
46,
|
|
51
|
+
47,
|
|
52
|
+
48,
|
|
53
|
+
49,
|
|
54
|
+
50,
|
|
55
|
+
];
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import type { ITableColumns } from './columns.ts';
|
|
2
|
+
|
|
3
|
+
export interface IFetchDatabasesResultItem {
|
|
4
|
+
name: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
export interface IFetchIndexesResultItem {
|
|
8
|
+
indexName: string;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export type TypeDatabaseDialectTableColumnsFn = () => Promise<ITableColumns>;
|
|
12
|
+
|
|
13
|
+
export interface IDatabaseDialectCapabilities {
|
|
14
|
+
like: boolean;
|
|
15
|
+
ilike: boolean;
|
|
16
|
+
level: boolean;
|
|
17
|
+
}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
3
|
+
import type { TypeModelColumns } from '../modelWhere.ts';
|
|
4
|
+
import type { IModelClassRecord } from '../onion/model.ts';
|
|
5
|
+
import type { TypeModelOfModelLike, TypeModelRelationResult, TypeSymbolKeyEntity } from '../relations.ts';
|
|
6
|
+
|
|
7
|
+
export type IDtoGetParams<ModelLike extends BeanModelMeta | keyof IModelClassRecord> = IBuildDtoGetParams<
|
|
8
|
+
TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
|
|
9
|
+
TypeModelOfModelLike<ModelLike>
|
|
10
|
+
>;
|
|
11
|
+
|
|
12
|
+
export interface IBuildDtoGetParams<TRecord, Model extends BeanModelMeta>
|
|
13
|
+
extends IModelRelationIncludeWrapper<Model>, IBuildDtoGetParamsBasic<TRecord> {}
|
|
14
|
+
|
|
15
|
+
export interface IBuildDtoGetParamsBasic<TRecord> {
|
|
16
|
+
columns?: TypeModelColumns<TRecord>;
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
export type TypeDtoGetResult<ModelLike extends BeanModelMeta | keyof IModelClassRecord, TOptionsRelation> = TypeModelRelationResult<
|
|
20
|
+
TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
|
|
21
|
+
TypeModelOfModelLike<ModelLike>,
|
|
22
|
+
TOptionsRelation
|
|
23
|
+
>;
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
import type { TableIdentity } from 'table-identity';
|
|
2
|
+
import type { OmitNever, TypeOmitStringUnion } from 'vona';
|
|
3
|
+
|
|
4
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
5
|
+
import type { IModelRelationIncludeWrapper } from '../model.ts';
|
|
6
|
+
import type { TypeModelColumnsStrict } from '../modelWhere.ts';
|
|
7
|
+
import type { IDecoratorModelOptions, IModelClassRecord } from '../onion/model.ts';
|
|
8
|
+
import type {
|
|
9
|
+
TypeModelOfModelLike,
|
|
10
|
+
TypeSymbolKeyEntity,
|
|
11
|
+
TypeUtilEntityOmit,
|
|
12
|
+
TypeUtilEntityPartial,
|
|
13
|
+
TypeUtilEntitySelector,
|
|
14
|
+
TypeUtilGetColumnsFromRelationAndIncludeWrapper,
|
|
15
|
+
TypeUtilGetModelOptions,
|
|
16
|
+
TypeUtilGetParamsColumns,
|
|
17
|
+
TypeUtilGetParamsInlcude,
|
|
18
|
+
TypeUtilGetParamsWith,
|
|
19
|
+
TypeUtilGetRelationEntity,
|
|
20
|
+
TypeUtilGetRelationKey,
|
|
21
|
+
TypeUtilGetRelationModel,
|
|
22
|
+
TypeUtilGetRelationOptions,
|
|
23
|
+
TypeUtilGetRelationOptionsAutoload,
|
|
24
|
+
TypeUtilGetRelationType,
|
|
25
|
+
TypeUtilPrepareColumns,
|
|
26
|
+
} from '../relations.ts';
|
|
27
|
+
|
|
28
|
+
export type TypeDtoMutateType = 'create' | 'update' | 'mutate';
|
|
29
|
+
|
|
30
|
+
export type IDtoMutateParams<ModelLike extends BeanModelMeta | keyof IModelClassRecord> = IBuildDtoMutateParams<
|
|
31
|
+
TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
|
|
32
|
+
TypeModelOfModelLike<ModelLike>
|
|
33
|
+
>;
|
|
34
|
+
|
|
35
|
+
export interface IBuildDtoMutateParams<TRecord, Model extends BeanModelMeta>
|
|
36
|
+
extends IModelRelationIncludeWrapper<Model>, IBuildDtoMutateParamsBasic<TRecord> {}
|
|
37
|
+
|
|
38
|
+
export interface IBuildDtoMutateParamsBasic<TRecord> {
|
|
39
|
+
columns?: TypeModelColumnsStrict<TRecord>;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
export type TypeDtoMutateResult<
|
|
43
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
44
|
+
TOptionsRelation,
|
|
45
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
46
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
47
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
48
|
+
> = TypeDtoMutateRelationResult<
|
|
49
|
+
TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity],
|
|
50
|
+
TypeModelOfModelLike<ModelLike>,
|
|
51
|
+
TOptionsRelation,
|
|
52
|
+
TMutateTypeTopLevel,
|
|
53
|
+
TColumnsOmitDefault,
|
|
54
|
+
TTopLevel
|
|
55
|
+
>;
|
|
56
|
+
|
|
57
|
+
export type TypeDtoMutateRelationResult<
|
|
58
|
+
TRecord,
|
|
59
|
+
TModel extends BeanModelMeta | undefined,
|
|
60
|
+
TOptionsRelation,
|
|
61
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
62
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
63
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
64
|
+
TColumns = undefined,
|
|
65
|
+
REFKEY = undefined,
|
|
66
|
+
> = TypeDtoMutateRelationResultEntity<
|
|
67
|
+
TRecord,
|
|
68
|
+
TColumns extends string | string[] ? TColumns : TypeUtilGetParamsColumns<TOptionsRelation>,
|
|
69
|
+
TMutateTypeTopLevel,
|
|
70
|
+
TColumnsOmitDefault,
|
|
71
|
+
TTopLevel,
|
|
72
|
+
REFKEY
|
|
73
|
+
> &
|
|
74
|
+
(TModel extends BeanModelMeta
|
|
75
|
+
? OmitNever<
|
|
76
|
+
TypeDtoMutateRelationResultMergeInclude<TMutateTypeTopLevel, TypeUtilGetModelOptions<TModel>, TypeUtilGetParamsInlcude<TOptionsRelation>>
|
|
77
|
+
> &
|
|
78
|
+
OmitNever<TypeDtoMutateModelRelationResultMergeWith<TMutateTypeTopLevel, TypeUtilGetParamsWith<TOptionsRelation>>>
|
|
79
|
+
: {});
|
|
80
|
+
|
|
81
|
+
type TypeDtoMutateRelationResultMergeInclude<
|
|
82
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
83
|
+
TModelOptions extends IDecoratorModelOptions,
|
|
84
|
+
TInclude extends {} | undefined | unknown,
|
|
85
|
+
> = {
|
|
86
|
+
[RelationName in keyof TModelOptions['relations']]: TInclude extends {}
|
|
87
|
+
? TInclude[RelationName] extends {} | boolean
|
|
88
|
+
? TypeDtoMutateRelationResultMergeIncludeWrapper<TMutateTypeTopLevel, TModelOptions['relations'][RelationName], TInclude[RelationName]>
|
|
89
|
+
: TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>
|
|
90
|
+
: TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel, TModelOptions['relations'][RelationName]>;
|
|
91
|
+
};
|
|
92
|
+
|
|
93
|
+
type TypeDtoMutateModelRelationResultMergeWith<
|
|
94
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
95
|
+
TWith extends {} | undefined | unknown,
|
|
96
|
+
> = TWith extends {} ? { [RelationName in keyof TWith]: TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel, TWith[RelationName]> } : {};
|
|
97
|
+
|
|
98
|
+
type TypeDtoMutateRelationResultMergeIncludeWrapper<
|
|
99
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
100
|
+
Relation,
|
|
101
|
+
IncludeWrapper,
|
|
102
|
+
> = IncludeWrapper extends false
|
|
103
|
+
? never
|
|
104
|
+
: IncludeWrapper extends true
|
|
105
|
+
? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined>
|
|
106
|
+
: IncludeWrapper extends {}
|
|
107
|
+
? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, IncludeWrapper>
|
|
108
|
+
: never;
|
|
109
|
+
|
|
110
|
+
type TypeDtoMutateRelationResultMergeAutoload<TMutateTypeTopLevel extends TypeDtoMutateType, Relation> =
|
|
111
|
+
TypeUtilGetRelationOptionsAutoload<Relation> extends true
|
|
112
|
+
? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, Relation, undefined>
|
|
113
|
+
: never;
|
|
114
|
+
|
|
115
|
+
type TypeDtoMutateRelationResultMergeWithRelation<TMutateTypeTopLevel extends TypeDtoMutateType, WithRelation> = WithRelation extends false
|
|
116
|
+
? never
|
|
117
|
+
: WithRelation extends true
|
|
118
|
+
? never
|
|
119
|
+
: WithRelation extends {}
|
|
120
|
+
? TypeUtilGetDtoMutateRelationEntityByType<TMutateTypeTopLevel, WithRelation, TypeUtilGetRelationOptions<WithRelation>>
|
|
121
|
+
: never;
|
|
122
|
+
|
|
123
|
+
type TypeUtilGetDtoMutateRelationEntityByType<
|
|
124
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
125
|
+
Relation,
|
|
126
|
+
IncludeWrapper extends {} | undefined | unknown,
|
|
127
|
+
> = TypeUtilGetDtoMutateEntityByType<
|
|
128
|
+
TMutateTypeTopLevel,
|
|
129
|
+
TypeUtilGetRelationEntity<Relation>,
|
|
130
|
+
TypeUtilGetRelationType<Relation>,
|
|
131
|
+
TypeUtilGetRelationModel<Relation>,
|
|
132
|
+
IncludeWrapper,
|
|
133
|
+
TypeUtilGetColumnsFromRelationAndIncludeWrapper<Relation, IncludeWrapper>,
|
|
134
|
+
TypeUtilGetRelationKey<Relation>
|
|
135
|
+
>;
|
|
136
|
+
type TypeUtilGetDtoMutateEntityByType<
|
|
137
|
+
TMutateTypeTopLevel extends TypeDtoMutateType,
|
|
138
|
+
TRecord,
|
|
139
|
+
TYPE,
|
|
140
|
+
TModel extends BeanModelMeta | undefined,
|
|
141
|
+
IncludeWrapper extends {} | undefined | unknown,
|
|
142
|
+
Columns,
|
|
143
|
+
REFKEY = undefined,
|
|
144
|
+
> = TYPE extends 'belongsTo'
|
|
145
|
+
? never
|
|
146
|
+
: TYPE extends 'belongsToMany'
|
|
147
|
+
? Array<{ id: TableIdentity; deleted?: boolean }> | undefined
|
|
148
|
+
: TYPE extends 'hasMany'
|
|
149
|
+
? Array<TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY>> | undefined
|
|
150
|
+
: TypeDtoMutateRelationResult<TRecord, TModel, IncludeWrapper, TMutateTypeTopLevel, undefined, false, Columns, REFKEY> | undefined;
|
|
151
|
+
|
|
152
|
+
type TypeDtoMutateRelationResultEntity<
|
|
153
|
+
TRecord,
|
|
154
|
+
Columns = undefined,
|
|
155
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
156
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
157
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
158
|
+
REFKEY = undefined,
|
|
159
|
+
> = TypeDtoMutateRelationResultPatch<
|
|
160
|
+
TypeDtoMutateRelationResultEntityInner<TRecord, Columns, TMutateTypeTopLevel, TColumnsOmitDefault, TTopLevel>,
|
|
161
|
+
TMutateTypeTopLevel,
|
|
162
|
+
TTopLevel,
|
|
163
|
+
REFKEY
|
|
164
|
+
>;
|
|
165
|
+
|
|
166
|
+
type TypeDtoMutateRelationResultPatch<
|
|
167
|
+
TRecordResult,
|
|
168
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
169
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
170
|
+
REFKEY = undefined,
|
|
171
|
+
> = TTopLevel extends false
|
|
172
|
+
? TypeUtilEntityOmit<TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>, REFKEY>
|
|
173
|
+
: TypeDtoMutateRelationResultPatch2<TRecordResult, TMutateTypeTopLevel, TTopLevel>;
|
|
174
|
+
|
|
175
|
+
type TypeDtoMutateRelationResultPatch2<
|
|
176
|
+
TRecordResult,
|
|
177
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
178
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
179
|
+
> = TTopLevel extends false
|
|
180
|
+
? TMutateTypeTopLevel extends 'update' | 'mutate'
|
|
181
|
+
? TypeUtilEntityPartial<TRecordResult, 'id' | 'deleted'>
|
|
182
|
+
: TRecordResult
|
|
183
|
+
: TRecordResult;
|
|
184
|
+
|
|
185
|
+
type TypeDtoMutateRelationResultEntityInner<
|
|
186
|
+
TRecord,
|
|
187
|
+
Columns = undefined,
|
|
188
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
189
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
190
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
191
|
+
> = [Columns] extends [string | string[]]
|
|
192
|
+
? TypeDtoMutateRelationResultEntityFromColumns<TRecord, Columns, TMutateTypeTopLevel, TTopLevel>
|
|
193
|
+
: TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<TRecord, TMutateTypeTopLevel, TColumnsOmitDefault>;
|
|
194
|
+
|
|
195
|
+
type TypeDtoMutateRelationResultEntityFromColumns<
|
|
196
|
+
TRecord,
|
|
197
|
+
Columns = undefined,
|
|
198
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
199
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
200
|
+
> = TypeUtilEntitySelector<
|
|
201
|
+
TRecord,
|
|
202
|
+
TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumns<TypeUtilPrepareColumns<Columns>, TMutateTypeTopLevel, TTopLevel>>
|
|
203
|
+
>;
|
|
204
|
+
|
|
205
|
+
type TypeDtoMutateRelationResultEntityFromColumnsOmitDefault<
|
|
206
|
+
TRecord,
|
|
207
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
208
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
209
|
+
> = TypeUtilEntityOmit<
|
|
210
|
+
TRecord,
|
|
211
|
+
TypeUtilPrepareColumns<TypeDtoMutateRelationResultPrepareColumnsOmitDefault<TMutateTypeTopLevel, TColumnsOmitDefault>>
|
|
212
|
+
>;
|
|
213
|
+
|
|
214
|
+
type TypeDtoMutateRelationResultPrepareColumns<
|
|
215
|
+
TColumns = undefined,
|
|
216
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
217
|
+
TTopLevel extends boolean | undefined = undefined,
|
|
218
|
+
> = TTopLevel extends true
|
|
219
|
+
? TColumns
|
|
220
|
+
: TMutateTypeTopLevel extends 'create'
|
|
221
|
+
? TypeOmitStringUnion<TColumns, 'deleted' | 'id'>
|
|
222
|
+
: TColumns | 'deleted' | 'id';
|
|
223
|
+
|
|
224
|
+
type TypeDtoMutateRelationResultPrepareColumnsOmitDefault<
|
|
225
|
+
TMutateTypeTopLevel extends TypeDtoMutateType | undefined = undefined,
|
|
226
|
+
TColumnsOmitDefault extends string | string[] | undefined = undefined,
|
|
227
|
+
> = TColumnsOmitDefault extends string | string[]
|
|
228
|
+
? TColumnsOmitDefault
|
|
229
|
+
: TMutateTypeTopLevel extends 'create'
|
|
230
|
+
? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt']
|
|
231
|
+
: ['iid', 'createdAt', 'updatedAt'];
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useApp } from 'vona';
|
|
2
|
+
import { Api, v } from 'vona-module-a-openapiutils';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
const app = useApp();
|
|
6
|
+
const ormConfig = app.util.getModuleConfigRaw('a-orm');
|
|
7
|
+
const ordersDefault = ormConfig?.rest?.query?.orders?.default ?? 'createdAt,desc';
|
|
8
|
+
|
|
9
|
+
export class DtoQueryBase {
|
|
10
|
+
@Api.field(v.optional(), v.array(String, { separator: ',' }))
|
|
11
|
+
columns?: string[];
|
|
12
|
+
|
|
13
|
+
@Api.field(v.optional(), z.looseObject({}))
|
|
14
|
+
where?: object;
|
|
15
|
+
|
|
16
|
+
@Api.field(v.default(ordersDefault), v.optional(), z.union([z.string(), z.array(z.array(z.string()))]))
|
|
17
|
+
orders?: string | string[][];
|
|
18
|
+
}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { useApp } from 'vona';
|
|
2
|
+
import { Api } from 'vona-module-a-openapiutils';
|
|
3
|
+
import z from 'zod';
|
|
4
|
+
|
|
5
|
+
import { DtoQueryBase } from './dtoQueryBase.ts';
|
|
6
|
+
|
|
7
|
+
const app = useApp();
|
|
8
|
+
const ormConfig = app.util.getModuleConfigRaw('a-orm');
|
|
9
|
+
const pageSizeDefault = ormConfig?.rest?.query?.pageSize?.default ?? 20;
|
|
10
|
+
const pageSizeMax = ormConfig?.rest?.query?.pageSize?.max ?? 100;
|
|
11
|
+
|
|
12
|
+
export class DtoQueryPageBase extends DtoQueryBase {
|
|
13
|
+
@Api.field(z.number().min(1).default(1))
|
|
14
|
+
pageNo: number;
|
|
15
|
+
|
|
16
|
+
@Api.field(z.number().min(1).max(pageSizeMax).default(pageSizeDefault))
|
|
17
|
+
pageSize: number;
|
|
18
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
2
|
+
import type { IModelClassRecord } from '../onion/model.ts';
|
|
3
|
+
import type { TypeDtoGetResult } from './dtoGet.ts';
|
|
4
|
+
|
|
5
|
+
export interface TypeDtoSelectAndCountResult<ModelLike extends BeanModelMeta | keyof IModelClassRecord, TOptionsRelation> {
|
|
6
|
+
list: TypeDtoGetResult<ModelLike, TOptionsRelation>[];
|
|
7
|
+
total: string;
|
|
8
|
+
pageCount: number;
|
|
9
|
+
pageSize: number;
|
|
10
|
+
pageNo: number;
|
|
11
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export * from './dtoAggregate.ts';
|
|
2
|
+
export * from './dtoGet.ts';
|
|
3
|
+
export * from './dtoGroup.ts';
|
|
4
|
+
export * from './dtoListAndCount.ts';
|
|
5
|
+
export * from './dtoMutate.ts';
|
|
6
|
+
export * from './dtoQueryBase.ts';
|
|
7
|
+
export * from './dtoQueryPageBase.ts';
|
|
8
|
+
export * from './dtoSelectAndCount.ts';
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import type { PickString } from 'vona';
|
|
2
|
+
|
|
3
|
+
export type TypeEntityMeta<T, N = string> = Required<{
|
|
4
|
+
[key in keyof T]: key;
|
|
5
|
+
}> & {
|
|
6
|
+
$table: N;
|
|
7
|
+
$comment: Required<{ [key in keyof T]: string }> & { $table: string };
|
|
8
|
+
$default: Required<{ [key in keyof T]: any }>;
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
export const SymbolKeyFieldsMore = Symbol('$fieldsMore');
|
|
12
|
+
export type TypeSymbolKeyFieldsMore = typeof SymbolKeyFieldsMore;
|
|
13
|
+
|
|
14
|
+
export type TypeEntityStudentMetaSimple<T> = Omit<T, '$table' | '$comment' | '$default'>;
|
|
15
|
+
export type TypeEntityStudentMetaSimpleColumns<T> = PickString<keyof TypeEntityStudentMetaSimple<T>>;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { TableIdentity } from 'table-identity';
|
|
2
|
+
|
|
3
|
+
import { Api, v } from 'vona-module-a-openapiutils';
|
|
4
|
+
|
|
5
|
+
import { $locale } from '../.metadata/locales.ts';
|
|
6
|
+
import { EntityBaseInner } from './entityBaseInner.ts';
|
|
7
|
+
|
|
8
|
+
export class EntityBase extends EntityBaseInner {
|
|
9
|
+
@Api.field(v.order(1, 'core'), v.title($locale('TableIdentity')), v.tableIdentity())
|
|
10
|
+
id: TableIdentity;
|
|
11
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export class EntityBaseEmpty {}
|