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
|
@@ -67,24 +67,61 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
|
|
|
67
67
|
// plain.classify cannot soundly field-copy (Object.create + assign) a class
|
|
68
68
|
// that has them — and the PROTOTYPE CHAIN matters: a field-copied subclass
|
|
69
69
|
// of a #private-bearing base would equally throw "Cannot read private
|
|
70
|
-
// member".
|
|
71
|
-
//
|
|
72
|
-
//
|
|
70
|
+
// member". A `#private` member DOES surface in ApparentProperties (as a
|
|
71
|
+
// mangled key), so the member filter below must drop it from the validated
|
|
72
|
+
// shape; here it is detected on the class declaration(s) — where its
|
|
73
|
+
// KindPrivateIdentifier name is unambiguous and statics are skippable —
|
|
74
|
+
// walking the `extends` chain. Additive flag, read only by the classify
|
|
75
|
+
// programmer.
|
|
73
76
|
if emplace_metadata_object_private_fields(props.Checker, props.Type, map[*nativechecker.Type]bool{}) {
|
|
74
77
|
obj.PrivateFields = true
|
|
75
78
|
}
|
|
76
79
|
}
|
|
77
80
|
}
|
|
78
81
|
|
|
82
|
+
// Report the `extends` / `implements` chain to the dependency listener. The
|
|
83
|
+
// apparent-property walk below already registers the declaring file of every
|
|
84
|
+
// inherited member, but a base that currently contributes no property (an
|
|
85
|
+
// empty interface or class) would otherwise stay invisible — and gaining its
|
|
86
|
+
// first property is exactly the change that must invalidate the consumer.
|
|
87
|
+
if props.Type != nil && schemametadata.MetadataDependency_active(props.Checker) {
|
|
88
|
+
emplace_metadata_object_touch_heritage(props.Checker, props.Type.Symbol(), map[*nativeast.Symbol]bool{})
|
|
89
|
+
}
|
|
90
|
+
|
|
79
91
|
isClass := props.Type != nil && props.Type.IsClass()
|
|
80
92
|
isProperty := emplace_metadata_object_significant(props.Options.Functional, props.Options.Methods)
|
|
81
|
-
pred := func(node *nativeast.Node) bool {
|
|
93
|
+
pred := func(symbol *nativeast.Symbol, node *nativeast.Node) bool {
|
|
94
|
+
// A `symbol`-keyed member (`[uniqueSymbol]: T`, `[Symbol.toStringTag]: T`,
|
|
95
|
+
// ...) is not a string / number key: it is unreachable through the string
|
|
96
|
+
// index access typia emits, `JSON.stringify` ignores it, and JSON Schema has
|
|
97
|
+
// no representation for it. So it is not part of the structural,
|
|
98
|
+
// externally-observable shape — exclude it exactly as a `private`/`protected`
|
|
99
|
+
// keyword member and an ES `#private` one. The checker escapes such a member
|
|
100
|
+
// name with the 0xFE `InternalSymbolNamePrefix`, and ApparentProperties
|
|
101
|
+
// otherwise surfaces it under that mangled name, which no runtime object
|
|
102
|
+
// carries: every real value would fail its own guard, and the emitted schema
|
|
103
|
+
// would declare an uninhabitable required property (#2226). Checked on the
|
|
104
|
+
// SYMBOL rather than a declaration node so a late-bound member with no
|
|
105
|
+
// reachable declaration is excluded too.
|
|
106
|
+
if symbol != nil && iterate_metadata_intersection_is_symbol_name(symbol.Name) {
|
|
107
|
+
return false
|
|
108
|
+
}
|
|
82
109
|
if node == nil {
|
|
83
110
|
return true
|
|
84
111
|
}
|
|
85
112
|
if isClass && node.ModifierFlags()&(nativeast.ModifierFlagsPrivate|nativeast.ModifierFlagsProtected) != 0 {
|
|
86
113
|
return false
|
|
87
114
|
}
|
|
115
|
+
// An ES `#private` member (field, method, or accessor) carries no
|
|
116
|
+
// Private/Protected modifier — its identity is a KindPrivateIdentifier name.
|
|
117
|
+
// It is installed only by the constructor and is unreachable via index
|
|
118
|
+
// access, so it is not part of the structural shape; exclude it exactly as a
|
|
119
|
+
// `private`/`protected` keyword member (see ClassNonPublic). ApparentProperties
|
|
120
|
+
// otherwise surfaces it as a mangled key that no runtime object carries, so
|
|
121
|
+
// every real instance would fail its own guard (#2213).
|
|
122
|
+
if isClass && node.Name() != nil && node.Name().Kind == nativeast.KindPrivateIdentifier {
|
|
123
|
+
return false
|
|
124
|
+
}
|
|
88
125
|
return isProperty(node)
|
|
89
126
|
}
|
|
90
127
|
|
|
@@ -111,7 +148,7 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
|
|
|
111
148
|
} else {
|
|
112
149
|
typ = nativechecker.Checker_getTypeOfPropertyOfType(props.Checker, props.Type, symbol.Name)
|
|
113
150
|
}
|
|
114
|
-
if (
|
|
151
|
+
if pred(symbol, node) == false || typ == nil {
|
|
115
152
|
continue
|
|
116
153
|
}
|
|
117
154
|
|
|
@@ -145,6 +182,14 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
|
|
|
145
182
|
}
|
|
146
183
|
|
|
147
184
|
for _, index := range props.Components.IndexInfos(props.Checker, props.Type) {
|
|
185
|
+
// IndexInfo keeps union domains separate, but a branded symbol key remains
|
|
186
|
+
// an intersection. Only string/number domains can describe properties seen
|
|
187
|
+
// through Object.keys or JSON Schema additionalProperties; walk nested
|
|
188
|
+
// intersections so every symbol-only form stays outside typia's structural
|
|
189
|
+
// JSON shape, just like an explicit symbol-keyed member (#2240).
|
|
190
|
+
if emplace_metadata_object_is_symbol_index_key(index.KeyType()) {
|
|
191
|
+
continue
|
|
192
|
+
}
|
|
148
193
|
analyzer := func(typ *nativechecker.Type) func(any) *schemametadata.MetadataSchema {
|
|
149
194
|
return func(property any) *schemametadata.MetadataSchema {
|
|
150
195
|
explore := MetadataFactory_IExplore{
|
|
@@ -197,6 +242,77 @@ func Emplace_metadata_object(props IMetadataIteratorProps) *schemametadata.Metad
|
|
|
197
242
|
return obj
|
|
198
243
|
}
|
|
199
244
|
|
|
245
|
+
// emplace_metadata_object_touch_heritage reports every `extends` / `implements`
|
|
246
|
+
// heritage target of `symbol`'s class / interface declarations to the
|
|
247
|
+
// dependency listener, following the chain recursively so intermediate empty
|
|
248
|
+
// bases register too. Import aliases resolve to their final target symbol,
|
|
249
|
+
// whose declarations carry the real declaring files. Walking runs only while a
|
|
250
|
+
// listener is active (see the call site), so ordinary analysis pays nothing.
|
|
251
|
+
func emplace_metadata_object_touch_heritage(
|
|
252
|
+
checker *nativechecker.Checker,
|
|
253
|
+
symbol *nativeast.Symbol,
|
|
254
|
+
visited map[*nativeast.Symbol]bool,
|
|
255
|
+
) {
|
|
256
|
+
if checker == nil || symbol == nil || visited[symbol] {
|
|
257
|
+
return
|
|
258
|
+
}
|
|
259
|
+
visited[symbol] = true
|
|
260
|
+
for _, decl := range symbol.Declarations {
|
|
261
|
+
if decl == nil {
|
|
262
|
+
continue
|
|
263
|
+
}
|
|
264
|
+
var clauses *nativeast.NodeList
|
|
265
|
+
switch decl.Kind {
|
|
266
|
+
case nativeast.KindClassDeclaration:
|
|
267
|
+
if cd := decl.AsClassDeclaration(); cd != nil {
|
|
268
|
+
clauses = cd.HeritageClauses
|
|
269
|
+
}
|
|
270
|
+
case nativeast.KindClassExpression:
|
|
271
|
+
if ce := decl.AsClassExpression(); ce != nil {
|
|
272
|
+
clauses = ce.HeritageClauses
|
|
273
|
+
}
|
|
274
|
+
case nativeast.KindInterfaceDeclaration:
|
|
275
|
+
if id := decl.AsInterfaceDeclaration(); id != nil {
|
|
276
|
+
clauses = id.HeritageClauses
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if clauses == nil {
|
|
280
|
+
continue
|
|
281
|
+
}
|
|
282
|
+
for _, clause := range clauses.Nodes {
|
|
283
|
+
if clause == nil || clause.Kind != nativeast.KindHeritageClause {
|
|
284
|
+
continue
|
|
285
|
+
}
|
|
286
|
+
hc := clause.AsHeritageClause()
|
|
287
|
+
if hc == nil || hc.Types == nil {
|
|
288
|
+
continue
|
|
289
|
+
}
|
|
290
|
+
for _, element := range hc.Types.Nodes {
|
|
291
|
+
if element == nil {
|
|
292
|
+
continue
|
|
293
|
+
}
|
|
294
|
+
// The node walk reports the heritage expression's symbol and every
|
|
295
|
+
// reference written in its type arguments (e.g. `extends Base<Id>`).
|
|
296
|
+
schemametadata.MetadataDependency_touchTypeNode(checker, element)
|
|
297
|
+
expr := element.AsExpressionWithTypeArguments()
|
|
298
|
+
if expr == nil || expr.Expression == nil {
|
|
299
|
+
continue
|
|
300
|
+
}
|
|
301
|
+
target := checker.GetSymbolAtLocation(expr.Expression)
|
|
302
|
+
if target == nil {
|
|
303
|
+
continue
|
|
304
|
+
}
|
|
305
|
+
if target.Flags&nativeast.SymbolFlagsAlias != 0 {
|
|
306
|
+
if resolved := nativechecker.Checker_getAliasedSymbol(checker, target); resolved != nil {
|
|
307
|
+
target = resolved
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
emplace_metadata_object_touch_heritage(checker, target, visited)
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
|
|
200
316
|
// emplace_metadata_object_private_fields reports whether `typ` or any class in
|
|
201
317
|
// its `extends` chain declares an INSTANCE ES #private member — which field-copy
|
|
202
318
|
// (Object.create + assign) cannot reconstruct, so plain.classify must reject it.
|
|
@@ -350,7 +466,7 @@ func emplace_metadata_object_intersection(
|
|
|
350
466
|
props IMetadataIteratorProps,
|
|
351
467
|
obj *schemametadata.MetadataObjectType,
|
|
352
468
|
insert func(emplace_metadata_object_insert) *schemametadata.MetadataProperty,
|
|
353
|
-
pred func(node *nativeast.Node) bool,
|
|
469
|
+
pred func(symbol *nativeast.Symbol, node *nativeast.Node) bool,
|
|
354
470
|
) bool {
|
|
355
471
|
if props.Checker == nil ||
|
|
356
472
|
props.Type == nil ||
|
|
@@ -424,7 +540,7 @@ func emplace_metadata_object_intersection_append(
|
|
|
424
540
|
props IMetadataIteratorProps,
|
|
425
541
|
child *nativechecker.Type,
|
|
426
542
|
insert func(emplace_metadata_object_insert) *schemametadata.MetadataProperty,
|
|
427
|
-
pred func(node *nativeast.Node) bool,
|
|
543
|
+
pred func(symbol *nativeast.Symbol, node *nativeast.Node) bool,
|
|
428
544
|
) bool {
|
|
429
545
|
if props.Checker == nil || child == nil || len(props.Components.IndexInfos(props.Checker, child)) != 0 {
|
|
430
546
|
return false
|
|
@@ -443,7 +559,7 @@ func emplace_metadata_object_intersection_append(
|
|
|
443
559
|
} else {
|
|
444
560
|
typ = nativechecker.Checker_getTypeOfPropertyOfType(props.Checker, child, symbol.Name)
|
|
445
561
|
}
|
|
446
|
-
if (
|
|
562
|
+
if pred(symbol, node) == false || typ == nil {
|
|
447
563
|
continue
|
|
448
564
|
}
|
|
449
565
|
|
|
@@ -573,6 +689,23 @@ func emplace_metadata_object_valid_dynamic_key(key *schemametadata.MetadataSchem
|
|
|
573
689
|
return total == key.Size()
|
|
574
690
|
}
|
|
575
691
|
|
|
692
|
+
func emplace_metadata_object_is_symbol_index_key(key *nativechecker.Type) bool {
|
|
693
|
+
if key == nil {
|
|
694
|
+
return false
|
|
695
|
+
}
|
|
696
|
+
if key.Flags()&nativechecker.TypeFlagsESSymbolLike != 0 {
|
|
697
|
+
return true
|
|
698
|
+
}
|
|
699
|
+
if key.IsIntersection() {
|
|
700
|
+
for _, child := range key.Types() {
|
|
701
|
+
if emplace_metadata_object_is_symbol_index_key(child) {
|
|
702
|
+
return true
|
|
703
|
+
}
|
|
704
|
+
}
|
|
705
|
+
}
|
|
706
|
+
return false
|
|
707
|
+
}
|
|
708
|
+
|
|
576
709
|
func iterate_optional_coalesce(props struct {
|
|
577
710
|
Metadata *schemametadata.MetadataSchema
|
|
578
711
|
Type *nativechecker.Type
|
|
@@ -9,6 +9,12 @@ func Iterate_metadata(props IMetadataIteratorProps) {
|
|
|
9
9
|
if props.Type == nil {
|
|
10
10
|
return
|
|
11
11
|
}
|
|
12
|
+
// Every type the analysis reads funnels through here (top types, union and
|
|
13
|
+
// intersection members, alias targets, array / tuple elements, generic
|
|
14
|
+
// arguments, property types), so this single touch reports the declaration
|
|
15
|
+
// files of the whole consulted type graph to the dependency listener the
|
|
16
|
+
// project transform host registers (see schemas/metadata/MetadataDependency).
|
|
17
|
+
schemametadata.MetadataDependency_touchType(props.Checker, props.Type)
|
|
12
18
|
if props.Type.IsTypeParameter() == true {
|
|
13
19
|
if props.Errors != nil {
|
|
14
20
|
*props.Errors = append(*props.Errors, MetadataFactory_IError{
|
|
@@ -3,10 +3,11 @@ package metadata
|
|
|
3
3
|
import (
|
|
4
4
|
nativechecker "github.com/microsoft/typescript-go/shim/checker"
|
|
5
5
|
schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
|
|
6
|
+
nativeutils "github.com/samchon/typia/packages/typia/native/core/utils"
|
|
6
7
|
)
|
|
7
8
|
|
|
8
9
|
func Iterate_metadata_function(props IMetadataIteratorProps) bool {
|
|
9
|
-
declaration := metadata_get_function_node(props.Type)
|
|
10
|
+
declaration := metadata_get_function_node(props.Checker, props.Type)
|
|
10
11
|
if declaration == nil {
|
|
11
12
|
return false
|
|
12
13
|
}
|
|
@@ -36,16 +37,8 @@ func Iterate_metadata_function(props IMetadataIteratorProps) bool {
|
|
|
36
37
|
|
|
37
38
|
signature := signatures[0]
|
|
38
39
|
returnType := props.Checker.GetReturnTypeOfSignature(signature)
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
if symbol := returnType.Symbol(); symbol != nil && symbol.Name == "Promise" {
|
|
42
|
-
generic := metadata_get_type_arguments(props.Checker, returnType)
|
|
43
|
-
if len(generic) != 0 {
|
|
44
|
-
returnType = generic[0]
|
|
45
|
-
}
|
|
46
|
-
async = true
|
|
47
|
-
}
|
|
48
|
-
}
|
|
40
|
+
promised := nativeutils.PromiseTypeFactory.Resolve(props.Checker, returnType)
|
|
41
|
+
returnType = promised.Type
|
|
49
42
|
|
|
50
43
|
parameters := make([]*schemametadata.MetadataParameter, 0, len(signature.Parameters()))
|
|
51
44
|
for _, p := range signature.Parameters() {
|
|
@@ -87,7 +80,7 @@ func Iterate_metadata_function(props IMetadataIteratorProps) bool {
|
|
|
87
80
|
props.Metadata.Functions = append(props.Metadata.Functions, schemametadata.MetadataFunction_create(schemametadata.MetadataFunction{
|
|
88
81
|
Parameters: parameters,
|
|
89
82
|
Output: output,
|
|
90
|
-
Async:
|
|
83
|
+
Async: promised.Async,
|
|
91
84
|
}))
|
|
92
85
|
return true
|
|
93
86
|
}
|
|
@@ -126,6 +126,50 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
|
|
|
126
126
|
if onlyObjects && len(tagObjects) == 0 {
|
|
127
127
|
return escape(false)
|
|
128
128
|
}
|
|
129
|
+
// A call-signature-only arm is dropped before the phantom-brand pass, and only
|
|
130
|
+
// while something else survives. It cannot join that pass: the "every arm was
|
|
131
|
+
// removable" guard below exists to refuse an intersection of nothing but
|
|
132
|
+
// brands, and an arm such as `Record<never, never>` is vacuously a phantom
|
|
133
|
+
// brand, so counting signatures as removable would turn
|
|
134
|
+
// `call & Record<never, never>` — which the interface spelling accepts — into a
|
|
135
|
+
// rejection.
|
|
136
|
+
if len(metadatas) > 1 {
|
|
137
|
+
kept := make([]*schemametadata.MetadataSchema, 0, len(metadatas))
|
|
138
|
+
keptIndexes := make([]int, 0, len(indexes))
|
|
139
|
+
for i, m := range metadatas {
|
|
140
|
+
if iterate_metadata_intersection_is_call_signature_only(m) {
|
|
141
|
+
continue
|
|
142
|
+
}
|
|
143
|
+
kept = append(kept, m)
|
|
144
|
+
keptIndexes = append(keptIndexes, indexes[i])
|
|
145
|
+
}
|
|
146
|
+
substantial := false
|
|
147
|
+
for _, m := range kept {
|
|
148
|
+
if iterate_metadata_intersection_is_removable_brand(m) == false {
|
|
149
|
+
substantial = true
|
|
150
|
+
break
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if substantial {
|
|
154
|
+
// Something that carries real obligations survives, so the signatures are
|
|
155
|
+
// the part with nothing to describe and the members are what both
|
|
156
|
+
// spellings must answer for.
|
|
157
|
+
metadatas = kept
|
|
158
|
+
indexes = keptIndexes
|
|
159
|
+
} else if len(kept) == 0 {
|
|
160
|
+
// Every arm was signatures only — an overload set, a call-and-construct
|
|
161
|
+
// pair, or two constructors. That is a member-free callable, which is what
|
|
162
|
+
// the interface spelling of the same type produces, so this iterator has
|
|
163
|
+
// nothing to merge and hands the type back rather than refusing it.
|
|
164
|
+
//
|
|
165
|
+
// Widening this to "signatures were dropped and only brands remain" was
|
|
166
|
+
// tried and is wrong: `call & Record<never, never>` must reach the
|
|
167
|
+
// phantom-brand pass below, which drops the brand and leaves the call arm.
|
|
168
|
+
// Escaping instead makes the emitted validator refuse a function, which
|
|
169
|
+
// the `directPureCall*EmptyIntersection` anchors catch.
|
|
170
|
+
return escape(false)
|
|
171
|
+
}
|
|
172
|
+
}
|
|
129
173
|
if len(metadatas) != 1 {
|
|
130
174
|
removable := []int{}
|
|
131
175
|
for i, m := range metadatas {
|
|
@@ -297,6 +341,29 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
|
|
|
297
341
|
return true
|
|
298
342
|
}
|
|
299
343
|
|
|
344
|
+
// iterate_metadata_intersection_is_call_signature_only reports whether an arm
|
|
345
|
+
// contributes nothing but call or construct signatures, which the intersection
|
|
346
|
+
// can drop the way it drops a phantom brand.
|
|
347
|
+
//
|
|
348
|
+
// `((v: number) => string) & { label: string }` and
|
|
349
|
+
// `interface T { (v: number): string; label: string }` are the same type, and
|
|
350
|
+
// only the first reaches this function — the second is one object carrying a
|
|
351
|
+
// call signature. Without this the first was refused as a nonsensible
|
|
352
|
+
// intersection while the second was accepted, so the answer depended on the
|
|
353
|
+
// spelling (samchon/typia#2276).
|
|
354
|
+
//
|
|
355
|
+
// Dropping the arm loses nothing the interface spelling keeps. #2250 settled
|
|
356
|
+
// that a member-carrying callable stays structural, so neither spelling
|
|
357
|
+
// validates the call signature; the members are what both must describe. An arm
|
|
358
|
+
// that carries any data alongside its signatures is not this case and stays,
|
|
359
|
+
// because dropping it would erase a declared obligation.
|
|
360
|
+
func iterate_metadata_intersection_is_call_signature_only(m *schemametadata.MetadataSchema) bool {
|
|
361
|
+
return m != nil &&
|
|
362
|
+
len(m.Functions) != 0 &&
|
|
363
|
+
m.Nullable == false &&
|
|
364
|
+
m.Size() == len(m.Functions)
|
|
365
|
+
}
|
|
366
|
+
|
|
300
367
|
// iterate_metadata_intersection_is_removable_brand reports whether an explored
|
|
301
368
|
// member schema is a phantom "brand" object that an intersection with a
|
|
302
369
|
// non-object member may drop. A value intersected with a non-object survivor is
|
|
@@ -314,6 +381,8 @@ func Iterate_metadata_intersection(props IMetadataIteratorProps) bool {
|
|
|
314
381
|
// a symbol-keyed property is never observable on a JSON value. Any required
|
|
315
382
|
// string-keyed property (literal or not) might be real data, so it keeps the
|
|
316
383
|
// intersection nonsensible rather than silently dropping a declared constraint.
|
|
384
|
+
|
|
385
|
+
|
|
317
386
|
func iterate_metadata_intersection_is_removable_brand(m *schemametadata.MetadataSchema) bool {
|
|
318
387
|
if m == nil || m.Size() != 1 || len(m.Objects) != 1 {
|
|
319
388
|
return false
|
|
@@ -357,8 +426,10 @@ func iterate_metadata_intersection_is_symbol_key(key *schemametadata.MetadataSch
|
|
|
357
426
|
// name is a computed `symbol` member. The TypeScript checker prefixes such names
|
|
358
427
|
// with a 0xFE byte (`InternalSymbolNamePrefix`), an invalid UTF-8 lead unit that
|
|
359
428
|
// never begins a real string property name. This runs on the raw checker symbol
|
|
360
|
-
// name (`is_removable_object_constraint
|
|
361
|
-
//
|
|
429
|
+
// name (`is_removable_object_constraint`, and the member filter in
|
|
430
|
+
// `Emplace_metadata_object` that keeps such a member out of the validated shape)
|
|
431
|
+
// as well as the metadata key literal (`is_symbol_key`), so the type-level,
|
|
432
|
+
// member-level, and schema-level checks all agree on what a symbol key is.
|
|
362
433
|
func iterate_metadata_intersection_is_symbol_name(name string) bool {
|
|
363
434
|
return len(name) != 0 && name[0] == 0xFE
|
|
364
435
|
}
|
|
@@ -479,18 +550,15 @@ func iterate_metadata_intersection_is_removable_object_constraint(
|
|
|
479
550
|
if nativechecker.IsTupleType(typ) || nativechecker.Checker_isArrayType(checker, typ) {
|
|
480
551
|
return false
|
|
481
552
|
}
|
|
482
|
-
if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
553
|
+
if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
483
554
|
return false
|
|
484
555
|
}
|
|
485
|
-
name :=
|
|
486
|
-
if name
|
|
487
|
-
name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
|
|
488
|
-
}
|
|
489
|
-
if _, ok := iterate_metadata_native_simples[name]; ok {
|
|
556
|
+
name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
|
|
557
|
+
if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
|
|
490
558
|
return false
|
|
491
559
|
}
|
|
492
560
|
for _, generic := range iterate_metadata_native_generics {
|
|
493
|
-
if strings.HasPrefix(name, generic.Name) {
|
|
561
|
+
if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
|
|
494
562
|
return false
|
|
495
563
|
}
|
|
496
564
|
}
|
|
@@ -522,6 +590,29 @@ type iterate_metadata_intersection_identity struct {
|
|
|
522
590
|
Shareable bool
|
|
523
591
|
}
|
|
524
592
|
|
|
593
|
+
// iterate_metadata_intersection_type_name_and_symbol keeps the normalized name
|
|
594
|
+
// paired with the symbol that supplied it, including the apparent-type fallback.
|
|
595
|
+
// Intersection classifiers can then apply the same runtime-native identity gate
|
|
596
|
+
// as direct native metadata without re-resolving either half independently.
|
|
597
|
+
func iterate_metadata_intersection_type_name_and_symbol(
|
|
598
|
+
checker *nativechecker.Checker,
|
|
599
|
+
typ *nativechecker.Type,
|
|
600
|
+
) (string, *nativeast.Symbol) {
|
|
601
|
+
if typ == nil {
|
|
602
|
+
return "", nil
|
|
603
|
+
}
|
|
604
|
+
symbol := typ.Symbol()
|
|
605
|
+
name := iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(typ))
|
|
606
|
+
if name == "" && checker != nil {
|
|
607
|
+
apparent := checker.GetApparentType(typ)
|
|
608
|
+
if apparent != nil {
|
|
609
|
+
symbol = apparent.Symbol()
|
|
610
|
+
name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(apparent))
|
|
611
|
+
}
|
|
612
|
+
}
|
|
613
|
+
return name, symbol
|
|
614
|
+
}
|
|
615
|
+
|
|
525
616
|
func iterate_metadata_intersection_identify(
|
|
526
617
|
checker *nativechecker.Checker,
|
|
527
618
|
collection *schemametadata.MetadataCollection,
|
|
@@ -541,10 +632,7 @@ func iterate_metadata_intersection_identify(
|
|
|
541
632
|
return iterate_metadata_intersection_identity{Kind: "primitive", Name: info.name}
|
|
542
633
|
}
|
|
543
634
|
}
|
|
544
|
-
name :=
|
|
545
|
-
if name == "" {
|
|
546
|
-
name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
|
|
547
|
-
}
|
|
635
|
+
name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
|
|
548
636
|
if atomic, ok := schemametadata.MetadataSchema_atomicLikeNative(name); ok {
|
|
549
637
|
return iterate_metadata_intersection_identity{Kind: "primitive", Name: atomic}
|
|
550
638
|
}
|
|
@@ -559,11 +647,11 @@ func iterate_metadata_intersection_identify(
|
|
|
559
647
|
return iterate_metadata_intersection_identity{Kind: "tag"}
|
|
560
648
|
}
|
|
561
649
|
}
|
|
562
|
-
if _, ok := iterate_metadata_native_simples[name]; ok {
|
|
650
|
+
if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
|
|
563
651
|
return iterate_metadata_intersection_identity{Kind: "native", Name: name}
|
|
564
652
|
}
|
|
565
653
|
for _, generic := range iterate_metadata_native_generics {
|
|
566
|
-
if strings.HasPrefix(name, generic.Name) {
|
|
654
|
+
if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
|
|
567
655
|
return iterate_metadata_intersection_identity{Kind: "native", Name: generic.Name}
|
|
568
656
|
}
|
|
569
657
|
}
|
|
@@ -666,19 +754,16 @@ func iterate_metadata_intersection_is_plain_object_only(
|
|
|
666
754
|
if nativechecker.IsTupleType(typ) || nativechecker.Checker_isArrayType(checker, typ) {
|
|
667
755
|
return false
|
|
668
756
|
}
|
|
669
|
-
if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
757
|
+
if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
670
758
|
return false
|
|
671
759
|
}
|
|
672
760
|
|
|
673
|
-
name :=
|
|
674
|
-
if name
|
|
675
|
-
name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
|
|
676
|
-
}
|
|
677
|
-
if _, ok := iterate_metadata_native_simples[name]; ok {
|
|
761
|
+
name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
|
|
762
|
+
if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
|
|
678
763
|
return false
|
|
679
764
|
}
|
|
680
765
|
for _, generic := range iterate_metadata_native_generics {
|
|
681
|
-
if strings.HasPrefix(name, generic.Name) {
|
|
766
|
+
if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
|
|
682
767
|
return false
|
|
683
768
|
}
|
|
684
769
|
}
|
|
@@ -973,28 +1058,25 @@ func iterate_metadata_intersection_category(
|
|
|
973
1058
|
return "tag"
|
|
974
1059
|
}
|
|
975
1060
|
}
|
|
976
|
-
name :=
|
|
977
|
-
if name == "" {
|
|
978
|
-
name = iterate_metadata_native_getNativeName(metadata_type_symbol_base_name(checker.GetApparentType(typ)))
|
|
979
|
-
}
|
|
1061
|
+
name, symbol := iterate_metadata_intersection_type_name_and_symbol(checker, typ)
|
|
980
1062
|
if atomic, ok := schemametadata.MetadataSchema_atomicLikeNative(name); ok {
|
|
981
1063
|
return "primitive:" + atomic
|
|
982
1064
|
}
|
|
983
1065
|
if name == "Array" || name == "ReadonlyArray" {
|
|
984
1066
|
return "array"
|
|
985
1067
|
}
|
|
986
|
-
if _, ok := iterate_metadata_native_simples[name]; ok {
|
|
1068
|
+
if _, ok := iterate_metadata_native_simples[name]; ok && metadata_symbol_is_runtime_native_type(checker, symbol, name) {
|
|
987
1069
|
return "native:" + name
|
|
988
1070
|
}
|
|
989
1071
|
for _, generic := range iterate_metadata_native_generics {
|
|
990
|
-
if strings.HasPrefix(name, generic.Name) {
|
|
1072
|
+
if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
|
|
991
1073
|
return "object"
|
|
992
1074
|
}
|
|
993
1075
|
}
|
|
994
1076
|
if name == "Map" || name == "ReadonlyMap" || name == "Set" || name == "ReadonlySet" {
|
|
995
1077
|
return "object"
|
|
996
1078
|
}
|
|
997
|
-
if metadata_get_function_node(typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
1079
|
+
if metadata_get_function_node(checker, typ) != nil || len(checker.GetSignaturesOfType(typ, nativechecker.SignatureKindCall)) != 0 {
|
|
998
1080
|
return "object"
|
|
999
1081
|
}
|
|
1000
1082
|
if typ.Flags()&nativechecker.TypeFlagsObject != 0 {
|
|
@@ -10,6 +10,11 @@ func Iterate_metadata_map(props IMetadataIteratorProps) bool {
|
|
|
10
10
|
if metadata_type_symbol_base_name(typ) != "Map" {
|
|
11
11
|
return false
|
|
12
12
|
}
|
|
13
|
+
// The native Map is the runtime-provided global type, not any same-named
|
|
14
|
+
// package declaration or user-authored global (#2200, #2212, #2239).
|
|
15
|
+
if !metadata_symbol_is_runtime_global_type(props.Checker, typ.Symbol(), "Map") {
|
|
16
|
+
return false
|
|
17
|
+
}
|
|
13
18
|
generic := metadata_get_type_arguments(props.Checker, typ)
|
|
14
19
|
if len(generic) != 2 {
|
|
15
20
|
return false
|
|
@@ -3,24 +3,48 @@ package metadata
|
|
|
3
3
|
import (
|
|
4
4
|
"strings"
|
|
5
5
|
|
|
6
|
+
nativeast "github.com/microsoft/typescript-go/shim/ast"
|
|
6
7
|
schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
|
|
7
8
|
)
|
|
8
9
|
|
|
9
10
|
func Iterate_metadata_native(props IMetadataIteratorProps) bool {
|
|
11
|
+
var symbol *nativeast.Symbol
|
|
10
12
|
name := ""
|
|
11
13
|
if props.Type != nil {
|
|
14
|
+
symbol = props.Type.Symbol()
|
|
12
15
|
name = metadata_type_symbol_base_name(props.Type)
|
|
13
16
|
}
|
|
14
17
|
if name == "" && props.Checker != nil && props.Type != nil {
|
|
15
|
-
|
|
18
|
+
apparent := props.Checker.GetApparentType(props.Type)
|
|
19
|
+
if apparent != nil {
|
|
20
|
+
symbol = apparent.Symbol()
|
|
21
|
+
}
|
|
22
|
+
name = metadata_type_symbol_base_name(apparent)
|
|
16
23
|
}
|
|
17
24
|
name = iterate_metadata_native_getNativeName(name)
|
|
18
25
|
if _, ok := iterate_metadata_native_simples[name]; ok {
|
|
26
|
+
// Match the built-in only when the checker resolves this exact symbol from
|
|
27
|
+
// the global type table *and* a runtime authority provides its constructor.
|
|
28
|
+
// A colliding package declaration then falls through to its structural
|
|
29
|
+
// members regardless of whether it was authored in `.ts` or published
|
|
30
|
+
// through `.d.ts` (#2239), and so does a purely user-authored global that
|
|
31
|
+
// merely wins the same global lookup (#2200). Node's authoritative Blob and
|
|
32
|
+
// File module exports are distinct symbols for the same runtime globals, so
|
|
33
|
+
// admit only their value-bearing exact core-module declaration shape as the
|
|
34
|
+
// second identity path (#1568).
|
|
35
|
+
if !metadata_symbol_is_runtime_native_type(props.Checker, symbol, name) {
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
19
38
|
iterate_metadata_native_take(props.Metadata, name)
|
|
20
39
|
return true
|
|
21
40
|
}
|
|
22
41
|
for _, generic := range iterate_metadata_native_generics {
|
|
23
|
-
if strings.HasPrefix(name, generic.Name) {
|
|
42
|
+
if name == generic.Name || strings.HasPrefix(name, generic.Name+"<") {
|
|
43
|
+
// Use the same runtime-provenance identity gate for WeakMap/WeakSet. The
|
|
44
|
+
// `+"<"` arity guard (#2181) and generic metadata remain unchanged.
|
|
45
|
+
if !metadata_symbol_is_runtime_global_type(props.Checker, symbol, generic.Name) {
|
|
46
|
+
return false
|
|
47
|
+
}
|
|
24
48
|
iterate_metadata_native_take(props.Metadata, generic.Name)
|
|
25
49
|
return true
|
|
26
50
|
}
|
|
@@ -44,6 +68,25 @@ func iterate_metadata_native_getNativeName(name string) string {
|
|
|
44
68
|
if index := strings.Index(name, "<"); index != -1 {
|
|
45
69
|
name = name[:index]
|
|
46
70
|
}
|
|
71
|
+
// `global.` is the qualifier `metadata_symbol_name` produces for a symbol
|
|
72
|
+
// declared inside a `declare global` block, which is how @types/node declares
|
|
73
|
+
// the bare `Blob` and `File` globals. A project that includes the DOM library
|
|
74
|
+
// never showed it, because the DOM declares those names at file scope and the
|
|
75
|
+
// DOM declaration won the name; drop the DOM library — an ordinary Node
|
|
76
|
+
// service compiled with `"lib": ["ES2022"]` — and the only declaration left is
|
|
77
|
+
// the augmented one, so the name arrives as `global.Blob` and this lookup
|
|
78
|
+
// misses before any identity question is asked. Stripping the qualifier only
|
|
79
|
+
// restores the question; whether the declaration is a runtime-provided native
|
|
80
|
+
// or a same-named user global stays the identity gate's answer to give.
|
|
81
|
+
//
|
|
82
|
+
// An ambient module's qualifier is deliberately not stripped here: a lookalike
|
|
83
|
+
// published as `declare module "user-buffer-lookalike"` arrives as
|
|
84
|
+
// `user-buffer-lookalike.Blob` and must keep failing this lookup.
|
|
85
|
+
for _, module := range []string{"node:buffer.", "buffer.", "global."} {
|
|
86
|
+
if strings.HasPrefix(name, module) {
|
|
87
|
+
return strings.TrimPrefix(name, module)
|
|
88
|
+
}
|
|
89
|
+
}
|
|
47
90
|
if strings.HasPrefix(name, "\"") && strings.Contains(name, "\".") {
|
|
48
91
|
if index := strings.Index(name[1:], "\"."); index != -1 {
|
|
49
92
|
name = name[index+3:]
|
|
@@ -10,6 +10,11 @@ func Iterate_metadata_set(props IMetadataIteratorProps) bool {
|
|
|
10
10
|
if metadata_type_symbol_base_name(typ) != "Set" {
|
|
11
11
|
return false
|
|
12
12
|
}
|
|
13
|
+
// The native Set is the runtime-provided global type, not any same-named
|
|
14
|
+
// package declaration or user-authored global (#2200, #2212, #2239).
|
|
15
|
+
if !metadata_symbol_is_runtime_global_type(props.Checker, typ.Symbol(), "Set") {
|
|
16
|
+
return false
|
|
17
|
+
}
|
|
13
18
|
generic := metadata_get_type_arguments(props.Checker, typ)
|
|
14
19
|
if len(generic) != 1 {
|
|
15
20
|
return false
|