diff --git a/examples/pnpm-lock.yaml b/examples/pnpm-lock.yaml index e3d14e2..2b86125 100644 --- a/examples/pnpm-lock.yaml +++ b/examples/pnpm-lock.yaml @@ -83,15 +83,6 @@ packages: '@jridgewell/trace-mapping': 0.3.22 dev: true - /@apiture/openapi-down-convert@0.9.0: - resolution: {integrity: sha512-7YAH7ytehLoLvXRjIG7BNVJdTnUY4l/X5CwuLcmuCSUVW03rnfvaW3rje1XLIo3+/i1AGocTzmjyE58xag5sRw==} - hasBin: true - dependencies: - commander: 9.5.0 - js-yaml: 4.1.0 - typescript: 4.9.5 - dev: false - /@asteasolutions/zod-to-openapi@7.0.0(zod@3.23.8): resolution: {integrity: sha512-rJRKHD2m6nUb/9ZheeN8nqOURX24WTzY8Sex1ZKT0Kpx+xfpRcD0fTD6vEeXNHGaDGxzu65Jj/jb2x6nLTjcMw==} peerDependencies: @@ -2593,12 +2584,12 @@ packages: '@typescript-eslint/visitor-keys': 7.18.0 dev: true - /@typescript-eslint/scope-manager@8.21.0: - resolution: {integrity: sha512-G3IBKz0/0IPfdeGRMbp+4rbjfSSdnGkXsM/pFZA8zM9t9klXDnB/YnKOBQ0GoPmoROa4bCq2NeHgJa5ydsQ4mA==} + /@typescript-eslint/scope-manager@8.22.0: + resolution: {integrity: sha512-/lwVV0UYgkj7wPSw0o8URy6YI64QmcOdwHuGuxWIYznO6d45ER0wXUbksr9pYdViAofpUCNJx/tAzNukgvaaiQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 dev: true /@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4): @@ -2626,8 +2617,8 @@ packages: engines: {node: ^18.18.0 || >=20.0.0} dev: true - /@typescript-eslint/types@8.21.0: - resolution: {integrity: sha512-PAL6LUuQwotLW2a8VsySDBwYMm129vFm4tMVlylzdoTybTHaAi0oBp7Ac6LhSrHHOdLM3efH+nAR6hAWoMF89A==} + /@typescript-eslint/types@8.22.0: + resolution: {integrity: sha512-0S4M4baNzp612zwpD4YOieP3VowOARgK2EkN/GBn95hpyF8E2fbMT55sRHWBq+Huaqk3b3XK+rxxlM8sPgGM6A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dev: true @@ -2646,26 +2637,26 @@ packages: globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 + semver: 7.7.0 ts-api-utils: 1.4.3(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/typescript-estree@8.21.0(typescript@5.5.4): - resolution: {integrity: sha512-x+aeKh/AjAArSauz0GiQZsjT8ciadNMHdkUSwBB9Z6PrKc/4knM4g3UfHml6oDJmKC88a6//cdxnO/+P2LkMcg==} + /@typescript-eslint/typescript-estree@8.22.0(typescript@5.5.4): + resolution: {integrity: sha512-SJX99NAS2ugGOzpyhMza/tX+zDwjvwAtQFLsBo3GQxiGcvaKlqGBkmZ+Y1IdiSi9h4Q0Lr5ey+Cp9CGWNY/F/w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '>=4.8.4 <5.8.0' dependencies: - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/visitor-keys': 8.21.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/visitor-keys': 8.22.0 debug: 4.4.0 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.6.3 + semver: 7.7.0 ts-api-utils: 2.0.0(typescript@5.5.4) typescript: 5.5.4 transitivePeerDependencies: @@ -2688,17 +2679,17 @@ packages: - typescript dev: true - /@typescript-eslint/utils@8.21.0(eslint@8.57.0)(typescript@5.5.4): - resolution: {integrity: sha512-xcXBfcq0Kaxgj7dwejMbFyq7IOHgpNMtVuDveK7w3ZGwG9owKzhALVwKpTF2yrZmEwl9SWdetf3fxNzJQaVuxw==} + /@typescript-eslint/utils@8.22.0(eslint@8.57.0)(typescript@5.5.4): + resolution: {integrity: sha512-T8oc1MbF8L+Bk2msAvCUzjxVB2Z2f+vXYfcucE2wOmYs7ZUwco5Ep0fYZw8quNwOiw9K8GYVL+Kgc2pETNTLOg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 typescript: '>=4.8.4 <5.8.0' dependencies: '@eslint-community/eslint-utils': 4.4.1(eslint@8.57.0) - '@typescript-eslint/scope-manager': 8.21.0 - '@typescript-eslint/types': 8.21.0 - '@typescript-eslint/typescript-estree': 8.21.0(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.22.0 + '@typescript-eslint/types': 8.22.0 + '@typescript-eslint/typescript-estree': 8.22.0(typescript@5.5.4) eslint: 8.57.0 typescript: 5.5.4 transitivePeerDependencies: @@ -2713,11 +2704,11 @@ packages: eslint-visitor-keys: 3.4.3 dev: true - /@typescript-eslint/visitor-keys@8.21.0: - resolution: {integrity: sha512-BkLMNpdV6prozk8LlyK/SOoWLmUFi+ZD+pcqti9ILCbVvHGk1ui1g4jJOc2WDLaeExz2qWwojxlPce5PljcT3w==} + /@typescript-eslint/visitor-keys@8.22.0: + resolution: {integrity: sha512-AWpYAXnUgvLNabGTy3uBylkgZoosva/miNd1I8Bz3SjotmQPbVqhO4Cczo8AsZ44XVErEBPr/CRSgaj8sG7g0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} dependencies: - '@typescript-eslint/types': 8.21.0 + '@typescript-eslint/types': 8.22.0 eslint-visitor-keys: 4.2.0 dev: true @@ -2856,6 +2847,7 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -3501,11 +3493,6 @@ packages: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: false - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false - /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: false @@ -4271,7 +4258,7 @@ packages: optional: true dependencies: '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0)(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 8.21.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/utils': 8.22.0(eslint@8.57.0)(typescript@5.5.4) eslint: 8.57.0 jest: 29.7.0(@types/node@20.16.2)(ts-node@10.9.2) transitivePeerDependencies: @@ -5196,7 +5183,7 @@ packages: /is-bun-module@1.3.0: resolution: {integrity: sha512-DgXeu5UWI0IsMQundYb5UAOzm6G2eVnarJ0byP6Tm55iZNKceD59LNPA2L4VvsScTtHcw0yEkVwSf7PC+QoLSA==} dependencies: - semver: 7.6.3 + semver: 7.7.0 dev: true /is-callable@1.2.7: @@ -6079,6 +6066,7 @@ packages: hasBin: true dependencies: argparse: 2.0.1 + dev: true /jsep@1.4.0: resolution: {integrity: sha512-B7qPcEVE3NVkmSJbaYxvv4cHkVW7DQsZz13pUMrfS8z8Q/BuShN+gcTXrUlPiGqM2/t/EEaI030bpxMqY8gMlw==} @@ -7139,6 +7127,13 @@ packages: resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} engines: {node: '>=10'} hasBin: true + dev: false + + /semver@7.7.0: + resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==} + engines: {node: '>=10'} + hasBin: true + dev: true /set-function-length@1.2.0: resolution: {integrity: sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==} @@ -7780,12 +7775,6 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false - /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -8159,7 +8148,7 @@ packages: dev: false file:../lib/dist/cdk-practical-constructs-0.0.1.tgz(@asteasolutions/zod-to-openapi@7.0.0)(aws-cdk-lib@2.155.0)(zod@3.23.8): - resolution: {integrity: sha512-L3ljocWwduhV+40gwRLEpCwW/BQHCJvWrQ9IGKQGM9UHBMov4Zt+baje6PCx/ljIhqz3xwq70sv4puxpKRxUrg==, tarball: file:../lib/dist/cdk-practical-constructs-0.0.1.tgz} + resolution: {integrity: sha512-KBoUI6mNJc/iWJrFCo5vtL1noj7u+mfawE+ZcIpVjs1pyBZBixJklMc9uOPdbvDRX5lNIxdGy+Z9TIfWgeufig==, tarball: file:../lib/dist/cdk-practical-constructs-0.0.1.tgz} id: file:../lib/dist/cdk-practical-constructs-0.0.1.tgz name: cdk-practical-constructs version: 0.0.1 @@ -8168,7 +8157,6 @@ packages: aws-cdk-lib: 2.x zod: 3.x dependencies: - '@apiture/openapi-down-convert': 0.9.0 '@asteasolutions/zod-to-openapi': 7.0.0(zod@3.23.8) '@aws-sdk/client-secrets-manager': 3.624.0 '@stoplight/spectral-cli': 6.14.2 diff --git a/lib/package.json b/lib/package.json index aa30137..4fb2bb5 100644 --- a/lib/package.json +++ b/lib/package.json @@ -41,7 +41,6 @@ "typescript": "^5.5.4" }, "dependencies": { - "@apiture/openapi-down-convert": "^0.9.0", "@aws-sdk/client-secrets-manager": "^3.624.0", "@stoplight/spectral-cli": "^6.13.1", "aws-lambda": "^1.0.7", diff --git a/lib/pnpm-lock.yaml b/lib/pnpm-lock.yaml index f39568c..45fb605 100644 --- a/lib/pnpm-lock.yaml +++ b/lib/pnpm-lock.yaml @@ -11,9 +11,6 @@ overrides: cross-spawn: '>=7.0.5' dependencies: - '@apiture/openapi-down-convert': - specifier: ^0.9.0 - version: 0.9.0 '@asteasolutions/zod-to-openapi': specifier: 7.x version: 7.0.0(zod@3.23.8) @@ -140,15 +137,6 @@ packages: '@jridgewell/trace-mapping': 0.3.22 dev: true - /@apiture/openapi-down-convert@0.9.0: - resolution: {integrity: sha512-7YAH7ytehLoLvXRjIG7BNVJdTnUY4l/X5CwuLcmuCSUVW03rnfvaW3rje1XLIo3+/i1AGocTzmjyE58xag5sRw==} - hasBin: true - dependencies: - commander: 9.5.0 - js-yaml: 4.1.0 - typescript: 4.9.5 - dev: false - /@asteasolutions/zod-to-openapi@7.0.0(zod@3.23.8): resolution: {integrity: sha512-rJRKHD2m6nUb/9ZheeN8nqOURX24WTzY8Sex1ZKT0Kpx+xfpRcD0fTD6vEeXNHGaDGxzu65Jj/jb2x6nLTjcMw==} peerDependencies: @@ -3051,6 +3039,7 @@ packages: /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} + dev: true /arr-diff@4.0.0: resolution: {integrity: sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==} @@ -3584,11 +3573,6 @@ packages: resolution: {integrity: sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow==} dev: false - /commander@9.5.0: - resolution: {integrity: sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ==} - engines: {node: ^12.20.0 || >=14} - dev: false - /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: false @@ -5661,6 +5645,7 @@ packages: hasBin: true dependencies: argparse: 2.0.1 + dev: true /jsep@1.3.8: resolution: {integrity: sha512-qofGylTGgYj9gZFsHuyWAN4jr35eJ66qJCK4eKDnldohuUoQFbU3iZn2zjvEbd9wOAhP9Wx5DsAAduTyE1PSWQ==} @@ -7031,12 +7016,6 @@ packages: is-typedarray: 1.0.0 dev: true - /typescript@4.9.5: - resolution: {integrity: sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==} - engines: {node: '>=4.2.0'} - hasBin: true - dev: false - /typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} diff --git a/lib/src/apigateway/openapi-gateway-lambda.test.ts b/lib/src/apigateway/openapi-gateway-lambda.test.ts index 5637375..a495b34 100644 --- a/lib/src/apigateway/openapi-gateway-lambda.test.ts +++ b/lib/src/apigateway/openapi-gateway-lambda.test.ts @@ -3,12 +3,11 @@ import { OpenAPIRegistry, RouteConfig, - OpenApiGeneratorV31, extendZodWithOpenApi, + OpenApiGeneratorV3, } from '@asteasolutions/zod-to-openapi'; import z from 'zod'; -import type { oas30, oas31 } from 'openapi3-ts'; -import { Converter } from '@apiture/openapi-down-convert'; +import type { oas30 } from 'openapi3-ts'; import { AccessLogFormat, EndpointType, @@ -247,30 +246,30 @@ describe('openapi-gateway-lambda', () => { it('addVPCEndpointConfig private endpoint', async () => { const originProps = testGatewayProps(); - const originDoc31 = testOpenpidoc31(); - const { openapiDoc31WithVPCE } = addVPCEndpointConfig(originProps, originDoc31); - expect(openapiDoc31WithVPCE['x-amazon-apigateway-endpoint-configuration']).toStrictEqual({ + const originDoc30 = testOpenApidoc30(); + const { openapiDoc30WithVPCE } = addVPCEndpointConfig(originProps, originDoc30); + expect(openapiDoc30WithVPCE['x-amazon-apigateway-endpoint-configuration']).toStrictEqual({ vpcEndpointIds: ['vpce-1111'], }); expect( - openapiDoc31WithVPCE['x-amazon-apigateway-policy'].Statement[0].Condition.StringEquals[ + openapiDoc30WithVPCE['x-amazon-apigateway-policy'].Statement[0].Condition.StringEquals[ 'aws:sourceVpce' ], ).toStrictEqual(originProps.vpcEndpointIds); // output includes fields from input - expect(originDoc31.info).toStrictEqual(openapiDoc31WithVPCE.info); + expect(originDoc30.info).toStrictEqual(openapiDoc30WithVPCE.info); }); it('addVPCEndpointConfig private endpoint should fail if invalid', async () => { const originProps = testGatewayProps(); - const originDoc31 = testOpenpidoc31(); + const originDoc30 = testOpenApidoc30(); const f = (): void => { addVPCEndpointConfig( { ...originProps, vpcEndpointIds: [], }, - originDoc31, + originDoc30, ); }; expect(f).toThrow(); @@ -281,10 +280,10 @@ describe('openapi-gateway-lambda', () => { ...testGatewayProps(), endpointTypes: [EndpointType.REGIONAL], }; - const originDoc31 = testOpenpidoc31(); - const { openapiDoc31WithVPCE } = addVPCEndpointConfig(originProps, originDoc31); - expect(openapiDoc31WithVPCE['x-amazon-apigateway-endpoint-configuration']).toBeUndefined(); - expect(openapiDoc31WithVPCE['x-amazon-apigateway-policy']).toBeUndefined(); + const originDoc30 = testOpenApidoc30(); + const { openapiDoc30WithVPCE } = addVPCEndpointConfig(originProps, originDoc30); + expect(openapiDoc30WithVPCE['x-amazon-apigateway-endpoint-configuration']).toBeUndefined(); + expect(openapiDoc30WithVPCE['x-amazon-apigateway-policy']).toBeUndefined(); }); it('generateOpenapiDocWithExtensions', async () => { @@ -310,13 +309,13 @@ describe('openapi-gateway-lambda', () => { it('openapi lint should work', async () => { const f = (): void => { - lintOpenapiDocument(testOpenpidoc30(), true); + lintOpenapiDocument(testOpenApidoc30(), true); }; expect(f).not.toThrow(); }); it('openapi lint should fail', async () => { - const odoc = testOpenpidoc30(); + const odoc = testOpenApidoc30(); // fail if parameter ids in path and declaration doesn't match // @ts-ignore @@ -744,25 +743,14 @@ const testGatewayProps = (): OpenApiGatewayLambdaProps => { }; }; -const testOpenpidoc30 = (): oas30.OpenAPIObject => { - const odoc = testOpenpidoc31(); - const converter = new Converter(odoc, { - verbose: false, - deleteExampleWithId: true, - allOfTransform: false, - }); - - return converter.convert() as oas30.OpenAPIObject; -}; - -const testOpenpidoc31 = (): oas31.OpenAPIObject => { +const testOpenApidoc30 = (): oas30.OpenAPIObject => { const registry = new OpenAPIRegistry(); registry.registerPath(testRouteConfig()); - const generator = new OpenApiGeneratorV31(registry.definitions); - const openapiDoc31 = generator.generateDocument({ - openapi: '3.1.0', + const generator = new OpenApiGeneratorV3(registry.definitions); + const openapiDoc30 = generator.generateDocument({ + openapi: '3.0.3', info: { version: '1.0.0', title: 'My API', @@ -774,12 +762,7 @@ const testOpenpidoc31 = (): oas31.OpenAPIObject => { servers: [{ url: 'http://test.com/api' }], }); - if (openapiDoc31.webhooks && Object.keys(openapiDoc31.webhooks).length === 0) { - // eslint-disable-next-line fp/no-delete - delete openapiDoc31.webhooks; - } - - return openapiDoc31; + return openapiDoc30; }; const testRouteConfig = (): RouteConfig => { diff --git a/lib/src/apigateway/openapi-gateway-lambda.ts b/lib/src/apigateway/openapi-gateway-lambda.ts index ca09042..5facc02 100644 --- a/lib/src/apigateway/openapi-gateway-lambda.ts +++ b/lib/src/apigateway/openapi-gateway-lambda.ts @@ -13,13 +13,12 @@ import { StageOptions, CfnRestApi, } from 'aws-cdk-lib/aws-apigateway'; -import type { oas30, oas31 } from 'openapi3-ts'; +import type { oas30 } from 'openapi3-ts'; import { Construct } from 'constructs'; import { ArnFormat, ScopedAws, Size, Stack } from 'aws-cdk-lib/core'; import { ILogGroup, LogGroup, RetentionDays } from 'aws-cdk-lib/aws-logs'; import { ServicePrincipal } from 'aws-cdk-lib/aws-iam'; -import { OpenAPIRegistry, OpenApiGeneratorV31, RouteConfig } from '@asteasolutions/zod-to-openapi'; -import { Converter } from '@apiture/openapi-down-convert'; +import { OpenAPIRegistry, OpenApiGeneratorV3, RouteConfig } from '@asteasolutions/zod-to-openapi'; import { lintOpenapiDocument } from '../utils/openapi-lint'; import { randomId } from '../utils/misc'; @@ -51,25 +50,10 @@ export class OpenApiGatewayLambda extends Construct { const propsWithDefaults = getPropsWithDefaults(id, props); const { deployOptions, logGroupAccessLog } = addLogGroupForTracing(this, propsWithDefaults); - // zod-to-openapi only supports openapi 3.1 - let openapiDoc31 = generateOpenapiDocWithExtensions(propsWithDefaults, awsRegion); + let openapiDoc30 = generateOpenapiDocWithExtensions(propsWithDefaults, awsRegion); - const { openapiDoc31WithVPCE } = addVPCEndpointConfig(propsWithDefaults, openapiDoc31); - openapiDoc31 = openapiDoc31WithVPCE; - - // cleanups - if (openapiDoc31.webhooks && Object.keys(openapiDoc31.webhooks).length === 0) { - // eslint-disable-next-line fp/no-delete - delete openapiDoc31.webhooks; - } - - // AWS Gateway only supports openapi 3.0, so downconvert doc from 3.1 to 3.0 - const converter = new Converter(openapiDoc31, { - verbose: false, - deleteExampleWithId: true, - allOfTransform: false, - }); - const openapiDoc30 = converter.convert() as oas30.OpenAPIObject; + const { openapiDoc30WithVPCE } = addVPCEndpointConfig(propsWithDefaults, openapiDoc30); + openapiDoc30 = openapiDoc30WithVPCE; lintOpenapiDocument(openapiDoc30, true); @@ -200,23 +184,23 @@ export const addLogGroupForTracing = ( export const addVPCEndpointConfig = ( props: OpenApiGatewayLambdaProps, - openapiDoc31: oas31.OpenAPIObject, -): { openapiDoc31WithVPCE: oas31.OpenAPIObject } => { + openapiDoc30: oas30.OpenAPIObject, +): { openapiDoc30WithVPCE: oas30.OpenAPIObject } => { const hasPrivate = props.endpointTypes?.some((value) => value === EndpointType.PRIVATE); if (!hasPrivate) { - return { openapiDoc31WithVPCE: openapiDoc31 }; + return { openapiDoc30WithVPCE: openapiDoc30 }; } if (!props.vpcEndpointIds || props.vpcEndpointIds.length === 0) { throw new Error("At least one 'vpcEndpoint' is required when any endpointType is PRIVATE"); } - const openapiDoc31WithVPCE = { - ...openapiDoc31, + const openapiDoc30WithVPCE = { + ...openapiDoc30, }; // add x-amazon-apigateway-endpoint-configuration connecting to VPCE - openapiDoc31WithVPCE['x-amazon-apigateway-endpoint-configuration'] = { + openapiDoc30WithVPCE['x-amazon-apigateway-endpoint-configuration'] = { vpcEndpointIds: props.vpcEndpointIds, }; @@ -237,15 +221,15 @@ export const addVPCEndpointConfig = ( }, ], }; - openapiDoc31WithVPCE['x-amazon-apigateway-policy'] = accessPolicy; + openapiDoc30WithVPCE['x-amazon-apigateway-policy'] = accessPolicy; - return { openapiDoc31WithVPCE }; + return { openapiDoc30WithVPCE }; }; export const generateOpenapiDocWithExtensions = ( props: OpenApiGatewayLambdaProps, awsRegion: string, -): oas31.OpenAPIObject => { +): oas30.OpenAPIObject => { // generate basic openapi document const registry = new OpenAPIRegistry(); @@ -265,11 +249,11 @@ export const generateOpenapiDocWithExtensions = ( lambdaOperationsMap[operationId] = lambdaOperation; } - const generator = new OpenApiGeneratorV31(registry.definitions); - const openapiDoc31 = generator.generateDocument(props.openapiBasic); + const generator = new OpenApiGeneratorV3(registry.definitions); + const openapiDoc30 = generator.generateDocument(props.openapiBasic); // add aws extensions with default validators - openapiDoc31['x-amazon-apigateway-request-validators'] = { + openapiDoc30['x-amazon-apigateway-request-validators'] = { requestparams: { validateRequestBody: true, validateRequestParameters: true, @@ -322,9 +306,9 @@ export const generateOpenapiDocWithExtensions = ( // jsonObj is a number or string } }; - traverse(openapiDoc31); + traverse(openapiDoc30); - return openapiDoc31; + return openapiDoc30; }; export const getPropsWithDefaults = (