typia 13.1.1 → 13.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/_virtual/_rolldown/runtime.mjs +1 -5
- package/lib/executable/FileSystemIdentity.d.ts +44 -0
- package/lib/executable/FileSystemIdentity.js +213 -0
- package/lib/executable/FileSystemIdentity.js.map +1 -0
- package/lib/executable/FileSystemIdentity.mjs +133 -0
- package/lib/executable/FileSystemIdentity.mjs.map +1 -0
- package/lib/executable/TypiaGenerateWizard.js +272 -106
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +239 -95
- package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
- package/lib/functional.d.ts +15 -12
- package/lib/functional.js.map +1 -1
- package/lib/functional.mjs.map +1 -1
- package/lib/internal/_ProtobufReader.d.ts +32 -0
- package/lib/internal/_ProtobufReader.js +148 -48
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +137 -41
- package/lib/internal/_ProtobufReader.mjs.map +1 -1
- package/lib/internal/_createStandardSchema.js +18 -1
- package/lib/internal/_createStandardSchema.js.map +1 -1
- package/lib/internal/_createStandardSchema.mjs +12 -1
- package/lib/internal/_createStandardSchema.mjs.map +1 -1
- package/lib/internal/_decimal.d.ts +14 -0
- package/lib/internal/_decimal.js +61 -0
- package/lib/internal/_decimal.js.map +1 -0
- package/lib/internal/_decimal.mjs +49 -0
- package/lib/internal/_decimal.mjs.map +1 -0
- package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
- package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
- package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
- package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
- package/lib/internal/_isFormatByte.js +2 -5
- package/lib/internal/_isFormatByte.js.map +1 -1
- package/lib/internal/_isFormatByte.mjs +2 -5
- package/lib/internal/_isFormatByte.mjs.map +1 -1
- package/lib/internal/_isFormatDate.js +15 -2
- package/lib/internal/_isFormatDate.js.map +1 -1
- package/lib/internal/_isFormatDate.mjs +22 -2
- package/lib/internal/_isFormatDate.mjs.map +1 -1
- package/lib/internal/_isFormatDateTime.js +21 -2
- package/lib/internal/_isFormatDateTime.js.map +1 -1
- package/lib/internal/_isFormatDateTime.mjs +13 -2
- package/lib/internal/_isFormatDateTime.mjs.map +1 -1
- package/lib/internal/_isFormatIri.js +3 -2
- package/lib/internal/_isFormatIri.js.map +1 -1
- package/lib/internal/_isFormatIri.mjs +3 -2
- package/lib/internal/_isFormatIri.mjs.map +1 -1
- package/lib/internal/_isFormatIriReference.js +10 -2
- package/lib/internal/_isFormatIriReference.js.map +1 -1
- package/lib/internal/_isFormatIriReference.mjs +9 -2
- package/lib/internal/_isFormatIriReference.mjs.map +1 -1
- package/lib/internal/_isFormatUriReference.js +1 -1
- package/lib/internal/_isFormatUriReference.js.map +1 -1
- package/lib/internal/_isFormatUriReference.mjs +1 -1
- package/lib/internal/_isFormatUriReference.mjs.map +1 -1
- package/lib/internal/_isMultipleOf.d.ts +1 -0
- package/lib/internal/_isMultipleOf.js +13 -0
- package/lib/internal/_isMultipleOf.js.map +1 -0
- package/lib/internal/_isMultipleOf.mjs +12 -0
- package/lib/internal/_isMultipleOf.mjs.map +1 -0
- package/lib/internal/_isTypeFloat.js +1 -1
- package/lib/internal/_isTypeFloat.js.map +1 -1
- package/lib/internal/_isTypeFloat.mjs +1 -1
- package/lib/internal/_isTypeFloat.mjs.map +1 -1
- package/lib/internal/_isTypeInt64.js +1 -0
- package/lib/internal/_isTypeInt64.js.map +1 -1
- package/lib/internal/_isTypeInt64.mjs.map +1 -1
- package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeInt64Bigint.js +15 -0
- package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
- package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
- package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
- package/lib/internal/_isTypeUint64.js +1 -0
- package/lib/internal/_isTypeUint64.js.map +1 -1
- package/lib/internal/_isTypeUint64.mjs.map +1 -1
- package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeUint64Bigint.js +10 -0
- package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
- package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
- package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
- package/lib/internal/_isUniqueItems.js +96 -109
- package/lib/internal/_isUniqueItems.js.map +1 -1
- package/lib/internal/_isUniqueItems.mjs +62 -50
- package/lib/internal/_isUniqueItems.mjs.map +1 -1
- package/lib/internal/_jsonStringifyArray.d.ts +1 -0
- package/lib/internal/_jsonStringifyArray.js +48 -0
- package/lib/internal/_jsonStringifyArray.js.map +1 -0
- package/lib/internal/_jsonStringifyArray.mjs +40 -0
- package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
- package/lib/internal/_jsonStringifyElement.d.ts +1 -0
- package/lib/internal/_jsonStringifyElement.js +23 -0
- package/lib/internal/_jsonStringifyElement.js.map +1 -0
- package/lib/internal/_jsonStringifyElement.mjs +23 -0
- package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
- package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
- package/lib/internal/_jsonStringifyProperty.js +31 -0
- package/lib/internal/_jsonStringifyProperty.js.map +1 -0
- package/lib/internal/_jsonStringifyProperty.mjs +31 -0
- package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
- package/lib/internal/_llmApplicationFinalize.js +1 -1
- package/lib/internal/_llmApplicationFinalize.js.map +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
- package/lib/internal/_notationAny.js +8 -1
- package/lib/internal/_notationAny.js.map +1 -1
- package/lib/internal/_notationAny.mjs +7 -1
- package/lib/internal/_notationAny.mjs.map +1 -1
- package/lib/internal/_notationAssign.d.ts +1 -0
- package/lib/internal/_notationAssign.js +18 -0
- package/lib/internal/_notationAssign.js.map +1 -0
- package/lib/internal/_notationAssign.mjs +17 -0
- package/lib/internal/_notationAssign.mjs.map +1 -0
- package/lib/internal/_notationCamel.js +30 -9
- package/lib/internal/_notationCamel.js.map +1 -1
- package/lib/internal/_notationCamel.mjs +13 -5
- package/lib/internal/_notationCamel.mjs.map +1 -1
- package/lib/internal/_notationKebab.d.ts +1 -0
- package/lib/internal/_notationKebab.js +15 -0
- package/lib/internal/_notationKebab.js.map +1 -0
- package/lib/internal/_notationKebab.mjs +15 -0
- package/lib/internal/_notationKebab.mjs.map +1 -0
- package/lib/internal/_notationKeyCollision.d.ts +1 -0
- package/lib/internal/_notationKeyCollision.js +8 -0
- package/lib/internal/_notationKeyCollision.js.map +1 -0
- package/lib/internal/_notationKeyCollision.mjs +8 -0
- package/lib/internal/_notationKeyCollision.mjs.map +1 -0
- package/lib/internal/_notationPascal.js +20 -5
- package/lib/internal/_notationPascal.js.map +1 -1
- package/lib/internal/_notationPascal.mjs +10 -5
- package/lib/internal/_notationPascal.mjs.map +1 -1
- package/lib/internal/_notationSnake.js +25 -22
- package/lib/internal/_notationSnake.js.map +1 -1
- package/lib/internal/_notationSnake.mjs +11 -11
- package/lib/internal/_notationSnake.mjs.map +1 -1
- package/lib/internal/_plainCloneAny.js +174 -38
- package/lib/internal/_plainCloneAny.js.map +1 -1
- package/lib/internal/_plainCloneAny.mjs +126 -22
- package/lib/internal/_plainCloneAny.mjs.map +1 -1
- package/lib/internal/_randomArray.d.ts +1 -1
- package/lib/internal/_randomArray.js +11 -4
- package/lib/internal/_randomArray.js.map +1 -1
- package/lib/internal/_randomArray.mjs +9 -3
- package/lib/internal/_randomArray.mjs.map +1 -1
- package/lib/internal/_randomFormatByte.d.ts +2 -1
- package/lib/internal/_randomFormatByte.js +25 -1
- package/lib/internal/_randomFormatByte.js.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +20 -1
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.d.ts +3 -4
- package/lib/internal/_randomFormatDate.js +3 -10
- package/lib/internal/_randomFormatDate.js.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +3 -6
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.d.ts +3 -4
- package/lib/internal/_randomFormatDatetime.js +26 -8
- package/lib/internal/_randomFormatDatetime.js.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +17 -6
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.d.ts +2 -1
- package/lib/internal/_randomFormatDuration.js +23 -14
- package/lib/internal/_randomFormatDuration.js.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +22 -13
- package/lib/internal/_randomFormatDuration.mjs.map +1 -1
- package/lib/internal/_randomFormatEmail.d.ts +2 -1
- package/lib/internal/_randomFormatEmail.js +8 -1
- package/lib/internal/_randomFormatEmail.js.map +1 -1
- package/lib/internal/_randomFormatEmail.mjs +5 -1
- package/lib/internal/_randomFormatEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatHostname.d.ts +8 -1
- package/lib/internal/_randomFormatHostname.js +45 -2
- package/lib/internal/_randomFormatHostname.js.map +1 -1
- package/lib/internal/_randomFormatHostname.mjs +38 -2
- package/lib/internal/_randomFormatHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
- package/lib/internal/_randomFormatIdnEmail.js +16 -2
- package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
- package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
- package/lib/internal/_randomFormatIdnHostname.js +26 -1
- package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
- package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv4.d.ts +2 -1
- package/lib/internal/_randomFormatIpv4.js +32 -1
- package/lib/internal/_randomFormatIpv4.js.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +23 -1
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.d.ts +2 -1
- package/lib/internal/_randomFormatIpv6.js +58 -1
- package/lib/internal/_randomFormatIpv6.js.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +45 -1
- package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
- package/lib/internal/_randomFormatIri.d.ts +2 -1
- package/lib/internal/_randomFormatIri.js +1 -1
- package/lib/internal/_randomFormatIri.js.map +1 -1
- package/lib/internal/_randomFormatIri.mjs +1 -1
- package/lib/internal/_randomFormatIri.mjs.map +1 -1
- package/lib/internal/_randomFormatIriReference.d.ts +2 -1
- package/lib/internal/_randomFormatIriReference.js +1 -1
- package/lib/internal/_randomFormatIriReference.js.map +1 -1
- package/lib/internal/_randomFormatIriReference.mjs +1 -1
- package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatJsonPointer.js +20 -1
- package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
- package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatPassword.d.ts +2 -1
- package/lib/internal/_randomFormatPassword.js +7 -5
- package/lib/internal/_randomFormatPassword.js.map +1 -1
- package/lib/internal/_randomFormatPassword.mjs +5 -1
- package/lib/internal/_randomFormatPassword.mjs.map +1 -1
- package/lib/internal/_randomFormatRegex.d.ts +2 -1
- package/lib/internal/_randomFormatRegex.js +15 -1
- package/lib/internal/_randomFormatRegex.js.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +14 -1
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.d.ts +2 -1
- package/lib/internal/_randomFormatTime.js +34 -7
- package/lib/internal/_randomFormatTime.js.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +37 -4
- package/lib/internal/_randomFormatTime.mjs.map +1 -1
- package/lib/internal/_randomFormatUri.d.ts +2 -1
- package/lib/internal/_randomFormatUri.js +1 -1
- package/lib/internal/_randomFormatUri.js.map +1 -1
- package/lib/internal/_randomFormatUri.mjs +1 -1
- package/lib/internal/_randomFormatUri.mjs.map +1 -1
- package/lib/internal/_randomFormatUriReference.d.ts +2 -1
- package/lib/internal/_randomFormatUriReference.js +1 -1
- package/lib/internal/_randomFormatUriReference.js.map +1 -1
- package/lib/internal/_randomFormatUriReference.mjs +1 -1
- package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
- package/lib/internal/_randomFormatUriTemplate.js +1 -1
- package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_randomFormatUrl.d.ts +2 -1
- package/lib/internal/_randomFormatUrl.js +21 -1
- package/lib/internal/_randomFormatUrl.js.map +1 -1
- package/lib/internal/_randomFormatUrl.mjs +18 -1
- package/lib/internal/_randomFormatUrl.mjs.map +1 -1
- package/lib/internal/_randomFormatUuid.d.ts +2 -1
- package/lib/internal/_randomFormatUuid.js +3 -2
- package/lib/internal/_randomFormatUuid.js.map +1 -1
- package/lib/internal/_randomFormatUuid.mjs +3 -2
- package/lib/internal/_randomFormatUuid.mjs.map +1 -1
- package/lib/internal/_randomInteger.js +59 -28
- package/lib/internal/_randomInteger.js.map +1 -1
- package/lib/internal/_randomInteger.mjs +56 -16
- package/lib/internal/_randomInteger.mjs.map +1 -1
- package/lib/internal/_randomMultiple.d.ts +8 -0
- package/lib/internal/_randomMultiple.js +168 -0
- package/lib/internal/_randomMultiple.js.map +1 -0
- package/lib/internal/_randomMultiple.mjs +158 -0
- package/lib/internal/_randomMultiple.mjs.map +1 -0
- package/lib/internal/_randomNumber.js +42 -42
- package/lib/internal/_randomNumber.js.map +1 -1
- package/lib/internal/_randomNumber.mjs +41 -27
- package/lib/internal/_randomNumber.mjs.map +1 -1
- package/lib/internal/_randomPattern.d.ts +2 -1
- package/lib/internal/_randomPattern.js +19 -4
- package/lib/internal/_randomPattern.js.map +1 -1
- package/lib/internal/_randomPattern.mjs +10 -4
- package/lib/internal/_randomPattern.mjs.map +1 -1
- package/lib/internal/_randomStringLength.d.ts +64 -0
- package/lib/internal/_randomStringLength.js +84 -0
- package/lib/internal/_randomStringLength.js.map +1 -0
- package/lib/internal/_randomStringLength.mjs +79 -0
- package/lib/internal/_randomStringLength.mjs.map +1 -0
- package/lib/internal/_stringLength.d.ts +1 -0
- package/lib/internal/_stringLength.js +11 -0
- package/lib/internal/_stringLength.js.map +1 -0
- package/lib/internal/_stringLength.mjs +10 -0
- package/lib/internal/_stringLength.mjs.map +1 -0
- package/lib/internal/_validateReport.js +4 -1
- package/lib/internal/_validateReport.js.map +1 -1
- package/lib/internal/_validateReport.mjs +2 -1
- package/lib/internal/_validateReport.mjs.map +1 -1
- package/lib/internal/private/__notationRename.d.ts +14 -0
- package/lib/internal/private/__notationRename.js +25 -0
- package/lib/internal/private/__notationRename.js.map +1 -0
- package/lib/internal/private/__notationRename.mjs +24 -0
- package/lib/internal/private/__notationRename.mjs.map +1 -0
- package/lib/internal/private/__randomComposition.d.ts +23 -0
- package/lib/internal/private/__randomComposition.js +48 -0
- package/lib/internal/private/__randomComposition.js.map +1 -0
- package/lib/internal/private/__randomComposition.mjs +54 -0
- package/lib/internal/private/__randomComposition.mjs.map +1 -0
- package/lib/internal/private/__randomEpoch.d.ts +19 -0
- package/lib/internal/private/__randomEpoch.js +31 -0
- package/lib/internal/private/__randomEpoch.js.map +1 -0
- package/lib/internal/private/__randomEpoch.mjs +28 -0
- package/lib/internal/private/__randomEpoch.mjs.map +1 -0
- package/lib/json.d.ts +2 -2
- package/lib/json.mjs.map +1 -1
- package/lib/module.d.ts +2 -2
- package/lib/module.js.map +1 -1
- package/lib/module.mjs.map +1 -1
- package/lib/notations.d.ts +20 -4
- package/lib/notations.js.map +1 -1
- package/lib/notations.mjs.map +1 -1
- package/native/adapter/plugin_options.go +117 -0
- package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
- package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
- package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
- package/native/cmd/ttsc-typia/build.go +84 -64
- package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
- package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
- package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
- package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
- package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
- package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
- package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
- package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
- package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
- package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
- package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
- package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
- package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
- package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
- package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
- package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
- package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
- package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
- package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
- package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
- package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
- package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
- package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
- package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
- package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
- package/native/cmd/ttsc-typia/main_wasm.go +21 -2
- package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
- package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
- package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
- package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
- package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
- package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
- package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
- package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
- package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
- package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
- package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
- package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
- package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
- package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
- package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
- package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
- package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
- package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
- package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
- package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
- package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
- package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
- package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
- package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
- package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
- package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
- package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
- package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
- package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
- package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
- package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
- package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
- package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
- package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
- package/native/cmd/ttsc-typia/transform.go +251 -39
- package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
- package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
- package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
- package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
- package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
- package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
- package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
- package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
- package/native/core/factories/FormatCheatSheet.go +40 -7
- package/native/core/factories/IdentifierFactory.go +131 -4
- package/native/core/factories/MetadataCommentTagFactory.go +83 -40
- package/native/core/factories/MetadataTypeTagFactory.go +13 -1
- package/native/core/factories/NumericRangeFactory.go +60 -17
- package/native/core/factories/ProtobufFactory.go +13 -5
- package/native/core/factories/factory_utility_coverage_test.go +8 -2
- package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
- package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
- package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
- package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
- package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
- package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
- package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
- package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
- package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
- package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
- package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
- package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
- package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
- package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
- package/native/core/programmers/IsProgrammer.go +15 -1
- package/native/core/programmers/RandomProgrammer.go +51 -14
- package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
- package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
- package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
- package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
- package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
- package/native/core/programmers/helpers/CloneJoiner.go +32 -0
- package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
- package/native/core/programmers/helpers/NotationJoiner.go +86 -28
- package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
- package/native/core/programmers/helpers/UnionExplorer.go +203 -61
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
- package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
- package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
- package/native/core/programmers/iterate/check_template.go +344 -32
- package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
- package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
- package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
- package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
- package/native/core/programmers/iterate/json_schema_object.go +49 -7
- package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
- package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
- package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
- package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
- package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
- package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
- package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
- package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
- package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
- package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
- package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
- package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
- package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
- package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
- package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
- package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
- package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
- package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
- package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
- package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
- package/native/core/schemas/metadata/MetadataCollection.go +266 -25
- package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
- package/native/core/schemas/metadata/MetadataDependency.go +388 -0
- package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
- package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
- package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
- package/native/core/utils/PatternUtil.go +13 -0
- package/native/core/utils/PromiseTypeFactory.go +59 -0
- package/native/core/utils/ProtobufNameEncoder.go +8 -0
- package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
- package/native/go.mod +9 -1
- package/native/transform/CallExpressionTransformer.go +12 -0
- package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
- package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
- package/package.json +12 -4
- package/src/executable/FileSystemIdentity.ts +222 -0
- package/src/executable/TypiaGenerateWizard.ts +386 -113
- package/src/functional.ts +30 -60
- package/src/internal/_ProtobufReader.ts +161 -46
- package/src/internal/_createStandardSchema.ts +15 -1
- package/src/internal/_decimal.ts +69 -0
- package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
- package/src/internal/_isFormatByte.ts +2 -5
- package/src/internal/_isFormatDate.ts +15 -2
- package/src/internal/_isFormatDateTime.ts +28 -2
- package/src/internal/_isFormatIri.ts +5 -2
- package/src/internal/_isFormatIriReference.ts +11 -3
- package/src/internal/_isFormatUriReference.ts +1 -1
- package/src/internal/_isMultipleOf.ts +8 -0
- package/src/internal/_isTypeFloat.ts +1 -1
- package/src/internal/_isTypeInt64.ts +1 -0
- package/src/internal/_isTypeInt64Bigint.ts +12 -0
- package/src/internal/_isTypeUint64.ts +1 -0
- package/src/internal/_isTypeUint64Bigint.ts +7 -0
- package/src/internal/_isUniqueItems.ts +134 -132
- package/src/internal/_jsonStringifyArray.ts +50 -0
- package/src/internal/_jsonStringifyElement.ts +19 -0
- package/src/internal/_jsonStringifyProperty.ts +30 -0
- package/src/internal/_llmApplicationFinalize.ts +6 -1
- package/src/internal/_notationAny.ts +9 -4
- package/src/internal/_notationAssign.ts +20 -0
- package/src/internal/_notationCamel.ts +31 -10
- package/src/internal/_notationKebab.ts +11 -0
- package/src/internal/_notationKeyCollision.ts +9 -0
- package/src/internal/_notationPascal.ts +19 -6
- package/src/internal/_notationSnake.ts +24 -21
- package/src/internal/_plainCloneAny.ts +208 -33
- package/src/internal/_randomArray.ts +13 -4
- package/src/internal/_randomFormatByte.ts +31 -1
- package/src/internal/_randomFormatDate.ts +6 -17
- package/src/internal/_randomFormatDatetime.ts +34 -15
- package/src/internal/_randomFormatDuration.ts +30 -13
- package/src/internal/_randomFormatEmail.ts +8 -2
- package/src/internal/_randomFormatHostname.ts +48 -1
- package/src/internal/_randomFormatIdnEmail.ts +18 -2
- package/src/internal/_randomFormatIdnHostname.ts +34 -2
- package/src/internal/_randomFormatIpv4.ts +43 -2
- package/src/internal/_randomFormatIpv6.ts +67 -2
- package/src/internal/_randomFormatIri.ts +3 -1
- package/src/internal/_randomFormatIriReference.ts +3 -1
- package/src/internal/_randomFormatJsonPointer.ts +28 -2
- package/src/internal/_randomFormatPassword.ts +11 -6
- package/src/internal/_randomFormatRegex.ts +22 -1
- package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
- package/src/internal/_randomFormatTime.ts +46 -10
- package/src/internal/_randomFormatUri.ts +3 -1
- package/src/internal/_randomFormatUriReference.ts +3 -1
- package/src/internal/_randomFormatUriTemplate.ts +3 -1
- package/src/internal/_randomFormatUrl.ts +25 -2
- package/src/internal/_randomFormatUuid.ts +10 -6
- package/src/internal/_randomInteger.ts +87 -40
- package/src/internal/_randomMultiple.ts +245 -0
- package/src/internal/_randomNumber.ts +72 -55
- package/src/internal/_randomPattern.ts +29 -4
- package/src/internal/_randomStringLength.ts +116 -0
- package/src/internal/_stringLength.ts +5 -0
- package/src/internal/_validateReport.ts +5 -1
- package/src/internal/private/__notationRename.ts +21 -0
- package/src/internal/private/__randomComposition.ts +50 -0
- package/src/internal/private/__randomEpoch.ts +34 -0
- package/src/json.ts +2 -2
- package/src/module.ts +4 -6
- package/src/notations.ts +20 -4
- package/lib/internal/private/__notationCapitalize.d.ts +0 -1
- package/lib/internal/private/__notationCapitalize.js +0 -6
- package/lib/internal/private/__notationCapitalize.js.map +0 -1
- package/lib/internal/private/__notationCapitalize.mjs +0 -6
- package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
- package/lib/internal/private/__notationUnsnake.d.ts +0 -4
- package/lib/internal/private/__notationUnsnake.js +0 -26
- package/lib/internal/private/__notationUnsnake.js.map +0 -1
- package/lib/internal/private/__notationUnsnake.mjs +0 -15
- package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
- package/native/adapter/visit.go +0 -173
- package/native/adapter/visit_property_chain_edges_test.go +0 -129
- package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
- package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
- package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
- package/native/core/programmers/iterate/check_union_array_like.go +0 -422
- package/native/core/programmers/iterate/prune_object_properties.go +0 -105
- package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
- package/native/core/programmers/iterate/stringify_native.go +0 -14
- package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
- package/native/core/schemas/metadata/MetadataApplication.go +0 -41
- package/src/internal/private/__notationCapitalize.ts +0 -2
- package/src/internal/private/__notationUnsnake.ts +0 -24
|
@@ -0,0 +1,674 @@
|
|
|
1
|
+
package iterate
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"reflect"
|
|
5
|
+
"strings"
|
|
6
|
+
|
|
7
|
+
nativefactories "github.com/samchon/typia/packages/typia/native/core/factories"
|
|
8
|
+
)
|
|
9
|
+
|
|
10
|
+
// OpenApiV3Downgrader rewrites an emended (OpenAPI 3.1) schema collection into
|
|
11
|
+
// the OpenAPI 3.0 dialect. `json.schema`, `json.schemas`, and `json.application`
|
|
12
|
+
// all build their document through json_schema_station, which speaks 3.1 only:
|
|
13
|
+
// it emits `const`, `prefixItems`, and a `{"type": "null"}` union member for a
|
|
14
|
+
// nullable type. None of those exist in 3.0, which spells the same three things
|
|
15
|
+
// as `enum`, `items` + `minItems`/`maxItems`, and the `nullable` flag.
|
|
16
|
+
//
|
|
17
|
+
// This is a port of `@typia/utils`' OpenApiV3Downgrader, which the TypeScript
|
|
18
|
+
// implementation of JsonSchemasProgrammer called through
|
|
19
|
+
// `OpenApiConverter.downgradeComponents` / `downgradeSchema` before the Go port
|
|
20
|
+
// replaced it. The Go transform cannot call into TypeScript, so the two are
|
|
21
|
+
// necessarily separate implementations of one contract; the port is kept
|
|
22
|
+
// deliberately literal so the correspondence stays reviewable, and
|
|
23
|
+
// `tests/test-typia-schema/src/features/json.schemas/test_json_schemas_v3_0_parity_converter.ts`
|
|
24
|
+
// pins the two owners against each other on every emitted construct.
|
|
25
|
+
//
|
|
26
|
+
// Only the components-and-schemas surface is ported. The TypeScript owner also
|
|
27
|
+
// downgrades paths, operations, and security schemes, none of which typia emits.
|
|
28
|
+
type OpenApiV3Downgrader_IComponentsCollection struct {
|
|
29
|
+
// Original is the emended 3.1 collection, read to resolve `$ref` targets
|
|
30
|
+
// while deciding nullability. It is never mutated.
|
|
31
|
+
Original *OpenApi_IComponents
|
|
32
|
+
// Downgraded accumulates the 3.0 result, including the `X.Nullable`
|
|
33
|
+
// companion schemas that a nullable reference forces into existence.
|
|
34
|
+
Downgraded *OpenApi_IComponents
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// OpenApiV3Downgrader_downgrade_components downgrades every schema of the
|
|
38
|
+
// collection, preserving the discovery order recorded in Order. A schema is
|
|
39
|
+
// downgraded before its own key is registered, so the `X.Nullable` companions
|
|
40
|
+
// that its references create land ahead of it exactly as the TypeScript owner's
|
|
41
|
+
// argument-evaluation order places them.
|
|
42
|
+
func OpenApiV3Downgrader_downgrade_components(input *OpenApi_IComponents) *OpenApiV3Downgrader_IComponentsCollection {
|
|
43
|
+
collection := &OpenApiV3Downgrader_IComponentsCollection{
|
|
44
|
+
Original: input,
|
|
45
|
+
Downgraded: &OpenApi_IComponents{},
|
|
46
|
+
}
|
|
47
|
+
if input == nil || input.Schemas == nil {
|
|
48
|
+
return collection
|
|
49
|
+
}
|
|
50
|
+
collection.Downgraded.Schemas = map[string]JsonSchema{}
|
|
51
|
+
for _, key := range input.Order {
|
|
52
|
+
value, ok := input.Schemas[key]
|
|
53
|
+
if ok == false {
|
|
54
|
+
continue
|
|
55
|
+
}
|
|
56
|
+
downgraded := OpenApiV3Downgrader_downgrade_schema(collection, value)
|
|
57
|
+
collection.Downgraded.emplaceSchemaKey(key)
|
|
58
|
+
collection.Downgraded.Schemas[key] = downgraded
|
|
59
|
+
}
|
|
60
|
+
return collection
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
// OpenApiV3Downgrader_downgrade_schema rewrites one emended schema into 3.0.
|
|
64
|
+
//
|
|
65
|
+
// The emended dialect expresses a union as `oneOf` and nullability as a
|
|
66
|
+
// `{"type": "null"}` member of it. 3.0 has neither, so the schema is flattened
|
|
67
|
+
// into a union of concrete members, the null member is dropped, and the
|
|
68
|
+
// surviving members carry `nullable: true` instead. Constants collapse into the
|
|
69
|
+
// `enum` of a member of the same primitive type.
|
|
70
|
+
func OpenApiV3Downgrader_downgrade_schema(collection *OpenApiV3Downgrader_IComponentsCollection, input JsonSchema) JsonSchema {
|
|
71
|
+
nullable := openApiV3Downgrader_is_nullable(map[string]bool{}, collection.Original, input)
|
|
72
|
+
union := []JsonSchema{}
|
|
73
|
+
|
|
74
|
+
var discriminator any
|
|
75
|
+
if openApiV3Downgrader_is_one_of(input) {
|
|
76
|
+
if value, ok := input["discriminator"]; ok && openApiV3Downgrader_is_nil(value) == false {
|
|
77
|
+
discriminator = openApiV3Downgrader_clone_value(value)
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
// A nullable union cannot keep its discriminator: 3.0 requires every mapped
|
|
81
|
+
// branch to stay a distinct `oneOf` member, and the null member is gone.
|
|
82
|
+
preserveDiscriminator := discriminator != nil && nullable == false
|
|
83
|
+
|
|
84
|
+
var visit func(schema JsonSchema)
|
|
85
|
+
visit = func(schema JsonSchema) {
|
|
86
|
+
if openApiV3Downgrader_is_boolean(schema) ||
|
|
87
|
+
openApiV3Downgrader_is_integer(schema) ||
|
|
88
|
+
openApiV3Downgrader_is_number(schema) ||
|
|
89
|
+
openApiV3Downgrader_is_string(schema) ||
|
|
90
|
+
openApiV3Downgrader_is_reference(schema) {
|
|
91
|
+
// A boolean carries the same declared keywords through the downgrade as
|
|
92
|
+
// the other primitives do (at minimum `default`, plus every attribute
|
|
93
|
+
// OpenApiV3.IJsonSchema.IBoolean allows); rebuilding it as
|
|
94
|
+
// `{"type": "boolean"}` dropped them. `omit_examples` keeps the legal
|
|
95
|
+
// 3.0 keys and strips only `examples`, which 3.0 does not define.
|
|
96
|
+
union = append(union, openApiV3Downgrader_omit_examples(schema))
|
|
97
|
+
} else if openApiV3Downgrader_is_array(schema) {
|
|
98
|
+
next := openApiV3Downgrader_omit_examples(schema)
|
|
99
|
+
next["items"] = OpenApiV3Downgrader_downgrade_schema(
|
|
100
|
+
collection,
|
|
101
|
+
openApiV3Downgrader_schema(schema["items"]),
|
|
102
|
+
)
|
|
103
|
+
union = append(union, next)
|
|
104
|
+
} else if openApiV3Downgrader_is_tuple(schema) {
|
|
105
|
+
union = append(union, openApiV3Downgrader_downgrade_tuple(collection, schema))
|
|
106
|
+
} else if openApiV3Downgrader_is_object(schema) {
|
|
107
|
+
union = append(union, openApiV3Downgrader_downgrade_object(collection, schema))
|
|
108
|
+
} else if openApiV3Downgrader_is_one_of(schema) {
|
|
109
|
+
tracked := openApiV3Downgrader_same(schema, input) && discriminator != nil
|
|
110
|
+
for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
|
|
111
|
+
previous := len(union)
|
|
112
|
+
visit(branch)
|
|
113
|
+
// A branch that did not contribute exactly one member (a constant,
|
|
114
|
+
// or a nested union) breaks the one-branch-per-mapping rule the
|
|
115
|
+
// discriminator depends on.
|
|
116
|
+
if tracked && len(union) != previous+1 {
|
|
117
|
+
preserveDiscriminator = false
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
|
|
123
|
+
insertConstant := func(value any) {
|
|
124
|
+
typeName := openApiV3Downgrader_typeof(value)
|
|
125
|
+
for _, member := range union {
|
|
126
|
+
if member["type"] == typeName {
|
|
127
|
+
enum, _ := member["enum"].([]any)
|
|
128
|
+
member["enum"] = append(enum, value)
|
|
129
|
+
return
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
union = append(union, JsonSchema{"type": typeName, "enum": []any{value}})
|
|
133
|
+
}
|
|
134
|
+
visitConstant := func(schema JsonSchema) {
|
|
135
|
+
if openApiV3Downgrader_is_constant(schema) {
|
|
136
|
+
insertConstant(schema["const"])
|
|
137
|
+
} else if openApiV3Downgrader_is_one_of(schema) {
|
|
138
|
+
for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
|
|
139
|
+
if openApiV3Downgrader_is_constant(branch) {
|
|
140
|
+
insertConstant(branch["const"])
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
visit(input)
|
|
147
|
+
visitConstant(input)
|
|
148
|
+
|
|
149
|
+
if nullable {
|
|
150
|
+
for _, member := range union {
|
|
151
|
+
// A reference cannot carry `nullable` in 3.0, because the flag would sit
|
|
152
|
+
// beside `$ref` where 3.0 ignores every sibling key. The target is
|
|
153
|
+
// duplicated as an `X.Nullable` companion schema instead.
|
|
154
|
+
if openApiV3Downgrader_is_reference(member) {
|
|
155
|
+
openApiV3Downgrader_downgrade_nullable_reference(map[string]bool{}, collection, member)
|
|
156
|
+
} else {
|
|
157
|
+
member["nullable"] = true
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
if nullable && len(union) == 0 {
|
|
162
|
+
output := JsonSchema{"type": "null"}
|
|
163
|
+
openApiV3Downgrader_apply_attribute(output, input)
|
|
164
|
+
return output
|
|
165
|
+
}
|
|
166
|
+
|
|
167
|
+
output := JsonSchema{}
|
|
168
|
+
if len(union) == 0 {
|
|
169
|
+
output["type"] = nil
|
|
170
|
+
} else if len(union) == 1 {
|
|
171
|
+
for key, value := range union[0] {
|
|
172
|
+
output[key] = value
|
|
173
|
+
}
|
|
174
|
+
} else {
|
|
175
|
+
output["oneOf"] = union
|
|
176
|
+
if preserveDiscriminator && discriminator != nil {
|
|
177
|
+
output["discriminator"] = discriminator
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
openApiV3Downgrader_apply_attribute(output, input)
|
|
181
|
+
return output
|
|
182
|
+
}
|
|
183
|
+
|
|
184
|
+
// openApiV3Downgrader_downgrade_tuple rewrites `prefixItems` into 3.0's single
|
|
185
|
+
// `items` schema. 3.0 cannot type each position, so the positional types
|
|
186
|
+
// collapse into one `oneOf` and the arity is pinned by minItems/maxItems, which
|
|
187
|
+
// is the closest 3.0 gets to a tuple.
|
|
188
|
+
func openApiV3Downgrader_downgrade_tuple(collection *OpenApiV3Downgrader_IComponentsCollection, schema JsonSchema) JsonSchema {
|
|
189
|
+
next := openApiV3Downgrader_omit_examples(schema)
|
|
190
|
+
prefixItems := openApiV3Downgrader_schema_array(schema["prefixItems"])
|
|
191
|
+
additional := schema["additionalItems"]
|
|
192
|
+
|
|
193
|
+
var items JsonSchema
|
|
194
|
+
if flag, ok := additional.(bool); ok && flag {
|
|
195
|
+
// `additionalItems: true` admits anything at any position.
|
|
196
|
+
items = JsonSchema{}
|
|
197
|
+
} else {
|
|
198
|
+
elements := []JsonSchema{}
|
|
199
|
+
elements = append(elements, prefixItems...)
|
|
200
|
+
if rest := openApiV3Downgrader_schema(additional); rest != nil {
|
|
201
|
+
elements = append(elements, OpenApiV3Downgrader_downgrade_schema(collection, rest))
|
|
202
|
+
}
|
|
203
|
+
if len(elements) == 0 {
|
|
204
|
+
items = JsonSchema{}
|
|
205
|
+
} else {
|
|
206
|
+
oneOf := make([]JsonSchema, 0, len(elements))
|
|
207
|
+
for _, element := range elements {
|
|
208
|
+
oneOf = append(oneOf, OpenApiV3Downgrader_downgrade_schema(collection, element))
|
|
209
|
+
}
|
|
210
|
+
items = JsonSchema{"oneOf": oneOf}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
next["items"] = items
|
|
215
|
+
next["minItems"] = len(prefixItems)
|
|
216
|
+
if openApiV3Downgrader_truthy(additional) {
|
|
217
|
+
// A rest element leaves the tuple unbounded above.
|
|
218
|
+
delete(next, "maxItems")
|
|
219
|
+
} else {
|
|
220
|
+
next["maxItems"] = len(prefixItems)
|
|
221
|
+
}
|
|
222
|
+
delete(next, "prefixItems")
|
|
223
|
+
delete(next, "additionalItems")
|
|
224
|
+
return next
|
|
225
|
+
}
|
|
226
|
+
|
|
227
|
+
func openApiV3Downgrader_downgrade_object(collection *OpenApiV3Downgrader_IComponentsCollection, schema JsonSchema) JsonSchema {
|
|
228
|
+
next := openApiV3Downgrader_omit_examples(schema)
|
|
229
|
+
if properties, ok := schema["properties"]; ok && openApiV3Downgrader_is_nil(properties) == false {
|
|
230
|
+
next["properties"] = openApiV3Downgrader_map_properties(properties, func(value JsonSchema) JsonSchema {
|
|
231
|
+
return OpenApiV3Downgrader_downgrade_schema(collection, value)
|
|
232
|
+
})
|
|
233
|
+
} else {
|
|
234
|
+
delete(next, "properties")
|
|
235
|
+
}
|
|
236
|
+
if additional, ok := schema["additionalProperties"]; ok && openApiV3Downgrader_is_nil(additional) == false {
|
|
237
|
+
if nested := openApiV3Downgrader_schema(additional); nested != nil {
|
|
238
|
+
next["additionalProperties"] = OpenApiV3Downgrader_downgrade_schema(collection, nested)
|
|
239
|
+
} else {
|
|
240
|
+
next["additionalProperties"] = additional
|
|
241
|
+
}
|
|
242
|
+
} else {
|
|
243
|
+
delete(next, "additionalProperties")
|
|
244
|
+
}
|
|
245
|
+
return next
|
|
246
|
+
}
|
|
247
|
+
|
|
248
|
+
// openApiV3Downgrader_downgrade_nullable_reference redirects a nullable `$ref`
|
|
249
|
+
// at an `X.Nullable` companion schema, creating it on first demand.
|
|
250
|
+
//
|
|
251
|
+
// The companion is registered as an empty placeholder before it is built, so a
|
|
252
|
+
// self-referential type resolves against the in-progress entry instead of
|
|
253
|
+
// recursing forever.
|
|
254
|
+
func openApiV3Downgrader_downgrade_nullable_reference(
|
|
255
|
+
visited map[string]bool,
|
|
256
|
+
collection *OpenApiV3Downgrader_IComponentsCollection,
|
|
257
|
+
schema JsonSchema,
|
|
258
|
+
) {
|
|
259
|
+
ref, ok := schema["$ref"].(string)
|
|
260
|
+
if ok == false {
|
|
261
|
+
return
|
|
262
|
+
}
|
|
263
|
+
key := openApiV3Downgrader_ref_key(ref)
|
|
264
|
+
if strings.HasSuffix(key, ".Nullable") {
|
|
265
|
+
return
|
|
266
|
+
}
|
|
267
|
+
var found JsonSchema
|
|
268
|
+
if collection.Original != nil && collection.Original.Schemas != nil {
|
|
269
|
+
found = collection.Original.Schemas[key]
|
|
270
|
+
}
|
|
271
|
+
if found == nil {
|
|
272
|
+
return
|
|
273
|
+
}
|
|
274
|
+
// The target already admits null on its own; the plain reference is enough.
|
|
275
|
+
if openApiV3Downgrader_is_nullable(visited, collection.Original, found) {
|
|
276
|
+
return
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
nullableKey := key + ".Nullable"
|
|
280
|
+
if collection.Downgraded.Schemas == nil || collection.Downgraded.Schemas[nullableKey] == nil {
|
|
281
|
+
collection.Downgraded.emplaceSchemaKey(nullableKey)
|
|
282
|
+
collection.Downgraded.Schemas[nullableKey] = JsonSchema{}
|
|
283
|
+
|
|
284
|
+
var target JsonSchema
|
|
285
|
+
if openApiV3Downgrader_is_one_of(found) {
|
|
286
|
+
target = openApiV3Downgrader_shallow_clone(found)
|
|
287
|
+
branches := openApiV3Downgrader_schema_array(found["oneOf"])
|
|
288
|
+
appended := make([]JsonSchema, 0, len(branches)+1)
|
|
289
|
+
appended = append(appended, branches...)
|
|
290
|
+
appended = append(appended, JsonSchema{"type": "null"})
|
|
291
|
+
target["oneOf"] = appended
|
|
292
|
+
} else {
|
|
293
|
+
target = JsonSchema{
|
|
294
|
+
"oneOf": []JsonSchema{found, {"type": "null"}},
|
|
295
|
+
}
|
|
296
|
+
for _, attribute := range []string{"title", "description", "example", "examples"} {
|
|
297
|
+
if value, ok := found[attribute]; ok && openApiV3Downgrader_is_nil(value) == false {
|
|
298
|
+
target[attribute] = value
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
for attribute, value := range found {
|
|
302
|
+
if strings.HasPrefix(attribute, "x-") && openApiV3Downgrader_is_nil(value) == false {
|
|
303
|
+
target[attribute] = value
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
}
|
|
307
|
+
collection.Downgraded.Schemas[nullableKey] = OpenApiV3Downgrader_downgrade_schema(collection, target)
|
|
308
|
+
}
|
|
309
|
+
schema["$ref"] = ref + ".Nullable"
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
// openApiV3Downgrader_apply_attribute copies the dialect-independent annotations
|
|
313
|
+
// from the source schema onto the rewritten one. An annotation absent from the
|
|
314
|
+
// source is deleted rather than left behind, because the rewritten schema may
|
|
315
|
+
// have inherited one from a single flattened union member that the source itself
|
|
316
|
+
// does not carry.
|
|
317
|
+
func openApiV3Downgrader_apply_attribute(output JsonSchema, input JsonSchema) {
|
|
318
|
+
for _, key := range []string{
|
|
319
|
+
"title",
|
|
320
|
+
"description",
|
|
321
|
+
"deprecated",
|
|
322
|
+
"readOnly",
|
|
323
|
+
"writeOnly",
|
|
324
|
+
"example",
|
|
325
|
+
} {
|
|
326
|
+
if value, ok := input[key]; ok && openApiV3Downgrader_is_nil(value) == false {
|
|
327
|
+
output[key] = value
|
|
328
|
+
} else {
|
|
329
|
+
delete(output, key)
|
|
330
|
+
}
|
|
331
|
+
}
|
|
332
|
+
for key, value := range input {
|
|
333
|
+
if strings.HasPrefix(key, "x-") && openApiV3Downgrader_is_nil(value) == false {
|
|
334
|
+
output[key] = value
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
}
|
|
338
|
+
|
|
339
|
+
// openApiV3Downgrader_is_nullable reports whether the schema admits null,
|
|
340
|
+
// following `$ref` targets through the emended components. The visited set stops
|
|
341
|
+
// a recursive type from looping.
|
|
342
|
+
func openApiV3Downgrader_is_nullable(visited map[string]bool, components *OpenApi_IComponents, schema JsonSchema) bool {
|
|
343
|
+
if openApiV3Downgrader_is_null(schema) {
|
|
344
|
+
return true
|
|
345
|
+
}
|
|
346
|
+
if openApiV3Downgrader_is_reference(schema) {
|
|
347
|
+
ref, ok := schema["$ref"].(string)
|
|
348
|
+
if ok == false {
|
|
349
|
+
return false
|
|
350
|
+
}
|
|
351
|
+
if visited[ref] {
|
|
352
|
+
return false
|
|
353
|
+
}
|
|
354
|
+
visited[ref] = true
|
|
355
|
+
if components == nil || components.Schemas == nil {
|
|
356
|
+
return false
|
|
357
|
+
}
|
|
358
|
+
next, ok := components.Schemas[openApiV3Downgrader_ref_key(ref)]
|
|
359
|
+
if ok == false {
|
|
360
|
+
return false
|
|
361
|
+
}
|
|
362
|
+
return openApiV3Downgrader_is_nullable(visited, components, next)
|
|
363
|
+
}
|
|
364
|
+
if openApiV3Downgrader_is_one_of(schema) {
|
|
365
|
+
for _, branch := range openApiV3Downgrader_schema_array(schema["oneOf"]) {
|
|
366
|
+
if openApiV3Downgrader_is_nullable(visited, components, branch) {
|
|
367
|
+
return true
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return false
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
/* -----------------------------------------------------------
|
|
375
|
+
TYPE CHECKERS
|
|
376
|
+
----------------------------------------------------------- */
|
|
377
|
+
|
|
378
|
+
func openApiV3Downgrader_is_null(schema JsonSchema) bool {
|
|
379
|
+
return schema != nil && schema["type"] == "null"
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
func openApiV3Downgrader_is_constant(schema JsonSchema) bool {
|
|
383
|
+
if schema == nil {
|
|
384
|
+
return false
|
|
385
|
+
}
|
|
386
|
+
value, ok := schema["const"]
|
|
387
|
+
return ok && openApiV3Downgrader_is_nil(value) == false
|
|
388
|
+
}
|
|
389
|
+
|
|
390
|
+
func openApiV3Downgrader_is_boolean(schema JsonSchema) bool {
|
|
391
|
+
return schema != nil && schema["type"] == "boolean"
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
func openApiV3Downgrader_is_integer(schema JsonSchema) bool {
|
|
395
|
+
return schema != nil && schema["type"] == "integer"
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
func openApiV3Downgrader_is_number(schema JsonSchema) bool {
|
|
399
|
+
return schema != nil && schema["type"] == "number"
|
|
400
|
+
}
|
|
401
|
+
|
|
402
|
+
func openApiV3Downgrader_is_string(schema JsonSchema) bool {
|
|
403
|
+
return schema != nil && schema["type"] == "string"
|
|
404
|
+
}
|
|
405
|
+
|
|
406
|
+
func openApiV3Downgrader_is_array(schema JsonSchema) bool {
|
|
407
|
+
if schema == nil || schema["type"] != "array" {
|
|
408
|
+
return false
|
|
409
|
+
}
|
|
410
|
+
value, ok := schema["items"]
|
|
411
|
+
return ok && openApiV3Downgrader_is_nil(value) == false
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
func openApiV3Downgrader_is_tuple(schema JsonSchema) bool {
|
|
415
|
+
if schema == nil || schema["type"] != "array" {
|
|
416
|
+
return false
|
|
417
|
+
}
|
|
418
|
+
value, ok := schema["prefixItems"]
|
|
419
|
+
return ok && openApiV3Downgrader_is_nil(value) == false
|
|
420
|
+
}
|
|
421
|
+
|
|
422
|
+
func openApiV3Downgrader_is_object(schema JsonSchema) bool {
|
|
423
|
+
return schema != nil && schema["type"] == "object"
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
func openApiV3Downgrader_is_reference(schema JsonSchema) bool {
|
|
427
|
+
if schema == nil {
|
|
428
|
+
return false
|
|
429
|
+
}
|
|
430
|
+
value, ok := schema["$ref"]
|
|
431
|
+
return ok && openApiV3Downgrader_is_nil(value) == false
|
|
432
|
+
}
|
|
433
|
+
|
|
434
|
+
func openApiV3Downgrader_is_one_of(schema JsonSchema) bool {
|
|
435
|
+
if schema == nil {
|
|
436
|
+
return false
|
|
437
|
+
}
|
|
438
|
+
value, ok := schema["oneOf"]
|
|
439
|
+
return ok && openApiV3Downgrader_is_nil(value) == false
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
/* -----------------------------------------------------------
|
|
443
|
+
UTILITIES
|
|
444
|
+
----------------------------------------------------------- */
|
|
445
|
+
|
|
446
|
+
// openApiV3Downgrader_omit_examples shallow-copies the schema without
|
|
447
|
+
// `examples`, which 3.0 does not define. The copy is what keeps the rewritten
|
|
448
|
+
// members from mutating the emended input.
|
|
449
|
+
func openApiV3Downgrader_omit_examples(schema JsonSchema) JsonSchema {
|
|
450
|
+
output := JsonSchema{}
|
|
451
|
+
for key, value := range schema {
|
|
452
|
+
if key == "examples" {
|
|
453
|
+
continue
|
|
454
|
+
}
|
|
455
|
+
output[key] = value
|
|
456
|
+
}
|
|
457
|
+
return openApiV3Downgrader_exclusive_bounds(output)
|
|
458
|
+
}
|
|
459
|
+
|
|
460
|
+
// openApiV3Downgrader_exclusive_bounds rewrites an exclusive numeric bound into
|
|
461
|
+
// the form the 3.0 dialect defines.
|
|
462
|
+
//
|
|
463
|
+
// 3.0's Schema Object descends from JSON Schema draft-04, where
|
|
464
|
+
// `exclusiveMinimum` and `exclusiveMaximum` are booleans qualifying `minimum`
|
|
465
|
+
// and `maximum`; the numeric spelling belongs to 3.1. Carrying the number
|
|
466
|
+
// through left a document that declares itself 3.0 with a 3.1 keyword, and a
|
|
467
|
+
// 3.0 reader taking the value as the boolean its dialect declares finds no
|
|
468
|
+
// `minimum` beside it and drops the bound entirely (#2300).
|
|
469
|
+
//
|
|
470
|
+
// The upgrader already performs the inverse — a boolean `exclusiveMinimum: true`
|
|
471
|
+
// becomes the numeric bound and the redundant `minimum` is dropped — so this
|
|
472
|
+
// makes the pair a round trip.
|
|
473
|
+
func openApiV3Downgrader_exclusive_bounds(schema JsonSchema) JsonSchema {
|
|
474
|
+
for _, pair := range [][2]string{
|
|
475
|
+
{"exclusiveMinimum", "minimum"},
|
|
476
|
+
{"exclusiveMaximum", "maximum"},
|
|
477
|
+
} {
|
|
478
|
+
value, ok := schema[pair[0]]
|
|
479
|
+
if ok == false {
|
|
480
|
+
continue
|
|
481
|
+
}
|
|
482
|
+
if _, boolean := value.(bool); boolean {
|
|
483
|
+
continue
|
|
484
|
+
}
|
|
485
|
+
if openApiV3Downgrader_is_nil(value) == false {
|
|
486
|
+
schema[pair[1]] = value
|
|
487
|
+
schema[pair[0]] = true
|
|
488
|
+
}
|
|
489
|
+
}
|
|
490
|
+
return schema
|
|
491
|
+
}
|
|
492
|
+
|
|
493
|
+
// openApiV3Downgrader_shallow_clone copies a schema's own keys, leaving nested
|
|
494
|
+
// values shared. It stands in for the object spread the TypeScript owner uses
|
|
495
|
+
// when it rebuilds a union with an extra null member.
|
|
496
|
+
func openApiV3Downgrader_shallow_clone(schema JsonSchema) JsonSchema {
|
|
497
|
+
output := JsonSchema{}
|
|
498
|
+
for key, value := range schema {
|
|
499
|
+
output[key] = value
|
|
500
|
+
}
|
|
501
|
+
return output
|
|
502
|
+
}
|
|
503
|
+
|
|
504
|
+
// openApiV3Downgrader_map_properties rewrites each property schema while keeping
|
|
505
|
+
// the emitted key order. Object properties are carried as an ordered literal
|
|
506
|
+
// rather than a Go map precisely because their order is observable in the
|
|
507
|
+
// emitted output.
|
|
508
|
+
func openApiV3Downgrader_map_properties(value any, mapper func(JsonSchema) JsonSchema) any {
|
|
509
|
+
if ordered, ok := value.(nativefactories.LiteralFactory_OrderedObject); ok {
|
|
510
|
+
values := make(map[string]any, len(ordered.Values))
|
|
511
|
+
keys := make([]string, 0, len(ordered.Keys))
|
|
512
|
+
for _, key := range ordered.Keys {
|
|
513
|
+
entry, ok := ordered.Values[key]
|
|
514
|
+
if ok == false || openApiV3Downgrader_is_nil(entry) {
|
|
515
|
+
continue
|
|
516
|
+
}
|
|
517
|
+
if schema := openApiV3Downgrader_schema(entry); schema != nil {
|
|
518
|
+
values[key] = mapper(schema)
|
|
519
|
+
} else {
|
|
520
|
+
values[key] = entry
|
|
521
|
+
}
|
|
522
|
+
keys = append(keys, key)
|
|
523
|
+
}
|
|
524
|
+
return nativefactories.LiteralFactory_OrderedObject{Keys: keys, Values: values}
|
|
525
|
+
}
|
|
526
|
+
if plain, ok := value.(map[string]any); ok {
|
|
527
|
+
output := map[string]any{}
|
|
528
|
+
for key, entry := range plain {
|
|
529
|
+
if openApiV3Downgrader_is_nil(entry) {
|
|
530
|
+
continue
|
|
531
|
+
}
|
|
532
|
+
if schema := openApiV3Downgrader_schema(entry); schema != nil {
|
|
533
|
+
output[key] = mapper(schema)
|
|
534
|
+
} else {
|
|
535
|
+
output[key] = entry
|
|
536
|
+
}
|
|
537
|
+
}
|
|
538
|
+
return output
|
|
539
|
+
}
|
|
540
|
+
return value
|
|
541
|
+
}
|
|
542
|
+
|
|
543
|
+
// openApiV3Downgrader_schema coerces a schema-valued map to JsonSchema, whether
|
|
544
|
+
// it arrived already named or as a bare map. It returns nil for anything that is
|
|
545
|
+
// not a schema, which is how the tuple and additionalProperties paths tell an
|
|
546
|
+
// object apart from a boolean flag.
|
|
547
|
+
func openApiV3Downgrader_schema(value any) JsonSchema {
|
|
548
|
+
switch typed := value.(type) {
|
|
549
|
+
case JsonSchema:
|
|
550
|
+
return typed
|
|
551
|
+
case map[string]any:
|
|
552
|
+
return JsonSchema(typed)
|
|
553
|
+
}
|
|
554
|
+
return nil
|
|
555
|
+
}
|
|
556
|
+
|
|
557
|
+
func openApiV3Downgrader_schema_array(value any) []JsonSchema {
|
|
558
|
+
switch typed := value.(type) {
|
|
559
|
+
case []JsonSchema:
|
|
560
|
+
return typed
|
|
561
|
+
case []any:
|
|
562
|
+
output := make([]JsonSchema, 0, len(typed))
|
|
563
|
+
for _, element := range typed {
|
|
564
|
+
if schema := openApiV3Downgrader_schema(element); schema != nil {
|
|
565
|
+
output = append(output, schema)
|
|
566
|
+
}
|
|
567
|
+
}
|
|
568
|
+
return output
|
|
569
|
+
}
|
|
570
|
+
return nil
|
|
571
|
+
}
|
|
572
|
+
|
|
573
|
+
// openApiV3Downgrader_typeof names the 3.0 primitive type of a constant value,
|
|
574
|
+
// mirroring the JavaScript `typeof` the TypeScript owner keys its enum merge on.
|
|
575
|
+
//
|
|
576
|
+
// A numeric literal arrives as the compiler's `jsnum.Number` (defined `type
|
|
577
|
+
// Number float64`), a named type an explicit `case float64` does not match, so
|
|
578
|
+
// numbers are classified by reflected kind rather than by concrete type. Getting
|
|
579
|
+
// this wrong labels a numeric literal `object`, which then fails to merge with a
|
|
580
|
+
// sibling number member and mislabels the union branch.
|
|
581
|
+
func openApiV3Downgrader_typeof(value any) string {
|
|
582
|
+
switch value.(type) {
|
|
583
|
+
case string:
|
|
584
|
+
return "string"
|
|
585
|
+
case bool:
|
|
586
|
+
return "boolean"
|
|
587
|
+
}
|
|
588
|
+
if value != nil {
|
|
589
|
+
switch reflect.ValueOf(value).Kind() {
|
|
590
|
+
case reflect.Int, reflect.Int8, reflect.Int16, reflect.Int32, reflect.Int64,
|
|
591
|
+
reflect.Uint, reflect.Uint8, reflect.Uint16, reflect.Uint32, reflect.Uint64,
|
|
592
|
+
reflect.Float32, reflect.Float64:
|
|
593
|
+
return "number"
|
|
594
|
+
}
|
|
595
|
+
}
|
|
596
|
+
return "object"
|
|
597
|
+
}
|
|
598
|
+
|
|
599
|
+
// openApiV3Downgrader_truthy mirrors the JavaScript truthiness the tuple path
|
|
600
|
+
// tests `additionalItems` for: an absent or `false` rest closes the tuple, while
|
|
601
|
+
// `true` or a schema leaves it open.
|
|
602
|
+
func openApiV3Downgrader_truthy(value any) bool {
|
|
603
|
+
if openApiV3Downgrader_is_nil(value) {
|
|
604
|
+
return false
|
|
605
|
+
}
|
|
606
|
+
if flag, ok := value.(bool); ok {
|
|
607
|
+
return flag
|
|
608
|
+
}
|
|
609
|
+
return true
|
|
610
|
+
}
|
|
611
|
+
|
|
612
|
+
// openApiV3Downgrader_is_nil treats a typed nil pointer, map, or slice as absent,
|
|
613
|
+
// matching how LiteralFactory decides a value is not emitted. A plain `value ==
|
|
614
|
+
// nil` misses a nil *string held in an interface, which is what the schema
|
|
615
|
+
// builders store for an absent title or description.
|
|
616
|
+
func openApiV3Downgrader_is_nil(value any) bool {
|
|
617
|
+
if value == nil {
|
|
618
|
+
return true
|
|
619
|
+
}
|
|
620
|
+
reflected := reflect.ValueOf(value)
|
|
621
|
+
switch reflected.Kind() {
|
|
622
|
+
case reflect.Chan, reflect.Func, reflect.Interface, reflect.Map, reflect.Pointer, reflect.Slice:
|
|
623
|
+
return reflected.IsNil()
|
|
624
|
+
default:
|
|
625
|
+
return false
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
|
|
629
|
+
// openApiV3Downgrader_same reports whether two schemas are the same underlying
|
|
630
|
+
// map, standing in for the identity comparison the TypeScript owner uses to tell
|
|
631
|
+
// the root union apart from a nested one.
|
|
632
|
+
func openApiV3Downgrader_same(x JsonSchema, y JsonSchema) bool {
|
|
633
|
+
if x == nil || y == nil {
|
|
634
|
+
return false
|
|
635
|
+
}
|
|
636
|
+
return reflect.ValueOf(x).Pointer() == reflect.ValueOf(y).Pointer()
|
|
637
|
+
}
|
|
638
|
+
|
|
639
|
+
func openApiV3Downgrader_ref_key(ref string) string {
|
|
640
|
+
if index := strings.LastIndex(ref, "/"); index != -1 {
|
|
641
|
+
return ref[index+1:]
|
|
642
|
+
}
|
|
643
|
+
return ref
|
|
644
|
+
}
|
|
645
|
+
|
|
646
|
+
func openApiV3Downgrader_clone_value(value any) any {
|
|
647
|
+
switch typed := value.(type) {
|
|
648
|
+
case JsonSchema:
|
|
649
|
+
output := JsonSchema{}
|
|
650
|
+
for key, entry := range typed {
|
|
651
|
+
output[key] = openApiV3Downgrader_clone_value(entry)
|
|
652
|
+
}
|
|
653
|
+
return output
|
|
654
|
+
case map[string]any:
|
|
655
|
+
output := map[string]any{}
|
|
656
|
+
for key, entry := range typed {
|
|
657
|
+
output[key] = openApiV3Downgrader_clone_value(entry)
|
|
658
|
+
}
|
|
659
|
+
return output
|
|
660
|
+
case []JsonSchema:
|
|
661
|
+
output := make([]JsonSchema, 0, len(typed))
|
|
662
|
+
for _, entry := range typed {
|
|
663
|
+
output = append(output, openApiV3Downgrader_schema(openApiV3Downgrader_clone_value(entry)))
|
|
664
|
+
}
|
|
665
|
+
return output
|
|
666
|
+
case []any:
|
|
667
|
+
output := make([]any, 0, len(typed))
|
|
668
|
+
for _, entry := range typed {
|
|
669
|
+
output = append(output, openApiV3Downgrader_clone_value(entry))
|
|
670
|
+
}
|
|
671
|
+
return output
|
|
672
|
+
}
|
|
673
|
+
return value
|
|
674
|
+
}
|