@nestia/sdk 7.1.1-dev.20250714 → 7.2.0

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.
Files changed (162) hide show
  1. package/LICENSE +21 -21
  2. package/README.md +93 -93
  3. package/assets/bundle/api/HttpError.ts +1 -1
  4. package/assets/bundle/api/IConnection.ts +1 -1
  5. package/assets/bundle/api/Primitive.ts +1 -1
  6. package/assets/bundle/api/Resolved.ts +1 -1
  7. package/assets/bundle/api/index.ts +4 -4
  8. package/assets/bundle/api/module.ts +6 -6
  9. package/assets/bundle/distribute/README.md +37 -37
  10. package/assets/bundle/distribute/package.json +28 -28
  11. package/assets/bundle/distribute/tsconfig.json +109 -109
  12. package/assets/bundle/e2e/index.ts +42 -42
  13. package/assets/config/nestia.config.ts +97 -97
  14. package/lib/analyses/DtoAnalyzer.d.ts +21 -0
  15. package/lib/analyses/DtoAnalyzer.js +208 -0
  16. package/lib/analyses/DtoAnalyzer.js.map +1 -0
  17. package/lib/analyses/ImportAnalyzer.d.ts +3 -8
  18. package/lib/analyses/ImportAnalyzer.js +84 -102
  19. package/lib/analyses/ImportAnalyzer.js.map +1 -1
  20. package/lib/analyses/ReflectHttpOperationAnalyzer.js +1 -1
  21. package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
  22. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js +1 -1
  23. package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
  24. package/lib/executable/internal/NestiaConfigLoader.js +4 -4
  25. package/lib/executable/sdk.js +12 -12
  26. package/lib/generates/internal/E2eFileProgrammer.js +3 -9
  27. package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
  28. package/lib/generates/internal/ImportDictionary.d.ts +9 -11
  29. package/lib/generates/internal/ImportDictionary.js +55 -48
  30. package/lib/generates/internal/ImportDictionary.js.map +1 -1
  31. package/lib/generates/internal/SdkAliasCollection.js +24 -18
  32. package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
  33. package/lib/generates/internal/SdkFileProgrammer.js +1 -7
  34. package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
  35. package/lib/generates/internal/SdkHttpCloneReferencer.js +3 -1
  36. package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
  37. package/lib/generates/internal/SdkHttpSimulationProgrammer.js +4 -3
  38. package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
  39. package/lib/generates/internal/SdkImportWizard.js +28 -21
  40. package/lib/generates/internal/SdkImportWizard.js.map +1 -1
  41. package/lib/generates/internal/SdkTypeProgrammer.js +3 -2
  42. package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
  43. package/lib/generates/internal/SdkTypeTagProgrammer.js +10 -8
  44. package/lib/generates/internal/SdkTypeTagProgrammer.js.map +1 -1
  45. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +8 -6
  46. package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
  47. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +12 -9
  48. package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
  49. package/lib/structures/IReflectHttpOperation.d.ts +2 -2
  50. package/lib/structures/IReflectImport.d.ts +6 -0
  51. package/lib/structures/{IReflectTypeImport.js → IReflectImport.js} +1 -1
  52. package/lib/structures/IReflectImport.js.map +1 -0
  53. package/lib/structures/IReflectWebSocketOperation.d.ts +2 -2
  54. package/lib/structures/IReflectWebSocketOperationParameter.d.ts +2 -2
  55. package/lib/structures/ITypedHttpRoute.d.ts +2 -2
  56. package/lib/structures/ITypedWebSocketRoute.d.ts +2 -2
  57. package/lib/transformers/IOperationMetadata.d.ts +3 -3
  58. package/lib/transformers/SdkOperationProgrammer.d.ts +3 -1
  59. package/lib/transformers/SdkOperationProgrammer.js +57 -26
  60. package/lib/transformers/SdkOperationProgrammer.js.map +1 -1
  61. package/lib/transformers/SdkOperationTransformer.js +3 -3
  62. package/lib/transformers/SdkOperationTransformer.js.map +1 -1
  63. package/package.json +4 -4
  64. package/src/INestiaConfig.ts +269 -269
  65. package/src/NestiaSdkApplication.ts +307 -307
  66. package/src/NestiaSwaggerComposer.ts +138 -138
  67. package/src/analyses/AccessorAnalyzer.ts +67 -67
  68. package/src/analyses/ConfigAnalyzer.ts +155 -155
  69. package/src/analyses/DtoAnalyzer.ts +250 -0
  70. package/src/analyses/ExceptionAnalyzer.ts +154 -154
  71. package/src/analyses/GenericAnalyzer.ts +49 -49
  72. package/src/analyses/ImportAnalyzer.ts +126 -171
  73. package/src/analyses/PathAnalyzer.ts +69 -69
  74. package/src/analyses/ReflectControllerAnalyzer.ts +105 -105
  75. package/src/analyses/ReflectHttpOperationAnalyzer.ts +183 -183
  76. package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +71 -71
  77. package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +348 -348
  78. package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +127 -127
  79. package/src/analyses/ReflectMetadataAnalyzer.ts +44 -44
  80. package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +172 -172
  81. package/src/analyses/SecurityAnalyzer.ts +25 -25
  82. package/src/analyses/TypedHttpRouteAnalyzer.ts +204 -204
  83. package/src/analyses/TypedWebSocketRouteAnalyzer.ts +33 -33
  84. package/src/decorators/OperationMetadata.ts +15 -15
  85. package/src/executable/internal/CommandParser.ts +15 -15
  86. package/src/executable/internal/NestiaConfigLoader.ts +78 -78
  87. package/src/executable/internal/NestiaSdkCommand.ts +103 -103
  88. package/src/executable/sdk.ts +75 -75
  89. package/src/generates/CloneGenerator.ts +66 -66
  90. package/src/generates/E2eGenerator.ts +32 -32
  91. package/src/generates/SdkGenerator.ts +160 -160
  92. package/src/generates/SwaggerGenerator.ts +284 -284
  93. package/src/generates/internal/E2eFileProgrammer.ts +197 -205
  94. package/src/generates/internal/FilePrinter.ts +53 -53
  95. package/src/generates/internal/ImportDictionary.ts +190 -163
  96. package/src/generates/internal/SdkAliasCollection.ts +261 -255
  97. package/src/generates/internal/SdkDistributionComposer.ts +103 -103
  98. package/src/generates/internal/SdkFileProgrammer.ts +110 -116
  99. package/src/generates/internal/SdkHttpCloneProgrammer.ts +124 -124
  100. package/src/generates/internal/SdkHttpCloneReferencer.ts +77 -75
  101. package/src/generates/internal/SdkHttpFunctionProgrammer.ts +279 -279
  102. package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +500 -500
  103. package/src/generates/internal/SdkHttpParameterProgrammer.ts +178 -178
  104. package/src/generates/internal/SdkHttpRouteProgrammer.ts +107 -107
  105. package/src/generates/internal/SdkHttpSimulationProgrammer.ts +310 -309
  106. package/src/generates/internal/SdkImportWizard.ts +62 -55
  107. package/src/generates/internal/SdkRouteDirectory.ts +18 -18
  108. package/src/generates/internal/SdkTypeProgrammer.ts +385 -384
  109. package/src/generates/internal/SdkTypeTagProgrammer.ts +104 -102
  110. package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +368 -366
  111. package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +87 -87
  112. package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +282 -279
  113. package/src/generates/internal/SwaggerDescriptionComposer.ts +64 -64
  114. package/src/generates/internal/SwaggerOperationComposer.ts +119 -119
  115. package/src/generates/internal/SwaggerOperationParameterComposer.ts +177 -177
  116. package/src/generates/internal/SwaggerOperationResponseComposer.ts +110 -110
  117. package/src/index.ts +4 -4
  118. package/src/module.ts +3 -3
  119. package/src/structures/INestiaProject.ts +13 -13
  120. package/src/structures/INestiaSdkInput.ts +20 -20
  121. package/src/structures/IReflectApplication.ts +8 -8
  122. package/src/structures/IReflectController.ts +15 -15
  123. package/src/structures/IReflectHttpOperation.ts +26 -26
  124. package/src/structures/IReflectHttpOperationException.ts +19 -19
  125. package/src/structures/IReflectHttpOperationParameter.ts +77 -81
  126. package/src/structures/IReflectHttpOperationSuccess.ts +22 -22
  127. package/src/structures/IReflectImport.ts +6 -0
  128. package/src/structures/IReflectOperationError.ts +26 -26
  129. package/src/structures/IReflectType.ts +4 -4
  130. package/src/structures/IReflectWebSocketOperation.ts +17 -17
  131. package/src/structures/IReflectWebSocketOperationParameter.ts +36 -38
  132. package/src/structures/ITypedApplication.ts +11 -11
  133. package/src/structures/ITypedHttpRoute.ts +41 -41
  134. package/src/structures/ITypedHttpRouteException.ts +15 -15
  135. package/src/structures/ITypedHttpRouteParameter.ts +41 -41
  136. package/src/structures/ITypedHttpRouteSuccess.ts +22 -22
  137. package/src/structures/ITypedWebSocketRoute.ts +24 -24
  138. package/src/structures/ITypedWebSocketRouteParameter.ts +3 -3
  139. package/src/structures/MethodType.ts +5 -5
  140. package/src/structures/ParamCategory.ts +1 -1
  141. package/src/structures/TypeEntry.ts +22 -22
  142. package/src/transform.ts +9 -9
  143. package/src/transformers/IOperationMetadata.ts +44 -44
  144. package/src/transformers/ISdkOperationTransformerContext.ts +8 -8
  145. package/src/transformers/SdkOperationProgrammer.ts +238 -209
  146. package/src/transformers/SdkOperationTransformer.ts +252 -253
  147. package/src/transformers/TextPlainValidator.ts +17 -17
  148. package/src/typings/get-function-location.d.ts +7 -7
  149. package/src/utils/ArrayUtil.ts +26 -26
  150. package/src/utils/FileRetriever.ts +22 -22
  151. package/src/utils/MapUtil.ts +14 -14
  152. package/src/utils/MetadataUtil.ts +26 -26
  153. package/src/utils/PathUtil.ts +10 -10
  154. package/src/utils/SourceFinder.ts +66 -66
  155. package/src/utils/StringUtil.ts +17 -17
  156. package/src/utils/StripEnums.ts +5 -5
  157. package/src/utils/VersioningStrategy.ts +28 -28
  158. package/src/validators/HttpHeadersValidator.ts +34 -34
  159. package/src/validators/HttpQueryValidator.ts +34 -34
  160. package/lib/structures/IReflectTypeImport.d.ts +0 -4
  161. package/lib/structures/IReflectTypeImport.js.map +0 -1
  162. package/src/structures/IReflectTypeImport.ts +0 -4
