nestjs-openapi-next 1.0.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 (244) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +211 -0
  3. package/bun.lock +2154 -0
  4. package/dist/constants.d.ts +23 -0
  5. package/dist/constants.js +26 -0
  6. package/dist/decorators/api-basic.decorator.d.ts +1 -0
  7. package/dist/decorators/api-basic.decorator.js +7 -0
  8. package/dist/decorators/api-bearer.decorator.d.ts +1 -0
  9. package/dist/decorators/api-bearer.decorator.js +7 -0
  10. package/dist/decorators/api-body.decorator.d.ts +16 -0
  11. package/dist/decorators/api-body.decorator.js +22 -0
  12. package/dist/decorators/api-callbacks.decorator.d.ts +2 -0
  13. package/dist/decorators/api-callbacks.decorator.js +8 -0
  14. package/dist/decorators/api-consumes.decorator.d.ts +1 -0
  15. package/dist/decorators/api-consumes.decorator.js +8 -0
  16. package/dist/decorators/api-cookie.decorator.d.ts +1 -0
  17. package/dist/decorators/api-cookie.decorator.js +7 -0
  18. package/dist/decorators/api-default-getter.decorator.d.ts +2 -0
  19. package/dist/decorators/api-default-getter.decorator.js +12 -0
  20. package/dist/decorators/api-exclude-controller.decorator.d.ts +1 -0
  21. package/dist/decorators/api-exclude-controller.decorator.js +8 -0
  22. package/dist/decorators/api-exclude-endpoint.decorator.d.ts +1 -0
  23. package/dist/decorators/api-exclude-endpoint.decorator.js +10 -0
  24. package/dist/decorators/api-extension.decorator.d.ts +1 -0
  25. package/dist/decorators/api-extension.decorator.js +38 -0
  26. package/dist/decorators/api-extra-models.decorator.d.ts +1 -0
  27. package/dist/decorators/api-extra-models.decorator.js +17 -0
  28. package/dist/decorators/api-header.decorator.d.ts +7 -0
  29. package/dist/decorators/api-header.decorator.js +37 -0
  30. package/dist/decorators/api-hide-property.decorator.d.ts +1 -0
  31. package/dist/decorators/api-hide-property.decorator.js +6 -0
  32. package/dist/decorators/api-link.decorator.d.ts +7 -0
  33. package/dist/decorators/api-link.decorator.js +21 -0
  34. package/dist/decorators/api-oauth2.decorator.d.ts +1 -0
  35. package/dist/decorators/api-oauth2.decorator.js +7 -0
  36. package/dist/decorators/api-operation.decorator.d.ts +5 -0
  37. package/dist/decorators/api-operation.decorator.js +12 -0
  38. package/dist/decorators/api-param.decorator.d.ts +22 -0
  39. package/dist/decorators/api-param.decorator.js +17 -0
  40. package/dist/decorators/api-produces.decorator.d.ts +1 -0
  41. package/dist/decorators/api-produces.decorator.js +8 -0
  42. package/dist/decorators/api-property.decorator.d.ts +15 -0
  43. package/dist/decorators/api-property.decorator.js +48 -0
  44. package/dist/decorators/api-query-method.decorator.d.ts +1 -0
  45. package/dist/decorators/api-query-method.decorator.js +8 -0
  46. package/dist/decorators/api-query.decorator.d.ts +24 -0
  47. package/dist/decorators/api-query.decorator.js +25 -0
  48. package/dist/decorators/api-response.decorator.d.ts +39 -0
  49. package/dist/decorators/api-response.decorator.js +55 -0
  50. package/dist/decorators/api-schema.decorator.d.ts +6 -0
  51. package/dist/decorators/api-schema.decorator.js +8 -0
  52. package/dist/decorators/api-security-device-flow.decorator.d.ts +1 -0
  53. package/dist/decorators/api-security-device-flow.decorator.js +7 -0
  54. package/dist/decorators/api-security.decorator.d.ts +2 -0
  55. package/dist/decorators/api-security.decorator.js +25 -0
  56. package/dist/decorators/api-streaming-response.decorator.d.ts +7 -0
  57. package/dist/decorators/api-streaming-response.decorator.js +9 -0
  58. package/dist/decorators/api-tag-group.decorator.d.ts +11 -0
  59. package/dist/decorators/api-tag-group.decorator.js +13 -0
  60. package/dist/decorators/api-use-tags.decorator.d.ts +1 -0
  61. package/dist/decorators/api-use-tags.decorator.js +8 -0
  62. package/dist/decorators/helpers.d.ts +8 -0
  63. package/dist/decorators/helpers.js +123 -0
  64. package/dist/decorators/index.d.ts +28 -0
  65. package/dist/decorators/index.js +48 -0
  66. package/dist/document-builder.d.ts +29 -0
  67. package/dist/document-builder.js +142 -0
  68. package/dist/explorers/api-callbacks.explorer.d.ts +2 -0
  69. package/dist/explorers/api-callbacks.explorer.js +36 -0
  70. package/dist/explorers/api-consumes.explorer.d.ts +5 -0
  71. package/dist/explorers/api-consumes.explorer.js +11 -0
  72. package/dist/explorers/api-exclude-controller.explorer.d.ts +2 -0
  73. package/dist/explorers/api-exclude-controller.explorer.js +10 -0
  74. package/dist/explorers/api-exclude-endpoint.explorer.d.ts +2 -0
  75. package/dist/explorers/api-exclude-endpoint.explorer.js +6 -0
  76. package/dist/explorers/api-extra-models.explorer.d.ts +3 -0
  77. package/dist/explorers/api-extra-models.explorer.js +11 -0
  78. package/dist/explorers/api-headers.explorer.d.ts +7 -0
  79. package/dist/explorers/api-headers.explorer.js +9 -0
  80. package/dist/explorers/api-operation.explorer.d.ts +2 -0
  81. package/dist/explorers/api-operation.explorer.js +43 -0
  82. package/dist/explorers/api-parameters.explorer.d.ts +71 -0
  83. package/dist/explorers/api-parameters.explorer.js +47 -0
  84. package/dist/explorers/api-produces.explorer.d.ts +5 -0
  85. package/dist/explorers/api-produces.explorer.js +11 -0
  86. package/dist/explorers/api-response.explorer.d.ts +13 -0
  87. package/dist/explorers/api-response.explorer.js +103 -0
  88. package/dist/explorers/api-security.explorer.d.ts +5 -0
  89. package/dist/explorers/api-security.explorer.js +13 -0
  90. package/dist/explorers/api-use-tags.explorer.d.ts +5 -0
  91. package/dist/explorers/api-use-tags.explorer.js +18 -0
  92. package/dist/extra/swagger-shim.d.ts +100 -0
  93. package/dist/extra/swagger-shim.js +367 -0
  94. package/dist/fixtures/document.base.d.ts +2 -0
  95. package/dist/fixtures/document.base.js +16 -0
  96. package/dist/index.d.ts +7 -0
  97. package/dist/index.js +23 -0
  98. package/dist/interfaces/callback-object.interface.d.ts +12 -0
  99. package/dist/interfaces/callback-object.interface.js +2 -0
  100. package/dist/interfaces/denormalized-doc-resolvers.interface.d.ts +7 -0
  101. package/dist/interfaces/denormalized-doc-resolvers.interface.js +2 -0
  102. package/dist/interfaces/denormalized-doc.interface.d.ts +8 -0
  103. package/dist/interfaces/denormalized-doc.interface.js +2 -0
  104. package/dist/interfaces/enum-schema-attributes.interface.d.ts +2 -0
  105. package/dist/interfaces/enum-schema-attributes.interface.js +2 -0
  106. package/dist/interfaces/index.d.ts +3 -0
  107. package/dist/interfaces/index.js +18 -0
  108. package/dist/interfaces/module-route.interface.d.ts +2 -0
  109. package/dist/interfaces/module-route.interface.js +2 -0
  110. package/dist/interfaces/open-api-spec.interface.d.ts +252 -0
  111. package/dist/interfaces/open-api-spec.interface.js +2 -0
  112. package/dist/interfaces/schema-object-metadata.interface.d.ts +30 -0
  113. package/dist/interfaces/schema-object-metadata.interface.js +2 -0
  114. package/dist/interfaces/swagger-custom-options.interface.d.ts +24 -0
  115. package/dist/interfaces/swagger-custom-options.interface.js +2 -0
  116. package/dist/interfaces/swagger-document-options.interface.d.ts +10 -0
  117. package/dist/interfaces/swagger-document-options.interface.js +2 -0
  118. package/dist/interfaces/swagger-ui-init-options.interface.d.ts +7 -0
  119. package/dist/interfaces/swagger-ui-init-options.interface.js +2 -0
  120. package/dist/interfaces/swagger-ui-options.interface.d.ts +15 -0
  121. package/dist/interfaces/swagger-ui-options.interface.js +2 -0
  122. package/dist/plugin/compiler-plugin.d.ts +2 -0
  123. package/dist/plugin/compiler-plugin.js +30 -0
  124. package/dist/plugin/index.d.ts +2 -0
  125. package/dist/plugin/index.js +18 -0
  126. package/dist/plugin/merge-options.d.ts +17 -0
  127. package/dist/plugin/merge-options.js +37 -0
  128. package/dist/plugin/metadata-loader.d.ts +7 -0
  129. package/dist/plugin/metadata-loader.js +51 -0
  130. package/dist/plugin/plugin-constants.d.ts +3 -0
  131. package/dist/plugin/plugin-constants.js +6 -0
  132. package/dist/plugin/plugin-debug-logger.d.ts +5 -0
  133. package/dist/plugin/plugin-debug-logger.js +7 -0
  134. package/dist/plugin/utils/ast-utils.d.ts +30 -0
  135. package/dist/plugin/utils/ast-utils.js +273 -0
  136. package/dist/plugin/utils/is-filename-matched.util.d.ts +1 -0
  137. package/dist/plugin/utils/is-filename-matched.util.js +5 -0
  138. package/dist/plugin/utils/plugin-utils.d.ts +30 -0
  139. package/dist/plugin/utils/plugin-utils.js +307 -0
  140. package/dist/plugin/utils/type-reference-to-identifier.util.d.ts +7 -0
  141. package/dist/plugin/utils/type-reference-to-identifier.util.js +52 -0
  142. package/dist/plugin/visitors/abstract.visitor.d.ts +4 -0
  143. package/dist/plugin/visitors/abstract.visitor.js +30 -0
  144. package/dist/plugin/visitors/controller-class.visitor.d.ts +20 -0
  145. package/dist/plugin/visitors/controller-class.visitor.js +265 -0
  146. package/dist/plugin/visitors/model-class.visitor.d.ts +35 -0
  147. package/dist/plugin/visitors/model-class.visitor.js +514 -0
  148. package/dist/plugin/visitors/readonly.visitor.d.ts +21 -0
  149. package/dist/plugin/visitors/readonly.visitor.js +40 -0
  150. package/dist/services/constants.d.ts +1 -0
  151. package/dist/services/constants.js +4 -0
  152. package/dist/services/decorators-properties.d.ts +21 -0
  153. package/dist/services/decorators-properties.js +149 -0
  154. package/dist/services/mimetype-content-wrapper.d.ts +4 -0
  155. package/dist/services/mimetype-content-wrapper.js +11 -0
  156. package/dist/services/model-properties-accessor.d.ts +6 -0
  157. package/dist/services/model-properties-accessor.js +37 -0
  158. package/dist/services/parameter-metadata-accessor.d.ts +22 -0
  159. package/dist/services/parameter-metadata-accessor.js +41 -0
  160. package/dist/services/parameters-metadata-mapper.d.ts +9 -0
  161. package/dist/services/parameters-metadata-mapper.js +38 -0
  162. package/dist/services/response-object-factory.d.ts +28 -0
  163. package/dist/services/response-object-factory.js +120 -0
  164. package/dist/services/response-object-mapper.d.ts +39 -0
  165. package/dist/services/response-object-mapper.js +38 -0
  166. package/dist/services/schema-object-factory.d.ts +156 -0
  167. package/dist/services/schema-object-factory.js +471 -0
  168. package/dist/services/swagger-types-mapper.d.ts +260 -0
  169. package/dist/services/swagger-types-mapper.js +107 -0
  170. package/dist/storages/global-parameters.storage.d.ts +8 -0
  171. package/dist/storages/global-parameters.storage.js +22 -0
  172. package/dist/storages/global-responses.storage.d.ts +10 -0
  173. package/dist/storages/global-responses.storage.js +21 -0
  174. package/dist/swagger-explorer.d.ts +41 -0
  175. package/dist/swagger-explorer.js +326 -0
  176. package/dist/swagger-module.d.ts +27 -0
  177. package/dist/swagger-module.js +223 -0
  178. package/dist/swagger-scanner.d.ts +25 -0
  179. package/dist/swagger-scanner.js +116 -0
  180. package/dist/swagger-transformer.d.ts +4 -0
  181. package/dist/swagger-transformer.js +22 -0
  182. package/dist/swagger-ui/constants.d.ts +3 -0
  183. package/dist/swagger-ui/constants.js +132 -0
  184. package/dist/swagger-ui/helpers.d.ts +2 -0
  185. package/dist/swagger-ui/helpers.js +16 -0
  186. package/dist/swagger-ui/index.d.ts +1 -0
  187. package/dist/swagger-ui/index.js +17 -0
  188. package/dist/swagger-ui/swagger-ui.d.ts +4 -0
  189. package/dist/swagger-ui/swagger-ui.js +62 -0
  190. package/dist/type-helpers/index.d.ts +4 -0
  191. package/dist/type-helpers/index.js +20 -0
  192. package/dist/type-helpers/intersection-type.helper.d.ts +8 -0
  193. package/dist/type-helpers/intersection-type.helper.js +42 -0
  194. package/dist/type-helpers/mapped-types.utils.d.ts +2 -0
  195. package/dist/type-helpers/mapped-types.utils.js +31 -0
  196. package/dist/type-helpers/omit-type.helper.d.ts +2 -0
  197. package/dist/type-helpers/omit-type.helper.js +40 -0
  198. package/dist/type-helpers/partial-type.helper.d.ts +4 -0
  199. package/dist/type-helpers/partial-type.helper.js +49 -0
  200. package/dist/type-helpers/pick-type.helper.d.ts +2 -0
  201. package/dist/type-helpers/pick-type.helper.js +40 -0
  202. package/dist/types/swagger-enum.type.d.ts +1 -0
  203. package/dist/types/swagger-enum.type.js +2 -0
  204. package/dist/utils/assign-two-levels-deep.d.ts +1 -0
  205. package/dist/utils/assign-two-levels-deep.js +12 -0
  206. package/dist/utils/enum.utils.d.ts +9 -0
  207. package/dist/utils/enum.utils.js +65 -0
  208. package/dist/utils/extend-metadata.util.d.ts +2 -0
  209. package/dist/utils/extend-metadata.util.js +11 -0
  210. package/dist/utils/get-global-prefix.d.ts +2 -0
  211. package/dist/utils/get-global-prefix.js +7 -0
  212. package/dist/utils/get-schema-path.util.d.ts +4 -0
  213. package/dist/utils/get-schema-path.util.js +26 -0
  214. package/dist/utils/index.d.ts +1 -0
  215. package/dist/utils/index.js +17 -0
  216. package/dist/utils/is-body-parameter.util.d.ts +2 -0
  217. package/dist/utils/is-body-parameter.util.js +6 -0
  218. package/dist/utils/is-built-in-type.util.d.ts +2 -0
  219. package/dist/utils/is-built-in-type.util.js +8 -0
  220. package/dist/utils/is-date-ctor.util.d.ts +2 -0
  221. package/dist/utils/is-date-ctor.util.js +6 -0
  222. package/dist/utils/merge-and-uniq.util.d.ts +1 -0
  223. package/dist/utils/merge-and-uniq.util.js +7 -0
  224. package/dist/utils/normalize-rel-path.d.ts +1 -0
  225. package/dist/utils/normalize-rel-path.js +7 -0
  226. package/dist/utils/remove-undefined-keys.d.ts +5 -0
  227. package/dist/utils/remove-undefined-keys.js +11 -0
  228. package/dist/utils/resolve-path.util.d.ts +1 -0
  229. package/dist/utils/resolve-path.util.js +7 -0
  230. package/dist/utils/reverse-object-keys.util.d.ts +1 -0
  231. package/dist/utils/reverse-object-keys.util.js +11 -0
  232. package/dist/utils/sort-object-lexicographically.d.ts +5 -0
  233. package/dist/utils/sort-object-lexicographically.js +11 -0
  234. package/dist/utils/strip-last-slash.util.d.ts +1 -0
  235. package/dist/utils/strip-last-slash.util.js +8 -0
  236. package/dist/utils/validate-global-prefix.util.d.ts +1 -0
  237. package/dist/utils/validate-global-prefix.util.js +5 -0
  238. package/dist/utils/validate-path.util.d.ts +1 -0
  239. package/dist/utils/validate-path.util.js +5 -0
  240. package/eslint.config.mjs +47 -0
  241. package/nest-cli.json +6 -0
  242. package/package.json +116 -0
  243. package/plugin.js +10 -0
  244. package/tsconfig.build.json +21 -0
