typia 13.1.1 → 13.1.19
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 +21 -0
- package/lib/executable/FileSystemIdentity.js +183 -0
- package/lib/executable/FileSystemIdentity.js.map +1 -0
- package/lib/executable/FileSystemIdentity.mjs +129 -0
- package/lib/executable/FileSystemIdentity.mjs.map +1 -0
- package/lib/executable/TypiaGenerateWizard.js +264 -104
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +233 -93
- 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 +17 -0
- package/lib/internal/_ProtobufReader.js +117 -45
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +108 -39
- 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/_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 +2 -1
- package/lib/internal/_randomFormatByte.js.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +2 -1
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.d.ts +2 -0
- package/lib/internal/_randomFormatDate.js +3 -2
- package/lib/internal/_randomFormatDate.js.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +3 -2
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.d.ts +2 -0
- package/lib/internal/_randomFormatDatetime.js +3 -2
- package/lib/internal/_randomFormatDatetime.js.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +3 -2
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.d.ts +2 -1
- package/lib/internal/_randomFormatDuration.js +3 -2
- package/lib/internal/_randomFormatDuration.js.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +3 -2
- 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 +2 -1
- package/lib/internal/_randomFormatIpv4.js.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +2 -1
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.d.ts +2 -1
- package/lib/internal/_randomFormatIpv6.js +2 -1
- package/lib/internal/_randomFormatIpv6.js.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +2 -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 +8 -1
- package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +5 -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 +2 -1
- package/lib/internal/_randomFormatRegex.js.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +2 -1
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.js +3 -2
- package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +3 -2
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.d.ts +2 -1
- package/lib/internal/_randomFormatTime.js +3 -2
- package/lib/internal/_randomFormatTime.js.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +3 -2
- 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 +33 -0
- package/lib/internal/_randomStringLength.js +48 -0
- package/lib/internal/_randomStringLength.js.map +1 -0
- package/lib/internal/_randomStringLength.mjs +44 -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/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 +81 -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/command_routes_and_diagnostics_coverage_test.go +3 -1
- 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_union_discrimination_transform_test.go +289 -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_stringify_special_key_transform_test.go +238 -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/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/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_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_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 +228 -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 +159 -1
- 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/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 +7 -4
- 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 +60 -6
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +116 -8
- package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +4 -11
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +8 -6
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +9 -0
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +27 -2
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +9 -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 +393 -5
- 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/NotationJoiner.go +86 -28
- package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
- package/native/core/programmers/helpers/UnionExplorer.go +203 -61
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
- 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/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/openapi_v3_downgrader.go +641 -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 +52 -7
- package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
- package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
- 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 +40 -21
- 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 +270 -20
- package/native/core/schemas/metadata/MetadataDependency.go +388 -0
- package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
- 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/package.json +16 -4
- package/src/executable/FileSystemIdentity.ts +189 -0
- package/src/executable/TypiaGenerateWizard.ts +377 -110
- package/src/functional.ts +30 -60
- package/src/internal/_ProtobufReader.ts +129 -43
- 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/_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 +4 -1
- package/src/internal/_randomFormatDate.ts +17 -12
- package/src/internal/_randomFormatDatetime.ts +15 -10
- package/src/internal/_randomFormatDuration.ts +16 -14
- 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 +3 -2
- package/src/internal/_randomFormatIpv6.ts +3 -2
- package/src/internal/_randomFormatIri.ts +3 -1
- package/src/internal/_randomFormatIriReference.ts +3 -1
- package/src/internal/_randomFormatJsonPointer.ts +8 -2
- package/src/internal/_randomFormatPassword.ts +11 -6
- package/src/internal/_randomFormatRegex.ts +4 -1
- package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
- package/src/internal/_randomFormatTime.ts +13 -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 +26 -4
- package/src/internal/_randomStringLength.ts +72 -0
- package/src/internal/_stringLength.ts +5 -0
- package/src/internal/_validateReport.ts +5 -1
- package/src/internal/private/__notationRename.ts +24 -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/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/src/internal/private/__notationCapitalize.ts +0 -2
- package/src/internal/private/__notationUnsnake.ts +0 -24
|
@@ -0,0 +1,147 @@
|
|
|
1
|
+
package metadata
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"regexp"
|
|
5
|
+
"testing"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
// TestMetadataCollectionNameAllocation verifies every minted component id is
|
|
9
|
+
// unique across the whole collection rather than within its base-name bucket.
|
|
10
|
+
//
|
|
11
|
+
// The allocator used to key its bookkeeping on the base name and mint
|
|
12
|
+
// `<Base>.o<N>` without ever comparing that id against the ids already handed
|
|
13
|
+
// out. A type whose real full name was exactly `Foo.o1` therefore collided with
|
|
14
|
+
// the id minted for a second `Foo`, one of the two schemas was dropped from the
|
|
15
|
+
// document outright, and the surviving `$ref` documented the wrong type.
|
|
16
|
+
//
|
|
17
|
+
// The per-base counter that survives is an optimization only. Uniqueness must
|
|
18
|
+
// rest on the taken set, so a stale or wrong counter has to cost a scan rather
|
|
19
|
+
// than a collision.
|
|
20
|
+
//
|
|
21
|
+
// 1. Allocate a free base name, then its duplicates in order.
|
|
22
|
+
// 2. Allocate against a taken set that already owns every id a base name would
|
|
23
|
+
// mint, including the ids its minted ids would mint.
|
|
24
|
+
// 3. Prove a real type's name is never overwritten by an invented one, in
|
|
25
|
+
// either discovery order.
|
|
26
|
+
// 4. Prove a cross-base-name collision, which no counter can see, is still
|
|
27
|
+
// kept apart by the set.
|
|
28
|
+
// 5. Prove the counter is honored when it is right and overridden when it is
|
|
29
|
+
// wrong.
|
|
30
|
+
func TestMetadataCollectionNameAllocation(t *testing.T) {
|
|
31
|
+
grammar := regexp.MustCompile(`^[a-zA-Z0-9.\-_]+$`)
|
|
32
|
+
allocate := func(taken map[string]bool, name string, from int) string {
|
|
33
|
+
allocated, index := metadataCollection_allocateName(taken, name, from)
|
|
34
|
+
if index < from {
|
|
35
|
+
t.Fatalf("allocator moved the counter backwards: name=%q from=%d index=%d", name, from, index)
|
|
36
|
+
}
|
|
37
|
+
taken[allocated] = true
|
|
38
|
+
return allocated
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
// 1. A FREE NAME KEEPS ITSELF; DUPLICATES COUNT UP
|
|
42
|
+
taken := map[string]bool{}
|
|
43
|
+
ordered := []string{}
|
|
44
|
+
for i := 0; i != 3; i++ {
|
|
45
|
+
ordered = append(ordered, allocate(taken, "Foo", i))
|
|
46
|
+
}
|
|
47
|
+
if ordered[0] != "Foo" {
|
|
48
|
+
t.Fatalf("a free base name lost its own name: actual=%q", ordered[0])
|
|
49
|
+
}
|
|
50
|
+
for i, allocated := range ordered {
|
|
51
|
+
for j, other := range ordered {
|
|
52
|
+
if i != j && allocated == other {
|
|
53
|
+
t.Fatalf("duplicate allocation collided: index=%d other=%d id=%q", i, j, allocated)
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
if grammar.MatchString(allocated) == false {
|
|
57
|
+
t.Fatalf("illegal allocated component key: id=%q", allocated)
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
// 2. A MINTED ID NEVER SQUATS A NAME ANOTHER TYPE ALREADY OWNS
|
|
62
|
+
//
|
|
63
|
+
// Every id these base names can mint is pre-taken by the loop itself, so the
|
|
64
|
+
// allocator can only pass by consulting the whole taken set.
|
|
65
|
+
for _, name := range []string{"Foo", "Qualified.Member", "Escaped-x0", "_"} {
|
|
66
|
+
reserved := map[string]bool{}
|
|
67
|
+
for i := 0; i != 8; i++ {
|
|
68
|
+
allocated, _ := metadataCollection_allocateName(reserved, name, 0)
|
|
69
|
+
if reserved[allocated] {
|
|
70
|
+
t.Fatalf("allocator handed out a taken id: name=%q id=%q", name, allocated)
|
|
71
|
+
}
|
|
72
|
+
if grammar.MatchString(allocated) == false {
|
|
73
|
+
t.Fatalf("illegal allocated component key: name=%q id=%q", name, allocated)
|
|
74
|
+
}
|
|
75
|
+
reserved[allocated] = true
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
// 3. A REAL TYPE'S NAME IS NEVER OVERWRITTEN BY AN INVENTED ONE
|
|
80
|
+
//
|
|
81
|
+
// The real `namespace Foo { interface o1 }` member owns `Foo.o1`. Whichever
|
|
82
|
+
// order the two arrive in, both must survive with distinct ids.
|
|
83
|
+
for _, order := range [][]string{
|
|
84
|
+
{"Foo", "Foo", "Foo.o1"},
|
|
85
|
+
{"Foo.o1", "Foo", "Foo"},
|
|
86
|
+
} {
|
|
87
|
+
reserved := map[string]bool{}
|
|
88
|
+
counters := map[string]int{}
|
|
89
|
+
allocations := []string{}
|
|
90
|
+
for _, name := range order {
|
|
91
|
+
allocated, index := metadataCollection_allocateName(reserved, name, counters[name])
|
|
92
|
+
reserved[allocated] = true
|
|
93
|
+
counters[name] = index + 1
|
|
94
|
+
allocations = append(allocations, allocated)
|
|
95
|
+
}
|
|
96
|
+
if len(reserved) != len(order) {
|
|
97
|
+
t.Fatalf("distinct types collapsed onto one id: order=%v allocations=%v", order, allocations)
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
// 4. A COUNTER CANNOT SEE ACROSS BASE NAMES; THE TAKEN SET CAN
|
|
102
|
+
//
|
|
103
|
+
// This is the class the set exists for, and nothing else covers it. A second
|
|
104
|
+
// `GenNs` mints `GenNs-o1` from its own counter, while `Gen<Ns.o1>` normalizes
|
|
105
|
+
// to the base name `GenNs-o1` and mints that from a different counter. Neither
|
|
106
|
+
// counter can see the other. Both orders must keep three types apart.
|
|
107
|
+
for _, order := range [][]string{
|
|
108
|
+
{"GenNs", "GenNs", "Gen<Ns.o1>"},
|
|
109
|
+
{"Gen<Ns.o1>", "GenNs", "GenNs"},
|
|
110
|
+
} {
|
|
111
|
+
reserved := map[string]bool{}
|
|
112
|
+
counters := map[string]int{}
|
|
113
|
+
allocations := []string{}
|
|
114
|
+
for _, declared := range order {
|
|
115
|
+
name := MetadataCollection_replaceOpenApi(declared)
|
|
116
|
+
allocated, index := metadataCollection_allocateName(reserved, name, counters[name])
|
|
117
|
+
reserved[allocated] = true
|
|
118
|
+
counters[name] = index + 1
|
|
119
|
+
allocations = append(allocations, allocated)
|
|
120
|
+
}
|
|
121
|
+
if len(reserved) != len(order) {
|
|
122
|
+
t.Fatalf("a cross-base-name collision dropped a type: order=%v allocations=%v", order, allocations)
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
|
|
126
|
+
// 5. THE COUNTER IS AN OPTIMIZATION, NOT THE UNIQUENESS ARGUMENT
|
|
127
|
+
//
|
|
128
|
+
// A right counter settles where it starts, and that returned index is the
|
|
129
|
+
// whole point: every anonymous type shares the name `__type`, so an allocator
|
|
130
|
+
// that rescanned the run from zero each time would be quadratic in a
|
|
131
|
+
// program's anonymous type count.
|
|
132
|
+
run := map[string]bool{}
|
|
133
|
+
for i := 0; i != 64; i++ {
|
|
134
|
+
run[metadataCollection_composeName("__type", i)] = true
|
|
135
|
+
}
|
|
136
|
+
if _, index := metadataCollection_allocateName(run, "__type", 64); index != 64 {
|
|
137
|
+
t.Fatalf("a correct counter was not honored: index=%d expected=64", index)
|
|
138
|
+
}
|
|
139
|
+
// A wrong counter costs a scan, never a collision.
|
|
140
|
+
allocated, index := metadataCollection_allocateName(run, "__type", 0)
|
|
141
|
+
if run[allocated] {
|
|
142
|
+
t.Fatalf("a stale counter handed out a taken id: id=%q", allocated)
|
|
143
|
+
}
|
|
144
|
+
if index != 64 {
|
|
145
|
+
t.Fatalf("a stale counter did not scan to the first free id: index=%d expected=64", index)
|
|
146
|
+
}
|
|
147
|
+
}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
package metadata
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"strings"
|
|
5
|
+
"testing"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
// TestMetadataCollectionOpenApiNameCascade verifies the allocator never invents
|
|
9
|
+
// a namespace parent for an escaped component name.
|
|
10
|
+
//
|
|
11
|
+
// JsonDescriptor.cascade reads every dotted prefix of a component key as a
|
|
12
|
+
// parent namespace and inherits that parent's description. A disambiguating
|
|
13
|
+
// suffix joined with "." would therefore present an escaped name's own base as
|
|
14
|
+
// a fake parent, and an unrelated component owning that base would leak its
|
|
15
|
+
// description into the escaped type's schema.
|
|
16
|
+
//
|
|
17
|
+
// 1. Allocate a legal name and the escaped name that shares its base.
|
|
18
|
+
// 2. Collect every dotted prefix each allocation exposes.
|
|
19
|
+
// 3. Require no allocation to expose another allocation as its parent.
|
|
20
|
+
func TestMetadataCollectionOpenApiNameCascade(t *testing.T) {
|
|
21
|
+
inputs := []string{
|
|
22
|
+
"A_x2F_B",
|
|
23
|
+
"A/B",
|
|
24
|
+
"Recursive",
|
|
25
|
+
`Recursive<"">`,
|
|
26
|
+
`Recursive<"A/B">`,
|
|
27
|
+
"Qualified.Member",
|
|
28
|
+
"Café",
|
|
29
|
+
"$Plain",
|
|
30
|
+
"",
|
|
31
|
+
}
|
|
32
|
+
allocated := map[string]string{}
|
|
33
|
+
for _, input := range inputs {
|
|
34
|
+
output := MetadataCollection_replaceOpenApi(input)
|
|
35
|
+
if previous, ok := allocated[output]; ok {
|
|
36
|
+
t.Fatalf("allocation collided: %q and %q both produced %q", previous, input, output)
|
|
37
|
+
}
|
|
38
|
+
allocated[output] = input
|
|
39
|
+
}
|
|
40
|
+
for output, input := range allocated {
|
|
41
|
+
segments := strings.Split(output, ".")
|
|
42
|
+
for i := 1; i < len(segments); i++ {
|
|
43
|
+
parent := strings.Join(segments[:i], ".")
|
|
44
|
+
if owner, ok := allocated[parent]; ok {
|
|
45
|
+
t.Fatalf(
|
|
46
|
+
"allocation %q (from %q) claims unrelated allocation %q (from %q) as a namespace parent",
|
|
47
|
+
output,
|
|
48
|
+
input,
|
|
49
|
+
parent,
|
|
50
|
+
owner,
|
|
51
|
+
)
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
package metadata
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"regexp"
|
|
5
|
+
"testing"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
// TestMetadataCollectionOpenApiName verifies the OpenAPI-specific metadata
|
|
9
|
+
// name allocator preserves legal controls while encoding every other rune.
|
|
10
|
+
//
|
|
11
|
+
// The schema generators use the allocated name as both a Components Object
|
|
12
|
+
// key and a local-reference token. Deleting punctuation is insufficient:
|
|
13
|
+
// distinct names can collapse, and the surviving key can still violate OAS.
|
|
14
|
+
//
|
|
15
|
+
// 1. Preserve ordinary, dotted, hyphenated, and underscored legal controls.
|
|
16
|
+
// 2. Encode empty, punctuation, percent, fragment, and Unicode boundaries.
|
|
17
|
+
// 3. Prove formerly colliding inputs remain legal, distinct, and repeatable.
|
|
18
|
+
func TestMetadataCollectionOpenApiName(t *testing.T) {
|
|
19
|
+
legal := map[string]string{
|
|
20
|
+
"Plain": "Plain",
|
|
21
|
+
"Qualified.Member": "Qualified.Member",
|
|
22
|
+
"A-B": "A-B",
|
|
23
|
+
"A_B": "A_B",
|
|
24
|
+
"A_x2F_B": "A_x2F_B",
|
|
25
|
+
"_": "_",
|
|
26
|
+
"Recursive": "Recursive",
|
|
27
|
+
}
|
|
28
|
+
outputs := map[string]string{}
|
|
29
|
+
for input, expected := range legal {
|
|
30
|
+
actual := MetadataCollection_replaceOpenApi(input)
|
|
31
|
+
if actual != expected {
|
|
32
|
+
t.Fatalf("legal OpenAPI component name changed: input=%q actual=%q expected=%q", input, actual, expected)
|
|
33
|
+
}
|
|
34
|
+
outputs[actual] = input
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
inputs := []string{
|
|
38
|
+
"",
|
|
39
|
+
"$Plain",
|
|
40
|
+
"A/B",
|
|
41
|
+
`Recursive<"">`,
|
|
42
|
+
`Recursive<"A/B">`,
|
|
43
|
+
`Recursive<"T~N">`,
|
|
44
|
+
`Recursive<"C%D">`,
|
|
45
|
+
`Recursive<"A#B">`,
|
|
46
|
+
`Recursive<"A B">`,
|
|
47
|
+
`Recursive<"A:B">`,
|
|
48
|
+
`Recursive<"AB">`,
|
|
49
|
+
`Recursive<"///">`,
|
|
50
|
+
"Café",
|
|
51
|
+
"한글",
|
|
52
|
+
}
|
|
53
|
+
grammar := regexp.MustCompile(`^[a-zA-Z0-9.\-_]+$`)
|
|
54
|
+
for _, input := range inputs {
|
|
55
|
+
first := MetadataCollection_replaceOpenApi(input)
|
|
56
|
+
second := MetadataCollection_replaceOpenApi(input)
|
|
57
|
+
if first != second {
|
|
58
|
+
t.Fatalf("OpenAPI component allocation is not repeatable: input=%q first=%q second=%q", input, first, second)
|
|
59
|
+
}
|
|
60
|
+
if grammar.MatchString(first) == false {
|
|
61
|
+
t.Fatalf("illegal OpenAPI component name: input=%q output=%q", input, first)
|
|
62
|
+
}
|
|
63
|
+
if previous, ok := outputs[first]; ok && previous != input {
|
|
64
|
+
t.Fatalf("OpenAPI component allocation collided: first=%q second=%q output=%q", previous, input, first)
|
|
65
|
+
}
|
|
66
|
+
outputs[first] = input
|
|
67
|
+
}
|
|
68
|
+
}
|
|
@@ -38,6 +38,19 @@ func (patternUtilNamespace) Escape(str string) string {
|
|
|
38
38
|
builder.WriteRune(ch)
|
|
39
39
|
case '-':
|
|
40
40
|
builder.WriteString("\\x2d")
|
|
41
|
+
// The four ECMAScript LineTerminators cannot appear raw inside a regex
|
|
42
|
+
// literal (`RegExp(/.../)`) -- the sink every structural pattern feeds -- so a
|
|
43
|
+
// raw one turns the emitted module into a SyntaxError. Emit the regex escape
|
|
44
|
+
// instead; it stays valid in the literal and keeps matching the terminator
|
|
45
|
+
// (#2211).
|
|
46
|
+
case '\n':
|
|
47
|
+
builder.WriteString("\\n")
|
|
48
|
+
case '\r':
|
|
49
|
+
builder.WriteString("\\r")
|
|
50
|
+
case '\u2028':
|
|
51
|
+
builder.WriteString("\\u2028")
|
|
52
|
+
case '\u2029':
|
|
53
|
+
builder.WriteString("\\u2029")
|
|
41
54
|
default:
|
|
42
55
|
builder.WriteRune(ch)
|
|
43
56
|
}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
package utils
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
shimast "github.com/microsoft/typescript-go/shim/ast"
|
|
5
|
+
shimchecker "github.com/microsoft/typescript-go/shim/checker"
|
|
6
|
+
)
|
|
7
|
+
|
|
8
|
+
type promiseTypeFactoryNamespace struct{}
|
|
9
|
+
|
|
10
|
+
var PromiseTypeFactory = promiseTypeFactoryNamespace{}
|
|
11
|
+
|
|
12
|
+
type PromiseTypeFactory_IOutput struct {
|
|
13
|
+
Type *shimchecker.Type
|
|
14
|
+
Async bool
|
|
15
|
+
}
|
|
16
|
+
|
|
17
|
+
func (promiseTypeFactoryNamespace) Resolve(checker *shimchecker.Checker, t *shimchecker.Type) PromiseTypeFactory_IOutput {
|
|
18
|
+
if checker != nil && t != nil {
|
|
19
|
+
promised := checker.GetPromisedTypeOfPromise(t)
|
|
20
|
+
if promised != nil && PromiseTypeFactory.satisfiesGlobalContract(checker, t) {
|
|
21
|
+
return PromiseTypeFactory_IOutput{
|
|
22
|
+
Type: promised,
|
|
23
|
+
Async: true,
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return PromiseTypeFactory_IOutput{
|
|
28
|
+
Type: t,
|
|
29
|
+
Async: false,
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
func (promiseTypeFactoryNamespace) satisfiesGlobalContract(checker *shimchecker.Checker, t *shimchecker.Type) bool {
|
|
34
|
+
symbol := checker.GetGlobalSymbol("Promise", shimast.SymbolFlagsValue, nil)
|
|
35
|
+
if symbol == nil {
|
|
36
|
+
return false
|
|
37
|
+
}
|
|
38
|
+
constructor := checker.GetTypeOfSymbol(symbol)
|
|
39
|
+
if constructor == nil {
|
|
40
|
+
return false
|
|
41
|
+
}
|
|
42
|
+
contract := checker.GetTypeOfPropertyOfType(constructor, "prototype")
|
|
43
|
+
if contract == nil {
|
|
44
|
+
return false
|
|
45
|
+
}
|
|
46
|
+
for _, property := range checker.GetPropertiesOfType(contract) {
|
|
47
|
+
if property.Name == "then" || (len(property.Name) != 0 && property.Name[0] == 0xfe) {
|
|
48
|
+
// GetPromisedTypeOfPromise verifies the thenable shape. Conditional
|
|
49
|
+
// Promise inference ignores well-known-symbol augmentations.
|
|
50
|
+
continue
|
|
51
|
+
}
|
|
52
|
+
required := checker.GetTypeOfPropertyOfType(contract, property.Name)
|
|
53
|
+
candidate := checker.GetTypeOfPropertyOfType(t, property.Name)
|
|
54
|
+
if required == nil || candidate == nil || !checker.IsTypeAssignableTo(candidate, required) {
|
|
55
|
+
return false
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
return true
|
|
59
|
+
}
|
|
@@ -44,4 +44,12 @@ var protobufNameEncoder_replacers = []protobufNameEncoder_replacer{
|
|
|
44
44
|
{Before: "'", After: "_singlequote_"},
|
|
45
45
|
{Before: "\"", After: "_doublequote_"},
|
|
46
46
|
{Before: " ", After: "_space_"},
|
|
47
|
+
// A Protocol Buffers message name is an identifier, so a hyphen has to be
|
|
48
|
+
// encoded like any other rune the grammar rejects. It is not exotic: the
|
|
49
|
+
// metadata collection joins a duplicated name's counter with one, and a
|
|
50
|
+
// quoted type argument can carry one of its own, as `Gen<"a-b">` does. The
|
|
51
|
+
// dot is deliberately absent from this table — `protobufMessageProgrammer_emplace`
|
|
52
|
+
// splits a name on it to nest a namespace member in its parent's message, and
|
|
53
|
+
// a qualified reference is legal in the grammar.
|
|
54
|
+
{Before: "-", After: "_hyphen_"},
|
|
47
55
|
}
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
package utils
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"os"
|
|
5
|
+
"path/filepath"
|
|
6
|
+
"testing"
|
|
7
|
+
|
|
8
|
+
shimchecker "github.com/microsoft/typescript-go/shim/checker"
|
|
9
|
+
"github.com/samchon/ttsc/packages/ttsc/driver"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// TestPromiseTypeFactorySemantics verifies semantic promised-type resolution.
|
|
13
|
+
//
|
|
14
|
+
// Promise identity is structural in the checker rather than a symbol spelling.
|
|
15
|
+
// Derived classes, interfaces, and branded intersections must unwrap while an
|
|
16
|
+
// unrelated class named Promise and weaker PromiseLike contracts must remain
|
|
17
|
+
// synchronous, even when a thenable adds only part of the Promise surface.
|
|
18
|
+
//
|
|
19
|
+
// 1. Load ten return-shape declarations through the real checker.
|
|
20
|
+
// 2. Resolve the fulfilled type for every genuine Promise shape.
|
|
21
|
+
// 3. Reject plain, partial, and malformed PromiseLike controls without replacing their types.
|
|
22
|
+
func TestPromiseTypeFactorySemantics(t *testing.T) {
|
|
23
|
+
dir := t.TempDir()
|
|
24
|
+
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(`{
|
|
25
|
+
"compilerOptions": {
|
|
26
|
+
"target": "ES2022",
|
|
27
|
+
"module": "commonjs",
|
|
28
|
+
"moduleResolution": "bundler",
|
|
29
|
+
"ignoreDeprecations": "6.0",
|
|
30
|
+
"strict": true,
|
|
31
|
+
"skipLibCheck": true
|
|
32
|
+
},
|
|
33
|
+
"include": ["src"]
|
|
34
|
+
}`), 0o644); err != nil {
|
|
35
|
+
t.Fatalf("write tsconfig: %v", err)
|
|
36
|
+
}
|
|
37
|
+
if err := os.MkdirAll(filepath.Join(dir, "src"), 0o755); err != nil {
|
|
38
|
+
t.Fatalf("mkdir src: %v", err)
|
|
39
|
+
}
|
|
40
|
+
if err := os.WriteFile(filepath.Join(dir, "src", "main.ts"), []byte(`
|
|
41
|
+
class DerivedPromise<T> extends Promise<T> {}
|
|
42
|
+
interface InterfacePromise<T> extends Promise<T> {}
|
|
43
|
+
type BrandedPromise<T> = Promise<T> & { readonly __brand: unique symbol };
|
|
44
|
+
type CatchablePromiseLike<T> = PromiseLike<T> & {
|
|
45
|
+
catch(onrejected?: (reason: any) => any): CatchablePromiseLike<T>;
|
|
46
|
+
};
|
|
47
|
+
type MalformedPromiseLike<T> = PromiseLike<T> & {
|
|
48
|
+
catch(): number;
|
|
49
|
+
finally(): number;
|
|
50
|
+
};
|
|
51
|
+
namespace Shadow { export class Promise<T> { public constructor(public value: T) {} } }
|
|
52
|
+
let builtin!: Promise<string>;
|
|
53
|
+
let derivedClass!: DerivedPromise<number>;
|
|
54
|
+
let derivedInterface!: InterfacePromise<boolean>;
|
|
55
|
+
let branded!: BrandedPromise<bigint>;
|
|
56
|
+
let shadowed!: Shadow.Promise<Date>;
|
|
57
|
+
let synchronous!: { value: RegExp };
|
|
58
|
+
let promiseLike!: PromiseLike<string>;
|
|
59
|
+
let structural!: Pick<Promise<URL>, "then" | "catch" | "finally">;
|
|
60
|
+
let catchablePromiseLike!: CatchablePromiseLike<string>;
|
|
61
|
+
let malformedPromiseLike!: MalformedPromiseLike<string>;
|
|
62
|
+
const structuralBoundary: Pick<Promise<URL>, "then" | "catch" | "finally"> extends Promise<infer _> ? true : false = true;
|
|
63
|
+
const catchableBoundary: CatchablePromiseLike<string> extends Promise<infer _> ? true : false = false;
|
|
64
|
+
const malformedBoundary: MalformedPromiseLike<string> extends Promise<infer _> ? true : false = false;
|
|
65
|
+
`), 0o644); err != nil {
|
|
66
|
+
t.Fatalf("write source: %v", err)
|
|
67
|
+
}
|
|
68
|
+
program, diagnostics, err := driver.LoadProgram(dir, "tsconfig.json", driver.LoadProgramOptions{})
|
|
69
|
+
if err != nil {
|
|
70
|
+
t.Fatalf("load program: %v", err)
|
|
71
|
+
}
|
|
72
|
+
if len(diagnostics) != 0 {
|
|
73
|
+
t.Fatalf("fixture diagnostics: %+v", diagnostics)
|
|
74
|
+
}
|
|
75
|
+
defer program.Close()
|
|
76
|
+
|
|
77
|
+
source := program.SourceFile(filepath.Join(dir, "src", "main.ts"))
|
|
78
|
+
if source == nil || source.Statements == nil || len(source.Statements.Nodes) != 19 {
|
|
79
|
+
t.Fatal("fixture declarations were not loaded")
|
|
80
|
+
}
|
|
81
|
+
variableType := func(index int) *shimchecker.Type {
|
|
82
|
+
declaration := source.Statements.Nodes[index].AsVariableStatement().DeclarationList.AsVariableDeclarationList().Declarations.Nodes[0]
|
|
83
|
+
return program.Checker.GetTypeAtLocation(declaration)
|
|
84
|
+
}
|
|
85
|
+
tests := []struct {
|
|
86
|
+
name string
|
|
87
|
+
index int
|
|
88
|
+
async bool
|
|
89
|
+
fulfilled string
|
|
90
|
+
}{
|
|
91
|
+
{"builtin", 6, true, "string"},
|
|
92
|
+
{"derived-class", 7, true, "number"},
|
|
93
|
+
{"derived-interface", 8, true, "boolean"},
|
|
94
|
+
{"branded-intersection", 9, true, "bigint"},
|
|
95
|
+
{"shadowed-name", 10, false, ""},
|
|
96
|
+
{"synchronous", 11, false, ""},
|
|
97
|
+
{"promise-like", 12, false, ""},
|
|
98
|
+
{"structural", 13, true, "URL"},
|
|
99
|
+
{"catchable-promise-like", 14, false, ""},
|
|
100
|
+
{"malformed-promise-like", 15, false, ""},
|
|
101
|
+
}
|
|
102
|
+
for _, tc := range tests {
|
|
103
|
+
t.Run(tc.name, func(t *testing.T) {
|
|
104
|
+
input := variableType(tc.index)
|
|
105
|
+
output := PromiseTypeFactory.Resolve(program.Checker, input)
|
|
106
|
+
if output.Async != tc.async {
|
|
107
|
+
t.Fatalf("async mismatch: got %v, want %v", output.Async, tc.async)
|
|
108
|
+
}
|
|
109
|
+
if tc.async {
|
|
110
|
+
if got := program.Checker.TypeToString(output.Type); got != tc.fulfilled {
|
|
111
|
+
t.Fatalf("fulfilled type mismatch: got %q, want %q", got, tc.fulfilled)
|
|
112
|
+
}
|
|
113
|
+
} else if output.Type != input {
|
|
114
|
+
t.Fatal("non-Promise type was replaced")
|
|
115
|
+
}
|
|
116
|
+
})
|
|
117
|
+
}
|
|
118
|
+
}
|
package/native/go.mod
CHANGED
|
@@ -2,6 +2,14 @@ module github.com/samchon/typia/packages/typia/native
|
|
|
2
2
|
|
|
3
3
|
go 1.26
|
|
4
4
|
|
|
5
|
+
// Build-time floor: the driver reference-graph SDK
|
|
6
|
+
// (driver.NewTransformGraph / driver.TransformGraph / driver.TransformOutputKey)
|
|
7
|
+
// this plugin consumes exists only in ttsc >= 0.19.2. That floor is enforced
|
|
8
|
+
// through typia's package.json peerDependencies (ttsc / @ttsc/unplugin), not
|
|
9
|
+
// here: ttsc builds this plugin from source on the user's machine and its
|
|
10
|
+
// buildSourcePlugin generates `replace github.com/samchon/ttsc/packages/ttsc
|
|
11
|
+
// v0.0.0 => <installed ttsc root>`, so the require below must stay v0.0.0 or the
|
|
12
|
+
// generated replace no longer matches and the plugin build fails to resolve.
|
|
5
13
|
require (
|
|
6
14
|
github.com/microsoft/typescript-go/shim/ast v0.0.0
|
|
7
15
|
github.com/microsoft/typescript-go/shim/checker v0.0.0
|
|
@@ -11,6 +19,7 @@ require (
|
|
|
11
19
|
github.com/microsoft/typescript-go/shim/printer v0.0.0
|
|
12
20
|
github.com/microsoft/typescript-go/shim/scanner v0.0.0
|
|
13
21
|
github.com/samchon/ttsc/packages/ttsc v0.0.0
|
|
22
|
+
golang.org/x/text v0.36.0
|
|
14
23
|
)
|
|
15
24
|
|
|
16
25
|
require (
|
|
@@ -27,5 +36,4 @@ require (
|
|
|
27
36
|
github.com/zeebo/xxh3 v1.1.0 // indirect
|
|
28
37
|
golang.org/x/sync v0.20.0 // indirect
|
|
29
38
|
golang.org/x/sys v0.43.0 // indirect
|
|
30
|
-
golang.org/x/text v0.36.0 // indirect
|
|
31
39
|
)
|
|
@@ -9,6 +9,7 @@ import (
|
|
|
9
9
|
nativeprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers"
|
|
10
10
|
nativefunctionalprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers/functional"
|
|
11
11
|
nativenotationprogrammers "github.com/samchon/typia/packages/typia/native/core/programmers/notations"
|
|
12
|
+
schemametadata "github.com/samchon/typia/packages/typia/native/core/schemas/metadata"
|
|
12
13
|
nativefeatures "github.com/samchon/typia/packages/typia/native/transform/features"
|
|
13
14
|
nativecomparetransformers "github.com/samchon/typia/packages/typia/native/transform/features/compare"
|
|
14
15
|
nativefunctionaltransformers "github.com/samchon/typia/packages/typia/native/transform/features/functional"
|
|
@@ -86,6 +87,17 @@ func (callExpressionTransformerNamespace) TransformKnown(props CallExpressionTra
|
|
|
86
87
|
if ok == false {
|
|
87
88
|
return props.Expression.AsNode()
|
|
88
89
|
}
|
|
90
|
+
// Report the WRITTEN type arguments of the typia call to the dependency
|
|
91
|
+
// listener (project transform mode only; a no-op otherwise). The metadata
|
|
92
|
+
// analysis touches every checker type it reads, but a top-level alias of an
|
|
93
|
+
// intrinsic (`typia.validate<Id>()` with `type Id = string` elsewhere) leaves
|
|
94
|
+
// no symbol on the resolved type, so the call site's own syntax is the only
|
|
95
|
+
// anchor that registers such an alias' declaring file.
|
|
96
|
+
if props.Expression.TypeArguments != nil {
|
|
97
|
+
for _, argument := range props.Expression.TypeArguments.Nodes {
|
|
98
|
+
schemametadata.MetadataDependency_touchTypeNode(props.Context.Checker, argument)
|
|
99
|
+
}
|
|
100
|
+
}
|
|
89
101
|
// Keep the full callee expression (e.g. `typia.assertEquals`) as the modulo,
|
|
90
102
|
// mirroring the TypeScript transformer. Programmers render it into the
|
|
91
103
|
// TypeGuardError method label via nativehelpers.ModuloMethodText, which reads
|
|
@@ -43,7 +43,7 @@ func (jsonApplicationTransformerNamespace) Transform(props nativetransform.ITran
|
|
|
43
43
|
|
|
44
44
|
typ := props.Context.Checker.GetTypeFromTypeNode(top)
|
|
45
45
|
collection := schemametadata.NewMetadataCollection(&schemametadata.MetadataCollection_IOptions{
|
|
46
|
-
Replace: schemametadata.
|
|
46
|
+
Replace: schemametadata.MetadataCollection_replaceOpenApi,
|
|
47
47
|
})
|
|
48
48
|
result := nativefactories.MetadataFactory.Analyze(nativefactories.MetadataFactory_IProps{
|
|
49
49
|
Checker: props.Context.Checker,
|
|
@@ -66,7 +66,7 @@ func (jsonSchemaTransformerNamespace) Transform(props nativetransform.ITransform
|
|
|
66
66
|
Validate: validator,
|
|
67
67
|
},
|
|
68
68
|
Components: schemametadata.NewMetadataCollection(&schemametadata.MetadataCollection_IOptions{
|
|
69
|
-
Replace: schemametadata.
|
|
69
|
+
Replace: schemametadata.MetadataCollection_replaceOpenApi,
|
|
70
70
|
}),
|
|
71
71
|
Type: typ,
|
|
72
72
|
})
|
|
@@ -64,6 +64,9 @@ func (jsonSchemasTransformerNamespace) Transform(props nativetransform.ITransfor
|
|
|
64
64
|
analyze := func(validate bool) []*schemametadata.MetadataSchema {
|
|
65
65
|
metadatas := []*schemametadata.MetadataSchema{}
|
|
66
66
|
errors := []nativefactories.MetadataFactory_IError{}
|
|
67
|
+
collection := schemametadata.NewMetadataCollection(&schemametadata.MetadataCollection_IOptions{
|
|
68
|
+
Replace: schemametadata.MetadataCollection_replaceOpenApi,
|
|
69
|
+
})
|
|
67
70
|
var validator nativefactories.MetadataFactory_Validator
|
|
68
71
|
if validate {
|
|
69
72
|
validator = jsonTransformer_schemasValidator
|
|
@@ -77,10 +80,8 @@ func (jsonSchemasTransformerNamespace) Transform(props nativetransform.ITransfor
|
|
|
77
80
|
Escape: true,
|
|
78
81
|
Validate: validator,
|
|
79
82
|
},
|
|
80
|
-
Components:
|
|
81
|
-
|
|
82
|
-
}),
|
|
83
|
-
Type: typ,
|
|
83
|
+
Components: collection,
|
|
84
|
+
Type: typ,
|
|
84
85
|
})
|
|
85
86
|
if result.Success == false {
|
|
86
87
|
errors = append(errors, result.Errors...)
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typia",
|
|
3
|
-
"version": "13.1.
|
|
3
|
+
"version": "13.1.19",
|
|
4
4
|
"description": "Superfast runtime validators with only one line",
|
|
5
5
|
"main": "lib/index.js",
|
|
6
6
|
"exports": {
|
|
@@ -50,8 +50,20 @@
|
|
|
50
50
|
"inquirer": "^8.2.5",
|
|
51
51
|
"randexp": "^0.5.3",
|
|
52
52
|
"tinyglobby": "^0.2.12",
|
|
53
|
-
"@typia/interface": "^13.1.
|
|
54
|
-
"@typia/utils": "^13.1.
|
|
53
|
+
"@typia/interface": "^13.1.19",
|
|
54
|
+
"@typia/utils": "^13.1.19"
|
|
55
|
+
},
|
|
56
|
+
"peerDependencies": {
|
|
57
|
+
"@ttsc/unplugin": ">=0.19.2",
|
|
58
|
+
"ttsc": ">=0.19.2"
|
|
59
|
+
},
|
|
60
|
+
"peerDependenciesMeta": {
|
|
61
|
+
"@ttsc/unplugin": {
|
|
62
|
+
"optional": true
|
|
63
|
+
},
|
|
64
|
+
"ttsc": {
|
|
65
|
+
"optional": true
|
|
66
|
+
}
|
|
55
67
|
},
|
|
56
68
|
"devDependencies": {
|
|
57
69
|
"@types/inquirer": "^8.2.5",
|
|
@@ -60,7 +72,7 @@
|
|
|
60
72
|
"rimraf": "^6.1.2",
|
|
61
73
|
"rolldown": "^1.1.5",
|
|
62
74
|
"suppress-warnings": "^1.0.2",
|
|
63
|
-
"ttsc": "^0.
|
|
75
|
+
"ttsc": "^0.19.2",
|
|
64
76
|
"typescript": "^7.0.2"
|
|
65
77
|
},
|
|
66
78
|
"sideEffects": false,
|