typia 13.1.1 → 13.1.19
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/_virtual/_rolldown/runtime.mjs +1 -5
- package/lib/executable/FileSystemIdentity.d.ts +21 -0
- package/lib/executable/FileSystemIdentity.js +183 -0
- package/lib/executable/FileSystemIdentity.js.map +1 -0
- package/lib/executable/FileSystemIdentity.mjs +129 -0
- package/lib/executable/FileSystemIdentity.mjs.map +1 -0
- package/lib/executable/TypiaGenerateWizard.js +264 -104
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +233 -93
- package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
- package/lib/functional.d.ts +15 -12
- package/lib/functional.js.map +1 -1
- package/lib/functional.mjs.map +1 -1
- package/lib/internal/_ProtobufReader.d.ts +17 -0
- package/lib/internal/_ProtobufReader.js +117 -45
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +108 -39
- package/lib/internal/_ProtobufReader.mjs.map +1 -1
- package/lib/internal/_createStandardSchema.js +18 -1
- package/lib/internal/_createStandardSchema.js.map +1 -1
- package/lib/internal/_createStandardSchema.mjs +12 -1
- package/lib/internal/_createStandardSchema.mjs.map +1 -1
- package/lib/internal/_decimal.d.ts +14 -0
- package/lib/internal/_decimal.js +61 -0
- package/lib/internal/_decimal.js.map +1 -0
- package/lib/internal/_decimal.mjs +49 -0
- package/lib/internal/_decimal.mjs.map +1 -0
- package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
- package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
- package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
- package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
- package/lib/internal/_isFormatByte.js +2 -5
- package/lib/internal/_isFormatByte.js.map +1 -1
- package/lib/internal/_isFormatByte.mjs +2 -5
- package/lib/internal/_isFormatByte.mjs.map +1 -1
- package/lib/internal/_isFormatDate.js +15 -2
- package/lib/internal/_isFormatDate.js.map +1 -1
- package/lib/internal/_isFormatDate.mjs +22 -2
- package/lib/internal/_isFormatDate.mjs.map +1 -1
- package/lib/internal/_isFormatDateTime.js +21 -2
- package/lib/internal/_isFormatDateTime.js.map +1 -1
- package/lib/internal/_isFormatDateTime.mjs +13 -2
- package/lib/internal/_isFormatDateTime.mjs.map +1 -1
- package/lib/internal/_isFormatIri.js +3 -2
- package/lib/internal/_isFormatIri.js.map +1 -1
- package/lib/internal/_isFormatIri.mjs +3 -2
- package/lib/internal/_isFormatIri.mjs.map +1 -1
- package/lib/internal/_isFormatIriReference.js +10 -2
- package/lib/internal/_isFormatIriReference.js.map +1 -1
- package/lib/internal/_isFormatIriReference.mjs +9 -2
- package/lib/internal/_isFormatIriReference.mjs.map +1 -1
- package/lib/internal/_isFormatUriReference.js +1 -1
- package/lib/internal/_isFormatUriReference.js.map +1 -1
- package/lib/internal/_isFormatUriReference.mjs +1 -1
- package/lib/internal/_isFormatUriReference.mjs.map +1 -1
- package/lib/internal/_isMultipleOf.d.ts +1 -0
- package/lib/internal/_isMultipleOf.js +13 -0
- package/lib/internal/_isMultipleOf.js.map +1 -0
- package/lib/internal/_isMultipleOf.mjs +12 -0
- package/lib/internal/_isMultipleOf.mjs.map +1 -0
- package/lib/internal/_isTypeFloat.js +1 -1
- package/lib/internal/_isTypeFloat.js.map +1 -1
- package/lib/internal/_isTypeFloat.mjs +1 -1
- package/lib/internal/_isTypeFloat.mjs.map +1 -1
- package/lib/internal/_isTypeInt64.js +1 -0
- package/lib/internal/_isTypeInt64.js.map +1 -1
- package/lib/internal/_isTypeInt64.mjs.map +1 -1
- package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeInt64Bigint.js +15 -0
- package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
- package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
- package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
- package/lib/internal/_isTypeUint64.js +1 -0
- package/lib/internal/_isTypeUint64.js.map +1 -1
- package/lib/internal/_isTypeUint64.mjs.map +1 -1
- package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeUint64Bigint.js +10 -0
- package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
- package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
- package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
- package/lib/internal/_isUniqueItems.js +96 -109
- package/lib/internal/_isUniqueItems.js.map +1 -1
- package/lib/internal/_isUniqueItems.mjs +62 -50
- package/lib/internal/_isUniqueItems.mjs.map +1 -1
- package/lib/internal/_notationAny.js +8 -1
- package/lib/internal/_notationAny.js.map +1 -1
- package/lib/internal/_notationAny.mjs +7 -1
- package/lib/internal/_notationAny.mjs.map +1 -1
- package/lib/internal/_notationAssign.d.ts +1 -0
- package/lib/internal/_notationAssign.js +18 -0
- package/lib/internal/_notationAssign.js.map +1 -0
- package/lib/internal/_notationAssign.mjs +17 -0
- package/lib/internal/_notationAssign.mjs.map +1 -0
- package/lib/internal/_notationCamel.js +30 -9
- package/lib/internal/_notationCamel.js.map +1 -1
- package/lib/internal/_notationCamel.mjs +13 -5
- package/lib/internal/_notationCamel.mjs.map +1 -1
- package/lib/internal/_notationKebab.d.ts +1 -0
- package/lib/internal/_notationKebab.js +15 -0
- package/lib/internal/_notationKebab.js.map +1 -0
- package/lib/internal/_notationKebab.mjs +15 -0
- package/lib/internal/_notationKebab.mjs.map +1 -0
- package/lib/internal/_notationKeyCollision.d.ts +1 -0
- package/lib/internal/_notationKeyCollision.js +8 -0
- package/lib/internal/_notationKeyCollision.js.map +1 -0
- package/lib/internal/_notationKeyCollision.mjs +8 -0
- package/lib/internal/_notationKeyCollision.mjs.map +1 -0
- package/lib/internal/_notationPascal.js +20 -5
- package/lib/internal/_notationPascal.js.map +1 -1
- package/lib/internal/_notationPascal.mjs +10 -5
- package/lib/internal/_notationPascal.mjs.map +1 -1
- package/lib/internal/_notationSnake.js +25 -22
- package/lib/internal/_notationSnake.js.map +1 -1
- package/lib/internal/_notationSnake.mjs +11 -11
- package/lib/internal/_notationSnake.mjs.map +1 -1
- package/lib/internal/_plainCloneAny.js +174 -38
- package/lib/internal/_plainCloneAny.js.map +1 -1
- package/lib/internal/_plainCloneAny.mjs +126 -22
- package/lib/internal/_plainCloneAny.mjs.map +1 -1
- package/lib/internal/_randomArray.d.ts +1 -1
- package/lib/internal/_randomArray.js +11 -4
- package/lib/internal/_randomArray.js.map +1 -1
- package/lib/internal/_randomArray.mjs +9 -3
- package/lib/internal/_randomArray.mjs.map +1 -1
- package/lib/internal/_randomFormatByte.d.ts +2 -1
- package/lib/internal/_randomFormatByte.js +2 -1
- package/lib/internal/_randomFormatByte.js.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +2 -1
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.d.ts +2 -0
- package/lib/internal/_randomFormatDate.js +3 -2
- package/lib/internal/_randomFormatDate.js.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +3 -2
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.d.ts +2 -0
- package/lib/internal/_randomFormatDatetime.js +3 -2
- package/lib/internal/_randomFormatDatetime.js.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +3 -2
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.d.ts +2 -1
- package/lib/internal/_randomFormatDuration.js +3 -2
- package/lib/internal/_randomFormatDuration.js.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +3 -2
- package/lib/internal/_randomFormatDuration.mjs.map +1 -1
- package/lib/internal/_randomFormatEmail.d.ts +2 -1
- package/lib/internal/_randomFormatEmail.js +8 -1
- package/lib/internal/_randomFormatEmail.js.map +1 -1
- package/lib/internal/_randomFormatEmail.mjs +5 -1
- package/lib/internal/_randomFormatEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatHostname.d.ts +8 -1
- package/lib/internal/_randomFormatHostname.js +45 -2
- package/lib/internal/_randomFormatHostname.js.map +1 -1
- package/lib/internal/_randomFormatHostname.mjs +38 -2
- package/lib/internal/_randomFormatHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
- package/lib/internal/_randomFormatIdnEmail.js +16 -2
- package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
- package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
- package/lib/internal/_randomFormatIdnHostname.js +26 -1
- package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
- package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv4.d.ts +2 -1
- package/lib/internal/_randomFormatIpv4.js +2 -1
- package/lib/internal/_randomFormatIpv4.js.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +2 -1
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.d.ts +2 -1
- package/lib/internal/_randomFormatIpv6.js +2 -1
- package/lib/internal/_randomFormatIpv6.js.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +2 -1
- package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
- package/lib/internal/_randomFormatIri.d.ts +2 -1
- package/lib/internal/_randomFormatIri.js +1 -1
- package/lib/internal/_randomFormatIri.js.map +1 -1
- package/lib/internal/_randomFormatIri.mjs +1 -1
- package/lib/internal/_randomFormatIri.mjs.map +1 -1
- package/lib/internal/_randomFormatIriReference.d.ts +2 -1
- package/lib/internal/_randomFormatIriReference.js +1 -1
- package/lib/internal/_randomFormatIriReference.js.map +1 -1
- package/lib/internal/_randomFormatIriReference.mjs +1 -1
- package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatJsonPointer.js +8 -1
- package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +5 -1
- package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatPassword.d.ts +2 -1
- package/lib/internal/_randomFormatPassword.js +7 -5
- package/lib/internal/_randomFormatPassword.js.map +1 -1
- package/lib/internal/_randomFormatPassword.mjs +5 -1
- package/lib/internal/_randomFormatPassword.mjs.map +1 -1
- package/lib/internal/_randomFormatRegex.d.ts +2 -1
- package/lib/internal/_randomFormatRegex.js +2 -1
- package/lib/internal/_randomFormatRegex.js.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +2 -1
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.js +3 -2
- package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +3 -2
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.d.ts +2 -1
- package/lib/internal/_randomFormatTime.js +3 -2
- package/lib/internal/_randomFormatTime.js.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +3 -2
- package/lib/internal/_randomFormatTime.mjs.map +1 -1
- package/lib/internal/_randomFormatUri.d.ts +2 -1
- package/lib/internal/_randomFormatUri.js +1 -1
- package/lib/internal/_randomFormatUri.js.map +1 -1
- package/lib/internal/_randomFormatUri.mjs +1 -1
- package/lib/internal/_randomFormatUri.mjs.map +1 -1
- package/lib/internal/_randomFormatUriReference.d.ts +2 -1
- package/lib/internal/_randomFormatUriReference.js +1 -1
- package/lib/internal/_randomFormatUriReference.js.map +1 -1
- package/lib/internal/_randomFormatUriReference.mjs +1 -1
- package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
- package/lib/internal/_randomFormatUriTemplate.js +1 -1
- package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_randomFormatUrl.d.ts +2 -1
- package/lib/internal/_randomFormatUrl.js +21 -1
- package/lib/internal/_randomFormatUrl.js.map +1 -1
- package/lib/internal/_randomFormatUrl.mjs +18 -1
- package/lib/internal/_randomFormatUrl.mjs.map +1 -1
- package/lib/internal/_randomFormatUuid.d.ts +2 -1
- package/lib/internal/_randomFormatUuid.js +3 -2
- package/lib/internal/_randomFormatUuid.js.map +1 -1
- package/lib/internal/_randomFormatUuid.mjs +3 -2
- package/lib/internal/_randomFormatUuid.mjs.map +1 -1
- package/lib/internal/_randomInteger.js +59 -28
- package/lib/internal/_randomInteger.js.map +1 -1
- package/lib/internal/_randomInteger.mjs +56 -16
- package/lib/internal/_randomInteger.mjs.map +1 -1
- package/lib/internal/_randomMultiple.d.ts +8 -0
- package/lib/internal/_randomMultiple.js +168 -0
- package/lib/internal/_randomMultiple.js.map +1 -0
- package/lib/internal/_randomMultiple.mjs +158 -0
- package/lib/internal/_randomMultiple.mjs.map +1 -0
- package/lib/internal/_randomNumber.js +42 -42
- package/lib/internal/_randomNumber.js.map +1 -1
- package/lib/internal/_randomNumber.mjs +41 -27
- package/lib/internal/_randomNumber.mjs.map +1 -1
- package/lib/internal/_randomPattern.d.ts +2 -1
- package/lib/internal/_randomPattern.js +19 -4
- package/lib/internal/_randomPattern.js.map +1 -1
- package/lib/internal/_randomPattern.mjs +10 -4
- package/lib/internal/_randomPattern.mjs.map +1 -1
- package/lib/internal/_randomStringLength.d.ts +33 -0
- package/lib/internal/_randomStringLength.js +48 -0
- package/lib/internal/_randomStringLength.js.map +1 -0
- package/lib/internal/_randomStringLength.mjs +44 -0
- package/lib/internal/_randomStringLength.mjs.map +1 -0
- package/lib/internal/_stringLength.d.ts +1 -0
- package/lib/internal/_stringLength.js +11 -0
- package/lib/internal/_stringLength.js.map +1 -0
- package/lib/internal/_stringLength.mjs +10 -0
- package/lib/internal/_stringLength.mjs.map +1 -0
- package/lib/internal/_validateReport.js +4 -1
- package/lib/internal/_validateReport.js.map +1 -1
- package/lib/internal/_validateReport.mjs +2 -1
- package/lib/internal/_validateReport.mjs.map +1 -1
- package/lib/internal/private/__notationRename.d.ts +14 -0
- package/lib/internal/private/__notationRename.js +25 -0
- package/lib/internal/private/__notationRename.js.map +1 -0
- package/lib/internal/private/__notationRename.mjs +24 -0
- package/lib/internal/private/__notationRename.mjs.map +1 -0
- package/lib/json.d.ts +2 -2
- package/lib/json.mjs.map +1 -1
- package/lib/module.d.ts +2 -2
- package/lib/module.js.map +1 -1
- package/lib/module.mjs.map +1 -1
- package/lib/notations.d.ts +20 -4
- package/lib/notations.js.map +1 -1
- package/lib/notations.mjs.map +1 -1
- package/native/adapter/plugin_options.go +117 -0
- package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
- package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
- package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
- package/native/cmd/ttsc-typia/build.go +81 -64
- package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
- package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
- package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
- package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
- package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
- package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
- package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
- package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
- package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
- package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
- package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
- package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
- package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
- package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
- package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
- package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
- package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
- package/native/cmd/ttsc-typia/main_wasm.go +21 -2
- package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
- package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
- package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
- package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
- package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
- package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
- package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
- package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
- package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
- package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
- package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
- package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
- package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
- package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
- package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
- package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
- package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
- package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
- package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
- package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
- package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
- package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
- package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
- package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
- package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
- package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
- package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
- package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
- package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
- package/native/cmd/ttsc-typia/transform.go +228 -39
- package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
- package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
- package/native/cmd/ttsc-typia/transform_helpers_test.go +159 -1
- package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
- package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
- package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
- package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
- package/native/core/factories/FormatCheatSheet.go +40 -7
- package/native/core/factories/IdentifierFactory.go +131 -4
- package/native/core/factories/MetadataCommentTagFactory.go +83 -40
- package/native/core/factories/MetadataTypeTagFactory.go +13 -1
- package/native/core/factories/NumericRangeFactory.go +60 -17
- package/native/core/factories/ProtobufFactory.go +7 -4
- package/native/core/factories/factory_utility_coverage_test.go +8 -2
- package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
- package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
- package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
- package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
- package/native/core/factories/internal/metadata/MetadataHelper.go +60 -6
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +116 -8
- package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +4 -11
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +8 -6
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +9 -0
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +27 -2
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +9 -0
- package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
- package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
- package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
- package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
- package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
- package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
- package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
- package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
- package/native/core/programmers/IsProgrammer.go +15 -1
- package/native/core/programmers/RandomProgrammer.go +51 -14
- package/native/core/programmers/compare/CompareEqualProgrammer.go +393 -5
- package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
- package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
- package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
- package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
- package/native/core/programmers/helpers/CloneJoiner.go +32 -0
- package/native/core/programmers/helpers/NotationJoiner.go +86 -28
- package/native/core/programmers/helpers/StringifyJoinder.go +32 -1
- package/native/core/programmers/helpers/UnionExplorer.go +203 -61
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +5 -3
- package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
- package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
- package/native/core/programmers/iterate/check_template.go +344 -32
- package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
- package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader.go +641 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
- package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
- package/native/core/programmers/iterate/template_runtime_pattern.go +52 -7
- package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
- package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +12 -10
- package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
- package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
- package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
- package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
- package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
- package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
- package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
- package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
- package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
- package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
- package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
- package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +40 -21
- package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
- package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
- package/native/core/schemas/metadata/MetadataCollection.go +270 -20
- package/native/core/schemas/metadata/MetadataDependency.go +388 -0
- package/native/core/schemas/metadata/MetadataObjectType.go +17 -4
- package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
- package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
- package/native/core/utils/PatternUtil.go +13 -0
- package/native/core/utils/PromiseTypeFactory.go +59 -0
- package/native/core/utils/ProtobufNameEncoder.go +8 -0
- package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
- package/native/go.mod +9 -1
- package/native/transform/CallExpressionTransformer.go +12 -0
- package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
- package/package.json +16 -4
- package/src/executable/FileSystemIdentity.ts +189 -0
- package/src/executable/TypiaGenerateWizard.ts +377 -110
- package/src/functional.ts +30 -60
- package/src/internal/_ProtobufReader.ts +129 -43
- package/src/internal/_createStandardSchema.ts +15 -1
- package/src/internal/_decimal.ts +69 -0
- package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
- package/src/internal/_isFormatByte.ts +2 -5
- package/src/internal/_isFormatDate.ts +15 -2
- package/src/internal/_isFormatDateTime.ts +28 -2
- package/src/internal/_isFormatIri.ts +5 -2
- package/src/internal/_isFormatIriReference.ts +11 -3
- package/src/internal/_isFormatUriReference.ts +1 -1
- package/src/internal/_isMultipleOf.ts +8 -0
- package/src/internal/_isTypeFloat.ts +1 -1
- package/src/internal/_isTypeInt64.ts +1 -0
- package/src/internal/_isTypeInt64Bigint.ts +12 -0
- package/src/internal/_isTypeUint64.ts +1 -0
- package/src/internal/_isTypeUint64Bigint.ts +7 -0
- package/src/internal/_isUniqueItems.ts +134 -132
- package/src/internal/_notationAny.ts +9 -4
- package/src/internal/_notationAssign.ts +20 -0
- package/src/internal/_notationCamel.ts +31 -10
- package/src/internal/_notationKebab.ts +11 -0
- package/src/internal/_notationKeyCollision.ts +9 -0
- package/src/internal/_notationPascal.ts +19 -6
- package/src/internal/_notationSnake.ts +24 -21
- package/src/internal/_plainCloneAny.ts +208 -33
- package/src/internal/_randomArray.ts +13 -4
- package/src/internal/_randomFormatByte.ts +4 -1
- package/src/internal/_randomFormatDate.ts +17 -12
- package/src/internal/_randomFormatDatetime.ts +15 -10
- package/src/internal/_randomFormatDuration.ts +16 -14
- package/src/internal/_randomFormatEmail.ts +8 -2
- package/src/internal/_randomFormatHostname.ts +48 -1
- package/src/internal/_randomFormatIdnEmail.ts +18 -2
- package/src/internal/_randomFormatIdnHostname.ts +34 -2
- package/src/internal/_randomFormatIpv4.ts +3 -2
- package/src/internal/_randomFormatIpv6.ts +3 -2
- package/src/internal/_randomFormatIri.ts +3 -1
- package/src/internal/_randomFormatIriReference.ts +3 -1
- package/src/internal/_randomFormatJsonPointer.ts +8 -2
- package/src/internal/_randomFormatPassword.ts +11 -6
- package/src/internal/_randomFormatRegex.ts +4 -1
- package/src/internal/_randomFormatRelativeJsonPointer.ts +13 -6
- package/src/internal/_randomFormatTime.ts +13 -10
- package/src/internal/_randomFormatUri.ts +3 -1
- package/src/internal/_randomFormatUriReference.ts +3 -1
- package/src/internal/_randomFormatUriTemplate.ts +3 -1
- package/src/internal/_randomFormatUrl.ts +25 -2
- package/src/internal/_randomFormatUuid.ts +10 -6
- package/src/internal/_randomInteger.ts +87 -40
- package/src/internal/_randomMultiple.ts +245 -0
- package/src/internal/_randomNumber.ts +72 -55
- package/src/internal/_randomPattern.ts +26 -4
- package/src/internal/_randomStringLength.ts +72 -0
- package/src/internal/_stringLength.ts +5 -0
- package/src/internal/_validateReport.ts +5 -1
- package/src/internal/private/__notationRename.ts +24 -0
- package/src/json.ts +2 -2
- package/src/module.ts +4 -6
- package/src/notations.ts +20 -4
- package/lib/internal/private/__notationCapitalize.d.ts +0 -1
- package/lib/internal/private/__notationCapitalize.js +0 -6
- package/lib/internal/private/__notationCapitalize.js.map +0 -1
- package/lib/internal/private/__notationCapitalize.mjs +0 -6
- package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
- package/lib/internal/private/__notationUnsnake.d.ts +0 -4
- package/lib/internal/private/__notationUnsnake.js +0 -26
- package/lib/internal/private/__notationUnsnake.js.map +0 -1
- package/lib/internal/private/__notationUnsnake.mjs +0 -15
- package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
- package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
- package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
- package/src/internal/private/__notationCapitalize.ts +0 -2
- package/src/internal/private/__notationUnsnake.ts +0 -24
|
@@ -3,44 +3,219 @@ import { Resolved } from "@typia/interface";
|
|
|
3
3
|
export const _plainCloneAny = <T>(value: T): Resolved<T> =>
|
|
4
4
|
cloneMain(value) as Resolved<T>;
|
|
5
5
|
|
|
6
|
+
const NOT_NATIVE = Symbol("not-native");
|
|
7
|
+
const objectToString = Object.prototype.toString;
|
|
8
|
+
const getter = (prototype: object, key: PropertyKey): (() => unknown) =>
|
|
9
|
+
Object.getOwnPropertyDescriptor(prototype, key)!.get!;
|
|
10
|
+
const read = <T>(accessor: () => unknown, value: object): T =>
|
|
11
|
+
Reflect.apply(accessor, value, []) as T;
|
|
12
|
+
const tryRead = <T>(
|
|
13
|
+
accessor: (() => unknown) | undefined,
|
|
14
|
+
value: object,
|
|
15
|
+
): { success: true; value: T } | { success: false } => {
|
|
16
|
+
if (accessor === undefined) return { success: false };
|
|
17
|
+
try {
|
|
18
|
+
return { success: true, value: read<T>(accessor, value) };
|
|
19
|
+
} catch {
|
|
20
|
+
return { success: false };
|
|
21
|
+
}
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
const arrayBufferByteLength = getter(ArrayBuffer.prototype, "byteLength");
|
|
25
|
+
const sharedArrayBufferByteLength =
|
|
26
|
+
typeof SharedArrayBuffer === "undefined"
|
|
27
|
+
? undefined
|
|
28
|
+
: getter(SharedArrayBuffer.prototype, "byteLength");
|
|
29
|
+
const dataViewBuffer = getter(DataView.prototype, "buffer");
|
|
30
|
+
const dataViewByteLength = getter(DataView.prototype, "byteLength");
|
|
31
|
+
const dataViewByteOffset = getter(DataView.prototype, "byteOffset");
|
|
32
|
+
const typedArrayName = getter(
|
|
33
|
+
Object.getPrototypeOf(Uint8Array.prototype),
|
|
34
|
+
Symbol.toStringTag,
|
|
35
|
+
);
|
|
36
|
+
const blobSize =
|
|
37
|
+
typeof Blob === "undefined" ? undefined : getter(Blob.prototype, "size");
|
|
38
|
+
const blobType =
|
|
39
|
+
typeof Blob === "undefined" ? undefined : getter(Blob.prototype, "type");
|
|
40
|
+
const fileName =
|
|
41
|
+
typeof File === "undefined" ? undefined : getter(File.prototype, "name");
|
|
42
|
+
const fileLastModified =
|
|
43
|
+
typeof File === "undefined"
|
|
44
|
+
? undefined
|
|
45
|
+
: getter(File.prototype, "lastModified");
|
|
46
|
+
const regexpSource = getter(RegExp.prototype, "source");
|
|
47
|
+
const regexpFlags = getter(RegExp.prototype, "flags");
|
|
48
|
+
|
|
49
|
+
const nativeTag = (value: object): string | undefined => {
|
|
50
|
+
let tagged: boolean;
|
|
51
|
+
try {
|
|
52
|
+
tagged = Symbol.toStringTag in value;
|
|
53
|
+
} catch {
|
|
54
|
+
return undefined;
|
|
55
|
+
}
|
|
56
|
+
if (!tagged)
|
|
57
|
+
try {
|
|
58
|
+
return objectToString.call(value);
|
|
59
|
+
} catch {
|
|
60
|
+
return undefined;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
const date = tryRead<number>(Date.prototype.getTime, value);
|
|
64
|
+
if (date.success) return "[object Date]";
|
|
65
|
+
const typed = tryRead<string>(typedArrayName, value);
|
|
66
|
+
if (typed.success && typed.value !== undefined)
|
|
67
|
+
return `[object ${typed.value}]`;
|
|
68
|
+
if (tryRead<number>(arrayBufferByteLength, value).success)
|
|
69
|
+
return "[object ArrayBuffer]";
|
|
70
|
+
if (tryRead<number>(sharedArrayBufferByteLength, value).success)
|
|
71
|
+
return "[object SharedArrayBuffer]";
|
|
72
|
+
if (tryRead<ArrayBufferLike>(dataViewBuffer, value).success)
|
|
73
|
+
return "[object DataView]";
|
|
74
|
+
if (tryRead<string>(fileName, value).success) return "[object File]";
|
|
75
|
+
if (tryRead<number>(blobSize, value).success) return "[object Blob]";
|
|
76
|
+
if (tryRead<string>(regexpSource, value).success) return "[object RegExp]";
|
|
77
|
+
return undefined;
|
|
78
|
+
};
|
|
79
|
+
|
|
6
80
|
const cloneMain = (value: any): any => {
|
|
7
81
|
if (value === undefined) return undefined;
|
|
8
82
|
else if (typeof value === "object")
|
|
9
83
|
if (value === null) return null;
|
|
10
84
|
else if (Array.isArray(value)) return value.map(cloneMain);
|
|
11
|
-
else
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
return new
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
return new Blob([value], { type: value.type });
|
|
32
|
-
else if (value instanceof Set) return new Set([...value].map(cloneMain));
|
|
33
|
-
else if (value instanceof Map)
|
|
34
|
-
return new Map([...value].map(([k, v]) => [cloneMain(k), cloneMain(v)]));
|
|
35
|
-
else if (value instanceof WeakSet || value instanceof WeakMap)
|
|
36
|
-
throw new Error("WeakSet and WeakMap are not supported");
|
|
37
|
-
else if (value.valueOf() !== value) return cloneMain(value.valueOf());
|
|
38
|
-
else
|
|
39
|
-
return Object.fromEntries(
|
|
40
|
-
Object.entries(value)
|
|
41
|
-
.map(([k, v]) => [k, cloneMain(v)])
|
|
42
|
-
.filter(([, v]) => v !== undefined),
|
|
43
|
-
);
|
|
85
|
+
else {
|
|
86
|
+
const native: any | typeof NOT_NATIVE = cloneNative(value);
|
|
87
|
+
if (native !== NOT_NATIVE) return native;
|
|
88
|
+
else if (value instanceof Set) return new Set([...value].map(cloneMain));
|
|
89
|
+
else if (value instanceof Map)
|
|
90
|
+
return new Map(
|
|
91
|
+
[...value].map(([k, v]) => [cloneMain(k), cloneMain(v)]),
|
|
92
|
+
);
|
|
93
|
+
else if (value instanceof WeakSet || value instanceof WeakMap)
|
|
94
|
+
throw new Error("WeakSet and WeakMap are not supported");
|
|
95
|
+
else {
|
|
96
|
+
const primitive: unknown = value.valueOf();
|
|
97
|
+
if (primitive !== value) return cloneMain(primitive);
|
|
98
|
+
return Object.fromEntries(
|
|
99
|
+
Object.entries(value)
|
|
100
|
+
.map(([k, v]) => [k, cloneMain(v)])
|
|
101
|
+
.filter(([, v]) => v !== undefined),
|
|
102
|
+
);
|
|
103
|
+
}
|
|
104
|
+
}
|
|
44
105
|
else if (typeof value === "function") return undefined;
|
|
45
106
|
return value;
|
|
46
107
|
};
|
|
108
|
+
|
|
109
|
+
const cloneNative = (value: object): any | typeof NOT_NATIVE => {
|
|
110
|
+
const tag: string | undefined = nativeTag(value);
|
|
111
|
+
switch (tag) {
|
|
112
|
+
case "[object Date]": {
|
|
113
|
+
const time = tryRead<number>(Date.prototype.getTime, value);
|
|
114
|
+
return time.success ? new Date(time.value) : NOT_NATIVE;
|
|
115
|
+
}
|
|
116
|
+
case "[object Uint8Array]":
|
|
117
|
+
return new Uint8Array(value as ArrayLike<number>);
|
|
118
|
+
case "[object Uint8ClampedArray]":
|
|
119
|
+
return new Uint8ClampedArray(value as ArrayLike<number>);
|
|
120
|
+
case "[object Uint16Array]":
|
|
121
|
+
return new Uint16Array(value as ArrayLike<number>);
|
|
122
|
+
case "[object Uint32Array]":
|
|
123
|
+
return new Uint32Array(value as ArrayLike<number>);
|
|
124
|
+
case "[object BigUint64Array]":
|
|
125
|
+
return new BigUint64Array(value as ArrayLike<bigint>);
|
|
126
|
+
case "[object Int8Array]":
|
|
127
|
+
return new Int8Array(value as ArrayLike<number>);
|
|
128
|
+
case "[object Int16Array]":
|
|
129
|
+
return new Int16Array(value as ArrayLike<number>);
|
|
130
|
+
case "[object Int32Array]":
|
|
131
|
+
return new Int32Array(value as ArrayLike<number>);
|
|
132
|
+
case "[object BigInt64Array]":
|
|
133
|
+
return new BigInt64Array(value as ArrayLike<bigint>);
|
|
134
|
+
case "[object Float32Array]":
|
|
135
|
+
return new Float32Array(value as ArrayLike<number>);
|
|
136
|
+
case "[object Float64Array]":
|
|
137
|
+
return new Float64Array(value as ArrayLike<number>);
|
|
138
|
+
case "[object ArrayBuffer]": {
|
|
139
|
+
const byteLength = tryRead<number>(arrayBufferByteLength, value);
|
|
140
|
+
return byteLength.success
|
|
141
|
+
? cloneBufferRange(value as ArrayBuffer, 0, byteLength.value, false)
|
|
142
|
+
: NOT_NATIVE;
|
|
143
|
+
}
|
|
144
|
+
case "[object SharedArrayBuffer]": {
|
|
145
|
+
const byteLength = tryRead<number>(sharedArrayBufferByteLength, value);
|
|
146
|
+
return byteLength.success
|
|
147
|
+
? cloneBufferRange(
|
|
148
|
+
value as SharedArrayBuffer,
|
|
149
|
+
0,
|
|
150
|
+
byteLength.value,
|
|
151
|
+
true,
|
|
152
|
+
)
|
|
153
|
+
: NOT_NATIVE;
|
|
154
|
+
}
|
|
155
|
+
case "[object DataView]": {
|
|
156
|
+
const buffer = tryRead<ArrayBufferLike>(dataViewBuffer, value);
|
|
157
|
+
if (!buffer.success) return NOT_NATIVE;
|
|
158
|
+
const byteOffset: number = read(dataViewByteOffset, value);
|
|
159
|
+
const byteLength: number = read(dataViewByteLength, value);
|
|
160
|
+
return new DataView(
|
|
161
|
+
cloneBufferRange(buffer.value, byteOffset, byteLength),
|
|
162
|
+
);
|
|
163
|
+
}
|
|
164
|
+
case "[object File]": {
|
|
165
|
+
const size = tryRead<number>(blobSize, value);
|
|
166
|
+
if (
|
|
167
|
+
typeof File === "undefined" ||
|
|
168
|
+
!size.success ||
|
|
169
|
+
blobType === undefined ||
|
|
170
|
+
fileName === undefined ||
|
|
171
|
+
fileLastModified === undefined
|
|
172
|
+
)
|
|
173
|
+
return NOT_NATIVE;
|
|
174
|
+
return new File([value as Blob], read<string>(fileName, value), {
|
|
175
|
+
type: read<string>(blobType, value),
|
|
176
|
+
lastModified: read<number>(fileLastModified, value),
|
|
177
|
+
});
|
|
178
|
+
}
|
|
179
|
+
case "[object Blob]": {
|
|
180
|
+
const size = tryRead<number>(blobSize, value);
|
|
181
|
+
if (
|
|
182
|
+
typeof Blob === "undefined" ||
|
|
183
|
+
!size.success ||
|
|
184
|
+
blobType === undefined
|
|
185
|
+
)
|
|
186
|
+
return NOT_NATIVE;
|
|
187
|
+
return new Blob([value as Blob], {
|
|
188
|
+
type: read<string>(blobType, value),
|
|
189
|
+
});
|
|
190
|
+
}
|
|
191
|
+
case "[object RegExp]": {
|
|
192
|
+
const source = tryRead<string>(regexpSource, value);
|
|
193
|
+
return source.success
|
|
194
|
+
? new RegExp(source.value, read<string>(regexpFlags, value))
|
|
195
|
+
: NOT_NATIVE;
|
|
196
|
+
}
|
|
197
|
+
default:
|
|
198
|
+
return NOT_NATIVE;
|
|
199
|
+
}
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
const cloneBufferRange = (
|
|
203
|
+
input: ArrayBufferLike,
|
|
204
|
+
byteOffset: number,
|
|
205
|
+
byteLength: number,
|
|
206
|
+
shared?: boolean,
|
|
207
|
+
): ArrayBuffer | SharedArrayBuffer => {
|
|
208
|
+
if (shared === undefined)
|
|
209
|
+
shared = tryRead<number>(sharedArrayBufferByteLength, input).success;
|
|
210
|
+
let output: ArrayBuffer | SharedArrayBuffer;
|
|
211
|
+
if (shared) {
|
|
212
|
+
if (typeof SharedArrayBuffer === "undefined")
|
|
213
|
+
throw new TypeError("SharedArrayBuffer is not available");
|
|
214
|
+
output = new SharedArrayBuffer(byteLength);
|
|
215
|
+
} else {
|
|
216
|
+
read<number>(arrayBufferByteLength, input);
|
|
217
|
+
output = new ArrayBuffer(byteLength);
|
|
218
|
+
}
|
|
219
|
+
new Uint8Array(output).set(new Uint8Array(input, byteOffset, byteLength));
|
|
220
|
+
return output;
|
|
221
|
+
};
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { OpenApi } from "@typia/interface";
|
|
2
2
|
|
|
3
|
+
import { _isUniqueItems } from "./_isUniqueItems";
|
|
3
4
|
import { _randomInteger } from "./_randomInteger";
|
|
4
5
|
|
|
5
6
|
const DEFAULT_MIN_ITEMS = 1;
|
|
@@ -27,8 +28,16 @@ export const _randomArray = <T>(
|
|
|
27
28
|
});
|
|
28
29
|
if (props.uniqueItems !== true)
|
|
29
30
|
return new Array(count).fill(null).map((_, i) => props.element(i, count));
|
|
30
|
-
const elements:
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
31
|
+
const elements: T[] = [];
|
|
32
|
+
const maximumAttempts: number = count * 100 + 1000;
|
|
33
|
+
for (let attempts = 0; elements.length !== count; attempts++) {
|
|
34
|
+
if (attempts === maximumAttempts)
|
|
35
|
+
throw new Error(
|
|
36
|
+
"Unable to generate enough unique items; the element domain may be too small.",
|
|
37
|
+
);
|
|
38
|
+
const candidate: T = props.element(elements.length, count);
|
|
39
|
+
if (elements.every((element) => _isUniqueItems([element, candidate])))
|
|
40
|
+
elements.push(candidate);
|
|
41
|
+
}
|
|
42
|
+
return elements;
|
|
34
43
|
};
|
|
@@ -1,3 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
|
+
|
|
3
|
+
export const _randomFormatByte = (props?: _ILengthProps): string =>
|
|
4
|
+
_randomFormatLength(props, () => FIXED);
|
|
2
5
|
|
|
3
6
|
const FIXED = "vt7ekz4lIoNTTS9sDQYdWKharxIFAR54+z/umIxSgUM=";
|
|
@@ -1,18 +1,23 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
4
|
export const _randomFormatDate = (props?: {
|
|
4
5
|
minimum?: number;
|
|
5
6
|
maximum?: number;
|
|
7
|
+
minLength?: number;
|
|
8
|
+
maxLength?: number;
|
|
6
9
|
}) =>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
10
|
+
_randomFormatLength(props, () =>
|
|
11
|
+
new Date(
|
|
12
|
+
_randomInteger({
|
|
13
|
+
type: "integer",
|
|
14
|
+
minimum: props?.minimum ?? 0,
|
|
15
|
+
maximum:
|
|
16
|
+
(props?.maximum ?? props?.minimum === undefined)
|
|
17
|
+
? Date.now()
|
|
18
|
+
: props.minimum + 365 * 24 * 60 * 60 * 1_000,
|
|
19
|
+
}),
|
|
20
|
+
)
|
|
21
|
+
.toISOString()
|
|
22
|
+
.substring(0, 10),
|
|
23
|
+
);
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
4
|
export const _randomFormatDatetime = (props?: {
|
|
4
5
|
minimum?: number;
|
|
5
6
|
maximum?: number;
|
|
7
|
+
minLength?: number;
|
|
8
|
+
maxLength?: number;
|
|
6
9
|
}) =>
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
10
|
+
_randomFormatLength(props, () =>
|
|
11
|
+
new Date(
|
|
12
|
+
_randomInteger({
|
|
13
|
+
type: "integer",
|
|
14
|
+
minimum: props?.minimum ?? 0,
|
|
15
|
+
maximum:
|
|
16
|
+
(props?.maximum ?? props?.minimum === undefined)
|
|
17
|
+
? Date.now()
|
|
18
|
+
: props.minimum + 365 * 24 * 60 * 60 * 1_000,
|
|
19
|
+
}),
|
|
20
|
+
).toISOString(),
|
|
21
|
+
);
|
|
@@ -1,19 +1,21 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatDuration = (): string =>
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
}
|
|
4
|
+
export const _randomFormatDuration = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomFormatLength(props, () => {
|
|
6
|
+
const period: string = durate([
|
|
7
|
+
["Y", random(0, 100)],
|
|
8
|
+
["M", random(0, 12)],
|
|
9
|
+
["D", random(0, 31)],
|
|
10
|
+
]);
|
|
11
|
+
const time: string = durate([
|
|
12
|
+
["H", random(0, 24)],
|
|
13
|
+
["M", random(0, 60)],
|
|
14
|
+
["S", random(0, 60)],
|
|
15
|
+
]);
|
|
16
|
+
if (period.length + time.length === 0) return "PT0S";
|
|
17
|
+
return `P${period}${time.length ? "T" : ""}${time}`;
|
|
18
|
+
});
|
|
17
19
|
const durate = (elements: [string, number][]) =>
|
|
18
20
|
elements
|
|
19
21
|
.filter(([_unit, value]) => value !== 0)
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { _randomString } from "./_randomString";
|
|
2
|
+
import { _ILengthProps, _randomSegmentLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatEmail = (): string =>
|
|
4
|
-
|
|
4
|
+
export const _randomFormatEmail = (props?: _ILengthProps): string => {
|
|
5
|
+
if (props?.minLength === undefined && props?.maxLength === undefined)
|
|
6
|
+
return `${random(10)}@${random(10)}.${random(3)}`;
|
|
7
|
+
// `<local>@<domain>.<tld>`: the local part absorbs the requested length while
|
|
8
|
+
// a one-character domain and tld keep the fixed overhead (`@`, `.`) minimal.
|
|
9
|
+
return `${_randomSegmentLength(props, 4, 10, 1)}@${random(1)}.${random(1)}`;
|
|
10
|
+
};
|
|
5
11
|
|
|
6
12
|
const random = (length: number) =>
|
|
7
13
|
_randomString({
|
|
@@ -1,6 +1,53 @@
|
|
|
1
|
+
import { _randomInteger } from "./_randomInteger";
|
|
1
2
|
import { _randomString } from "./_randomString";
|
|
3
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
4
|
|
|
3
|
-
export const _randomFormatHostname = (): string =>
|
|
5
|
+
export const _randomFormatHostname = (props?: _ILengthProps): string => {
|
|
6
|
+
if (props?.minLength === undefined && props?.maxLength === undefined)
|
|
7
|
+
return `${random(10)}.${random(3)}`;
|
|
8
|
+
// A hostname is dot-joined labels of 1..63 chars whose total is capped at 253,
|
|
9
|
+
// so the requested length is realized by splitting it across enough labels.
|
|
10
|
+
return _randomHostnameLabels(pickLength(props));
|
|
11
|
+
};
|
|
12
|
+
|
|
13
|
+
const MAX_TOTAL = 253;
|
|
14
|
+
const MAX_LABEL = 63;
|
|
15
|
+
|
|
16
|
+
const pickLength = (props: _ILengthProps): number => {
|
|
17
|
+
let low: number = props.minLength === undefined ? 1 : props.minLength;
|
|
18
|
+
if (low < 1) low = 1;
|
|
19
|
+
const high: number =
|
|
20
|
+
props.maxLength === undefined
|
|
21
|
+
? Math.min(MAX_TOTAL, low + 14)
|
|
22
|
+
: Math.min(MAX_TOTAL, props.maxLength);
|
|
23
|
+
if (high < low)
|
|
24
|
+
throw new Error(
|
|
25
|
+
"unable to generate a random hostname satisfying both the format and the length constraints.",
|
|
26
|
+
);
|
|
27
|
+
return _randomInteger({ type: "integer", minimum: low, maximum: high });
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Builds dot-joined hostname labels totaling exactly `length` characters, each
|
|
32
|
+
* label within 63 chars. Shared with the idn-hostname generator, which reserves
|
|
33
|
+
* a fixed `.<tld>` suffix and realizes the rest as these leading labels.
|
|
34
|
+
*/
|
|
35
|
+
export const _randomHostnameLabels = (length: number): string => {
|
|
36
|
+
const parts: string[] = [];
|
|
37
|
+
let remaining: number = length;
|
|
38
|
+
while (remaining > MAX_LABEL + 1) {
|
|
39
|
+
// one full label plus its joining dot
|
|
40
|
+
parts.push(random(MAX_LABEL));
|
|
41
|
+
remaining -= MAX_LABEL + 1;
|
|
42
|
+
}
|
|
43
|
+
if (remaining <= MAX_LABEL) parts.push(random(remaining));
|
|
44
|
+
else {
|
|
45
|
+
// remaining === MAX_LABEL + 1: two labels keep every label within 63 chars
|
|
46
|
+
parts.push(random(MAX_LABEL - 1));
|
|
47
|
+
parts.push(random(1));
|
|
48
|
+
}
|
|
49
|
+
return parts.join(".");
|
|
50
|
+
};
|
|
4
51
|
|
|
5
52
|
const random = (length: number) =>
|
|
6
53
|
_randomString({ type: "string", minLength: length, maxLength: length });
|
|
@@ -1,3 +1,19 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _randomString } from "./_randomString";
|
|
2
|
+
import { _ILengthProps, _randomSegmentLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatIdnEmail = (): string =>
|
|
4
|
+
export const _randomFormatIdnEmail = (props?: _ILengthProps): string => {
|
|
5
|
+
if (props?.minLength === undefined && props?.maxLength === undefined)
|
|
6
|
+
return `${random(10)}@${random(10)}.${random(3)}`;
|
|
7
|
+
// `_isFormatIdnEmail` requires a >=2-char TLD (`(…\.)+[^…]{2,}`), so the fixed
|
|
8
|
+
// overhead is `@` + domain(1) + `.` + tld(2) = 5 and the local part absorbs the
|
|
9
|
+
// requested length; a one-character TLD (the non-idn generator's length path)
|
|
10
|
+
// would be rejected by the idn checker on every draw.
|
|
11
|
+
return `${_randomSegmentLength(props, 5, 10, 1)}@${random(1)}.${random(2)}`;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
const random = (length: number) =>
|
|
15
|
+
_randomString({
|
|
16
|
+
type: "string",
|
|
17
|
+
minLength: length,
|
|
18
|
+
maxLength: length,
|
|
19
|
+
});
|
|
@@ -1,3 +1,35 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _randomHostnameLabels } from "./_randomFormatHostname";
|
|
2
|
+
import { _randomInteger } from "./_randomInteger";
|
|
3
|
+
import { _randomString } from "./_randomString";
|
|
4
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
5
|
|
|
3
|
-
export const _randomFormatIdnHostname = (): string =>
|
|
6
|
+
export const _randomFormatIdnHostname = (props?: _ILengthProps): string => {
|
|
7
|
+
if (props?.minLength === undefined && props?.maxLength === undefined)
|
|
8
|
+
return `${random(10)}.${random(3)}`;
|
|
9
|
+
// `_isFormatIdnHostname` requires at least one label, a dot, and a >=2-char
|
|
10
|
+
// TLD (`(…\.)+[a-z¡-]{2,}`), none of which the non-idn hostname generator
|
|
11
|
+
// guarantees on its length path (it can emit a single dotless label). Reserve
|
|
12
|
+
// a fixed `.<2-char TLD>` and realize the rest as dot-joined leading labels.
|
|
13
|
+
const length: number = pickLength(props);
|
|
14
|
+
return `${_randomHostnameLabels(length - 3)}.${random(2)}`;
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const MAX_TOTAL = 253;
|
|
18
|
+
const MIN_TOTAL = 4; // the shortest idn hostname, `x.yy`: label(1) + `.` + tld(2)
|
|
19
|
+
|
|
20
|
+
const pickLength = (props: _ILengthProps): number => {
|
|
21
|
+
let low: number = props.minLength === undefined ? MIN_TOTAL : props.minLength;
|
|
22
|
+
if (low < MIN_TOTAL) low = MIN_TOTAL;
|
|
23
|
+
const high: number =
|
|
24
|
+
props.maxLength === undefined
|
|
25
|
+
? Math.min(MAX_TOTAL, low + 14)
|
|
26
|
+
: Math.min(MAX_TOTAL, props.maxLength);
|
|
27
|
+
if (high < low)
|
|
28
|
+
throw new Error(
|
|
29
|
+
"unable to generate a random idn hostname satisfying both the format and the length constraints.",
|
|
30
|
+
);
|
|
31
|
+
return _randomInteger({ type: "integer", minimum: low, maximum: high });
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const random = (length: number) =>
|
|
35
|
+
_randomString({ type: "string", minLength: length, maxLength: length });
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatIpv4 = (): string =>
|
|
4
|
-
new Array(4).fill(0).map(random).join(".");
|
|
4
|
+
export const _randomFormatIpv4 = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomFormatLength(props, () => new Array(4).fill(0).map(random).join("."));
|
|
5
6
|
|
|
6
7
|
const random = () =>
|
|
7
8
|
_randomInteger({
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatIpv6 = (): string =>
|
|
4
|
-
new Array(8).fill(0).map(random).join(":");
|
|
4
|
+
export const _randomFormatIpv6 = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomFormatLength(props, () => new Array(8).fill(0).map(random).join(":"));
|
|
5
6
|
|
|
6
7
|
const random = () =>
|
|
7
8
|
_randomInteger({
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { _randomFormatUrl } from "./_randomFormatUrl";
|
|
2
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatIri = (): string =>
|
|
4
|
+
export const _randomFormatIri = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomFormatUrl(props);
|
|
@@ -1,3 +1,5 @@
|
|
|
1
1
|
import { _randomFormatUrl } from "./_randomFormatUrl";
|
|
2
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatIriReference = (): string =>
|
|
4
|
+
export const _randomFormatIriReference = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomFormatUrl(props);
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
import { _randomString } from "./_randomString";
|
|
2
|
+
import { _ILengthProps, _randomSegmentLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatJsonPointer = (): string =>
|
|
4
|
-
|
|
4
|
+
export const _randomFormatJsonPointer = (props?: _ILengthProps): string => {
|
|
5
|
+
if (props?.minLength === undefined && props?.maxLength === undefined)
|
|
6
|
+
return `/components/schemas/${random()}`;
|
|
7
|
+
// The `/components/schemas/` prefix (20 chars) is fixed; the reference token
|
|
8
|
+
// after it grows or shrinks to hit the requested length.
|
|
9
|
+
return `/components/schemas/${_randomSegmentLength(props, 20, 10, 0)}`;
|
|
10
|
+
};
|
|
5
11
|
|
|
6
12
|
const random = () =>
|
|
7
13
|
_randomString({ type: "string", minLength: 10, maxLength: 10 });
|
|
@@ -1,8 +1,13 @@
|
|
|
1
1
|
import { _randomString } from "./_randomString";
|
|
2
|
+
import { _ILengthProps } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatPassword = (): string =>
|
|
4
|
-
_randomString(
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
export const _randomFormatPassword = (props?: _ILengthProps): string =>
|
|
5
|
+
_randomString(
|
|
6
|
+
props?.minLength === undefined && props?.maxLength === undefined
|
|
7
|
+
? { type: "string", minLength: 4, maxLength: 16 }
|
|
8
|
+
: {
|
|
9
|
+
type: "string",
|
|
10
|
+
minLength: props?.minLength,
|
|
11
|
+
maxLength: props?.maxLength,
|
|
12
|
+
},
|
|
13
|
+
);
|
|
@@ -1,4 +1,7 @@
|
|
|
1
|
-
|
|
1
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
|
+
|
|
3
|
+
export const _randomFormatRegex = (props?: _ILengthProps): string =>
|
|
4
|
+
_randomFormatLength(props, () => FIXED);
|
|
2
5
|
|
|
3
6
|
const FIXED =
|
|
4
7
|
"/^(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)\\.){3}(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)$/";
|
|
@@ -1,8 +1,15 @@
|
|
|
1
1
|
import { _randomInteger } from "./_randomInteger";
|
|
2
|
+
import { _ILengthProps, _randomFormatLength } from "./_randomStringLength";
|
|
2
3
|
|
|
3
|
-
export const _randomFormatRelativeJsonPointer = (
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
4
|
+
export const _randomFormatRelativeJsonPointer = (
|
|
5
|
+
props?: _ILengthProps,
|
|
6
|
+
): string =>
|
|
7
|
+
_randomFormatLength(
|
|
8
|
+
props,
|
|
9
|
+
() =>
|
|
10
|
+
`${_randomInteger({
|
|
11
|
+
type: "integer",
|
|
12
|
+
minimum: 0,
|
|
13
|
+
maximum: 10,
|
|
14
|
+
})}#`,
|
|
15
|
+
);
|