@@ -0,0 +1,156 @@
1
+ import { Type } from '@nestjs/common';
2
+ import { BaseParameterObject, ParameterObject, ReferenceObject, SchemaObject } from '../interfaces/open-api-spec.interface';
3
+ import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface';
4
+ import { ModelPropertiesAccessor } from './model-properties-accessor';
5
+ import { ParamWithTypeMetadata } from './parameter-metadata-accessor';
6
+ import { SwaggerTypesMapper } from './swagger-types-mapper';
7
+ export declare class SchemaObjectFactory {
8
+ private readonly modelPropertiesAccessor;
9
+ private readonly swaggerTypesMapper;
10
+ constructor(modelPropertiesAccessor: ModelPropertiesAccessor, swaggerTypesMapper: SwaggerTypesMapper);
11
+ createFromModel(parameters: ParamWithTypeMetadata[], schemas: Record<string, SchemaObject>): Array<ParamWithTypeMetadata | BaseParameterObject>;
12
+ getCustomType(param: ParamWithTypeMetadata, schemas: Record<string, SchemaObject>): {
13
+ name: string | number | object;
14
+ schema: {
15
+ type: string;
16
+ items: {
17
+ $ref: string;
18
+ nullable?: boolean;
19
+ discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject;
20
+ readOnly?: boolean;
21
+ writeOnly?: boolean;
22
+ xml?: import("../interfaces/open-api-spec.interface").XmlObject;
23
+ externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject;
24
+ example?: any;
25
+ examples?: any[] | Record<string, any>;
26
+ deprecated?: boolean;
27
+ type?: string;
28
+ allOf?: (SchemaObject | ReferenceObject)[];
29
+ oneOf?: (SchemaObject | ReferenceObject)[];
30
+ anyOf?: (SchemaObject | ReferenceObject)[];
31
+ not?: SchemaObject | ReferenceObject;
32
+ items?: SchemaObject | ReferenceObject;
33
+ properties?: Record<string, SchemaObject | ReferenceObject>;
34
+ additionalProperties?: SchemaObject | ReferenceObject | boolean;
35
+ patternProperties?: Record<string, SchemaObject | ReferenceObject> | undefined;
36
+ description?: string;
37
+ format?: string;
38
+ default?: any;
39
+ title?: string;
40
+ multipleOf?: number;
41
+ maximum?: number;
42
+ exclusiveMaximum?: boolean;
43
+ minimum?: number;
44
+ exclusiveMinimum?: boolean;
45
+ maxLength?: number;
46
+ minLength?: number;
47
+ pattern?: string;
48
+ maxItems?: number;
49
+ minItems?: number;
50
+ uniqueItems?: boolean;
51
+ maxProperties?: number;
52
+ minProperties?: number;
53
+ required?: string[];
54
+ enum?: any[];
55
+ 'x-enumNames'?: string[];
56
+ } | {
57
+ $ref: string;
58
+ };
59
+ };
60
+ type?: Type<unknown>;
61
+ in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder";
62
+ isArray?: boolean;
63
+ items?: SchemaObject;
64
+ required?: boolean;
65
+ enum?: unknown[];
66
+ enumName?: string;
67
+ enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes;
68
+ selfRequired?: boolean;
69
+ } | {
70
+ name: string | number | object;
71
+ schema: {
72
+ $ref: string;
73
+ nullable?: boolean;
74
+ discriminator?: import("../interfaces/open-api-spec.interface").DiscriminatorObject;
75
+ readOnly?: boolean;
76
+ writeOnly?: boolean;
77
+ xml?: import("../interfaces/open-api-spec.interface").XmlObject;
78
+ externalDocs?: import("../interfaces/open-api-spec.interface").ExternalDocumentationObject;
79
+ example?: any;
80
+ examples?: any[] | Record<string, any>;
81
+ deprecated?: boolean;
82
+ type?: string;
83
+ allOf?: (SchemaObject | ReferenceObject)[];
84
+ oneOf?: (SchemaObject | ReferenceObject)[];
85
+ anyOf?: (SchemaObject | ReferenceObject)[];
86
+ not?: SchemaObject | ReferenceObject;
87
+ items?: SchemaObject | ReferenceObject;
88
+ properties?: Record<string, SchemaObject | ReferenceObject>;
89
+ additionalProperties?: SchemaObject | ReferenceObject | boolean;
90
+ patternProperties?: Record<string, SchemaObject | ReferenceObject> | undefined;
91
+ description?: string;
92
+ format?: string;
93
+ default?: any;
94
+ title?: string;
95
+ multipleOf?: number;
96
+ maximum?: number;
97
+ exclusiveMaximum?: boolean;
98
+ minimum?: number;
99
+ exclusiveMinimum?: boolean;
100
+ maxLength?: number;
101
+ minLength?: number;
102
+ pattern?: string;
103
+ maxItems?: number;
104
+ minItems?: number;
105
+ uniqueItems?: boolean;
106
+ maxProperties?: number;
107
+ minProperties?: number;
108
+ required?: string[];
109
+ enum?: any[];
110
+ 'x-enumNames'?: string[];
111
+ } | {
112
+ $ref: string;
113
+ };
114
+ type?: Type<unknown>;
115
+ in?: import("../interfaces/open-api-spec.interface").ParameterLocation | "body" | "placeholder";
116
+ isArray?: boolean;
117
+ items?: SchemaObject;
118
+ required?: boolean;
119
+ enum?: unknown[];
120
+ enumName?: string;
121
+ enumSchema?: import("../interfaces/enum-schema-attributes.interface").EnumSchemaAttributes;
122
+ selfRequired?: boolean;
123
+ };
124
+ private createQueryOrParamSchema;
125
+ extractPropertiesFromType(type: Type<unknown>, schemas: Record<string, SchemaObject>, pendingSchemasRefs?: string[]): ParameterObject[];
126
+ exploreModelSchema(type: Type<unknown> | Function, schemas: Record<string, SchemaObject>, pendingSchemasRefs?: string[]): string;
127
+ getSchemaMetadata(type: Function | Type<unknown>): {
128
+ schemaName: string;
129
+ schemaProperties: {
130
+ description?: string;
131
+ };
132
+ };
133
+ mergePropertyWithMetadata(key: string, prototype: Type<unknown>, schemas: Record<string, SchemaObject>, pendingSchemaRefs: string[], metadata?: SchemaObjectMetadata): SchemaObjectMetadata | ReferenceObject | ParameterObject | (SchemaObject & {
134
+ selfRequired?: boolean;
135
+ });
136
+ createEnumParam(param: ParamWithTypeMetadata & BaseParameterObject, schemas: Record<string, SchemaObject>): Partial<ParamWithTypeMetadata & BaseParameterObject>;
137
+ createEnumSchemaType(key: string, metadata: SchemaObjectMetadata, schemas: Record<string, SchemaObject>): SchemaObjectMetadata;
138
+ createNotBuiltInTypeReference(key: string, metadata: SchemaObjectMetadata, trueMetadataType: unknown, schemas: Record<string, SchemaObject>, pendingSchemaRefs: string[]): SchemaObjectMetadata;
139
+ transformToArraySchemaProperty(metadata: SchemaObjectMetadata, key: string, type: string | Record<string, any>): SchemaObjectMetadata;
140
+ mapArrayCtorParam(param: ParamWithTypeMetadata): any;
141
+ createFromObjectLiteral(key: string, literalObj: Record<string, any>, schemas: Record<string, SchemaObject>): {
142
+ name: string;
143
+ type: string;
144
+ properties: {};
145
+ required: any[];
146
+ };
147
+ createFromNestedArray(key: string, metadata: SchemaObjectMetadata, schemas: Record<string, SchemaObject>, pendingSchemaRefs: string[]): any;
148
+ private createSchemaMetadata;
149
+ private isArrayCtor;
150
+ private isPrimitiveType;
151
+ private isLazyTypeFunc;
152
+ private getTypeName;
153
+ private isObjectLiteral;
154
+ private isBigInt;
155
+ private extractPropertyModifiers;
156
+ }
@@ -0,0 +1,471 @@
1
+ "use strict";
2
+ var __rest = (this && this.__rest) || function (s, e) {
3
+ var t = {};
4
+ for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5
+ t[p] = s[p];
6
+ if (s != null && typeof Object.getOwnPropertySymbols === "function")
7
+ for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8
+ if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9
+ t[p[i]] = s[p[i]];
10
+ }
11
+ return t;
12
+ };
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.SchemaObjectFactory = void 0;
15
+ const common_1 = require("@nestjs/common");
16
+ const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
17
+ const lodash_1 = require("lodash");
18
+ const constants_1 = require("../constants");
19
+ const helpers_1 = require("../decorators/helpers");
20
+ const api_extra_models_explorer_1 = require("../explorers/api-extra-models.explorer");
21
+ const utils_1 = require("../utils");
22
+ const enum_utils_1 = require("../utils/enum.utils");
23
+ const is_body_parameter_util_1 = require("../utils/is-body-parameter.util");
24
+ const is_built_in_type_util_1 = require("../utils/is-built-in-type.util");
25
+ const is_date_ctor_util_1 = require("../utils/is-date-ctor.util");
26
+ class SchemaObjectFactory {
27
+ constructor(modelPropertiesAccessor, swaggerTypesMapper) {
28
+ this.modelPropertiesAccessor = modelPropertiesAccessor;
29
+ this.swaggerTypesMapper = swaggerTypesMapper;
30
+ }
31
+ createFromModel(parameters, schemas) {
32
+ const parameterObjects = parameters.map((param) => {
33
+ if (this.isLazyTypeFunc(param.type)) {
34
+ [param.type, param.isArray] = (0, helpers_1.getTypeIsArrayTuple)(param.type(), undefined);
35
+ }
36
+ if (!(0, is_body_parameter_util_1.isBodyParameter)(param) && param.enumName) {
37
+ return this.createEnumParam(param, schemas);
38
+ }
39
+ if (this.isPrimitiveType(param.type)) {
40
+ return param;
41
+ }
42
+ if (this.isArrayCtor(param.type)) {
43
+ return this.mapArrayCtorParam(param);
44
+ }
45
+ if (!(0, is_body_parameter_util_1.isBodyParameter)(param)) {
46
+ return this.createQueryOrParamSchema(param, schemas);
47
+ }
48
+ return this.getCustomType(param, schemas);
49
+ });
50
+ return (0, lodash_1.flatten)(parameterObjects);
51
+ }
52
+ getCustomType(param, schemas) {
53
+ const modelName = this.exploreModelSchema(param.type, schemas);
54
+ const name = param.name || modelName;
55
+ const schema = Object.assign(Object.assign({}, (param.schema || {})), { $ref: (0, utils_1.getSchemaPath)(modelName) });
56
+ const isArray = param.isArray;
57
+ param = (0, lodash_1.omit)(param, 'isArray');
58
+ if (isArray) {
59
+ return Object.assign(Object.assign({}, param), { name, schema: {
60
+ type: 'array',
61
+ items: schema
62
+ } });
63
+ }
64
+ return Object.assign(Object.assign({}, param), { name,
65
+ schema });
66
+ }
67
+ createQueryOrParamSchema(param, schemas) {
68
+ if ((0, is_date_ctor_util_1.isDateCtor)(param.type)) {
69
+ return Object.assign(Object.assign({ format: 'date-time' }, param), { type: 'string' });
70
+ }
71
+ if (this.isBigInt(param.type)) {
72
+ return Object.assign(Object.assign({ format: 'int64' }, param), { type: 'integer' });
73
+ }
74
+ if ((0, lodash_1.isFunction)(param.type)) {
75
+ if (param.name) {
76
+ return this.getCustomType(param, schemas);
77
+ }
78
+ const propertiesWithType = this.extractPropertiesFromType(param.type, schemas);
79
+ if (!propertiesWithType) {
80
+ return param;
81
+ }
82
+ return propertiesWithType.map((property) => {
83
+ const keysToOmit = [
84
+ 'isArray',
85
+ 'enumName',
86
+ 'enumSchema',
87
+ 'selfRequired'
88
+ ];
89
+ const parameterObject = Object.assign(Object.assign({}, (0, lodash_1.omit)(property, keysToOmit)), { in: 'query', required: 'selfRequired' in property
90
+ ? property.selfRequired
91
+ : typeof property.required === 'boolean'
92
+ ? property.required
93
+ : true });
94
+ const keysToMoveToSchema = [
95
+ ...this.swaggerTypesMapper.getSchemaOptionsKeys(),
96
+ 'allOf'
97
+ ];
98
+ return keysToMoveToSchema.reduce((acc, key) => {
99
+ if (key in property) {
100
+ acc.schema = Object.assign(Object.assign({}, acc.schema), { [key]: property[key] });
101
+ delete acc[key];
102
+ }
103
+ return acc;
104
+ }, parameterObject);
105
+ });
106
+ }
107
+ if (this.isObjectLiteral(param.type)) {
108
+ const schemaFromObjectLiteral = this.createFromObjectLiteral(param.name, param.type, schemas);
109
+ if (param.isArray) {
110
+ return Object.assign(Object.assign({}, param), { schema: {
111
+ type: 'array',
112
+ items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name')
113
+ }, selfRequired: param.required });
114
+ }
115
+ return Object.assign(Object.assign({}, param), { schema: {
116
+ type: schemaFromObjectLiteral.type,
117
+ properties: schemaFromObjectLiteral.properties,
118
+ required: schemaFromObjectLiteral.required
119
+ }, selfRequired: param.required });
120
+ }
121
+ return param;
122
+ }
123
+ extractPropertiesFromType(type, schemas, pendingSchemasRefs = []) {
124
+ const { prototype } = type;
125
+ if (!prototype) {
126
+ return;
127
+ }
128
+ const extraModels = (0, api_extra_models_explorer_1.exploreGlobalApiExtraModelsMetadata)(type);
129
+ extraModels.forEach((item) => this.exploreModelSchema(item, schemas, pendingSchemasRefs));
130
+ this.modelPropertiesAccessor.applyMetadataFactory(prototype);
131
+ const modelProperties = this.modelPropertiesAccessor.getModelProperties(prototype);
132
+ const propertiesWithType = modelProperties.map((key) => {
133
+ const property = this.mergePropertyWithMetadata(key, prototype, schemas, pendingSchemasRefs);
134
+ const schemaCombinators = ['oneOf', 'anyOf', 'allOf'];
135
+ const declaredSchemaCombinator = schemaCombinators.find((combinator) => combinator in property);
136
+ if (declaredSchemaCombinator) {
137
+ const schemaObjectMetadata = property;
138
+ if ((schemaObjectMetadata === null || schemaObjectMetadata === void 0 ? void 0 : schemaObjectMetadata.type) === 'array' ||
139
+ schemaObjectMetadata.isArray) {
140
+ schemaObjectMetadata.items = {};
141
+ schemaObjectMetadata.items[declaredSchemaCombinator] =
142
+ property[declaredSchemaCombinator];
143
+ delete property[declaredSchemaCombinator];
144
+ }
145
+ else {
146
+ delete schemaObjectMetadata.type;
147
+ }
148
+ }
149
+ return property;
150
+ });
151
+ return propertiesWithType;
152
+ }
153
+ exploreModelSchema(type, schemas, pendingSchemasRefs = []) {
154
+ if (this.isLazyTypeFunc(type)) {
155
+ type = type();
156
+ }
157
+ const propertiesWithType = this.extractPropertiesFromType(type, schemas, pendingSchemasRefs);
158
+ if (!propertiesWithType) {
159
+ return '';
160
+ }
161
+ const extensionProperties = Reflect.getMetadata(constants_1.DECORATORS.API_EXTENSION, type) || {};
162
+ const { schemaName, schemaProperties } = this.getSchemaMetadata(type);
163
+ const typeDefinition = Object.assign(Object.assign({ type: 'object', properties: (0, lodash_1.mapValues)((0, lodash_1.keyBy)(propertiesWithType, 'name'), (property) => {
164
+ const keysToOmit = [
165
+ 'name',
166
+ 'isArray',
167
+ 'enumName',
168
+ 'enumSchema',
169
+ 'selfRequired'
170
+ ];
171
+ if ('required' in property && Array.isArray(property.required)) {
172
+ return (0, lodash_1.omit)(property, keysToOmit);
173
+ }
174
+ return (0, lodash_1.omit)(property, [...keysToOmit, 'required']);
175
+ }) }, extensionProperties), schemaProperties);
176
+ const typeDefinitionRequiredFields = propertiesWithType
177
+ .filter((property) => 'selfRequired' in property
178
+ ? property.selfRequired != false
179
+ : property.required != false && !Array.isArray(property.required))
180
+ .map((property) => property.name);
181
+ if (typeDefinitionRequiredFields.length > 0) {
182
+ typeDefinition['required'] = typeDefinitionRequiredFields;
183
+ }
184
+ if (schemas[schemaName] && !(0, lodash_1.isEqual)(schemas[schemaName], typeDefinition)) {
185
+ common_1.Logger.error(`Duplicate DTO detected: "${schemaName}" is defined multiple times with different schemas.\n` +
186
+ `Consider using unique class names or applying @ApiExtraModels() decorator with custom schema names.\n` +
187
+ `Note: This will throw an error in the next major version.`);
188
+ }
189
+ schemas[schemaName] = typeDefinition;
190
+ return schemaName;
191
+ }
192
+ getSchemaMetadata(type) {
193
+ var _a, _b;
194
+ const schemas = (_a = Reflect.getOwnMetadata(constants_1.DECORATORS.API_SCHEMA, type)) !== null && _a !== void 0 ? _a : [];
195
+ const _c = (_b = schemas[schemas.length - 1]) !== null && _b !== void 0 ? _b : {}, { name } = _c, schemaProperties = __rest(_c, ["name"]);
196
+ return { schemaName: name !== null && name !== void 0 ? name : type.name, schemaProperties };
197
+ }
198
+ mergePropertyWithMetadata(key, prototype, schemas, pendingSchemaRefs, metadata) {
199
+ if (!metadata) {
200
+ metadata =
201
+ (0, lodash_1.omit)(Reflect.getMetadata(constants_1.DECORATORS.API_MODEL_PROPERTIES, prototype, key), 'link') || {};
202
+ }
203
+ if (this.isLazyTypeFunc(metadata.type)) {
204
+ metadata.type = metadata.type();
205
+ [metadata.type, metadata.isArray] = (0, helpers_1.getTypeIsArrayTuple)(metadata.type, metadata.isArray);
206
+ }
207
+ if (Array.isArray(metadata.type)) {
208
+ return this.createFromNestedArray(key, metadata, schemas, pendingSchemaRefs);
209
+ }
210
+ return this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs);
211
+ }
212
+ createEnumParam(param, schemas) {
213
+ var _a, _b, _c, _d, _e;
214
+ const enumName = param.enumName;
215
+ const $ref = (0, utils_1.getSchemaPath)(enumName);
216
+ if (!(enumName in schemas)) {
217
+ const _enum = param.enum
218
+ ? param.enum
219
+ : param.schema
220
+ ? param.schema['items']
221
+ ? param.schema['items']['enum']
222
+ : param.schema['enum']
223
+ : param.isArray && param.items
224
+ ? param.items.enum
225
+ : undefined;
226
+ schemas[enumName] = Object.assign(Object.assign({ type: (_d = (param.isArray
227
+ ? (_b = (_a = param.schema) === null || _a === void 0 ? void 0 : _a['items']) === null || _b === void 0 ? void 0 : _b['type']
228
+ : (_c = param.schema) === null || _c === void 0 ? void 0 : _c['type'])) !== null && _d !== void 0 ? _d : 'string', enum: _enum }, param.enumSchema), (param['x-enumNames'] ? { 'x-enumNames': param['x-enumNames'] } : {}));
229
+ }
230
+ else {
231
+ if (param.enumSchema) {
232
+ schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), param.enumSchema);
233
+ }
234
+ }
235
+ param.schema =
236
+ param.isArray || ((_e = param.schema) === null || _e === void 0 ? void 0 : _e['items'])
237
+ ? { type: 'array', items: { $ref } }
238
+ : { $ref };
239
+ return (0, lodash_1.omit)(param, [
240
+ 'isArray',
241
+ 'items',
242
+ 'enumName',
243
+ 'enum',
244
+ 'x-enumNames',
245
+ 'enumSchema'
246
+ ]);
247
+ }
248
+ createEnumSchemaType(key, metadata, schemas) {
249
+ var _a, _b, _c;
250
+ if (!('enumName' in metadata) || !metadata.enumName) {
251
+ return Object.assign(Object.assign({}, metadata), { name: metadata.name || key });
252
+ }
253
+ const enumName = metadata.enumName;
254
+ const $ref = (0, utils_1.getSchemaPath)(enumName);
255
+ const enumType = (_a = (metadata.isArray ? metadata.items['type'] : metadata.type)) !== null && _a !== void 0 ? _a : 'string';
256
+ if (!schemas[enumName]) {
257
+ schemas[enumName] = Object.assign(Object.assign({ type: enumType }, metadata.enumSchema), { enum: metadata.isArray && metadata.items
258
+ ? metadata.items['enum']
259
+ : metadata.enum, description: (_b = metadata.description) !== null && _b !== void 0 ? _b : undefined, 'x-enumNames': (_c = metadata['x-enumNames']) !== null && _c !== void 0 ? _c : undefined });
260
+ }
261
+ else {
262
+ if (metadata.enumSchema) {
263
+ schemas[enumName] = Object.assign(Object.assign({}, schemas[enumName]), metadata.enumSchema);
264
+ }
265
+ if (metadata['x-enumNames']) {
266
+ schemas[enumName]['x-enumNames'] = metadata['x-enumNames'];
267
+ }
268
+ }
269
+ const _schemaObject = Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: metadata.isArray ? 'array' : 'string' });
270
+ const refHost = metadata.isArray
271
+ ? { items: { $ref } }
272
+ : { allOf: [{ $ref }] };
273
+ const paramObject = Object.assign(Object.assign({}, _schemaObject), refHost);
274
+ const pathsToOmit = ['enum', 'enumName', 'enumSchema', 'x-enumNames'];
275
+ if (!metadata.isArray) {
276
+ pathsToOmit.push('type');
277
+ }
278
+ return (0, lodash_1.omit)(paramObject, pathsToOmit);
279
+ }
280
+ createNotBuiltInTypeReference(key, metadata, trueMetadataType, schemas, pendingSchemaRefs) {
281
+ if ((0, shared_utils_1.isUndefined)(trueMetadataType)) {
282
+ throw new Error(`A circular dependency has been detected (property key: "${key}"). Please, make sure that each side of a bidirectional relationships are using lazy resolvers ("type: () => ClassType").`);
283
+ }
284
+ let { schemaName: schemaObjectName } = this.getSchemaMetadata(trueMetadataType);
285
+ if (!(schemaObjectName in schemas) &&
286
+ !pendingSchemaRefs.includes(schemaObjectName)) {
287
+ schemaObjectName = this.exploreModelSchema(trueMetadataType, schemas, [...pendingSchemaRefs, schemaObjectName]);
288
+ }
289
+ const $ref = (0, utils_1.getSchemaPath)(schemaObjectName);
290
+ if (metadata.isArray) {
291
+ return this.transformToArraySchemaProperty(metadata, key, { $ref });
292
+ }
293
+ const keysToRemove = ['type', 'isArray', 'required', 'name'];
294
+ const validMetadataObject = (0, lodash_1.omit)(metadata, keysToRemove);
295
+ const extraMetadataKeys = Object.keys(validMetadataObject);
296
+ if (extraMetadataKeys.length > 0) {
297
+ return Object.assign(Object.assign({ name: metadata.name || key, required: metadata.required }, validMetadataObject), { allOf: [{ $ref }] });
298
+ }
299
+ return {
300
+ name: metadata.name || key,
301
+ required: metadata.required,
302
+ $ref
303
+ };
304
+ }
305
+ transformToArraySchemaProperty(metadata, key, type) {
306
+ const keysToRemove = ['type', 'enum'];
307
+ const [movedProperties, keysToMove] = this.extractPropertyModifiers(metadata);
308
+ const schemaHost = Object.assign(Object.assign({}, (0, lodash_1.omit)(metadata, [...keysToRemove, ...keysToMove])), { name: metadata.name || key, type: 'array', items: (0, lodash_1.isString)(type)
309
+ ? Object.assign({ type }, movedProperties) : Object.assign(Object.assign({}, type), movedProperties) });
310
+ schemaHost.items = (0, lodash_1.omitBy)(schemaHost.items, shared_utils_1.isUndefined);
311
+ return schemaHost;
312
+ }
313
+ mapArrayCtorParam(param) {
314
+ return Object.assign(Object.assign({}, (0, lodash_1.omit)(param, 'type')), { schema: {
315
+ type: 'array',
316
+ items: {
317
+ type: 'string'
318
+ }
319
+ } });
320
+ }
321
+ createFromObjectLiteral(key, literalObj, schemas) {
322
+ const objLiteralKeys = Object.keys(literalObj);
323
+ const properties = {};
324
+ const required = [];
325
+ objLiteralKeys.forEach((key) => {
326
+ const propertyCompilerMetadata = literalObj[key];
327
+ if ((0, enum_utils_1.isEnumArray)(propertyCompilerMetadata)) {
328
+ propertyCompilerMetadata.type = 'array';
329
+ const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum);
330
+ propertyCompilerMetadata.items = {
331
+ type: (0, enum_utils_1.getEnumType)(enumValues),
332
+ enum: enumValues
333
+ };
334
+ delete propertyCompilerMetadata.enum;
335
+ }
336
+ else if (propertyCompilerMetadata.enum) {
337
+ const enumValues = (0, enum_utils_1.getEnumValues)(propertyCompilerMetadata.enum);
338
+ propertyCompilerMetadata.enum = enumValues;
339
+ propertyCompilerMetadata.type = (0, enum_utils_1.getEnumType)(enumValues);
340
+ }
341
+ const propertyMetadata = this.mergePropertyWithMetadata(key, Object, schemas, [], propertyCompilerMetadata);
342
+ if ('required' in propertyMetadata && propertyMetadata.required) {
343
+ required.push(key);
344
+ }
345
+ const keysToRemove = ['isArray', 'name', 'required'];
346
+ const validMetadataObject = (0, lodash_1.omit)(propertyMetadata, keysToRemove);
347
+ properties[key] = validMetadataObject;
348
+ });
349
+ const schema = {
350
+ name: key,
351
+ type: 'object',
352
+ properties,
353
+ required
354
+ };
355
+ return schema;
356
+ }
357
+ createFromNestedArray(key, metadata, schemas, pendingSchemaRefs) {
358
+ const recurse = (type) => {
359
+ if (!Array.isArray(type)) {
360
+ const schemaMetadata = this.createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, type);
361
+ return (0, lodash_1.omit)(schemaMetadata, ['isArray', 'name']);
362
+ }
363
+ return {
364
+ name: key,
365
+ type: 'array',
366
+ items: recurse(type[0])
367
+ };
368
+ };
369
+ return recurse(metadata.type);
370
+ }
371
+ createSchemaMetadata(key, metadata, schemas, pendingSchemaRefs, nestedArrayType) {
372
+ const typeRef = nestedArrayType || metadata.type;
373
+ if (this.isObjectLiteral(typeRef)) {
374
+ const schemaFromObjectLiteral = this.createFromObjectLiteral(key, typeRef, schemas);
375
+ if (metadata.isArray) {
376
+ return {
377
+ name: schemaFromObjectLiteral.name,
378
+ type: 'array',
379
+ items: (0, lodash_1.omit)(schemaFromObjectLiteral, 'name'),
380
+ selfRequired: metadata.required
381
+ };
382
+ }
383
+ return Object.assign(Object.assign({}, schemaFromObjectLiteral), { selfRequired: metadata.required });
384
+ }
385
+ if ((0, lodash_1.isString)(typeRef)) {
386
+ if ((0, enum_utils_1.isEnumMetadata)(metadata)) {
387
+ return this.createEnumSchemaType(key, metadata, schemas);
388
+ }
389
+ if (metadata.isArray) {
390
+ return this.transformToArraySchemaProperty(metadata, key, typeRef);
391
+ }
392
+ return Object.assign(Object.assign({}, metadata), { name: metadata.name || key });
393
+ }
394
+ if ((0, is_date_ctor_util_1.isDateCtor)(typeRef)) {
395
+ if (metadata.isArray) {
396
+ return this.transformToArraySchemaProperty(metadata, key, {
397
+ format: metadata.format || 'date-time',
398
+ type: 'string'
399
+ });
400
+ }
401
+ return Object.assign(Object.assign({ format: 'date-time' }, metadata), { type: 'string', name: metadata.name || key });
402
+ }
403
+ if (this.isBigInt(typeRef)) {
404
+ return Object.assign(Object.assign({ format: 'int64' }, metadata), { type: 'integer', name: metadata.name || key });
405
+ }
406
+ if (!(0, is_built_in_type_util_1.isBuiltInType)(typeRef)) {
407
+ return this.createNotBuiltInTypeReference(key, metadata, typeRef, schemas, pendingSchemaRefs);
408
+ }
409
+ const typeName = this.getTypeName(typeRef);
410
+ const itemType = this.swaggerTypesMapper.mapTypeToOpenAPIType(typeName);
411
+ if (metadata.isArray) {
412
+ return this.transformToArraySchemaProperty(metadata, key, {
413
+ type: itemType
414
+ });
415
+ }
416
+ else if (itemType === 'array') {
417
+ const defaultOnArray = 'string';
418
+ const hasSchemaCombinator = ['oneOf', 'anyOf', 'allOf'].some((combinator) => combinator in metadata);
419
+ if (hasSchemaCombinator) {
420
+ return Object.assign(Object.assign({}, metadata), { type: undefined, name: metadata.name || key });
421
+ }
422
+ return this.transformToArraySchemaProperty(metadata, key, {
423
+ type: defaultOnArray
424
+ });
425
+ }
426
+ return Object.assign(Object.assign({}, metadata), { name: metadata.name || key, type: itemType });
427
+ }
428
+ isArrayCtor(type) {
429
+ return type === Array;
430
+ }
431
+ isPrimitiveType(type) {
432
+ return ((0, lodash_1.isFunction)(type) &&
433
+ [String, Boolean, Number].some((item) => item === type));
434
+ }
435
+ isLazyTypeFunc(type) {
436
+ return (0, lodash_1.isFunction)(type) && type.name == 'type';
437
+ }
438
+ getTypeName(type) {
439
+ return type && (0, lodash_1.isFunction)(type) ? type.name : type;
440
+ }
441
+ isObjectLiteral(obj) {
442
+ if (typeof obj !== 'object' || !obj) {
443
+ return false;
444
+ }
445
+ const hasOwnProp = Object.prototype.hasOwnProperty;
446
+ let objPrototype = obj;
447
+ while (Object.getPrototypeOf((objPrototype = Object.getPrototypeOf(objPrototype))) !== null)
448
+ ;
449
+ for (const prop in obj) {
450
+ if (!hasOwnProp.call(obj, prop) && !hasOwnProp.call(objPrototype, prop)) {
451
+ return false;
452
+ }
453
+ }
454
+ return Object.getPrototypeOf(obj) === objPrototype;
455
+ }
456
+ isBigInt(type) {
457
+ return type === BigInt;
458
+ }
459
+ extractPropertyModifiers(metadata) {
460
+ const modifierKeys = [
461
+ 'format',
462
+ 'maximum',
463
+ 'maxLength',
464
+ 'minimum',
465
+ 'minLength',
466
+ 'pattern'
467
+ ];
468
+ return [(0, lodash_1.pick)(metadata, modifierKeys), modifierKeys];
469
+ }
470
+ }
471
+ exports.SchemaObjectFactory = SchemaObjectFactory;