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
|
@@ -2,4 +2,4 @@ export const _isFormatUriReference = (str: string): boolean =>
|
|
|
2
2
|
PATTERN.test(str);
|
|
3
3
|
|
|
4
4
|
const PATTERN =
|
|
5
|
-
/^(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'
|
|
5
|
+
/^(?:(?:[a-z][a-z0-9+\-.]*:)?(?:\/?\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:]|%[0-9a-f]{2})*@)?(?:\[(?:(?:(?:(?:[0-9a-f]{1,4}:){6}|::(?:[0-9a-f]{1,4}:){5}|(?:[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){4}|(?:(?:[0-9a-f]{1,4}:){0,1}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){3}|(?:(?:[0-9a-f]{1,4}:){0,2}[0-9a-f]{1,4})?::(?:[0-9a-f]{1,4}:){2}|(?:(?:[0-9a-f]{1,4}:){0,3}[0-9a-f]{1,4})?::[0-9a-f]{1,4}:|(?:(?:[0-9a-f]{1,4}:){0,4}[0-9a-f]{1,4})?::)(?:[0-9a-f]{1,4}:[0-9a-f]{1,4}|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?))|(?:(?:[0-9a-f]{1,4}:){0,5}[0-9a-f]{1,4})?::[0-9a-f]{1,4}|(?:(?:[0-9a-f]{1,4}:){0,6}[0-9a-f]{1,4})?::)|[Vv][0-9a-f]+\.[a-z0-9\-._~!$&'()*+,;=:]+)\]|(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)|(?:[a-z0-9\-._~!$&'()*+,;=]|%[0-9a-f]{2})*)(?::\d*)?(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|\/(?:(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)?)?|(?:[a-z][a-z0-9+\-.]*:)(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*|(?:[a-z0-9\-._~!$&'()*+,;=@]|%[0-9a-f]{2})+(?:\/(?:[a-z0-9\-._~!$&'()*+,;=:@]|%[0-9a-f]{2})*)*)(?:\?(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?(?:#(?:[a-z0-9\-._~!$&'()*+,;=:@/?]|%[0-9a-f]{2})*)?$/i;
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { _decimalDecompose, _decimalDivide } from "./_decimal";
|
|
2
|
+
|
|
3
|
+
export const _isMultipleOf = (value: number, multipleOf: number): boolean => {
|
|
4
|
+
const divisor = _decimalDecompose(multipleOf);
|
|
5
|
+
if (divisor === null || divisor.coefficient <= BigInt(0)) return false;
|
|
6
|
+
const ratio = _decimalDivide(value, divisor);
|
|
7
|
+
return ratio !== null && ratio.numerator % ratio.denominator === BigInt(0);
|
|
8
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export const _isTypeInt64Bigint = (value: bigint): boolean =>
|
|
2
|
+
MINIMUM <= value && value <= MAXIMUM;
|
|
3
|
+
|
|
4
|
+
// Unlike the `number` path, a `bigint` represents both bounds exactly, so this
|
|
5
|
+
// is the true inclusive int64 range rather than an exclusive approximation.
|
|
6
|
+
//
|
|
7
|
+
// The arguments must stay strings. `BigInt(9223372036854775807)` rounds its
|
|
8
|
+
// `number` literal to `2 ** 63` before `BigInt` ever sees it, which is the
|
|
9
|
+
// defect this helper exists to close; `BigInt("9223372036854775807")` parses
|
|
10
|
+
// the digits directly and is exact.
|
|
11
|
+
const MINIMUM = -BigInt("9223372036854775808");
|
|
12
|
+
const MAXIMUM = BigInt("9223372036854775807");
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export const _isTypeUint64Bigint = (value: bigint): boolean =>
|
|
2
|
+
MINIMUM <= value && value <= MAXIMUM;
|
|
3
|
+
|
|
4
|
+
// See `_isTypeInt64Bigint`: the bound is exact only because the argument is a
|
|
5
|
+
// string, and `bigint` can represent the true inclusive maximum.
|
|
6
|
+
const MINIMUM = BigInt(0);
|
|
7
|
+
const MAXIMUM = BigInt("18446744073709551615");
|
|
@@ -1,12 +1,4 @@
|
|
|
1
1
|
export const _isUniqueItems = (elements: any[]): boolean => {
|
|
2
|
-
// EMPTY OR ONLY ONE
|
|
3
|
-
if (elements.length < 2) return true;
|
|
4
|
-
|
|
5
|
-
// SHALLOW COMPARISON
|
|
6
|
-
if (["boolean", "bigint", "number", "string"].includes(typeof elements[0]))
|
|
7
|
-
return new Set(elements).size === elements.length;
|
|
8
|
-
|
|
9
|
-
// DEEP COMPARISON
|
|
10
2
|
for (let i = 0; i < elements.length; i++)
|
|
11
3
|
for (let j = i + 1; j < elements.length; j++)
|
|
12
4
|
if (equals(new WeakMap())(elements[i], elements[j])) return false;
|
|
@@ -15,145 +7,155 @@ export const _isUniqueItems = (elements: any[]): boolean => {
|
|
|
15
7
|
|
|
16
8
|
const equals = (visited: WeakMap<object, WeakMap<object, boolean>>) => {
|
|
17
9
|
const next = (a: any, b: any): boolean => {
|
|
18
|
-
// SHALLOW EQUAL
|
|
19
10
|
if (a === b) return true;
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
11
|
+
if (
|
|
12
|
+
a === null ||
|
|
13
|
+
b === null ||
|
|
14
|
+
typeof a !== "object" ||
|
|
15
|
+
typeof b !== "object"
|
|
16
|
+
)
|
|
17
|
+
return false;
|
|
18
|
+
|
|
19
|
+
const previous: boolean | undefined = visited.get(a)?.get(b);
|
|
20
|
+
if (previous !== undefined) return previous;
|
|
21
|
+
const pairs: WeakMap<object, boolean> =
|
|
22
|
+
visited.get(a) ?? new WeakMap<object, boolean>();
|
|
23
|
+
visited.set(a, pairs);
|
|
24
|
+
pairs.set(b, true);
|
|
25
|
+
|
|
26
|
+
const result: boolean = compare(a, b);
|
|
27
|
+
pairs.set(b, result);
|
|
28
|
+
return result;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
const compare = (a: object, b: object): boolean => {
|
|
32
|
+
if (Array.isArray(a)) {
|
|
33
|
+
if (!Array.isArray(b) || a.length !== b.length) return false;
|
|
34
|
+
for (let i = 0; i < a.length; i++) {
|
|
35
|
+
const aHas: boolean = Object.hasOwn(a, i);
|
|
36
|
+
if (aHas !== Object.hasOwn(b, i) || (aHas && !next(a[i], b[i])))
|
|
37
|
+
return false;
|
|
38
|
+
}
|
|
39
|
+
return true;
|
|
40
|
+
}
|
|
41
|
+
if (Array.isArray(b)) return false;
|
|
42
|
+
|
|
43
|
+
if (a instanceof Set) {
|
|
44
|
+
if (!(b instanceof Set) || a.size !== b.size) return false;
|
|
45
|
+
const unmatched: any[] = [...b];
|
|
46
|
+
for (const value of a) {
|
|
47
|
+
const index: number = unmatched.findIndex((candidate) =>
|
|
48
|
+
next(value, candidate),
|
|
49
|
+
);
|
|
50
|
+
if (index === -1) return false;
|
|
51
|
+
unmatched.splice(index, 1);
|
|
52
|
+
}
|
|
53
|
+
return true;
|
|
54
|
+
}
|
|
55
|
+
if (a instanceof Map) {
|
|
56
|
+
if (!(b instanceof Map) || a.size !== b.size) return false;
|
|
57
|
+
const unmatched: [any, any][] = [...b];
|
|
58
|
+
for (const [key, value] of a) {
|
|
59
|
+
const index: number = unmatched.findIndex(
|
|
60
|
+
([candidateKey, candidateValue]) =>
|
|
61
|
+
next(key, candidateKey) && next(value, candidateValue),
|
|
62
|
+
);
|
|
63
|
+
if (index === -1) return false;
|
|
64
|
+
unmatched.splice(index, 1);
|
|
65
|
+
}
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
if (a instanceof Boolean)
|
|
70
|
+
return b instanceof Boolean && a.valueOf() === b.valueOf();
|
|
71
|
+
if (Object.prototype.toString.call(a) === "[object BigInt]")
|
|
25
72
|
return (
|
|
26
|
-
b
|
|
73
|
+
Object.prototype.toString.call(b) === "[object BigInt]" &&
|
|
74
|
+
a.valueOf() === b.valueOf()
|
|
27
75
|
);
|
|
28
|
-
|
|
76
|
+
if (Object.prototype.toString.call(a) === "[object Symbol]")
|
|
29
77
|
return (
|
|
30
|
-
b
|
|
31
|
-
a.
|
|
32
|
-
[...a].every(([k, v]) => b.has(k) && next(v, b.get(k)))
|
|
78
|
+
Object.prototype.toString.call(b) === "[object Symbol]" &&
|
|
79
|
+
a.valueOf() === b.valueOf()
|
|
33
80
|
);
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
else if (a instanceof BigInt)
|
|
40
|
-
return b instanceof BigInt ? a === b : a === BigInt(b);
|
|
41
|
-
else if (a instanceof Number)
|
|
42
|
-
return b instanceof Number
|
|
43
|
-
? a.valueOf() === b.valueOf()
|
|
44
|
-
: a.valueOf() === b;
|
|
45
|
-
else if (a instanceof String)
|
|
46
|
-
return b instanceof String
|
|
47
|
-
? a.valueOf() === b.valueOf()
|
|
48
|
-
: a.valueOf() === b;
|
|
49
|
-
else if (a instanceof Date)
|
|
81
|
+
if (a instanceof Number)
|
|
82
|
+
return b instanceof Number && a.valueOf() === b.valueOf();
|
|
83
|
+
if (a instanceof String)
|
|
84
|
+
return b instanceof String && a.valueOf() === b.valueOf();
|
|
85
|
+
if (a instanceof Date)
|
|
50
86
|
return b instanceof Date && a.getTime() === b.getTime();
|
|
51
|
-
|
|
52
|
-
else if (a instanceof Uint8Array)
|
|
87
|
+
if (a instanceof RegExp)
|
|
53
88
|
return (
|
|
54
|
-
b instanceof
|
|
55
|
-
a.length === b.length &&
|
|
56
|
-
a.every((x, i) => x === b[i])
|
|
89
|
+
b instanceof RegExp && a.source === b.source && a.flags === b.flags
|
|
57
90
|
);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
b instanceof Uint8ClampedArray &&
|
|
61
|
-
a.length === b.length &&
|
|
62
|
-
a.every((x, i) => x === b[i])
|
|
63
|
-
);
|
|
64
|
-
else if (a instanceof Uint16Array)
|
|
65
|
-
return (
|
|
66
|
-
b instanceof Uint16Array &&
|
|
67
|
-
a.length === b.length &&
|
|
68
|
-
a.every((x, i) => x === b[i])
|
|
69
|
-
);
|
|
70
|
-
else if (a instanceof Uint32Array)
|
|
71
|
-
return (
|
|
72
|
-
b instanceof Uint32Array &&
|
|
73
|
-
a.length === b.length &&
|
|
74
|
-
a.every((x, i) => x === b[i])
|
|
75
|
-
);
|
|
76
|
-
else if (a instanceof BigUint64Array)
|
|
77
|
-
return (
|
|
78
|
-
b instanceof BigUint64Array &&
|
|
79
|
-
a.length === b.length &&
|
|
80
|
-
a.every((x, i) => x === b[i])
|
|
81
|
-
);
|
|
82
|
-
else if (a instanceof Int8Array)
|
|
83
|
-
return (
|
|
84
|
-
b instanceof Int8Array &&
|
|
85
|
-
a.length === b.length &&
|
|
86
|
-
a.every((x, i) => x === b[i])
|
|
87
|
-
);
|
|
88
|
-
else if (a instanceof Int16Array)
|
|
89
|
-
return (
|
|
90
|
-
b instanceof Int16Array &&
|
|
91
|
-
a.length === b.length &&
|
|
92
|
-
a.every((x, i) => x === b[i])
|
|
93
|
-
);
|
|
94
|
-
else if (a instanceof Int32Array)
|
|
95
|
-
return (
|
|
96
|
-
b instanceof Int32Array &&
|
|
97
|
-
a.length === b.length &&
|
|
98
|
-
a.every((x, i) => x === b[i])
|
|
99
|
-
);
|
|
100
|
-
else if (a instanceof BigInt64Array)
|
|
101
|
-
return (
|
|
102
|
-
b instanceof BigInt64Array &&
|
|
103
|
-
a.length === b.length &&
|
|
104
|
-
a.every((x, i) => x === b[i])
|
|
105
|
-
);
|
|
106
|
-
else if (a instanceof Float32Array)
|
|
107
|
-
return (
|
|
108
|
-
b instanceof Float32Array &&
|
|
109
|
-
a.length === b.length &&
|
|
110
|
-
a.every((x, i) => x === b[i])
|
|
111
|
-
);
|
|
112
|
-
else if (a instanceof Float64Array)
|
|
113
|
-
return (
|
|
114
|
-
b instanceof Float64Array &&
|
|
115
|
-
a.length === b.length &&
|
|
116
|
-
a.every((x, i) => x === b[i])
|
|
117
|
-
);
|
|
118
|
-
else if (a instanceof ArrayBuffer) {
|
|
119
|
-
if (!(b instanceof ArrayBuffer) || a.byteLength !== b.byteLength)
|
|
120
|
-
return false;
|
|
121
|
-
const x: Uint8Array = new Uint8Array(a);
|
|
122
|
-
const y: Uint8Array = new Uint8Array(b);
|
|
123
|
-
return x.every((v, i) => v === y[i]);
|
|
124
|
-
} else if (a instanceof SharedArrayBuffer) {
|
|
125
|
-
if (!(b instanceof SharedArrayBuffer) || a.byteLength !== b.byteLength)
|
|
126
|
-
return false;
|
|
127
|
-
const x: Uint8Array = new Uint8Array(a);
|
|
128
|
-
const y: Uint8Array = new Uint8Array(b);
|
|
129
|
-
return x.every((v, i) => v === y[i]);
|
|
130
|
-
} else if (a instanceof DataView) {
|
|
131
|
-
if (!(b instanceof DataView) || a.byteLength !== b.byteLength)
|
|
132
|
-
return false;
|
|
133
|
-
const x: Uint8Array = new Uint8Array(a.buffer);
|
|
134
|
-
const y: Uint8Array = new Uint8Array(b.buffer);
|
|
135
|
-
return x.every((v, i) => v === y[i]);
|
|
136
|
-
} else if (a instanceof File)
|
|
91
|
+
|
|
92
|
+
if (typeof File !== "undefined" && a instanceof File)
|
|
137
93
|
return (
|
|
138
94
|
b instanceof File &&
|
|
139
95
|
a.name === b.name &&
|
|
140
96
|
a.size === b.size &&
|
|
141
97
|
a.type === b.type &&
|
|
142
|
-
|
|
98
|
+
a.lastModified === b.lastModified
|
|
143
99
|
);
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
if (!
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
100
|
+
if (typeof Blob !== "undefined" && a instanceof Blob)
|
|
101
|
+
return b instanceof Blob && a.size === b.size && a.type === b.type;
|
|
102
|
+
|
|
103
|
+
if (a instanceof DataView) {
|
|
104
|
+
if (!(b instanceof DataView) || a.byteLength !== b.byteLength)
|
|
105
|
+
return false;
|
|
106
|
+
return bytes(a.buffer, a.byteOffset, a.byteLength).every(
|
|
107
|
+
(value, index) =>
|
|
108
|
+
value === bytes(b.buffer, b.byteOffset, b.byteLength)[index],
|
|
109
|
+
);
|
|
110
|
+
}
|
|
111
|
+
if (ArrayBuffer.isView(a)) {
|
|
112
|
+
if (
|
|
113
|
+
!ArrayBuffer.isView(b) ||
|
|
114
|
+
b instanceof DataView ||
|
|
115
|
+
Object.getPrototypeOf(a) !== Object.getPrototypeOf(b) ||
|
|
116
|
+
a.byteLength !== b.byteLength
|
|
117
|
+
)
|
|
118
|
+
return false;
|
|
119
|
+
const x: Uint8Array = bytes(a.buffer, a.byteOffset, a.byteLength);
|
|
120
|
+
const y: Uint8Array = bytes(b.buffer, b.byteOffset, b.byteLength);
|
|
121
|
+
return x.every((value, index) => value === y[index]);
|
|
155
122
|
}
|
|
156
|
-
|
|
123
|
+
if (a instanceof ArrayBuffer)
|
|
124
|
+
return (
|
|
125
|
+
b instanceof ArrayBuffer &&
|
|
126
|
+
a.byteLength === b.byteLength &&
|
|
127
|
+
bytes(a).every((value, index) => value === bytes(b)[index])
|
|
128
|
+
);
|
|
129
|
+
if (
|
|
130
|
+
typeof SharedArrayBuffer !== "undefined" &&
|
|
131
|
+
a instanceof SharedArrayBuffer
|
|
132
|
+
)
|
|
133
|
+
return (
|
|
134
|
+
b instanceof SharedArrayBuffer &&
|
|
135
|
+
a.byteLength === b.byteLength &&
|
|
136
|
+
bytes(a).every((value, index) => value === bytes(b)[index])
|
|
137
|
+
);
|
|
138
|
+
|
|
139
|
+
const keys: PropertyKey[] = Reflect.ownKeys(a).filter((key) =>
|
|
140
|
+
Object.prototype.propertyIsEnumerable.call(a, key),
|
|
141
|
+
);
|
|
142
|
+
return (
|
|
143
|
+
keys.length ===
|
|
144
|
+
Reflect.ownKeys(b).filter((key) =>
|
|
145
|
+
Object.prototype.propertyIsEnumerable.call(b, key),
|
|
146
|
+
).length &&
|
|
147
|
+
keys.every(
|
|
148
|
+
(key) =>
|
|
149
|
+
Object.prototype.propertyIsEnumerable.call(b, key) &&
|
|
150
|
+
next((a as any)[key], (b as any)[key]),
|
|
151
|
+
)
|
|
152
|
+
);
|
|
157
153
|
};
|
|
158
154
|
return next;
|
|
159
155
|
};
|
|
156
|
+
|
|
157
|
+
const bytes = (
|
|
158
|
+
buffer: ArrayBufferLike,
|
|
159
|
+
byteOffset: number = 0,
|
|
160
|
+
byteLength: number = buffer.byteLength,
|
|
161
|
+
): Uint8Array => new Uint8Array(buffer, byteOffset, byteLength);
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serializes the elements of an array the way ECMAScript `JSON.stringify` does.
|
|
3
|
+
*
|
|
4
|
+
* `SerializeJSONArray` walks index `0` to `LengthOfArrayLike(value) - 1` and
|
|
5
|
+
* writes `null` wherever the element serializes to `undefined`. Neither
|
|
6
|
+
* `Array.prototype.map` nor `Array.prototype.join` reproduces that:
|
|
7
|
+
*
|
|
8
|
+
* - `map` never visits a hole and leaves one behind, and `join` renders a hole as
|
|
9
|
+
* empty text, so a sparse array joined into malformed text such as `[,1]`. A
|
|
10
|
+
* hole exists at runtime whatever the element type declares, so this is not
|
|
11
|
+
* an `any` concern.
|
|
12
|
+
* - `join` renders a mapped `undefined` as empty text too, which is what an `any`
|
|
13
|
+
* or `unknown` element holding a function, a symbol, or a `toJSON` that
|
|
14
|
+
* returns nothing serializes to.
|
|
15
|
+
*
|
|
16
|
+
* The length is converted with `ToLength` and read once, which is both what
|
|
17
|
+
* `JSON.stringify` does and what `Array.prototype.every` - the traversal
|
|
18
|
+
* typia's own array checkers emit - does, so the checker and the serializer
|
|
19
|
+
* walk one index range rather than two that merely usually coincide.
|
|
20
|
+
*
|
|
21
|
+
* @param elements Array being serialized.
|
|
22
|
+
* @param mapper Serializer of one element, emitted by the transform.
|
|
23
|
+
* @returns Comma separated element text, without the enclosing brackets.
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export const _jsonStringifyArray = <T>(
|
|
27
|
+
elements: ArrayLike<T>,
|
|
28
|
+
mapper: (elem: T, index: number) => string,
|
|
29
|
+
): string => {
|
|
30
|
+
const length: number = Math.min(
|
|
31
|
+
Math.max(Math.trunc(elements.length) || 0, 0),
|
|
32
|
+
Number.MAX_SAFE_INTEGER,
|
|
33
|
+
);
|
|
34
|
+
let output: string = "";
|
|
35
|
+
for (let i: number = 0; i < length; ++i) {
|
|
36
|
+
const elem: T | undefined = elements[i];
|
|
37
|
+
// A hole and an explicit `undefined` are answered without calling the
|
|
38
|
+
// mapper, because the mapper is the element type's own serializer and a
|
|
39
|
+
// typed one has no answer for a missing value. Everything else is answered
|
|
40
|
+
// from the mapper's *result*: an element that is present but serializes to
|
|
41
|
+
// nothing — a function, a symbol, or a `toJSON` returning nothing in an
|
|
42
|
+
// `any` slot — is `null` in an array position, exactly as
|
|
43
|
+
// SerializeJSONArray specifies, and testing the input instead would let its
|
|
44
|
+
// text become the literal `undefined`.
|
|
45
|
+
const text: string | undefined =
|
|
46
|
+
elem === undefined ? undefined : mapper(elem, i);
|
|
47
|
+
output += (i === 0 ? "" : ",") + (text === undefined ? "null" : text);
|
|
48
|
+
}
|
|
49
|
+
return output;
|
|
50
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes one array or tuple element the way ECMAScript `JSON.stringify` writes
|
|
3
|
+
* it.
|
|
4
|
+
*
|
|
5
|
+
* `SerializeJSONArray` writes `null` wherever an element serializes to
|
|
6
|
+
* `undefined`, because an array position cannot be omitted without shifting
|
|
7
|
+
* every element after it. A present value with no serialization — a function, a
|
|
8
|
+
* symbol, or a `toJSON` returning nothing — is therefore `null`, not the
|
|
9
|
+
* literal text `undefined` and not an empty slot.
|
|
10
|
+
*
|
|
11
|
+
* This is the fixed-position counterpart of `_jsonStringifyArray`, which
|
|
12
|
+
* answers the same question while walking an array's own index range.
|
|
13
|
+
*
|
|
14
|
+
* @param text Serialized element value, or `undefined` when it has none.
|
|
15
|
+
* @returns Element text, or `null` when the element has no serialization.
|
|
16
|
+
* @internal
|
|
17
|
+
*/
|
|
18
|
+
export const _jsonStringifyElement = (text: string | undefined): string =>
|
|
19
|
+
text === undefined ? "null" : text;
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Writes one object member the way ECMAScript `JSON.stringify` writes it.
|
|
3
|
+
*
|
|
4
|
+
* `SerializeJSONObject` serializes each member first and drops the member
|
|
5
|
+
* entirely when that result is `undefined`. Deciding omission from the _input_
|
|
6
|
+
* instead cannot reach the same answer: a symbol and a `toJSON` returning
|
|
7
|
+
* nothing are both present, non-`undefined`, non-function values whose
|
|
8
|
+
* serialization is `undefined`, so the member's text became the literal
|
|
9
|
+
* `"k":undefined` — output that is not JSON at all.
|
|
10
|
+
*
|
|
11
|
+
* The serialized text is passed in already evaluated, so the member's value is
|
|
12
|
+
* serialized exactly once. Testing the input and then serializing would
|
|
13
|
+
* evaluate a `toJSON` twice, and a `toJSON` is free to answer differently each
|
|
14
|
+
* call.
|
|
15
|
+
*
|
|
16
|
+
* The trailing separator belongs to the member because a dropped member must
|
|
17
|
+
* take its comma with it; `_jsonStringifyTail` removes the one that is left
|
|
18
|
+
* behind when the last written member is the one that dropped.
|
|
19
|
+
*
|
|
20
|
+
* @param head Quoted key and colon, emitted by the transform.
|
|
21
|
+
* @param text Serialized member value, or `undefined` when it has none.
|
|
22
|
+
* @param tail Separator following this member, empty for the last one.
|
|
23
|
+
* @returns Member text, or an empty string when the member is omitted.
|
|
24
|
+
* @internal
|
|
25
|
+
*/
|
|
26
|
+
export const _jsonStringifyProperty = (
|
|
27
|
+
head: string,
|
|
28
|
+
text: string | undefined,
|
|
29
|
+
tail: string,
|
|
30
|
+
): string => (text === undefined ? "" : head + text + tail);
|
|
@@ -7,7 +7,12 @@ export const _llmApplicationFinalize = <Class extends object = any>(
|
|
|
7
7
|
): ILlmApplication<Class> => ({
|
|
8
8
|
...app,
|
|
9
9
|
config: {
|
|
10
|
-
|
|
10
|
+
// The schema configuration comes from the emitted application, which is
|
|
11
|
+
// where the `Config` generic was resolved. Rebuilding it from the
|
|
12
|
+
// converter's defaults reported `strict: false` for a strict build, and
|
|
13
|
+
// `@typia/mcp` then inverted a strict output schema without strict, which
|
|
14
|
+
// drops every constraint it carries as a description tag (issue #2293).
|
|
15
|
+
...LlmSchemaConverter.getConfig(app.config),
|
|
11
16
|
validate: config?.validate ?? null,
|
|
12
17
|
},
|
|
13
18
|
functions: app.functions.map((func) => ({
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { _notationAssign } from "./_notationAssign";
|
|
2
|
+
|
|
1
3
|
export const _notationAny = (rename: (str: string) => string) => {
|
|
2
4
|
const main = (input: any): any => {
|
|
3
5
|
if (typeof input === "object")
|
|
@@ -29,9 +31,12 @@ export const _notationAny = (rename: (str: string) => string) => {
|
|
|
29
31
|
else return object(input);
|
|
30
32
|
return input;
|
|
31
33
|
};
|
|
32
|
-
const object = (input: Record<string, any>) =>
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
)
|
|
34
|
+
const object = (input: Record<string, any>) => {
|
|
35
|
+
const output: Record<string, any> = {};
|
|
36
|
+
const sources: Record<string, string> = Object.create(null);
|
|
37
|
+
for (const [key, value] of Object.entries(input))
|
|
38
|
+
_notationAssign(output, sources, key, main(value), rename);
|
|
39
|
+
return output;
|
|
40
|
+
};
|
|
36
41
|
return main;
|
|
37
42
|
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { _notationKeyCollision } from "./_notationKeyCollision";
|
|
2
|
+
|
|
3
|
+
export const _notationAssign = (
|
|
4
|
+
output: Record<string, any>,
|
|
5
|
+
sources: Record<string, string>,
|
|
6
|
+
source: string,
|
|
7
|
+
value: any,
|
|
8
|
+
rename: (str: string) => string,
|
|
9
|
+
): void => {
|
|
10
|
+
const destination: string = rename(source);
|
|
11
|
+
if (Object.hasOwn(output, destination))
|
|
12
|
+
_notationKeyCollision(sources[destination]!, source, destination);
|
|
13
|
+
Object.defineProperty(output, destination, {
|
|
14
|
+
configurable: true,
|
|
15
|
+
enumerable: true,
|
|
16
|
+
value,
|
|
17
|
+
writable: true,
|
|
18
|
+
});
|
|
19
|
+
sources[destination] = source;
|
|
20
|
+
};
|
|
@@ -1,13 +1,34 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { __notationUnsnake } from "./private/__notationUnsnake";
|
|
1
|
+
import { __notationRename } from "./private/__notationRename";
|
|
3
2
|
|
|
4
|
-
|
|
3
|
+
const _notationCamelSnake = (str: string): string => {
|
|
4
|
+
while (str.startsWith("_")) str = str.substring(1);
|
|
5
|
+
if (str.length === 0) return "";
|
|
6
|
+
const index: number = str.indexOf("_");
|
|
7
|
+
if (index < 0) return str.toLowerCase();
|
|
8
|
+
const middle: string | undefined = str[index + 1];
|
|
9
|
+
// A trailing underscore has no character to uppercase, so `CamelizeSnakeString`
|
|
10
|
+
// falls through to lowercasing the whole key (`foo_` -> `foo_`).
|
|
11
|
+
if (middle === undefined) return str.toLowerCase();
|
|
12
|
+
// A doubled underscore collapses to a single one before continuing.
|
|
13
|
+
return middle === "_"
|
|
14
|
+
? _notationCamelSnake(
|
|
15
|
+
`${str.substring(0, index)}_${str.substring(index + 2)}`,
|
|
16
|
+
)
|
|
17
|
+
: `${str
|
|
18
|
+
.substring(0, index)
|
|
19
|
+
.toLowerCase()}${middle.toUpperCase()}${_notationCamelSnake(
|
|
20
|
+
str.substring(index + 2),
|
|
21
|
+
)}`;
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
export const _notationCamel = __notationRename({
|
|
25
|
+
// `CamelCase<T>` lowercases an all-caps key and otherwise lowercases only the
|
|
26
|
+
// first character of an underscore-free key (`HTTP` -> `http`, `userID` stays).
|
|
5
27
|
plain: (str) =>
|
|
6
|
-
str.
|
|
7
|
-
? str
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
snake:
|
|
12
|
-
i === 0 ? str.toLowerCase() : __notationCapitalize(str.toLowerCase()),
|
|
28
|
+
str === str.toUpperCase()
|
|
29
|
+
? str.toLowerCase()
|
|
30
|
+
: `${str[0]!.toLowerCase()}${str.substring(1)}`,
|
|
31
|
+
// With an underscore present, the character after each underscore is
|
|
32
|
+
// uppercased and the rest lowercased, matching `CamelizeSnakeString`.
|
|
33
|
+
snake: _notationCamelSnake,
|
|
13
34
|
});
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { _notationSnake } from "./_notationSnake";
|
|
2
|
+
|
|
3
|
+
export const _notationKebab = (str: string): string => {
|
|
4
|
+
let snaked: string = _notationSnake(str);
|
|
5
|
+
let prefix: string = "";
|
|
6
|
+
while (snaked.startsWith("_")) {
|
|
7
|
+
prefix += "_";
|
|
8
|
+
snaked = snaked.substring(1);
|
|
9
|
+
}
|
|
10
|
+
return `${prefix}${snaked.replaceAll("_", "-")}`;
|
|
11
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const _notationKeyCollision = (
|
|
2
|
+
first: string,
|
|
3
|
+
second: string,
|
|
4
|
+
destination: string,
|
|
5
|
+
): never => {
|
|
6
|
+
throw new Error(
|
|
7
|
+
`typia.notations cannot rename both ${JSON.stringify(first)} and ${JSON.stringify(second)} to ${JSON.stringify(destination)}.`,
|
|
8
|
+
);
|
|
9
|
+
};
|
|
@@ -1,8 +1,21 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { __notationUnsnake } from "./private/__notationUnsnake";
|
|
1
|
+
import { __notationRename } from "./private/__notationRename";
|
|
3
2
|
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
3
|
+
const _notationPascalSnake = (str: string): string => {
|
|
4
|
+
while (str.startsWith("_")) str = str.substring(1);
|
|
5
|
+
if (str.length === 0) return "";
|
|
6
|
+
const index: number = str.indexOf("_");
|
|
7
|
+
return index < 0
|
|
8
|
+
? `${str[0]!.toUpperCase()}${str.substring(1).toLowerCase()}`
|
|
9
|
+
: `${str[0]!.toUpperCase()}${str
|
|
10
|
+
.substring(1, index)
|
|
11
|
+
.toLowerCase()}${_notationPascalSnake(str.substring(index + 1))}`;
|
|
12
|
+
};
|
|
13
|
+
|
|
14
|
+
export const _notationPascal = __notationRename({
|
|
15
|
+
// `PascalCase<T>` capitalizes the first character of an underscore-free key
|
|
16
|
+
// and keeps the rest verbatim (`userID` -> `UserID`).
|
|
17
|
+
plain: (str) => `${str[0]!.toUpperCase()}${str.substring(1)}`,
|
|
18
|
+
// With an underscore present, each segment is capitalized and its tail is
|
|
19
|
+
// lowercased (`MAX_COUNT` -> `MaxCount`), matching `PascalizeSnakeString`.
|
|
20
|
+
snake: _notationPascalSnake,
|
|
8
21
|
});
|