typia 13.1.1 → 13.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/_virtual/_rolldown/runtime.mjs +1 -5
- package/lib/executable/FileSystemIdentity.d.ts +44 -0
- package/lib/executable/FileSystemIdentity.js +213 -0
- package/lib/executable/FileSystemIdentity.js.map +1 -0
- package/lib/executable/FileSystemIdentity.mjs +133 -0
- package/lib/executable/FileSystemIdentity.mjs.map +1 -0
- package/lib/executable/TypiaGenerateWizard.js +272 -106
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +239 -95
- package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
- package/lib/functional.d.ts +15 -12
- package/lib/functional.js.map +1 -1
- package/lib/functional.mjs.map +1 -1
- package/lib/internal/_ProtobufReader.d.ts +32 -0
- package/lib/internal/_ProtobufReader.js +148 -48
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +137 -41
- package/lib/internal/_ProtobufReader.mjs.map +1 -1
- package/lib/internal/_createStandardSchema.js +18 -1
- package/lib/internal/_createStandardSchema.js.map +1 -1
- package/lib/internal/_createStandardSchema.mjs +12 -1
- package/lib/internal/_createStandardSchema.mjs.map +1 -1
- package/lib/internal/_decimal.d.ts +14 -0
- package/lib/internal/_decimal.js +61 -0
- package/lib/internal/_decimal.js.map +1 -0
- package/lib/internal/_decimal.mjs +49 -0
- package/lib/internal/_decimal.mjs.map +1 -0
- package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
- package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
- package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
- package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
- package/lib/internal/_isFormatByte.js +2 -5
- package/lib/internal/_isFormatByte.js.map +1 -1
- package/lib/internal/_isFormatByte.mjs +2 -5
- package/lib/internal/_isFormatByte.mjs.map +1 -1
- package/lib/internal/_isFormatDate.js +15 -2
- package/lib/internal/_isFormatDate.js.map +1 -1
- package/lib/internal/_isFormatDate.mjs +22 -2
- package/lib/internal/_isFormatDate.mjs.map +1 -1
- package/lib/internal/_isFormatDateTime.js +21 -2
- package/lib/internal/_isFormatDateTime.js.map +1 -1
- package/lib/internal/_isFormatDateTime.mjs +13 -2
- package/lib/internal/_isFormatDateTime.mjs.map +1 -1
- package/lib/internal/_isFormatIri.js +3 -2
- package/lib/internal/_isFormatIri.js.map +1 -1
- package/lib/internal/_isFormatIri.mjs +3 -2
- package/lib/internal/_isFormatIri.mjs.map +1 -1
- package/lib/internal/_isFormatIriReference.js +10 -2
- package/lib/internal/_isFormatIriReference.js.map +1 -1
- package/lib/internal/_isFormatIriReference.mjs +9 -2
- package/lib/internal/_isFormatIriReference.mjs.map +1 -1
- package/lib/internal/_isFormatUriReference.js +1 -1
- package/lib/internal/_isFormatUriReference.js.map +1 -1
- package/lib/internal/_isFormatUriReference.mjs +1 -1
- package/lib/internal/_isFormatUriReference.mjs.map +1 -1
- package/lib/internal/_isMultipleOf.d.ts +1 -0
- package/lib/internal/_isMultipleOf.js +13 -0
- package/lib/internal/_isMultipleOf.js.map +1 -0
- package/lib/internal/_isMultipleOf.mjs +12 -0
- package/lib/internal/_isMultipleOf.mjs.map +1 -0
- package/lib/internal/_isTypeFloat.js +1 -1
- package/lib/internal/_isTypeFloat.js.map +1 -1
- package/lib/internal/_isTypeFloat.mjs +1 -1
- package/lib/internal/_isTypeFloat.mjs.map +1 -1
- package/lib/internal/_isTypeInt64.js +1 -0
- package/lib/internal/_isTypeInt64.js.map +1 -1
- package/lib/internal/_isTypeInt64.mjs.map +1 -1
- package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeInt64Bigint.js +15 -0
- package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
- package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
- package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
- package/lib/internal/_isTypeUint64.js +1 -0
- package/lib/internal/_isTypeUint64.js.map +1 -1
- package/lib/internal/_isTypeUint64.mjs.map +1 -1
- package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeUint64Bigint.js +10 -0
- package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
- package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
- package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
- package/lib/internal/_isUniqueItems.js +96 -109
- package/lib/internal/_isUniqueItems.js.map +1 -1
- package/lib/internal/_isUniqueItems.mjs +62 -50
- package/lib/internal/_isUniqueItems.mjs.map +1 -1
- package/lib/internal/_jsonStringifyArray.d.ts +1 -0
- package/lib/internal/_jsonStringifyArray.js +48 -0
- package/lib/internal/_jsonStringifyArray.js.map +1 -0
- package/lib/internal/_jsonStringifyArray.mjs +40 -0
- package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
- package/lib/internal/_jsonStringifyElement.d.ts +1 -0
- package/lib/internal/_jsonStringifyElement.js +23 -0
- package/lib/internal/_jsonStringifyElement.js.map +1 -0
- package/lib/internal/_jsonStringifyElement.mjs +23 -0
- package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
- package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
- package/lib/internal/_jsonStringifyProperty.js +31 -0
- package/lib/internal/_jsonStringifyProperty.js.map +1 -0
- package/lib/internal/_jsonStringifyProperty.mjs +31 -0
- package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
- package/lib/internal/_llmApplicationFinalize.js +1 -1
- package/lib/internal/_llmApplicationFinalize.js.map +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
- package/lib/internal/_notationAny.js +8 -1
- package/lib/internal/_notationAny.js.map +1 -1
- package/lib/internal/_notationAny.mjs +7 -1
- package/lib/internal/_notationAny.mjs.map +1 -1
- package/lib/internal/_notationAssign.d.ts +1 -0
- package/lib/internal/_notationAssign.js +18 -0
- package/lib/internal/_notationAssign.js.map +1 -0
- package/lib/internal/_notationAssign.mjs +17 -0
- package/lib/internal/_notationAssign.mjs.map +1 -0
- package/lib/internal/_notationCamel.js +30 -9
- package/lib/internal/_notationCamel.js.map +1 -1
- package/lib/internal/_notationCamel.mjs +13 -5
- package/lib/internal/_notationCamel.mjs.map +1 -1
- package/lib/internal/_notationKebab.d.ts +1 -0
- package/lib/internal/_notationKebab.js +15 -0
- package/lib/internal/_notationKebab.js.map +1 -0
- package/lib/internal/_notationKebab.mjs +15 -0
- package/lib/internal/_notationKebab.mjs.map +1 -0
- package/lib/internal/_notationKeyCollision.d.ts +1 -0
- package/lib/internal/_notationKeyCollision.js +8 -0
- package/lib/internal/_notationKeyCollision.js.map +1 -0
- package/lib/internal/_notationKeyCollision.mjs +8 -0
- package/lib/internal/_notationKeyCollision.mjs.map +1 -0
- package/lib/internal/_notationPascal.js +20 -5
- package/lib/internal/_notationPascal.js.map +1 -1
- package/lib/internal/_notationPascal.mjs +10 -5
- package/lib/internal/_notationPascal.mjs.map +1 -1
- package/lib/internal/_notationSnake.js +25 -22
- package/lib/internal/_notationSnake.js.map +1 -1
- package/lib/internal/_notationSnake.mjs +11 -11
- package/lib/internal/_notationSnake.mjs.map +1 -1
- package/lib/internal/_plainCloneAny.js +174 -38
- package/lib/internal/_plainCloneAny.js.map +1 -1
- package/lib/internal/_plainCloneAny.mjs +126 -22
- package/lib/internal/_plainCloneAny.mjs.map +1 -1
- package/lib/internal/_randomArray.d.ts +1 -1
- package/lib/internal/_randomArray.js +11 -4
- package/lib/internal/_randomArray.js.map +1 -1
- package/lib/internal/_randomArray.mjs +9 -3
- package/lib/internal/_randomArray.mjs.map +1 -1
- package/lib/internal/_randomFormatByte.d.ts +2 -1
- package/lib/internal/_randomFormatByte.js +25 -1
- package/lib/internal/_randomFormatByte.js.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +20 -1
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.d.ts +3 -4
- package/lib/internal/_randomFormatDate.js +3 -10
- package/lib/internal/_randomFormatDate.js.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +3 -6
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.d.ts +3 -4
- package/lib/internal/_randomFormatDatetime.js +26 -8
- package/lib/internal/_randomFormatDatetime.js.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +17 -6
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.d.ts +2 -1
- package/lib/internal/_randomFormatDuration.js +23 -14
- package/lib/internal/_randomFormatDuration.js.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +22 -13
- package/lib/internal/_randomFormatDuration.mjs.map +1 -1
- package/lib/internal/_randomFormatEmail.d.ts +2 -1
- package/lib/internal/_randomFormatEmail.js +8 -1
- package/lib/internal/_randomFormatEmail.js.map +1 -1
- package/lib/internal/_randomFormatEmail.mjs +5 -1
- package/lib/internal/_randomFormatEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatHostname.d.ts +8 -1
- package/lib/internal/_randomFormatHostname.js +45 -2
- package/lib/internal/_randomFormatHostname.js.map +1 -1
- package/lib/internal/_randomFormatHostname.mjs +38 -2
- package/lib/internal/_randomFormatHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
- package/lib/internal/_randomFormatIdnEmail.js +16 -2
- package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
- package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
- package/lib/internal/_randomFormatIdnHostname.js +26 -1
- package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
- package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv4.d.ts +2 -1
- package/lib/internal/_randomFormatIpv4.js +32 -1
- package/lib/internal/_randomFormatIpv4.js.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +23 -1
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.d.ts +2 -1
- package/lib/internal/_randomFormatIpv6.js +58 -1
- package/lib/internal/_randomFormatIpv6.js.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +45 -1
- package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
- package/lib/internal/_randomFormatIri.d.ts +2 -1
- package/lib/internal/_randomFormatIri.js +1 -1
- package/lib/internal/_randomFormatIri.js.map +1 -1
- package/lib/internal/_randomFormatIri.mjs +1 -1
- package/lib/internal/_randomFormatIri.mjs.map +1 -1
- package/lib/internal/_randomFormatIriReference.d.ts +2 -1
- package/lib/internal/_randomFormatIriReference.js +1 -1
- package/lib/internal/_randomFormatIriReference.js.map +1 -1
- package/lib/internal/_randomFormatIriReference.mjs +1 -1
- package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatJsonPointer.js +20 -1
- package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
- package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatPassword.d.ts +2 -1
- package/lib/internal/_randomFormatPassword.js +7 -5
- package/lib/internal/_randomFormatPassword.js.map +1 -1
- package/lib/internal/_randomFormatPassword.mjs +5 -1
- package/lib/internal/_randomFormatPassword.mjs.map +1 -1
- package/lib/internal/_randomFormatRegex.d.ts +2 -1
- package/lib/internal/_randomFormatRegex.js +15 -1
- package/lib/internal/_randomFormatRegex.js.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +14 -1
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.d.ts +2 -1
- package/lib/internal/_randomFormatTime.js +34 -7
- package/lib/internal/_randomFormatTime.js.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +37 -4
- package/lib/internal/_randomFormatTime.mjs.map +1 -1
- package/lib/internal/_randomFormatUri.d.ts +2 -1
- package/lib/internal/_randomFormatUri.js +1 -1
- package/lib/internal/_randomFormatUri.js.map +1 -1
- package/lib/internal/_randomFormatUri.mjs +1 -1
- package/lib/internal/_randomFormatUri.mjs.map +1 -1
- package/lib/internal/_randomFormatUriReference.d.ts +2 -1
- package/lib/internal/_randomFormatUriReference.js +1 -1
- package/lib/internal/_randomFormatUriReference.js.map +1 -1
- package/lib/internal/_randomFormatUriReference.mjs +1 -1
- package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
- package/lib/internal/_randomFormatUriTemplate.js +1 -1
- package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_randomFormatUrl.d.ts +2 -1
- package/lib/internal/_randomFormatUrl.js +21 -1
- package/lib/internal/_randomFormatUrl.js.map +1 -1
- package/lib/internal/_randomFormatUrl.mjs +18 -1
- package/lib/internal/_randomFormatUrl.mjs.map +1 -1
- package/lib/internal/_randomFormatUuid.d.ts +2 -1
- package/lib/internal/_randomFormatUuid.js +3 -2
- package/lib/internal/_randomFormatUuid.js.map +1 -1
- package/lib/internal/_randomFormatUuid.mjs +3 -2
- package/lib/internal/_randomFormatUuid.mjs.map +1 -1
- package/lib/internal/_randomInteger.js +59 -28
- package/lib/internal/_randomInteger.js.map +1 -1
- package/lib/internal/_randomInteger.mjs +56 -16
- package/lib/internal/_randomInteger.mjs.map +1 -1
- package/lib/internal/_randomMultiple.d.ts +8 -0
- package/lib/internal/_randomMultiple.js +168 -0
- package/lib/internal/_randomMultiple.js.map +1 -0
- package/lib/internal/_randomMultiple.mjs +158 -0
- package/lib/internal/_randomMultiple.mjs.map +1 -0
- package/lib/internal/_randomNumber.js +42 -42
- package/lib/internal/_randomNumber.js.map +1 -1
- package/lib/internal/_randomNumber.mjs +41 -27
- package/lib/internal/_randomNumber.mjs.map +1 -1
- package/lib/internal/_randomPattern.d.ts +2 -1
- package/lib/internal/_randomPattern.js +19 -4
- package/lib/internal/_randomPattern.js.map +1 -1
- package/lib/internal/_randomPattern.mjs +10 -4
- package/lib/internal/_randomPattern.mjs.map +1 -1
- package/lib/internal/_randomStringLength.d.ts +64 -0
- package/lib/internal/_randomStringLength.js +84 -0
- package/lib/internal/_randomStringLength.js.map +1 -0
- package/lib/internal/_randomStringLength.mjs +79 -0
- package/lib/internal/_randomStringLength.mjs.map +1 -0
- package/lib/internal/_stringLength.d.ts +1 -0
- package/lib/internal/_stringLength.js +11 -0
- package/lib/internal/_stringLength.js.map +1 -0
- package/lib/internal/_stringLength.mjs +10 -0
- package/lib/internal/_stringLength.mjs.map +1 -0
- package/lib/internal/_validateReport.js +4 -1
- package/lib/internal/_validateReport.js.map +1 -1
- package/lib/internal/_validateReport.mjs +2 -1
- package/lib/internal/_validateReport.mjs.map +1 -1
- package/lib/internal/private/__notationRename.d.ts +14 -0
- package/lib/internal/private/__notationRename.js +25 -0
- package/lib/internal/private/__notationRename.js.map +1 -0
- package/lib/internal/private/__notationRename.mjs +24 -0
- package/lib/internal/private/__notationRename.mjs.map +1 -0
- package/lib/internal/private/__randomComposition.d.ts +23 -0
- package/lib/internal/private/__randomComposition.js +48 -0
- package/lib/internal/private/__randomComposition.js.map +1 -0
- package/lib/internal/private/__randomComposition.mjs +54 -0
- package/lib/internal/private/__randomComposition.mjs.map +1 -0
- package/lib/internal/private/__randomEpoch.d.ts +19 -0
- package/lib/internal/private/__randomEpoch.js +31 -0
- package/lib/internal/private/__randomEpoch.js.map +1 -0
- package/lib/internal/private/__randomEpoch.mjs +28 -0
- package/lib/internal/private/__randomEpoch.mjs.map +1 -0
- package/lib/json.d.ts +2 -2
- package/lib/json.mjs.map +1 -1
- package/lib/module.d.ts +2 -2
- package/lib/module.js.map +1 -1
- package/lib/module.mjs.map +1 -1
- package/lib/notations.d.ts +20 -4
- package/lib/notations.js.map +1 -1
- package/lib/notations.mjs.map +1 -1
- package/native/adapter/plugin_options.go +117 -0
- package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
- package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
- package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
- package/native/cmd/ttsc-typia/build.go +84 -64
- package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
- package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
- package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
- package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
- package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
- package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
- package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
- package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
- package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
- package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
- package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
- package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
- package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
- package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
- package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
- package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
- package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
- package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
- package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
- package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
- package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
- package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
- package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
- package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
- package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
- package/native/cmd/ttsc-typia/main_wasm.go +21 -2
- package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
- package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
- package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
- package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
- package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
- package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
- package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
- package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
- package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
- package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
- package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
- package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
- package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
- package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
- package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
- package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
- package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
- package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
- package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
- package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
- package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
- package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
- package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
- package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
- package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
- package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
- package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
- package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
- package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
- package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
- package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
- package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
- package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
- package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
- package/native/cmd/ttsc-typia/transform.go +251 -39
- package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
- package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
- package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
- package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
- package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
- package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
- package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
- package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
- package/native/core/factories/FormatCheatSheet.go +40 -7
- package/native/core/factories/IdentifierFactory.go +131 -4
- package/native/core/factories/MetadataCommentTagFactory.go +83 -40
- package/native/core/factories/MetadataTypeTagFactory.go +13 -1
- package/native/core/factories/NumericRangeFactory.go +60 -17
- package/native/core/factories/ProtobufFactory.go +13 -5
- package/native/core/factories/factory_utility_coverage_test.go +8 -2
- package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
- package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
- package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
- package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
- package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
- package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
- package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
- package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
- package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
- package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
- package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
- package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
- package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
- package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
- package/native/core/programmers/IsProgrammer.go +15 -1
- package/native/core/programmers/RandomProgrammer.go +51 -14
- package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
- package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
- package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
- package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
- package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
- package/native/core/programmers/helpers/CloneJoiner.go +32 -0
- package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
- package/native/core/programmers/helpers/NotationJoiner.go +86 -28
- package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
- package/native/core/programmers/helpers/UnionExplorer.go +203 -61
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
- package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
- package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
- package/native/core/programmers/iterate/check_template.go +344 -32
- package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
- package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
- package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
- package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
- package/native/core/programmers/iterate/json_schema_object.go +49 -7
- package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
- package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
- package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
- package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
- package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
- package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
- package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
- package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
- package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
- package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
- package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
- package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
- package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
- package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
- package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
- package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
- package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
- package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
- package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
- package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
- package/native/core/schemas/metadata/MetadataCollection.go +266 -25
- package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
- package/native/core/schemas/metadata/MetadataDependency.go +388 -0
- package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
- package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
- package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
- package/native/core/utils/PatternUtil.go +13 -0
- package/native/core/utils/PromiseTypeFactory.go +59 -0
- package/native/core/utils/ProtobufNameEncoder.go +8 -0
- package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
- package/native/go.mod +9 -1
- package/native/transform/CallExpressionTransformer.go +12 -0
- package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
- package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
- package/package.json +12 -4
- package/src/executable/FileSystemIdentity.ts +222 -0
- package/src/executable/TypiaGenerateWizard.ts +386 -113
- package/src/functional.ts +30 -60
- package/src/internal/_ProtobufReader.ts +161 -46
- package/src/internal/_createStandardSchema.ts +15 -1
- package/src/internal/_decimal.ts +69 -0
- package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
- package/src/internal/_isFormatByte.ts +2 -5
- package/src/internal/_isFormatDate.ts +15 -2
- package/src/internal/_isFormatDateTime.ts +28 -2
- package/src/internal/_isFormatIri.ts +5 -2
- package/src/internal/_isFormatIriReference.ts +11 -3
- package/src/internal/_isFormatUriReference.ts +1 -1
- package/src/internal/_isMultipleOf.ts +8 -0
- package/src/internal/_isTypeFloat.ts +1 -1
- package/src/internal/_isTypeInt64.ts +1 -0
- package/src/internal/_isTypeInt64Bigint.ts +12 -0
- package/src/internal/_isTypeUint64.ts +1 -0
- package/src/internal/_isTypeUint64Bigint.ts +7 -0
- package/src/internal/_isUniqueItems.ts +134 -132
- package/src/internal/_jsonStringifyArray.ts +50 -0
- package/src/internal/_jsonStringifyElement.ts +19 -0
- package/src/internal/_jsonStringifyProperty.ts +30 -0
- package/src/internal/_llmApplicationFinalize.ts +6 -1
- package/src/internal/_notationAny.ts +9 -4
- package/src/internal/_notationAssign.ts +20 -0
- package/src/internal/_notationCamel.ts +31 -10
- package/src/internal/_notationKebab.ts +11 -0
- package/src/internal/_notationKeyCollision.ts +9 -0
- package/src/internal/_notationPascal.ts +19 -6
- package/src/internal/_notationSnake.ts +24 -21
- package/src/internal/_plainCloneAny.ts +208 -33
- package/src/internal/_randomArray.ts +13 -4
- package/src/internal/_randomFormatByte.ts +31 -1
- package/src/internal/_randomFormatDate.ts +6 -17
- package/src/internal/_randomFormatDatetime.ts +34 -15
- package/src/internal/_randomFormatDuration.ts +30 -13
- package/src/internal/_randomFormatEmail.ts +8 -2
- package/src/internal/_randomFormatHostname.ts +48 -1
- package/src/internal/_randomFormatIdnEmail.ts +18 -2
- package/src/internal/_randomFormatIdnHostname.ts +34 -2
- package/src/internal/_randomFormatIpv4.ts +43 -2
- package/src/internal/_randomFormatIpv6.ts +67 -2
- package/src/internal/_randomFormatIri.ts +3 -1
- package/src/internal/_randomFormatIriReference.ts +3 -1
- package/src/internal/_randomFormatJsonPointer.ts +28 -2
- package/src/internal/_randomFormatPassword.ts +11 -6
- package/src/internal/_randomFormatRegex.ts +22 -1
- package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
- package/src/internal/_randomFormatTime.ts +46 -10
- package/src/internal/_randomFormatUri.ts +3 -1
- package/src/internal/_randomFormatUriReference.ts +3 -1
- package/src/internal/_randomFormatUriTemplate.ts +3 -1
- package/src/internal/_randomFormatUrl.ts +25 -2
- package/src/internal/_randomFormatUuid.ts +10 -6
- package/src/internal/_randomInteger.ts +87 -40
- package/src/internal/_randomMultiple.ts +245 -0
- package/src/internal/_randomNumber.ts +72 -55
- package/src/internal/_randomPattern.ts +29 -4
- package/src/internal/_randomStringLength.ts +116 -0
- package/src/internal/_stringLength.ts +5 -0
- package/src/internal/_validateReport.ts +5 -1
- package/src/internal/private/__notationRename.ts +21 -0
- package/src/internal/private/__randomComposition.ts +50 -0
- package/src/internal/private/__randomEpoch.ts +34 -0
- package/src/json.ts +2 -2
- package/src/module.ts +4 -6
- package/src/notations.ts +20 -4
- package/lib/internal/private/__notationCapitalize.d.ts +0 -1
- package/lib/internal/private/__notationCapitalize.js +0 -6
- package/lib/internal/private/__notationCapitalize.js.map +0 -1
- package/lib/internal/private/__notationCapitalize.mjs +0 -6
- package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
- package/lib/internal/private/__notationUnsnake.d.ts +0 -4
- package/lib/internal/private/__notationUnsnake.js +0 -26
- package/lib/internal/private/__notationUnsnake.js.map +0 -1
- package/lib/internal/private/__notationUnsnake.mjs +0 -15
- package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
- package/native/adapter/visit.go +0 -173
- package/native/adapter/visit_property_chain_edges_test.go +0 -129
- package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
- package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
- package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
- package/native/core/programmers/iterate/check_union_array_like.go +0 -422
- package/native/core/programmers/iterate/prune_object_properties.go +0 -105
- package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
- package/native/core/programmers/iterate/stringify_native.go +0 -14
- package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
- package/native/core/schemas/metadata/MetadataApplication.go +0 -41
- package/src/internal/private/__notationCapitalize.ts +0 -2
- package/src/internal/private/__notationUnsnake.ts +0 -24
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,94 @@ 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
|
+
}
|
|
80
87
|
}
|
|
81
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
|
+
});
|
|
97
|
+
}
|
|
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}. Its tenth byte is bounded
|
|
114
|
+
* twice over, by {@link lastVarintByte}: it may neither continue into an
|
|
115
|
+
* eleventh byte nor carry payload above bit 63. Skipping is where that is
|
|
116
|
+
* easiest to get wrong, because this path discards the bytes it reads and so
|
|
117
|
+
* never notices a value it could not have represented. Relaxing either bound
|
|
118
|
+
* here would accept a varint that `varint32` and `varint64` reject, making
|
|
119
|
+
* the limit depend on which method happens to consume the value.
|
|
120
|
+
*/
|
|
121
|
+
public skipVarint(): void {
|
|
122
|
+
this.atomic(() => {
|
|
123
|
+
for (let i: number = 1; i < VARINT_MAX_BYTES; ++i)
|
|
124
|
+
if ((this.u8() & 0x80) === 0) return;
|
|
125
|
+
this.lastVarintByte();
|
|
126
|
+
});
|
|
89
127
|
}
|
|
90
128
|
|
|
91
129
|
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
|
-
|
|
130
|
+
this.atomic(() => {
|
|
131
|
+
switch (wireType) {
|
|
132
|
+
case ProtobufWire.VARIANT:
|
|
133
|
+
this.skipVarint();
|
|
134
|
+
break;
|
|
135
|
+
case ProtobufWire.I64:
|
|
136
|
+
this.skip(8);
|
|
137
|
+
break;
|
|
138
|
+
case ProtobufWire.LEN:
|
|
139
|
+
this.skip(this.uint32());
|
|
140
|
+
break;
|
|
141
|
+
case ProtobufWire.START_GROUP:
|
|
142
|
+
while ((wireType = this.uint32() & 0x07) !== ProtobufWire.END_GROUP)
|
|
143
|
+
this.skipType(wireType);
|
|
144
|
+
break;
|
|
145
|
+
case ProtobufWire.I32:
|
|
146
|
+
this.skip(4);
|
|
147
|
+
break;
|
|
148
|
+
default:
|
|
149
|
+
throw error(`invalid wire type ${wireType} at offset ${this.ptr}.`);
|
|
150
|
+
}
|
|
151
|
+
});
|
|
112
152
|
}
|
|
113
153
|
|
|
114
154
|
private varint32(): number {
|
|
@@ -130,13 +170,13 @@ export class _ProtobufReader {
|
|
|
130
170
|
value |= ((loaded = this.u8()) & 0xf) << 28;
|
|
131
171
|
if (loaded < 0x80) return value;
|
|
132
172
|
|
|
133
|
-
// increment position until there is no continuation bit or until
|
|
134
|
-
|
|
173
|
+
// increment position until there is no continuation bit, or until this read
|
|
174
|
+
// reaches VARINT_MAX_BYTES and the value can hold no further bits
|
|
135
175
|
if (this.u8() < 0x80) return value;
|
|
136
176
|
if (this.u8() < 0x80) return value;
|
|
137
177
|
if (this.u8() < 0x80) return value;
|
|
138
178
|
if (this.u8() < 0x80) return value;
|
|
139
|
-
|
|
179
|
+
this.lastVarintByte();
|
|
140
180
|
return value;
|
|
141
181
|
}
|
|
142
182
|
|
|
@@ -171,17 +211,92 @@ export class _ProtobufReader {
|
|
|
171
211
|
value |= ((loaded = this.u8n()) & BigInt(0x7f)) << BigInt(56);
|
|
172
212
|
if (loaded < BigInt(0x80)) return value;
|
|
173
213
|
|
|
174
|
-
value |= (this.
|
|
175
|
-
return BigInt.
|
|
214
|
+
value |= BigInt(this.lastVarintByte()) << BigInt(63);
|
|
215
|
+
return BigInt.asUintN(64, value);
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
/**
|
|
219
|
+
* Read the only byte whose varint payload is limited to bit 63.
|
|
220
|
+
*
|
|
221
|
+
* Two distinct faults meet on this byte, and each is named for what it is. A
|
|
222
|
+
* continuation bit means the varint would occupy an eleventh byte, which no
|
|
223
|
+
* 64-bit value can reach. Any other payload bit means the varint terminates
|
|
224
|
+
* within its ten bytes but carries a value bit above 63. Reporting the second
|
|
225
|
+
* as a length fault would tell the caller something untrue about a payload
|
|
226
|
+
* that is exactly ten bytes long.
|
|
227
|
+
*/
|
|
228
|
+
private lastVarintByte(): number {
|
|
229
|
+
const loaded: number = this.u8();
|
|
230
|
+
if ((loaded & 0x80) !== 0)
|
|
231
|
+
throw error(`varint exceeds ${VARINT_MAX_BYTES} bytes.`);
|
|
232
|
+
if (loaded > 0x01) throw error(`varint exceeds ${VARINT_MAX_BITS} bits.`);
|
|
233
|
+
return loaded;
|
|
176
234
|
}
|
|
177
235
|
|
|
178
236
|
private u8(): number {
|
|
179
|
-
return this.view.getUint8(this.
|
|
237
|
+
return this.view.getUint8(this.take(1));
|
|
180
238
|
}
|
|
181
239
|
|
|
182
240
|
private u8n(): bigint {
|
|
183
241
|
return BigInt(this.u8());
|
|
184
242
|
}
|
|
243
|
+
|
|
244
|
+
private take(length: number): number {
|
|
245
|
+
this.validate(length);
|
|
246
|
+
const from: number = this.ptr;
|
|
247
|
+
this.ptr += length;
|
|
248
|
+
return from;
|
|
249
|
+
}
|
|
250
|
+
|
|
251
|
+
private atomic<T>(closure: () => T): T {
|
|
252
|
+
const index: number = this.ptr;
|
|
253
|
+
const end: number = this.end;
|
|
254
|
+
try {
|
|
255
|
+
return closure();
|
|
256
|
+
} catch (thrown) {
|
|
257
|
+
this.ptr = index;
|
|
258
|
+
this.end = end;
|
|
259
|
+
throw thrown;
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
|
|
263
|
+
private validate(length: number): void {
|
|
264
|
+
if (
|
|
265
|
+
Number.isSafeInteger(length) === false ||
|
|
266
|
+
length < 0 ||
|
|
267
|
+
length > this.size() - this.ptr
|
|
268
|
+
)
|
|
269
|
+
throw error("buffer overflow.");
|
|
270
|
+
}
|
|
185
271
|
}
|
|
186
272
|
|
|
187
|
-
|
|
273
|
+
/**
|
|
274
|
+
* Builds every fault this reader raises, so each one names typia as its source.
|
|
275
|
+
*
|
|
276
|
+
* Every decode error a caller can see must be attributable, and the prefix is
|
|
277
|
+
* what attributes it. Composing it here rather than at each throw keeps a new
|
|
278
|
+
* fault from silently shipping without it.
|
|
279
|
+
*/
|
|
280
|
+
const error = (message: string): Error =>
|
|
281
|
+
new Error(`Error on typia.protobuf.decode(): ${message}`);
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* The most bytes a varint may occupy: a 64-bit value in seven-bit groups.
|
|
285
|
+
*
|
|
286
|
+
* Every path reads no further than its tenth byte and accepts only bit 63 from
|
|
287
|
+
* that byte. This constant keeps the loop-driven skip path on the same limit.
|
|
288
|
+
*/
|
|
289
|
+
const VARINT_MAX_BYTES = 10;
|
|
290
|
+
|
|
291
|
+
/**
|
|
292
|
+
* The widest value a varint may carry: the 64-bit Protocol Buffer wire domain.
|
|
293
|
+
*
|
|
294
|
+
* The tenth byte reaches only bit 63, so a payload bit above it belongs to no
|
|
295
|
+
* representable value. This names the overflow fault apart from the length
|
|
296
|
+
* one.
|
|
297
|
+
*/
|
|
298
|
+
const VARINT_MAX_BITS = 64;
|
|
299
|
+
|
|
300
|
+
const utf8 = new Singleton(
|
|
301
|
+
() => new TextDecoder("utf-8", { fatal: true, ignoreBOM: true }),
|
|
302
|
+
);
|
|
@@ -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;
|