vona-module-a-openapi 5.0.22 → 5.0.25
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.
|
@@ -25,6 +25,25 @@ declare module 'vona' {
|
|
|
25
25
|
}
|
|
26
26
|
}
|
|
27
27
|
/** service: end */
|
|
28
|
+
/** summerCache: begin */
|
|
29
|
+
export * from '../bean/summerCache.json.ts';
|
|
30
|
+
import { type IDecoratorSummerCacheOptions } from 'vona-module-a-summer';
|
|
31
|
+
declare module 'vona-module-a-summer' {
|
|
32
|
+
interface ISummerCacheRecord {
|
|
33
|
+
'a-openapi:json': IDecoratorSummerCacheOptions;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
declare module 'vona-module-a-openapi' {
|
|
37
|
+
interface SummerCacheJson {
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
/** summerCache: end */
|
|
41
|
+
/** summerCache: begin */
|
|
42
|
+
import type { SummerCacheJson } from '../bean/summerCache.json.ts';
|
|
43
|
+
export interface IModuleSummerCache {
|
|
44
|
+
'json': SummerCacheJson;
|
|
45
|
+
}
|
|
46
|
+
/** summerCache: end */
|
|
28
47
|
/** config: begin */
|
|
29
48
|
export * from '../config/config.ts';
|
|
30
49
|
import type { config } from '../config/config.ts';
|
|
@@ -201,6 +220,7 @@ export interface ScopeModuleAOpenapi {
|
|
|
201
220
|
config: TypeModuleConfig<typeof config>;
|
|
202
221
|
locale: TypeModuleLocales<(typeof locales)[TypeLocaleBase]>;
|
|
203
222
|
service: IModuleService;
|
|
223
|
+
summerCache: IModuleSummerCache;
|
|
204
224
|
}
|
|
205
225
|
import 'vona';
|
|
206
226
|
declare module 'vona' {
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ISummerCacheGet, TSummerCacheActionOptions } from 'vona-module-a-summer';
|
|
2
|
+
import { BeanSummerCacheBase } from 'vona-module-a-summer';
|
|
3
|
+
export type TSummerCacheJsonKey = any;
|
|
4
|
+
export type TSummerCacheJsonData = any;
|
|
5
|
+
export declare class SummerCacheJson extends BeanSummerCacheBase<TSummerCacheJsonKey, TSummerCacheJsonData> implements ISummerCacheGet<TSummerCacheJsonKey, TSummerCacheJsonData> {
|
|
6
|
+
getNative(_key?: TSummerCacheJsonKey, _options?: TSummerCacheActionOptions<TSummerCacheJsonKey, TSummerCacheJsonData>): Promise<TSummerCacheJsonData | null | undefined>;
|
|
7
|
+
}
|
package/dist/index.js
CHANGED
|
@@ -5,13 +5,24 @@ import { isEmptyObject, isNil } from '@cabloy/utils';
|
|
|
5
5
|
import { toUpperCaseFirstChar } from '@cabloy/word-utils';
|
|
6
6
|
import { getTypeName, coerceWithNil } from '@cabloy/zod-query';
|
|
7
7
|
import { Service, Scope } from 'vona-module-a-bean';
|
|
8
|
+
import { Caching } from 'vona-module-a-caching';
|
|
8
9
|
import { SymbolDecoratorRule, SymbolOpenApiOptions, SymbolDecoratorRuleColumn } from 'vona-module-a-openapiutils';
|
|
9
10
|
import { SymbolRequestMappingHandler } from 'vona-module-a-web';
|
|
10
11
|
import { z } from 'zod';
|
|
12
|
+
import { SummerCache, BeanSummerCacheBase } from 'vona-module-a-summer';
|
|
11
13
|
import { locales as locales$1, setErrorMapDefault, setErrorMapSchema } from '@cabloy/zod-errors-custom';
|
|
12
14
|
import 'openapi3-ts/oas30';
|
|
13
15
|
import 'openapi3-ts/oas31';
|
|
14
16
|
|
|
17
|
+
function _applyDecoratedDescriptor(i, e, r, n, l) {
|
|
18
|
+
var a = {};
|
|
19
|
+
return Object.keys(n).forEach(function (i) {
|
|
20
|
+
a[i] = n[i];
|
|
21
|
+
}), a.enumerable = !!a.enumerable, a.configurable = !!a.configurable, ("value" in a || a.initializer) && (a.writable = true), a = r.slice().reverse().reduce(function (r, n) {
|
|
22
|
+
return n(i, e, r) || r;
|
|
23
|
+
}, a), l && void 0 !== a.initializer && (a.value = a.initializer ? a.initializer.call(l) : void 0, a.initializer = void 0), void 0 === a.initializer ? (Object.defineProperty(i, e, a), null) : a;
|
|
24
|
+
}
|
|
25
|
+
|
|
15
26
|
function bodySchemaWrapperDefault(bodySchema) {
|
|
16
27
|
return z.object({
|
|
17
28
|
code: z.string(),
|
|
@@ -51,19 +62,37 @@ function $schema(classType, options) {
|
|
|
51
62
|
const SymbolRouteHandlersArgumentsMeta = Symbol('SymbolRouteHandlersArgumentsMeta');
|
|
52
63
|
const SymbolRouteHandlersArgumentsValue = Symbol('SymbolRouteHandlersArgumentsValue');
|
|
53
64
|
|
|
54
|
-
var _dec$
|
|
65
|
+
var _dec$2, _dec2$2, _dec3, _dec4, _dec5, _dec6, _dec7, _dec8, _class$2, _class2;
|
|
55
66
|
const __ArgumentTypes = ['param', 'query', 'body', 'headers', 'fields', 'field', 'files', 'file'];
|
|
56
|
-
let ServiceOpenapi = (_dec$
|
|
67
|
+
let ServiceOpenapi = (_dec$2 = Service(), _dec2$2 = BeanInfo({
|
|
57
68
|
module: "a-openapi"
|
|
58
|
-
}),
|
|
59
|
-
|
|
69
|
+
}), _dec3 = Caching.get({
|
|
70
|
+
cacheName: 'a-openapi:json',
|
|
71
|
+
cacheKeyFn: 'generateJsonCacheKey'
|
|
72
|
+
}), _dec4 = Reflect.metadata("design:type", Function), _dec5 = Reflect.metadata("design:paramtypes", [typeof K === "undefined" ? Object : K]), _dec6 = Caching.get({
|
|
73
|
+
cacheName: 'a-openapi:json',
|
|
74
|
+
cacheKeyFn: 'generateJsonOfControllerActionCacheKey'
|
|
75
|
+
}), _dec7 = Reflect.metadata("design:type", Function), _dec8 = Reflect.metadata("design:paramtypes", [typeof Constructable === "undefined" ? Object : Constructable, String, typeof K === "undefined" ? Object : K]), _dec$2(_class$2 = _dec2$2(_class$2 = (_class2 = class ServiceOpenapi extends BeanBase {
|
|
76
|
+
generateJsonCacheKey(args, prop) {
|
|
77
|
+
const version = args[0] ?? 'V31';
|
|
78
|
+
const locale = this.ctx.locale;
|
|
79
|
+
return `${prop}_${version}_${locale}`;
|
|
80
|
+
}
|
|
81
|
+
generateJsonOfControllerActionCacheKey(args, prop) {
|
|
82
|
+
const [controller, actionKey, version] = args;
|
|
83
|
+
const beanOptions = appResource.getBean(controller);
|
|
84
|
+
const beanFullName = beanOptions.beanFullName;
|
|
85
|
+
const locale = this.ctx.locale;
|
|
86
|
+
return `${prop}_${beanFullName}_${actionKey}_${version ?? 'V31'}_${locale}`;
|
|
87
|
+
}
|
|
88
|
+
async generateJson(version = 'V31') {
|
|
60
89
|
const registry = this._collectRegistry();
|
|
61
90
|
const generator = version === 'V30' ? new OpenApiGeneratorV3(registry.definitions) : new OpenApiGeneratorV31(registry.definitions);
|
|
62
91
|
const apiObj = generator.generateDocument(this.scope.config.generateDocument[version]);
|
|
63
92
|
this._translate(apiObj, 'api');
|
|
64
93
|
return apiObj;
|
|
65
94
|
}
|
|
66
|
-
generateJsonOfControllerAction(controller, actionKey, version = 'V31') {
|
|
95
|
+
async generateJsonOfControllerAction(controller, actionKey, version = 'V31') {
|
|
67
96
|
const registry = new OpenAPIRegistry();
|
|
68
97
|
const beanOptions = appResource.getBean(controller);
|
|
69
98
|
if (!beanOptions) throw new Error('invalid controller');
|
|
@@ -278,7 +307,7 @@ let ServiceOpenapi = (_dec$1 = Service(), _dec2$1 = BeanInfo({
|
|
|
278
307
|
if (!schema) continue;
|
|
279
308
|
// check schema
|
|
280
309
|
if (getTypeName(schema) === 'ZodAny') {
|
|
281
|
-
throw new Error(`Invalid
|
|
310
|
+
throw new Error(`Invalid Openapi argument type: ${info.relativeName}:${controller.name}.${actionKey}#${argumentType}`);
|
|
282
311
|
}
|
|
283
312
|
// record
|
|
284
313
|
if (argumentType === 'body') {
|
|
@@ -372,6 +401,15 @@ let ServiceOpenapi = (_dec$1 = Service(), _dec2$1 = BeanInfo({
|
|
|
372
401
|
}
|
|
373
402
|
return objHeaders;
|
|
374
403
|
}
|
|
404
|
+
}, _applyDecoratedDescriptor(_class2.prototype, "generateJson", [_dec3, _dec4, _dec5], Object.getOwnPropertyDescriptor(_class2.prototype, "generateJson"), _class2.prototype), _applyDecoratedDescriptor(_class2.prototype, "generateJsonOfControllerAction", [_dec6, _dec7, _dec8], Object.getOwnPropertyDescriptor(_class2.prototype, "generateJsonOfControllerAction"), _class2.prototype), _class2)) || _class$2) || _class$2);
|
|
405
|
+
|
|
406
|
+
var _dec$1, _dec2$1, _class$1;
|
|
407
|
+
let SummerCacheJson = (_dec$1 = SummerCache({
|
|
408
|
+
preset: 'mem'
|
|
409
|
+
}), _dec2$1 = BeanInfo({
|
|
410
|
+
module: "a-openapi"
|
|
411
|
+
}), _dec$1(_class$1 = _dec2$1(_class$1 = class SummerCacheJson extends BeanSummerCacheBase {
|
|
412
|
+
async getNative(_key, _options) {}
|
|
375
413
|
}) || _class$1) || _class$1);
|
|
376
414
|
|
|
377
415
|
function config(_app) {
|
|
@@ -475,7 +513,7 @@ function getTargetDecoratorRuleColumns(target) {
|
|
|
475
513
|
registerMappedClassMetadataKey(target, SymbolDecoratorRuleColumn);
|
|
476
514
|
return appMetadata.getOwnMetadataMap(true, SymbolDecoratorRuleColumn, target);
|
|
477
515
|
}
|
|
478
|
-
function
|
|
516
|
+
function mergeFieldsOpenapiMetadata(target) {
|
|
479
517
|
// rules
|
|
480
518
|
const rules = getTargetDecoratorRules(target.prototype);
|
|
481
519
|
// beanOptions
|
|
@@ -795,4 +833,4 @@ const OrderBusinessBase = 1000;
|
|
|
795
833
|
const OrderUnknownBase = 10000;
|
|
796
834
|
const OrderMaxBase = 100000;
|
|
797
835
|
|
|
798
|
-
export { $locale, $schema, Api, Arg, Main, OrderBusinessBase, OrderCoreBase, OrderMaxBase, OrderUnknownBase, ScopeModuleAOpenapi, ServiceOpenapi, SymbolRouteHandlersArgumentsMeta, SymbolRouteHandlersArgumentsValue, bodySchemaWrapperDefault, config, createPipesArgumentDecorator, errorsAdapter, getTargetDecoratorRuleColumns, getTargetDecoratorRules, locales, makeSchemaLike, makeSchemaLikes,
|
|
836
|
+
export { $locale, $schema, Api, Arg, Main, OrderBusinessBase, OrderCoreBase, OrderMaxBase, OrderUnknownBase, ScopeModuleAOpenapi, ServiceOpenapi, SummerCacheJson, SymbolRouteHandlersArgumentsMeta, SymbolRouteHandlersArgumentsValue, bodySchemaWrapperDefault, config, createPipesArgumentDecorator, errorsAdapter, getTargetDecoratorRuleColumns, getTargetDecoratorRules, locales, makeSchemaLike, makeSchemaLikes, mergeFieldsOpenapiMetadata, v };
|
package/dist/lib/utils.d.ts
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import type { Constructable } from 'vona';
|
|
2
2
|
export declare function getTargetDecoratorRules(target: object): Record<PropertyKey, unknown>;
|
|
3
3
|
export declare function getTargetDecoratorRuleColumns(target: object): Record<PropertyKey, unknown>;
|
|
4
|
-
export declare function
|
|
4
|
+
export declare function mergeFieldsOpenapiMetadata(target: Constructable): void;
|
|
@@ -1,9 +1,11 @@
|
|
|
1
1
|
import type { Constructable } from 'vona';
|
|
2
|
-
import type {
|
|
2
|
+
import type { IOpenapiObject } from 'vona-module-a-openapiutils';
|
|
3
3
|
import { BeanBase } from 'vona';
|
|
4
4
|
export declare class ServiceOpenapi extends BeanBase {
|
|
5
|
-
|
|
6
|
-
|
|
5
|
+
protected generateJsonCacheKey(args: any[], prop: string): string;
|
|
6
|
+
protected generateJsonOfControllerActionCacheKey(args: any[], prop: string): string;
|
|
7
|
+
generateJson<K extends keyof IOpenapiObject>(version?: K): Promise<IOpenapiObject[K]>;
|
|
8
|
+
generateJsonOfControllerAction<K extends keyof IOpenapiObject>(controller: Constructable, actionKey: string, version?: K): Promise<IOpenapiObject[K]>;
|
|
7
9
|
private _translate;
|
|
8
10
|
private _translateSchema;
|
|
9
11
|
private _translateStrings;
|
package/dist/types/rest.d.ts
CHANGED
|
@@ -28,9 +28,9 @@ declare module 'openapi3-ts/oas31' {
|
|
|
28
28
|
export type TypeFieldRenderComponent = (keyof IComponentRecord) | (keyof TypeResourceActionRowRecordRender) | 'text' | 'textarea' | 'select' | 'checkbox' | 'radio' | 'switch' | 'image' | 'file' | 'color' | 'password' | 'email' | 'url';
|
|
29
29
|
export type TypeFieldRenderComponentProvider = (keyof IComponentRecord) | (keyof TypeResourceActionRowRecordRender) | 'input' | 'textarea' | 'select';
|
|
30
30
|
export type TypeSchemaScene = 'table' | 'form';
|
|
31
|
-
export type
|
|
31
|
+
export type TypeOpenapiMetadata<T extends ZodTypeAny = ZodTypeAny> = Partial<ZodOpenAPIMetadata<z.input<T>>>;
|
|
32
32
|
export type TypeEntityOptionsFields<T extends {}, More extends string | undefined = never> = {
|
|
33
|
-
[key in ((keyof T) | (More extends string ? More : never))]?:
|
|
33
|
+
[key in ((keyof T) | (More extends string ? More : never))]?: TypeOpenapiMetadata | z.ZodSchema;
|
|
34
34
|
};
|
|
35
35
|
export type TypeControllerOptionsActions<T extends {}> = {
|
|
36
36
|
[key in (keyof T)]?: IOpenApiOptions;
|