@@ -1,127 +1,127 @@
1
- import { SwaggerExample } from "@nestia/core";
2
- import {
3
- HEADERS_METADATA,
4
- HTTP_CODE_METADATA,
5
- INTERCEPTORS_METADATA,
6
- } from "@nestjs/common/constants";
7
- import typia from "typia";
8
- import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
9
- import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
10
-
11
- import { IReflectController } from "../structures/IReflectController";
12
- import { IReflectHttpOperationSuccess } from "../structures/IReflectHttpOperationSuccess";
13
- import { IReflectOperationError } from "../structures/IReflectOperationError";
14
- import { IOperationMetadata } from "../transformers/IOperationMetadata";
15
- import { TextPlainValidator } from "../transformers/TextPlainValidator";
16
-
17
- export namespace ReflectHttpOperationResponseAnalyzer {
18
- export interface IContext {
19
- controller: IReflectController;
20
- function: Function;
21
- functionName: string;
22
- httpMethod: string;
23
- metadata: IOperationMetadata;
24
- errors: IReflectOperationError[];
25
- }
26
-
27
- export const analyze = (
28
- ctx: IContext,
29
- ): IReflectHttpOperationSuccess | null => {
30
- const errors: Array<string | IOperationMetadata.IError> = [];
31
- const report = () => {
32
- ctx.errors.push({
33
- file: ctx.controller.file,
34
- class: ctx.controller.class.name,
35
- function: ctx.functionName,
36
- from: "return",
37
- contents: errors,
38
- });
39
- return null;
40
- };
41
-
42
- const encrypted: boolean = hasInterceptor({
43
- name: "EncryptedRouteInterceptor",
44
- function: ctx.function,
45
- });
46
- const contentType: string | null = encrypted
47
- ? "text/plain"
48
- : hasInterceptor({
49
- name: "TypedQueryRouteInterceptor",
50
- function: ctx.function,
51
- })
52
- ? "application/x-www-form-urlencoded"
53
- : (Reflect.getMetadata(HEADERS_METADATA, ctx.function)?.find(
54
- (h: Record<string, string>) =>
55
- typeof h?.name === "string" &&
56
- typeof h?.value === "string" &&
57
- h.name.toLowerCase() === "content-type",
58
- )?.value ??
59
- Reflect.getMetadata("swagger/apiProduces", ctx.function)?.[0] ??
60
- (ctx.httpMethod === "HEAD" ? null : "application/json"));
61
-
62
- const schema =
63
- contentType === "application/json"
64
- ? ctx.metadata.success.primitive
65
- : ctx.metadata.success.resolved;
66
- if (schema.success === false) errors.push(...schema.errors);
67
- if (ctx.httpMethod === "HEAD" && contentType !== null)
68
- errors.push(`HEAD method must not have a content type.`);
69
- if (
70
- typia.is<IReflectHttpOperationSuccess["contentType"]>(contentType) ===
71
- false
72
- )
73
- errors.push(
74
- `@nestia/sdk does not support ${JSON.stringify(contentType)} content type.`,
75
- );
76
-
77
- if (errors.length) return report();
78
- else if (
79
- ctx.metadata.success.type === null ||
80
- schema.success === false ||
81
- !typia.is<IReflectHttpOperationSuccess["contentType"]>(contentType)
82
- )
83
- return null;
84
-
85
- const example: SwaggerExample.IData<any> | undefined = Reflect.getMetadata(
86
- "nestia/SwaggerExample/Response",
87
- ctx.function,
88
- );
89
- return {
90
- contentType: contentType,
91
- encrypted,
92
- status:
93
- getStatus(ctx.function) ?? (ctx.httpMethod === "POST" ? 201 : 200),
94
- type: ctx.metadata.success.type,
95
- ...schema.data,
96
- validate:
97
- contentType === "application/json" || encrypted === true
98
- ? JsonMetadataFactory.validate
99
- : contentType === "application/x-www-form-urlencoded"
100
- ? HttpQueryProgrammer.validate
101
- : contentType === "text/plain"
102
- ? TextPlainValidator.validate
103
- : (meta) =>
104
- meta.size()
105
- ? ["HEAD method must not have any return value."]
106
- : [],
107
- example: example?.example,
108
- examples: example?.examples,
109
- };
110
- };
111
-
112
- const getStatus = (func: Function): number | null => {
113
- const text = Reflect.getMetadata(HTTP_CODE_METADATA, func);
114
- if (text === undefined) return null;
115
- const value: number = Number(text);
116
- return isNaN(value) ? null : value;
117
- };
118
-
119
- const hasInterceptor = (props: {
120
- name: string;
121
- function: Function;
122
- }): boolean => {
123
- const meta = Reflect.getMetadata(INTERCEPTORS_METADATA, props.function);
124
- if (Array.isArray(meta) === false) return false;
125
- return meta.some((elem) => elem?.constructor?.name === props.name);
126
- };
127
- }
1
+ import { SwaggerExample } from "@nestia/core";
2
+ import {
3
+ HEADERS_METADATA,
4
+ HTTP_CODE_METADATA,
5
+ INTERCEPTORS_METADATA,
6
+ } from "@nestjs/common/constants";
7
+ import typia from "typia";
8
+ import { JsonMetadataFactory } from "typia/lib/factories/JsonMetadataFactory";
9
+ import { HttpQueryProgrammer } from "typia/lib/programmers/http/HttpQueryProgrammer";
10
+
11
+ import { IReflectController } from "../structures/IReflectController";
12
+ import { IReflectHttpOperationSuccess } from "../structures/IReflectHttpOperationSuccess";
13
+ import { IReflectOperationError } from "../structures/IReflectOperationError";
14
+ import { IOperationMetadata } from "../transformers/IOperationMetadata";
15
+ import { TextPlainValidator } from "../transformers/TextPlainValidator";
16
+
17
+ export namespace ReflectHttpOperationResponseAnalyzer {
18
+ export interface IContext {
19
+ controller: IReflectController;
20
+ function: Function;
21
+ functionName: string;
22
+ httpMethod: string;
23
+ metadata: IOperationMetadata;
24
+ errors: IReflectOperationError[];
25
+ }
26
+
27
+ export const analyze = (
28
+ ctx: IContext,
29
+ ): IReflectHttpOperationSuccess | null => {
30
+ const errors: Array<string | IOperationMetadata.IError> = [];
31
+ const report = () => {
32
+ ctx.errors.push({
33
+ file: ctx.controller.file,
34
+ class: ctx.controller.class.name,
35
+ function: ctx.functionName,
36
+ from: "return",
37
+ contents: errors,
38
+ });
39
+ return null;
40
+ };
41
+
42
+ const encrypted: boolean = hasInterceptor({
43
+ name: "EncryptedRouteInterceptor",
44
+ function: ctx.function,
45
+ });
46
+ const contentType: string | null = encrypted
47
+ ? "text/plain"
48
+ : hasInterceptor({
49
+ name: "TypedQueryRouteInterceptor",
50
+ function: ctx.function,
51
+ })
52
+ ? "application/x-www-form-urlencoded"
53
+ : (Reflect.getMetadata(HEADERS_METADATA, ctx.function)?.find(
54
+ (h: Record<string, string>) =>
55
+ typeof h?.name === "string" &&
56
+ typeof h?.value === "string" &&
57
+ h.name.toLowerCase() === "content-type",
58
+ )?.value ??
59
+ Reflect.getMetadata("swagger/apiProduces", ctx.function)?.[0] ??
60
+ (ctx.httpMethod === "HEAD" ? null : "application/json"));
61
+
62
+ const schema =
63
+ contentType === "application/json"
64
+ ? ctx.metadata.success.primitive
65
+ : ctx.metadata.success.resolved;
66
+ if (schema.success === false) errors.push(...schema.errors);
67
+ if (ctx.httpMethod === "HEAD" && contentType !== null)
68
+ errors.push(`HEAD method must not have a content type.`);
69
+ if (
70
+ typia.is<IReflectHttpOperationSuccess["contentType"]>(contentType) ===
71
+ false
72
+ )
73
+ errors.push(
74
+ `@nestia/sdk does not support ${JSON.stringify(contentType)} content type.`,
75
+ );
76
+
77
+ if (errors.length) return report();
78
+ else if (
79
+ ctx.metadata.success.type === null ||
80
+ schema.success === false ||
81
+ !typia.is<IReflectHttpOperationSuccess["contentType"]>(contentType)
82
+ )
83
+ return null;
84
+
85
+ const example: SwaggerExample.IData<any> | undefined = Reflect.getMetadata(
86
+ "nestia/SwaggerExample/Response",
87
+ ctx.function,
88
+ );
89
+ return {
90
+ contentType: contentType,
91
+ encrypted,
92
+ status:
93
+ getStatus(ctx.function) ?? (ctx.httpMethod === "POST" ? 201 : 200),
94
+ type: ctx.metadata.success.type,
95
+ ...schema.data,
96
+ validate:
97
+ contentType === "application/json" || encrypted === true
98
+ ? JsonMetadataFactory.validate
99
+ : contentType === "application/x-www-form-urlencoded"
100
+ ? HttpQueryProgrammer.validate
101
+ : contentType === "text/plain"
102
+ ? TextPlainValidator.validate
103
+ : (meta) =>
104
+ meta.size()
105
+ ? ["HEAD method must not have any return value."]
106
+ : [],
107
+ example: example?.example,
108
+ examples: example?.examples,
109
+ };
110
+ };
111
+
112
+ const getStatus = (func: Function): number | null => {
113
+ const text = Reflect.getMetadata(HTTP_CODE_METADATA, func);
114
+ if (text === undefined) return null;
115
+ const value: number = Number(text);
116
+ return isNaN(value) ? null : value;
117
+ };
118
+
119
+ const hasInterceptor = (props: {
120
+ name: string;
121
+ function: Function;
122
+ }): boolean => {
123
+ const meta = Reflect.getMetadata(INTERCEPTORS_METADATA, props.function);
124
+ if (Array.isArray(meta) === false) return false;
125
+ return meta.some((elem) => elem?.constructor?.name === props.name);
126
+ };
127
+ }
@@ -1,44 +1,44 @@
1
- import { VERSION_NEUTRAL } from "@nestjs/common";
2
- import { PATH_METADATA, VERSION_METADATA } from "@nestjs/common/constants";
3
- import { VersionValue } from "@nestjs/common/interfaces";
4
-
5
- import { SecurityAnalyzer } from "./SecurityAnalyzer";
6
-
7
- export namespace ReflectMetadataAnalyzer {
8
- export const paths = (target: Function): string[] => {
9
- const value: string | string[] = Reflect.getMetadata(PATH_METADATA, target);
10
- if (typeof value === "string") return [value];
11
- else if (value.length === 0) return [""];
12
- else return value;
13
- };
14
-
15
- export const extensions = (value: any): Record<string, any> => {
16
- const entire: Record<string, any>[] | undefined = Reflect.getMetadata(
17
- "swagger/apiExtension",
18
- value,
19
- );
20
- return entire ?? {};
21
- };
22
-
23
- export const securities = (value: any): Record<string, string[]>[] => {
24
- const entire: Record<string, string[]>[] | undefined = Reflect.getMetadata(
25
- "swagger/apiSecurity",
26
- value,
27
- );
28
- return entire ? SecurityAnalyzer.merge(...entire) : [];
29
- };
30
-
31
- export const versions = (
32
- target: any,
33
- ): Array<string | typeof VERSION_NEUTRAL> | undefined => {
34
- const value: VersionValue | undefined = Reflect.getMetadata(
35
- VERSION_METADATA,
36
- target,
37
- );
38
- return value === undefined
39
- ? undefined
40
- : Array.isArray(value)
41
- ? value
42
- : [value];
43
- };
44
- }
1
+ import { VERSION_NEUTRAL } from "@nestjs/common";
2
+ import { PATH_METADATA, VERSION_METADATA } from "@nestjs/common/constants";
3
+ import { VersionValue } from "@nestjs/common/interfaces";
4
+
5
+ import { SecurityAnalyzer } from "./SecurityAnalyzer";
6
+
7
+ export namespace ReflectMetadataAnalyzer {
8
+ export const paths = (target: Function): string[] => {
9
+ const value: string | string[] = Reflect.getMetadata(PATH_METADATA, target);
10
+ if (typeof value === "string") return [value];
11
+ else if (value.length === 0) return [""];
12
+ else return value;
13
+ };
14
+
15
+ export const extensions = (value: any): Record<string, any> => {
16
+ const entire: Record<string, any>[] | undefined = Reflect.getMetadata(
17
+ "swagger/apiExtension",
18
+ value,
19
+ );
20
+ return entire ?? {};
21
+ };
22
+
23
+ export const securities = (value: any): Record<string, string[]>[] => {
24
+ const entire: Record<string, string[]>[] | undefined = Reflect.getMetadata(
25
+ "swagger/apiSecurity",
26
+ value,
27
+ );
28
+ return entire ? SecurityAnalyzer.merge(...entire) : [];
29
+ };
30
+
31
+ export const versions = (
32
+ target: any,
33
+ ): Array<string | typeof VERSION_NEUTRAL> | undefined => {
34
+ const value: VersionValue | undefined = Reflect.getMetadata(
35
+ VERSION_METADATA,
36
+ target,
37
+ );
38
+ return value === undefined
39
+ ? undefined
40
+ : Array.isArray(value)
41
+ ? value
42
+ : [value];
43
+ };
44
+ }