@nestia/sdk 14.0.1 → 14.0.3
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/assets/bundle/distribute/build-sdk.cjs +28 -0
- package/assets/bundle/distribute/package.json +6 -2
- package/lib/INestiaConfig.d.ts +55 -24
- package/lib/NestiaSdkApplication.d.ts +60 -0
- package/lib/NestiaSdkApplication.js +63 -5
- package/lib/NestiaSdkApplication.js.map +1 -1
- package/lib/NestiaSwaggerComposer.d.ts +21 -0
- package/lib/NestiaSwaggerComposer.js +21 -3
- package/lib/NestiaSwaggerComposer.js.map +1 -1
- package/lib/analyses/AccessorAnalyzer.d.ts +26 -0
- package/lib/analyses/AccessorAnalyzer.js +26 -0
- package/lib/analyses/AccessorAnalyzer.js.map +1 -1
- package/lib/analyses/ConfigAnalyzer.d.ts +41 -0
- package/lib/analyses/ConfigAnalyzer.js +57 -80
- package/lib/analyses/ConfigAnalyzer.js.map +1 -1
- package/lib/analyses/ImportAnalyzer.d.ts +25 -0
- package/lib/analyses/ImportAnalyzer.js +25 -0
- package/lib/analyses/ImportAnalyzer.js.map +1 -1
- package/lib/analyses/ParameterNameAnalyzer.d.ts +24 -0
- package/lib/analyses/ParameterNameAnalyzer.js +15 -0
- package/lib/analyses/ParameterNameAnalyzer.js.map +1 -1
- package/lib/analyses/PathAnalyzer.d.ts +63 -1
- package/lib/analyses/PathAnalyzer.js +54 -9
- package/lib/analyses/PathAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectControllerAnalyzer.d.ts +32 -0
- package/lib/analyses/ReflectControllerAnalyzer.js +22 -0
- package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +29 -0
- package/lib/analyses/ReflectHttpOperationAnalyzer.js +28 -17
- package/lib/analyses/ReflectHttpOperationAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.d.ts +31 -0
- package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js +21 -0
- package/lib/analyses/ReflectHttpOperationExceptionAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationParameterAnalyzer.d.ts +31 -0
- package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js +21 -0
- package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +32 -0
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +22 -0
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +29 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js +30 -9
- package/lib/analyses/ReflectMcpOperationAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectMetadataAnalyzer.d.ts +47 -0
- package/lib/analyses/ReflectMetadataAnalyzer.js +47 -0
- package/lib/analyses/ReflectMetadataAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectWebSocketOperationAnalyzer.d.ts +29 -0
- package/lib/analyses/ReflectWebSocketOperationAnalyzer.js +22 -5
- package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
- package/lib/analyses/SecurityAnalyzer.d.ts +15 -0
- package/lib/analyses/SecurityAnalyzer.js +15 -0
- package/lib/analyses/SecurityAnalyzer.js.map +1 -1
- package/lib/analyses/SwaggerExampleAnalyzer.d.ts +16 -0
- package/lib/analyses/SwaggerExampleAnalyzer.js +16 -0
- package/lib/analyses/SwaggerExampleAnalyzer.js.map +1 -1
- package/lib/analyses/TypedHttpRouteAnalyzer.d.ts +41 -3
- package/lib/analyses/TypedHttpRouteAnalyzer.js +172 -157
- package/lib/analyses/TypedHttpRouteAnalyzer.js.map +1 -1
- package/lib/analyses/TypedMcpRouteAnalyzer.d.ts +29 -0
- package/lib/analyses/TypedMcpRouteAnalyzer.js +152 -20
- package/lib/analyses/TypedMcpRouteAnalyzer.js.map +1 -1
- package/lib/analyses/TypedWebSocketRouteAnalyzer.d.ts +19 -0
- package/lib/analyses/TypedWebSocketRouteAnalyzer.js +19 -0
- package/lib/analyses/TypedWebSocketRouteAnalyzer.js.map +1 -1
- package/lib/decorators/OperationMetadata.d.ts +6 -0
- package/lib/decorators/OperationMetadata.js +6 -0
- package/lib/decorators/OperationMetadata.js.map +1 -1
- package/lib/executable/internal/CommandParser.d.ts +19 -0
- package/lib/executable/internal/CommandParser.js +19 -0
- package/lib/executable/internal/CommandParser.js.map +1 -1
- package/lib/executable/internal/NestiaConfigLoader.d.ts +56 -0
- package/lib/executable/internal/NestiaConfigLoader.js +48 -42
- package/lib/executable/internal/NestiaConfigLoader.js.map +1 -1
- package/lib/executable/internal/NestiaSdkCommand.d.ts +60 -0
- package/lib/executable/internal/NestiaSdkCommand.js +95 -3
- package/lib/executable/internal/NestiaSdkCommand.js.map +1 -1
- package/lib/executable/internal/NestiaSdkWatcher.d.ts +81 -0
- package/lib/executable/internal/NestiaSdkWatcher.js +122 -38
- package/lib/executable/internal/NestiaSdkWatcher.js.map +1 -1
- package/lib/executable/internal/NestiaSwaggerWatch.d.ts +80 -0
- package/lib/executable/internal/NestiaSwaggerWatch.js +308 -0
- package/lib/executable/internal/NestiaSwaggerWatch.js.map +1 -0
- package/lib/factories/ExpressionFactory.d.ts +17 -2
- package/lib/factories/ExpressionFactory.js +17 -2
- package/lib/factories/ExpressionFactory.js.map +1 -1
- package/lib/factories/IdentifierFactory.d.ts +24 -0
- package/lib/factories/IdentifierFactory.js +24 -0
- package/lib/factories/IdentifierFactory.js.map +1 -1
- package/lib/factories/LiteralFactory.d.ts +22 -4
- package/lib/factories/LiteralFactory.js +30 -10
- package/lib/factories/LiteralFactory.js.map +1 -1
- package/lib/factories/StatementFactory.d.ts +28 -1
- package/lib/factories/StatementFactory.js +28 -1
- package/lib/factories/StatementFactory.js.map +1 -1
- package/lib/factories/TypeFactory.d.ts +24 -0
- package/lib/factories/TypeFactory.js +15 -0
- package/lib/factories/TypeFactory.js.map +1 -1
- package/lib/generates/CloneGenerator.d.ts +22 -0
- package/lib/generates/CloneGenerator.js +26 -5
- package/lib/generates/CloneGenerator.js.map +1 -1
- package/lib/generates/E2eGenerator.d.ts +19 -0
- package/lib/generates/E2eGenerator.js +19 -0
- package/lib/generates/E2eGenerator.js.map +1 -1
- package/lib/generates/SdkGenerator.d.ts +38 -0
- package/lib/generates/SdkGenerator.js +40 -2
- package/lib/generates/SdkGenerator.js.map +1 -1
- package/lib/generates/SwaggerGenerator.d.ts +36 -6
- package/lib/generates/SwaggerGenerator.js +55 -13
- package/lib/generates/SwaggerGenerator.js.map +1 -1
- package/lib/generates/internal/E2eFileProgrammer.d.ts +19 -0
- package/lib/generates/internal/E2eFileProgrammer.js +20 -1
- package/lib/generates/internal/E2eFileProgrammer.js.map +1 -1
- package/lib/generates/internal/FilePrinter.d.ts +43 -0
- package/lib/generates/internal/FilePrinter.js +43 -0
- package/lib/generates/internal/FilePrinter.js.map +1 -1
- package/lib/generates/internal/ImportDictionary.d.ts +92 -2
- package/lib/generates/internal/ImportDictionary.js +91 -3
- package/lib/generates/internal/ImportDictionary.js.map +1 -1
- package/lib/generates/internal/SdkAliasCollection.d.ts +119 -0
- package/lib/generates/internal/SdkAliasCollection.js +124 -7
- package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
- package/lib/generates/internal/SdkDistributionComposer.d.ts +19 -0
- package/lib/generates/internal/SdkDistributionComposer.js +98 -59
- package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
- package/lib/generates/internal/SdkFileProgrammer.d.ts +18 -0
- package/lib/generates/internal/SdkFileProgrammer.js +18 -0
- package/lib/generates/internal/SdkFileProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpCloneProgrammer.d.ts +29 -0
- package/lib/generates/internal/SdkHttpCloneProgrammer.js +33 -0
- package/lib/generates/internal/SdkHttpCloneProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpCloneReferencer.d.ts +19 -0
- package/lib/generates/internal/SdkHttpCloneReferencer.js +78 -25
- package/lib/generates/internal/SdkHttpCloneReferencer.js.map +1 -1
- package/lib/generates/internal/SdkHttpFunctionProgrammer.d.ts +19 -0
- package/lib/generates/internal/SdkHttpFunctionProgrammer.js +19 -0
- package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +19 -0
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +19 -0
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpParameterProgrammer.d.ts +104 -2
- package/lib/generates/internal/SdkHttpParameterProgrammer.js +70 -0
- package/lib/generates/internal/SdkHttpParameterProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpRouteProgrammer.d.ts +20 -0
- package/lib/generates/internal/SdkHttpRouteProgrammer.js +20 -0
- package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +38 -0
- package/lib/generates/internal/SdkHttpSimulationProgrammer.js +49 -5
- package/lib/generates/internal/SdkHttpSimulationProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkImportWizard.d.ts +63 -0
- package/lib/generates/internal/SdkImportWizard.js +63 -0
- package/lib/generates/internal/SdkImportWizard.js.map +1 -1
- package/lib/generates/internal/SdkMcpRouteProgrammer.d.ts +17 -2
- package/lib/generates/internal/SdkMcpRouteProgrammer.js +33 -13
- package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkPathTemplate.d.ts +15 -0
- package/lib/generates/internal/SdkPathTemplate.js +15 -0
- package/lib/generates/internal/SdkPathTemplate.js.map +1 -1
- package/lib/generates/internal/SdkRouteDirectory.d.ts +10 -0
- package/lib/generates/internal/SdkRouteDirectory.js +10 -0
- package/lib/generates/internal/SdkRouteDirectory.js.map +1 -1
- package/lib/generates/internal/SdkTypeProgrammer.d.ts +54 -1
- package/lib/generates/internal/SdkTypeProgrammer.js +96 -12
- package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkTypeTagProgrammer.d.ts +36 -3
- package/lib/generates/internal/SdkTypeTagProgrammer.js +28 -7
- package/lib/generates/internal/SdkTypeTagProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.d.ts +40 -0
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.js +149 -142
- package/lib/generates/internal/SdkWebSocketCloneProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.d.ts +19 -0
- package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js +19 -0
- package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.d.ts +81 -2
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.js +48 -0
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +18 -0
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +18 -0
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SwaggerDescriptionComposer.d.ts +42 -0
- package/lib/generates/internal/SwaggerDescriptionComposer.js +44 -1
- package/lib/generates/internal/SwaggerDescriptionComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationComposer.d.ts +18 -0
- package/lib/generates/internal/SwaggerOperationComposer.js +18 -0
- package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationParameterComposer.d.ts +39 -0
- package/lib/generates/internal/SwaggerOperationParameterComposer.js +31 -8
- package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +19 -0
- package/lib/generates/internal/SwaggerOperationResponseComposer.js +19 -0
- package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -1
- package/lib/internal/legacy.d.ts +296 -16
- package/lib/internal/legacy.js +127 -10
- package/lib/internal/legacy.js.map +1 -1
- package/lib/structures/INestiaProject.d.ts +10 -0
- package/lib/structures/INestiaSdkInput.d.ts +31 -1
- package/lib/structures/IOperationMetadata.d.ts +55 -0
- package/lib/structures/IReflectController.d.ts +11 -1
- package/lib/structures/IReflectHttpOperation.d.ts +11 -1
- package/lib/structures/IReflectHttpOperationException.d.ts +10 -0
- package/lib/structures/IReflectHttpOperationParameter.d.ts +47 -0
- package/lib/structures/IReflectHttpOperationSuccess.d.ts +11 -0
- package/lib/structures/IReflectImport.d.ts +10 -0
- package/lib/structures/IReflectMcpOperation.d.ts +19 -0
- package/lib/structures/IReflectMcpOperationParameter.d.ts +9 -0
- package/lib/structures/IReflectOperationError.d.ts +28 -0
- package/lib/structures/IReflectOperationError.js +22 -2
- package/lib/structures/IReflectOperationError.js.map +1 -1
- package/lib/structures/IReflectType.d.ts +9 -0
- package/lib/structures/IReflectWebSocketOperation.d.ts +10 -0
- package/lib/structures/IReflectWebSocketOperationParameter.d.ts +55 -0
- package/lib/structures/ITypedApplication.d.ts +10 -0
- package/lib/structures/ITypedHttpRoute.d.ts +10 -0
- package/lib/structures/ITypedHttpRouteException.d.ts +10 -0
- package/lib/structures/ITypedHttpRouteParameter.d.ts +45 -0
- package/lib/structures/ITypedHttpRouteSuccess.d.ts +10 -0
- package/lib/structures/ITypedMcpRoute.d.ts +11 -0
- package/lib/structures/ITypedWebSocketRoute.d.ts +10 -0
- package/lib/transform.d.ts +6 -0
- package/lib/transform.js +6 -0
- package/lib/transform.js.map +1 -1
- package/lib/utils/ArrayUtil.d.ts +31 -1
- package/lib/utils/ArrayUtil.js +32 -11
- package/lib/utils/ArrayUtil.js.map +1 -1
- package/lib/utils/EmittedJavaScriptPatcher.d.ts +20 -0
- package/lib/utils/EmittedJavaScriptPatcher.js +65 -46
- package/lib/utils/EmittedJavaScriptPatcher.js.map +1 -1
- package/lib/utils/FileRetriever.d.ts +29 -0
- package/lib/utils/FileRetriever.js +29 -0
- package/lib/utils/FileRetriever.js.map +1 -1
- package/lib/utils/HttpResponseContentTypeUtil.d.ts +41 -0
- package/lib/utils/HttpResponseContentTypeUtil.js +31 -0
- package/lib/utils/HttpResponseContentTypeUtil.js.map +1 -1
- package/lib/utils/MapUtil.d.ts +64 -1
- package/lib/utils/MapUtil.js +24 -3
- package/lib/utils/MapUtil.js.map +1 -1
- package/lib/utils/PathUtil.d.ts +31 -0
- package/lib/utils/PathUtil.js +38 -0
- package/lib/utils/PathUtil.js.map +1 -1
- package/lib/utils/SdkBundlePath.d.ts +2 -0
- package/lib/utils/SdkBundlePath.js +10 -0
- package/lib/utils/SdkBundlePath.js.map +1 -0
- package/lib/utils/SdkInputFilter.d.ts +31 -0
- package/lib/utils/SdkInputFilter.js +115 -0
- package/lib/utils/SdkInputFilter.js.map +1 -0
- package/lib/utils/SourceFinder.d.ts +35 -0
- package/lib/utils/SourceFinder.js +47 -12
- package/lib/utils/SourceFinder.js.map +1 -1
- package/lib/utils/StringUtil.d.ts +77 -2
- package/lib/utils/StringUtil.js +166 -4
- package/lib/utils/StringUtil.js.map +1 -1
- package/lib/utils/TemporaryDirectory.d.ts +60 -0
- package/lib/utils/TemporaryDirectory.js +112 -0
- package/lib/utils/TemporaryDirectory.js.map +1 -0
- package/lib/utils/TsConfigReader.d.ts +42 -0
- package/lib/utils/TsConfigReader.js +98 -14
- package/lib/utils/TsConfigReader.js.map +1 -1
- package/lib/utils/TtscExecutor.d.ts +23 -1
- package/lib/utils/TtscExecutor.js +22 -0
- package/lib/utils/TtscExecutor.js.map +1 -1
- package/lib/utils/VersioningStrategy.d.ts +27 -2
- package/lib/utils/VersioningStrategy.js +30 -9
- package/lib/utils/VersioningStrategy.js.map +1 -1
- package/lib/validators/TextPlainValidator.d.ts +19 -0
- package/lib/validators/TextPlainValidator.js +19 -0
- package/lib/validators/TextPlainValidator.js.map +1 -1
- package/native/go.mod +1 -1
- package/native/go.sum +2 -2
- package/native/sdk/register.go +12 -2
- package/native/sdk/sdk_metadata_json.go +6 -1
- package/native/sdk/sdk_transform.go +393 -403
- package/package.json +9 -7
- package/src/INestiaConfig.ts +55 -24
- package/src/NestiaSdkApplication.ts +66 -7
- package/src/NestiaSwaggerComposer.ts +21 -6
- package/src/analyses/AccessorAnalyzer.ts +26 -0
- package/src/analyses/ConfigAnalyzer.ts +59 -96
- package/src/analyses/ImportAnalyzer.ts +25 -0
- package/src/analyses/ParameterNameAnalyzer.ts +24 -0
- package/src/analyses/PathAnalyzer.ts +63 -11
- package/src/analyses/ReflectControllerAnalyzer.ts +32 -0
- package/src/analyses/ReflectHttpOperationAnalyzer.ts +32 -10
- package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +31 -0
- package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +31 -0
- package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +32 -0
- package/src/analyses/ReflectMcpOperationAnalyzer.ts +32 -1
- package/src/analyses/ReflectMetadataAnalyzer.ts +48 -1
- package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +34 -14
- package/src/analyses/SecurityAnalyzer.ts +15 -0
- package/src/analyses/SwaggerExampleAnalyzer.ts +16 -0
- package/src/analyses/TypedHttpRouteAnalyzer.ts +240 -184
- package/src/analyses/TypedMcpRouteAnalyzer.ts +180 -20
- package/src/analyses/TypedWebSocketRouteAnalyzer.ts +19 -0
- package/src/decorators/OperationMetadata.ts +6 -0
- package/src/executable/internal/CommandParser.ts +19 -0
- package/src/executable/internal/NestiaConfigLoader.ts +66 -50
- package/src/executable/internal/NestiaSdkCommand.ts +96 -3
- package/src/executable/internal/NestiaSdkWatcher.ts +169 -41
- package/src/executable/internal/NestiaSwaggerWatch.ts +359 -0
- package/src/factories/ExpressionFactory.ts +17 -2
- package/src/factories/IdentifierFactory.ts +24 -0
- package/src/factories/LiteralFactory.ts +44 -11
- package/src/factories/StatementFactory.ts +28 -1
- package/src/factories/TypeFactory.ts +24 -0
- package/src/generates/CloneGenerator.ts +26 -5
- package/src/generates/E2eGenerator.ts +19 -0
- package/src/generates/SdkGenerator.ts +40 -9
- package/src/generates/SwaggerGenerator.ts +56 -14
- package/src/generates/internal/E2eFileProgrammer.ts +20 -0
- package/src/generates/internal/FilePrinter.ts +43 -0
- package/src/generates/internal/ImportDictionary.ts +110 -3
- package/src/generates/internal/SdkAliasCollection.ts +133 -11
- package/src/generates/internal/SdkDistributionComposer.ts +117 -66
- package/src/generates/internal/SdkFileProgrammer.ts +18 -0
- package/src/generates/internal/SdkHttpCloneProgrammer.ts +55 -0
- package/src/generates/internal/SdkHttpCloneReferencer.ts +97 -23
- package/src/generates/internal/SdkHttpFunctionProgrammer.ts +19 -0
- package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +19 -0
- package/src/generates/internal/SdkHttpParameterProgrammer.ts +104 -2
- package/src/generates/internal/SdkHttpRouteProgrammer.ts +20 -0
- package/src/generates/internal/SdkHttpSimulationProgrammer.ts +72 -5
- package/src/generates/internal/SdkImportWizard.ts +63 -0
- package/src/generates/internal/SdkMcpRouteProgrammer.ts +38 -18
- package/src/generates/internal/SdkPathTemplate.ts +15 -0
- package/src/generates/internal/SdkRouteDirectory.ts +10 -0
- package/src/generates/internal/SdkTypeProgrammer.ts +118 -14
- package/src/generates/internal/SdkTypeTagProgrammer.ts +37 -7
- package/src/generates/internal/SdkWebSocketCloneProgrammer.ts +185 -142
- package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +19 -0
- package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +81 -2
- package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +18 -0
- package/src/generates/internal/SwaggerDescriptionComposer.ts +47 -1
- package/src/generates/internal/SwaggerOperationComposer.ts +18 -0
- package/src/generates/internal/SwaggerOperationParameterComposer.ts +41 -8
- package/src/generates/internal/SwaggerOperationResponseComposer.ts +19 -0
- package/src/internal/legacy-augmentation.d.ts +16 -0
- package/src/internal/legacy.ts +296 -26
- package/src/structures/INestiaProject.ts +10 -0
- package/src/structures/INestiaSdkInput.ts +31 -1
- package/src/structures/IOperationMetadata.ts +55 -0
- package/src/structures/IReflectController.ts +11 -1
- package/src/structures/IReflectHttpOperation.ts +11 -1
- package/src/structures/IReflectHttpOperationException.ts +10 -0
- package/src/structures/IReflectHttpOperationParameter.ts +47 -0
- package/src/structures/IReflectHttpOperationSuccess.ts +11 -0
- package/src/structures/IReflectImport.ts +10 -0
- package/src/structures/IReflectMcpOperation.ts +19 -0
- package/src/structures/IReflectMcpOperationParameter.ts +9 -0
- package/src/structures/IReflectOperationError.ts +31 -2
- package/src/structures/IReflectType.ts +9 -0
- package/src/structures/IReflectWebSocketOperation.ts +10 -0
- package/src/structures/IReflectWebSocketOperationParameter.ts +55 -0
- package/src/structures/ITypedApplication.ts +10 -0
- package/src/structures/ITypedHttpRoute.ts +10 -0
- package/src/structures/ITypedHttpRouteException.ts +10 -0
- package/src/structures/ITypedHttpRouteParameter.ts +45 -0
- package/src/structures/ITypedHttpRouteSuccess.ts +10 -0
- package/src/structures/ITypedMcpRoute.ts +12 -0
- package/src/structures/ITypedWebSocketRoute.ts +10 -0
- package/src/transform.ts +6 -0
- package/src/utils/ArrayUtil.ts +32 -13
- package/src/utils/EmittedJavaScriptPatcher.ts +70 -47
- package/src/utils/FileRetriever.ts +29 -0
- package/src/utils/HttpResponseContentTypeUtil.ts +41 -0
- package/src/utils/MapUtil.ts +68 -3
- package/src/utils/PathUtil.ts +38 -0
- package/src/utils/SdkBundlePath.ts +11 -0
- package/src/utils/SdkInputFilter.ts +108 -0
- package/src/utils/SourceFinder.ts +51 -14
- package/src/utils/StringUtil.ts +182 -5
- package/src/utils/TemporaryDirectory.ts +108 -0
- package/src/utils/TsConfigReader.ts +124 -26
- package/src/utils/TtscExecutor.ts +23 -1
- package/src/utils/VersioningStrategy.ts +37 -14
- package/src/validators/TextPlainValidator.ts +19 -0
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.d.ts +0 -9
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.js +0 -178
- package/lib/generates/internal/SwaggerReadonlyArrayEmender.js.map +0 -1
- package/src/generates/internal/SwaggerReadonlyArrayEmender.ts +0 -264
|
@@ -2,13 +2,35 @@ import cp from "child_process";
|
|
|
2
2
|
import fs from "fs";
|
|
3
3
|
import path from "path";
|
|
4
4
|
|
|
5
|
+
/**
|
|
6
|
+
* Runs the `ttsc` compiler of the project.
|
|
7
|
+
*
|
|
8
|
+
* @evidence contracts/common.md#principled-implementation The binary is found from the project's own `ttsc` package, with the SDK's dependency as a fallback, and is run with the current Node.
|
|
9
|
+
* @evidence contracts/common.md#clear-and-simple-design One function and a resolution cache.
|
|
10
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The binary comes from the package manifest, not a fixed path.
|
|
11
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
12
|
+
* @evidence contracts/portability.md#os-neutral-implementation The compiler runs as a child of the current Node executable (`process.execPath`) on the JavaScript entry that the package manifest's `bin` names, found through Node module resolution from the project directory, so no platform shim (`.cmd`, `.ps1` or shell script) and no `PATH` lookup is involved. Arguments are an array, never a command line, and the entry path is joined with `path.join` and checked with `existsSync`.
|
|
13
|
+
*/
|
|
5
14
|
export namespace TtscExecutor {
|
|
15
|
+
/**
|
|
16
|
+
* Compiles a project with `ttsc` and returns captured output, or null when
|
|
17
|
+
* the selected stdio does not pipe standard output.
|
|
18
|
+
*
|
|
19
|
+
* The cache directory of the environment is passed on, and a non-zero exit
|
|
20
|
+
* throws.
|
|
21
|
+
*
|
|
22
|
+
* @evidence contracts/common.md#principled-implementation The command is run with an argument array and the current Node executable, so no shell or platform shim is involved.
|
|
23
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
24
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The environment is extended, not replaced.
|
|
25
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the arguments and the failure.
|
|
26
|
+
* @evidence contracts/portability.md#os-neutral-implementation The working directory and the environment are explicit. Standard output is piped by default with a 64 MiB buffer; callers may select another stdio mode. A non-zero exit surfaces as Node's process error carrying `status` and available captured output.
|
|
27
|
+
*/
|
|
6
28
|
export const run = (props: {
|
|
7
29
|
cwd: string;
|
|
8
30
|
env?: NodeJS.ProcessEnv;
|
|
9
31
|
project: string;
|
|
10
32
|
stdio?: cp.StdioOptions;
|
|
11
|
-
}): Buffer => {
|
|
33
|
+
}): Buffer | null => {
|
|
12
34
|
const args: string[] = [bin(props.cwd), "-p", props.project];
|
|
13
35
|
if (process.env.TTSC_CACHE_DIR !== undefined)
|
|
14
36
|
args.push("--cache-dir", process.env.TTSC_CACHE_DIR);
|
|
@@ -1,12 +1,34 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import {
|
|
2
|
+
VERSION_NEUTRAL,
|
|
3
|
+
VersionValue,
|
|
4
|
+
} from "@nestjs/common/interfaces/index.js";
|
|
2
5
|
|
|
3
6
|
import { INestiaProject } from "../structures/INestiaProject";
|
|
4
7
|
|
|
8
|
+
/**
|
|
9
|
+
* Resolves the URI versions of a controller method as NestJS does.
|
|
10
|
+
*
|
|
11
|
+
* @evidence contracts/common.md#principled-implementation The namespace turns version metadata and the default version into path segments.
|
|
12
|
+
* @evidence contracts/common.md#clear-and-simple-design Two functions.
|
|
13
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The precedence is NestJS's.
|
|
14
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
15
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation VersioningStrategy maps Nest version metadata to URI segments, which are protocol spelling rather than native file paths.
|
|
16
|
+
*/
|
|
5
17
|
export namespace VersioningStrategy {
|
|
18
|
+
/**
|
|
19
|
+
* Casts version metadata to a list: absence stays absent and a single value
|
|
20
|
+
* is a one-element list.
|
|
21
|
+
*
|
|
22
|
+
* @evidence contracts/common.md#principled-implementation A single version becomes a list while absence stays distinct from an explicit empty list, which registers no paths rather than inheriting other versions.
|
|
23
|
+
* @evidence contracts/common.md#clear-and-simple-design One conditional.
|
|
24
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It adds nothing.
|
|
25
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the cases.
|
|
26
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation VersioningStrategy.cast maps Nest version metadata to URI segments, which are protocol spelling rather than native file paths.
|
|
27
|
+
*/
|
|
6
28
|
export const cast = (
|
|
7
29
|
value: VersionValue | undefined,
|
|
8
|
-
): Array<string | typeof VERSION_NEUTRAL> =>
|
|
9
|
-
value === undefined ?
|
|
30
|
+
): Array<string | typeof VERSION_NEUTRAL> | undefined =>
|
|
31
|
+
value === undefined ? undefined : Array.isArray(value) ? value : [value];
|
|
10
32
|
|
|
11
33
|
/**
|
|
12
34
|
* Version path segments of a route, resolved as NestJS resolves them: the
|
|
@@ -16,6 +38,12 @@ export namespace VersioningStrategy {
|
|
|
16
38
|
* The controller's and the method's versions were joined, so a method
|
|
17
39
|
* overriding its controller's version was also described at the controller's,
|
|
18
40
|
* and a route with no version and no default got no path at all (#1735).
|
|
41
|
+
*
|
|
42
|
+
* @evidence contracts/common.md#principled-implementation The first present method, controller or default list wins, including an empty list that registers no paths. Duplicates are removed, neutral and absent versions have no segment, and with versioning off the only segment is empty.
|
|
43
|
+
* @evidence contracts/common.md#clear-and-simple-design One curried function.
|
|
44
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The precedence is NestJS's.
|
|
45
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the precedence.
|
|
46
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation VersioningStrategy.merge maps Nest version metadata to URI segments, which are protocol spelling rather than native file paths.
|
|
19
47
|
*/
|
|
20
48
|
export const merge =
|
|
21
49
|
(project: Omit<INestiaProject, "config">) =>
|
|
@@ -25,19 +53,14 @@ export namespace VersioningStrategy {
|
|
|
25
53
|
}): string[] => {
|
|
26
54
|
const versioning = project.input.versioning;
|
|
27
55
|
if (versioning === undefined) return [""];
|
|
28
|
-
const chosen: Array<string | typeof VERSION_NEUTRAL> =
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
: props.controller?.length
|
|
32
|
-
? props.controller
|
|
33
|
-
: cast(versioning.defaultVersion);
|
|
56
|
+
const chosen: Array<string | typeof VERSION_NEUTRAL> | undefined =
|
|
57
|
+
props.method ?? props.controller ?? cast(versioning.defaultVersion);
|
|
58
|
+
if (chosen === undefined) return [""];
|
|
34
59
|
const unique: Array<string | typeof VERSION_NEUTRAL> = [
|
|
35
60
|
...new Set(chosen),
|
|
36
61
|
];
|
|
37
|
-
return unique.
|
|
38
|
-
?
|
|
39
|
-
|
|
40
|
-
)
|
|
41
|
-
: [""];
|
|
62
|
+
return unique.map((x) =>
|
|
63
|
+
typeof x === "symbol" ? "" : `${versioning.prefix}${x}`,
|
|
64
|
+
);
|
|
42
65
|
};
|
|
43
66
|
}
|
|
@@ -1,6 +1,25 @@
|
|
|
1
1
|
import { MetadataSchema, sizeOf } from "../internal/legacy";
|
|
2
2
|
|
|
3
|
+
/**
|
|
4
|
+
* Validates that a type can be a `text/plain` body or response.
|
|
5
|
+
*
|
|
6
|
+
* @evidence contracts/common.md#principled-implementation A plain text body is a string, so the type may hold only string forms.
|
|
7
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
8
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The rule follows the content type.
|
|
9
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
10
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation TextPlainValidator checks the metadata union accepted for a text/plain payload; it owns no native filesystem or executable representation.
|
|
11
|
+
*/
|
|
3
12
|
export namespace TextPlainValidator {
|
|
13
|
+
/**
|
|
14
|
+
* Returns an error message unless every member of the metadata is a string, a
|
|
15
|
+
* string constant, a string template, or the native String.
|
|
16
|
+
*
|
|
17
|
+
* @evidence contracts/common.md#principled-implementation The number of string forms is counted and compared with the size of the metadata, so any other form makes the counts differ, and an empty type is also refused.
|
|
18
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
19
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The count is exact and no type is special-cased.
|
|
20
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the accepted forms.
|
|
21
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation TextPlainValidator.validate checks the metadata union accepted for a text/plain payload; it owns no native filesystem or executable representation.
|
|
22
|
+
*/
|
|
4
23
|
export const validate = (props: { metadata: MetadataSchema }): string[] => {
|
|
5
24
|
const expected: number =
|
|
6
25
|
props.metadata.atomics.filter((a) => a.type === "string").length +
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { OpenApi } from "@typia/interface";
|
|
2
|
-
import { MetadataSchema } from "../../internal/legacy";
|
|
3
|
-
export declare namespace SwaggerReadonlyArrayEmender {
|
|
4
|
-
const emend: (props: {
|
|
5
|
-
components: OpenApi.IComponents;
|
|
6
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
7
|
-
metadata: MetadataSchema;
|
|
8
|
-
}) => void;
|
|
9
|
-
}
|
|
@@ -1,178 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SwaggerReadonlyArrayEmender = void 0;
|
|
4
|
-
var SwaggerReadonlyArrayEmender;
|
|
5
|
-
(function (SwaggerReadonlyArrayEmender) {
|
|
6
|
-
SwaggerReadonlyArrayEmender.emend = (props) => {
|
|
7
|
-
const visited = {
|
|
8
|
-
aliases: new WeakSet(),
|
|
9
|
-
arrays: new WeakSet(),
|
|
10
|
-
objects: new WeakSet(),
|
|
11
|
-
schemas: new WeakSet(),
|
|
12
|
-
tuples: new WeakSet(),
|
|
13
|
-
};
|
|
14
|
-
visitMetadata({
|
|
15
|
-
components: props.components,
|
|
16
|
-
schema: props.schema,
|
|
17
|
-
metadata: props.metadata,
|
|
18
|
-
visited,
|
|
19
|
-
});
|
|
20
|
-
};
|
|
21
|
-
})(SwaggerReadonlyArrayEmender || (exports.SwaggerReadonlyArrayEmender = SwaggerReadonlyArrayEmender = {}));
|
|
22
|
-
const visitMetadata = (props) => {
|
|
23
|
-
if (props.schema !== undefined && isReadonlyArrayLike(props.metadata))
|
|
24
|
-
setReadonlyArray(props.schema);
|
|
25
|
-
if (props.visited.schemas.has(props.metadata))
|
|
26
|
-
return;
|
|
27
|
-
props.visited.schemas.add(props.metadata);
|
|
28
|
-
for (const array of props.metadata.arrays) {
|
|
29
|
-
const type = array.type;
|
|
30
|
-
if (type !== undefined)
|
|
31
|
-
visitArrayType({
|
|
32
|
-
components: props.components,
|
|
33
|
-
schema: arraySchema(props.schema),
|
|
34
|
-
type,
|
|
35
|
-
visited: props.visited,
|
|
36
|
-
});
|
|
37
|
-
}
|
|
38
|
-
for (const tuple of props.metadata.tuples) {
|
|
39
|
-
const type = tuple.type;
|
|
40
|
-
if (type !== undefined)
|
|
41
|
-
visitTupleType({
|
|
42
|
-
components: props.components,
|
|
43
|
-
schema: props.schema,
|
|
44
|
-
type,
|
|
45
|
-
visited: props.visited,
|
|
46
|
-
});
|
|
47
|
-
}
|
|
48
|
-
for (const alias of props.metadata.aliases) {
|
|
49
|
-
const type = alias.type;
|
|
50
|
-
if (type !== undefined)
|
|
51
|
-
visitAliasType({
|
|
52
|
-
components: props.components,
|
|
53
|
-
schema: componentSchema(props.components, type.name),
|
|
54
|
-
type,
|
|
55
|
-
visited: props.visited,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
for (const object of props.metadata.objects) {
|
|
59
|
-
const type = object.type;
|
|
60
|
-
if (type !== undefined)
|
|
61
|
-
visitObjectType({
|
|
62
|
-
components: props.components,
|
|
63
|
-
type,
|
|
64
|
-
visited: props.visited,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
const visitAliasType = (props) => {
|
|
69
|
-
if (props.visited.aliases.has(props.type))
|
|
70
|
-
return;
|
|
71
|
-
props.visited.aliases.add(props.type);
|
|
72
|
-
if (props.schema !== undefined && isReadonlyArrayLike(props.type.value))
|
|
73
|
-
setReadonlyArray(props.schema);
|
|
74
|
-
visitMetadata({
|
|
75
|
-
components: props.components,
|
|
76
|
-
schema: props.schema,
|
|
77
|
-
metadata: props.type.value,
|
|
78
|
-
visited: props.visited,
|
|
79
|
-
});
|
|
80
|
-
};
|
|
81
|
-
const visitArrayType = (props) => {
|
|
82
|
-
var _a;
|
|
83
|
-
if (props.visited.arrays.has(props.type))
|
|
84
|
-
return;
|
|
85
|
-
props.visited.arrays.add(props.type);
|
|
86
|
-
const component = componentSchema(props.components, props.type.name);
|
|
87
|
-
if (component !== undefined && isReadonlyArrayName(props.type.name))
|
|
88
|
-
setReadonlyArray(component);
|
|
89
|
-
visitMetadata({
|
|
90
|
-
components: props.components,
|
|
91
|
-
schema: arraySchema((_a = props.schema) !== null && _a !== void 0 ? _a : component),
|
|
92
|
-
metadata: props.type.value,
|
|
93
|
-
visited: props.visited,
|
|
94
|
-
});
|
|
95
|
-
};
|
|
96
|
-
const visitTupleType = (props) => {
|
|
97
|
-
var _a;
|
|
98
|
-
if (props.visited.tuples.has(props.type))
|
|
99
|
-
return;
|
|
100
|
-
props.visited.tuples.add(props.type);
|
|
101
|
-
const component = componentSchema(props.components, props.type.name);
|
|
102
|
-
if (component !== undefined && isReadonlyArrayName(props.type.name))
|
|
103
|
-
setReadonlyArray(component);
|
|
104
|
-
const schema = objectSchema((_a = props.schema) !== null && _a !== void 0 ? _a : component);
|
|
105
|
-
props.type.elements.forEach((metadata, index) => visitMetadata({
|
|
106
|
-
components: props.components,
|
|
107
|
-
schema: Array.isArray(schema === null || schema === void 0 ? void 0 : schema.prefixItems)
|
|
108
|
-
? schema.prefixItems[index]
|
|
109
|
-
: undefined,
|
|
110
|
-
metadata,
|
|
111
|
-
visited: props.visited,
|
|
112
|
-
}));
|
|
113
|
-
};
|
|
114
|
-
const visitObjectType = (props) => {
|
|
115
|
-
if (props.visited.objects.has(props.type))
|
|
116
|
-
return;
|
|
117
|
-
props.visited.objects.add(props.type);
|
|
118
|
-
const schema = objectSchema(componentSchema(props.components, props.type.name));
|
|
119
|
-
const properties = schema === null || schema === void 0 ? void 0 : schema.properties;
|
|
120
|
-
for (const property of props.type.properties) {
|
|
121
|
-
const key = propertyKey(property.key);
|
|
122
|
-
const child = key === undefined ? undefined : properties === null || properties === void 0 ? void 0 : properties[key];
|
|
123
|
-
visitMetadata({
|
|
124
|
-
components: props.components,
|
|
125
|
-
schema: child,
|
|
126
|
-
metadata: property.value,
|
|
127
|
-
visited: props.visited,
|
|
128
|
-
});
|
|
129
|
-
}
|
|
130
|
-
};
|
|
131
|
-
const isReadonlyArrayLike = (metadata, visited = new WeakSet()) => {
|
|
132
|
-
if (visited.has(metadata))
|
|
133
|
-
return false;
|
|
134
|
-
visited.add(metadata);
|
|
135
|
-
const name = metadata.name;
|
|
136
|
-
return ((typeof name === "string" && isReadonlyArrayName(name)) ||
|
|
137
|
-
metadata.arrays.some((array) => isReadonlyArrayName(array.name)) ||
|
|
138
|
-
metadata.tuples.some((tuple) => isReadonlyArrayName(tuple.name)) ||
|
|
139
|
-
metadata.aliases.some((alias) => {
|
|
140
|
-
const type = alias.type;
|
|
141
|
-
return type !== undefined && isReadonlyArrayLike(type.value, visited);
|
|
142
|
-
}));
|
|
143
|
-
};
|
|
144
|
-
const isReadonlyArrayName = (name) => {
|
|
145
|
-
const compact = name.replace(/\s+/g, "");
|
|
146
|
-
// Metadata identity names pass through the generator's name replacer, which
|
|
147
|
-
// strips TypeScript punctuation for schema-key safety — depending on the
|
|
148
|
-
// compiler shim, `ReadonlyArray<string>` arrives here as "ReadonlyArray",
|
|
149
|
-
// "ReadonlyArray<string>", or the stripped "ReadonlyArraystring", and
|
|
150
|
-
// `readonly string[]` as "readonly string[]" or "readonlystring". Match on
|
|
151
|
-
// the prefixes that survive every form; this predicate only ever sees names
|
|
152
|
-
// of array/tuple metadata entries, whose spelling the generator controls
|
|
153
|
-
// ("readonly" is case-sensitive, so PascalCase user types cannot collide).
|
|
154
|
-
return compact.startsWith("ReadonlyArray") || compact.startsWith("readonly");
|
|
155
|
-
};
|
|
156
|
-
const componentSchema = (components, name) => { var _a; return ((_a = components.schemas) !== null && _a !== void 0 ? _a : {})[name]; };
|
|
157
|
-
const arraySchema = (schema) => {
|
|
158
|
-
const obj = objectSchema(schema);
|
|
159
|
-
return obj === null || obj === void 0 ? void 0 : obj.items;
|
|
160
|
-
};
|
|
161
|
-
const objectSchema = (schema) => typeof schema === "object" && schema !== null
|
|
162
|
-
? schema
|
|
163
|
-
: undefined;
|
|
164
|
-
const propertyKey = (metadata) => {
|
|
165
|
-
var _a, _b;
|
|
166
|
-
const value = (_b = (_a = metadata.constants[0]) === null || _a === void 0 ? void 0 : _a.values[0]) === null || _b === void 0 ? void 0 : _b.value;
|
|
167
|
-
return typeof value === "string"
|
|
168
|
-
? value
|
|
169
|
-
: typeof value === "number"
|
|
170
|
-
? String(value)
|
|
171
|
-
: undefined;
|
|
172
|
-
};
|
|
173
|
-
const setReadonlyArray = (schema) => {
|
|
174
|
-
const obj = objectSchema(schema);
|
|
175
|
-
if (obj !== undefined)
|
|
176
|
-
obj["x-readonly-array"] = true;
|
|
177
|
-
};
|
|
178
|
-
//# sourceMappingURL=SwaggerReadonlyArrayEmender.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"SwaggerReadonlyArrayEmender.js","sourceRoot":"","sources":["../../../src/generates/internal/SwaggerReadonlyArrayEmender.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,264 +0,0 @@
|
|
|
1
|
-
import { OpenApi } from "@typia/interface";
|
|
2
|
-
|
|
3
|
-
import {
|
|
4
|
-
MetadataAliasType,
|
|
5
|
-
MetadataArrayType,
|
|
6
|
-
MetadataObjectType,
|
|
7
|
-
MetadataSchema,
|
|
8
|
-
MetadataTupleType,
|
|
9
|
-
} from "../../internal/legacy";
|
|
10
|
-
|
|
11
|
-
type JsonSchemaObject = OpenApi.IJsonSchema & Record<string, any>;
|
|
12
|
-
|
|
13
|
-
export namespace SwaggerReadonlyArrayEmender {
|
|
14
|
-
export const emend = (props: {
|
|
15
|
-
components: OpenApi.IComponents;
|
|
16
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
17
|
-
metadata: MetadataSchema;
|
|
18
|
-
}): void => {
|
|
19
|
-
const visited: IVisited = {
|
|
20
|
-
aliases: new WeakSet(),
|
|
21
|
-
arrays: new WeakSet(),
|
|
22
|
-
objects: new WeakSet(),
|
|
23
|
-
schemas: new WeakSet(),
|
|
24
|
-
tuples: new WeakSet(),
|
|
25
|
-
};
|
|
26
|
-
visitMetadata({
|
|
27
|
-
components: props.components,
|
|
28
|
-
schema: props.schema,
|
|
29
|
-
metadata: props.metadata,
|
|
30
|
-
visited,
|
|
31
|
-
});
|
|
32
|
-
};
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
interface IVisited {
|
|
36
|
-
aliases: WeakSet<MetadataAliasType>;
|
|
37
|
-
arrays: WeakSet<MetadataArrayType>;
|
|
38
|
-
objects: WeakSet<MetadataObjectType>;
|
|
39
|
-
schemas: WeakSet<MetadataSchema>;
|
|
40
|
-
tuples: WeakSet<MetadataTupleType>;
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
const visitMetadata = (props: {
|
|
44
|
-
components: OpenApi.IComponents;
|
|
45
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
46
|
-
metadata: MetadataSchema;
|
|
47
|
-
visited: IVisited;
|
|
48
|
-
}): void => {
|
|
49
|
-
if (props.schema !== undefined && isReadonlyArrayLike(props.metadata))
|
|
50
|
-
setReadonlyArray(props.schema);
|
|
51
|
-
|
|
52
|
-
if (props.visited.schemas.has(props.metadata)) return;
|
|
53
|
-
props.visited.schemas.add(props.metadata);
|
|
54
|
-
|
|
55
|
-
for (const array of props.metadata.arrays) {
|
|
56
|
-
const type: MetadataArrayType | undefined = array.type as
|
|
57
|
-
| MetadataArrayType
|
|
58
|
-
| undefined;
|
|
59
|
-
if (type !== undefined)
|
|
60
|
-
visitArrayType({
|
|
61
|
-
components: props.components,
|
|
62
|
-
schema: arraySchema(props.schema),
|
|
63
|
-
type,
|
|
64
|
-
visited: props.visited,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
for (const tuple of props.metadata.tuples) {
|
|
68
|
-
const type: MetadataTupleType | undefined = tuple.type as
|
|
69
|
-
| MetadataTupleType
|
|
70
|
-
| undefined;
|
|
71
|
-
if (type !== undefined)
|
|
72
|
-
visitTupleType({
|
|
73
|
-
components: props.components,
|
|
74
|
-
schema: props.schema,
|
|
75
|
-
type,
|
|
76
|
-
visited: props.visited,
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
for (const alias of props.metadata.aliases) {
|
|
80
|
-
const type: MetadataAliasType | undefined = alias.type as
|
|
81
|
-
| MetadataAliasType
|
|
82
|
-
| undefined;
|
|
83
|
-
if (type !== undefined)
|
|
84
|
-
visitAliasType({
|
|
85
|
-
components: props.components,
|
|
86
|
-
schema: componentSchema(props.components, type.name),
|
|
87
|
-
type,
|
|
88
|
-
visited: props.visited,
|
|
89
|
-
});
|
|
90
|
-
}
|
|
91
|
-
for (const object of props.metadata.objects) {
|
|
92
|
-
const type: MetadataObjectType | undefined = object.type as
|
|
93
|
-
| MetadataObjectType
|
|
94
|
-
| undefined;
|
|
95
|
-
if (type !== undefined)
|
|
96
|
-
visitObjectType({
|
|
97
|
-
components: props.components,
|
|
98
|
-
type,
|
|
99
|
-
visited: props.visited,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
};
|
|
103
|
-
|
|
104
|
-
const visitAliasType = (props: {
|
|
105
|
-
components: OpenApi.IComponents;
|
|
106
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
107
|
-
type: MetadataAliasType;
|
|
108
|
-
visited: IVisited;
|
|
109
|
-
}): void => {
|
|
110
|
-
if (props.visited.aliases.has(props.type)) return;
|
|
111
|
-
props.visited.aliases.add(props.type);
|
|
112
|
-
if (props.schema !== undefined && isReadonlyArrayLike(props.type.value))
|
|
113
|
-
setReadonlyArray(props.schema);
|
|
114
|
-
visitMetadata({
|
|
115
|
-
components: props.components,
|
|
116
|
-
schema: props.schema,
|
|
117
|
-
metadata: props.type.value,
|
|
118
|
-
visited: props.visited,
|
|
119
|
-
});
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
const visitArrayType = (props: {
|
|
123
|
-
components: OpenApi.IComponents;
|
|
124
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
125
|
-
type: MetadataArrayType;
|
|
126
|
-
visited: IVisited;
|
|
127
|
-
}): void => {
|
|
128
|
-
if (props.visited.arrays.has(props.type)) return;
|
|
129
|
-
props.visited.arrays.add(props.type);
|
|
130
|
-
const component: OpenApi.IJsonSchema | undefined = componentSchema(
|
|
131
|
-
props.components,
|
|
132
|
-
props.type.name,
|
|
133
|
-
);
|
|
134
|
-
if (component !== undefined && isReadonlyArrayName(props.type.name))
|
|
135
|
-
setReadonlyArray(component);
|
|
136
|
-
visitMetadata({
|
|
137
|
-
components: props.components,
|
|
138
|
-
schema: arraySchema(props.schema ?? component),
|
|
139
|
-
metadata: props.type.value,
|
|
140
|
-
visited: props.visited,
|
|
141
|
-
});
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
const visitTupleType = (props: {
|
|
145
|
-
components: OpenApi.IComponents;
|
|
146
|
-
schema: OpenApi.IJsonSchema | undefined;
|
|
147
|
-
type: MetadataTupleType;
|
|
148
|
-
visited: IVisited;
|
|
149
|
-
}): void => {
|
|
150
|
-
if (props.visited.tuples.has(props.type)) return;
|
|
151
|
-
props.visited.tuples.add(props.type);
|
|
152
|
-
const component: OpenApi.IJsonSchema | undefined = componentSchema(
|
|
153
|
-
props.components,
|
|
154
|
-
props.type.name,
|
|
155
|
-
);
|
|
156
|
-
if (component !== undefined && isReadonlyArrayName(props.type.name))
|
|
157
|
-
setReadonlyArray(component);
|
|
158
|
-
const schema: JsonSchemaObject | undefined = objectSchema(
|
|
159
|
-
props.schema ?? component,
|
|
160
|
-
);
|
|
161
|
-
props.type.elements.forEach((metadata, index) =>
|
|
162
|
-
visitMetadata({
|
|
163
|
-
components: props.components,
|
|
164
|
-
schema: Array.isArray(schema?.prefixItems)
|
|
165
|
-
? schema.prefixItems[index]
|
|
166
|
-
: undefined,
|
|
167
|
-
metadata,
|
|
168
|
-
visited: props.visited,
|
|
169
|
-
}),
|
|
170
|
-
);
|
|
171
|
-
};
|
|
172
|
-
|
|
173
|
-
const visitObjectType = (props: {
|
|
174
|
-
components: OpenApi.IComponents;
|
|
175
|
-
type: MetadataObjectType;
|
|
176
|
-
visited: IVisited;
|
|
177
|
-
}): void => {
|
|
178
|
-
if (props.visited.objects.has(props.type)) return;
|
|
179
|
-
props.visited.objects.add(props.type);
|
|
180
|
-
|
|
181
|
-
const schema: JsonSchemaObject | undefined = objectSchema(
|
|
182
|
-
componentSchema(props.components, props.type.name),
|
|
183
|
-
);
|
|
184
|
-
const properties: Record<string, OpenApi.IJsonSchema> | undefined =
|
|
185
|
-
schema?.properties as Record<string, OpenApi.IJsonSchema> | undefined;
|
|
186
|
-
for (const property of props.type.properties) {
|
|
187
|
-
const key: string | undefined = propertyKey(property.key);
|
|
188
|
-
const child: OpenApi.IJsonSchema | undefined =
|
|
189
|
-
key === undefined ? undefined : properties?.[key];
|
|
190
|
-
visitMetadata({
|
|
191
|
-
components: props.components,
|
|
192
|
-
schema: child,
|
|
193
|
-
metadata: property.value,
|
|
194
|
-
visited: props.visited,
|
|
195
|
-
});
|
|
196
|
-
}
|
|
197
|
-
};
|
|
198
|
-
|
|
199
|
-
const isReadonlyArrayLike = (
|
|
200
|
-
metadata: MetadataSchema,
|
|
201
|
-
visited: WeakSet<MetadataSchema> = new WeakSet(),
|
|
202
|
-
): boolean => {
|
|
203
|
-
if (visited.has(metadata)) return false;
|
|
204
|
-
visited.add(metadata);
|
|
205
|
-
const name: unknown = (metadata as { name?: unknown }).name;
|
|
206
|
-
return (
|
|
207
|
-
(typeof name === "string" && isReadonlyArrayName(name)) ||
|
|
208
|
-
metadata.arrays.some((array) => isReadonlyArrayName(array.name)) ||
|
|
209
|
-
metadata.tuples.some((tuple) => isReadonlyArrayName(tuple.name)) ||
|
|
210
|
-
metadata.aliases.some((alias) => {
|
|
211
|
-
const type: MetadataAliasType | undefined = alias.type as
|
|
212
|
-
| MetadataAliasType
|
|
213
|
-
| undefined;
|
|
214
|
-
return type !== undefined && isReadonlyArrayLike(type.value, visited);
|
|
215
|
-
})
|
|
216
|
-
);
|
|
217
|
-
};
|
|
218
|
-
|
|
219
|
-
const isReadonlyArrayName = (name: string): boolean => {
|
|
220
|
-
const compact: string = name.replace(/\s+/g, "");
|
|
221
|
-
// Metadata identity names pass through the generator's name replacer, which
|
|
222
|
-
// strips TypeScript punctuation for schema-key safety — depending on the
|
|
223
|
-
// compiler shim, `ReadonlyArray<string>` arrives here as "ReadonlyArray",
|
|
224
|
-
// "ReadonlyArray<string>", or the stripped "ReadonlyArraystring", and
|
|
225
|
-
// `readonly string[]` as "readonly string[]" or "readonlystring". Match on
|
|
226
|
-
// the prefixes that survive every form; this predicate only ever sees names
|
|
227
|
-
// of array/tuple metadata entries, whose spelling the generator controls
|
|
228
|
-
// ("readonly" is case-sensitive, so PascalCase user types cannot collide).
|
|
229
|
-
return compact.startsWith("ReadonlyArray") || compact.startsWith("readonly");
|
|
230
|
-
};
|
|
231
|
-
|
|
232
|
-
const componentSchema = (
|
|
233
|
-
components: OpenApi.IComponents,
|
|
234
|
-
name: string,
|
|
235
|
-
): OpenApi.IJsonSchema | undefined =>
|
|
236
|
-
(components.schemas ?? {})[name] as OpenApi.IJsonSchema | undefined;
|
|
237
|
-
|
|
238
|
-
const arraySchema = (
|
|
239
|
-
schema: OpenApi.IJsonSchema | undefined,
|
|
240
|
-
): OpenApi.IJsonSchema | undefined => {
|
|
241
|
-
const obj: JsonSchemaObject | undefined = objectSchema(schema);
|
|
242
|
-
return obj?.items as OpenApi.IJsonSchema | undefined;
|
|
243
|
-
};
|
|
244
|
-
|
|
245
|
-
const objectSchema = (
|
|
246
|
-
schema: OpenApi.IJsonSchema | undefined,
|
|
247
|
-
): JsonSchemaObject | undefined =>
|
|
248
|
-
typeof schema === "object" && schema !== null
|
|
249
|
-
? (schema as JsonSchemaObject)
|
|
250
|
-
: undefined;
|
|
251
|
-
|
|
252
|
-
const propertyKey = (metadata: MetadataSchema): string | undefined => {
|
|
253
|
-
const value: unknown = metadata.constants[0]?.values[0]?.value;
|
|
254
|
-
return typeof value === "string"
|
|
255
|
-
? value
|
|
256
|
-
: typeof value === "number"
|
|
257
|
-
? String(value)
|
|
258
|
-
: undefined;
|
|
259
|
-
};
|
|
260
|
-
|
|
261
|
-
const setReadonlyArray = (schema: OpenApi.IJsonSchema): void => {
|
|
262
|
-
const obj: JsonSchemaObject | undefined = objectSchema(schema);
|
|
263
|
-
if (obj !== undefined) obj["x-readonly-array"] = true;
|
|
264
|
-
};
|