cabloy 5.1.50 → 5.1.51
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/.claude/skills/cabloy-backend-scaffold/SKILL.md +207 -0
- package/.claude/skills/cabloy-backend-scaffold/evals/evals.json +29 -0
- package/.claude/skills/cabloy-backend-scaffold/references/backend-thread-map.md +52 -0
- package/.claude/skills/cabloy-backend-scaffold/references/follow-up-checklist.md +39 -0
- package/.claude/skills/cabloy-contract-loop/SKILL.md +201 -0
- package/.claude/skills/cabloy-contract-loop/evals/evals.json +29 -0
- package/.claude/skills/cabloy-contract-loop/references/contract-loop-map.md +47 -0
- package/.claude/skills/cabloy-contract-loop/references/verification-checklist.md +32 -0
- package/.claude/skills/cabloy-frontend-scaffold/SKILL.md +230 -0
- package/.claude/skills/cabloy-frontend-scaffold/evals/evals.json +35 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/follow-up-checklist.md +41 -0
- package/.claude/skills/cabloy-frontend-scaffold/references/frontend-thread-map.md +54 -0
- package/.claude/skills/cabloy-workflow/SKILL.md +288 -0
- package/.claude/skills/cabloy-workflow/evals/evals.json +35 -0
- package/.claude/skills/cabloy-workflow/references/cli-strategy.md +39 -0
- package/.claude/skills/cabloy-workflow/references/edition-detection.md +29 -0
- package/.github/workflows/docs-pages.yml +54 -0
- package/.gitignore +1 -0
- package/CHANGELOG.md +29 -0
- package/CLAUDE.md +59 -0
- package/README.md +137 -0
- package/cabloy-docs/.vitepress/config.mjs +222 -0
- package/cabloy-docs/.vitepress/public/CNAME +1 -0
- package/cabloy-docs/.vitepress/theme/custom.css +64 -0
- package/cabloy-docs/.vitepress/theme/edition-badges.md +5 -0
- package/cabloy-docs/.vitepress/theme/index.js +5 -0
- package/cabloy-docs/ai/class-placement-rule.md +138 -0
- package/cabloy-docs/ai/cli-for-agents.md +56 -0
- package/cabloy-docs/ai/cli-to-skill-map.md +165 -0
- package/cabloy-docs/ai/docs-skills-rules-mapping.md +167 -0
- package/cabloy-docs/ai/edition-detection.md +30 -0
- package/cabloy-docs/ai/future-skill-roadmap.md +135 -0
- package/cabloy-docs/ai/global-bean-lookup.md +157 -0
- package/cabloy-docs/ai/introduction.md +62 -0
- package/cabloy-docs/ai/playbook-backend-module.md +111 -0
- package/cabloy-docs/ai/playbook-contract-regeneration.md +100 -0
- package/cabloy-docs/ai/playbook-frontend-page.md +99 -0
- package/cabloy-docs/ai/playbook-metadata-refresh.md +67 -0
- package/cabloy-docs/ai/repo-guidance.md +58 -0
- package/cabloy-docs/ai/rules-and-config.md +29 -0
- package/cabloy-docs/ai/skills.md +35 -0
- package/cabloy-docs/ai/verification.md +30 -0
- package/cabloy-docs/backend/aop-overview.md +128 -0
- package/cabloy-docs/backend/auth-guide.md +151 -0
- package/cabloy-docs/backend/backend-essentials.md +128 -0
- package/cabloy-docs/backend/broadcast-guide.md +138 -0
- package/cabloy-docs/backend/cache-guide.md +70 -0
- package/cabloy-docs/backend/captcha-guide.md +162 -0
- package/cabloy-docs/backend/cli.md +173 -0
- package/cabloy-docs/backend/config-guide.md +249 -0
- package/cabloy-docs/backend/controller-aop-guide.md +270 -0
- package/cabloy-docs/backend/controller-guide.md +347 -0
- package/cabloy-docs/backend/crud-workflow.md +118 -0
- package/cabloy-docs/backend/dto-guide.md +161 -0
- package/cabloy-docs/backend/dto-infer-generation.md +153 -0
- package/cabloy-docs/backend/dynamic-datasource-guide.md +70 -0
- package/cabloy-docs/backend/election-guide.md +141 -0
- package/cabloy-docs/backend/entity-guide.md +150 -0
- package/cabloy-docs/backend/error-guide.md +108 -0
- package/cabloy-docs/backend/event-guide.md +183 -0
- package/cabloy-docs/backend/external-aop-guide.md +149 -0
- package/cabloy-docs/backend/field-indexes.md +79 -0
- package/cabloy-docs/backend/foundation.md +281 -0
- package/cabloy-docs/backend/i18n-guide.md +211 -0
- package/cabloy-docs/backend/internal-aop-guide.md +181 -0
- package/cabloy-docs/backend/introduction.md +95 -0
- package/cabloy-docs/backend/jwt-guide.md +276 -0
- package/cabloy-docs/backend/logger-guide.md +223 -0
- package/cabloy-docs/backend/mail-guide.md +189 -0
- package/cabloy-docs/backend/menu-guide.md +80 -0
- package/cabloy-docs/backend/migration-and-changes.md +192 -0
- package/cabloy-docs/backend/model-guide.md +274 -0
- package/cabloy-docs/backend/multi-database-datasource.md +171 -0
- package/cabloy-docs/backend/multi-instance-and-instance-resolution.md +196 -0
- package/cabloy-docs/backend/openapi-guide.md +118 -0
- package/cabloy-docs/backend/orm-aggregate-group-guide.md +210 -0
- package/cabloy-docs/backend/orm-configuration-guide.md +165 -0
- package/cabloy-docs/backend/orm-guide.md +109 -0
- package/cabloy-docs/backend/orm-mutation-guide.md +195 -0
- package/cabloy-docs/backend/orm-select-guide.md +243 -0
- package/cabloy-docs/backend/queue-guide.md +271 -0
- package/cabloy-docs/backend/quickstart.md +141 -0
- package/cabloy-docs/backend/redis-guide.md +70 -0
- package/cabloy-docs/backend/redlock-guide.md +60 -0
- package/cabloy-docs/backend/relations-guide.md +250 -0
- package/cabloy-docs/backend/runtime-and-flavors.md +304 -0
- package/cabloy-docs/backend/schedule-guide.md +81 -0
- package/cabloy-docs/backend/scripts.md +116 -0
- package/cabloy-docs/backend/serialization-guide.md +192 -0
- package/cabloy-docs/backend/service-guide.md +166 -0
- package/cabloy-docs/backend/sharding-guide.md +49 -0
- package/cabloy-docs/backend/startup-guide.md +326 -0
- package/cabloy-docs/backend/transaction-guide.md +82 -0
- package/cabloy-docs/backend/unit-testing.md +209 -0
- package/cabloy-docs/backend/upload-guide.md +160 -0
- package/cabloy-docs/backend/user-access-guide.md +157 -0
- package/cabloy-docs/backend/validation-guide.md +80 -0
- package/cabloy-docs/backend/worker-guide.md +59 -0
- package/cabloy-docs/editions/cabloy-basic.md +25 -0
- package/cabloy-docs/editions/cabloy-start.md +24 -0
- package/cabloy-docs/editions/detection.md +31 -0
- package/cabloy-docs/editions/overview.md +44 -0
- package/cabloy-docs/frontend/api-guide.md +93 -0
- package/cabloy-docs/frontend/api-schema-guide.md +43 -0
- package/cabloy-docs/frontend/app-startup-guide.md +185 -0
- package/cabloy-docs/frontend/cli.md +78 -0
- package/cabloy-docs/frontend/component-guide.md +105 -0
- package/cabloy-docs/frontend/component-props-guide.md +97 -0
- package/cabloy-docs/frontend/component-v-model-guide.md +110 -0
- package/cabloy-docs/frontend/css-in-js-guide.md +151 -0
- package/cabloy-docs/frontend/design-principles.md +55 -0
- package/cabloy-docs/frontend/environment-config-guide.md +250 -0
- package/cabloy-docs/frontend/foundation.md +57 -0
- package/cabloy-docs/frontend/generic-component-guide.md +35 -0
- package/cabloy-docs/frontend/icon-engine-guide.md +88 -0
- package/cabloy-docs/frontend/introduction.md +32 -0
- package/cabloy-docs/frontend/ioc-and-beans.md +211 -0
- package/cabloy-docs/frontend/mock-guide.md +109 -0
- package/cabloy-docs/frontend/model-architecture.md +87 -0
- package/cabloy-docs/frontend/model-state-guide.md +70 -0
- package/cabloy-docs/frontend/module-scope.md +168 -0
- package/cabloy-docs/frontend/modules-and-suites.md +179 -0
- package/cabloy-docs/frontend/navigation-guards-guide.md +68 -0
- package/cabloy-docs/frontend/openapi-sdk-guide.md +102 -0
- package/cabloy-docs/frontend/page-guide.md +223 -0
- package/cabloy-docs/frontend/page-params-guide.md +87 -0
- package/cabloy-docs/frontend/page-query-guide.md +96 -0
- package/cabloy-docs/frontend/page-route-guide.md +147 -0
- package/cabloy-docs/frontend/quickstart.md +201 -0
- package/cabloy-docs/frontend/route-alias-guide.md +61 -0
- package/cabloy-docs/frontend/scripts.md +86 -0
- package/cabloy-docs/frontend/sdk-guide.md +45 -0
- package/cabloy-docs/frontend/server-data.md +74 -0
- package/cabloy-docs/frontend/ssr-client-only.md +40 -0
- package/cabloy-docs/frontend/ssr-env.md +51 -0
- package/cabloy-docs/frontend/ssr-init-data.md +46 -0
- package/cabloy-docs/frontend/ssr-overview.md +48 -0
- package/cabloy-docs/frontend/ssr-seo-meta.md +52 -0
- package/cabloy-docs/frontend/system-startup-guide.md +186 -0
- package/cabloy-docs/frontend/theme-guide.md +154 -0
- package/cabloy-docs/frontend/zod-guide.md +161 -0
- package/cabloy-docs/fullstack/edition-collaboration-differences.md +61 -0
- package/cabloy-docs/fullstack/frontend-metadata-to-backend.md +64 -0
- package/cabloy-docs/fullstack/introduction.md +69 -0
- package/cabloy-docs/fullstack/openapi-to-sdk.md +116 -0
- package/cabloy-docs/fullstack/quickstart.md +86 -0
- package/cabloy-docs/fullstack/vona-zova-integration.md +86 -0
- package/cabloy-docs/index.md +73 -0
- package/cabloy-docs/package.json +16 -0
- package/cabloy-docs/pnpm-lock.yaml +1607 -0
- package/cabloy-docs/reference/backend-directory-structure.md +88 -0
- package/cabloy-docs/reference/cli-reference.md +49 -0
- package/cabloy-docs/reference/glossary.md +38 -0
- package/cabloy-docs/reference/package-map.md +105 -0
- package/cabloy-docs/reference/repo-scripts.md +36 -0
- package/package.json +4 -1
- package/scripts/init.ts +12 -0
- package/scripts/upgrade.ts +31 -3
- package/vona/README.md +3 -3
- package/vona/README.zh-CN.md +4 -4
- package/vona/packages-vona/vona/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/package.json +1 -1
- package/vona/src/suite-vendor/a-cabloy/modules/a-datasharding/src/bean/summerCache.datasourceWrite.ts +2 -2
- package/vona/src/suite-vendor/a-cabloy/package.json +1 -1
- package/vona/src/suite-vendor/a-captcha/modules/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-captcha/modules/a-captcha/src/bean/cacheRedis.captcha.ts +2 -2
- package/vona/src/suite-vendor/a-captcha/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-bean/cli/bean/metadata/generate.ts +5 -6
- package/vona/src/suite-vendor/a-vona/modules/a-bean/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheMem/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/cli/cacheRedis/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/.metadata/index.ts +13 -2
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/bean/bean.cache.ts +6 -7
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheMemBase.ts → service/cacheMemBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-cache/src/{bean/bean.cacheRedisBase.ts → service/cacheRedisBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.emailConfirm.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-mailconfirm/src/bean/cacheRedis.passwordReset.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-openapi/src/bean/summerCache.json.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/cli/databaseDialect/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/.metadata/index.ts +4 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.database.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/bean.model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/bean/schedule.softDeletionPrune.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/common/utils.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_cache.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_meta.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.modelBase.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoAggregate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoCreate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/dto/dtoUpdate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/index.ts +1 -0
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/modelCacheBase.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/lib/relationsStatic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheEntity_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/cacheQuery_.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/database.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean/bean.databaseDialectBase.ts → service/databaseDialectBase_.ts} +38 -41
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/db_.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/service/relations_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/database.ts +0 -5
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoGet.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/dto/dtoSelectAndCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/model.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelAggr.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelCount.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGeneral.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelGroup.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/modelIncrement.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relations.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsColumns.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDef.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefDynamic.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsDefMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsMutate.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-orm/src/types/relationsTables.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.mysql.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.pg.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-permission/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/bean.permission.ts +109 -40
- package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-startup/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_ +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-summer/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/.metadata/index.ts +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/bean/bean.summer.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localMem_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/service/localRedis_.ts +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-summer/src/{bean/bean.summerCacheBase.ts → service/summerCacheBase_.ts} +3 -3
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.rapidoc.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-swagger/src/bean/summerCache.swagger.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-user/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-user/src/bean/cacheRedis.authToken.ts +2 -2
- package/vona/src/suite-vendor/a-vona/modules/a-worker/package.json +1 -1
- package/vona/src/suite-vendor/a-vona/modules/a-worker/src/bean/cacheRedis.workerAlive.ts +2 -2
- package/vona/src/suite-vendor/a-vona/package.json +1 -1
- package/zova/README.md +4 -4
- package/zova/README.zh-CN.md +4 -4
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_inner.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_crud_table.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_knex.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_utils.ts +0 -0
- /package/vona/src/suite-vendor/a-vona/modules/a-orm/src/{bean → lib}/bean.model/bean.model_view.ts +0 -0
|
@@ -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
|
}
|
|
@@ -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 { IModelRelationIncludeWrapper } from '../model.ts';
|
|
3
3
|
import type { TypeModelColumns } from '../modelWhere.ts';
|
|
4
4
|
import type { IModelClassRecord } from '../onion/model.ts';
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TableIdentity } from 'table-identity';
|
|
2
2
|
import type { 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';
|
|
@@ -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
|
|
|
@@ -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,
|
|
@@ -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';
|
|
@@ -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,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';
|
|
@@ -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 { TypeModelWhere } from './modelWhere.ts';
|
|
6
6
|
import type { TypeModelsClassLikeGeneral } from './relations.ts';
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { Constructable, 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 { TypeDepthPrev, TypeDepthPrevMax } from './depth.ts';
|
|
5
5
|
import type { IDecoratorModelOptions, IModelClassRecord } from './onion/model.ts';
|
|
6
6
|
import type {
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TypeConfirmArray, TypeRecordValues } 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 { IDecoratorModelOptions } from './onion/model.ts';
|
|
5
5
|
import type {
|
|
6
6
|
TypeModelOfModelLike,
|
|
@@ -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 { ServiceDb } from '../service/db_.ts';
|
|
3
3
|
import type { IDatabaseClientRecord } from './database.ts';
|
|
4
4
|
import type { TypeModelSelectAggrParamsAggrs } from './modelAggr.ts';
|
|
@@ -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 { IModelRelationIncludeWrapper } from './model.ts';
|
|
3
3
|
import type { IModelRelationOptionsMetaWrapper } from './relationsDef.ts';
|
|
4
4
|
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import type { TableIdentity } from 'table-identity';
|
|
2
2
|
import type { OmitNever } 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 { IDecoratorModelOptions } from './onion/model.ts';
|
|
6
6
|
import type {
|
|
7
7
|
TypeUtilGetModelOptions,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { TypeConfirmArray, TypeRecordValues } 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 { IDecoratorModelOptions } from './onion/model.ts';
|
|
5
5
|
import type {
|
|
6
6
|
TypeModelOfModelLike,
|
package/vona/src/suite-vendor/a-vona/modules/a-ormdialect/src/bean/databaseDialect.betterSqlite3.ts
CHANGED
|
@@ -12,12 +12,12 @@ import type {
|
|
|
12
12
|
import { ensureDir, remove } from 'fs-extra';
|
|
13
13
|
import { globby } from 'globby';
|
|
14
14
|
import path from 'node:path';
|
|
15
|
-
import {
|
|
15
|
+
import { ServiceDatabaseDialectBase, DatabaseDialect } from 'vona-module-a-orm';
|
|
16
16
|
|
|
17
17
|
export interface IDatabaseDialectOptionsBetterSqlite3 extends IDecoratorDatabaseDialectOptions {}
|
|
18
18
|
|
|
19
19
|
@DatabaseDialect<IDatabaseDialectOptionsBetterSqlite3>()
|
|
20
|
-
export class DatabaseDialectBetterSqlite3 extends
|
|
20
|
+
export class DatabaseDialectBetterSqlite3 extends ServiceDatabaseDialectBase {
|
|
21
21
|
protected _capabilities: IDatabaseDialectCapabilities = {
|
|
22
22
|
like: true,
|
|
23
23
|
ilike: false,
|
|
@@ -9,12 +9,12 @@ import type {
|
|
|
9
9
|
} from 'vona-module-a-orm';
|
|
10
10
|
|
|
11
11
|
import { promisify } from 'node:util';
|
|
12
|
-
import {
|
|
12
|
+
import { ServiceDatabaseDialectBase, DatabaseDialect } from 'vona-module-a-orm';
|
|
13
13
|
|
|
14
14
|
export interface IDatabaseDialectOptionsMysql extends IDecoratorDatabaseDialectOptions {}
|
|
15
15
|
|
|
16
16
|
@DatabaseDialect<IDatabaseDialectOptionsMysql>()
|
|
17
|
-
export class DatabaseDialectMysql extends
|
|
17
|
+
export class DatabaseDialectMysql extends ServiceDatabaseDialectBase {
|
|
18
18
|
protected _capabilities: IDatabaseDialectCapabilities = {
|
|
19
19
|
like: false,
|
|
20
20
|
ilike: true,
|
|
@@ -8,12 +8,12 @@ import type {
|
|
|
8
8
|
IFetchIndexesResultItem,
|
|
9
9
|
} from 'vona-module-a-orm';
|
|
10
10
|
|
|
11
|
-
import {
|
|
11
|
+
import { ServiceDatabaseDialectBase, DatabaseDialect } from 'vona-module-a-orm';
|
|
12
12
|
|
|
13
13
|
export interface IDatabaseDialectOptionsPg extends IDecoratorDatabaseDialectOptions {}
|
|
14
14
|
|
|
15
15
|
@DatabaseDialect<IDatabaseDialectOptionsPg>()
|
|
16
|
-
export class DatabaseDialectPg extends
|
|
16
|
+
export class DatabaseDialectPg extends ServiceDatabaseDialectBase {
|
|
17
17
|
protected _capabilities: IDatabaseDialectCapabilities = {
|
|
18
18
|
like: true,
|
|
19
19
|
ilike: true,
|
|
@@ -4,87 +4,156 @@ import type {
|
|
|
4
4
|
IOpenapiPermissions,
|
|
5
5
|
IResourceRecord,
|
|
6
6
|
} from 'vona-module-a-openapi';
|
|
7
|
-
import type {
|
|
8
|
-
|
|
9
|
-
ContextRouteBase,
|
|
10
|
-
ContextRouteMetadata,
|
|
11
|
-
IRecordResourceNameToRoutePathItem,
|
|
12
|
-
} from 'vona-module-a-web';
|
|
7
|
+
import type { IGuardOptionsPassport, IGuardOptionsRoleName } from 'vona-module-a-user';
|
|
8
|
+
import type { ContextRouteMetadata, IRecordResourceNameToRoutePathItem } from 'vona-module-a-web';
|
|
13
9
|
|
|
14
|
-
import { catchError } from '@cabloy/utils';
|
|
15
10
|
import { appMetadata, appResource, BeanBase, beanFullNameFromOnionName } from 'vona';
|
|
16
11
|
import { Bean } from 'vona-module-a-bean';
|
|
17
12
|
import { Caching } from 'vona-module-a-caching';
|
|
18
13
|
import { SymbolUseOnionOptionsRouteReal } from 'vona-module-a-onion';
|
|
19
|
-
import {
|
|
14
|
+
import { recordResourceNameToRoutePath } from 'vona-module-a-web';
|
|
15
|
+
|
|
16
|
+
const BeanFullNameGuardPassport = beanFullNameFromOnionName('a-user:passport', 'guard');
|
|
17
|
+
const BeanFullNameGuardRoleName = beanFullNameFromOnionName('a-user:roleName', 'guard');
|
|
18
|
+
const BeanFullNameGuardUserName = beanFullNameFromOnionName('a-user:userName', 'guard');
|
|
19
|
+
const BeanFullNamesGuardSupported = new Set<string>([
|
|
20
|
+
BeanFullNameGuardPassport,
|
|
21
|
+
BeanFullNameGuardRoleName,
|
|
22
|
+
BeanFullNameGuardUserName,
|
|
23
|
+
]);
|
|
24
|
+
const GuardOptionsPassportDefault: IGuardOptionsPassport = {
|
|
25
|
+
public: false,
|
|
26
|
+
activated: true,
|
|
27
|
+
checkAuthToken: true,
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type TGuardMeta = Record<string, unknown>;
|
|
20
31
|
|
|
21
32
|
@Bean()
|
|
22
33
|
export class BeanPermission extends BeanBase {
|
|
23
|
-
public async clearAllCaches() {
|
|
24
|
-
const
|
|
34
|
+
public async clearAllCaches(): Promise<void> {
|
|
35
|
+
const cachePermission = this.bean.summer.cache(
|
|
25
36
|
beanFullNameFromOnionName('a-permission:permission', 'summerCache'),
|
|
26
37
|
);
|
|
27
|
-
await
|
|
38
|
+
await cachePermission.clear();
|
|
28
39
|
}
|
|
29
40
|
|
|
30
|
-
protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo) {
|
|
41
|
+
protected retrievePermissionsCacheKey(info: ICachingActionKeyInfo): string {
|
|
31
42
|
const resource = info.args[0];
|
|
32
43
|
const userId = this.ctx.passport.user?.id;
|
|
33
|
-
return
|
|
44
|
+
return `user:${resource}_${userId}`;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
protected retrievePermissionsDefaultCacheKey(info: ICachingActionKeyInfo): string {
|
|
48
|
+
return `default:${this._buildPermissionProfileKey(info.args[0])}`;
|
|
34
49
|
}
|
|
35
50
|
|
|
36
51
|
@Caching.get({ cacheName: 'a-permission:permission', cacheKeyFn: 'retrievePermissionsCacheKey' })
|
|
37
52
|
async retrievePermissions(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
|
|
38
53
|
return await this.scope.event.retrievePermissions.emit({ resource }, async () => {
|
|
39
|
-
return await this.
|
|
54
|
+
return await this.retrievePermissionsDefault(resource);
|
|
40
55
|
});
|
|
41
56
|
}
|
|
42
57
|
|
|
58
|
+
@Caching.get({
|
|
59
|
+
cacheName: 'a-permission:permission',
|
|
60
|
+
cacheKeyFn: 'retrievePermissionsDefaultCacheKey',
|
|
61
|
+
})
|
|
62
|
+
protected async retrievePermissionsDefault(
|
|
63
|
+
resource: keyof IResourceRecord,
|
|
64
|
+
): Promise<IOpenapiPermissions> {
|
|
65
|
+
return await this.getPermissionsDefault(resource);
|
|
66
|
+
}
|
|
67
|
+
|
|
43
68
|
async getPermissionsDefault(resource: keyof IResourceRecord): Promise<IOpenapiPermissions> {
|
|
44
69
|
const routePathInfo: IRecordResourceNameToRoutePathItem =
|
|
45
70
|
recordResourceNameToRoutePath[resource];
|
|
46
71
|
if (!routePathInfo) throw new Error(`not found routePath of resource: ${resource}`);
|
|
47
|
-
// controller options
|
|
48
72
|
const controller = routePathInfo.controller;
|
|
49
|
-
|
|
50
|
-
const beanOptions = appResource.getBean(controller);
|
|
51
|
-
if (!beanOptions) throw new Error('invalid controller');
|
|
52
|
-
const controllerBeanFullName = beanOptions.beanFullName;
|
|
53
|
-
// descs
|
|
73
|
+
if (!appResource.getBean(controller)) throw new Error('invalid controller');
|
|
54
74
|
const descs = Object.getOwnPropertyDescriptors(controller.prototype);
|
|
55
75
|
const actionsIgnore = this.scope.config.permission.actionsIgnore;
|
|
56
76
|
const actionKeys = Object.keys(descs).filter(
|
|
57
|
-
actionKey =>
|
|
77
|
+
actionKey => actionKey !== 'constructor' && !actionsIgnore.includes(actionKey),
|
|
58
78
|
);
|
|
59
|
-
// actions
|
|
60
79
|
const permissionsActions: IOpenapiPermissionModeActionActions = {};
|
|
61
80
|
for (const actionKey of actionKeys) {
|
|
62
81
|
const desc = descs[actionKey];
|
|
63
82
|
if (!desc.value || typeof desc.value !== 'function') continue;
|
|
64
|
-
const routeReal: ContextRouteMetadata = appMetadata.getMetadata(
|
|
83
|
+
const routeReal: ContextRouteMetadata | undefined = appMetadata.getMetadata(
|
|
65
84
|
SymbolUseOnionOptionsRouteReal,
|
|
66
85
|
controller.prototype,
|
|
67
86
|
actionKey,
|
|
68
|
-
)
|
|
69
|
-
|
|
70
|
-
controller,
|
|
71
|
-
controllerBeanFullName,
|
|
72
|
-
action: actionKey,
|
|
73
|
-
route: routeReal,
|
|
74
|
-
};
|
|
75
|
-
permissionsActions[actionKey] = await this._getPermissionOfAction(route);
|
|
87
|
+
);
|
|
88
|
+
permissionsActions[actionKey] = this._getPermissionOfActionByMetadata(routeReal);
|
|
76
89
|
}
|
|
77
90
|
return { actions: permissionsActions };
|
|
78
91
|
}
|
|
79
92
|
|
|
80
|
-
private
|
|
81
|
-
|
|
82
|
-
this.
|
|
83
|
-
const
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
93
|
+
private _buildPermissionProfileKey(resource: keyof IResourceRecord): string {
|
|
94
|
+
if (!this.bean.passport.isAuthenticated) return `${resource}__anon`;
|
|
95
|
+
const activated = this.bean.passport.isActivated ? 1 : 0;
|
|
96
|
+
const roleNames = this._extractCurrentRoleNames();
|
|
97
|
+
return `${resource}__auth__act:${activated}__roles:${roleNames.join(',')}`;
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
private _extractCurrentRoleNames(): string[] {
|
|
101
|
+
const roleNames = this.bean.passport.currentRoles?.map(item => item.name) ?? [];
|
|
102
|
+
return Array.from(new Set(roleNames)).sort();
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
private _getPermissionOfActionByMetadata(routeReal: ContextRouteMetadata | undefined): boolean {
|
|
106
|
+
if (!routeReal?.meta) return false;
|
|
107
|
+
return this._evaluatePassportGuardsStatically(routeReal.meta);
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
private _evaluatePassportGuardsStatically(meta: TGuardMeta): boolean {
|
|
111
|
+
if (this._hasUnknownGuard(meta)) return false;
|
|
112
|
+
if (this._hasDynamicUserNameGuard(meta)) return false;
|
|
113
|
+
const passportOptions = this._getPassportOptions(meta);
|
|
114
|
+
if (!this._matchPassportOptions(passportOptions)) return false;
|
|
115
|
+
const roleNameOptions = meta[BeanFullNameGuardRoleName] as
|
|
116
|
+
| Partial<IGuardOptionsRoleName>
|
|
117
|
+
| undefined;
|
|
118
|
+
if (!this._matchRoleNameOptions(roleNameOptions)) return false;
|
|
119
|
+
return true;
|
|
120
|
+
}
|
|
121
|
+
|
|
122
|
+
private _hasUnknownGuard(meta: TGuardMeta): boolean {
|
|
123
|
+
return Object.keys(meta).some(
|
|
124
|
+
key => key.includes('.guard.') && !BeanFullNamesGuardSupported.has(key),
|
|
125
|
+
);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
private _hasDynamicUserNameGuard(meta: TGuardMeta): boolean {
|
|
129
|
+
return BeanFullNameGuardUserName in meta;
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
private _getPassportOptions(meta: TGuardMeta): IGuardOptionsPassport {
|
|
133
|
+
return {
|
|
134
|
+
...GuardOptionsPassportDefault,
|
|
135
|
+
...(meta[BeanFullNameGuardPassport] as Partial<IGuardOptionsPassport> | undefined),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
private _matchPassportOptions(
|
|
140
|
+
options: Pick<IGuardOptionsPassport, 'public' | 'activated'>,
|
|
141
|
+
): boolean {
|
|
142
|
+
const isAuthenticated = this.bean.passport.isAuthenticated;
|
|
143
|
+
if (!options.public && !isAuthenticated) return false;
|
|
144
|
+
if (!isAuthenticated) return true;
|
|
145
|
+
if (options.activated === true && !this.bean.passport.isActivated) return false;
|
|
146
|
+
if (options.activated === false && this.bean.passport.isActivated) return false;
|
|
147
|
+
return true;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
private _matchRoleNameOptions(options: Partial<IGuardOptionsRoleName> | undefined): boolean {
|
|
151
|
+
if (!options) return true;
|
|
152
|
+
if (!options.name) return false;
|
|
153
|
+
if (options.passWhenMatched === false) return false;
|
|
154
|
+
if (options.rejectWhenDismatched === false) return false;
|
|
155
|
+
const roleNamesCurrent = this._extractCurrentRoleNames();
|
|
156
|
+
const roleNamesRequired = Array.isArray(options.name) ? options.name : [options.name];
|
|
157
|
+
return roleNamesCurrent.some(roleName => roleNamesRequired.includes(roleName as any));
|
|
89
158
|
}
|
|
90
159
|
}
|
package/vona/src/suite-vendor/a-vona/modules/a-permission/src/bean/summerCache.permission.ts
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCachePermissionKey = any;
|
|
6
6
|
export type TSummerCachePermissionData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCachePermission
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCachePermissionKey, TSummerCachePermissionData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCachePermissionKey, TSummerCachePermissionData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|
package/vona/src/suite-vendor/a-vona/modules/a-startup/src/bean/cacheRedis.startupDebounce.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { ServiceCacheRedisBase, CacheRedis } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
export type TCacheRedisStartupDebounceKey = `startupDebounce:${string}`;
|
|
4
4
|
export type TCacheRedisStartupDebounceData = boolean;
|
|
@@ -8,7 +8,7 @@ export type TCacheRedisStartupDebounceData = boolean;
|
|
|
8
8
|
disableTransactionCompensate: true,
|
|
9
9
|
client: 'worker',
|
|
10
10
|
})
|
|
11
|
-
export class CacheRedisStartupDebounce extends
|
|
11
|
+
export class CacheRedisStartupDebounce extends ServiceCacheRedisBase<
|
|
12
12
|
TCacheRedisStartupDebounceKey,
|
|
13
13
|
TCacheRedisStartupDebounceData
|
|
14
14
|
> {}
|
package/vona/src/suite-vendor/a-vona/modules/a-summer/cli/boilerplate/{{sceneName}}.{{beanName}}.ts_
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
|
-
import {
|
|
2
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
3
3
|
|
|
4
4
|
export type TSummerCache<%=argv.beanNameCapitalize%>Key = any;
|
|
5
5
|
export type TSummerCache<%=argv.beanNameCapitalize%>Data = any;
|
|
6
6
|
|
|
7
7
|
@SummerCache()
|
|
8
8
|
export class SummerCache<%=argv.beanNameCapitalize%>
|
|
9
|
-
extends
|
|
9
|
+
extends ServiceSummerCacheBase<TSummerCache<%=argv.beanNameCapitalize%>Key, TSummerCache<%=argv.beanNameCapitalize%>Data>
|
|
10
10
|
implements ISummerCacheGet<TSummerCache<%=argv.beanNameCapitalize%>Key, TSummerCache<%=argv.beanNameCapitalize%>Data> {
|
|
11
11
|
async getNative(
|
|
12
12
|
_key?: TSummerCache<%=argv.beanNameCapitalize%>Key,
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
// eslint-disable
|
|
2
2
|
/** bean: begin */
|
|
3
3
|
export * from '../bean/bean.summer.ts';
|
|
4
|
-
export * from '../bean/bean.summerCacheBase.ts';
|
|
5
4
|
|
|
6
5
|
import 'vona';
|
|
7
6
|
declare module 'vona' {
|
|
@@ -29,6 +28,7 @@ declare module 'vona' {
|
|
|
29
28
|
export * from '../service/localFetch_.ts';
|
|
30
29
|
export * from '../service/localMem_.ts';
|
|
31
30
|
export * from '../service/localRedis_.ts';
|
|
31
|
+
export * from '../service/summerCacheBase_.ts';
|
|
32
32
|
|
|
33
33
|
import 'vona-module-a-bean';
|
|
34
34
|
declare module 'vona-module-a-bean' {
|
|
@@ -3,17 +3,17 @@ import { Bean } from 'vona-module-a-bean';
|
|
|
3
3
|
|
|
4
4
|
import type { IDecoratorSummerCacheOptions } from '../types/summerCache.ts';
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { ServiceSummerCacheBase } from '../service/summerCacheBase_.ts';
|
|
7
7
|
|
|
8
8
|
@Bean()
|
|
9
9
|
export class BeanSummer extends BeanBase {
|
|
10
10
|
cache<KEY, DATA>(
|
|
11
11
|
cacheName: string,
|
|
12
12
|
cacheOptions?: IDecoratorSummerCacheOptions,
|
|
13
|
-
):
|
|
13
|
+
): ServiceSummerCacheBase<KEY, DATA> {
|
|
14
14
|
if (cacheName.includes('.summerCache.')) {
|
|
15
15
|
return this.app.bean._getBeanSelector(cacheName as any, undefined, cacheOptions);
|
|
16
16
|
}
|
|
17
|
-
return this.app.bean._getBeanSelector(
|
|
17
|
+
return this.app.bean._getBeanSelector(ServiceSummerCacheBase, cacheName, cacheOptions);
|
|
18
18
|
}
|
|
19
19
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ServiceCacheMemBase } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ export class ServiceLocalMem<KEY = any, DATA = any>
|
|
|
12
12
|
extends CacheBase<KEY, DATA>
|
|
13
13
|
implements ICacheLayeredBase<KEY, DATA>
|
|
14
14
|
{
|
|
15
|
-
private _cacheMemInstance:
|
|
15
|
+
private _cacheMemInstance: ServiceCacheMemBase<KEY, DATA> | undefined;
|
|
16
16
|
|
|
17
17
|
protected async __dispose__() {
|
|
18
18
|
if (this._cacheMemInstance) {
|
|
@@ -21,7 +21,7 @@ export class ServiceLocalMem<KEY = any, DATA = any>
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
get cacheMem():
|
|
24
|
+
get cacheMem(): ServiceCacheMemBase<KEY, DATA> {
|
|
25
25
|
if (!this._cacheMemInstance) {
|
|
26
26
|
this._cacheMemInstance = this.app.bean.cache.mem(this._cacheName, this._cacheOptions.mem);
|
|
27
27
|
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import type {
|
|
1
|
+
import type { ServiceCacheRedisBase } from 'vona-module-a-cache';
|
|
2
2
|
|
|
3
3
|
import { Service } from 'vona-module-a-bean';
|
|
4
4
|
|
|
@@ -12,7 +12,7 @@ export class ServiceLocalRedis<KEY = any, DATA = any>
|
|
|
12
12
|
extends CacheBase<KEY, DATA>
|
|
13
13
|
implements ICacheLayeredBase<KEY, DATA>
|
|
14
14
|
{
|
|
15
|
-
private _cacheRedisInstance:
|
|
15
|
+
private _cacheRedisInstance: ServiceCacheRedisBase<KEY, DATA> | undefined;
|
|
16
16
|
|
|
17
17
|
protected async __dispose__() {
|
|
18
18
|
if (this._cacheRedisInstance) {
|
|
@@ -21,7 +21,7 @@ export class ServiceLocalRedis<KEY = any, DATA = any>
|
|
|
21
21
|
}
|
|
22
22
|
}
|
|
23
23
|
|
|
24
|
-
get cacheRedis():
|
|
24
|
+
get cacheRedis(): ServiceCacheRedisBase<KEY, DATA> {
|
|
25
25
|
if (!this._cacheRedisInstance) {
|
|
26
26
|
this._cacheRedisInstance = this.app.bean.cache.redis(
|
|
27
27
|
this._cacheName,
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { deepExtend, Virtual } from 'vona';
|
|
2
|
-
import {
|
|
2
|
+
import { Service } from 'vona-module-a-bean';
|
|
3
3
|
|
|
4
4
|
import type {
|
|
5
5
|
IDecoratorSummerCacheOptions,
|
|
@@ -8,9 +8,9 @@ import type {
|
|
|
8
8
|
|
|
9
9
|
import { CacheBase } from '../common/cacheBase.ts';
|
|
10
10
|
|
|
11
|
-
@
|
|
11
|
+
@Service()
|
|
12
12
|
@Virtual()
|
|
13
|
-
export class
|
|
13
|
+
export class ServiceSummerCacheBase<KEY = any, DATA = any> extends CacheBase<KEY, DATA> {
|
|
14
14
|
protected __init__(cacheName?: string, cacheOptions?: IDecoratorSummerCacheOptions) {
|
|
15
15
|
let _cacheName: string;
|
|
16
16
|
let _cacheOptions: IDecoratorSummerCacheOptions;
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCacheRapidocKey = any;
|
|
6
6
|
export type TSummerCacheRapidocData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCacheRapidoc
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCacheRapidocKey, TSummerCacheRapidocData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCacheRapidocKey, TSummerCacheRapidocData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
2
|
|
|
3
|
-
import {
|
|
3
|
+
import { ServiceSummerCacheBase, SummerCache } from 'vona-module-a-summer';
|
|
4
4
|
|
|
5
5
|
export type TSummerCacheSwaggerKey = any;
|
|
6
6
|
export type TSummerCacheSwaggerData = any;
|
|
7
7
|
|
|
8
8
|
@SummerCache({ preset: 'mem' })
|
|
9
9
|
export class SummerCacheSwagger
|
|
10
|
-
extends
|
|
10
|
+
extends ServiceSummerCacheBase<TSummerCacheSwaggerKey, TSummerCacheSwaggerData>
|
|
11
11
|
implements ISummerCacheGet<TSummerCacheSwaggerKey, TSummerCacheSwaggerData>
|
|
12
12
|
{
|
|
13
13
|
async getNative(
|