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
package/src/lib/const.ts
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
import type { VonaApplication } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { IModelRecord } from '../types/onion/model.ts';
|
|
4
|
+
import type { TypeModelClassLikeGeneral } from '../types/relations.ts';
|
|
5
|
+
|
|
6
|
+
export const SymbolCacheModelsClear = Symbol('SymbolCacheModelsClearAll');
|
|
7
|
+
export const SymbolCacheModelCacheInstances = Symbol('SymbolCacheModelCacheInstances');
|
|
8
|
+
|
|
9
|
+
export function clearAllCacheModelsClear(app: VonaApplication) {
|
|
10
|
+
delete app.meta[SymbolCacheModelsClear];
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
export async function clearCacheModelCacheInstance(app: VonaApplication, beanFullName: string) {
|
|
14
|
+
const cacheModelCacheInstances = getCacheModelCacheInstances(app);
|
|
15
|
+
const instances = cacheModelCacheInstances[beanFullName];
|
|
16
|
+
if (!instances) return;
|
|
17
|
+
delete cacheModelCacheInstances[beanFullName];
|
|
18
|
+
for (const cacheName in instances) {
|
|
19
|
+
await app.bean._removeBean(instances[cacheName]);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function getCacheModelCacheInstances(app: VonaApplication) {
|
|
24
|
+
if (!app.meta[SymbolCacheModelCacheInstances]) app.meta[SymbolCacheModelCacheInstances] = {};
|
|
25
|
+
return app.meta[SymbolCacheModelCacheInstances];
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export function getCacheModelsClear(app: VonaApplication): Record<keyof IModelRecord, TypeModelClassLikeGeneral[]> {
|
|
29
|
+
if (!app.meta[SymbolCacheModelsClear]) {
|
|
30
|
+
app.meta[SymbolCacheModelsClear] = _collectModelsClear(app);
|
|
31
|
+
}
|
|
32
|
+
return app.meta[SymbolCacheModelsClear];
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
function _collectModelsClear(app: VonaApplication) {
|
|
36
|
+
const modelsClearAll: Record<keyof IModelRecord, TypeModelClassLikeGeneral[]> = {} as any;
|
|
37
|
+
const onionSlices = app.bean.onion.model.getOnionsEnabledCached();
|
|
38
|
+
for (const onionSlice of onionSlices) {
|
|
39
|
+
const modelName = onionSlice.name;
|
|
40
|
+
if (!modelsClearAll[modelName]) modelsClearAll[modelName] = [];
|
|
41
|
+
//
|
|
42
|
+
const modelsClear = onionSlice.beanOptions.options?.cache?.modelsClear;
|
|
43
|
+
if (modelsClear) {
|
|
44
|
+
const modelsClear2 = Array.isArray(modelsClear) ? modelsClear : [modelsClear];
|
|
45
|
+
modelsClearAll[modelName].push(...modelsClear2);
|
|
46
|
+
}
|
|
47
|
+
//
|
|
48
|
+
const modelsClearedBy = onionSlice.beanOptions.options?.cache?.modelsClearedBy;
|
|
49
|
+
if (modelsClearedBy) {
|
|
50
|
+
const modelsClearedBy2 = Array.isArray(modelsClearedBy) ? modelsClearedBy : [modelsClearedBy];
|
|
51
|
+
for (const modelName2 of modelsClearedBy2) {
|
|
52
|
+
if (!modelsClearAll[modelName2]) modelsClearAll[modelName2] = [];
|
|
53
|
+
modelsClearAll[modelName2].push(modelName);
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
return modelsClearAll;
|
|
58
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { createBeanDecorator } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { IDecoratorDatabaseDialectOptions } from '../types/index.ts';
|
|
4
|
+
|
|
5
|
+
export function DatabaseDialect<T extends IDecoratorDatabaseDialectOptions>(options?: T): ClassDecorator {
|
|
6
|
+
return createBeanDecorator('databaseDialect', options);
|
|
7
|
+
}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { DtoAggregate } from './dtoAggregate.ts';
|
|
2
|
+
import { DtoCreate } from './dtoCreate.ts';
|
|
3
|
+
import { DtoGet } from './dtoGet.ts';
|
|
4
|
+
import { DtoGroup } from './dtoGroup.ts';
|
|
5
|
+
import { DtoListAndCount } from './dtoListAndCount.ts';
|
|
6
|
+
import { DtoQuery } from './dtoQuery.ts';
|
|
7
|
+
import { DtoQueryPage } from './dtoQueryPage.ts';
|
|
8
|
+
import { DtoSelectAndCount } from './dtoSelectAndCount.ts';
|
|
9
|
+
import { DtoUpdate } from './dtoUpdate.ts';
|
|
10
|
+
|
|
11
|
+
export const $Dto = {
|
|
12
|
+
create: DtoCreate,
|
|
13
|
+
update: DtoUpdate,
|
|
14
|
+
get: DtoGet,
|
|
15
|
+
aggregate: DtoAggregate,
|
|
16
|
+
group: DtoGroup,
|
|
17
|
+
query: DtoQuery,
|
|
18
|
+
queryPage: DtoQueryPage,
|
|
19
|
+
selectAndCount: DtoSelectAndCount,
|
|
20
|
+
listAndCount: DtoListAndCount,
|
|
21
|
+
};
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { ensureArray } from '@cabloy/utils';
|
|
4
|
+
import { Api, v } from 'vona-module-a-openapiutils';
|
|
5
|
+
import z from 'zod';
|
|
6
|
+
|
|
7
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
8
|
+
import type { TypeDtoAggrResult } from '../../types/dto/dtoAggregate.ts';
|
|
9
|
+
import type { TypeModelSelectAggrParamsAggrs } from '../../types/modelAggr.ts';
|
|
10
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
11
|
+
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
12
|
+
|
|
13
|
+
export function DtoAggregate<
|
|
14
|
+
Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
|
|
15
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
16
|
+
>(
|
|
17
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
18
|
+
aggrs: Aggrs,
|
|
19
|
+
): Constructable<TypeDtoAggrResult<Aggrs>> {
|
|
20
|
+
return _DtoAggregate_raw(modelLike, aggrs);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
function _DtoAggregate_raw<
|
|
24
|
+
Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
|
|
25
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
26
|
+
>(
|
|
27
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
28
|
+
aggrs: Aggrs,
|
|
29
|
+
): Constructable<TypeDtoAggrResult<Aggrs>> {
|
|
30
|
+
abstract class TargetClass {}
|
|
31
|
+
return _DtoAggregate_inner(TargetClass as any, modelLike, aggrs);
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
export function _DtoAggregate_inner<
|
|
35
|
+
Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
|
|
36
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
37
|
+
>(
|
|
38
|
+
classTarget: Constructable,
|
|
39
|
+
_modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
40
|
+
aggrs: Aggrs,
|
|
41
|
+
): Constructable<TypeDtoAggrResult<Aggrs>> {
|
|
42
|
+
for (const key in aggrs) {
|
|
43
|
+
const columns = ensureArray(aggrs[key]);
|
|
44
|
+
if (!columns) continue;
|
|
45
|
+
for (const column of columns) {
|
|
46
|
+
const column2 = `${key}_${column === '*' ? 'all' : column}`;
|
|
47
|
+
Api.field(v.optional(), z.string())(classTarget.prototype, column2);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
return classTarget as any;
|
|
51
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
4
|
+
import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
|
|
5
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
|
+
|
|
7
|
+
import { _DtoMutate_raw } from './dtoMutate.ts';
|
|
8
|
+
|
|
9
|
+
export function DtoCreate<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoMutateParams<ModelLike> | undefined = undefined>(
|
|
10
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
11
|
+
params?: T,
|
|
12
|
+
): Constructable<TypeDtoMutateResult<ModelLike, T, 'create', 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt', true>> {
|
|
13
|
+
return _DtoMutate_raw(modelLike, params, 'create', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] as any, true, undefined);
|
|
14
|
+
}
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { ensureArray, hashkey } from '@cabloy/utils';
|
|
4
|
+
import { $Class, appResource } from 'vona';
|
|
5
|
+
import { addSchemaDynamic, Api, getSchemaDynamic, SymbolSchemaDynamicRefId, v } from 'vona-module-a-openapiutils';
|
|
6
|
+
import z from 'zod';
|
|
7
|
+
|
|
8
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
9
|
+
import type { IDtoGetParams, TypeDtoGetResult } from '../../types/dto/dtoGet.ts';
|
|
10
|
+
import type { TypeDtoMutateType } from '../../types/dto/dtoMutate.ts';
|
|
11
|
+
import type { IModelRelationIncludeWrapper } from '../../types/model.ts';
|
|
12
|
+
import type { IDecoratorModelOptions, IModelClassRecord } from '../../types/onion/model.ts';
|
|
13
|
+
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
14
|
+
|
|
15
|
+
import { getClassEntityFromClassModel, prepareClassModel, prepareColumns } from '../../common/utils.ts';
|
|
16
|
+
import { handleRelationsCollection } from '../utils.ts';
|
|
17
|
+
import { DtoAggregate } from './dtoAggregate.ts';
|
|
18
|
+
import { DtoGroup } from './dtoGroup.ts';
|
|
19
|
+
import { _DtoMutate_raw } from './dtoMutate.ts';
|
|
20
|
+
|
|
21
|
+
export function DtoGet<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoGetParams<ModelLike> | undefined = undefined>(
|
|
22
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
23
|
+
params?: T,
|
|
24
|
+
): Constructable<TypeDtoGetResult<ModelLike, T>> {
|
|
25
|
+
return _DtoGet_raw(modelLike, params);
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
function _DtoGet_raw<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoGetParams<ModelLike> | undefined = undefined>(
|
|
29
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
30
|
+
params?: T,
|
|
31
|
+
): Constructable<TypeDtoGetResult<ModelLike, T>> {
|
|
32
|
+
// model
|
|
33
|
+
const modelClass = prepareClassModel(modelLike);
|
|
34
|
+
// entity
|
|
35
|
+
let entityClass = getClassEntityFromClassModel(modelClass);
|
|
36
|
+
// columns
|
|
37
|
+
const columns = prepareColumns(params?.columns);
|
|
38
|
+
// always create a new class, no matter if columns empty
|
|
39
|
+
entityClass = $Class.pick(entityClass, columns as any);
|
|
40
|
+
// relations
|
|
41
|
+
_DtoGet_relations(modelClass, entityClass, params as any);
|
|
42
|
+
return entityClass as any;
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
export function _DtoGet_relations<TRecord extends {}, TModel extends BeanModelMeta>(
|
|
46
|
+
modelClass: Constructable<TModel>,
|
|
47
|
+
entityClass: Constructable<TRecord>,
|
|
48
|
+
includeWrapper?: IModelRelationIncludeWrapper,
|
|
49
|
+
mutateTypeTopLevel?: TypeDtoMutateType,
|
|
50
|
+
) {
|
|
51
|
+
// relations
|
|
52
|
+
const relations = _DtoGet_relations_collection(modelClass, includeWrapper);
|
|
53
|
+
if (!relations) return;
|
|
54
|
+
for (const relation of relations) {
|
|
55
|
+
_DtoGet_relation_handle(entityClass, relation, mutateTypeTopLevel);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
function _DtoGet_relation_handle<TRecord extends {}>(
|
|
60
|
+
entityClass: Constructable<TRecord>,
|
|
61
|
+
relation: [string, any, any, any, boolean],
|
|
62
|
+
mutateTypeTopLevel?: TypeDtoMutateType,
|
|
63
|
+
) {
|
|
64
|
+
const [relationName, relationReal, includeReal, withReal, autoload] = relation;
|
|
65
|
+
const { type, model, options } = relationReal;
|
|
66
|
+
const modelTarget = prepareClassModel(model);
|
|
67
|
+
const optionsReal = Object.assign({}, options, { include: includeReal, with: withReal });
|
|
68
|
+
if (mutateTypeTopLevel) {
|
|
69
|
+
if (type === 'belongsTo') {
|
|
70
|
+
// donot mutate
|
|
71
|
+
return;
|
|
72
|
+
}
|
|
73
|
+
let schema;
|
|
74
|
+
if (type === 'belongsToMany') {
|
|
75
|
+
schema = v.array(z.object({ id: v.tableIdentity()(), deleted: z.boolean().optional() }));
|
|
76
|
+
} else if (type === 'hasOne') {
|
|
77
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
78
|
+
schema = v.lazy(v.visible(false), schemaLazy);
|
|
79
|
+
// optional = true;
|
|
80
|
+
} else {
|
|
81
|
+
// hasMany
|
|
82
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
83
|
+
schema = v.array(v.lazy(schemaLazy));
|
|
84
|
+
}
|
|
85
|
+
Api.field(v.optional(), schema)(entityClass.prototype, relationName);
|
|
86
|
+
} else {
|
|
87
|
+
const schemaLazy = _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel, relation);
|
|
88
|
+
let schema;
|
|
89
|
+
let optional = false;
|
|
90
|
+
if (type === 'hasOne' || type === 'belongsTo') {
|
|
91
|
+
schema = v.lazy(v.visible(false), schemaLazy);
|
|
92
|
+
optional = true;
|
|
93
|
+
} else {
|
|
94
|
+
if (optionsReal.groups) {
|
|
95
|
+
schema = v.array(v.lazy(schemaLazy));
|
|
96
|
+
} else if (optionsReal.aggrs) {
|
|
97
|
+
schema = v.lazy(schemaLazy);
|
|
98
|
+
optional = true;
|
|
99
|
+
} else {
|
|
100
|
+
schema = v.array(v.lazy(schemaLazy));
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
if (optional) {
|
|
104
|
+
Api.field(v.optional(), schema)(entityClass.prototype, relationName);
|
|
105
|
+
} else {
|
|
106
|
+
Api.field(schema)(entityClass.prototype, relationName);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
function _DtoGet_relation_handle_schemaLazy(modelTarget, optionsReal, autoload, mutateTypeTopLevel?: TypeDtoMutateType, relation?: IRelationItem) {
|
|
112
|
+
return () => {
|
|
113
|
+
if (!autoload) {
|
|
114
|
+
return _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
115
|
+
}
|
|
116
|
+
// dynamic
|
|
117
|
+
const entityClass = getClassEntityFromClassModel(modelTarget);
|
|
118
|
+
const beanFullName = appResource.getBeanFullName(entityClass);
|
|
119
|
+
const _hashkey = _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLevel);
|
|
120
|
+
const dynamicName = `${beanFullName}_${_hashkey}`;
|
|
121
|
+
let entityTarget = getSchemaDynamic(dynamicName);
|
|
122
|
+
if (!entityTarget) {
|
|
123
|
+
entityTarget = _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel, relation);
|
|
124
|
+
entityTarget[SymbolSchemaDynamicRefId] = dynamicName;
|
|
125
|
+
addSchemaDynamic(dynamicName, entityTarget);
|
|
126
|
+
}
|
|
127
|
+
return entityTarget;
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function _DtoGet_relation_handle_schemaLazy_raw(modelTarget, optionsReal, mutateTypeTopLevel?: TypeDtoMutateType, relation?: IRelationItem) {
|
|
132
|
+
if (mutateTypeTopLevel) {
|
|
133
|
+
return _DtoMutate_raw(modelTarget, optionsReal, mutateTypeTopLevel, undefined, false, relation); // columnsOmitDefault: undefined
|
|
134
|
+
} else {
|
|
135
|
+
if (optionsReal.groups) {
|
|
136
|
+
return DtoGroup(modelTarget, optionsReal.groups, optionsReal.aggrs, optionsReal.columns);
|
|
137
|
+
} else if (optionsReal.aggrs) {
|
|
138
|
+
return DtoAggregate(modelTarget, optionsReal.aggrs);
|
|
139
|
+
} else {
|
|
140
|
+
return _DtoGet_raw(modelTarget, optionsReal);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
function _DtoGet_relation_handle_schemaLazy_hashkey(optionsReal, mutateTypeTopLevel?: TypeDtoMutateType) {
|
|
146
|
+
const columns = prepareColumns(optionsReal.columns);
|
|
147
|
+
const aggrs = ensureArray(optionsReal.aggrs);
|
|
148
|
+
const groups = ensureArray(optionsReal.groups);
|
|
149
|
+
return columns || aggrs || groups || mutateTypeTopLevel ? hashkey({ columns, aggrs, groups, mutate: mutateTypeTopLevel }) : 'none';
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
function _DtoGet_relations_collection<TModel extends BeanModelMeta>(
|
|
153
|
+
modelClass: Constructable<TModel>,
|
|
154
|
+
includeWrapper?: IModelRelationIncludeWrapper,
|
|
155
|
+
) {
|
|
156
|
+
const beanOptions = appResource.getBean(modelClass);
|
|
157
|
+
const options = beanOptions?.options as IDecoratorModelOptions | undefined;
|
|
158
|
+
return handleRelationsCollection(options?.relations, includeWrapper);
|
|
159
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { ensureArray } from '@cabloy/utils';
|
|
4
|
+
import { PickClassInner } from 'vona';
|
|
5
|
+
|
|
6
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
7
|
+
import type { TypeDtoGroupResult } from '../../types/dto/dtoGroup.ts';
|
|
8
|
+
import type { TypeModelSelectAggrParamsAggrs } from '../../types/modelAggr.ts';
|
|
9
|
+
import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
|
10
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
11
|
+
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
12
|
+
|
|
13
|
+
import { getClassEntityFromClassModel, prepareClassModel } from '../../common/utils.ts';
|
|
14
|
+
import { _DtoAggregate_inner } from './dtoAggregate.ts';
|
|
15
|
+
|
|
16
|
+
export function DtoGroup<
|
|
17
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
18
|
+
Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
|
|
19
|
+
Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined,
|
|
20
|
+
Columns extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined,
|
|
21
|
+
>(
|
|
22
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
23
|
+
groups: Groups,
|
|
24
|
+
aggrs?: Aggrs,
|
|
25
|
+
columns?: Columns,
|
|
26
|
+
): Constructable<TypeDtoGroupResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], Aggrs, Groups, Columns>> {
|
|
27
|
+
return _DtoGroup_raw(modelLike, groups, aggrs, columns);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
function _DtoGroup_raw<
|
|
31
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
32
|
+
Groups extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]>,
|
|
33
|
+
Aggrs extends TypeModelSelectAggrParamsAggrs<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined,
|
|
34
|
+
Columns extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined,
|
|
35
|
+
>(
|
|
36
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
37
|
+
groups: Groups,
|
|
38
|
+
aggrs?: Aggrs,
|
|
39
|
+
columns?: Columns,
|
|
40
|
+
): Constructable<TypeDtoGroupResult<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity], Aggrs, Groups, Columns>> {
|
|
41
|
+
abstract class TargetClass {}
|
|
42
|
+
// model
|
|
43
|
+
const modelClass = prepareClassModel(modelLike);
|
|
44
|
+
// entity
|
|
45
|
+
const entityClass = getClassEntityFromClassModel(modelClass);
|
|
46
|
+
// columns/groups
|
|
47
|
+
const displays = ensureArray(columns ?? groups);
|
|
48
|
+
if (displays) {
|
|
49
|
+
PickClassInner(TargetClass as any, entityClass, displays as any);
|
|
50
|
+
}
|
|
51
|
+
// aggrs
|
|
52
|
+
if (aggrs) {
|
|
53
|
+
_DtoAggregate_inner(TargetClass as any, modelLike, aggrs);
|
|
54
|
+
}
|
|
55
|
+
// ok
|
|
56
|
+
return TargetClass as any;
|
|
57
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { Api, v } from 'vona-module-a-openapiutils';
|
|
4
|
+
import z from 'zod';
|
|
5
|
+
|
|
6
|
+
import type { TypeDtoListAndCountResult } from '../../types/dto/dtoListAndCount.ts';
|
|
7
|
+
|
|
8
|
+
export function DtoListAndCount<T>(classRef: Constructable<T>): Constructable<TypeDtoListAndCountResult<T>> {
|
|
9
|
+
abstract class TargetClass {}
|
|
10
|
+
Api.field(v.array(classRef))(TargetClass.prototype, 'list');
|
|
11
|
+
Api.field(z.string())(TargetClass.prototype, 'total');
|
|
12
|
+
Api.field(z.number())(TargetClass.prototype, 'pageCount');
|
|
13
|
+
Api.field(z.number())(TargetClass.prototype, 'pageSize');
|
|
14
|
+
Api.field(z.number())(TargetClass.prototype, 'pageNo');
|
|
15
|
+
return TargetClass as any;
|
|
16
|
+
}
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { mutate } from 'mutate-on-copy';
|
|
4
|
+
import { $Class } from 'vona';
|
|
5
|
+
|
|
6
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
7
|
+
import type { IDtoMutateParams, TypeDtoMutateResult, TypeDtoMutateType } from '../../types/dto/dtoMutate.ts';
|
|
8
|
+
import type { TypeModelColumnsStrict } from '../../types/modelWhere.ts';
|
|
9
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
10
|
+
import type { TypeModelOfModelLike, TypeSymbolKeyEntity } from '../../types/relations.ts';
|
|
11
|
+
import type { IRelationItem } from '../../types/relationsDef.ts';
|
|
12
|
+
|
|
13
|
+
import { getClassEntityFromClassModel, prepareClassModel, prepareColumns } from '../../common/utils.ts';
|
|
14
|
+
import { _DtoGet_relations } from './dtoGet.ts';
|
|
15
|
+
|
|
16
|
+
export function DtoMutate<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoMutateParams<ModelLike> | undefined = undefined>(
|
|
17
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
18
|
+
params?: T,
|
|
19
|
+
): Constructable<TypeDtoMutateResult<ModelLike, T, 'mutate', undefined, true>> {
|
|
20
|
+
return _DtoMutate_raw(modelLike, params, 'mutate', undefined, true, undefined);
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export function _DtoMutate_raw<
|
|
24
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
25
|
+
T extends IDtoMutateParams<ModelLike> | undefined = undefined,
|
|
26
|
+
ColumnsOmitDefault extends TypeModelColumnsStrict<TypeModelOfModelLike<ModelLike>[TypeSymbolKeyEntity]> | undefined = undefined,
|
|
27
|
+
>(
|
|
28
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
29
|
+
params?: T,
|
|
30
|
+
mutateTypeTopLevel?: TypeDtoMutateType,
|
|
31
|
+
columnsOmitDefault?: ColumnsOmitDefault,
|
|
32
|
+
topLevel?: boolean,
|
|
33
|
+
relation?: IRelationItem,
|
|
34
|
+
) {
|
|
35
|
+
// model
|
|
36
|
+
const modelClass = prepareClassModel(modelLike);
|
|
37
|
+
// entity
|
|
38
|
+
let entityClass = getClassEntityFromClassModel(modelClass);
|
|
39
|
+
// columns
|
|
40
|
+
let columns = prepareColumns(params?.columns);
|
|
41
|
+
if (columns) {
|
|
42
|
+
if (!topLevel) {
|
|
43
|
+
if (mutateTypeTopLevel === 'create') {
|
|
44
|
+
for (const key of ['deleted', 'id']) {
|
|
45
|
+
const index = columns.indexOf(key as any);
|
|
46
|
+
if (index > -1) {
|
|
47
|
+
columns = mutate(columns, copyState => {
|
|
48
|
+
copyState.splice(index, 1);
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
} else {
|
|
53
|
+
for (const key of ['deleted', 'id']) {
|
|
54
|
+
if (!columns.includes(key as any)) {
|
|
55
|
+
columns = mutate(columns, copyState => {
|
|
56
|
+
copyState.unshift(key as any);
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
entityClass = $Class.pick(entityClass, columns);
|
|
63
|
+
} else {
|
|
64
|
+
const columns =
|
|
65
|
+
columnsOmitDefault ??
|
|
66
|
+
(mutateTypeTopLevel === 'create' ? ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] : ['iid', 'createdAt', 'updatedAt']);
|
|
67
|
+
entityClass = $Class.omit(entityClass, prepareColumns(columns as any) as any);
|
|
68
|
+
}
|
|
69
|
+
if (!topLevel && mutateTypeTopLevel !== 'create') {
|
|
70
|
+
entityClass = $Class.partial(entityClass, ['id', 'deleted'] as any);
|
|
71
|
+
}
|
|
72
|
+
if (!topLevel && relation) {
|
|
73
|
+
const [_relationName, relationReal] = relation;
|
|
74
|
+
const { type, key } = relationReal;
|
|
75
|
+
if (type === 'hasOne' || type === 'hasMany') {
|
|
76
|
+
entityClass = $Class.omit(entityClass, key);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
// relations
|
|
80
|
+
_DtoGet_relations(modelClass, entityClass, params as any, mutateTypeTopLevel);
|
|
81
|
+
return entityClass as any;
|
|
82
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { $Class } from 'vona';
|
|
4
|
+
|
|
5
|
+
import { DtoQueryBase } from '../../types/dto/dtoQueryBase.ts';
|
|
6
|
+
|
|
7
|
+
export function DtoQuery<T, K extends keyof T>(classRef: Constructable<T>, keys: K[]) {
|
|
8
|
+
return $Class.mixin(DtoQueryBase, $Class.partial($Class.pick(classRef, keys)));
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import { $Class } from 'vona';
|
|
4
|
+
|
|
5
|
+
import { DtoQueryPageBase } from '../../types/dto/dtoQueryPageBase.ts';
|
|
6
|
+
|
|
7
|
+
export function DtoQueryPage<T, KEYS extends Array<keyof T>>(classRef: Constructable<T>, keys: KEYS) {
|
|
8
|
+
return $Class.mixin(DtoQueryPageBase, $Class.partial($Class.pick(classRef, keys)));
|
|
9
|
+
}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
4
|
+
import type { IDtoGetParams } from '../../types/dto/dtoGet.ts';
|
|
5
|
+
import type { TypeDtoSelectAndCountResult } from '../../types/dto/dtoSelectAndCount.ts';
|
|
6
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
7
|
+
|
|
8
|
+
import { DtoGet } from './dtoGet.ts';
|
|
9
|
+
import { DtoListAndCount } from './dtoListAndCount.ts';
|
|
10
|
+
|
|
11
|
+
export function DtoSelectAndCount<
|
|
12
|
+
ModelLike extends BeanModelMeta | keyof IModelClassRecord,
|
|
13
|
+
T extends IDtoGetParams<ModelLike> | undefined = undefined,
|
|
14
|
+
>(
|
|
15
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
16
|
+
params?: T,
|
|
17
|
+
): Constructable<TypeDtoSelectAndCountResult<ModelLike, T>> {
|
|
18
|
+
const DtoGetResult = DtoGet(modelLike, params);
|
|
19
|
+
return DtoListAndCount(DtoGetResult);
|
|
20
|
+
}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Constructable } from 'vona';
|
|
2
|
+
|
|
3
|
+
import type { BeanModelMeta } from '../../bean/bean.model/bean.model_meta.ts';
|
|
4
|
+
import type { IDtoMutateParams, TypeDtoMutateResult } from '../../types/dto/dtoMutate.ts';
|
|
5
|
+
import type { IModelClassRecord } from '../../types/onion/model.ts';
|
|
6
|
+
|
|
7
|
+
import { _DtoMutate_raw } from './dtoMutate.ts';
|
|
8
|
+
|
|
9
|
+
export function DtoUpdate<ModelLike extends BeanModelMeta | keyof IModelClassRecord, T extends IDtoMutateParams<ModelLike> | undefined = undefined>(
|
|
10
|
+
modelLike: ModelLike extends BeanModelMeta ? (() => Constructable<ModelLike>) | Constructable<ModelLike> : ModelLike,
|
|
11
|
+
params?: T,
|
|
12
|
+
): Constructable<TypeDtoMutateResult<ModelLike, T, 'update', 'id' | 'iid' | 'deleted' | 'createdAt' | 'updatedAt', true>> {
|
|
13
|
+
return _DtoMutate_raw(modelLike, params, 'update', ['id', 'iid', 'deleted', 'createdAt', 'updatedAt'] as any, true, undefined);
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
// not use Partial/$Class.partial, for form render at frontend
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './dto.ts';
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { createBeanDecorator } from 'vona';
|
|
2
|
+
import { mergeFieldsOpenapiMetadata } from 'vona-module-a-openapiutils';
|
|
3
|
+
|
|
4
|
+
import type { IDecoratorEntityOptions } from '../types/onion/entity.ts';
|
|
5
|
+
|
|
6
|
+
// const __tableNames = new Set();
|
|
7
|
+
|
|
8
|
+
export function Entity<T extends IDecoratorEntityOptions<any>>(options?: T): ClassDecorator;
|
|
9
|
+
export function Entity<T extends IDecoratorEntityOptions<any>>(table?: string, options?: Omit<T, 'table'>): ClassDecorator;
|
|
10
|
+
export function Entity<T extends IDecoratorEntityOptions<any>>(table?: T | string, options?: T): ClassDecorator {
|
|
11
|
+
if (typeof table === 'string') {
|
|
12
|
+
options = Object.assign({}, options, { table });
|
|
13
|
+
} else {
|
|
14
|
+
options = table || ({} as any);
|
|
15
|
+
}
|
|
16
|
+
// // tableName
|
|
17
|
+
// const tableName = options.table;
|
|
18
|
+
// if (__tableNames.has(tableName)) {
|
|
19
|
+
// throw new Error(`entity table exists: ${tableName}`);
|
|
20
|
+
// }
|
|
21
|
+
// __tableNames.add(tableName);
|
|
22
|
+
return createBeanDecorator('entity', options, false, target => {
|
|
23
|
+
mergeFieldsOpenapiMetadata(target);
|
|
24
|
+
});
|
|
25
|
+
}
|
package/src/lib/index.ts
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './const.ts';
|
|
2
|
+
export * from './databaseDialect.ts';
|
|
3
|
+
export * from './dto/index.ts';
|
|
4
|
+
export * from './entity.ts';
|
|
5
|
+
export * from './model.ts';
|
|
6
|
+
export * from './relations.ts';
|
|
7
|
+
export * from './relationsDynamic.ts';
|
|
8
|
+
export * from './relationsMutate.ts';
|
|
9
|
+
export * from './relationsStatic.ts';
|
package/src/lib/model.ts
ADDED