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
package/src/functional.ts
CHANGED
|
@@ -3,6 +3,24 @@ import { IValidation } from "@typia/interface";
|
|
|
3
3
|
import { TypeGuardError } from "./TypeGuardError";
|
|
4
4
|
import { NoTransformConfigurationError } from "./transformers/NoTransformConfigurationError";
|
|
5
5
|
|
|
6
|
+
type FunctionalIs<T extends (...args: any[]) => any> = T extends (
|
|
7
|
+
this: infer This,
|
|
8
|
+
...args: infer Arguments
|
|
9
|
+
) => infer Output
|
|
10
|
+
? Output extends Promise<infer R>
|
|
11
|
+
? (this: This, ...args: Arguments) => Promise<R | null>
|
|
12
|
+
: (this: This, ...args: Arguments) => Output | null
|
|
13
|
+
: never;
|
|
14
|
+
|
|
15
|
+
type FunctionalValidate<T extends (...args: any[]) => any> = T extends (
|
|
16
|
+
this: infer This,
|
|
17
|
+
...args: infer Arguments
|
|
18
|
+
) => infer Output
|
|
19
|
+
? Output extends Promise<infer R>
|
|
20
|
+
? (this: This, ...args: Arguments) => Promise<IValidation<R>>
|
|
21
|
+
: (this: This, ...args: Arguments) => IValidation<Output>
|
|
22
|
+
: never;
|
|
23
|
+
|
|
6
24
|
/* ===========================================================
|
|
7
25
|
FUNCTIONAL
|
|
8
26
|
- ASSERT
|
|
@@ -232,11 +250,7 @@ export function assertEqualsReturn(): never {
|
|
|
232
250
|
*/
|
|
233
251
|
export function isFunction<T extends (...args: any[]) => any>(
|
|
234
252
|
func: T,
|
|
235
|
-
): T
|
|
236
|
-
? Output extends Promise<infer R>
|
|
237
|
-
? (...args: Arguments) => Promise<R | null>
|
|
238
|
-
: (...args: Arguments) => Output | null
|
|
239
|
-
: never;
|
|
253
|
+
): FunctionalIs<T>;
|
|
240
254
|
|
|
241
255
|
/** @internal */
|
|
242
256
|
export function isFunction(): never {
|
|
@@ -263,11 +277,7 @@ export function isFunction(): never {
|
|
|
263
277
|
*/
|
|
264
278
|
export function isParameters<T extends (...args: any[]) => any>(
|
|
265
279
|
func: T,
|
|
266
|
-
): T
|
|
267
|
-
? Output extends Promise<infer R>
|
|
268
|
-
? (...args: Arguments) => Promise<R | null>
|
|
269
|
-
: (...args: Arguments) => Output | null
|
|
270
|
-
: never;
|
|
280
|
+
): FunctionalIs<T>;
|
|
271
281
|
|
|
272
282
|
/** @internal */
|
|
273
283
|
export function isParameters(): never {
|
|
@@ -294,11 +304,7 @@ export function isParameters(): never {
|
|
|
294
304
|
*/
|
|
295
305
|
export function isReturn<T extends (...args: any[]) => any>(
|
|
296
306
|
func: T,
|
|
297
|
-
): T
|
|
298
|
-
? Output extends Promise<infer R>
|
|
299
|
-
? (...args: Arguments) => Promise<R | null>
|
|
300
|
-
: (...args: Arguments) => Output | null
|
|
301
|
-
: never;
|
|
307
|
+
): FunctionalIs<T>;
|
|
302
308
|
|
|
303
309
|
/** @internal */
|
|
304
310
|
export function isReturn(): never {
|
|
@@ -325,11 +331,7 @@ export function isReturn(): never {
|
|
|
325
331
|
*/
|
|
326
332
|
export function equalsFunction<T extends (...args: any[]) => any>(
|
|
327
333
|
func: T,
|
|
328
|
-
): T
|
|
329
|
-
? Output extends Promise<infer R>
|
|
330
|
-
? (...args: Arguments) => Promise<R | null>
|
|
331
|
-
: (...args: Arguments) => Output | null
|
|
332
|
-
: never;
|
|
334
|
+
): FunctionalIs<T>;
|
|
333
335
|
|
|
334
336
|
/** @internal */
|
|
335
337
|
export function equalsFunction(): never {
|
|
@@ -356,11 +358,7 @@ export function equalsFunction(): never {
|
|
|
356
358
|
*/
|
|
357
359
|
export function equalsParameters<T extends (...args: any[]) => any>(
|
|
358
360
|
func: T,
|
|
359
|
-
): T
|
|
360
|
-
? Output extends Promise<infer R>
|
|
361
|
-
? (...args: Arguments) => Promise<R | null>
|
|
362
|
-
: (...args: Arguments) => Output | null
|
|
363
|
-
: never;
|
|
361
|
+
): FunctionalIs<T>;
|
|
364
362
|
|
|
365
363
|
/** @internal */
|
|
366
364
|
export function equalsParameters(): never {
|
|
@@ -387,11 +385,7 @@ export function equalsParameters(): never {
|
|
|
387
385
|
*/
|
|
388
386
|
export function equalsReturn<T extends (...args: any[]) => any>(
|
|
389
387
|
func: T,
|
|
390
|
-
): T
|
|
391
|
-
? Output extends Promise<infer R>
|
|
392
|
-
? (...args: Arguments) => Promise<R | null>
|
|
393
|
-
: (...args: Arguments) => Output | null
|
|
394
|
-
: never;
|
|
388
|
+
): FunctionalIs<T>;
|
|
395
389
|
|
|
396
390
|
/** @internal */
|
|
397
391
|
export function equalsReturn(): never {
|
|
@@ -425,11 +419,7 @@ export function equalsReturn(): never {
|
|
|
425
419
|
*/
|
|
426
420
|
export function validateFunction<T extends (...args: any[]) => any>(
|
|
427
421
|
func: T,
|
|
428
|
-
): T
|
|
429
|
-
? Output extends Promise<infer R>
|
|
430
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
431
|
-
: (...args: Arguments) => IValidation<Output>
|
|
432
|
-
: never;
|
|
422
|
+
): FunctionalValidate<T>;
|
|
433
423
|
|
|
434
424
|
/** @internal */
|
|
435
425
|
export function validateFunction(): never {
|
|
@@ -457,11 +447,7 @@ export function validateFunction(): never {
|
|
|
457
447
|
*/
|
|
458
448
|
export function validateParameters<T extends (...args: any[]) => any>(
|
|
459
449
|
func: T,
|
|
460
|
-
): T
|
|
461
|
-
? Output extends Promise<infer R>
|
|
462
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
463
|
-
: (...args: Arguments) => IValidation<Output>
|
|
464
|
-
: never;
|
|
450
|
+
): FunctionalValidate<T>;
|
|
465
451
|
|
|
466
452
|
/** @internal */
|
|
467
453
|
export function validateParameters(): never {
|
|
@@ -489,11 +475,7 @@ export function validateParameters(): never {
|
|
|
489
475
|
*/
|
|
490
476
|
export function validateReturn<T extends (...args: any[]) => any>(
|
|
491
477
|
func: T,
|
|
492
|
-
): T
|
|
493
|
-
? Output extends Promise<infer R>
|
|
494
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
495
|
-
: (...args: Arguments) => IValidation<Output>
|
|
496
|
-
: never;
|
|
478
|
+
): FunctionalValidate<T>;
|
|
497
479
|
|
|
498
480
|
/** @internal */
|
|
499
481
|
export function validateReturn(): never {
|
|
@@ -524,11 +506,7 @@ export function validateReturn(): never {
|
|
|
524
506
|
*/
|
|
525
507
|
export function validateEqualsFunction<T extends (...args: any[]) => any>(
|
|
526
508
|
func: T,
|
|
527
|
-
): T
|
|
528
|
-
? Output extends Promise<infer R>
|
|
529
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
530
|
-
: (...args: Arguments) => IValidation<Output>
|
|
531
|
-
: never;
|
|
509
|
+
): FunctionalValidate<T>;
|
|
532
510
|
|
|
533
511
|
/** @internal */
|
|
534
512
|
export function validateEqualsFunction(): never {
|
|
@@ -556,11 +534,7 @@ export function validateEqualsFunction(): never {
|
|
|
556
534
|
*/
|
|
557
535
|
export function validateEqualsParameters<T extends (...args: any[]) => any>(
|
|
558
536
|
func: T,
|
|
559
|
-
): T
|
|
560
|
-
? Output extends Promise<infer R>
|
|
561
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
562
|
-
: (...args: Arguments) => IValidation<Output>
|
|
563
|
-
: never;
|
|
537
|
+
): FunctionalValidate<T>;
|
|
564
538
|
|
|
565
539
|
/** @internal */
|
|
566
540
|
export function validateEqualsParameters(): never {
|
|
@@ -588,11 +562,7 @@ export function validateEqualsParameters(): never {
|
|
|
588
562
|
*/
|
|
589
563
|
export function validateEqualsReturn<T extends (...args: any[]) => any>(
|
|
590
564
|
func: T,
|
|
591
|
-
): T
|
|
592
|
-
? Output extends Promise<infer R>
|
|
593
|
-
? (...args: Arguments) => Promise<IValidation<R>>
|
|
594
|
-
: (...args: Arguments) => IValidation<Output>
|
|
595
|
-
: never;
|
|
565
|
+
): FunctionalValidate<T>;
|
|
596
566
|
|
|
597
567
|
/** @internal */
|
|
598
568
|
export function validateEqualsReturn(): never {
|
|
@@ -12,10 +12,14 @@ export class _ProtobufReader {
|
|
|
12
12
|
/** DataView for buffer. */
|
|
13
13
|
private view: DataView;
|
|
14
14
|
|
|
15
|
+
/** Current length-delimited boundary. */
|
|
16
|
+
private end: number;
|
|
17
|
+
|
|
15
18
|
public constructor(buf: Uint8Array) {
|
|
16
19
|
this.buf = buf;
|
|
17
20
|
this.ptr = 0;
|
|
18
21
|
this.view = new DataView(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
22
|
+
this.end = buf.length;
|
|
19
23
|
}
|
|
20
24
|
|
|
21
25
|
public index(): number {
|
|
@@ -23,7 +27,7 @@ export class _ProtobufReader {
|
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
public size(): number {
|
|
26
|
-
return this.
|
|
30
|
+
return this.end;
|
|
27
31
|
}
|
|
28
32
|
|
|
29
33
|
public uint32(): number {
|
|
@@ -44,7 +48,7 @@ export class _ProtobufReader {
|
|
|
44
48
|
}
|
|
45
49
|
|
|
46
50
|
public int64(): bigint {
|
|
47
|
-
return this.varint64();
|
|
51
|
+
return BigInt.asIntN(64, this.varint64());
|
|
48
52
|
}
|
|
49
53
|
|
|
50
54
|
public sint64(): bigint {
|
|
@@ -57,58 +61,90 @@ export class _ProtobufReader {
|
|
|
57
61
|
}
|
|
58
62
|
|
|
59
63
|
public float(): number {
|
|
60
|
-
|
|
61
|
-
this.ptr += 4;
|
|
62
|
-
return value;
|
|
64
|
+
return this.view.getFloat32(this.take(4), true);
|
|
63
65
|
}
|
|
64
66
|
|
|
65
67
|
public double(): number {
|
|
66
|
-
|
|
67
|
-
this.ptr += 8;
|
|
68
|
-
return value;
|
|
68
|
+
return this.view.getFloat64(this.take(8), true);
|
|
69
69
|
}
|
|
70
70
|
|
|
71
71
|
public bytes(): Uint8Array {
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
72
|
+
return this.atomic(() => {
|
|
73
|
+
const length: number = this.uint32();
|
|
74
|
+
const from: number = this.take(length);
|
|
75
|
+
return this.buf.subarray(from, from + length);
|
|
76
|
+
});
|
|
76
77
|
}
|
|
77
78
|
|
|
78
79
|
public string(): string {
|
|
79
|
-
|
|
80
|
+
const bytes: Uint8Array = this.bytes();
|
|
81
|
+
const decoder: TextDecoder = utf8.get();
|
|
82
|
+
try {
|
|
83
|
+
return decoder.decode(bytes);
|
|
84
|
+
} catch {
|
|
85
|
+
throw error("invalid UTF-8 string.");
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
public fork(): number {
|
|
90
|
+
return this.atomic(() => {
|
|
91
|
+
const previous: number = this.end;
|
|
92
|
+
const length: number = this.uint32();
|
|
93
|
+
this.validate(length);
|
|
94
|
+
this.end = this.ptr + length;
|
|
95
|
+
return previous;
|
|
96
|
+
});
|
|
80
97
|
}
|
|
81
98
|
|
|
99
|
+
public close(previous: number): void {
|
|
100
|
+
if (this.ptr !== this.end) throw error("buffer overflow.");
|
|
101
|
+
this.end = previous;
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/** Advance by exactly `length` bytes, for every length including zero. */
|
|
82
105
|
public skip(length: number): void {
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
106
|
+
this.take(length);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Advance by exactly one varint, which carries no length prefix.
|
|
111
|
+
*
|
|
112
|
+
* A varint terminates at its first byte without the continuation bit, and may
|
|
113
|
+
* occupy no more than {@link VARINT_MAX_BYTES}. Reading past that limit would
|
|
114
|
+
* accept a varint that `varint32` and `varint64` could not, making the limit
|
|
115
|
+
* depend on which method happens to consume the value.
|
|
116
|
+
*/
|
|
117
|
+
public skipVarint(): void {
|
|
118
|
+
this.atomic(() => {
|
|
119
|
+
for (let i: number = 0; i < VARINT_MAX_BYTES; ++i)
|
|
120
|
+
if ((this.u8() & 0x80) === 0) return;
|
|
121
|
+
throw error(`varint exceeds ${VARINT_MAX_BYTES} bytes.`);
|
|
122
|
+
});
|
|
89
123
|
}
|
|
90
124
|
|
|
91
125
|
public skipType(wireType: ProtobufWire): void {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
this.
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
126
|
+
this.atomic(() => {
|
|
127
|
+
switch (wireType) {
|
|
128
|
+
case ProtobufWire.VARIANT:
|
|
129
|
+
this.skipVarint();
|
|
130
|
+
break;
|
|
131
|
+
case ProtobufWire.I64:
|
|
132
|
+
this.skip(8);
|
|
133
|
+
break;
|
|
134
|
+
case ProtobufWire.LEN:
|
|
135
|
+
this.skip(this.uint32());
|
|
136
|
+
break;
|
|
137
|
+
case ProtobufWire.START_GROUP:
|
|
138
|
+
while ((wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP)
|
|
139
|
+
this.skipType(wireType);
|
|
140
|
+
break;
|
|
141
|
+
case ProtobufWire.I32:
|
|
142
|
+
this.skip(4);
|
|
143
|
+
break;
|
|
144
|
+
default:
|
|
145
|
+
throw error(`invalid wire type ${wireType} at offset ${this.ptr}.`);
|
|
146
|
+
}
|
|
147
|
+
});
|
|
112
148
|
}
|
|
113
149
|
|
|
114
150
|
private varint32(): number {
|
|
@@ -130,7 +166,8 @@ export class _ProtobufReader {
|
|
|
130
166
|
value |= ((loaded = this.u8()) & 0xf) << 28;
|
|
131
167
|
if (loaded < 0x80) return value;
|
|
132
168
|
|
|
133
|
-
// increment position until there is no continuation bit or until
|
|
169
|
+
// increment position until there is no continuation bit, or until this read
|
|
170
|
+
// reaches VARINT_MAX_BYTES and the value can hold no further bits
|
|
134
171
|
if (this.u8() < 0x80) return value;
|
|
135
172
|
if (this.u8() < 0x80) return value;
|
|
136
173
|
if (this.u8() < 0x80) return value;
|
|
@@ -172,16 +209,65 @@ export class _ProtobufReader {
|
|
|
172
209
|
if (loaded < BigInt(0x80)) return value;
|
|
173
210
|
|
|
174
211
|
value |= (this.u8n() & BigInt(0x01)) << BigInt(63);
|
|
175
|
-
return BigInt.
|
|
212
|
+
return BigInt.asUintN(64, value);
|
|
176
213
|
}
|
|
177
214
|
|
|
178
215
|
private u8(): number {
|
|
179
|
-
return this.view.getUint8(this.
|
|
216
|
+
return this.view.getUint8(this.take(1));
|
|
180
217
|
}
|
|
181
218
|
|
|
182
219
|
private u8n(): bigint {
|
|
183
220
|
return BigInt(this.u8());
|
|
184
221
|
}
|
|
222
|
+
|
|
223
|
+
private take(length: number): number {
|
|
224
|
+
this.validate(length);
|
|
225
|
+
const from: number = this.ptr;
|
|
226
|
+
this.ptr += length;
|
|
227
|
+
return from;
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
private atomic<T>(closure: () => T): T {
|
|
231
|
+
const index: number = this.ptr;
|
|
232
|
+
const end: number = this.end;
|
|
233
|
+
try {
|
|
234
|
+
return closure();
|
|
235
|
+
} catch (thrown) {
|
|
236
|
+
this.ptr = index;
|
|
237
|
+
this.end = end;
|
|
238
|
+
throw thrown;
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
|
|
242
|
+
private validate(length: number): void {
|
|
243
|
+
if (
|
|
244
|
+
Number.isSafeInteger(length) === false ||
|
|
245
|
+
length < 0 ||
|
|
246
|
+
length > this.size() - this.ptr
|
|
247
|
+
)
|
|
248
|
+
throw error("buffer overflow.");
|
|
249
|
+
}
|
|
185
250
|
}
|
|
186
251
|
|
|
187
|
-
|
|
252
|
+
/**
|
|
253
|
+
* Builds every fault this reader raises, so each one names typia as its source.
|
|
254
|
+
*
|
|
255
|
+
* Every decode error a caller can see must be attributable, and the prefix is
|
|
256
|
+
* what attributes it. Composing it here rather than at each throw keeps a new
|
|
257
|
+
* fault from silently shipping without it.
|
|
258
|
+
*/
|
|
259
|
+
const error = (message: string): Error =>
|
|
260
|
+
new Error(`Error on typia.protobuf.decode(): ${message}`);
|
|
261
|
+
|
|
262
|
+
/**
|
|
263
|
+
* The most bytes a varint may occupy: a 64-bit value in seven-bit groups.
|
|
264
|
+
*
|
|
265
|
+
* `varint32` and `varint64` hold this same limit structurally, by reading no
|
|
266
|
+
* further than their tenth byte. This constant is what a loop-driven consumer
|
|
267
|
+
* holds it by.
|
|
268
|
+
*/
|
|
269
|
+
const VARINT_MAX_BYTES = 10;
|
|
270
|
+
|
|
271
|
+
const utf8 = new Singleton(
|
|
272
|
+
() => new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }),
|
|
273
|
+
);
|
|
@@ -17,7 +17,7 @@ export const _createStandardSchema = <T>(
|
|
|
17
17
|
} else {
|
|
18
18
|
return {
|
|
19
19
|
issues: result.errors.map((error) => ({
|
|
20
|
-
message: `expected ${error.expected}, got ${error.value}`,
|
|
20
|
+
message: `expected ${error.expected}, got ${formatValue(error.value)}`,
|
|
21
21
|
path: typiaPathToStandardSchemaPath(error.path),
|
|
22
22
|
})),
|
|
23
23
|
} satisfies StandardSchemaV1.FailureResult;
|
|
@@ -26,6 +26,20 @@ export const _createStandardSchema = <T>(
|
|
|
26
26
|
},
|
|
27
27
|
} satisfies StandardSchemaV1<T, T>);
|
|
28
28
|
|
|
29
|
+
const formatValue = (value: unknown): string => {
|
|
30
|
+
if (typeof value === "object") {
|
|
31
|
+
if (value === null) return "null";
|
|
32
|
+
try {
|
|
33
|
+
if (Array.isArray(value)) return "[object Array]";
|
|
34
|
+
} catch {
|
|
35
|
+
// A revoked proxy can throw even for Array.isArray().
|
|
36
|
+
}
|
|
37
|
+
return "[object Object]";
|
|
38
|
+
}
|
|
39
|
+
if (typeof value === "function") return "[function]";
|
|
40
|
+
return String(value);
|
|
41
|
+
};
|
|
42
|
+
|
|
29
43
|
enum PathParserState {
|
|
30
44
|
// Start of a new segment
|
|
31
45
|
// When the parser is in this state,
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
export interface _IDecimal {
|
|
2
|
+
coefficient: bigint;
|
|
3
|
+
exponent: number;
|
|
4
|
+
}
|
|
5
|
+
|
|
6
|
+
export interface _IDecimalRatio {
|
|
7
|
+
numerator: bigint;
|
|
8
|
+
denominator: bigint;
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
export const _decimalDecompose = (value: number): _IDecimal | null => {
|
|
12
|
+
if (Number.isFinite(value) === false) return null;
|
|
13
|
+
const [mantissa = "0", exponentText = "0"] = value.toString().split("e");
|
|
14
|
+
const negative: boolean = mantissa.startsWith("-");
|
|
15
|
+
const unsigned: string = negative ? mantissa.slice(1) : mantissa;
|
|
16
|
+
const point: number = unsigned.indexOf(".");
|
|
17
|
+
const decimals: number = point === -1 ? 0 : unsigned.length - point - 1;
|
|
18
|
+
const digits: bigint = BigInt(unsigned.replace(".", ""));
|
|
19
|
+
return {
|
|
20
|
+
coefficient: negative ? -digits : digits,
|
|
21
|
+
exponent: Number(exponentText) - decimals,
|
|
22
|
+
};
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
export const _decimalDivide = (
|
|
26
|
+
value: number,
|
|
27
|
+
divisor: _IDecimal,
|
|
28
|
+
): _IDecimalRatio | null => {
|
|
29
|
+
const dividend: _IDecimal | null = _decimalDecompose(value);
|
|
30
|
+
if (dividend === null || divisor.coefficient === BigInt(0)) return null;
|
|
31
|
+
const exponent: number = dividend.exponent - divisor.exponent;
|
|
32
|
+
return exponent >= 0
|
|
33
|
+
? {
|
|
34
|
+
numerator: dividend.coefficient * _decimalPower(exponent),
|
|
35
|
+
denominator: divisor.coefficient,
|
|
36
|
+
}
|
|
37
|
+
: {
|
|
38
|
+
numerator: dividend.coefficient,
|
|
39
|
+
denominator: divisor.coefficient * _decimalPower(-exponent),
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
export const _decimalIntegerStep = (value: number): _IDecimal | null => {
|
|
44
|
+
const decimal: _IDecimal | null = _decimalDecompose(value);
|
|
45
|
+
if (decimal === null || decimal.coefficient <= BigInt(0)) return null;
|
|
46
|
+
if (decimal.exponent >= 0)
|
|
47
|
+
return {
|
|
48
|
+
coefficient: decimal.coefficient * _decimalPower(decimal.exponent),
|
|
49
|
+
exponent: 0,
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const denominator: bigint = _decimalPower(-decimal.exponent);
|
|
53
|
+
return {
|
|
54
|
+
coefficient:
|
|
55
|
+
decimal.coefficient / _decimalGcd(decimal.coefficient, denominator),
|
|
56
|
+
exponent: 0,
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
export const _decimalToNumber = (value: _IDecimal): number =>
|
|
61
|
+
Number(`${value.coefficient}e${value.exponent}`);
|
|
62
|
+
|
|
63
|
+
export const _decimalPower = (exponent: number): bigint =>
|
|
64
|
+
BigInt(10) ** BigInt(exponent);
|
|
65
|
+
|
|
66
|
+
export const _decimalGcd = (x: bigint, y: bigint): bigint => {
|
|
67
|
+
while (y !== BigInt(0)) [x, y] = [y, x % y];
|
|
68
|
+
return x < BigInt(0) ? -x : x;
|
|
69
|
+
};
|
|
@@ -4,9 +4,31 @@ export const _httpQueryParseURLSearchParams = (
|
|
|
4
4
|
input: string | IReadableURLSearchParams,
|
|
5
5
|
): IReadableURLSearchParams => {
|
|
6
6
|
if (typeof input === "string") {
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
let url: boolean = false;
|
|
8
|
+
if (input.startsWith("?")) {
|
|
9
|
+
input = input.substring(1);
|
|
10
|
+
url = true;
|
|
11
|
+
} else {
|
|
12
|
+
const index: number = input.indexOf("?");
|
|
13
|
+
if (index !== -1 && isUrlPrefix(input.substring(0, index))) {
|
|
14
|
+
input = input.substring(index + 1);
|
|
15
|
+
url = true;
|
|
16
|
+
} else if (index === -1 && isExplicitUrlPrefix(input)) {
|
|
17
|
+
input = "";
|
|
18
|
+
url = true;
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
if (url) {
|
|
22
|
+
const fragment: number = input.indexOf("#");
|
|
23
|
+
if (fragment !== -1) input = input.substring(0, fragment);
|
|
24
|
+
}
|
|
9
25
|
return new URLSearchParams(input);
|
|
10
26
|
}
|
|
11
27
|
return input;
|
|
12
28
|
};
|
|
29
|
+
|
|
30
|
+
const isUrlPrefix = (prefix: string): boolean =>
|
|
31
|
+
isExplicitUrlPrefix(prefix) || (prefix.length !== 0 && !/[=&]/.test(prefix));
|
|
32
|
+
|
|
33
|
+
const isExplicitUrlPrefix = (prefix: string): boolean =>
|
|
34
|
+
/^[a-z][a-z\d+.-]*:/i.test(prefix) || /^(?:\/\/|\/|\.{1,2}\/)/.test(prefix);
|
|
@@ -1,7 +1,4 @@
|
|
|
1
|
-
export const _isFormatByte = (str: string): boolean =>
|
|
2
|
-
PATTERN.lastIndex = 0;
|
|
3
|
-
return PATTERN.test(str);
|
|
4
|
-
};
|
|
1
|
+
export const _isFormatByte = (str: string): boolean => PATTERN.test(str);
|
|
5
2
|
|
|
6
3
|
const PATTERN =
|
|
7
|
-
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)
|
|
4
|
+
/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/;
|
|
@@ -1,3 +1,16 @@
|
|
|
1
|
-
export const _isFormatDate = (str: string): boolean =>
|
|
1
|
+
export const _isFormatDate = (str: string): boolean => {
|
|
2
|
+
const match: RegExpExecArray | null = PATTERN.exec(str);
|
|
3
|
+
if (match === null) return false;
|
|
4
|
+
const year: number = Number(match[1]);
|
|
5
|
+
const month: number = Number(match[2]);
|
|
6
|
+
const day: number = Number(match[3]);
|
|
7
|
+
const maximum: number =
|
|
8
|
+
DAYS[month - 1]! +
|
|
9
|
+
(month === 2 && (year % 400 === 0 || (year % 4 === 0 && year % 100 !== 0))
|
|
10
|
+
? 1
|
|
11
|
+
: 0);
|
|
12
|
+
return day <= maximum;
|
|
13
|
+
};
|
|
2
14
|
|
|
3
|
-
const
|
|
15
|
+
const PATTERN = /^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])$/;
|
|
16
|
+
const DAYS = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] as const;
|
|
@@ -1,4 +1,30 @@
|
|
|
1
|
-
|
|
1
|
+
import { _isFormatDate } from "./_isFormatDate";
|
|
2
|
+
|
|
3
|
+
export const _isFormatDateTime = (str: string): boolean => {
|
|
4
|
+
const match: RegExpExecArray | null = PATTERN.exec(str);
|
|
5
|
+
if (match === null || _isFormatDate(match[1]!) === false) return false;
|
|
6
|
+
if (match[7] !== "60") return true;
|
|
7
|
+
|
|
8
|
+
const instant: Date = new Date(0);
|
|
9
|
+
instant.setUTCFullYear(
|
|
10
|
+
Number(match[2]),
|
|
11
|
+
Number(match[3]) - 1,
|
|
12
|
+
Number(match[4]),
|
|
13
|
+
);
|
|
14
|
+
instant.setUTCHours(Number(match[5]), Number(match[6]), 0, 0);
|
|
15
|
+
const offset: number =
|
|
16
|
+
match[8] === undefined
|
|
17
|
+
? 0
|
|
18
|
+
: (match[8] === "+" ? 1 : -1) *
|
|
19
|
+
(Number(match[9]) * 60 + Number(match[10]));
|
|
20
|
+
instant.setUTCMinutes(instant.getUTCMinutes() - offset);
|
|
21
|
+
return (
|
|
22
|
+
instant.getUTCHours() === 23 &&
|
|
23
|
+
instant.getUTCMinutes() === 59 &&
|
|
24
|
+
((instant.getUTCMonth() === 5 && instant.getUTCDate() === 30) ||
|
|
25
|
+
(instant.getUTCMonth() === 11 && instant.getUTCDate() === 31))
|
|
26
|
+
);
|
|
27
|
+
};
|
|
2
28
|
|
|
3
29
|
const PATTERN =
|
|
4
|
-
/^[0-9]{4}-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01])
|
|
30
|
+
/^(([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[12][0-9]|3[01]))[Tt]((?:[01][0-9]|2[0-3])):([0-5][0-9]):([0-5][0-9]|60)(?:\.[0-9]+)?(?:[Zz]|([+-])((?:[01][0-9]|2[0-3])):([0-5][0-9]))$/;
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { _isFormatIriReference } from "./_isFormatIriReference";
|
|
2
2
|
|
|
3
|
-
const
|
|
3
|
+
export const _isFormatIri = (str: string): boolean =>
|
|
4
|
+
SCHEME.test(str) && _isFormatIriReference(str);
|
|
5
|
+
|
|
6
|
+
const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/u;
|
|
@@ -1,4 +1,12 @@
|
|
|
1
|
-
export const _isFormatIriReference = (str: string): boolean =>
|
|
2
|
-
|
|
1
|
+
export const _isFormatIriReference = (str: string): boolean => {
|
|
2
|
+
if (FORBIDDEN.test(str) || INVALID_PERCENT.test(str)) return false;
|
|
3
|
+
const colon: number = str.indexOf(":");
|
|
4
|
+
const boundary: number = str.search(/[/?#]/u);
|
|
5
|
+
return (
|
|
6
|
+
colon === -1 || (boundary !== -1 && boundary < colon) || SCHEME.test(str)
|
|
7
|
+
);
|
|
8
|
+
};
|
|
3
9
|
|
|
4
|
-
const
|
|
10
|
+
const FORBIDDEN = /[\u0000-\u0020\u007f-\u009f\ud800-\udfff"<>\\^`{|}]/u;
|
|
11
|
+
const INVALID_PERCENT = /%(?![0-9A-Fa-f]{2})/u;
|
|
12
|
+
const SCHEME = /^[A-Za-z][A-Za-z0-9+.-]*:/u;
|
|
@@ -2,4 +2,4 @@ export const _isFormatUriReference = (str: string): boolean =>
|
|
|
2
2
|
PATTERN.test(str);
|
|
3
3
|
|
|
4
4
|
const PATTERN =
|
|
5
|
-
/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'
|
|
5
|
+
/^(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?)?|(?:[a-z][a-z0-9+\-.]*:)(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|(?:[a-z0-9\-._~!$&'()*+,;=@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { _decimalDecompose, _decimalDivide } from "./_decimal";
|
|
2
|
+
|
|
3
|
+
export const _isMultipleOf = (value: number, multipleOf: number): boolean => {
|
|
4
|
+
const divisor = _decimalDecompose(multipleOf);
|
|
5
|
+
if (divisor === null || divisor.coefficient <= BigInt(0)) return false;
|
|
6
|
+
const ratio = _decimalDivide(value, divisor);
|
|
7
|
+
return ratio !== null && ratio.numerator % ratio.denominator === BigInt(0);
|
|
8
|
+
};
|