@nestia/sdk 14.0.0 → 14.0.2
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/README.md +1 -1
- package/assets/bundle/distribute/build-sdk.cjs +28 -0
- package/assets/bundle/distribute/package.json +7 -3
- package/assets/bundle/distribute/tsconfig.json +15 -105
- package/lib/INestiaConfig.d.ts +74 -34
- package/lib/NestiaSdkApplication.d.ts +60 -0
- package/lib/NestiaSdkApplication.js +121 -32
- package/lib/NestiaSdkApplication.js.map +1 -1
- package/lib/NestiaSwaggerComposer.d.ts +21 -0
- package/lib/NestiaSwaggerComposer.js +32 -13
- 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 +52 -77
- 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 +44 -0
- package/lib/analyses/ParameterNameAnalyzer.js +63 -0
- package/lib/analyses/ParameterNameAnalyzer.js.map +1 -0
- package/lib/analyses/PathAnalyzer.d.ts +93 -1
- package/lib/analyses/PathAnalyzer.js +160 -23
- package/lib/analyses/PathAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectControllerAnalyzer.d.ts +32 -0
- package/lib/analyses/ReflectControllerAnalyzer.js +24 -1
- package/lib/analyses/ReflectControllerAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationAnalyzer.d.ts +29 -0
- package/lib/analyses/ReflectHttpOperationAnalyzer.js +35 -24
- 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 +143 -23
- package/lib/analyses/ReflectHttpOperationParameterAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.d.ts +32 -0
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js +27 -2
- package/lib/analyses/ReflectHttpOperationResponseAnalyzer.js.map +1 -1
- package/lib/analyses/ReflectMcpOperationAnalyzer.d.ts +29 -0
- package/lib/analyses/ReflectMcpOperationAnalyzer.js +35 -11
- 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 +27 -5
- package/lib/analyses/ReflectWebSocketOperationAnalyzer.js.map +1 -1
- package/lib/analyses/SecurityAnalyzer.d.ts +25 -0
- package/lib/analyses/SecurityAnalyzer.js +39 -19
- package/lib/analyses/SecurityAnalyzer.js.map +1 -1
- package/lib/analyses/SwaggerExampleAnalyzer.d.ts +31 -0
- package/lib/analyses/SwaggerExampleAnalyzer.js +36 -0
- package/lib/analyses/SwaggerExampleAnalyzer.js.map +1 -0
- package/lib/analyses/TypedHttpRouteAnalyzer.d.ts +41 -3
- package/lib/analyses/TypedHttpRouteAnalyzer.js +196 -172
- 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 +20 -1
- 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 +125 -41
- 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/executable/sdk.js +16 -1
- package/lib/executable/sdk.js.map +1 -1
- package/lib/factories/ExpressionFactory.d.ts +18 -0
- package/lib/factories/ExpressionFactory.js +21 -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 +33 -11
- 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 +43 -5
- package/lib/generates/SdkGenerator.js.map +1 -1
- package/lib/generates/SwaggerGenerator.d.ts +36 -6
- package/lib/generates/SwaggerGenerator.js +190 -40
- 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 +57 -0
- package/lib/generates/internal/FilePrinter.js +74 -0
- package/lib/generates/internal/FilePrinter.js.map +1 -1
- package/lib/generates/internal/ImportDictionary.d.ts +93 -1
- package/lib/generates/internal/ImportDictionary.js +103 -2
- package/lib/generates/internal/ImportDictionary.js.map +1 -1
- package/lib/generates/internal/SdkAliasCollection.d.ts +121 -1
- package/lib/generates/internal/SdkAliasCollection.js +132 -11
- package/lib/generates/internal/SdkAliasCollection.js.map +1 -1
- package/lib/generates/internal/SdkDistributionComposer.d.ts +19 -0
- package/lib/generates/internal/SdkDistributionComposer.js +149 -52
- package/lib/generates/internal/SdkDistributionComposer.js.map +1 -1
- package/lib/generates/internal/SdkFileProgrammer.d.ts +18 -0
- package/lib/generates/internal/SdkFileProgrammer.js +101 -12
- 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 +40 -23
- package/lib/generates/internal/SdkHttpFunctionProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.d.ts +19 -0
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js +46 -34
- package/lib/generates/internal/SdkHttpNamespaceProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpParameterProgrammer.d.ts +142 -1
- package/lib/generates/internal/SdkHttpParameterProgrammer.js +175 -6
- package/lib/generates/internal/SdkHttpParameterProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpRouteProgrammer.d.ts +20 -0
- package/lib/generates/internal/SdkHttpRouteProgrammer.js +36 -32
- package/lib/generates/internal/SdkHttpRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkHttpSimulationProgrammer.d.ts +38 -0
- package/lib/generates/internal/SdkHttpSimulationProgrammer.js +66 -18
- 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 +72 -24
- package/lib/generates/internal/SdkMcpRouteProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkPathTemplate.d.ts +36 -0
- package/lib/generates/internal/SdkPathTemplate.js +65 -0
- package/lib/generates/internal/SdkPathTemplate.js.map +1 -0
- 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 +111 -27
- package/lib/generates/internal/SdkTypeProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkTypeTagProgrammer.d.ts +53 -1
- package/lib/generates/internal/SdkTypeTagProgrammer.js +407 -67
- 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 +46 -36
- package/lib/generates/internal/SdkWebSocketNamespaceProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.d.ts +114 -1
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.js +120 -5
- package/lib/generates/internal/SdkWebSocketParameterProgrammer.js.map +1 -1
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.d.ts +18 -0
- package/lib/generates/internal/SdkWebSocketRouteProgrammer.js +75 -33
- 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 +37 -8
- package/lib/generates/internal/SwaggerOperationComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationParameterComposer.d.ts +40 -1
- package/lib/generates/internal/SwaggerOperationParameterComposer.js +230 -25
- package/lib/generates/internal/SwaggerOperationParameterComposer.js.map +1 -1
- package/lib/generates/internal/SwaggerOperationResponseComposer.d.ts +21 -0
- package/lib/generates/internal/SwaggerOperationResponseComposer.js +58 -7
- package/lib/generates/internal/SwaggerOperationResponseComposer.js.map +1 -1
- package/lib/internal/legacy.d.ts +342 -31
- package/lib/internal/legacy.js +207 -31
- package/lib/internal/legacy.js.map +1 -1
- package/lib/structures/INestiaProject.d.ts +10 -0
- package/lib/structures/INestiaSdkInput.d.ts +30 -0
- package/lib/structures/IOperationMetadata.d.ts +77 -0
- package/lib/structures/IReflectController.d.ts +10 -0
- package/lib/structures/IReflectHttpOperation.d.ts +10 -0
- package/lib/structures/IReflectHttpOperationException.d.ts +13 -2
- package/lib/structures/IReflectHttpOperationParameter.d.ts +55 -3
- package/lib/structures/IReflectHttpOperationSuccess.d.ts +15 -3
- 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 +18 -0
- package/lib/structures/ITypedHttpRouteException.d.ts +13 -1
- package/lib/structures/ITypedHttpRouteParameter.d.ts +48 -1
- package/lib/structures/ITypedHttpRouteSuccess.d.ts +13 -1
- package/lib/structures/ITypedMcpRoute.d.ts +11 -0
- package/lib/structures/ITypedWebSocketRoute.d.ts +18 -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 +45 -0
- package/lib/utils/SourceFinder.js +74 -16
- 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 +39 -2
- package/lib/utils/VersioningStrategy.js +46 -13
- 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_http_rules.go +210 -0
- package/native/sdk/sdk_metadata_json.go +79 -4
- package/native/sdk/sdk_transform.go +1157 -414
- package/package.json +8 -6
- package/src/INestiaConfig.ts +74 -34
- package/src/NestiaSdkApplication.ts +129 -41
- package/src/NestiaSwaggerComposer.ts +32 -14
- package/src/analyses/AccessorAnalyzer.ts +26 -0
- package/src/analyses/ConfigAnalyzer.ts +52 -90
- package/src/analyses/ImportAnalyzer.ts +25 -0
- package/src/analyses/ParameterNameAnalyzer.ts +75 -0
- package/src/analyses/PathAnalyzer.ts +167 -23
- package/src/analyses/ReflectControllerAnalyzer.ts +34 -1
- package/src/analyses/ReflectHttpOperationAnalyzer.ts +36 -14
- package/src/analyses/ReflectHttpOperationExceptionAnalyzer.ts +31 -0
- package/src/analyses/ReflectHttpOperationParameterAnalyzer.ts +153 -39
- package/src/analyses/ReflectHttpOperationResponseAnalyzer.ts +38 -7
- package/src/analyses/ReflectMcpOperationAnalyzer.ts +38 -3
- package/src/analyses/ReflectMetadataAnalyzer.ts +47 -0
- package/src/analyses/ReflectWebSocketOperationAnalyzer.ts +40 -7
- package/src/analyses/SecurityAnalyzer.ts +45 -20
- package/src/analyses/SwaggerExampleAnalyzer.ts +39 -0
- package/src/analyses/TypedHttpRouteAnalyzer.ts +263 -198
- package/src/analyses/TypedMcpRouteAnalyzer.ts +180 -20
- package/src/analyses/TypedWebSocketRouteAnalyzer.ts +20 -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 +172 -44
- package/src/executable/internal/NestiaSwaggerWatch.ts +359 -0
- package/src/executable/sdk.ts +24 -1
- package/src/factories/ExpressionFactory.ts +23 -2
- package/src/factories/IdentifierFactory.ts +24 -0
- package/src/factories/LiteralFactory.ts +51 -13
- 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 +43 -12
- package/src/generates/SwaggerGenerator.ts +229 -46
- package/src/generates/internal/E2eFileProgrammer.ts +20 -0
- package/src/generates/internal/FilePrinter.ts +71 -0
- package/src/generates/internal/ImportDictionary.ts +120 -2
- package/src/generates/internal/SdkAliasCollection.ts +144 -15
- package/src/generates/internal/SdkDistributionComposer.ts +181 -56
- package/src/generates/internal/SdkFileProgrammer.ts +126 -16
- package/src/generates/internal/SdkHttpCloneProgrammer.ts +55 -0
- package/src/generates/internal/SdkHttpCloneReferencer.ts +97 -23
- package/src/generates/internal/SdkHttpFunctionProgrammer.ts +47 -30
- package/src/generates/internal/SdkHttpNamespaceProgrammer.ts +53 -64
- package/src/generates/internal/SdkHttpParameterProgrammer.ts +295 -13
- package/src/generates/internal/SdkHttpRouteProgrammer.ts +37 -31
- package/src/generates/internal/SdkHttpSimulationProgrammer.ts +122 -18
- package/src/generates/internal/SdkImportWizard.ts +63 -0
- package/src/generates/internal/SdkMcpRouteProgrammer.ts +150 -33
- package/src/generates/internal/SdkPathTemplate.ts +88 -0
- package/src/generates/internal/SdkRouteDirectory.ts +10 -0
- package/src/generates/internal/SdkTypeProgrammer.ts +137 -36
- package/src/generates/internal/SdkTypeTagProgrammer.ts +536 -78
- package/src/generates/internal/SdkWebSocketCloneProgrammer.ts +185 -142
- package/src/generates/internal/SdkWebSocketNamespaceProgrammer.ts +62 -68
- package/src/generates/internal/SdkWebSocketParameterProgrammer.ts +205 -5
- package/src/generates/internal/SdkWebSocketRouteProgrammer.ts +89 -48
- package/src/generates/internal/SwaggerDescriptionComposer.ts +47 -1
- package/src/generates/internal/SwaggerOperationComposer.ts +38 -6
- package/src/generates/internal/SwaggerOperationParameterComposer.ts +318 -36
- package/src/generates/internal/SwaggerOperationResponseComposer.ts +74 -11
- package/src/internal/legacy-augmentation.d.ts +16 -0
- package/src/internal/legacy.ts +407 -49
- package/src/structures/INestiaProject.ts +10 -0
- package/src/structures/INestiaSdkInput.ts +30 -0
- package/src/structures/IOperationMetadata.ts +83 -0
- package/src/structures/IReflectController.ts +10 -0
- package/src/structures/IReflectHttpOperation.ts +10 -0
- package/src/structures/IReflectHttpOperationException.ts +17 -2
- package/src/structures/IReflectHttpOperationParameter.ts +56 -2
- package/src/structures/IReflectHttpOperationSuccess.ts +19 -3
- 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 +18 -0
- package/src/structures/ITypedHttpRouteException.ts +14 -1
- package/src/structures/ITypedHttpRouteParameter.ts +48 -1
- package/src/structures/ITypedHttpRouteSuccess.ts +14 -1
- package/src/structures/ITypedMcpRoute.ts +12 -0
- package/src/structures/ITypedWebSocketRoute.ts +18 -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 +76 -18
- 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 +51 -16
- 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/lib/validators/HttpHeadersValidator.d.ts +0 -11
- package/lib/validators/HttpHeadersValidator.js +0 -15
- package/lib/validators/HttpHeadersValidator.js.map +0 -1
- package/lib/validators/HttpQueryValidator.d.ts +0 -10
- package/lib/validators/HttpQueryValidator.js +0 -14
- package/lib/validators/HttpQueryValidator.js.map +0 -1
- package/src/generates/internal/SwaggerReadonlyArrayEmender.ts +0 -264
- package/src/validators/HttpHeadersValidator.ts +0 -12
- package/src/validators/HttpQueryValidator.ts +0 -11
package/src/internal/legacy.ts
CHANGED
|
@@ -1,11 +1,12 @@
|
|
|
1
|
+
/// <reference path="../../src/internal/legacy-augmentation.d.ts" preserve="true" />
|
|
1
2
|
// Internal utilities for the plain metadata emitted by the SDK's Go
|
|
2
3
|
// contributor in `packages/sdk/native/sdk/sdk_transform.go`. These adapters
|
|
3
4
|
// preserve the names formerly provided by `@typia/core` without rebuilding
|
|
4
5
|
// its runtime classes.
|
|
5
6
|
//
|
|
6
7
|
// The utilities index components, resolve references, read metadata flags
|
|
7
|
-
// and precomputed fields, validate SDK policy, and
|
|
8
|
-
//
|
|
8
|
+
// and precomputed fields, validate SDK policy, and read the precomputed JSON
|
|
9
|
+
// schemas, including the per-property ones decomposed parameters use.
|
|
9
10
|
import type {
|
|
10
11
|
IJsonSchemaCollection,
|
|
11
12
|
IMetadataComponents,
|
|
@@ -14,21 +15,6 @@ import type {
|
|
|
14
15
|
OpenApi,
|
|
15
16
|
} from "@typia/interface";
|
|
16
17
|
|
|
17
|
-
// Module augmentation: typia v13's `IReference` carries only a symbolic
|
|
18
|
-
// `name` + tags, but `MetadataSchema.from(plain, dictionary)` mutates
|
|
19
|
-
// each reference to also hold the resolved target type so downstream
|
|
20
|
-
// sdk code can keep its `ref.type!.value` / `ref.type!.elements` access
|
|
21
|
-
// pattern from the legacy `@typia/core` `MetadataArray` / `MetadataTuple`
|
|
22
|
-
// classes. The field is optional because it is only populated after a
|
|
23
|
-
// `MetadataSchema.from` walk against a dictionary.
|
|
24
|
-
declare module "@typia/interface" {
|
|
25
|
-
namespace IMetadataSchema {
|
|
26
|
-
interface IReference {
|
|
27
|
-
type?: IArrayType | ITupleType | IObjectType | IAliasType;
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
18
|
/**
|
|
33
19
|
* Plain `IMetadataSchema` augmented with the fields the nestia transform
|
|
34
20
|
* pre-bakes. `size`, `name`, and `empty` replace the methods the legacy
|
|
@@ -41,6 +27,12 @@ declare module "@typia/interface" {
|
|
|
41
27
|
* overlay — still satisfy the type when passed through legacy utilities. The
|
|
42
28
|
* utilities read the fields via the optional accessor and fall back when
|
|
43
29
|
* absent.
|
|
30
|
+
*
|
|
31
|
+
* @evidence contracts/common.md#principled-implementation The plain metadata carries baked members the legacy class computed by methods, and each is optional because nested metadata does not carry them.
|
|
32
|
+
* @evidence contracts/common.md#clear-and-simple-design One extending interface.
|
|
33
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
34
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the baked fields.
|
|
35
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
44
36
|
*/
|
|
45
37
|
export interface IReflectMetadata extends IMetadataSchema {
|
|
46
38
|
size?: number;
|
|
@@ -49,16 +41,45 @@ export interface IReflectMetadata extends IMetadataSchema {
|
|
|
49
41
|
jsonSchema?: IReflectJsonSchema;
|
|
50
42
|
}
|
|
51
43
|
|
|
44
|
+
/**
|
|
45
|
+
* The JSON schema that the transform bakes beside a metadata: the version, the
|
|
46
|
+
* components, the schema, and the schema of each property.
|
|
47
|
+
*
|
|
48
|
+
* @evidence contracts/common.md#principled-implementation The bake is data produced by the Go side, so the record only names its parts.
|
|
49
|
+
* @evidence contracts/common.md#clear-and-simple-design A record.
|
|
50
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
51
|
+
* @evidence contracts/common.md#meaningful-documentation The comment and its members state what each part is.
|
|
52
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
53
|
+
*/
|
|
52
54
|
export interface IReflectJsonSchema {
|
|
53
55
|
version: "3.0" | "3.1";
|
|
54
56
|
components: OpenApi.IComponents;
|
|
55
57
|
schema: OpenApi.IJsonSchema;
|
|
58
|
+
|
|
59
|
+
/**
|
|
60
|
+
* The schema of each property of the first object type, keyed by property
|
|
61
|
+
* name and resolved against {@link components}: the property schema typia's
|
|
62
|
+
* object schema holds, without the title, description, deprecation, and
|
|
63
|
+
* readOnly an OpenAPI parameter carries in its own fields or cannot use.
|
|
64
|
+
*
|
|
65
|
+
* Baked on the resolved schema of route parameters only, for the Swagger
|
|
66
|
+
* generator to decompose a query or headers object into one parameter per
|
|
67
|
+
* property. A property typia's object schema omits (`@hidden`, `@ignore`,
|
|
68
|
+
* `@internal`, or a value with no JSON form) has no entry.
|
|
69
|
+
*/
|
|
70
|
+
properties?: Record<string, OpenApi.IJsonSchema>;
|
|
56
71
|
}
|
|
57
72
|
|
|
58
73
|
/**
|
|
59
74
|
* Cross-reference dictionary produced by `MetadataComponents.from`. Each map is
|
|
60
75
|
* keyed by the entry's `.name`, matching the lookup pattern the legacy
|
|
61
76
|
* `MetadataComponents.dictionary` getter offered.
|
|
77
|
+
*
|
|
78
|
+
* @evidence contracts/common.md#principled-implementation Four maps by kind let a reference be resolved by name in constant time.
|
|
79
|
+
* @evidence contracts/common.md#clear-and-simple-design A four-member record.
|
|
80
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
81
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the four kinds.
|
|
82
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
62
83
|
*/
|
|
63
84
|
export interface IMetadataDictionary {
|
|
64
85
|
objects: Map<string, IMetadataSchema.IObjectType>;
|
|
@@ -71,25 +92,110 @@ export interface IMetadataDictionary {
|
|
|
71
92
|
// Type aliases — the legacy class names ↔ typia v13 plain interfaces.
|
|
72
93
|
// ---------------------------------------------------------------------
|
|
73
94
|
|
|
95
|
+
/**
|
|
96
|
+
* The name the SDK uses for a metadata schema.
|
|
97
|
+
*
|
|
98
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
99
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
100
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
101
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
102
|
+
*/
|
|
74
103
|
export type MetadataSchema = IMetadataSchema;
|
|
104
|
+
/**
|
|
105
|
+
* The components of a metadata together with their dictionary.
|
|
106
|
+
*
|
|
107
|
+
* @evidence contracts/common.md#principled-implementation The intersection adds the name index to the plain components.
|
|
108
|
+
* @evidence contracts/common.md#clear-and-simple-design One intersection type and a namespace with one builder.
|
|
109
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior. The builder only indexes.
|
|
110
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the added dictionary.
|
|
111
|
+
*/
|
|
75
112
|
export type MetadataComponents = IMetadataComponents & {
|
|
76
113
|
dictionary: IMetadataDictionary;
|
|
77
114
|
};
|
|
115
|
+
/**
|
|
116
|
+
* The name the SDK uses for an alias type.
|
|
117
|
+
*
|
|
118
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
119
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
120
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
121
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
122
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
123
|
+
*/
|
|
78
124
|
export type MetadataAliasType = IMetadataSchema.IAliasType;
|
|
125
|
+
/**
|
|
126
|
+
* The name the SDK uses for an array type.
|
|
127
|
+
*
|
|
128
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
129
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
130
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
131
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
132
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
133
|
+
*/
|
|
79
134
|
export type MetadataArrayType = IMetadataSchema.IArrayType;
|
|
135
|
+
/**
|
|
136
|
+
* The name the SDK uses for a tuple type.
|
|
137
|
+
*
|
|
138
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
139
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
140
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
141
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
142
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
143
|
+
*/
|
|
80
144
|
export type MetadataTupleType = IMetadataSchema.ITupleType;
|
|
145
|
+
/**
|
|
146
|
+
* The name the SDK uses for an object type.
|
|
147
|
+
*
|
|
148
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
149
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
150
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
151
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
152
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
153
|
+
*/
|
|
81
154
|
export type MetadataObjectType = IMetadataSchema.IObjectType;
|
|
155
|
+
/**
|
|
156
|
+
* The name the SDK uses for an atomic type.
|
|
157
|
+
*
|
|
158
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
159
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
160
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
161
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
162
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
163
|
+
*/
|
|
82
164
|
export type MetadataAtomic = IMetadataSchema.IAtomic;
|
|
83
165
|
/**
|
|
84
166
|
* Flattened constant-value shape: typia v13 splits `IConstant.IValue<T>` by the
|
|
85
167
|
* atomic discriminator, but sdk's literal writer just needs the runtime `value`
|
|
86
168
|
* payload, so collapse the union to a single ergonomic shape.
|
|
169
|
+
*
|
|
170
|
+
* @evidence contracts/common.md#principled-implementation The generators need only the value payload, so the union is collapsed into one shape.
|
|
171
|
+
* @evidence contracts/common.md#clear-and-simple-design A two-member record.
|
|
172
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
173
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the flattening.
|
|
174
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
87
175
|
*/
|
|
88
176
|
export interface MetadataConstantValue {
|
|
89
177
|
value: string | number | bigint | boolean;
|
|
90
178
|
tags: IMetadataTypeTag[][];
|
|
91
179
|
}
|
|
180
|
+
/**
|
|
181
|
+
* The name the SDK uses for an escaped type.
|
|
182
|
+
*
|
|
183
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
184
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
185
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
186
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
187
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
188
|
+
*/
|
|
92
189
|
export type MetadataEscaped = IMetadataSchema.IEscaped;
|
|
190
|
+
/**
|
|
191
|
+
* The name the SDK uses for an object property.
|
|
192
|
+
*
|
|
193
|
+
* @evidence contracts/common.md#principled-implementation The alias maps the legacy class name to the plain interface of typia, so the generators keep their names.
|
|
194
|
+
* @evidence contracts/common.md#clear-and-simple-design One alias.
|
|
195
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
196
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states what the alias stands for.
|
|
197
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
198
|
+
*/
|
|
93
199
|
export type MetadataProperty = IMetadataSchema.IProperty;
|
|
94
200
|
|
|
95
201
|
/**
|
|
@@ -99,16 +205,49 @@ export type MetadataProperty = IMetadataSchema.IProperty;
|
|
|
99
205
|
* dictionary. `MetadataSchema.from` walks the metadata tree once and attaches
|
|
100
206
|
* the resolved `.type` field so downstream sdk code can keep its `ref.type`
|
|
101
207
|
* access pattern.
|
|
208
|
+
*
|
|
209
|
+
* @evidence contracts/common.md#principled-implementation The reference is the plain interface plus the `type` that `MetadataSchema.from` resolves against the dictionary.
|
|
210
|
+
* @evidence contracts/common.md#clear-and-simple-design One intersection type.
|
|
211
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
212
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the resolved member.
|
|
213
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
102
214
|
*/
|
|
103
215
|
export type MetadataArray = IMetadataSchema.IReference & {
|
|
104
216
|
type: MetadataArrayType;
|
|
105
217
|
};
|
|
218
|
+
/**
|
|
219
|
+
* A reference to a named tuple type, with the resolved type attached.
|
|
220
|
+
*
|
|
221
|
+
* @evidence contracts/common.md#principled-implementation The reference is the plain interface plus the `type` that `MetadataSchema.from` resolves against the dictionary.
|
|
222
|
+
* @evidence contracts/common.md#clear-and-simple-design One intersection type.
|
|
223
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
224
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the resolved member.
|
|
225
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
226
|
+
*/
|
|
106
227
|
export type MetadataTuple = IMetadataSchema.IReference & {
|
|
107
228
|
type: MetadataTupleType;
|
|
108
229
|
};
|
|
230
|
+
/**
|
|
231
|
+
* A reference to a named object type, with the resolved type attached.
|
|
232
|
+
*
|
|
233
|
+
* @evidence contracts/common.md#principled-implementation The reference is the plain interface plus the `type` that `MetadataSchema.from` resolves against the dictionary.
|
|
234
|
+
* @evidence contracts/common.md#clear-and-simple-design One intersection type.
|
|
235
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
236
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the resolved member.
|
|
237
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
238
|
+
*/
|
|
109
239
|
export type MetadataObject = IMetadataSchema.IReference & {
|
|
110
240
|
type: MetadataObjectType;
|
|
111
241
|
};
|
|
242
|
+
/**
|
|
243
|
+
* A reference to a named alias type, with the resolved type attached.
|
|
244
|
+
*
|
|
245
|
+
* @evidence contracts/common.md#principled-implementation The reference is the plain interface plus the `type` that `MetadataSchema.from` resolves against the dictionary.
|
|
246
|
+
* @evidence contracts/common.md#clear-and-simple-design One intersection type.
|
|
247
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
248
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the resolved member.
|
|
249
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
250
|
+
*/
|
|
112
251
|
export type MetadataAlias = IMetadataSchema.IReference & {
|
|
113
252
|
type: MetadataAliasType;
|
|
114
253
|
};
|
|
@@ -117,27 +256,98 @@ export type MetadataAlias = IMetadataSchema.IReference & {
|
|
|
117
256
|
// Metadata utility functions — read pre-baked fields, no class wrapping.
|
|
118
257
|
// ---------------------------------------------------------------------
|
|
119
258
|
|
|
120
|
-
/**
|
|
259
|
+
/**
|
|
260
|
+
* `MetadataSchema.size()` → reads the pre-baked `size` field.
|
|
261
|
+
*
|
|
262
|
+
* @evidence contracts/common.md#principled-implementation The transform bakes the size, which replaces a method of the legacy class.
|
|
263
|
+
* @evidence contracts/common.md#clear-and-simple-design One read.
|
|
264
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It reads the baked field.
|
|
265
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the fallback.
|
|
266
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
267
|
+
*/
|
|
121
268
|
export const sizeOf = (m: IMetadataSchema): number =>
|
|
122
269
|
(m as IReflectMetadata).size ?? 0;
|
|
123
270
|
|
|
124
|
-
/**
|
|
271
|
+
/**
|
|
272
|
+
* `MetadataSchema.getName()` → reads the pre-baked `name` field.
|
|
273
|
+
*
|
|
274
|
+
* @evidence contracts/common.md#principled-implementation The transform bakes the name, which replaces a method of the legacy class.
|
|
275
|
+
* @evidence contracts/common.md#clear-and-simple-design One read.
|
|
276
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It reads the baked field.
|
|
277
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the fallback.
|
|
278
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
279
|
+
*/
|
|
125
280
|
export const nameOf = (m: IMetadataSchema): string =>
|
|
126
281
|
(m as IReflectMetadata).name ?? "";
|
|
127
282
|
|
|
128
|
-
/**
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
283
|
+
/**
|
|
284
|
+
* A property is required only when neither omission nor undefined is allowed.
|
|
285
|
+
*
|
|
286
|
+
* @evidence contracts/common.md#principled-implementation Both flags must exclude absence, so the conjunction with the negated optional flag is the definition.
|
|
287
|
+
* @evidence contracts/common.md#clear-and-simple-design One expression.
|
|
288
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It reads two flags.
|
|
289
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the definition.
|
|
290
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
291
|
+
*/
|
|
133
292
|
export const isRequiredOf = (m: IMetadataSchema): boolean =>
|
|
134
293
|
m.required && !m.optional;
|
|
135
294
|
|
|
295
|
+
/**
|
|
296
|
+
* Reads a constant's value as the SDK's Go contributor writes it.
|
|
297
|
+
*
|
|
298
|
+
* JSON holds neither a bigint nor NaN or ±Infinity, so the metadata carries a
|
|
299
|
+
* bigint value as its decimal digits and a non-finite number by its name
|
|
300
|
+
* (`"Infinity"`), both as strings. `type` is the constant's type, which is its
|
|
301
|
+
* value's own, so a bigint or number constant's string is always one of those;
|
|
302
|
+
* every other value is returned as it is.
|
|
303
|
+
*
|
|
304
|
+
* @evidence contracts/common.md#principled-implementation JSON holds neither bigint nor a non-finite number, so those are carried as strings and converted back by the constant's own type.
|
|
305
|
+
* @evidence contracts/common.md#clear-and-simple-design One conditional.
|
|
306
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The conversion follows the documented encoding.
|
|
307
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the encoding.
|
|
308
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
309
|
+
*/
|
|
310
|
+
export const decodeMetadataValue = (type: string, value: unknown): unknown =>
|
|
311
|
+
typeof value !== "string"
|
|
312
|
+
? value
|
|
313
|
+
: type === "bigint"
|
|
314
|
+
? BigInt(value)
|
|
315
|
+
: type === "number"
|
|
316
|
+
? Number(value)
|
|
317
|
+
: value;
|
|
318
|
+
|
|
319
|
+
/**
|
|
320
|
+
* Reads a type tag's value as the SDK's Go contributor writes it.
|
|
321
|
+
*
|
|
322
|
+
* A tag's `target` is the type it tags, not its value's: `tags.Sequence<1>` on
|
|
323
|
+
* a bigint holds a number, and `tags.Example<"Infinity">` on a number holds a
|
|
324
|
+
* string. So a value encoded as a string, a bigint's digits or a non-finite
|
|
325
|
+
* number's name, arrives with the type it stands for in `encoding`.
|
|
326
|
+
*
|
|
327
|
+
* @evidence contracts/common.md#principled-implementation A tag's target is the type it tags, so a value carried as a string states the type it stands for in `encoding`.
|
|
328
|
+
* @evidence contracts/common.md#clear-and-simple-design One conditional over `decodeMetadataValue`.
|
|
329
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It follows the documented encoding.
|
|
330
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states why the encoding exists.
|
|
331
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
332
|
+
*/
|
|
333
|
+
export const decodeTagValue = (
|
|
334
|
+
tag: IMetadataTypeTag & { encoding?: "bigint" | "number" },
|
|
335
|
+
): unknown =>
|
|
336
|
+
tag.encoding !== undefined
|
|
337
|
+
? decodeMetadataValue(tag.encoding, tag.value)
|
|
338
|
+
: tag.value;
|
|
339
|
+
|
|
136
340
|
/**
|
|
137
341
|
* Equivalent of the legacy `MetadataSchema.isSoleLiteral()` method: `true` when
|
|
138
342
|
* the schema represents exactly one constant literal value and nothing else.
|
|
139
343
|
* Used by sdk's type printer to fall back to literal emission instead of a
|
|
140
344
|
* union.
|
|
345
|
+
*
|
|
346
|
+
* @evidence contracts/common.md#principled-implementation Every other form must be empty, the metadata must not be nullable, any, rest, or escaped, and there must be one constant with one value.
|
|
347
|
+
* @evidence contracts/common.md#clear-and-simple-design One function of guards.
|
|
348
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The list of forms is exhaustive over the metadata's members.
|
|
349
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the meaning.
|
|
350
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
141
351
|
*/
|
|
142
352
|
export const isSoleLiteralOf = (m: IMetadataSchema): boolean => {
|
|
143
353
|
if (m.any) return false;
|
|
@@ -162,7 +372,22 @@ export const isSoleLiteralOf = (m: IMetadataSchema): boolean => {
|
|
|
162
372
|
// `MetadataComponents.from(plain)` — namespace utility, not a class.
|
|
163
373
|
// ---------------------------------------------------------------------
|
|
164
374
|
|
|
375
|
+
/**
|
|
376
|
+
* Indexes metadata component names in memory; component names are symbolic type
|
|
377
|
+
* identities rather than native pathnames.
|
|
378
|
+
*
|
|
379
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation Indexes metadata component names in memory; component names are symbolic type identities rather than native pathnames.
|
|
380
|
+
*/
|
|
165
381
|
export namespace MetadataComponents {
|
|
382
|
+
/**
|
|
383
|
+
* Builds the components with a dictionary indexing each kind by name.
|
|
384
|
+
*
|
|
385
|
+
* @evidence contracts/common.md#principled-implementation Each kind is a map from name to type, and the plain components are kept beside it.
|
|
386
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
387
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It only indexes.
|
|
388
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the result.
|
|
389
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
390
|
+
*/
|
|
166
391
|
export const from = (plain: IMetadataComponents): MetadataComponents => {
|
|
167
392
|
const dictionary: IMetadataDictionary = {
|
|
168
393
|
objects: new Map(plain.objects.map((o) => [o.name, o])),
|
|
@@ -178,6 +403,12 @@ export namespace MetadataComponents {
|
|
|
178
403
|
// `MetadataSchema.from(plain, dictionary)` — reference resolution.
|
|
179
404
|
// ---------------------------------------------------------------------
|
|
180
405
|
|
|
406
|
+
/**
|
|
407
|
+
* Resolves symbolic type references in a metadata graph; dictionary lookup owns
|
|
408
|
+
* no native file or process boundary.
|
|
409
|
+
*
|
|
410
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation Resolves symbolic type references in a metadata graph; dictionary lookup owns no native file or process boundary.
|
|
411
|
+
*/
|
|
181
412
|
export namespace MetadataSchema {
|
|
182
413
|
/**
|
|
183
414
|
* Walks the metadata tree and attaches the resolved `.type` field to every
|
|
@@ -185,6 +416,12 @@ export namespace MetadataSchema {
|
|
|
185
416
|
* index. This is idempotent — references whose `.type` has already been
|
|
186
417
|
* resolved are left alone — and mutates the input, matching the in-place
|
|
187
418
|
* resolution model `@typia/core` 12.x used.
|
|
419
|
+
*
|
|
420
|
+
* @evidence contracts/common.md#principled-implementation The walk tracks visited targets, not wrapper schemas, because wrappers are rebuilt on this side and are not shared, so a cyclic type such as a node with children terminates.
|
|
421
|
+
* @evidence contracts/common.md#clear-and-simple-design One function over two private walkers.
|
|
422
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The in-place mutation is documented and is confined to the metadata the analysis owns.
|
|
423
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the mutation, the idempotence, and the cycle rule.
|
|
424
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
188
425
|
*/
|
|
189
426
|
export const from = (
|
|
190
427
|
plain: IMetadataSchema,
|
|
@@ -266,18 +503,56 @@ const attachReferences = <Target extends { name: string }>(
|
|
|
266
503
|
// are SDK-policy choices that the SDK still has to flag itself.
|
|
267
504
|
// ---------------------------------------------------------------------
|
|
268
505
|
|
|
506
|
+
/**
|
|
507
|
+
* Validation of a metadata by a policy function.
|
|
508
|
+
*
|
|
509
|
+
* @evidence contracts/common.md#principled-implementation The namespace walks the metadata once and collects the messages of the validator, and holds the types of the walk.
|
|
510
|
+
* @evidence contracts/common.md#clear-and-simple-design One function and three types.
|
|
511
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The policies are the callers'.
|
|
512
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
513
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
514
|
+
*/
|
|
269
515
|
export namespace MetadataFactory {
|
|
516
|
+
/**
|
|
517
|
+
* Where a node is: its object, property, parameter, and whether it is an
|
|
518
|
+
* output.
|
|
519
|
+
*
|
|
520
|
+
* @evidence contracts/common.md#principled-implementation The record locates a visited node for the error report.
|
|
521
|
+
* @evidence contracts/common.md#clear-and-simple-design A four-member record.
|
|
522
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
523
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the members.
|
|
524
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
525
|
+
*/
|
|
270
526
|
export interface IExplore {
|
|
271
527
|
object: IMetadataSchema.IObjectType | null;
|
|
272
528
|
property: string | null;
|
|
273
529
|
parameter: string | null;
|
|
274
530
|
output: boolean;
|
|
275
531
|
}
|
|
532
|
+
/**
|
|
533
|
+
* A validation error: the name of the type, where it is, and the messages.
|
|
534
|
+
*
|
|
535
|
+
* @evidence contracts/common.md#principled-implementation The record is one violation of the policy.
|
|
536
|
+
* @evidence contracts/common.md#clear-and-simple-design A three-member record.
|
|
537
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
538
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the members.
|
|
539
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
540
|
+
*/
|
|
276
541
|
export interface IError {
|
|
277
542
|
name: string;
|
|
278
543
|
explore: IExplore;
|
|
279
544
|
messages: string[];
|
|
280
545
|
}
|
|
546
|
+
/**
|
|
547
|
+
* A policy: it receives a node and its location and returns the messages of
|
|
548
|
+
* the violations, if any.
|
|
549
|
+
*
|
|
550
|
+
* @evidence contracts/common.md#principled-implementation The function type is the whole contract of a policy.
|
|
551
|
+
* @evidence contracts/common.md#clear-and-simple-design One function type.
|
|
552
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It is a type and adds no runtime behavior.
|
|
553
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the arguments and the result.
|
|
554
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
555
|
+
*/
|
|
281
556
|
export type Validator = (props: {
|
|
282
557
|
metadata: IMetadataSchema;
|
|
283
558
|
explore: IExplore;
|
|
@@ -291,9 +566,14 @@ export namespace MetadataFactory {
|
|
|
291
566
|
* walker, kept lean: the typia native transform has already validated
|
|
292
567
|
* structural invariants, so the validator is only called for SDK-side policy
|
|
293
568
|
* checks (JSON-serializability, query/header atomic-only rules, …).
|
|
569
|
+
*
|
|
570
|
+
* @evidence contracts/common.md#principled-implementation The walk visits objects, arrays, tuples, aliases, and escaped types through their resolved references, tracking visited targets rather than wrappers, and reports each node with the location of its property.
|
|
571
|
+
* @evidence contracts/common.md#clear-and-simple-design One function with one recursive visitor.
|
|
572
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts It calls only the caller's policy.
|
|
573
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the walk and the termination.
|
|
574
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
294
575
|
*/
|
|
295
576
|
export const validate = (props: {
|
|
296
|
-
options?: unknown;
|
|
297
577
|
functor: Validator;
|
|
298
578
|
metadata: IMetadataSchema;
|
|
299
579
|
}): IError[] => {
|
|
@@ -371,6 +651,15 @@ export namespace MetadataFactory {
|
|
|
371
651
|
};
|
|
372
652
|
}
|
|
373
653
|
|
|
654
|
+
/**
|
|
655
|
+
* The JSON policy of the SDK.
|
|
656
|
+
*
|
|
657
|
+
* @evidence contracts/common.md#principled-implementation The namespace holds the validator that rejects types JSON cannot carry.
|
|
658
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
659
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The rule is JSON's.
|
|
660
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
661
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
662
|
+
*/
|
|
374
663
|
export namespace JsonMetadataFactory {
|
|
375
664
|
/**
|
|
376
665
|
* Rejects metadata that cannot be losslessly JSON-serialized. The typia
|
|
@@ -378,6 +667,12 @@ export namespace JsonMetadataFactory {
|
|
|
378
667
|
* only adds the JSON-policy bans the legacy `@typia/core` walker enforced —
|
|
379
668
|
* bare `bigint` payloads, function-typed properties, and `Map` / `Set`
|
|
380
669
|
* containers that have no canonical JSON representation.
|
|
670
|
+
*
|
|
671
|
+
* @evidence contracts/common.md#principled-implementation JSON has no representation for those four forms, so each is a violation, and other structural problems are already rejected by the transform.
|
|
672
|
+
* @evidence contracts/common.md#clear-and-simple-design One function of four checks.
|
|
673
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The list is the JSON limitation.
|
|
674
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the four bans.
|
|
675
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
381
676
|
*/
|
|
382
677
|
export const validate: MetadataFactory.Validator = (props) => {
|
|
383
678
|
const messages: string[] = [];
|
|
@@ -393,37 +688,40 @@ export namespace JsonMetadataFactory {
|
|
|
393
688
|
};
|
|
394
689
|
}
|
|
395
690
|
|
|
396
|
-
export namespace HttpQueryProgrammer {
|
|
397
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
398
|
-
}
|
|
399
|
-
|
|
400
|
-
export namespace HttpHeadersProgrammer {
|
|
401
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
export namespace HttpParameterProgrammer {
|
|
405
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
406
|
-
}
|
|
407
|
-
|
|
408
|
-
export namespace HttpFormDataProgrammer {
|
|
409
|
-
export const validate: MetadataFactory.Validator = () => [];
|
|
410
|
-
}
|
|
411
|
-
|
|
412
691
|
// ---------------------------------------------------------------------
|
|
413
692
|
// `JsonSchemasProgrammer.writeSchemas` — consumes the per-metadata
|
|
414
693
|
// pre-baked `jsonSchema` field the nestia transform emits.
|
|
415
694
|
// ---------------------------------------------------------------------
|
|
416
695
|
|
|
696
|
+
/**
|
|
697
|
+
* Produces the JSON schemas of metadata from what the transform baked.
|
|
698
|
+
*
|
|
699
|
+
* @evidence contracts/common.md#principled-implementation The namespace copies the baked schemas and components, and falls back to a small converter for metadata without a bake.
|
|
700
|
+
* @evidence contracts/common.md#clear-and-simple-design Two functions with a private converter.
|
|
701
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The copies keep one composition from editing another's data.
|
|
702
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states its purpose.
|
|
703
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
704
|
+
*/
|
|
417
705
|
export namespace JsonSchemasProgrammer {
|
|
418
706
|
/**
|
|
419
707
|
* Consumes the per-metadata `jsonSchema` field the nestia transform
|
|
420
708
|
* pre-bakes. Top-level route metadata (success / parameter / exception)
|
|
421
|
-
*
|
|
422
|
-
*
|
|
423
|
-
*
|
|
424
|
-
*
|
|
425
|
-
*
|
|
426
|
-
*
|
|
709
|
+
* carries a baked schema whenever typia can describe the type. Metadata
|
|
710
|
+
* without one falls back to a minimal JS-side converter that reads only the
|
|
711
|
+
* atomic kinds — no type tags, template patterns, or constant annotations —
|
|
712
|
+
* so it is no substitute for the bake.
|
|
713
|
+
*
|
|
714
|
+
* The schemas and components are copies. The bake belongs to the route
|
|
715
|
+
* metadata, which every composition in the process reads, while the composer
|
|
716
|
+
* may edit what it is given in place, and so can a `SwaggerCustomizer`;
|
|
717
|
+
* handing the bake out by reference let each document inherit the previous
|
|
718
|
+
* one's edits.
|
|
719
|
+
*
|
|
720
|
+
* @evidence contracts/common.md#principled-implementation The bake belongs to route metadata that every composition reads while the composer edits its input in place, so copies are returned, and the components are copied once after the last bake of each name wins.
|
|
721
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
722
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts The fallback is stated as weaker than the bake.
|
|
723
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the copies and the fallback.
|
|
724
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
427
725
|
*/
|
|
428
726
|
export const writeSchemas = (props: {
|
|
429
727
|
version: "3.0" | "3.1";
|
|
@@ -434,7 +732,7 @@ export namespace JsonSchemasProgrammer {
|
|
|
434
732
|
for (const m of props.metadatas) {
|
|
435
733
|
const baked = (m as IReflectMetadata).jsonSchema;
|
|
436
734
|
if (baked !== undefined) {
|
|
437
|
-
schemas.push(baked.schema);
|
|
735
|
+
schemas.push(copy(baked.schema));
|
|
438
736
|
Object.assign(
|
|
439
737
|
(components.schemas ??= {}),
|
|
440
738
|
baked.components.schemas ?? {},
|
|
@@ -443,14 +741,63 @@ export namespace JsonSchemasProgrammer {
|
|
|
443
741
|
schemas.push(schemaFromMetadata(m));
|
|
444
742
|
}
|
|
445
743
|
}
|
|
744
|
+
// Copied once the last bake of each name has won, rather than per bake.
|
|
745
|
+
if (components.schemas !== undefined)
|
|
746
|
+
components.schemas = copy(components.schemas);
|
|
446
747
|
return {
|
|
447
748
|
version: props.version,
|
|
448
749
|
components,
|
|
449
750
|
schemas,
|
|
450
751
|
} as IJsonSchemaCollection;
|
|
451
752
|
};
|
|
753
|
+
|
|
754
|
+
/**
|
|
755
|
+
* Writes the schema of one property of `metadata`'s first object type, for a
|
|
756
|
+
* decomposed query or headers parameter.
|
|
757
|
+
*
|
|
758
|
+
* Reads the schema baked beside `metadata`'s own schema (see
|
|
759
|
+
* {@link IReflectJsonSchema.properties}), resolved against the same
|
|
760
|
+
* components. The schema and components are copies, for the reason
|
|
761
|
+
* {@link writeSchemas} gives. Returns `null` when that bake exists but has no
|
|
762
|
+
* entry for the property, because typia's object schema omits it, so no
|
|
763
|
+
* parameter describes it either. Only metadata the transform did not bake
|
|
764
|
+
* falls back to {@link writeSchemas} over the property value.
|
|
765
|
+
*
|
|
766
|
+
* @evidence contracts/common.md#principled-implementation The property schemas are baked beside the metadata's own schema and resolved against the same components, copied for the same reason as `writeSchemas`, and a bake without the property means typia omits it.
|
|
767
|
+
* @evidence contracts/common.md#clear-and-simple-design One function.
|
|
768
|
+
* @evidence contracts/common.md#prohibited-implementation-shortcuts Only metadata without a bake falls back.
|
|
769
|
+
* @evidence contracts/common.md#meaningful-documentation The comment states the result and the null case.
|
|
770
|
+
* @evidenceExclude contracts/portability.md#os-neutral-implementation This metadata adapter represents schema values, named type references and validation results in memory. It neither interprets native pathname identity nor opens files or launches processes.
|
|
771
|
+
*/
|
|
772
|
+
export const writeProperty = (props: {
|
|
773
|
+
version: "3.0" | "3.1";
|
|
774
|
+
metadata: IMetadataSchema;
|
|
775
|
+
key: string;
|
|
776
|
+
value: IMetadataSchema;
|
|
777
|
+
}): IJsonSchemaCollection | null => {
|
|
778
|
+
const properties: Record<string, OpenApi.IJsonSchema> | undefined = (
|
|
779
|
+
props.metadata as IReflectMetadata
|
|
780
|
+
).jsonSchema?.properties;
|
|
781
|
+
if (properties === undefined)
|
|
782
|
+
return writeSchemas({
|
|
783
|
+
version: props.version,
|
|
784
|
+
metadatas: [props.value],
|
|
785
|
+
});
|
|
786
|
+
if (Object.prototype.hasOwnProperty.call(properties, props.key) === false)
|
|
787
|
+
return null;
|
|
788
|
+
return {
|
|
789
|
+
version: props.version,
|
|
790
|
+
components: copy(
|
|
791
|
+
(props.metadata as IReflectMetadata).jsonSchema!.components,
|
|
792
|
+
),
|
|
793
|
+
schemas: [copy(properties[props.key]!)],
|
|
794
|
+
} as IJsonSchemaCollection;
|
|
795
|
+
};
|
|
452
796
|
}
|
|
453
797
|
|
|
798
|
+
/** Deep copy of baked data, which is parsed JSON, so JSON copies it exactly. */
|
|
799
|
+
const copy = <T>(value: T): T => JSON.parse(JSON.stringify(value));
|
|
800
|
+
|
|
454
801
|
const schemaFromMetadata = (m: IMetadataSchema): OpenApi.IJsonSchema => {
|
|
455
802
|
const union: OpenApi.IJsonSchema[] = [];
|
|
456
803
|
if (m.nullable) union.push({ type: "null" } as OpenApi.IJsonSchema);
|
|
@@ -459,7 +806,7 @@ const schemaFromMetadata = (m: IMetadataSchema): OpenApi.IJsonSchema => {
|
|
|
459
806
|
for (const constant of m.constants)
|
|
460
807
|
for (const value of constant.values)
|
|
461
808
|
union.push({
|
|
462
|
-
const: value.value,
|
|
809
|
+
const: jsonValue(decodeMetadataValue(constant.type, value.value)),
|
|
463
810
|
} as unknown as OpenApi.IJsonSchema);
|
|
464
811
|
for (const tpl of m.templates) {
|
|
465
812
|
union.push({ type: "string" } as OpenApi.IJsonSchema);
|
|
@@ -491,6 +838,17 @@ const schemaFromMetadata = (m: IMetadataSchema): OpenApi.IJsonSchema => {
|
|
|
491
838
|
return { oneOf: union } as unknown as OpenApi.IJsonSchema;
|
|
492
839
|
};
|
|
493
840
|
|
|
841
|
+
/**
|
|
842
|
+
* A value as a JSON document holds it: the number a bigint is, and null for a
|
|
843
|
+
* non-finite number, as `JSON.stringify` writes it.
|
|
844
|
+
*/
|
|
845
|
+
const jsonValue = (value: unknown): unknown =>
|
|
846
|
+
typeof value === "bigint"
|
|
847
|
+
? Number(value)
|
|
848
|
+
: typeof value === "number" && Number.isFinite(value) === false
|
|
849
|
+
? null
|
|
850
|
+
: value;
|
|
851
|
+
|
|
494
852
|
const schemaFromAtomic = (atomic: IMetadataSchema.IAtomic): unknown => {
|
|
495
853
|
if (atomic.type === "boolean") return { type: "boolean" };
|
|
496
854
|
if (atomic.type === "bigint" || atomic.type === "number")
|