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.
- package/LICENSE +21 -0
- package/README.md +211 -0
- package/bun.lock +2154 -0
- package/dist/constants.d.ts +23 -0
- package/dist/constants.js +26 -0
- package/dist/decorators/api-basic.decorator.d.ts +1 -0
- package/dist/decorators/api-basic.decorator.js +7 -0
- package/dist/decorators/api-bearer.decorator.d.ts +1 -0
- package/dist/decorators/api-bearer.decorator.js +7 -0
- package/dist/decorators/api-body.decorator.d.ts +16 -0
- package/dist/decorators/api-body.decorator.js +22 -0
- package/dist/decorators/api-callbacks.decorator.d.ts +2 -0
- package/dist/decorators/api-callbacks.decorator.js +8 -0
- package/dist/decorators/api-consumes.decorator.d.ts +1 -0
- package/dist/decorators/api-consumes.decorator.js +8 -0
- package/dist/decorators/api-cookie.decorator.d.ts +1 -0
- package/dist/decorators/api-cookie.decorator.js +7 -0
- package/dist/decorators/api-default-getter.decorator.d.ts +2 -0
- package/dist/decorators/api-default-getter.decorator.js +12 -0
- package/dist/decorators/api-exclude-controller.decorator.d.ts +1 -0
- package/dist/decorators/api-exclude-controller.decorator.js +8 -0
- package/dist/decorators/api-exclude-endpoint.decorator.d.ts +1 -0
- package/dist/decorators/api-exclude-endpoint.decorator.js +10 -0
- package/dist/decorators/api-extension.decorator.d.ts +1 -0
- package/dist/decorators/api-extension.decorator.js +38 -0
- package/dist/decorators/api-extra-models.decorator.d.ts +1 -0
- package/dist/decorators/api-extra-models.decorator.js +17 -0
- package/dist/decorators/api-header.decorator.d.ts +7 -0
- package/dist/decorators/api-header.decorator.js +37 -0
- package/dist/decorators/api-hide-property.decorator.d.ts +1 -0
- package/dist/decorators/api-hide-property.decorator.js +6 -0
- package/dist/decorators/api-link.decorator.d.ts +7 -0
- package/dist/decorators/api-link.decorator.js +21 -0
- package/dist/decorators/api-oauth2.decorator.d.ts +1 -0
- package/dist/decorators/api-oauth2.decorator.js +7 -0
- package/dist/decorators/api-operation.decorator.d.ts +5 -0
- package/dist/decorators/api-operation.decorator.js +12 -0
- package/dist/decorators/api-param.decorator.d.ts +22 -0
- package/dist/decorators/api-param.decorator.js +17 -0
- package/dist/decorators/api-produces.decorator.d.ts +1 -0
- package/dist/decorators/api-produces.decorator.js +8 -0
- package/dist/decorators/api-property.decorator.d.ts +15 -0
- package/dist/decorators/api-property.decorator.js +48 -0
- package/dist/decorators/api-query-method.decorator.d.ts +1 -0
- package/dist/decorators/api-query-method.decorator.js +8 -0
- package/dist/decorators/api-query.decorator.d.ts +24 -0
- package/dist/decorators/api-query.decorator.js +25 -0
- package/dist/decorators/api-response.decorator.d.ts +39 -0
- package/dist/decorators/api-response.decorator.js +55 -0
- package/dist/decorators/api-schema.decorator.d.ts +6 -0
- package/dist/decorators/api-schema.decorator.js +8 -0
- package/dist/decorators/api-security-device-flow.decorator.d.ts +1 -0
- package/dist/decorators/api-security-device-flow.decorator.js +7 -0
- package/dist/decorators/api-security.decorator.d.ts +2 -0
- package/dist/decorators/api-security.decorator.js +25 -0
- package/dist/decorators/api-streaming-response.decorator.d.ts +7 -0
- package/dist/decorators/api-streaming-response.decorator.js +9 -0
- package/dist/decorators/api-tag-group.decorator.d.ts +11 -0
- package/dist/decorators/api-tag-group.decorator.js +13 -0
- package/dist/decorators/api-use-tags.decorator.d.ts +1 -0
- package/dist/decorators/api-use-tags.decorator.js +8 -0
- package/dist/decorators/helpers.d.ts +8 -0
- package/dist/decorators/helpers.js +123 -0
- package/dist/decorators/index.d.ts +28 -0
- package/dist/decorators/index.js +48 -0
- package/dist/document-builder.d.ts +29 -0
- package/dist/document-builder.js +142 -0
- package/dist/explorers/api-callbacks.explorer.d.ts +2 -0
- package/dist/explorers/api-callbacks.explorer.js +36 -0
- package/dist/explorers/api-consumes.explorer.d.ts +5 -0
- package/dist/explorers/api-consumes.explorer.js +11 -0
- package/dist/explorers/api-exclude-controller.explorer.d.ts +2 -0
- package/dist/explorers/api-exclude-controller.explorer.js +10 -0
- package/dist/explorers/api-exclude-endpoint.explorer.d.ts +2 -0
- package/dist/explorers/api-exclude-endpoint.explorer.js +6 -0
- package/dist/explorers/api-extra-models.explorer.d.ts +3 -0
- package/dist/explorers/api-extra-models.explorer.js +11 -0
- package/dist/explorers/api-headers.explorer.d.ts +7 -0
- package/dist/explorers/api-headers.explorer.js +9 -0
- package/dist/explorers/api-operation.explorer.d.ts +2 -0
- package/dist/explorers/api-operation.explorer.js +43 -0
- package/dist/explorers/api-parameters.explorer.d.ts +71 -0
- package/dist/explorers/api-parameters.explorer.js +47 -0
- package/dist/explorers/api-produces.explorer.d.ts +5 -0
- package/dist/explorers/api-produces.explorer.js +11 -0
- package/dist/explorers/api-response.explorer.d.ts +13 -0
- package/dist/explorers/api-response.explorer.js +103 -0
- package/dist/explorers/api-security.explorer.d.ts +5 -0
- package/dist/explorers/api-security.explorer.js +13 -0
- package/dist/explorers/api-use-tags.explorer.d.ts +5 -0
- package/dist/explorers/api-use-tags.explorer.js +18 -0
- package/dist/extra/swagger-shim.d.ts +100 -0
- package/dist/extra/swagger-shim.js +367 -0
- package/dist/fixtures/document.base.d.ts +2 -0
- package/dist/fixtures/document.base.js +16 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +23 -0
- package/dist/interfaces/callback-object.interface.d.ts +12 -0
- package/dist/interfaces/callback-object.interface.js +2 -0
- package/dist/interfaces/denormalized-doc-resolvers.interface.d.ts +7 -0
- package/dist/interfaces/denormalized-doc-resolvers.interface.js +2 -0
- package/dist/interfaces/denormalized-doc.interface.d.ts +8 -0
- package/dist/interfaces/denormalized-doc.interface.js +2 -0
- package/dist/interfaces/enum-schema-attributes.interface.d.ts +2 -0
- package/dist/interfaces/enum-schema-attributes.interface.js +2 -0
- package/dist/interfaces/index.d.ts +3 -0
- package/dist/interfaces/index.js +18 -0
- package/dist/interfaces/module-route.interface.d.ts +2 -0
- package/dist/interfaces/module-route.interface.js +2 -0
- package/dist/interfaces/open-api-spec.interface.d.ts +252 -0
- package/dist/interfaces/open-api-spec.interface.js +2 -0
- package/dist/interfaces/schema-object-metadata.interface.d.ts +30 -0
- package/dist/interfaces/schema-object-metadata.interface.js +2 -0
- package/dist/interfaces/swagger-custom-options.interface.d.ts +24 -0
- package/dist/interfaces/swagger-custom-options.interface.js +2 -0
- package/dist/interfaces/swagger-document-options.interface.d.ts +10 -0
- package/dist/interfaces/swagger-document-options.interface.js +2 -0
- package/dist/interfaces/swagger-ui-init-options.interface.d.ts +7 -0
- package/dist/interfaces/swagger-ui-init-options.interface.js +2 -0
- package/dist/interfaces/swagger-ui-options.interface.d.ts +15 -0
- package/dist/interfaces/swagger-ui-options.interface.js +2 -0
- package/dist/plugin/compiler-plugin.d.ts +2 -0
- package/dist/plugin/compiler-plugin.js +30 -0
- package/dist/plugin/index.d.ts +2 -0
- package/dist/plugin/index.js +18 -0
- package/dist/plugin/merge-options.d.ts +17 -0
- package/dist/plugin/merge-options.js +37 -0
- package/dist/plugin/metadata-loader.d.ts +7 -0
- package/dist/plugin/metadata-loader.js +51 -0
- package/dist/plugin/plugin-constants.d.ts +3 -0
- package/dist/plugin/plugin-constants.js +6 -0
- package/dist/plugin/plugin-debug-logger.d.ts +5 -0
- package/dist/plugin/plugin-debug-logger.js +7 -0
- package/dist/plugin/utils/ast-utils.d.ts +30 -0
- package/dist/plugin/utils/ast-utils.js +273 -0
- package/dist/plugin/utils/is-filename-matched.util.d.ts +1 -0
- package/dist/plugin/utils/is-filename-matched.util.js +5 -0
- package/dist/plugin/utils/plugin-utils.d.ts +30 -0
- package/dist/plugin/utils/plugin-utils.js +307 -0
- package/dist/plugin/utils/type-reference-to-identifier.util.d.ts +7 -0
- package/dist/plugin/utils/type-reference-to-identifier.util.js +52 -0
- package/dist/plugin/visitors/abstract.visitor.d.ts +4 -0
- package/dist/plugin/visitors/abstract.visitor.js +30 -0
- package/dist/plugin/visitors/controller-class.visitor.d.ts +20 -0
- package/dist/plugin/visitors/controller-class.visitor.js +265 -0
- package/dist/plugin/visitors/model-class.visitor.d.ts +35 -0
- package/dist/plugin/visitors/model-class.visitor.js +514 -0
- package/dist/plugin/visitors/readonly.visitor.d.ts +21 -0
- package/dist/plugin/visitors/readonly.visitor.js +40 -0
- package/dist/services/constants.d.ts +1 -0
- package/dist/services/constants.js +4 -0
- package/dist/services/decorators-properties.d.ts +21 -0
- package/dist/services/decorators-properties.js +149 -0
- package/dist/services/mimetype-content-wrapper.d.ts +4 -0
- package/dist/services/mimetype-content-wrapper.js +11 -0
- package/dist/services/model-properties-accessor.d.ts +6 -0
- package/dist/services/model-properties-accessor.js +37 -0
- package/dist/services/parameter-metadata-accessor.d.ts +22 -0
- package/dist/services/parameter-metadata-accessor.js +41 -0
- package/dist/services/parameters-metadata-mapper.d.ts +9 -0
- package/dist/services/parameters-metadata-mapper.js +38 -0
- package/dist/services/response-object-factory.d.ts +28 -0
- package/dist/services/response-object-factory.js +120 -0
- package/dist/services/response-object-mapper.d.ts +39 -0
- package/dist/services/response-object-mapper.js +38 -0
- package/dist/services/schema-object-factory.d.ts +156 -0
- package/dist/services/schema-object-factory.js +471 -0
- package/dist/services/swagger-types-mapper.d.ts +260 -0
- package/dist/services/swagger-types-mapper.js +107 -0
- package/dist/storages/global-parameters.storage.d.ts +8 -0
- package/dist/storages/global-parameters.storage.js +22 -0
- package/dist/storages/global-responses.storage.d.ts +10 -0
- package/dist/storages/global-responses.storage.js +21 -0
- package/dist/swagger-explorer.d.ts +41 -0
- package/dist/swagger-explorer.js +326 -0
- package/dist/swagger-module.d.ts +27 -0
- package/dist/swagger-module.js +223 -0
- package/dist/swagger-scanner.d.ts +25 -0
- package/dist/swagger-scanner.js +116 -0
- package/dist/swagger-transformer.d.ts +4 -0
- package/dist/swagger-transformer.js +22 -0
- package/dist/swagger-ui/constants.d.ts +3 -0
- package/dist/swagger-ui/constants.js +132 -0
- package/dist/swagger-ui/helpers.d.ts +2 -0
- package/dist/swagger-ui/helpers.js +16 -0
- package/dist/swagger-ui/index.d.ts +1 -0
- package/dist/swagger-ui/index.js +17 -0
- package/dist/swagger-ui/swagger-ui.d.ts +4 -0
- package/dist/swagger-ui/swagger-ui.js +62 -0
- package/dist/type-helpers/index.d.ts +4 -0
- package/dist/type-helpers/index.js +20 -0
- package/dist/type-helpers/intersection-type.helper.d.ts +8 -0
- package/dist/type-helpers/intersection-type.helper.js +42 -0
- package/dist/type-helpers/mapped-types.utils.d.ts +2 -0
- package/dist/type-helpers/mapped-types.utils.js +31 -0
- package/dist/type-helpers/omit-type.helper.d.ts +2 -0
- package/dist/type-helpers/omit-type.helper.js +40 -0
- package/dist/type-helpers/partial-type.helper.d.ts +4 -0
- package/dist/type-helpers/partial-type.helper.js +49 -0
- package/dist/type-helpers/pick-type.helper.d.ts +2 -0
- package/dist/type-helpers/pick-type.helper.js +40 -0
- package/dist/types/swagger-enum.type.d.ts +1 -0
- package/dist/types/swagger-enum.type.js +2 -0
- package/dist/utils/assign-two-levels-deep.d.ts +1 -0
- package/dist/utils/assign-two-levels-deep.js +12 -0
- package/dist/utils/enum.utils.d.ts +9 -0
- package/dist/utils/enum.utils.js +65 -0
- package/dist/utils/extend-metadata.util.d.ts +2 -0
- package/dist/utils/extend-metadata.util.js +11 -0
- package/dist/utils/get-global-prefix.d.ts +2 -0
- package/dist/utils/get-global-prefix.js +7 -0
- package/dist/utils/get-schema-path.util.d.ts +4 -0
- package/dist/utils/get-schema-path.util.js +26 -0
- package/dist/utils/index.d.ts +1 -0
- package/dist/utils/index.js +17 -0
- package/dist/utils/is-body-parameter.util.d.ts +2 -0
- package/dist/utils/is-body-parameter.util.js +6 -0
- package/dist/utils/is-built-in-type.util.d.ts +2 -0
- package/dist/utils/is-built-in-type.util.js +8 -0
- package/dist/utils/is-date-ctor.util.d.ts +2 -0
- package/dist/utils/is-date-ctor.util.js +6 -0
- package/dist/utils/merge-and-uniq.util.d.ts +1 -0
- package/dist/utils/merge-and-uniq.util.js +7 -0
- package/dist/utils/normalize-rel-path.d.ts +1 -0
- package/dist/utils/normalize-rel-path.js +7 -0
- package/dist/utils/remove-undefined-keys.d.ts +5 -0
- package/dist/utils/remove-undefined-keys.js +11 -0
- package/dist/utils/resolve-path.util.d.ts +1 -0
- package/dist/utils/resolve-path.util.js +7 -0
- package/dist/utils/reverse-object-keys.util.d.ts +1 -0
- package/dist/utils/reverse-object-keys.util.js +11 -0
- package/dist/utils/sort-object-lexicographically.d.ts +5 -0
- package/dist/utils/sort-object-lexicographically.js +11 -0
- package/dist/utils/strip-last-slash.util.d.ts +1 -0
- package/dist/utils/strip-last-slash.util.js +8 -0
- package/dist/utils/validate-global-prefix.util.d.ts +1 -0
- package/dist/utils/validate-global-prefix.util.js +5 -0
- package/dist/utils/validate-path.util.d.ts +1 -0
- package/dist/utils/validate-path.util.js +5 -0
- package/eslint.config.mjs +47 -0
- package/nest-cli.json +6 -0
- package/package.json +116 -0
- package/plugin.js +10 -0
- package/tsconfig.build.json +21 -0
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiDefaultResponse = exports.ApiHttpVersionNotSupportedResponse = exports.ApiGatewayTimeoutResponse = exports.ApiServiceUnavailableResponse = exports.ApiBadGatewayResponse = exports.ApiNotImplementedResponse = exports.ApiInternalServerErrorResponse = exports.ApiTooManyRequestsResponse = exports.ApiPreconditionRequiredResponse = exports.ApiFailedDependencyResponse = exports.ApiUnprocessableEntityResponse = exports.ApiMisdirectedResponse = exports.ApiIAmATeapotResponse = exports.ApiExpectationFailedResponse = exports.ApiRequestedRangeNotSatisfiableResponse = exports.ApiUnsupportedMediaTypeResponse = exports.ApiUriTooLongResponse = exports.ApiPayloadTooLargeResponse = exports.ApiPreconditionFailedResponse = exports.ApiLengthRequiredResponse = exports.ApiGoneResponse = exports.ApiConflictResponse = exports.ApiRequestTimeoutResponse = exports.ApiProxyAuthenticationRequiredResponse = exports.ApiNotAcceptableResponse = exports.ApiMethodNotAllowedResponse = exports.ApiNotFoundResponse = exports.ApiForbiddenResponse = exports.ApiPaymentRequiredResponse = exports.ApiUnauthorizedResponse = exports.ApiBadRequestResponse = exports.ApiPermanentRedirectResponse = exports.ApiTemporaryRedirectResponse = exports.ApiNotModifiedResponse = exports.ApiSeeOtherResponse = exports.ApiFoundResponse = exports.ApiMovedPermanentlyResponse = exports.ApiAmbiguousResponse = exports.ApiPartialContentResponse = exports.ApiResetContentResponse = exports.ApiNoContentResponse = exports.ApiNonAuthoritativeInformationResponse = exports.ApiAcceptedResponse = exports.ApiCreatedResponse = exports.ApiOkResponse = exports.ApiEarlyhintsResponse = exports.ApiProcessingResponse = exports.ApiSwitchingProtocolsResponse = exports.ApiContinueResponse = void 0;
|
|
4
|
+
exports.ApiResponse = ApiResponse;
|
|
5
|
+
const common_1 = require("@nestjs/common");
|
|
6
|
+
const lodash_1 = require("lodash");
|
|
7
|
+
const constants_1 = require("../constants");
|
|
8
|
+
const helpers_1 = require("./helpers");
|
|
9
|
+
function ApiResponse(options, { overrideExisting } = { overrideExisting: true }) {
|
|
10
|
+
const apiResponseMetadata = options;
|
|
11
|
+
const [type, isArray] = (0, helpers_1.getTypeIsArrayTuple)(apiResponseMetadata.type, apiResponseMetadata.isArray);
|
|
12
|
+
apiResponseMetadata.type = type;
|
|
13
|
+
apiResponseMetadata.isArray = isArray;
|
|
14
|
+
options.description = options.description ? options.description : '';
|
|
15
|
+
const groupedMetadata = {
|
|
16
|
+
[options.status || 'default']: (0, lodash_1.omit)(options, 'status')
|
|
17
|
+
};
|
|
18
|
+
return (target, key, descriptor) => {
|
|
19
|
+
if (descriptor) {
|
|
20
|
+
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, descriptor.value);
|
|
21
|
+
if (responses && !overrideExisting) {
|
|
22
|
+
return descriptor;
|
|
23
|
+
}
|
|
24
|
+
Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), descriptor.value);
|
|
25
|
+
return descriptor;
|
|
26
|
+
}
|
|
27
|
+
const responses = Reflect.getMetadata(constants_1.DECORATORS.API_RESPONSE, target);
|
|
28
|
+
if (responses && !overrideExisting) {
|
|
29
|
+
return descriptor;
|
|
30
|
+
}
|
|
31
|
+
Reflect.defineMetadata(constants_1.DECORATORS.API_RESPONSE, Object.assign(Object.assign({}, responses), groupedMetadata), target);
|
|
32
|
+
return target;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
const decorators = {};
|
|
36
|
+
const statusList = Object.keys(common_1.HttpStatus)
|
|
37
|
+
.filter((key) => !isNaN(Number(common_1.HttpStatus[key])))
|
|
38
|
+
.map((key) => {
|
|
39
|
+
const functionName = key
|
|
40
|
+
.split('_')
|
|
41
|
+
.map((strToken) => `${strToken[0].toUpperCase()}${strToken.slice(1).toLowerCase()}`)
|
|
42
|
+
.join('');
|
|
43
|
+
return {
|
|
44
|
+
code: Number(common_1.HttpStatus[key]),
|
|
45
|
+
functionName: `Api${functionName}Response`
|
|
46
|
+
};
|
|
47
|
+
});
|
|
48
|
+
statusList.forEach(({ code, functionName }) => {
|
|
49
|
+
decorators[functionName] = function (options = {}) {
|
|
50
|
+
return ApiResponse(Object.assign(Object.assign({}, options), { status: code }));
|
|
51
|
+
};
|
|
52
|
+
});
|
|
53
|
+
exports.ApiContinueResponse = decorators.ApiContinueResponse, exports.ApiSwitchingProtocolsResponse = decorators.ApiSwitchingProtocolsResponse, exports.ApiProcessingResponse = decorators.ApiProcessingResponse, exports.ApiEarlyhintsResponse = decorators.ApiEarlyhintsResponse, exports.ApiOkResponse = decorators.ApiOkResponse, exports.ApiCreatedResponse = decorators.ApiCreatedResponse, exports.ApiAcceptedResponse = decorators.ApiAcceptedResponse, exports.ApiNonAuthoritativeInformationResponse = decorators.ApiNonAuthoritativeInformationResponse, exports.ApiNoContentResponse = decorators.ApiNoContentResponse, exports.ApiResetContentResponse = decorators.ApiResetContentResponse, exports.ApiPartialContentResponse = decorators.ApiPartialContentResponse, exports.ApiAmbiguousResponse = decorators.ApiAmbiguousResponse, exports.ApiMovedPermanentlyResponse = decorators.ApiMovedPermanentlyResponse, exports.ApiFoundResponse = decorators.ApiFoundResponse, exports.ApiSeeOtherResponse = decorators.ApiSeeOtherResponse, exports.ApiNotModifiedResponse = decorators.ApiNotModifiedResponse, exports.ApiTemporaryRedirectResponse = decorators.ApiTemporaryRedirectResponse, exports.ApiPermanentRedirectResponse = decorators.ApiPermanentRedirectResponse, exports.ApiBadRequestResponse = decorators.ApiBadRequestResponse, exports.ApiUnauthorizedResponse = decorators.ApiUnauthorizedResponse, exports.ApiPaymentRequiredResponse = decorators.ApiPaymentRequiredResponse, exports.ApiForbiddenResponse = decorators.ApiForbiddenResponse, exports.ApiNotFoundResponse = decorators.ApiNotFoundResponse, exports.ApiMethodNotAllowedResponse = decorators.ApiMethodNotAllowedResponse, exports.ApiNotAcceptableResponse = decorators.ApiNotAcceptableResponse, exports.ApiProxyAuthenticationRequiredResponse = decorators.ApiProxyAuthenticationRequiredResponse, exports.ApiRequestTimeoutResponse = decorators.ApiRequestTimeoutResponse, exports.ApiConflictResponse = decorators.ApiConflictResponse, exports.ApiGoneResponse = decorators.ApiGoneResponse, exports.ApiLengthRequiredResponse = decorators.ApiLengthRequiredResponse, exports.ApiPreconditionFailedResponse = decorators.ApiPreconditionFailedResponse, exports.ApiPayloadTooLargeResponse = decorators.ApiPayloadTooLargeResponse, exports.ApiUriTooLongResponse = decorators.ApiUriTooLongResponse, exports.ApiUnsupportedMediaTypeResponse = decorators.ApiUnsupportedMediaTypeResponse, exports.ApiRequestedRangeNotSatisfiableResponse = decorators.ApiRequestedRangeNotSatisfiableResponse, exports.ApiExpectationFailedResponse = decorators.ApiExpectationFailedResponse, exports.ApiIAmATeapotResponse = decorators.ApiIAmATeapotResponse, exports.ApiMisdirectedResponse = decorators.ApiMisdirectedResponse, exports.ApiUnprocessableEntityResponse = decorators.ApiUnprocessableEntityResponse, exports.ApiFailedDependencyResponse = decorators.ApiFailedDependencyResponse, exports.ApiPreconditionRequiredResponse = decorators.ApiPreconditionRequiredResponse, exports.ApiTooManyRequestsResponse = decorators.ApiTooManyRequestsResponse, exports.ApiInternalServerErrorResponse = decorators.ApiInternalServerErrorResponse, exports.ApiNotImplementedResponse = decorators.ApiNotImplementedResponse, exports.ApiBadGatewayResponse = decorators.ApiBadGatewayResponse, exports.ApiServiceUnavailableResponse = decorators.ApiServiceUnavailableResponse, exports.ApiGatewayTimeoutResponse = decorators.ApiGatewayTimeoutResponse, exports.ApiHttpVersionNotSupportedResponse = decorators.ApiHttpVersionNotSupportedResponse;
|
|
54
|
+
const ApiDefaultResponse = (options = {}) => ApiResponse(Object.assign(Object.assign({}, options), { status: 'default' }));
|
|
55
|
+
exports.ApiDefaultResponse = ApiDefaultResponse;
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { SchemaObjectMetadata } from '../interfaces/schema-object-metadata.interface';
|
|
2
|
+
export interface ApiSchemaOptions extends Pick<SchemaObjectMetadata, 'name'> {
|
|
3
|
+
name?: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function ApiSchema(options?: ApiSchemaOptions): ClassDecorator;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiSchema = ApiSchema;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
function ApiSchema(options) {
|
|
7
|
+
return (0, helpers_1.createClassDecorator)(constants_1.DECORATORS.API_SCHEMA, [options]);
|
|
8
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ApiSecurityDeviceFlow(name: string, scopes: string[]): ClassDecorator & MethodDecorator;
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiSecurityDeviceFlow = ApiSecurityDeviceFlow;
|
|
4
|
+
const api_security_decorator_1 = require("./api-security.decorator");
|
|
5
|
+
function ApiSecurityDeviceFlow(name, scopes) {
|
|
6
|
+
return (0, api_security_decorator_1.ApiSecurity)(name, scopes);
|
|
7
|
+
}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiSecurity = ApiSecurity;
|
|
4
|
+
const lodash_1 = require("lodash");
|
|
5
|
+
const constants_1 = require("../constants");
|
|
6
|
+
const extend_metadata_util_1 = require("../utils/extend-metadata.util");
|
|
7
|
+
function ApiSecurity(name, requirements = []) {
|
|
8
|
+
let metadata;
|
|
9
|
+
if ((0, lodash_1.isString)(name)) {
|
|
10
|
+
metadata = [{ [name]: requirements }];
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
metadata = [name];
|
|
14
|
+
}
|
|
15
|
+
return (target, key, descriptor) => {
|
|
16
|
+
if (descriptor) {
|
|
17
|
+
metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, descriptor.value);
|
|
18
|
+
Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, descriptor.value);
|
|
19
|
+
return descriptor;
|
|
20
|
+
}
|
|
21
|
+
metadata = (0, extend_metadata_util_1.extendMetadata)(metadata, constants_1.DECORATORS.API_SECURITY, target);
|
|
22
|
+
Reflect.defineMetadata(constants_1.DECORATORS.API_SECURITY, metadata, target);
|
|
23
|
+
return target;
|
|
24
|
+
};
|
|
25
|
+
}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
import { ApiResponseCommonMetadata } from './api-response.decorator';
|
|
3
|
+
export interface ApiStreamingResponseOptions extends Omit<ApiResponseCommonMetadata, 'type' | 'isArray' | 'content'> {
|
|
4
|
+
contentType: string;
|
|
5
|
+
type: () => Type<unknown> | Function | [Function] | string;
|
|
6
|
+
}
|
|
7
|
+
export declare function ApiStreamingResponse(options: ApiStreamingResponseOptions): MethodDecorator & ClassDecorator;
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiStreamingResponse = ApiStreamingResponse;
|
|
4
|
+
const api_response_decorator_1 = require("./api-response.decorator");
|
|
5
|
+
function ApiStreamingResponse(options) {
|
|
6
|
+
var _a;
|
|
7
|
+
const resolvedType = (_a = options.type) === null || _a === void 0 ? void 0 : _a.call(options);
|
|
8
|
+
return (0, api_response_decorator_1.ApiResponse)(Object.assign(Object.assign({}, options), { type: resolvedType, isStreaming: true, contentType: options.contentType }));
|
|
9
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { TagObject } from '../interfaces/open-api-spec.interface';
|
|
2
|
+
export type ApiTagGroupKind = 'audience' | 'badge' | 'nav' | (string & {});
|
|
3
|
+
export interface ApiTagGroupOptions extends Pick<TagObject, 'name' | 'summary' | 'description' | 'externalDocs' | 'parent' | 'kind'> {
|
|
4
|
+
name: string;
|
|
5
|
+
summary?: string;
|
|
6
|
+
description?: string;
|
|
7
|
+
externalDocs?: TagObject['externalDocs'];
|
|
8
|
+
parent?: string;
|
|
9
|
+
kind?: ApiTagGroupKind;
|
|
10
|
+
}
|
|
11
|
+
export declare function ApiTagGroup(options: ApiTagGroupOptions): ClassDecorator;
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiTagGroup = ApiTagGroup;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const api_use_tags_decorator_1 = require("./api-use-tags.decorator");
|
|
6
|
+
function ApiTagGroup(options) {
|
|
7
|
+
return (target) => {
|
|
8
|
+
const previous = Reflect.getMetadata(constants_1.DECORATORS.API_TAG_GROUP, target) || [];
|
|
9
|
+
Reflect.defineMetadata(constants_1.DECORATORS.API_TAG_GROUP, [...previous, options], target);
|
|
10
|
+
(0, api_use_tags_decorator_1.ApiTags)(options.name)(target);
|
|
11
|
+
return target;
|
|
12
|
+
};
|
|
13
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare function ApiTags(...tags: string[]): MethodDecorator & ClassDecorator;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ApiTags = ApiTags;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const helpers_1 = require("./helpers");
|
|
6
|
+
function ApiTags(...tags) {
|
|
7
|
+
return (0, helpers_1.createMixedDecorator)(constants_1.DECORATORS.API_TAGS, tags);
|
|
8
|
+
}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare function createMethodDecorator<T = any>(metakey: string, metadata: T, { overrideExisting }?: {
|
|
2
|
+
overrideExisting: boolean;
|
|
3
|
+
}): MethodDecorator;
|
|
4
|
+
export declare function createClassDecorator<T extends Array<any> = any>(metakey: string, metadata?: T): ClassDecorator;
|
|
5
|
+
export declare function createPropertyDecorator<T extends Record<string, any> = any>(metakey: string, metadata: T, overrideExisting?: boolean): PropertyDecorator;
|
|
6
|
+
export declare function createMixedDecorator<T = any>(metakey: string, metadata: T): MethodDecorator & ClassDecorator;
|
|
7
|
+
export declare function createParamDecorator<T extends Record<string, any> = any>(metadata: T, initial: Partial<T>): MethodDecorator & ClassDecorator;
|
|
8
|
+
export declare function getTypeIsArrayTuple(input: Function | [Function] | undefined | string | Record<string, any>, isArrayFlag: boolean): [Function | undefined, boolean];
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createMethodDecorator = createMethodDecorator;
|
|
4
|
+
exports.createClassDecorator = createClassDecorator;
|
|
5
|
+
exports.createPropertyDecorator = createPropertyDecorator;
|
|
6
|
+
exports.createMixedDecorator = createMixedDecorator;
|
|
7
|
+
exports.createParamDecorator = createParamDecorator;
|
|
8
|
+
exports.getTypeIsArrayTuple = getTypeIsArrayTuple;
|
|
9
|
+
const constants_1 = require("@nestjs/common/constants");
|
|
10
|
+
const shared_utils_1 = require("@nestjs/common/utils/shared.utils");
|
|
11
|
+
const lodash_1 = require("lodash");
|
|
12
|
+
const constants_2 = require("../constants");
|
|
13
|
+
const plugin_constants_1 = require("../plugin/plugin-constants");
|
|
14
|
+
function createMethodDecorator(metakey, metadata, { overrideExisting } = { overrideExisting: true }) {
|
|
15
|
+
return (target, key, descriptor) => {
|
|
16
|
+
if (typeof metadata === 'object') {
|
|
17
|
+
const prevValue = Reflect.getMetadata(metakey, descriptor.value);
|
|
18
|
+
if (prevValue && !overrideExisting) {
|
|
19
|
+
return descriptor;
|
|
20
|
+
}
|
|
21
|
+
Reflect.defineMetadata(metakey, Object.assign(Object.assign({}, prevValue), metadata), descriptor.value);
|
|
22
|
+
return descriptor;
|
|
23
|
+
}
|
|
24
|
+
Reflect.defineMetadata(metakey, metadata, descriptor.value);
|
|
25
|
+
return descriptor;
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
function createClassDecorator(metakey, metadata = []) {
|
|
29
|
+
return (target) => {
|
|
30
|
+
const prevValue = Reflect.getMetadata(metakey, target) || [];
|
|
31
|
+
Reflect.defineMetadata(metakey, [...prevValue, ...metadata], target);
|
|
32
|
+
return target;
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function createPropertyDecorator(metakey, metadata, overrideExisting = true) {
|
|
36
|
+
return (target, propertyKey) => {
|
|
37
|
+
var _a, _b, _c, _d;
|
|
38
|
+
const properties = Reflect.getMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, target) || [];
|
|
39
|
+
const key = `:${propertyKey}`;
|
|
40
|
+
if (!properties.includes(key)) {
|
|
41
|
+
Reflect.defineMetadata(constants_2.DECORATORS.API_MODEL_PROPERTIES_ARRAY, [...properties, `:${propertyKey}`], target);
|
|
42
|
+
}
|
|
43
|
+
const existingMetadata = Reflect.getMetadata(metakey, target, propertyKey);
|
|
44
|
+
if (existingMetadata) {
|
|
45
|
+
const newMetadata = (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined));
|
|
46
|
+
const metadataToSave = overrideExisting
|
|
47
|
+
? Object.assign(Object.assign({}, existingMetadata), newMetadata) : Object.assign(Object.assign({}, newMetadata), existingMetadata);
|
|
48
|
+
Reflect.defineMetadata(metakey, metadataToSave, target, propertyKey);
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
const type = (_d = (_c = (_b = (_a = target === null || target === void 0 ? void 0 : target.constructor) === null || _a === void 0 ? void 0 : _a[plugin_constants_1.METADATA_FACTORY_NAME]) === null || _b === void 0 ? void 0 : _b.call(_a)[propertyKey]) === null || _c === void 0 ? void 0 : _c.type) !== null && _d !== void 0 ? _d : Reflect.getMetadata('design:type', target, propertyKey);
|
|
52
|
+
Reflect.defineMetadata(metakey, Object.assign({ type }, (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined))), target, propertyKey);
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
function createMixedDecorator(metakey, metadata) {
|
|
57
|
+
return (target, key, descriptor) => {
|
|
58
|
+
if (descriptor) {
|
|
59
|
+
let metadatas;
|
|
60
|
+
if (Array.isArray(metadata)) {
|
|
61
|
+
const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || [];
|
|
62
|
+
metadatas = [...previousMetadata, ...metadata];
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
const previousMetadata = Reflect.getMetadata(metakey, descriptor.value) || {};
|
|
66
|
+
metadatas = Object.assign(Object.assign({}, previousMetadata), metadata);
|
|
67
|
+
}
|
|
68
|
+
Reflect.defineMetadata(metakey, metadatas, descriptor.value);
|
|
69
|
+
return descriptor;
|
|
70
|
+
}
|
|
71
|
+
let metadatas;
|
|
72
|
+
if (Array.isArray(metadata)) {
|
|
73
|
+
const previousMetadata = Reflect.getMetadata(metakey, target) || [];
|
|
74
|
+
metadatas = [...previousMetadata, ...metadata];
|
|
75
|
+
}
|
|
76
|
+
else {
|
|
77
|
+
const previousMetadata = Reflect.getMetadata(metakey, target) || {};
|
|
78
|
+
metadatas = Object.assign(Object.assign({}, previousMetadata), metadata);
|
|
79
|
+
}
|
|
80
|
+
Reflect.defineMetadata(metakey, metadatas, target);
|
|
81
|
+
return target;
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
function createParamDecorator(metadata, initial) {
|
|
85
|
+
return (target, key, descriptor) => {
|
|
86
|
+
const paramOptions = Object.assign(Object.assign({}, initial), (0, lodash_1.pickBy)(metadata, (0, lodash_1.negate)(lodash_1.isUndefined)));
|
|
87
|
+
if (descriptor) {
|
|
88
|
+
const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, descriptor.value) || [];
|
|
89
|
+
Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], descriptor.value);
|
|
90
|
+
return descriptor;
|
|
91
|
+
}
|
|
92
|
+
if (typeof target === 'object') {
|
|
93
|
+
return target;
|
|
94
|
+
}
|
|
95
|
+
const propertyKeys = Object.getOwnPropertyNames(target.prototype);
|
|
96
|
+
for (const propertyKey of propertyKeys) {
|
|
97
|
+
if ((0, shared_utils_1.isConstructor)(propertyKey)) {
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
const methodDescriptor = Object.getOwnPropertyDescriptor(target.prototype, propertyKey);
|
|
101
|
+
if (!methodDescriptor) {
|
|
102
|
+
continue;
|
|
103
|
+
}
|
|
104
|
+
const isApiMethod = Reflect.hasMetadata(constants_1.METHOD_METADATA, methodDescriptor.value);
|
|
105
|
+
if (!isApiMethod) {
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
const parameters = Reflect.getMetadata(constants_2.DECORATORS.API_PARAMETERS, methodDescriptor.value) || [];
|
|
109
|
+
Reflect.defineMetadata(constants_2.DECORATORS.API_PARAMETERS, [...parameters, paramOptions], methodDescriptor.value);
|
|
110
|
+
}
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
function getTypeIsArrayTuple(input, isArrayFlag) {
|
|
114
|
+
if (!input) {
|
|
115
|
+
return [input, isArrayFlag];
|
|
116
|
+
}
|
|
117
|
+
if (isArrayFlag) {
|
|
118
|
+
return [input, isArrayFlag];
|
|
119
|
+
}
|
|
120
|
+
const isInputArray = (0, lodash_1.isArray)(input);
|
|
121
|
+
const type = isInputArray ? input[0] : input;
|
|
122
|
+
return [type, isInputArray];
|
|
123
|
+
}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export * from './api-basic.decorator';
|
|
2
|
+
export * from './api-bearer.decorator';
|
|
3
|
+
export * from './api-body.decorator';
|
|
4
|
+
export * from './api-consumes.decorator';
|
|
5
|
+
export * from './api-cookie.decorator';
|
|
6
|
+
export * from './api-default-getter.decorator';
|
|
7
|
+
export * from './api-exclude-endpoint.decorator';
|
|
8
|
+
export * from './api-exclude-controller.decorator';
|
|
9
|
+
export * from './api-extra-models.decorator';
|
|
10
|
+
export * from './api-header.decorator';
|
|
11
|
+
export * from './api-hide-property.decorator';
|
|
12
|
+
export * from './api-link.decorator';
|
|
13
|
+
export * from './api-oauth2.decorator';
|
|
14
|
+
export * from './api-operation.decorator';
|
|
15
|
+
export * from './api-param.decorator';
|
|
16
|
+
export * from './api-produces.decorator';
|
|
17
|
+
export { ApiProperty, ApiPropertyOptional, ApiPropertyOptions, ApiResponseProperty } from './api-property.decorator';
|
|
18
|
+
export * from './api-query.decorator';
|
|
19
|
+
export * from './api-query-method.decorator';
|
|
20
|
+
export * from './api-response.decorator';
|
|
21
|
+
export * from './api-streaming-response.decorator';
|
|
22
|
+
export * from './api-security.decorator';
|
|
23
|
+
export * from './api-security-device-flow.decorator';
|
|
24
|
+
export * from './api-use-tags.decorator';
|
|
25
|
+
export * from './api-tag-group.decorator';
|
|
26
|
+
export * from './api-callbacks.decorator';
|
|
27
|
+
export * from './api-extension.decorator';
|
|
28
|
+
export * from './api-schema.decorator';
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.ApiResponseProperty = exports.ApiPropertyOptional = exports.ApiProperty = void 0;
|
|
18
|
+
__exportStar(require("./api-basic.decorator"), exports);
|
|
19
|
+
__exportStar(require("./api-bearer.decorator"), exports);
|
|
20
|
+
__exportStar(require("./api-body.decorator"), exports);
|
|
21
|
+
__exportStar(require("./api-consumes.decorator"), exports);
|
|
22
|
+
__exportStar(require("./api-cookie.decorator"), exports);
|
|
23
|
+
__exportStar(require("./api-default-getter.decorator"), exports);
|
|
24
|
+
__exportStar(require("./api-exclude-endpoint.decorator"), exports);
|
|
25
|
+
__exportStar(require("./api-exclude-controller.decorator"), exports);
|
|
26
|
+
__exportStar(require("./api-extra-models.decorator"), exports);
|
|
27
|
+
__exportStar(require("./api-header.decorator"), exports);
|
|
28
|
+
__exportStar(require("./api-hide-property.decorator"), exports);
|
|
29
|
+
__exportStar(require("./api-link.decorator"), exports);
|
|
30
|
+
__exportStar(require("./api-oauth2.decorator"), exports);
|
|
31
|
+
__exportStar(require("./api-operation.decorator"), exports);
|
|
32
|
+
__exportStar(require("./api-param.decorator"), exports);
|
|
33
|
+
__exportStar(require("./api-produces.decorator"), exports);
|
|
34
|
+
var api_property_decorator_1 = require("./api-property.decorator");
|
|
35
|
+
Object.defineProperty(exports, "ApiProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiProperty; } });
|
|
36
|
+
Object.defineProperty(exports, "ApiPropertyOptional", { enumerable: true, get: function () { return api_property_decorator_1.ApiPropertyOptional; } });
|
|
37
|
+
Object.defineProperty(exports, "ApiResponseProperty", { enumerable: true, get: function () { return api_property_decorator_1.ApiResponseProperty; } });
|
|
38
|
+
__exportStar(require("./api-query.decorator"), exports);
|
|
39
|
+
__exportStar(require("./api-query-method.decorator"), exports);
|
|
40
|
+
__exportStar(require("./api-response.decorator"), exports);
|
|
41
|
+
__exportStar(require("./api-streaming-response.decorator"), exports);
|
|
42
|
+
__exportStar(require("./api-security.decorator"), exports);
|
|
43
|
+
__exportStar(require("./api-security-device-flow.decorator"), exports);
|
|
44
|
+
__exportStar(require("./api-use-tags.decorator"), exports);
|
|
45
|
+
__exportStar(require("./api-tag-group.decorator"), exports);
|
|
46
|
+
__exportStar(require("./api-callbacks.decorator"), exports);
|
|
47
|
+
__exportStar(require("./api-extension.decorator"), exports);
|
|
48
|
+
__exportStar(require("./api-schema.decorator"), exports);
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { ApiResponseOptions } from './decorators/api-response.decorator';
|
|
2
|
+
import { OpenAPIObject } from './interfaces';
|
|
3
|
+
import { ExtensionLocation, ExternalDocumentationObject, ParameterObject, SecurityRequirementObject, SecuritySchemeObject, ServerVariableObject } from './interfaces/open-api-spec.interface';
|
|
4
|
+
export declare class DocumentBuilder {
|
|
5
|
+
private readonly logger;
|
|
6
|
+
private readonly document;
|
|
7
|
+
setTitle(title: string): this;
|
|
8
|
+
setDescription(description: string): this;
|
|
9
|
+
setVersion(version: string): this;
|
|
10
|
+
setTermsOfService(termsOfService: string): this;
|
|
11
|
+
setContact(name: string, url: string, email: string): this;
|
|
12
|
+
setLicense(name: string, url: string): this;
|
|
13
|
+
setOpenAPIVersion(version: string): this;
|
|
14
|
+
addServer(url: string, description?: string, variables?: Record<string, ServerVariableObject>): this;
|
|
15
|
+
setExternalDoc(description: string, url: string): this;
|
|
16
|
+
setBasePath(path: string): this;
|
|
17
|
+
addTag(name: string, description?: string, externalDocs?: ExternalDocumentationObject, summary?: string): this;
|
|
18
|
+
addExtension(extensionKey: string, extensionProperties: any, location?: ExtensionLocation): this;
|
|
19
|
+
addSecurity(name: string, options: SecuritySchemeObject): this;
|
|
20
|
+
addGlobalResponse(...respones: ApiResponseOptions[]): this;
|
|
21
|
+
addGlobalParameters(...parameters: Omit<ParameterObject, 'example' | 'examples'>[]): this;
|
|
22
|
+
addSecurityRequirements(name: string | SecurityRequirementObject, requirements?: string[]): this;
|
|
23
|
+
addBearerAuth(options?: SecuritySchemeObject, name?: string): this;
|
|
24
|
+
addOAuth2(options?: SecuritySchemeObject, name?: string): this;
|
|
25
|
+
addApiKey(options?: SecuritySchemeObject, name?: string): this;
|
|
26
|
+
addBasicAuth(options?: SecuritySchemeObject, name?: string): this;
|
|
27
|
+
addCookieAuth(cookieName?: string, options?: SecuritySchemeObject, securityName?: string): this;
|
|
28
|
+
build(): Omit<OpenAPIObject, 'paths'>;
|
|
29
|
+
}
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DocumentBuilder = void 0;
|
|
4
|
+
const common_1 = require("@nestjs/common");
|
|
5
|
+
const lodash_1 = require("lodash");
|
|
6
|
+
const document_base_1 = require("./fixtures/document.base");
|
|
7
|
+
const global_parameters_storage_1 = require("./storages/global-parameters.storage");
|
|
8
|
+
const global_responses_storage_1 = require("./storages/global-responses.storage");
|
|
9
|
+
class DocumentBuilder {
|
|
10
|
+
constructor() {
|
|
11
|
+
this.logger = new common_1.Logger(DocumentBuilder.name);
|
|
12
|
+
this.document = (0, document_base_1.buildDocumentBase)();
|
|
13
|
+
}
|
|
14
|
+
setTitle(title) {
|
|
15
|
+
this.document.info.title = title;
|
|
16
|
+
return this;
|
|
17
|
+
}
|
|
18
|
+
setDescription(description) {
|
|
19
|
+
this.document.info.description = description;
|
|
20
|
+
return this;
|
|
21
|
+
}
|
|
22
|
+
setVersion(version) {
|
|
23
|
+
this.document.info.version = version;
|
|
24
|
+
return this;
|
|
25
|
+
}
|
|
26
|
+
setTermsOfService(termsOfService) {
|
|
27
|
+
this.document.info.termsOfService = termsOfService;
|
|
28
|
+
return this;
|
|
29
|
+
}
|
|
30
|
+
setContact(name, url, email) {
|
|
31
|
+
this.document.info.contact = { name, url, email };
|
|
32
|
+
return this;
|
|
33
|
+
}
|
|
34
|
+
setLicense(name, url) {
|
|
35
|
+
this.document.info.license = { name, url };
|
|
36
|
+
return this;
|
|
37
|
+
}
|
|
38
|
+
setOpenAPIVersion(version) {
|
|
39
|
+
if (version.match(/^\d\.\d\.\d$/)) {
|
|
40
|
+
this.document.openapi = version;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
this.logger.warn('The OpenApi version is invalid. Expecting format "x.x.x"');
|
|
44
|
+
}
|
|
45
|
+
return this;
|
|
46
|
+
}
|
|
47
|
+
addServer(url, description, variables) {
|
|
48
|
+
this.document.servers.push({ url, description, variables });
|
|
49
|
+
return this;
|
|
50
|
+
}
|
|
51
|
+
setExternalDoc(description, url) {
|
|
52
|
+
this.document.externalDocs = { description, url };
|
|
53
|
+
return this;
|
|
54
|
+
}
|
|
55
|
+
setBasePath(path) {
|
|
56
|
+
this.logger.warn('The "setBasePath" method has been deprecated. Now, a global prefix is populated automatically. If you want to ignore it, take a look here: https://docs.nestjs.com/recipes/swagger#global-prefix. Alternatively, you can use "addServer" method to set up multiple different paths.');
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
addTag(name, description = '', externalDocs, summary) {
|
|
60
|
+
this.document.tags = this.document.tags.concat((0, lodash_1.pickBy)({
|
|
61
|
+
name,
|
|
62
|
+
summary,
|
|
63
|
+
description,
|
|
64
|
+
externalDocs
|
|
65
|
+
}, (0, lodash_1.negate)(lodash_1.isUndefined)));
|
|
66
|
+
return this;
|
|
67
|
+
}
|
|
68
|
+
addExtension(extensionKey, extensionProperties, location = 'root') {
|
|
69
|
+
if (!extensionKey.startsWith('x-')) {
|
|
70
|
+
throw new Error('Extension key is not prefixed. Please ensure you prefix it with `x-`.');
|
|
71
|
+
}
|
|
72
|
+
if (location === 'root') {
|
|
73
|
+
this.document[extensionKey] = (0, lodash_1.clone)(extensionProperties);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
this.document[location][extensionKey] = (0, lodash_1.clone)(extensionProperties);
|
|
77
|
+
}
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
addSecurity(name, options) {
|
|
81
|
+
this.document.components.securitySchemes = Object.assign(Object.assign({}, (this.document.components.securitySchemes || {})), { [name]: options });
|
|
82
|
+
return this;
|
|
83
|
+
}
|
|
84
|
+
addGlobalResponse(...respones) {
|
|
85
|
+
const groupedByStatus = respones.reduce((acc, response) => {
|
|
86
|
+
const { status = 'default' } = response;
|
|
87
|
+
acc[status] = (0, lodash_1.omit)(response, 'status');
|
|
88
|
+
return acc;
|
|
89
|
+
}, {});
|
|
90
|
+
global_responses_storage_1.GlobalResponsesStorage.add(groupedByStatus);
|
|
91
|
+
return this;
|
|
92
|
+
}
|
|
93
|
+
addGlobalParameters(...parameters) {
|
|
94
|
+
global_parameters_storage_1.GlobalParametersStorage.add(...parameters);
|
|
95
|
+
return this;
|
|
96
|
+
}
|
|
97
|
+
addSecurityRequirements(name, requirements = []) {
|
|
98
|
+
let securityRequirement;
|
|
99
|
+
if ((0, lodash_1.isString)(name)) {
|
|
100
|
+
securityRequirement = { [name]: requirements };
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
securityRequirement = name;
|
|
104
|
+
}
|
|
105
|
+
this.document.security = (this.document.security || []).concat(Object.assign({}, securityRequirement));
|
|
106
|
+
return this;
|
|
107
|
+
}
|
|
108
|
+
addBearerAuth(options = {
|
|
109
|
+
type: 'http'
|
|
110
|
+
}, name = 'bearer') {
|
|
111
|
+
this.addSecurity(name, Object.assign({ scheme: 'bearer', bearerFormat: 'JWT' }, options));
|
|
112
|
+
return this;
|
|
113
|
+
}
|
|
114
|
+
addOAuth2(options = {
|
|
115
|
+
type: 'oauth2'
|
|
116
|
+
}, name = 'oauth2') {
|
|
117
|
+
this.addSecurity(name, Object.assign({ type: 'oauth2', flows: {} }, options));
|
|
118
|
+
return this;
|
|
119
|
+
}
|
|
120
|
+
addApiKey(options = {
|
|
121
|
+
type: 'apiKey'
|
|
122
|
+
}, name = 'api_key') {
|
|
123
|
+
this.addSecurity(name, Object.assign({ type: 'apiKey', in: 'header', name }, options));
|
|
124
|
+
return this;
|
|
125
|
+
}
|
|
126
|
+
addBasicAuth(options = {
|
|
127
|
+
type: 'http'
|
|
128
|
+
}, name = 'basic') {
|
|
129
|
+
this.addSecurity(name, Object.assign({ type: 'http', scheme: 'basic' }, options));
|
|
130
|
+
return this;
|
|
131
|
+
}
|
|
132
|
+
addCookieAuth(cookieName = 'connect.sid', options = {
|
|
133
|
+
type: 'apiKey'
|
|
134
|
+
}, securityName = 'cookie') {
|
|
135
|
+
this.addSecurity(securityName, Object.assign({ type: 'apiKey', in: 'cookie', name: cookieName }, options));
|
|
136
|
+
return this;
|
|
137
|
+
}
|
|
138
|
+
build() {
|
|
139
|
+
return this.document;
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
exports.DocumentBuilder = DocumentBuilder;
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exploreApiCallbacksMetadata = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const utils_1 = require("../utils");
|
|
6
|
+
const exploreApiCallbacksMetadata = (instance, prototype, method) => {
|
|
7
|
+
const callbacksData = Reflect.getMetadata(constants_1.DECORATORS.API_CALLBACKS, method);
|
|
8
|
+
if (!callbacksData)
|
|
9
|
+
return callbacksData;
|
|
10
|
+
return callbacksData.reduce((acc, callbackData) => {
|
|
11
|
+
const { name: eventName, callbackUrl, method: callbackMethod, requestBody, expectedResponse } = callbackData;
|
|
12
|
+
return Object.assign(Object.assign({}, acc), { [eventName]: {
|
|
13
|
+
[callbackUrl]: {
|
|
14
|
+
[callbackMethod]: {
|
|
15
|
+
requestBody: {
|
|
16
|
+
required: true,
|
|
17
|
+
content: {
|
|
18
|
+
'application/json': {
|
|
19
|
+
schema: {
|
|
20
|
+
$ref: (0, utils_1.getSchemaPath)(requestBody.type)
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
responses: {
|
|
26
|
+
[expectedResponse.status]: {
|
|
27
|
+
description: expectedResponse.description ||
|
|
28
|
+
'Your server returns this code if it accepts the callback'
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
} });
|
|
34
|
+
}, {});
|
|
35
|
+
};
|
|
36
|
+
exports.exploreApiCallbacksMetadata = exploreApiCallbacksMetadata;
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Type } from '@nestjs/common';
|
|
2
|
+
export declare const exploreGlobalApiConsumesMetadata: (metatype: Type<unknown>) => {
|
|
3
|
+
consumes: any;
|
|
4
|
+
};
|
|
5
|
+
export declare const exploreApiConsumesMetadata: (instance: object, prototype: Type<unknown>, method: object) => string[] | undefined;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exploreApiConsumesMetadata = exports.exploreGlobalApiConsumesMetadata = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const exploreGlobalApiConsumesMetadata = (metatype) => {
|
|
6
|
+
const consumes = Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, metatype);
|
|
7
|
+
return consumes ? { consumes } : undefined;
|
|
8
|
+
};
|
|
9
|
+
exports.exploreGlobalApiConsumesMetadata = exploreGlobalApiConsumesMetadata;
|
|
10
|
+
const exploreApiConsumesMetadata = (instance, prototype, method) => Reflect.getMetadata(constants_1.DECORATORS.API_CONSUMES, method);
|
|
11
|
+
exports.exploreApiConsumesMetadata = exploreApiConsumesMetadata;
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.exploreApiExcludeControllerMetadata = void 0;
|
|
4
|
+
const constants_1 = require("../constants");
|
|
5
|
+
const exploreApiExcludeControllerMetadata = (metatype) => {
|
|
6
|
+
var _a;
|
|
7
|
+
return ((_a = Reflect.getMetadata(constants_1.DECORATORS.API_EXCLUDE_CONTROLLER, metatype)) === null || _a === void 0 ? void 0 : _a[0]) ===
|
|
8
|
+
true;
|
|
9
|
+
};
|
|
10
|
+
exports.exploreApiExcludeControllerMetadata = exploreApiExcludeControllerMetadata;
|