typia 13.1.0 → 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 +134 -7
- 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/js_doc_link_text_test.go +69 -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
|
@@ -1,63 +1,63 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports._randomNumber = void 0;
|
|
4
|
+
const _randomMultiple_1 = require("./_randomMultiple");
|
|
4
5
|
const _randomNumber = (schema) => {
|
|
5
|
-
var _a, _b, _c, _d, _e, _f
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
const maximum = (_f = (_e = schema.maximum) !== null && _e !== void 0 ? _e : schema.exclusiveMaximum) !== null && _f !== void 0 ? _f : ((_g = schema.multipleOf) !== null && _g !== void 0 ? _g : 1) *
|
|
11
|
-
(schema.minimum === undefined && schema.exclusiveMinimum === undefined
|
|
12
|
-
? 100
|
|
13
|
-
: ((_h = schema.minimum) !== null && _h !== void 0 ? _h : schema.exclusiveMinimum) + 100);
|
|
6
|
+
var _a, _b, _c, _d, _e, _f;
|
|
7
|
+
const lower = getLowerBoundary(schema);
|
|
8
|
+
const upper = getUpperBoundary(schema);
|
|
9
|
+
const minimum = (_a = lower === null || lower === void 0 ? void 0 : lower.value) !== null && _a !== void 0 ? _a : (upper === null ? 0 : upper.value - 100);
|
|
10
|
+
const maximum = (_b = upper === null || upper === void 0 ? void 0 : upper.value) !== null && _b !== void 0 ? _b : (lower === null ? 100 : lower.value + 100);
|
|
14
11
|
if (minimum > maximum)
|
|
15
12
|
throw new Error("Minimum value is greater than maximum value.");
|
|
16
13
|
return schema.multipleOf === undefined
|
|
17
14
|
? scalar({
|
|
18
15
|
minimum,
|
|
19
16
|
maximum,
|
|
20
|
-
exclusiveMinimum:
|
|
21
|
-
exclusiveMaximum:
|
|
17
|
+
exclusiveMinimum: (_c = lower === null || lower === void 0 ? void 0 : lower.exclusive) !== null && _c !== void 0 ? _c : false,
|
|
18
|
+
exclusiveMaximum: (_d = upper === null || upper === void 0 ? void 0 : upper.exclusive) !== null && _d !== void 0 ? _d : false,
|
|
22
19
|
})
|
|
23
|
-
:
|
|
20
|
+
: (0, _randomMultiple_1._randomMultiple)({
|
|
24
21
|
minimum,
|
|
25
22
|
maximum,
|
|
26
23
|
multipleOf: schema.multipleOf,
|
|
27
|
-
exclusiveMinimum:
|
|
28
|
-
exclusiveMaximum:
|
|
24
|
+
exclusiveMinimum: (_e = lower === null || lower === void 0 ? void 0 : lower.exclusive) !== null && _e !== void 0 ? _e : false,
|
|
25
|
+
exclusiveMaximum: (_f = upper === null || upper === void 0 ? void 0 : upper.exclusive) !== null && _f !== void 0 ? _f : false,
|
|
26
|
+
integer: false,
|
|
29
27
|
});
|
|
30
28
|
};
|
|
31
29
|
exports._randomNumber = _randomNumber;
|
|
32
|
-
const scalar = (
|
|
33
|
-
if (
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
return value;
|
|
30
|
+
const scalar = (props) => {
|
|
31
|
+
if (props.minimum === props.maximum &&
|
|
32
|
+
(props.exclusiveMinimum || props.exclusiveMaximum))
|
|
33
|
+
throw new Error("Exclusive numeric range is empty.");
|
|
34
|
+
const value = Math.random() * (props.maximum - props.minimum) + props.minimum;
|
|
35
|
+
if ((props.exclusiveMinimum && value === props.minimum) ||
|
|
36
|
+
(props.exclusiveMaximum && value === props.maximum)) {
|
|
37
|
+
const middle = props.minimum + (props.maximum - props.minimum) / 2;
|
|
38
|
+
if (middle <= props.minimum || middle >= props.maximum)
|
|
39
|
+
throw new Error("Exclusive numeric range has no representable value.");
|
|
40
|
+
return middle;
|
|
44
41
|
}
|
|
42
|
+
return value;
|
|
45
43
|
};
|
|
46
|
-
const
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
44
|
+
const getLowerBoundary = (schema) => selectBoundary(schema.minimum === undefined
|
|
45
|
+
? null
|
|
46
|
+
: { value: schema.minimum, exclusive: false }, schema.exclusiveMinimum === undefined
|
|
47
|
+
? null
|
|
48
|
+
: { value: schema.exclusiveMinimum, exclusive: true }, Math.max);
|
|
49
|
+
const getUpperBoundary = (schema) => selectBoundary(schema.maximum === undefined
|
|
50
|
+
? null
|
|
51
|
+
: { value: schema.maximum, exclusive: false }, schema.exclusiveMaximum === undefined
|
|
52
|
+
? null
|
|
53
|
+
: { value: schema.exclusiveMaximum, exclusive: true }, Math.min);
|
|
54
|
+
const selectBoundary = (x, y, compare) => {
|
|
55
|
+
if (x === null)
|
|
56
|
+
return y;
|
|
57
|
+
if (y === null)
|
|
58
|
+
return x;
|
|
59
|
+
if (x.value === y.value)
|
|
60
|
+
return { value: x.value, exclusive: x.exclusive || y.exclusive };
|
|
61
|
+
return compare(x.value, y.value) === x.value ? x : y;
|
|
62
62
|
};
|
|
63
63
|
//# sourceMappingURL=_randomNumber.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_randomNumber.js","sourceRoot":"","sources":["../../src/internal/_randomNumber.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"_randomNumber.js","sourceRoot":"","sources":["../../src/internal/_randomNumber.ts"],"names":[],"mappings":";;;AAEA,uDAAoD;AAE7C,MAAM,aAAa,GAAG,CAAC,MAAmC,EAAU,EAAE;;IAC3E,MAAM,KAAK,GAAqB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,KAAK,GAAqB,gBAAgB,CAAC,MAAM,CAAC,CAAC;IACzD,MAAM,OAAO,SACX,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC3D,MAAM,OAAO,SACX,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,KAAK,mCAAI,CAAC,KAAK,KAAK,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC;IAC7D,IAAI,OAAO,GAAG,OAAO;QACnB,MAAM,IAAI,KAAK,CAAC,8CAA8C,CAAC,CAAC;IAClE,OAAO,MAAM,CAAC,UAAU,KAAK,SAAS;QACpC,CAAC,CAAC,MAAM,CAAC;YACL,OAAO;YACP,OAAO;YACP,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;SAC5C,CAAC;QACJ,CAAC,CAAC,IAAA,iCAAe,EAAC;YACd,OAAO;YACP,OAAO;YACP,UAAU,EAAE,MAAM,CAAC,UAAU;YAC7B,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,gBAAgB,QAAE,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,mCAAI,KAAK;YAC3C,OAAO,EAAE,KAAK;SACf,CAAC,CAAC;AACT,CAAC,CAAC;AAxBW,QAAA,aAAa,GAAb,aAAa,CAwBxB;AAEF,MAAM,MAAM,GAAG,CAAC,KAKf,EAAU,EAAE;IACX,IACE,KAAK,CAAC,OAAO,KAAK,KAAK,CAAC,OAAO;QAC/B,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,CAAC,gBAAgB,CAAC;QAElD,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;IACvD,MAAM,KAAK,GACT,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC,OAAO,CAAC;IAClE,IACE,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC;QACnD,CAAC,KAAK,CAAC,gBAAgB,IAAI,KAAK,KAAK,KAAK,CAAC,OAAO,CAAC,EACnD,CAAC;QACD,MAAM,MAAM,GAAW,KAAK,CAAC,OAAO,GAAG,CAAC,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO;YACpD,MAAM,IAAI,KAAK,CAAC,qDAAqD,CAAC,CAAC;QACzE,OAAO,MAAM,CAAC;IAChB,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,gBAAgB,GAAG,CACvB,MAAmC,EACjB,EAAE,CACpB,cAAc,CACZ,MAAM,CAAC,OAAO,KAAK,SAAS;IAC1B,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAC/C,MAAM,CAAC,gBAAgB,KAAK,SAAS;IACnC,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,EACvD,IAAI,CAAC,GAAG,CACT,CAAC;AAEJ,MAAM,gBAAgB,GAAG,CACvB,MAAmC,EACjB,EAAE,CACpB,cAAc,CACZ,MAAM,CAAC,OAAO,KAAK,SAAS;IAC1B,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,EAC/C,MAAM,CAAC,gBAAgB,KAAK,SAAS;IACnC,CAAC,CAAC,IAAI;IACN,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,gBAAgB,EAAE,SAAS,EAAE,IAAI,EAAE,EACvD,IAAI,CAAC,GAAG,CACT,CAAC;AAEJ,MAAM,cAAc,GAAG,CACrB,CAAmB,EACnB,CAAmB,EACnB,OAAyC,EACvB,EAAE;IACpB,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,KAAK,IAAI;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,KAAK;QACrB,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,SAAS,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;IACnE,OAAO,OAAO,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD,CAAC,CAAC"}
|
|
@@ -1,43 +1,57 @@
|
|
|
1
|
+
import { _randomMultiple } from "./_randomMultiple.mjs";
|
|
1
2
|
//#region src/internal/_randomNumber.ts
|
|
2
3
|
const _randomNumber = (schema) => {
|
|
3
|
-
const
|
|
4
|
-
const
|
|
4
|
+
const lower = getLowerBoundary(schema);
|
|
5
|
+
const upper = getUpperBoundary(schema);
|
|
6
|
+
const minimum = lower?.value ?? (upper === null ? 0 : upper.value - 100);
|
|
7
|
+
const maximum = upper?.value ?? (lower === null ? 100 : lower.value + 100);
|
|
5
8
|
if (minimum > maximum) throw new Error("Minimum value is greater than maximum value.");
|
|
6
9
|
return schema.multipleOf === void 0 ? scalar({
|
|
7
10
|
minimum,
|
|
8
11
|
maximum,
|
|
9
|
-
exclusiveMinimum:
|
|
10
|
-
exclusiveMaximum:
|
|
11
|
-
}) :
|
|
12
|
+
exclusiveMinimum: lower?.exclusive ?? false,
|
|
13
|
+
exclusiveMaximum: upper?.exclusive ?? false
|
|
14
|
+
}) : _randomMultiple({
|
|
12
15
|
minimum,
|
|
13
16
|
maximum,
|
|
14
17
|
multipleOf: schema.multipleOf,
|
|
15
|
-
exclusiveMinimum:
|
|
16
|
-
exclusiveMaximum:
|
|
18
|
+
exclusiveMinimum: lower?.exclusive ?? false,
|
|
19
|
+
exclusiveMaximum: upper?.exclusive ?? false,
|
|
20
|
+
integer: false
|
|
17
21
|
});
|
|
18
22
|
};
|
|
19
|
-
const scalar = (
|
|
20
|
-
if (
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
return
|
|
23
|
+
const scalar = (props) => {
|
|
24
|
+
if (props.minimum === props.maximum && (props.exclusiveMinimum || props.exclusiveMaximum)) throw new Error("Exclusive numeric range is empty.");
|
|
25
|
+
const value = Math.random() * (props.maximum - props.minimum) + props.minimum;
|
|
26
|
+
if (props.exclusiveMinimum && value === props.minimum || props.exclusiveMaximum && value === props.maximum) {
|
|
27
|
+
const middle = props.minimum + (props.maximum - props.minimum) / 2;
|
|
28
|
+
if (middle <= props.minimum || middle >= props.maximum) throw new Error("Exclusive numeric range has no representable value.");
|
|
29
|
+
return middle;
|
|
26
30
|
}
|
|
31
|
+
return value;
|
|
27
32
|
};
|
|
28
|
-
const
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
33
|
+
const getLowerBoundary = (schema) => selectBoundary(schema.minimum === void 0 ? null : {
|
|
34
|
+
value: schema.minimum,
|
|
35
|
+
exclusive: false
|
|
36
|
+
}, schema.exclusiveMinimum === void 0 ? null : {
|
|
37
|
+
value: schema.exclusiveMinimum,
|
|
38
|
+
exclusive: true
|
|
39
|
+
}, Math.max);
|
|
40
|
+
const getUpperBoundary = (schema) => selectBoundary(schema.maximum === void 0 ? null : {
|
|
41
|
+
value: schema.maximum,
|
|
42
|
+
exclusive: false
|
|
43
|
+
}, schema.exclusiveMaximum === void 0 ? null : {
|
|
44
|
+
value: schema.exclusiveMaximum,
|
|
45
|
+
exclusive: true
|
|
46
|
+
}, Math.min);
|
|
47
|
+
const selectBoundary = (x, y, compare) => {
|
|
48
|
+
if (x === null) return y;
|
|
49
|
+
if (y === null) return x;
|
|
50
|
+
if (x.value === y.value) return {
|
|
51
|
+
value: x.value,
|
|
52
|
+
exclusive: x.exclusive || y.exclusive
|
|
53
|
+
};
|
|
54
|
+
return compare(x.value, y.value) === x.value ? x : y;
|
|
41
55
|
};
|
|
42
56
|
//#endregion
|
|
43
57
|
export { _randomNumber };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_randomNumber.mjs","names":[],"sources":["../../src/internal/_randomNumber.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nexport const _randomNumber = (schema: OpenApi.IJsonSchema.INumber): number => {\n const
|
|
1
|
+
{"version":3,"file":"_randomNumber.mjs","names":[],"sources":["../../src/internal/_randomNumber.ts"],"sourcesContent":["import { OpenApi } from \"@typia/interface\";\n\nimport { _randomMultiple } from \"./_randomMultiple\";\n\nexport const _randomNumber = (schema: OpenApi.IJsonSchema.INumber): number => {\n const lower: IBoundary | null = getLowerBoundary(schema);\n const upper: IBoundary | null = getUpperBoundary(schema);\n const minimum: number =\n lower?.value ?? (upper === null ? 0 : upper.value - 100);\n const maximum: number =\n upper?.value ?? (lower === null ? 100 : lower.value + 100);\n if (minimum > maximum)\n throw new Error(\"Minimum value is greater than maximum value.\");\n return schema.multipleOf === undefined\n ? scalar({\n minimum,\n maximum,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n })\n : _randomMultiple({\n minimum,\n maximum,\n multipleOf: schema.multipleOf,\n exclusiveMinimum: lower?.exclusive ?? false,\n exclusiveMaximum: upper?.exclusive ?? false,\n integer: false,\n });\n};\n\nconst scalar = (props: {\n minimum: number;\n maximum: number;\n exclusiveMinimum: boolean;\n exclusiveMaximum: boolean;\n}): number => {\n if (\n props.minimum === props.maximum &&\n (props.exclusiveMinimum || props.exclusiveMaximum)\n )\n throw new Error(\"Exclusive numeric range is empty.\");\n const value: number =\n Math.random() * (props.maximum - props.minimum) + props.minimum;\n if (\n (props.exclusiveMinimum && value === props.minimum) ||\n (props.exclusiveMaximum && value === props.maximum)\n ) {\n const middle: number = props.minimum + (props.maximum - props.minimum) / 2;\n if (middle <= props.minimum || middle >= props.maximum)\n throw new Error(\"Exclusive numeric range has no representable value.\");\n return middle;\n }\n return value;\n};\n\nconst getLowerBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n schema.minimum === undefined\n ? null\n : { value: schema.minimum, exclusive: false },\n schema.exclusiveMinimum === undefined\n ? null\n : { value: schema.exclusiveMinimum, exclusive: true },\n Math.max,\n );\n\nconst getUpperBoundary = (\n schema: OpenApi.IJsonSchema.INumber,\n): IBoundary | null =>\n selectBoundary(\n schema.maximum === undefined\n ? null\n : { value: schema.maximum, exclusive: false },\n schema.exclusiveMaximum === undefined\n ? null\n : { value: schema.exclusiveMaximum, exclusive: true },\n Math.min,\n );\n\nconst selectBoundary = (\n x: IBoundary | null,\n y: IBoundary | null,\n compare: (x: number, y: number) => number,\n): IBoundary | null => {\n if (x === null) return y;\n if (y === null) return x;\n if (x.value === y.value)\n return { value: x.value, exclusive: x.exclusive || y.exclusive };\n return compare(x.value, y.value) === x.value ? x : y;\n};\n\ninterface IBoundary {\n value: number;\n exclusive: boolean;\n}\n"],"mappings":";;AAIA,MAAa,iBAAiB,WAAgD;CAC5E,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,QAA0B,iBAAiB,MAAM;CACvD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,IAAI,MAAM,QAAQ;CACtD,MAAM,UACJ,OAAO,UAAU,UAAU,OAAO,MAAM,MAAM,QAAQ;CACxD,IAAI,UAAU,SACZ,MAAM,IAAI,MAAM,8CAA8C;CAChE,OAAO,OAAO,eAAe,KAAA,IACzB,OAAO;EACL;EACA;EACA,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;CACxC,CAAC,IACD,gBAAgB;EACd;EACA;EACA,YAAY,OAAO;EACnB,kBAAkB,OAAO,aAAa;EACtC,kBAAkB,OAAO,aAAa;EACtC,SAAS;CACX,CAAC;AACP;AAEA,MAAM,UAAU,UAKF;CACZ,IACE,MAAM,YAAY,MAAM,YACvB,MAAM,oBAAoB,MAAM,mBAEjC,MAAM,IAAI,MAAM,mCAAmC;CACrD,MAAM,QACJ,KAAK,OAAO,KAAK,MAAM,UAAU,MAAM,WAAW,MAAM;CAC1D,IACG,MAAM,oBAAoB,UAAU,MAAM,WAC1C,MAAM,oBAAoB,UAAU,MAAM,SAC3C;EACA,MAAM,SAAiB,MAAM,WAAW,MAAM,UAAU,MAAM,WAAW;EACzE,IAAI,UAAU,MAAM,WAAW,UAAU,MAAM,SAC7C,MAAM,IAAI,MAAM,qDAAqD;EACvE,OAAO;CACT;CACA,OAAO;AACT;AAEA,MAAM,oBACJ,WAEA,eACE,OAAO,YAAY,KAAA,IACf,OACA;CAAE,OAAO,OAAO;CAAS,WAAW;AAAM,GAC9C,OAAO,qBAAqB,KAAA,IACxB,OACA;CAAE,OAAO,OAAO;CAAkB,WAAW;AAAK,GACtD,KAAK,GACP;AAEF,MAAM,oBACJ,WAEA,eACE,OAAO,YAAY,KAAA,IACf,OACA;CAAE,OAAO,OAAO;CAAS,WAAW;AAAM,GAC9C,OAAO,qBAAqB,KAAA,IACxB,OACA;CAAE,OAAO,OAAO;CAAkB,WAAW;AAAK,GACtD,KAAK,GACP;AAEF,MAAM,kBACJ,GACA,GACA,YACqB;CACrB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,MAAM,MAAM,OAAO;CACvB,IAAI,EAAE,UAAU,EAAE,OAChB,OAAO;EAAE,OAAO,EAAE;EAAO,WAAW,EAAE,aAAa,EAAE;CAAU;CACjE,OAAO,QAAQ,EAAE,OAAO,EAAE,KAAK,MAAM,EAAE,QAAQ,IAAI;AACrD"}
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
|
|
1
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
|
+
export declare const _randomPattern: (regex: RegExp, props?: _ILengthProps) => string;
|
|
@@ -5,14 +5,29 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
6
|
exports._randomPattern = void 0;
|
|
7
7
|
const randexp_1 = __importDefault(require("randexp"));
|
|
8
|
-
const _randomPattern = (regex) => {
|
|
8
|
+
const _randomPattern = (regex, props) => {
|
|
9
9
|
const r = new randexp_1.default(regex);
|
|
10
|
-
|
|
10
|
+
const min = props === null || props === void 0 ? void 0 : props.minLength;
|
|
11
|
+
const max = props === null || props === void 0 ? void 0 : props.maxLength;
|
|
12
|
+
// RandExp expands an unbounded quantifier to `randInt(token.min, token.min +
|
|
13
|
+
// r.max)`, so steering `r.max` biases the generated length toward the window.
|
|
14
|
+
// There is no matching floor control, so the length is still verified below.
|
|
15
|
+
if (max !== undefined)
|
|
16
|
+
r.max = max;
|
|
17
|
+
else if (min !== undefined && min * 2 > r.max)
|
|
18
|
+
r.max = min * 2;
|
|
19
|
+
const bounded = min !== undefined || max !== undefined;
|
|
20
|
+
const limit = bounded ? 1024 : 10;
|
|
21
|
+
for (let i = 0; i < limit; ++i) {
|
|
11
22
|
const str = r.gen();
|
|
12
|
-
if (regex.test(str)
|
|
23
|
+
if (regex.test(str) &&
|
|
24
|
+
(min === undefined || str.length >= min) &&
|
|
25
|
+
(max === undefined || str.length <= max))
|
|
13
26
|
return str;
|
|
14
27
|
}
|
|
15
|
-
|
|
28
|
+
throw new Error(bounded
|
|
29
|
+
? "unable to generate a random string matching the pattern within the length range."
|
|
30
|
+
: "unable to generate a random string matching the pattern.");
|
|
16
31
|
};
|
|
17
32
|
exports._randomPattern = _randomPattern;
|
|
18
33
|
//# sourceMappingURL=_randomPattern.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_randomPattern.js","sourceRoot":"","sources":["../../src/internal/_randomPattern.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;
|
|
1
|
+
{"version":3,"file":"_randomPattern.js","sourceRoot":"","sources":["../../src/internal/_randomPattern.ts"],"names":[],"mappings":";;;;;;AAAA,sDAA8B;AAIvB,MAAM,cAAc,GAAG,CAAC,KAAa,EAAE,KAAqB,EAAU,EAAE;IAC7E,MAAM,CAAC,GAAY,IAAI,iBAAO,CAAC,KAAK,CAAC,CAAC;IACtC,MAAM,GAAG,GAAuB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC;IACjD,MAAM,GAAG,GAAuB,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,CAAC;IAEjD,6EAA6E;IAC7E,8EAA8E;IAC9E,6EAA6E;IAC7E,IAAI,GAAG,KAAK,SAAS;QAAE,CAAC,CAAC,GAAG,GAAG,GAAG,CAAC;SAC9B,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG;QAAE,CAAC,CAAC,GAAG,GAAG,GAAG,GAAG,CAAC,CAAC;IAE/D,MAAM,OAAO,GAAY,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,SAAS,CAAC;IAChE,MAAM,KAAK,GAAW,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC;QACvC,MAAM,GAAG,GAAW,CAAC,CAAC,GAAG,EAAE,CAAC;QAC5B,IACE,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC;YACf,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;YACxC,CAAC,GAAG,KAAK,SAAS,IAAI,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC;YAExC,OAAO,GAAG,CAAC;IACf,CAAC;IACD,MAAM,IAAI,KAAK,CACb,OAAO;QACL,CAAC,CAAC,kFAAkF;QACpF,CAAC,CAAC,0DAA0D,CAC/D,CAAC;AACJ,CAAC,CAAC;AA3BW,QAAA,cAAc,GAAd,cAAc,CA2BzB"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
1
|
import RandExp from "randexp";
|
|
2
2
|
//#region src/internal/_randomPattern.ts
|
|
3
|
-
const _randomPattern = (regex) => {
|
|
3
|
+
const _randomPattern = (regex, props) => {
|
|
4
4
|
const r = new RandExp(regex);
|
|
5
|
-
|
|
5
|
+
const min = props?.minLength;
|
|
6
|
+
const max = props?.maxLength;
|
|
7
|
+
if (max !== void 0) r.max = max;
|
|
8
|
+
else if (min !== void 0 && min * 2 > r.max) r.max = min * 2;
|
|
9
|
+
const bounded = min !== void 0 || max !== void 0;
|
|
10
|
+
const limit = bounded ? 1024 : 10;
|
|
11
|
+
for (let i = 0; i < limit; ++i) {
|
|
6
12
|
const str = r.gen();
|
|
7
|
-
if (regex.test(str)) return str;
|
|
13
|
+
if (regex.test(str) && (min === void 0 || str.length >= min) && (max === void 0 || str.length <= max)) return str;
|
|
8
14
|
}
|
|
9
|
-
|
|
15
|
+
throw new Error(bounded ? "unable to generate a random string matching the pattern within the length range." : "unable to generate a random string matching the pattern.");
|
|
10
16
|
};
|
|
11
17
|
//#endregion
|
|
12
18
|
export { _randomPattern };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_randomPattern.mjs","names":[],"sources":["../../src/internal/_randomPattern.ts"],"sourcesContent":["import RandExp from \"randexp\";\n\nexport const _randomPattern = (regex: RegExp): string => {\n const r: RandExp = new RandExp(regex);\n for (let i: number = 0; i <
|
|
1
|
+
{"version":3,"file":"_randomPattern.mjs","names":[],"sources":["../../src/internal/_randomPattern.ts"],"sourcesContent":["import RandExp from \"randexp\";\n\nimport { _ILengthProps } from \"./_randomStringLength\";\n\nexport const _randomPattern = (regex: RegExp, props?: _ILengthProps): string => {\n const r: RandExp = new RandExp(regex);\n const min: number | undefined = props?.minLength;\n const max: number | undefined = props?.maxLength;\n\n // RandExp expands an unbounded quantifier to `randInt(token.min, token.min +\n // r.max)`, so steering `r.max` biases the generated length toward the window.\n // There is no matching floor control, so the length is still verified below.\n if (max !== undefined) r.max = max;\n else if (min !== undefined && min * 2 > r.max) r.max = min * 2;\n\n const bounded: boolean = min !== undefined || max !== undefined;\n const limit: number = bounded ? 1024 : 10;\n for (let i: number = 0; i < limit; ++i) {\n const str: string = r.gen();\n if (\n regex.test(str) &&\n (min === undefined || str.length >= min) &&\n (max === undefined || str.length <= max)\n )\n return str;\n }\n throw new Error(\n bounded\n ? \"unable to generate a random string matching the pattern within the length range.\"\n : \"unable to generate a random string matching the pattern.\",\n );\n};\n"],"mappings":";;AAIA,MAAa,kBAAkB,OAAe,UAAkC;CAC9E,MAAM,IAAa,IAAI,QAAQ,KAAK;CACpC,MAAM,MAA0B,OAAO;CACvC,MAAM,MAA0B,OAAO;CAKvC,IAAI,QAAQ,KAAA,GAAW,EAAE,MAAM;MAC1B,IAAI,QAAQ,KAAA,KAAa,MAAM,IAAI,EAAE,KAAK,EAAE,MAAM,MAAM;CAE7D,MAAM,UAAmB,QAAQ,KAAA,KAAa,QAAQ,KAAA;CACtD,MAAM,QAAgB,UAAU,OAAO;CACvC,KAAK,IAAI,IAAY,GAAG,IAAI,OAAO,EAAE,GAAG;EACtC,MAAM,MAAc,EAAE,IAAI;EAC1B,IACE,MAAM,KAAK,GAAG,MACb,QAAQ,KAAA,KAAa,IAAI,UAAU,SACnC,QAAQ,KAAA,KAAa,IAAI,UAAU,MAEpC,OAAO;CACX;CACA,MAAM,IAAI,MACR,UACI,qFACA,0DACN;AACF"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Length bounds forwarded to a string format or pattern generator.
|
|
3
|
+
*
|
|
4
|
+
* `typia.random<T>()` passes this object to the `_randomFormat*` and
|
|
5
|
+
* `_randomPattern` helpers whenever the string leaf also carries a `MinLength`
|
|
6
|
+
* or `MaxLength` tag, so a constrained format or pattern is generated at a
|
|
7
|
+
* length its own validator accepts (issue #2189).
|
|
8
|
+
*/
|
|
9
|
+
export interface _ILengthProps {
|
|
10
|
+
minLength?: number;
|
|
11
|
+
maxLength?: number;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Builds the variable segment of a fixed-shape format string so that the total
|
|
15
|
+
* length `fixed + segment.length` lands inside the requested window.
|
|
16
|
+
*
|
|
17
|
+
* `fixed` is the number of characters the format always contributes around the
|
|
18
|
+
* segment, `fallback` is the segment length used when the leaf is
|
|
19
|
+
* unconstrained on that side, and `minimum` is the smallest segment the format
|
|
20
|
+
* still validates with. Throws when the window cannot be satisfied by this
|
|
21
|
+
* format's shape (e.g. `Format<"email"> & MaxLength<3>`).
|
|
22
|
+
*/
|
|
23
|
+
export declare const _randomSegmentLength: (props: _ILengthProps | undefined, fixed: number, fallback: number, minimum: number) => string;
|
|
24
|
+
/**
|
|
25
|
+
* Wraps a fixed- or narrow-length format generator (uuid, ipv4, date, ...) with
|
|
26
|
+
* the requested length window.
|
|
27
|
+
*
|
|
28
|
+
* These formats cannot grow an arbitrary segment, so the generator is retried a
|
|
29
|
+
* bounded number of times and the first draw inside the window is returned. A
|
|
30
|
+
* window that excludes every length the format can produce is unsatisfiable and
|
|
31
|
+
* throws instead of silently yielding an out-of-range value.
|
|
32
|
+
*/
|
|
33
|
+
export declare const _randomFormatLength: (props: _ILengthProps | undefined, generate: () => string) => string;
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._randomFormatLength = exports._randomSegmentLength = void 0;
|
|
4
|
+
const _randomString_1 = require("./_randomString");
|
|
5
|
+
/**
|
|
6
|
+
* Builds the variable segment of a fixed-shape format string so that the total
|
|
7
|
+
* length `fixed + segment.length` lands inside the requested window.
|
|
8
|
+
*
|
|
9
|
+
* `fixed` is the number of characters the format always contributes around the
|
|
10
|
+
* segment, `fallback` is the segment length used when the leaf is
|
|
11
|
+
* unconstrained on that side, and `minimum` is the smallest segment the format
|
|
12
|
+
* still validates with. Throws when the window cannot be satisfied by this
|
|
13
|
+
* format's shape (e.g. `Format<"email"> & MaxLength<3>`).
|
|
14
|
+
*/
|
|
15
|
+
const _randomSegmentLength = (props, fixed, fallback, minimum) => {
|
|
16
|
+
let low = (props === null || props === void 0 ? void 0 : props.minLength) === undefined ? minimum : props.minLength - fixed;
|
|
17
|
+
if (low < minimum)
|
|
18
|
+
low = minimum;
|
|
19
|
+
// With only a lower bound, spread the segment across `fallback` extra
|
|
20
|
+
// characters so the generated length varies, mirroring `_randomString`.
|
|
21
|
+
const high = (props === null || props === void 0 ? void 0 : props.maxLength) === undefined ? low + fallback : props.maxLength - fixed;
|
|
22
|
+
if (high < low || high < minimum)
|
|
23
|
+
throw new Error("unable to generate a random string satisfying both the format and the length constraints.");
|
|
24
|
+
return (0, _randomString_1._randomString)({ type: "string", minLength: low, maxLength: high });
|
|
25
|
+
};
|
|
26
|
+
exports._randomSegmentLength = _randomSegmentLength;
|
|
27
|
+
/**
|
|
28
|
+
* Wraps a fixed- or narrow-length format generator (uuid, ipv4, date, ...) with
|
|
29
|
+
* the requested length window.
|
|
30
|
+
*
|
|
31
|
+
* These formats cannot grow an arbitrary segment, so the generator is retried a
|
|
32
|
+
* bounded number of times and the first draw inside the window is returned. A
|
|
33
|
+
* window that excludes every length the format can produce is unsatisfiable and
|
|
34
|
+
* throws instead of silently yielding an out-of-range value.
|
|
35
|
+
*/
|
|
36
|
+
const _randomFormatLength = (props, generate) => {
|
|
37
|
+
if ((props === null || props === void 0 ? void 0 : props.minLength) === undefined && (props === null || props === void 0 ? void 0 : props.maxLength) === undefined)
|
|
38
|
+
return generate();
|
|
39
|
+
for (let i = 0; i < 256; ++i) {
|
|
40
|
+
const value = generate();
|
|
41
|
+
if ((props.minLength === undefined || value.length >= props.minLength) &&
|
|
42
|
+
(props.maxLength === undefined || value.length <= props.maxLength))
|
|
43
|
+
return value;
|
|
44
|
+
}
|
|
45
|
+
throw new Error("unable to generate a random string satisfying both the format and the length constraints.");
|
|
46
|
+
};
|
|
47
|
+
exports._randomFormatLength = _randomFormatLength;
|
|
48
|
+
//# sourceMappingURL=_randomStringLength.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_randomStringLength.js","sourceRoot":"","sources":["../../src/internal/_randomStringLength.ts"],"names":[],"mappings":";;;AAAA,mDAAgD;AAehD;;;;;;;;;GASG;AACI,MAAM,oBAAoB,GAAG,CAClC,KAAgC,EAChC,KAAa,EACb,QAAgB,EAChB,OAAe,EACP,EAAE;IACV,IAAI,GAAG,GACL,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,MAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IACrE,IAAI,GAAG,GAAG,OAAO;QAAE,GAAG,GAAG,OAAO,CAAC;IACjC,sEAAsE;IACtE,wEAAwE;IACxE,MAAM,IAAI,GACR,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,MAAK,SAAS,CAAC,CAAC,CAAC,GAAG,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,GAAG,KAAK,CAAC;IAC5E,IAAI,IAAI,GAAG,GAAG,IAAI,IAAI,GAAG,OAAO;QAC9B,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;IACJ,OAAO,IAAA,6BAAa,EAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;AAC5E,CAAC,CAAC;AAlBW,QAAA,oBAAoB,GAApB,oBAAoB,CAkB/B;AAEF;;;;;;;;GAQG;AACI,MAAM,mBAAmB,GAAG,CACjC,KAAgC,EAChC,QAAsB,EACd,EAAE;IACV,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,MAAK,SAAS,IAAI,CAAA,KAAK,aAAL,KAAK,uBAAL,KAAK,CAAE,SAAS,MAAK,SAAS;QAClE,OAAO,QAAQ,EAAE,CAAC;IACpB,KAAK,IAAI,CAAC,GAAW,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,EAAE,CAAC,EAAE,CAAC;QACrC,MAAM,KAAK,GAAW,QAAQ,EAAE,CAAC;QACjC,IACE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;YAClE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,SAAS,CAAC;YAElE,OAAO,KAAK,CAAC;IACjB,CAAC;IACD,MAAM,IAAI,KAAK,CACb,2FAA2F,CAC5F,CAAC;AACJ,CAAC,CAAC;AAjBW,QAAA,mBAAmB,GAAnB,mBAAmB,CAiB9B"}
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { _randomString } from "./_randomString.mjs";
|
|
2
|
+
//#region src/internal/_randomStringLength.ts
|
|
3
|
+
/**
|
|
4
|
+
* Builds the variable segment of a fixed-shape format string so that the total
|
|
5
|
+
* length `fixed + segment.length` lands inside the requested window.
|
|
6
|
+
*
|
|
7
|
+
* `fixed` is the number of characters the format always contributes around the
|
|
8
|
+
* segment, `fallback` is the segment length used when the leaf is
|
|
9
|
+
* unconstrained on that side, and `minimum` is the smallest segment the format
|
|
10
|
+
* still validates with. Throws when the window cannot be satisfied by this
|
|
11
|
+
* format's shape (e.g. `Format<"email"> & MaxLength<3>`).
|
|
12
|
+
*/
|
|
13
|
+
const _randomSegmentLength = (props, fixed, fallback, minimum) => {
|
|
14
|
+
let low = props?.minLength === void 0 ? minimum : props.minLength - fixed;
|
|
15
|
+
if (low < minimum) low = minimum;
|
|
16
|
+
const high = props?.maxLength === void 0 ? low + fallback : props.maxLength - fixed;
|
|
17
|
+
if (high < low || high < minimum) throw new Error("unable to generate a random string satisfying both the format and the length constraints.");
|
|
18
|
+
return _randomString({
|
|
19
|
+
type: "string",
|
|
20
|
+
minLength: low,
|
|
21
|
+
maxLength: high
|
|
22
|
+
});
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Wraps a fixed- or narrow-length format generator (uuid, ipv4, date, ...) with
|
|
26
|
+
* the requested length window.
|
|
27
|
+
*
|
|
28
|
+
* These formats cannot grow an arbitrary segment, so the generator is retried a
|
|
29
|
+
* bounded number of times and the first draw inside the window is returned. A
|
|
30
|
+
* window that excludes every length the format can produce is unsatisfiable and
|
|
31
|
+
* throws instead of silently yielding an out-of-range value.
|
|
32
|
+
*/
|
|
33
|
+
const _randomFormatLength = (props, generate) => {
|
|
34
|
+
if (props?.minLength === void 0 && props?.maxLength === void 0) return generate();
|
|
35
|
+
for (let i = 0; i < 256; ++i) {
|
|
36
|
+
const value = generate();
|
|
37
|
+
if ((props.minLength === void 0 || value.length >= props.minLength) && (props.maxLength === void 0 || value.length <= props.maxLength)) return value;
|
|
38
|
+
}
|
|
39
|
+
throw new Error("unable to generate a random string satisfying both the format and the length constraints.");
|
|
40
|
+
};
|
|
41
|
+
//#endregion
|
|
42
|
+
export { _randomFormatLength, _randomSegmentLength };
|
|
43
|
+
|
|
44
|
+
//# sourceMappingURL=_randomStringLength.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_randomStringLength.mjs","names":[],"sources":["../../src/internal/_randomStringLength.ts"],"sourcesContent":["import { _randomString } from \"./_randomString\";\n\n/**\n * Length bounds forwarded to a string format or pattern generator.\n *\n * `typia.random<T>()` passes this object to the `_randomFormat*` and\n * `_randomPattern` helpers whenever the string leaf also carries a `MinLength`\n * or `MaxLength` tag, so a constrained format or pattern is generated at a\n * length its own validator accepts (issue #2189).\n */\nexport interface _ILengthProps {\n minLength?: number;\n maxLength?: number;\n}\n\n/**\n * Builds the variable segment of a fixed-shape format string so that the total\n * length `fixed + segment.length` lands inside the requested window.\n *\n * `fixed` is the number of characters the format always contributes around the\n * segment, `fallback` is the segment length used when the leaf is\n * unconstrained on that side, and `minimum` is the smallest segment the format\n * still validates with. Throws when the window cannot be satisfied by this\n * format's shape (e.g. `Format<\"email\"> & MaxLength<3>`).\n */\nexport const _randomSegmentLength = (\n props: _ILengthProps | undefined,\n fixed: number,\n fallback: number,\n minimum: number,\n): string => {\n let low: number =\n props?.minLength === undefined ? minimum : props.minLength - fixed;\n if (low < minimum) low = minimum;\n // With only a lower bound, spread the segment across `fallback` extra\n // characters so the generated length varies, mirroring `_randomString`.\n const high: number =\n props?.maxLength === undefined ? low + fallback : props.maxLength - fixed;\n if (high < low || high < minimum)\n throw new Error(\n \"unable to generate a random string satisfying both the format and the length constraints.\",\n );\n return _randomString({ type: \"string\", minLength: low, maxLength: high });\n};\n\n/**\n * Wraps a fixed- or narrow-length format generator (uuid, ipv4, date, ...) with\n * the requested length window.\n *\n * These formats cannot grow an arbitrary segment, so the generator is retried a\n * bounded number of times and the first draw inside the window is returned. A\n * window that excludes every length the format can produce is unsatisfiable and\n * throws instead of silently yielding an out-of-range value.\n */\nexport const _randomFormatLength = (\n props: _ILengthProps | undefined,\n generate: () => string,\n): string => {\n if (props?.minLength === undefined && props?.maxLength === undefined)\n return generate();\n for (let i: number = 0; i < 256; ++i) {\n const value: string = generate();\n if (\n (props.minLength === undefined || value.length >= props.minLength) &&\n (props.maxLength === undefined || value.length <= props.maxLength)\n )\n return value;\n }\n throw new Error(\n \"unable to generate a random string satisfying both the format and the length constraints.\",\n );\n};\n"],"mappings":";;;;;;;;;;;;AAyBA,MAAa,wBACX,OACA,OACA,UACA,YACW;CACX,IAAI,MACF,OAAO,cAAc,KAAA,IAAY,UAAU,MAAM,YAAY;CAC/D,IAAI,MAAM,SAAS,MAAM;CAGzB,MAAM,OACJ,OAAO,cAAc,KAAA,IAAY,MAAM,WAAW,MAAM,YAAY;CACtE,IAAI,OAAO,OAAO,OAAO,SACvB,MAAM,IAAI,MACR,2FACF;CACF,OAAO,cAAc;EAAE,MAAM;EAAU,WAAW;EAAK,WAAW;CAAK,CAAC;AAC1E;;;;;;;;;;AAWA,MAAa,uBACX,OACA,aACW;CACX,IAAI,OAAO,cAAc,KAAA,KAAa,OAAO,cAAc,KAAA,GACzD,OAAO,SAAS;CAClB,KAAK,IAAI,IAAY,GAAG,IAAI,KAAK,EAAE,GAAG;EACpC,MAAM,QAAgB,SAAS;EAC/B,KACG,MAAM,cAAc,KAAA,KAAa,MAAM,UAAU,MAAM,eACvD,MAAM,cAAc,KAAA,KAAa,MAAM,UAAU,MAAM,YAExD,OAAO;CACX;CACA,MAAM,IAAI,MACR,2FACF;AACF"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export declare const _stringLength: (value: string) => number;
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports._stringLength = void 0;
|
|
4
|
+
const _stringLength = (value) => {
|
|
5
|
+
let count = 0;
|
|
6
|
+
for (const _ch of value)
|
|
7
|
+
++count;
|
|
8
|
+
return count;
|
|
9
|
+
};
|
|
10
|
+
exports._stringLength = _stringLength;
|
|
11
|
+
//# sourceMappingURL=_stringLength.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stringLength.js","sourceRoot":"","sources":["../../src/internal/_stringLength.ts"],"names":[],"mappings":";;;AAAO,MAAM,aAAa,GAAG,CAAC,KAAa,EAAU,EAAE;IACrD,IAAI,KAAK,GAAW,CAAC,CAAC;IACtB,KAAK,MAAM,GAAG,IAAI,KAAK;QAAE,EAAE,KAAK,CAAC;IACjC,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAJW,QAAA,aAAa,GAAb,aAAa,CAIxB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"_stringLength.mjs","names":[],"sources":["../../src/internal/_stringLength.ts"],"sourcesContent":["export const _stringLength = (value: string): number => {\n let count: number = 0;\n for (const _ch of value) ++count;\n return count;\n};\n"],"mappings":";AAAA,MAAa,iBAAiB,UAA0B;CACtD,IAAI,QAAgB;CACpB,KAAK,MAAM,OAAO,OAAO,EAAE;CAC3B,OAAO;AACT"}
|
|
@@ -2,11 +2,14 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports._validateReport = void 0;
|
|
4
4
|
const _validateReport = (array) => {
|
|
5
|
+
const isAncestor = (ancestor, descendant) => descendant === ancestor ||
|
|
6
|
+
descendant.startsWith(`${ancestor}.`) ||
|
|
7
|
+
descendant.startsWith(`${ancestor}[`);
|
|
5
8
|
const reportable = (path) => {
|
|
6
9
|
if (array.length === 0)
|
|
7
10
|
return true;
|
|
8
11
|
const last = array[array.length - 1].path;
|
|
9
|
-
return path
|
|
12
|
+
return isAncestor(path, last) === false && isAncestor(last, path) === false;
|
|
10
13
|
};
|
|
11
14
|
return (exceptable, error) => {
|
|
12
15
|
var _a;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_validateReport.js","sourceRoot":"","sources":["../../src/internal/_validateReport.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC7D,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,IAAI,GAAW,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC;QACnD,OAAO,
|
|
1
|
+
{"version":3,"file":"_validateReport.js","sourceRoot":"","sources":["../../src/internal/_validateReport.ts"],"names":[],"mappings":";;;AAEO,MAAM,eAAe,GAAG,CAAC,KAA2B,EAAE,EAAE;IAC7D,MAAM,UAAU,GAAG,CAAC,QAAgB,EAAE,UAAkB,EAAW,EAAE,CACnE,UAAU,KAAK,QAAQ;QACvB,UAAU,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC;QACrC,UAAU,CAAC,UAAU,CAAC,GAAG,QAAQ,GAAG,CAAC,CAAC;IACxC,MAAM,UAAU,GAAG,CAAC,IAAY,EAAW,EAAE;QAC3C,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QACpC,MAAM,IAAI,GAAW,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,IAAI,CAAC;QACnD,OAAO,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,IAAI,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK,KAAK,CAAC;IAC9E,CAAC,CAAC;IACF,OAAO,CAAC,UAAmB,EAAE,KAAyB,EAAS,EAAE;;QAC/D,IAAI,UAAU,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACzC,IAAI,KAAK,CAAC,KAAK,KAAK,SAAS;gBAC3B,MAAA,KAAK,CAAC,WAAW,oCAAjB,KAAK,CAAC,WAAW,GAAK;oBACpB,wCAAwC;oBACxC,EAAE;oBACF,qBAAqB,KAAK,CAAC,QAAQ,2BAA2B;iBAC/D,CAAC,IAAI,CAAC,IAAI,CAAC,EAAC;YACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC;AACJ,CAAC,CAAC;AAtBW,QAAA,eAAe,GAAf,eAAe,CAsB1B"}
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
//#region src/internal/_validateReport.ts
|
|
2
2
|
const _validateReport = (array) => {
|
|
3
|
+
const isAncestor = (ancestor, descendant) => descendant === ancestor || descendant.startsWith(`${ancestor}.`) || descendant.startsWith(`${ancestor}[`);
|
|
3
4
|
const reportable = (path) => {
|
|
4
5
|
if (array.length === 0) return true;
|
|
5
6
|
const last = array[array.length - 1].path;
|
|
6
|
-
return path
|
|
7
|
+
return isAncestor(path, last) === false && isAncestor(last, path) === false;
|
|
7
8
|
};
|
|
8
9
|
return (exceptable, error) => {
|
|
9
10
|
if (exceptable && reportable(error.path)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"_validateReport.mjs","names":[],"sources":["../../src/internal/_validateReport.ts"],"sourcesContent":["import { IValidation } from \"@typia/interface\";\n\nexport const _validateReport = (array: IValidation.IError[]) => {\n const reportable = (path: string): boolean => {\n if (array.length === 0) return true;\n const last: string = array[array.length - 1]!.path;\n return path
|
|
1
|
+
{"version":3,"file":"_validateReport.mjs","names":[],"sources":["../../src/internal/_validateReport.ts"],"sourcesContent":["import { IValidation } from \"@typia/interface\";\n\nexport const _validateReport = (array: IValidation.IError[]) => {\n const isAncestor = (ancestor: string, descendant: string): boolean =>\n descendant === ancestor ||\n descendant.startsWith(`${ancestor}.`) ||\n descendant.startsWith(`${ancestor}[`);\n const reportable = (path: string): boolean => {\n if (array.length === 0) return true;\n const last: string = array[array.length - 1]!.path;\n return isAncestor(path, last) === false && isAncestor(last, path) === false;\n };\n return (exceptable: boolean, error: IValidation.IError): false => {\n if (exceptable && reportable(error.path)) {\n if (error.value === undefined)\n error.description ??= [\n \"The value at this path is `undefined`.\",\n \"\",\n `Please fill the \\`${error.expected}\\` typed value next time.`,\n ].join(\"\\n\");\n array.push(error);\n }\n return false;\n };\n};\n"],"mappings":";AAEA,MAAa,mBAAmB,UAAgC;CAC9D,MAAM,cAAc,UAAkB,eACpC,eAAe,YACf,WAAW,WAAW,GAAG,SAAS,EAAE,KACpC,WAAW,WAAW,GAAG,SAAS,EAAE;CACtC,MAAM,cAAc,SAA0B;EAC5C,IAAI,MAAM,WAAW,GAAG,OAAO;EAC/B,MAAM,OAAe,MAAM,MAAM,SAAS,EAAE,CAAE;EAC9C,OAAO,WAAW,MAAM,IAAI,MAAM,SAAS,WAAW,MAAM,IAAI,MAAM;CACxE;CACA,QAAQ,YAAqB,UAAqC;EAChE,IAAI,cAAc,WAAW,MAAM,IAAI,GAAG;GACxC,IAAI,MAAM,UAAU,KAAA,GAClB,MAAM,gBAAgB;IACpB;IACA;IACA,qBAAqB,MAAM,SAAS;GACtC,CAAC,CAAC,KAAK,IAAI;GACb,MAAM,KAAK,KAAK;EAClB;EACA,OAAO;CACT;AACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared outer walk for the `camel`/`pascal` notations.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the `CamelCase<T>` / `PascalCase<T>` typings: leading underscores are
|
|
5
|
+
* preserved verbatim, an all-underscore key stays untouched, and the presence
|
|
6
|
+
* of any remaining underscore — not the number of non-empty segments — selects
|
|
7
|
+
* the `snake` conversion. Routing on underscore presence keeps a trailing or
|
|
8
|
+
* doubled underscore (`fooBar_`) on the same path the type takes, instead of
|
|
9
|
+
* collapsing it to the underscore-free `plain` path.
|
|
10
|
+
*/
|
|
11
|
+
export declare const __notationRename: (props: {
|
|
12
|
+
plain: (str: string) => string;
|
|
13
|
+
snake: (str: string) => string;
|
|
14
|
+
}) => (str: string) => string;
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.__notationRename = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Shared outer walk for the `camel`/`pascal` notations.
|
|
6
|
+
*
|
|
7
|
+
* Mirrors the `CamelCase<T>` / `PascalCase<T>` typings: leading underscores are
|
|
8
|
+
* preserved verbatim, an all-underscore key stays untouched, and the presence
|
|
9
|
+
* of any remaining underscore — not the number of non-empty segments — selects
|
|
10
|
+
* the `snake` conversion. Routing on underscore presence keeps a trailing or
|
|
11
|
+
* doubled underscore (`fooBar_`) on the same path the type takes, instead of
|
|
12
|
+
* collapsing it to the underscore-free `plain` path.
|
|
13
|
+
*/
|
|
14
|
+
const __notationRename = (props) => (str) => {
|
|
15
|
+
let prefix = "";
|
|
16
|
+
while (str.startsWith("_")) {
|
|
17
|
+
prefix += "_";
|
|
18
|
+
str = str.substring(1);
|
|
19
|
+
}
|
|
20
|
+
if (str.length === 0)
|
|
21
|
+
return prefix;
|
|
22
|
+
return `${prefix}${str.includes("_") ? props.snake(str) : props.plain(str)}`;
|
|
23
|
+
};
|
|
24
|
+
exports.__notationRename = __notationRename;
|
|
25
|
+
//# sourceMappingURL=__notationRename.js.map
|