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
|
@@ -7,13 +7,16 @@ import (
|
|
|
7
7
|
"fmt"
|
|
8
8
|
"os"
|
|
9
9
|
"path/filepath"
|
|
10
|
+
"sort"
|
|
10
11
|
"strings"
|
|
11
12
|
|
|
12
13
|
shimast "github.com/microsoft/typescript-go/shim/ast"
|
|
13
14
|
shimcompiler "github.com/microsoft/typescript-go/shim/compiler"
|
|
14
15
|
shimprinter "github.com/microsoft/typescript-go/shim/printer"
|
|
15
16
|
"github.com/samchon/ttsc/packages/ttsc/driver"
|
|
17
|
+
typiaadapter "github.com/samchon/typia/packages/typia/native/adapter"
|
|
16
18
|
nativecontext "github.com/samchon/typia/packages/typia/native/core/context"
|
|
19
|
+
schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
|
|
17
20
|
nativetransform "github.com/samchon/typia/packages/typia/native/transform"
|
|
18
21
|
)
|
|
19
22
|
|
|
@@ -24,6 +27,10 @@ import (
|
|
|
24
27
|
// transformers), so injected namespace imports stay as ES imports the caller
|
|
25
28
|
// can type-strip per file. With no --file it emits a JSON envelope of every
|
|
26
29
|
// project source keyed by its cwd-relative path; with --file it prints one file.
|
|
30
|
+
//
|
|
31
|
+
// Every host here consults the same transformDiags before choosing its exit code
|
|
32
|
+
// and before publishing anything: runTransformProject encodes them and returns 3,
|
|
33
|
+
// runTransformSingle reports them and withholds the artifact.
|
|
27
34
|
func runTransform(args []string) int {
|
|
28
35
|
fs := flag.NewFlagSet("transform", flag.ContinueOnError)
|
|
29
36
|
fs.SetOutput(stderr)
|
|
@@ -33,7 +40,7 @@ func runTransform(args []string) int {
|
|
|
33
40
|
out := fs.String("out", "", "write single-file output to PATH instead of stdout")
|
|
34
41
|
rewriteMode := fs.String("rewrite-mode", "typia", "native rewrite backend id")
|
|
35
42
|
output := fs.String("output", defaultTransformOutput(), "single-file output kind: js or ts")
|
|
36
|
-
|
|
43
|
+
pluginsJSON := fs.String("plugins-json", "", "ordered ttsc plugin payload")
|
|
37
44
|
if err := fs.Parse(args); err != nil {
|
|
38
45
|
return 2
|
|
39
46
|
}
|
|
@@ -45,11 +52,17 @@ func runTransform(args []string) int {
|
|
|
45
52
|
fmt.Fprintf(stderr, "ttsc-typia transform: unknown --output value %q\n", *output)
|
|
46
53
|
return 2
|
|
47
54
|
}
|
|
55
|
+
// Resolve the options before loading the program: they come from the payload
|
|
56
|
+
// alone, so an unreadable manifest is a usage error to report now rather than
|
|
57
|
+
// after a full transform has already run under the wrong configuration.
|
|
58
|
+
pluginOptions, err := typiaadapter.ReadPluginOptions(*pluginsJSON)
|
|
59
|
+
if err != nil {
|
|
60
|
+
fmt.Fprintf(stderr, "ttsc-typia transform: %v\n", err)
|
|
61
|
+
return 2
|
|
62
|
+
}
|
|
48
63
|
cwd := *cwdOverride
|
|
49
64
|
if cwd == "" {
|
|
50
|
-
|
|
51
|
-
cwd, err = os.Getwd()
|
|
52
|
-
if err != nil {
|
|
65
|
+
if cwd, err = os.Getwd(); err != nil {
|
|
53
66
|
fmt.Fprintf(stderr, "ttsc-typia transform: cwd: %v\n", err)
|
|
54
67
|
return 2
|
|
55
68
|
}
|
|
@@ -67,9 +80,10 @@ func runTransform(args []string) int {
|
|
|
67
80
|
return 2
|
|
68
81
|
}
|
|
69
82
|
defer prog.Close()
|
|
83
|
+
registerTypiaDefaultLibraryClassifier(prog)
|
|
84
|
+
defer schemametadata.MetadataDefaultLibrary_release(prog.Checker)
|
|
70
85
|
|
|
71
86
|
transformDiags := []typiaTransformDiagnostic{}
|
|
72
|
-
pluginOptions := readTypiaPluginOptions(cwd, *tsconfigPath)
|
|
73
87
|
transformOptions := pluginOptions.TransformOptions()
|
|
74
88
|
extras := nativecontext.ITypiaContext_Extras{
|
|
75
89
|
AddDiagnostic: func(diag *nativecontext.ITypiaDiagnostic) int {
|
|
@@ -102,15 +116,80 @@ func runTransform(args []string) int {
|
|
|
102
116
|
fmt.Fprintf(stderr, "ttsc-typia transform: source file is not in program: %s\n", absFile)
|
|
103
117
|
return 2
|
|
104
118
|
}
|
|
105
|
-
|
|
106
|
-
|
|
119
|
+
return runTransformSingle(cwd, *out, &transformDiags, func() (string, int) {
|
|
120
|
+
if *output == "js" {
|
|
121
|
+
return transformSingleToJavaScript(prog, typiaTransform, target)
|
|
122
|
+
}
|
|
123
|
+
return transformFileToTypeScript(prog, typiaTransform, target), 0
|
|
124
|
+
})
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
// registerTypiaDefaultLibraryClassifier hands metadata analysis the program's
|
|
128
|
+
// own default-library classification, which runtime-native identity is decided
|
|
129
|
+
// from: a global is the JavaScript built-in only when a runtime authority
|
|
130
|
+
// declares it (#2200). `prog.TSProgram.IsLibFile` is the same oracle the
|
|
131
|
+
// dependency collector above uses, and for the same reason — a default library
|
|
132
|
+
// is not recognizable from its file name under `bundled:///`, `noembed`, or
|
|
133
|
+
// `libReplacement` (#2108).
|
|
134
|
+
//
|
|
135
|
+
// Every program-loading host registers it against the checker whose types the
|
|
136
|
+
// analysis reads, and releases it when that program closes, so no closed
|
|
137
|
+
// program's checker stays reachable from the registry.
|
|
138
|
+
func registerTypiaDefaultLibraryClassifier(prog *driver.Program) {
|
|
139
|
+
if prog == nil || prog.TSProgram == nil {
|
|
140
|
+
return
|
|
107
141
|
}
|
|
108
|
-
|
|
109
|
-
|
|
142
|
+
program := prog.TSProgram
|
|
143
|
+
schemametadata.MetadataDefaultLibrary_register(prog.Checker, func(source *shimast.SourceFile) bool {
|
|
144
|
+
return source != nil && program.IsLibFile(source)
|
|
145
|
+
})
|
|
146
|
+
}
|
|
147
|
+
|
|
148
|
+
// runTransformSingle is the single-file counterpart of runTransformProject's
|
|
149
|
+
// diagnostic decision: produce the artifact into memory, then publish it only
|
|
150
|
+
// when typia's analysis reported nothing. Every single-file output mode routes
|
|
151
|
+
// through this one commit point, so a mode cannot exit 0 over a diagnostic and
|
|
152
|
+
// publish an untransformed `typia.is<T>(input)` call by forgetting its own check
|
|
153
|
+
// (samchon/typia#2117).
|
|
154
|
+
//
|
|
155
|
+
// Diagnostics outrank the producer's own failure code: when typia could not
|
|
156
|
+
// lower a call, that diagnostic is the cause a caller needs, not the "no output
|
|
157
|
+
// produced" symptom it leaves behind.
|
|
158
|
+
func runTransformSingle(
|
|
159
|
+
cwd string,
|
|
160
|
+
outPath string,
|
|
161
|
+
transformDiags *[]typiaTransformDiagnostic,
|
|
162
|
+
produce func() (string, int),
|
|
163
|
+
) int {
|
|
164
|
+
text, code := produce()
|
|
165
|
+
if len(*transformDiags) > 0 {
|
|
166
|
+
writeTypiaTransformDiagnostics(stderr, *transformDiags, cwd)
|
|
167
|
+
return 3
|
|
168
|
+
}
|
|
169
|
+
if code != 0 {
|
|
170
|
+
return code
|
|
171
|
+
}
|
|
172
|
+
return writeSingleOutput(text, outPath)
|
|
110
173
|
}
|
|
111
174
|
|
|
112
175
|
// runTransformProject prints every non-declaration project source as transformed
|
|
113
|
-
// TypeScript and encodes the JSON envelope the ttsc host expects.
|
|
176
|
+
// TypeScript and encodes the JSON envelope the ttsc host expects. Alongside the
|
|
177
|
+
// transformed sources it reports two invalidation channels the ttsc consumer
|
|
178
|
+
// registers with the bundler so persistent caches and watch mode invalidate
|
|
179
|
+
// generated validators soundly:
|
|
180
|
+
//
|
|
181
|
+
// - `graph`, the host-owned reference graph of the loaded program (direct
|
|
182
|
+
// resolved edges, ambient globals, tsconfig extends chain) computed by the
|
|
183
|
+
// ttsc driver SDK. It is the plugin-agnostic sound baseline under `tsc
|
|
184
|
+
// --incremental` semantics; the consumer registers, per file F,
|
|
185
|
+
// reach(edges, F) ∪ globals ∪ configs.
|
|
186
|
+
// - `dependencies`, typia's precise per-file list of the source files owning
|
|
187
|
+
// the declarations the typia analysis consulted for each transformed file.
|
|
188
|
+
//
|
|
189
|
+
// The consumer unions the two (reach(edges, F) ∪ globals ∪ configs ∪
|
|
190
|
+
// dependencies[F]), so graph is added alongside dependencies, not a replacement.
|
|
191
|
+
// Every section keys through driver.TransformOutputKey, so the consumer joins
|
|
192
|
+
// them by key.
|
|
114
193
|
func runTransformProject(
|
|
115
194
|
prog *driver.Program,
|
|
116
195
|
cwd string,
|
|
@@ -121,16 +200,29 @@ func runTransformProject(
|
|
|
121
200
|
Diagnostics: []transformCompilerDiagnostic{},
|
|
122
201
|
TypeScript: map[string]string{},
|
|
123
202
|
}
|
|
203
|
+
// Compute the reference graph from the loaded program before the transform
|
|
204
|
+
// loop runs typia's per-file node transformer: the graph must describe the
|
|
205
|
+
// original source's resolved references (the transform's inputs), matching
|
|
206
|
+
// ttsc's own `api-transform` host.
|
|
207
|
+
out.Graph = driver.NewTransformGraph(prog, cwd)
|
|
208
|
+
collector := newTransformDependencyCollector(cwd, func(fileName string) bool {
|
|
209
|
+
sf := prog.SourceFile(fileName)
|
|
210
|
+
return sf != nil && prog.TSProgram.IsLibFile(sf)
|
|
211
|
+
})
|
|
212
|
+
schemametadata.MetadataDependency_listen(prog.Checker, collector.Touch)
|
|
213
|
+
defer schemametadata.MetadataDependency_release(prog.Checker)
|
|
124
214
|
for _, sf := range prog.SourceFiles() {
|
|
125
215
|
if sf.IsDeclarationFile {
|
|
126
216
|
continue
|
|
127
217
|
}
|
|
128
|
-
key :=
|
|
218
|
+
key := driver.TransformOutputKey(cwd, sf.FileName())
|
|
129
219
|
if filepath.IsAbs(key) || key == ".." || strings.HasPrefix(key, "../") {
|
|
130
220
|
continue
|
|
131
221
|
}
|
|
222
|
+
collector.Begin(key)
|
|
132
223
|
out.TypeScript[key] = transformFileToTypeScript(prog, typiaTransform, sf)
|
|
133
224
|
}
|
|
225
|
+
out.Dependencies = collector.ToJSON()
|
|
134
226
|
for _, diag := range *transformDiags {
|
|
135
227
|
out.Diagnostics = append(out.Diagnostics, transformDiagnosticToCompilerDiagnostic(diag))
|
|
136
228
|
}
|
|
@@ -165,21 +257,45 @@ func transformFileToTypeScript(
|
|
|
165
257
|
return writer.String()
|
|
166
258
|
}
|
|
167
259
|
|
|
168
|
-
//
|
|
169
|
-
// pipeline and
|
|
170
|
-
|
|
260
|
+
// transformSingleToJavaScript emits a single file's JS through the full node-path
|
|
261
|
+
// emit pipeline and returns the captured text. It only produces; publishing is
|
|
262
|
+
// runTransformSingle's decision, so a diagnostic can withhold the artifact.
|
|
263
|
+
//
|
|
264
|
+
// The emit pass covers every file in the program, so unlike the `ts` mode -- which
|
|
265
|
+
// transforms only the target -- a diagnostic raised by any project source reaches
|
|
266
|
+
// runTransformSingle and withholds this file's artifact. That is deliberate and
|
|
267
|
+
// matches the build host, which fails the whole build on any transform diagnostic:
|
|
268
|
+
// the emit that produced this text is the same one that could not lower the other
|
|
269
|
+
// call, so its success is not independently trustworthy.
|
|
270
|
+
//
|
|
271
|
+
// The emit writes every project output through one callback, so the target's own
|
|
272
|
+
// artifact has to be identified among them. That identity comes from the
|
|
273
|
+
// compiler's output-path resolution rather than from a resemblance between the
|
|
274
|
+
// source and emitted paths, because the emit chooses its write path with that
|
|
275
|
+
// same resolution: `outDir`, `rootDir`, and nested source directories may move
|
|
276
|
+
// the artifact anywhere without the two disagreeing, and two sources sharing a
|
|
277
|
+
// basename in different directories resolve to different artifacts instead of
|
|
278
|
+
// collapsing onto one. Deriving the path instead of matching stems is what fixed
|
|
279
|
+
// samchon/typia#2134, where a whole-path-stem match asked whether `dist/main`
|
|
280
|
+
// equaled `src/main` and so reported "no output produced" for every project
|
|
281
|
+
// with an `outDir`.
|
|
282
|
+
func transformSingleToJavaScript(
|
|
171
283
|
prog *driver.Program,
|
|
172
284
|
typiaTransform driver.PluginTransform,
|
|
173
285
|
target *shimast.SourceFile,
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
286
|
+
) (string, int) {
|
|
287
|
+
// The resolution answers with an empty path for a source that has no
|
|
288
|
+
// JavaScript lane of its own -- a JSON module that would be emitted over
|
|
289
|
+
// itself. Nothing the emit writes is then this file's artifact, so guard the
|
|
290
|
+
// comparison rather than let an empty expectation match anything.
|
|
291
|
+
expected := ""
|
|
292
|
+
if paths := shimcompiler.GetOutputPathsFor(target, prog.TSProgram.Options(), prog.TSProgram, false); paths != nil {
|
|
293
|
+
expected = filepath.ToSlash(paths.JsFilePath())
|
|
294
|
+
}
|
|
177
295
|
var captured string
|
|
178
296
|
found := false
|
|
179
|
-
targetKey := filepath.ToSlash(absFile)
|
|
180
297
|
writeFile := shimcompiler.WriteFile(func(fileName, text string, _ *shimcompiler.WriteFileData) error {
|
|
181
|
-
|
|
182
|
-
if sameSourceStem(targetKey, fileName) {
|
|
298
|
+
if expected != "" && filepath.ToSlash(fileName) == expected {
|
|
183
299
|
captured = text
|
|
184
300
|
found = true
|
|
185
301
|
}
|
|
@@ -187,20 +303,13 @@ func runTransformSingleJS(
|
|
|
187
303
|
})
|
|
188
304
|
if _, err := prog.EmitWithPluginTransformers([]driver.PluginTransform{typiaTransform}, writeFile); err != nil {
|
|
189
305
|
fmt.Fprintf(stderr, "ttsc-typia transform: emit: %v\n", err)
|
|
190
|
-
return 3
|
|
306
|
+
return "", 3
|
|
191
307
|
}
|
|
192
308
|
if !found {
|
|
193
|
-
fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n",
|
|
194
|
-
return 3
|
|
309
|
+
fmt.Fprintf(stderr, "ttsc-typia transform: no output produced for %s\n", target.FileName())
|
|
310
|
+
return "", 3
|
|
195
311
|
}
|
|
196
|
-
return
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
// sameSourceStem reports whether an emitted .js path corresponds to a .ts source
|
|
200
|
-
// path by comparing their extension-stripped values.
|
|
201
|
-
func sameSourceStem(tsPath, jsPath string) bool {
|
|
202
|
-
return strings.TrimSuffix(filepath.ToSlash(jsPath), filepath.Ext(jsPath)) ==
|
|
203
|
-
strings.TrimSuffix(tsPath, filepath.Ext(tsPath))
|
|
312
|
+
return captured, 0
|
|
204
313
|
}
|
|
205
314
|
|
|
206
315
|
func writeSingleOutput(text, outPath string) int {
|
|
@@ -234,6 +343,117 @@ func defaultTransformOutput() string {
|
|
|
234
343
|
type transformProjectOutput struct {
|
|
235
344
|
Diagnostics []transformCompilerDiagnostic `json:"diagnostics,omitempty"`
|
|
236
345
|
TypeScript map[string]string `json:"typescript"`
|
|
346
|
+
// Graph is the host-owned reference graph of the loaded program produced by
|
|
347
|
+
// the ttsc driver SDK (driver.NewTransformGraph): direct resolved reference
|
|
348
|
+
// edges, ambient global-scope files, and the tsconfig extends chain, keyed
|
|
349
|
+
// like TypeScript through driver.TransformOutputKey. It is the plugin-agnostic
|
|
350
|
+
// sound invalidation baseline; the consumer unions it with Dependencies.
|
|
351
|
+
// Omitted only when the program is nil (never here — a nil program returns
|
|
352
|
+
// earlier).
|
|
353
|
+
Graph *driver.TransformGraph `json:"graph,omitempty"`
|
|
354
|
+
// Dependencies maps each transformed file (same project-relative keys as
|
|
355
|
+
// TypeScript) to the source files owning the declarations typia's analysis
|
|
356
|
+
// consulted for it. Values are project-relative when the file lives under the
|
|
357
|
+
// project and absolute otherwise; the consumer absolutizes against the
|
|
358
|
+
// project root and drops the file itself. Compiler-owned default library
|
|
359
|
+
// files are excluded (toolchain-versioned, not project inputs);
|
|
360
|
+
// `node_modules` declaration files are included.
|
|
361
|
+
Dependencies map[string][]string `json:"dependencies,omitempty"`
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
// transformDependencyCollector accumulates the consulted-declaration files the
|
|
365
|
+
// metadata dependency listener reports while one project file is transformed,
|
|
366
|
+
// attributing them to that file's envelope key.
|
|
367
|
+
type transformDependencyCollector struct {
|
|
368
|
+
cwd string
|
|
369
|
+
current string
|
|
370
|
+
files map[string]map[string]bool
|
|
371
|
+
// isLibraryFile reports the compiler's own classification of a file as a
|
|
372
|
+
// default library. Classification must come from the program, never from a
|
|
373
|
+
// filename pattern: a project's own ambient declaration file may legitimately
|
|
374
|
+
// be named `lib.custom.d.ts`, and dropping it by basename silently loses
|
|
375
|
+
// cache invalidation for the types it declares (samchon/typia#2108).
|
|
376
|
+
isLibraryFile func(fileName string) bool
|
|
377
|
+
// values memoizes fileName -> envelope value ("" for a dropped file): the
|
|
378
|
+
// listener reports the same declaration files repeatedly across call sites.
|
|
379
|
+
values map[string]string
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
func newTransformDependencyCollector(
|
|
383
|
+
cwd string,
|
|
384
|
+
isLibraryFile func(fileName string) bool,
|
|
385
|
+
) *transformDependencyCollector {
|
|
386
|
+
return &transformDependencyCollector{
|
|
387
|
+
cwd: cwd,
|
|
388
|
+
isLibraryFile: isLibraryFile,
|
|
389
|
+
files: map[string]map[string]bool{},
|
|
390
|
+
values: map[string]string{},
|
|
391
|
+
}
|
|
392
|
+
}
|
|
393
|
+
|
|
394
|
+
// Begin attributes subsequent touches to the given envelope key.
|
|
395
|
+
func (collector *transformDependencyCollector) Begin(key string) {
|
|
396
|
+
collector.current = key
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
// Touch records one consulted declaration file for the current key. Default
|
|
400
|
+
// library files, virtual URI sources (e.g. tsgo's `bundled:///` libraries),
|
|
401
|
+
// and the transformed file itself are dropped so the envelope carries only
|
|
402
|
+
// actionable project inputs.
|
|
403
|
+
func (collector *transformDependencyCollector) Touch(fileName string) {
|
|
404
|
+
if collector.current == "" {
|
|
405
|
+
return
|
|
406
|
+
}
|
|
407
|
+
value, memoized := collector.values[fileName]
|
|
408
|
+
if memoized == false {
|
|
409
|
+
value = collector.value(fileName)
|
|
410
|
+
collector.values[fileName] = value
|
|
411
|
+
}
|
|
412
|
+
if value == "" || value == collector.current {
|
|
413
|
+
return
|
|
414
|
+
}
|
|
415
|
+
set := collector.files[collector.current]
|
|
416
|
+
if set == nil {
|
|
417
|
+
set = map[string]bool{}
|
|
418
|
+
collector.files[collector.current] = set
|
|
419
|
+
}
|
|
420
|
+
set[value] = true
|
|
421
|
+
}
|
|
422
|
+
|
|
423
|
+
// value renders one reported file as its envelope value, or "" when the file
|
|
424
|
+
// must be dropped: virtual URI sources (e.g. tsgo's `bundled:///` embedded
|
|
425
|
+
// libraries) cannot be watched, and files the compiler classifies as default
|
|
426
|
+
// libraries (on-disk in `noembed` or `libReplacement` configurations) are
|
|
427
|
+
// toolchain inputs, not project inputs.
|
|
428
|
+
func (collector *transformDependencyCollector) value(fileName string) string {
|
|
429
|
+
if strings.Contains(fileName, "://") || collector.isLibraryFile(fileName) {
|
|
430
|
+
return ""
|
|
431
|
+
}
|
|
432
|
+
return driver.TransformOutputKey(collector.cwd, fileName)
|
|
433
|
+
}
|
|
434
|
+
|
|
435
|
+
// ToJSON renders the collected sets as the envelope's `dependencies` map with
|
|
436
|
+
// deterministically sorted values, or nil when nothing was collected.
|
|
437
|
+
func (collector *transformDependencyCollector) ToJSON() map[string][]string {
|
|
438
|
+
if len(collector.files) == 0 {
|
|
439
|
+
return nil
|
|
440
|
+
}
|
|
441
|
+
output := map[string][]string{}
|
|
442
|
+
for key, set := range collector.files {
|
|
443
|
+
if len(set) == 0 {
|
|
444
|
+
continue
|
|
445
|
+
}
|
|
446
|
+
values := make([]string, 0, len(set))
|
|
447
|
+
for value := range set {
|
|
448
|
+
values = append(values, value)
|
|
449
|
+
}
|
|
450
|
+
sort.Strings(values)
|
|
451
|
+
output[key] = values
|
|
452
|
+
}
|
|
453
|
+
if len(output) == 0 {
|
|
454
|
+
return nil
|
|
455
|
+
}
|
|
456
|
+
return output
|
|
237
457
|
}
|
|
238
458
|
|
|
239
459
|
type transformCompilerDiagnostic struct {
|
|
@@ -245,14 +465,6 @@ type transformCompilerDiagnostic struct {
|
|
|
245
465
|
MessageText string `json:"messageText"`
|
|
246
466
|
}
|
|
247
467
|
|
|
248
|
-
func sourceFileKey(cwd string, file string) string {
|
|
249
|
-
rel, err := filepath.Rel(cwd, filepath.FromSlash(file))
|
|
250
|
-
if err != nil {
|
|
251
|
-
return filepath.ToSlash(file)
|
|
252
|
-
}
|
|
253
|
-
return filepath.ToSlash(rel)
|
|
254
|
-
}
|
|
255
|
-
|
|
256
468
|
func transformDiagnosticToCompilerDiagnostic(diag typiaTransformDiagnostic) transformCompilerDiagnostic {
|
|
257
469
|
var ptr *string
|
|
258
470
|
if diag.File != "" {
|
|
@@ -10,17 +10,25 @@ import (
|
|
|
10
10
|
"testing"
|
|
11
11
|
)
|
|
12
12
|
|
|
13
|
-
//
|
|
13
|
+
// TestTransformDeclarationSourceProducesNoJavaScript verifies JS transform reports empty emission.
|
|
14
14
|
//
|
|
15
15
|
// Declaration files can belong to the program while producing no JavaScript
|
|
16
16
|
// output. The single-file transform path must detect that empty capture instead
|
|
17
17
|
// of returning a successful but blank result.
|
|
18
18
|
//
|
|
19
|
+
// The file name deliberately spells out "javascript". Go reads a trailing `_js`
|
|
20
|
+
// on a source file name as a `GOOS=js` build constraint, so under the earlier
|
|
21
|
+
// name `..._produces_no_js_test.go` this case built only for `GOOS=js` -- where
|
|
22
|
+
// `main.go` (`//go:build !js`) drops out and the test package does not compile
|
|
23
|
+
// at all. It therefore ran on no platform whatsoever, and the tag it carries was
|
|
24
|
+
// never the reason. Keep a `_js`, `_windows`, `_linux`, or `_darwin` ending off
|
|
25
|
+
// a Go file name unless that constraint is meant.
|
|
26
|
+
//
|
|
19
27
|
// 1. Create a project that includes only a declaration source file.
|
|
20
28
|
// 2. Run single-file transform with JavaScript output.
|
|
21
29
|
// 3. Capture the command diagnostics.
|
|
22
30
|
// 4. Assert the command reports that no output was produced.
|
|
23
|
-
func
|
|
31
|
+
func TestTransformDeclarationSourceProducesNoJavaScript(t *testing.T) {
|
|
24
32
|
root := transformCoverageRepoRoot(t)
|
|
25
33
|
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
26
34
|
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
@@ -20,9 +20,19 @@ import (
|
|
|
20
20
|
// directly, which makes transformer, adapter, and programmer code visible to
|
|
21
21
|
// `-coverpkg`.
|
|
22
22
|
//
|
|
23
|
+
// The `_js` lane asserted the opposite of this until samchon/typia#2134 was
|
|
24
|
+
// fixed: it required every fixture to report "no output produced". These
|
|
25
|
+
// projects all set `rootDir`/`outDir`, and the old identity check compared whole
|
|
26
|
+
// path stems, so it asked whether `dist/main` equaled `src/main` and never
|
|
27
|
+
// found the artifact the emit had just written. Reading those exit 3s as the
|
|
28
|
+
// specification turned this suite into the defect's own guard rail -- it would
|
|
29
|
+
// have failed the repair -- and left the JS emit path it exists to cover
|
|
30
|
+
// unreached, since the run stopped at the identity check.
|
|
31
|
+
//
|
|
23
32
|
// 1. Create isolated temporary TypeScript projects under the native package.
|
|
24
33
|
// 2. Transform each project's `src/main.ts` to TypeScript output in memory.
|
|
25
|
-
// 3.
|
|
34
|
+
// 3. Transform each project's `src/main.ts` to JavaScript and require emitted
|
|
35
|
+
// CommonJS, which is what reaches the printer and the emit path.
|
|
26
36
|
// 4. Cover reflect metadata, protobuf maps, and object-union emit paths.
|
|
27
37
|
// 5. Run build/check/project-transform command paths against the same project.
|
|
28
38
|
func TestTransformSyntheticEmitCoverage(t *testing.T) {
|
|
@@ -63,7 +73,7 @@ func TestTransformSyntheticEmitCoverage(t *testing.T) {
|
|
|
63
73
|
for _, tc := range cases {
|
|
64
74
|
tc := tc
|
|
65
75
|
t.Run(tc.name+"_js", func(t *testing.T) {
|
|
66
|
-
|
|
76
|
+
out, errText, code := transformCoverageCapture(func() int {
|
|
67
77
|
return runTransform([]string{
|
|
68
78
|
"--cwd", projects[tc.name],
|
|
69
79
|
"--tsconfig", "tsconfig.json",
|
|
@@ -71,8 +81,15 @@ func TestTransformSyntheticEmitCoverage(t *testing.T) {
|
|
|
71
81
|
"--output", "js",
|
|
72
82
|
})
|
|
73
83
|
})
|
|
74
|
-
if code !=
|
|
75
|
-
t.Fatalf("transform js
|
|
84
|
+
if code != 0 {
|
|
85
|
+
t.Fatalf("transform js failed for %s: code=%d stderr=\n%s", tc.name, code, errText)
|
|
86
|
+
}
|
|
87
|
+
// These fixtures compile as `commonjs`, so a real emit is module-wrapped
|
|
88
|
+
// JavaScript. The lowering itself is pinned by the dedicated single-file
|
|
89
|
+
// `js` cases; what this lane adds is that every fixture's shape reaches
|
|
90
|
+
// the printer at all.
|
|
91
|
+
if !strings.Contains(out, `"use strict"`) || !strings.Contains(out, "exports.") {
|
|
92
|
+
t.Fatalf("transform js output for %s is not emitted CommonJS:\n%s", tc.name, out)
|
|
76
93
|
}
|
|
77
94
|
})
|
|
78
95
|
}
|