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,7 +2,7 @@ package helpers
|
|
|
2
2
|
|
|
3
3
|
import (
|
|
4
4
|
"encoding/json"
|
|
5
|
-
"
|
|
5
|
+
"strings"
|
|
6
6
|
|
|
7
7
|
shimast "github.com/microsoft/typescript-go/shim/ast"
|
|
8
8
|
shimprinter "github.com/microsoft/typescript-go/shim/printer"
|
|
@@ -21,9 +21,10 @@ type StringifyJoiner_ObjectProps struct {
|
|
|
21
21
|
}
|
|
22
22
|
|
|
23
23
|
type StringifyJoiner_ArrayProps struct {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
24
|
+
Context nativecontext.ITypiaContext
|
|
25
|
+
Input *shimast.Expression
|
|
26
|
+
Arrow *shimast.Expression
|
|
27
|
+
Emit *shimprinter.EmitContext
|
|
27
28
|
}
|
|
28
29
|
|
|
29
30
|
type StringifyJoiner_TupleProps struct {
|
|
@@ -48,17 +49,22 @@ func (stringifyJoinerNamespace) Object(props StringifyJoiner_ObjectProps) *shima
|
|
|
48
49
|
dynamic = append(dynamic, entry)
|
|
49
50
|
}
|
|
50
51
|
}
|
|
51
|
-
expressions := stringifyJoiner_regular_properties(regular, dynamic, props.Context.Emit)
|
|
52
|
+
expressions := stringifyJoiner_regular_properties(props.Context, regular, dynamic, props.Context.Emit)
|
|
52
53
|
if len(dynamic) != 0 {
|
|
53
54
|
keys := make([]string, 0, len(regular))
|
|
54
55
|
for _, entry := range regular {
|
|
55
56
|
keys = append(keys, *entry.Key.GetSoleLiteral())
|
|
56
57
|
}
|
|
57
|
-
expressions = append(expressions, stringifyJoiner_dynamic_properties(dynamic, keys, props.Context.Emit))
|
|
58
|
+
expressions = append(expressions, stringifyJoiner_dynamic_properties(props.Context, dynamic, keys, props.Context.Emit))
|
|
58
59
|
}
|
|
59
60
|
|
|
61
|
+
// The tail helper removes the separator left behind when the last written
|
|
62
|
+
// member drops out at runtime, so it may only be skipped when the last regular
|
|
63
|
+
// member cannot drop. Required is not the same as cannot-drop: a required
|
|
64
|
+
// `any` member is omitted whenever its value serializes to `undefined`, which
|
|
65
|
+
// without this produced a trailing comma before `}` (#2253).
|
|
60
66
|
filtered := expressions
|
|
61
|
-
if !((len(regular) != 0 && regular[len(regular)-1]
|
|
67
|
+
if !((len(regular) != 0 && !stringifyJoiner_entry_omittable(regular[len(regular)-1]) && len(dynamic) == 0) ||
|
|
62
68
|
(len(regular) == 0 && len(dynamic) != 0)) {
|
|
63
69
|
filtered = []*shimast.Node{
|
|
64
70
|
f.NewCallExpression(
|
|
@@ -78,27 +84,26 @@ func (stringifyJoinerNamespace) Object(props StringifyJoiner_ObjectProps) *shima
|
|
|
78
84
|
return nativefactories.TemplateFactory.Generate(output, props.Context.Emit)
|
|
79
85
|
}
|
|
80
86
|
|
|
87
|
+
// Array serializes elements through the `_jsonStringifyArray` helper rather than
|
|
88
|
+
// `input.map(...).join(",")`.
|
|
89
|
+
//
|
|
90
|
+
// `map` never visits a hole and leaves one behind, and `join` renders both a
|
|
91
|
+
// hole and a mapped `undefined` as empty text, so the two cases ECMAScript's
|
|
92
|
+
// SerializeJSONArray answers with `null` were emitted as nothing at all: a
|
|
93
|
+
// sparse array produced the malformed text `[,1]`, and an element serializing to
|
|
94
|
+
// `undefined` — a function, a symbol, or a `toJSON` returning nothing in an
|
|
95
|
+
// `any` or `unknown` slot — silently collapsed its position. A hole exists at
|
|
96
|
+
// runtime whatever the element type declares, so this is not confined to `any`
|
|
97
|
+
// (#2253).
|
|
81
98
|
func (stringifyJoinerNamespace) Array(props StringifyJoiner_ArrayProps) *shimast.Node {
|
|
82
99
|
f := nativecontext.EmitFactoryOf(stringifyJoiner_factory, props.Emit)
|
|
83
100
|
return nativefactories.TemplateFactory.Generate([]*shimast.Node{
|
|
84
101
|
f.NewStringLiteral("[", shimast.TokenFlagsNone),
|
|
85
102
|
f.NewCallExpression(
|
|
86
|
-
|
|
87
|
-
nil,
|
|
88
|
-
f.NewCallExpression(
|
|
89
|
-
nativefactories.IdentifierFactory.Access(nil, props.Input, "map"),
|
|
90
|
-
nil,
|
|
91
|
-
nil,
|
|
92
|
-
f.NewNodeList([]*shimast.Node{props.Arrow}),
|
|
93
|
-
shimast.NodeFlagsNone,
|
|
94
|
-
),
|
|
95
|
-
"join",
|
|
96
|
-
),
|
|
103
|
+
stringifyJoiner_internal(props.Context, "jsonStringifyArray"),
|
|
97
104
|
nil,
|
|
98
105
|
nil,
|
|
99
|
-
f.NewNodeList([]*shimast.Node{
|
|
100
|
-
f.NewStringLiteral(",", shimast.TokenFlagsNone),
|
|
101
|
-
}),
|
|
106
|
+
f.NewNodeList([]*shimast.Node{props.Input, props.Arrow}),
|
|
102
107
|
shimast.NodeFlagsNone,
|
|
103
108
|
),
|
|
104
109
|
f.NewStringLiteral("]", shimast.TokenFlagsNone),
|
|
@@ -131,31 +136,66 @@ func (stringifyJoinerNamespace) Tuple(props StringifyJoiner_TupleProps) *shimast
|
|
|
131
136
|
return nativefactories.TemplateFactory.Generate(expressions, props.Emit)
|
|
132
137
|
}
|
|
133
138
|
|
|
134
|
-
func stringifyJoiner_regular_properties(regular []IExpressionEntry, dynamic []IExpressionEntry, emit ...*shimprinter.EmitContext) []*shimast.Node {
|
|
139
|
+
func stringifyJoiner_regular_properties(context nativecontext.ITypiaContext, regular []IExpressionEntry, dynamic []IExpressionEntry, emit ...*shimprinter.EmitContext) []*shimast.Node {
|
|
135
140
|
f := nativecontext.EmitFactoryOf(stringifyJoiner_factory, emit...)
|
|
136
141
|
output := []*shimast.Node{}
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
142
|
+
// Members keep their declaration order, which is what the guide promises and
|
|
143
|
+
// what `JSON.stringify` produces for a value assigned in that order. They used
|
|
144
|
+
// to be sorted so every omissible member sat ahead of the required ones,
|
|
145
|
+
// because the separator is appended to every entry but the last and a last
|
|
146
|
+
// member that drops at runtime would leave a trailing comma. The caller
|
|
147
|
+
// already repairs exactly that with `_jsonStringifyTail`, whose condition
|
|
148
|
+
// reads the last member and now sees the declared one, so the ordering
|
|
149
|
+
// constraint the sort existed for no longer applies (#2295).
|
|
140
150
|
for index, entry := range regular {
|
|
141
151
|
key := entry.Key.GetSoleLiteral()
|
|
142
152
|
encoded, err := json.Marshal(*key)
|
|
143
153
|
if err != nil {
|
|
144
154
|
encoded = []byte("\"" + *key + "\"")
|
|
145
155
|
}
|
|
156
|
+
// encoded is escaped for a JSON string, but the literal becomes a part of a
|
|
157
|
+
// template literal (TemplateFactory.Generate). The two contexts disagree, so
|
|
158
|
+
// re-escape the JSON bytes for the template-literal context: otherwise `\"`
|
|
159
|
+
// decays to `"`, `\\` to `\`, a control-char escape's backslash is dropped, a
|
|
160
|
+
// raw backtick closes the template, and `${` starts a live interpolation.
|
|
161
|
+
separator := ""
|
|
162
|
+
if index != len(regular)-1 || len(dynamic) != 0 {
|
|
163
|
+
separator = ","
|
|
164
|
+
}
|
|
146
165
|
base := []*shimast.Node{
|
|
147
|
-
f.NewStringLiteral(string(encoded)+":", shimast.TokenFlagsNone),
|
|
166
|
+
f.NewStringLiteral(stringifyJoiner_escape_template(string(encoded))+":", shimast.TokenFlagsNone),
|
|
148
167
|
entry.Expression,
|
|
149
168
|
}
|
|
150
|
-
if
|
|
151
|
-
base = append(base, f.NewStringLiteral(
|
|
169
|
+
if separator != "" {
|
|
170
|
+
base = append(base, f.NewStringLiteral(separator, shimast.TokenFlagsNone))
|
|
152
171
|
}
|
|
153
172
|
empty := (!entry.Meta.IsRequired() && !entry.Meta.Nullable && entry.Meta.Size() == 0) ||
|
|
154
173
|
(len(entry.Meta.Functions) != 0 && !entry.Meta.Nullable && entry.Meta.Size() == 1)
|
|
155
174
|
if empty {
|
|
156
175
|
continue
|
|
157
176
|
}
|
|
158
|
-
if
|
|
177
|
+
if stringifyJoiner_result_undefinable(entry.Meta) {
|
|
178
|
+
// An `any` or `unknown` member is serialized by JSON.stringify, which
|
|
179
|
+
// answers `undefined` for a function, a symbol, and a `toJSON` returning
|
|
180
|
+
// nothing while the value itself is present. Only the serialized result
|
|
181
|
+
// distinguishes those from a value that has text, so the member is written
|
|
182
|
+
// through the helper that reads that result — once, because a `toJSON` may
|
|
183
|
+
// answer differently on a second call (#2253). The input tests below stay
|
|
184
|
+
// for members whose serializer must not run on a missing value at all.
|
|
185
|
+
output = append(output, f.NewCallExpression(
|
|
186
|
+
stringifyJoiner_internal(context, "jsonStringifyProperty"),
|
|
187
|
+
nil,
|
|
188
|
+
nil,
|
|
189
|
+
f.NewNodeList([]*shimast.Node{
|
|
190
|
+
f.NewStringLiteral(string(encoded)+":", shimast.TokenFlagsNone),
|
|
191
|
+
entry.Expression,
|
|
192
|
+
f.NewStringLiteral(separator, shimast.TokenFlagsNone),
|
|
193
|
+
}),
|
|
194
|
+
shimast.NodeFlagsNone,
|
|
195
|
+
))
|
|
196
|
+
continue
|
|
197
|
+
}
|
|
198
|
+
if !entry.Meta.IsRequired() || len(entry.Meta.Functions) != 0 {
|
|
159
199
|
output = append(output, nativefactories.ExpressionFactory.Conditional(
|
|
160
200
|
stringifyJoiner_regular_condition(entry, emit...),
|
|
161
201
|
f.NewStringLiteral("", shimast.TokenFlagsNone),
|
|
@@ -169,6 +209,39 @@ func stringifyJoiner_regular_properties(regular []IExpressionEntry, dynamic []IE
|
|
|
169
209
|
return output
|
|
170
210
|
}
|
|
171
211
|
|
|
212
|
+
// stringifyJoiner_entry_omittable reports whether a member can be absent from
|
|
213
|
+
// the emitted object at runtime, which is exactly the set of members that are
|
|
214
|
+
// written through a conditional or through the property helper.
|
|
215
|
+
func stringifyJoiner_entry_omittable(entry IExpressionEntry) bool {
|
|
216
|
+
return !entry.Meta.IsRequired() || len(entry.Meta.Functions) != 0 ||
|
|
217
|
+
stringifyJoiner_result_undefinable(entry.Meta)
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// stringifyJoiner_result_undefinable reports whether a value that is present can
|
|
221
|
+
// still serialize to nothing, which is the case an input test cannot see.
|
|
222
|
+
//
|
|
223
|
+
// `any` and `unknown` are serialized by JSON.stringify, which answers
|
|
224
|
+
// `undefined` for a function, a symbol, and a `toJSON` returning nothing. A
|
|
225
|
+
// declared `toJSON` is the same case without `any`: the member's text is its
|
|
226
|
+
// return value, so a return type that admits `undefined` admits a member with no
|
|
227
|
+
// text (#2253).
|
|
228
|
+
// StringifyJoiner_ResultUndefinable exposes the same question to the element
|
|
229
|
+
// positions the joiner does not build itself, so a tuple slot and an object
|
|
230
|
+
// member classify a value identically.
|
|
231
|
+
func StringifyJoiner_ResultUndefinable(meta *nativemetadata.MetadataSchema) bool {
|
|
232
|
+
return stringifyJoiner_result_undefinable(meta)
|
|
233
|
+
}
|
|
234
|
+
|
|
235
|
+
func stringifyJoiner_result_undefinable(meta *nativemetadata.MetadataSchema) bool {
|
|
236
|
+
if meta == nil {
|
|
237
|
+
return false
|
|
238
|
+
}
|
|
239
|
+
if meta.Any {
|
|
240
|
+
return true
|
|
241
|
+
}
|
|
242
|
+
return meta.Escaped != nil && meta.Escaped.Returns != nil && !meta.Escaped.Returns.IsRequired()
|
|
243
|
+
}
|
|
244
|
+
|
|
172
245
|
func stringifyJoiner_regular_condition(entry IExpressionEntry, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
173
246
|
f := nativecontext.EmitFactoryOf(stringifyJoiner_factory, emit...)
|
|
174
247
|
conditions := []*shimast.Node{}
|
|
@@ -193,7 +266,7 @@ func stringifyJoiner_regular_condition(entry IExpressionEntry, emit ...*shimprin
|
|
|
193
266
|
return stringifyJoiner_reduce(conditions, shimast.KindBarBarToken, emit...)
|
|
194
267
|
}
|
|
195
268
|
|
|
196
|
-
func stringifyJoiner_dynamic_properties(dynamic []IExpressionEntry, regular []string, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
269
|
+
func stringifyJoiner_dynamic_properties(context nativecontext.ITypiaContext, dynamic []IExpressionEntry, regular []string, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
197
270
|
f := nativecontext.EmitFactoryOf(stringifyJoiner_factory, emit...)
|
|
198
271
|
statements := []*shimast.Node{
|
|
199
272
|
f.NewIfStatement(
|
|
@@ -292,7 +365,7 @@ func stringifyJoiner_dynamic_properties(dynamic []IExpressionEntry, regular []st
|
|
|
292
365
|
}
|
|
293
366
|
simple := len(dynamic) == 1 && dynamic[0].Key.Size() == 1 && len(dynamic[0].Key.Atomics) != 0 && dynamic[0].Key.Atomics[0].Type == "string"
|
|
294
367
|
if simple {
|
|
295
|
-
statements = append(statements, stringifyJoiner_stringify(dynamic[0], emit...))
|
|
368
|
+
statements = append(statements, stringifyJoiner_stringify(context, dynamic[0], emit...))
|
|
296
369
|
return output()
|
|
297
370
|
}
|
|
298
371
|
for _, entry := range dynamic {
|
|
@@ -307,7 +380,7 @@ func stringifyJoiner_dynamic_properties(dynamic []IExpressionEntry, regular []st
|
|
|
307
380
|
f.NewNodeList([]*shimast.Node{f.NewIdentifier("key")}),
|
|
308
381
|
shimast.NodeFlagsNone,
|
|
309
382
|
),
|
|
310
|
-
stringifyJoiner_stringify(entry, emit...),
|
|
383
|
+
stringifyJoiner_stringify(context, entry, emit...),
|
|
311
384
|
nil,
|
|
312
385
|
))
|
|
313
386
|
}
|
|
@@ -315,20 +388,39 @@ func stringifyJoiner_dynamic_properties(dynamic []IExpressionEntry, regular []st
|
|
|
315
388
|
return output()
|
|
316
389
|
}
|
|
317
390
|
|
|
318
|
-
func stringifyJoiner_stringify(entry IExpressionEntry, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
391
|
+
func stringifyJoiner_stringify(context nativecontext.ITypiaContext, entry IExpressionEntry, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
319
392
|
f := nativecontext.EmitFactoryOf(stringifyJoiner_factory, emit...)
|
|
393
|
+
head := nativefactories.TemplateFactory.Generate([]*shimast.Node{
|
|
394
|
+
f.NewCallExpression(
|
|
395
|
+
f.NewIdentifier("JSON.stringify"),
|
|
396
|
+
nil,
|
|
397
|
+
f.NewNodeList(nil),
|
|
398
|
+
f.NewNodeList([]*shimast.Node{f.NewIdentifier("key")}),
|
|
399
|
+
shimast.NodeFlagsNone,
|
|
400
|
+
),
|
|
401
|
+
f.NewStringLiteral(":", shimast.TokenFlagsNone),
|
|
402
|
+
}, emit...)
|
|
403
|
+
if entry.Meta.Any {
|
|
404
|
+
// An index-signature member takes the same contextual decision a static one
|
|
405
|
+
// takes: `any` and `unknown` values are serialized by JSON.stringify, which
|
|
406
|
+
// answers `undefined` for a present function, symbol, or empty `toJSON`.
|
|
407
|
+
// Returning the empty string hands the surrounding filter the same sentinel
|
|
408
|
+
// it already uses for a missing value, so the member and its separator drop
|
|
409
|
+
// together instead of rendering the literal `undefined` (#2253).
|
|
410
|
+
return f.NewReturnStatement(f.NewCallExpression(
|
|
411
|
+
stringifyJoiner_internal(context, "jsonStringifyProperty"),
|
|
412
|
+
nil,
|
|
413
|
+
nil,
|
|
414
|
+
f.NewNodeList([]*shimast.Node{
|
|
415
|
+
head,
|
|
416
|
+
entry.Expression,
|
|
417
|
+
f.NewStringLiteral("", shimast.TokenFlagsNone),
|
|
418
|
+
}),
|
|
419
|
+
shimast.NodeFlagsNone,
|
|
420
|
+
))
|
|
421
|
+
}
|
|
320
422
|
return f.NewReturnStatement(
|
|
321
|
-
nativefactories.TemplateFactory.Generate([]*shimast.Node{
|
|
322
|
-
f.NewCallExpression(
|
|
323
|
-
f.NewIdentifier("JSON.stringify"),
|
|
324
|
-
nil,
|
|
325
|
-
f.NewNodeList(nil),
|
|
326
|
-
f.NewNodeList([]*shimast.Node{f.NewIdentifier("key")}),
|
|
327
|
-
shimast.NodeFlagsNone,
|
|
328
|
-
),
|
|
329
|
-
f.NewStringLiteral(":", shimast.TokenFlagsNone),
|
|
330
|
-
entry.Expression,
|
|
331
|
-
}, emit...),
|
|
423
|
+
nativefactories.TemplateFactory.Generate([]*shimast.Node{head, entry.Expression}, emit...),
|
|
332
424
|
)
|
|
333
425
|
}
|
|
334
426
|
|
|
@@ -374,13 +466,6 @@ func stringifyJoiner_reduce(expressions []*shimast.Node, operator shimast.Kind,
|
|
|
374
466
|
return output
|
|
375
467
|
}
|
|
376
468
|
|
|
377
|
-
func stringifyJoiner_sequence(meta *nativemetadata.MetadataSchema) int {
|
|
378
|
-
if meta.Any || !meta.IsRequired() || len(meta.Functions) != 0 {
|
|
379
|
-
return 0
|
|
380
|
-
}
|
|
381
|
-
return 1
|
|
382
|
-
}
|
|
383
|
-
|
|
384
469
|
func stringifyJoiner_internal(context nativecontext.ITypiaContext, name string) *shimast.Node {
|
|
385
470
|
if importer := context.Importer; importer != nil {
|
|
386
471
|
return importer.Internal(name)
|
|
@@ -397,6 +482,31 @@ func stringifyJoiner_all_string_literals(elements []*shimast.Expression) bool {
|
|
|
397
482
|
return true
|
|
398
483
|
}
|
|
399
484
|
|
|
485
|
+
// stringifyJoiner_escape_template escapes an already-JSON-encoded key so that,
|
|
486
|
+
// spliced verbatim into a backtick template literal, it reproduces the exact
|
|
487
|
+
// JSON bytes at runtime. It doubles every backslash (so JSON escapes such as
|
|
488
|
+
// `\"`, `\\`, `\t`, `<` survive), escapes a backtick (which would close the
|
|
489
|
+
// template), and escapes the `$` of a `${` pair (which would start a live
|
|
490
|
+
// interpolation). A `$` not followed by `{` and every ordinary character stay
|
|
491
|
+
// byte-identical, so keys that need none of these are unchanged.
|
|
492
|
+
func stringifyJoiner_escape_template(text string) string {
|
|
493
|
+
var builder strings.Builder
|
|
494
|
+
builder.Grow(len(text))
|
|
495
|
+
for i := 0; i < len(text); i++ {
|
|
496
|
+
switch c := text[i]; {
|
|
497
|
+
case c == '\\':
|
|
498
|
+
builder.WriteString("\\\\")
|
|
499
|
+
case c == '`':
|
|
500
|
+
builder.WriteString("\\`")
|
|
501
|
+
case c == '$' && i+1 < len(text) && text[i+1] == '{':
|
|
502
|
+
builder.WriteString("\\$")
|
|
503
|
+
default:
|
|
504
|
+
builder.WriteByte(c)
|
|
505
|
+
}
|
|
506
|
+
}
|
|
507
|
+
return builder.String()
|
|
508
|
+
}
|
|
509
|
+
|
|
400
510
|
func joinStrings(values []string, sep string) string {
|
|
401
511
|
if len(values) == 0 {
|
|
402
512
|
return ""
|
|
@@ -79,11 +79,12 @@ type UnionExplorer_ObjectProps struct {
|
|
|
79
79
|
}
|
|
80
80
|
|
|
81
81
|
type UnionExplorer_ArrayLikeConfig struct {
|
|
82
|
-
Checker
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
82
|
+
Checker func(props UnionExplorer_ArrayLikeCheckerProps) *shimast.Node
|
|
83
|
+
Candidate func(props UnionExplorer_ArrayLikeCandidateProps) *shimast.Node
|
|
84
|
+
Decoder func(props UnionExplorer_ArrayLikeDecoderProps) *shimast.Node
|
|
85
|
+
Empty *shimast.Node
|
|
86
|
+
Success *shimast.Expression
|
|
87
|
+
Failure func(props UnionExplorer_ArrayLikeFailureProps) *shimast.Node
|
|
87
88
|
}
|
|
88
89
|
|
|
89
90
|
type UnionExplorer_ArrayLikeCheckerProps struct {
|
|
@@ -99,6 +100,12 @@ type UnionExplorer_ArrayLikeDecoderProps struct {
|
|
|
99
100
|
Explore any
|
|
100
101
|
}
|
|
101
102
|
|
|
103
|
+
type UnionExplorer_ArrayLikeCandidateProps struct {
|
|
104
|
+
Input *shimast.Expression
|
|
105
|
+
Definition any
|
|
106
|
+
Explore any
|
|
107
|
+
}
|
|
108
|
+
|
|
102
109
|
type UnionExplorer_ArrayLikeFailureProps struct {
|
|
103
110
|
Input *shimast.Expression
|
|
104
111
|
Expected string
|
|
@@ -622,46 +629,69 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
622
629
|
inputType = nativefactories.TypeFactory.Keyword("any", props.Emit)
|
|
623
630
|
postfix = "\"[0]\""
|
|
624
631
|
}
|
|
625
|
-
|
|
626
|
-
f.
|
|
632
|
+
entries := []*shimast.Node{
|
|
633
|
+
f.NewArrowFunction(
|
|
634
|
+
nil,
|
|
635
|
+
nil,
|
|
627
636
|
f.NewNodeList([]*shimast.Node{
|
|
628
|
-
|
|
629
|
-
|
|
630
|
-
|
|
631
|
-
|
|
632
|
-
|
|
633
|
-
|
|
634
|
-
|
|
637
|
+
nativefactories.IdentifierFactory.Parameter("top", inputType, nil, props.Emit),
|
|
638
|
+
}),
|
|
639
|
+
nativefactories.TypeFactory.Keyword("any", props.Emit),
|
|
640
|
+
nil,
|
|
641
|
+
f.NewToken(shimast.KindEqualsGreaterThanToken),
|
|
642
|
+
props.Config.Checker(UnionExplorer_ArrayLikeCheckerProps{
|
|
643
|
+
Input: f.NewIdentifier("top"),
|
|
644
|
+
Definition: props.Accessor.Element(meta),
|
|
645
|
+
Explore: unionExplorer_with_postfix(props.Explore, false, postfix),
|
|
646
|
+
Container: array,
|
|
647
|
+
}),
|
|
648
|
+
),
|
|
649
|
+
f.NewArrowFunction(
|
|
650
|
+
nil,
|
|
651
|
+
nil,
|
|
652
|
+
f.NewNodeList([]*shimast.Node{
|
|
653
|
+
nativefactories.IdentifierFactory.Parameter(
|
|
654
|
+
"entire",
|
|
655
|
+
f.NewTypeReferenceNode(f.NewIdentifier("any[]"), nil),
|
|
635
656
|
nil,
|
|
636
|
-
|
|
637
|
-
props.Config.Checker(UnionExplorer_ArrayLikeCheckerProps{
|
|
638
|
-
Input: f.NewIdentifier("top"),
|
|
639
|
-
Definition: props.Accessor.Element(meta),
|
|
640
|
-
Explore: unionExplorer_with_postfix(props.Explore, false, postfix),
|
|
641
|
-
Container: array,
|
|
642
|
-
}),
|
|
657
|
+
props.Emit,
|
|
643
658
|
),
|
|
644
|
-
|
|
645
|
-
|
|
646
|
-
|
|
647
|
-
|
|
648
|
-
|
|
649
|
-
|
|
650
|
-
|
|
651
|
-
|
|
652
|
-
|
|
653
|
-
|
|
654
|
-
|
|
655
|
-
|
|
659
|
+
}),
|
|
660
|
+
nativefactories.TypeFactory.Keyword("any", props.Emit),
|
|
661
|
+
nil,
|
|
662
|
+
f.NewToken(shimast.KindEqualsGreaterThanToken),
|
|
663
|
+
props.Config.Decoder(UnionExplorer_ArrayLikeDecoderProps{
|
|
664
|
+
Input: f.NewIdentifier("entire"),
|
|
665
|
+
Definition: meta,
|
|
666
|
+
Explore: unionExplorer_with_tracable(props.Explore, true),
|
|
667
|
+
}),
|
|
668
|
+
),
|
|
669
|
+
}
|
|
670
|
+
if props.Config.Candidate != nil {
|
|
671
|
+
entries = append(entries, f.NewArrowFunction(
|
|
672
|
+
nil,
|
|
673
|
+
nil,
|
|
674
|
+
f.NewNodeList([]*shimast.Node{
|
|
675
|
+
nativefactories.IdentifierFactory.Parameter(
|
|
676
|
+
"entire",
|
|
677
|
+
f.NewTypeReferenceNode(f.NewIdentifier("any[]"), nil),
|
|
656
678
|
nil,
|
|
657
|
-
|
|
658
|
-
props.Config.Decoder(UnionExplorer_ArrayLikeDecoderProps{
|
|
659
|
-
Input: f.NewIdentifier("entire"),
|
|
660
|
-
Definition: meta,
|
|
661
|
-
Explore: unionExplorer_with_tracable(props.Explore, true),
|
|
662
|
-
}),
|
|
679
|
+
props.Emit,
|
|
663
680
|
),
|
|
664
681
|
}),
|
|
682
|
+
nativefactories.TypeFactory.Keyword("boolean", props.Emit),
|
|
683
|
+
nil,
|
|
684
|
+
f.NewToken(shimast.KindEqualsGreaterThanToken),
|
|
685
|
+
props.Config.Candidate(UnionExplorer_ArrayLikeCandidateProps{
|
|
686
|
+
Input: f.NewIdentifier("entire"),
|
|
687
|
+
Definition: meta,
|
|
688
|
+
Explore: unionExplorer_with_tracable(props.Explore, false),
|
|
689
|
+
}),
|
|
690
|
+
))
|
|
691
|
+
}
|
|
692
|
+
return f.NewAsExpression(
|
|
693
|
+
f.NewArrayLiteralExpression(
|
|
694
|
+
f.NewNodeList(entries),
|
|
665
695
|
true,
|
|
666
696
|
),
|
|
667
697
|
f.NewTypeReferenceNode(f.NewIdentifier("const"), nil),
|
|
@@ -709,12 +739,17 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
709
739
|
"pred",
|
|
710
740
|
f.NewIdentifier("tuplePredicators"),
|
|
711
741
|
f.NewIfStatement(
|
|
712
|
-
|
|
713
|
-
f.
|
|
714
|
-
|
|
715
|
-
|
|
716
|
-
|
|
717
|
-
|
|
742
|
+
unionExplorer_array_candidate_condition(
|
|
743
|
+
f.NewCallExpression(
|
|
744
|
+
f.NewIdentifier("pred[0]"),
|
|
745
|
+
nil,
|
|
746
|
+
nil,
|
|
747
|
+
f.NewNodeList([]*shimast.Node{array}),
|
|
748
|
+
shimast.NodeFlagsNone,
|
|
749
|
+
),
|
|
750
|
+
props.Config.Candidate != nil,
|
|
751
|
+
array,
|
|
752
|
+
props.Emit,
|
|
718
753
|
),
|
|
719
754
|
f.NewReturnStatement(
|
|
720
755
|
f.NewCallExpression(
|
|
@@ -741,12 +776,12 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
741
776
|
for _, x := range arrayList {
|
|
742
777
|
arrayPredicates = append(arrayPredicates, predicate(x))
|
|
743
778
|
}
|
|
744
|
-
statements = append(statements,
|
|
745
|
-
|
|
746
|
-
|
|
747
|
-
|
|
748
|
-
|
|
749
|
-
f.NewIfStatement(
|
|
779
|
+
statements = append(statements, nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
|
|
780
|
+
Name: "top",
|
|
781
|
+
Value: props.Accessor.Front(props.Input),
|
|
782
|
+
}, props.Emit))
|
|
783
|
+
if props.Config.Candidate == nil {
|
|
784
|
+
statements = append(statements, f.NewIfStatement(
|
|
750
785
|
f.NewBinaryExpression(
|
|
751
786
|
nil,
|
|
752
787
|
nativefactories.ExpressionFactory.Number(0, props.Emit),
|
|
@@ -756,7 +791,9 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
756
791
|
),
|
|
757
792
|
unionExplorer_return_or_statement(props.Config.Empty, props.Emit),
|
|
758
793
|
nil,
|
|
759
|
-
)
|
|
794
|
+
))
|
|
795
|
+
}
|
|
796
|
+
statements = append(statements,
|
|
760
797
|
nativefactories.StatementFactory.Constant(nativefactories.StatementFactory_ConstantProps{
|
|
761
798
|
Name: "arrayPredicators",
|
|
762
799
|
Value: f.NewArrayLiteralExpression(
|
|
@@ -780,19 +817,37 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
780
817
|
nil,
|
|
781
818
|
nil,
|
|
782
819
|
f.NewToken(shimast.KindEqualsGreaterThanToken),
|
|
783
|
-
|
|
784
|
-
f.
|
|
785
|
-
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
820
|
+
func() *shimast.Node {
|
|
821
|
+
element := f.NewCallExpression(
|
|
822
|
+
f.NewIdentifier("pred[0]"),
|
|
823
|
+
nil,
|
|
824
|
+
nil,
|
|
825
|
+
f.NewNodeList([]*shimast.Node{top}),
|
|
826
|
+
shimast.NodeFlagsNone,
|
|
827
|
+
)
|
|
828
|
+
if props.Config.Candidate == nil {
|
|
829
|
+
return element
|
|
830
|
+
}
|
|
831
|
+
return f.NewBinaryExpression(
|
|
832
|
+
nil,
|
|
833
|
+
f.NewBinaryExpression(
|
|
834
|
+
nil,
|
|
835
|
+
nativefactories.ExpressionFactory.Number(0, props.Emit),
|
|
836
|
+
nil,
|
|
837
|
+
f.NewToken(shimast.KindEqualsEqualsEqualsToken),
|
|
838
|
+
props.Accessor.Size(props.Input),
|
|
839
|
+
),
|
|
840
|
+
nil,
|
|
841
|
+
f.NewToken(shimast.KindBarBarToken),
|
|
842
|
+
element,
|
|
843
|
+
)
|
|
844
|
+
}(),
|
|
790
845
|
),
|
|
791
846
|
}),
|
|
792
847
|
shimast.NodeFlagsNone,
|
|
793
848
|
),
|
|
794
849
|
}, props.Emit),
|
|
795
|
-
unionExplorer_array_if(iterate, array, top, props.Config.Success, props.Emit),
|
|
850
|
+
unionExplorer_array_if(iterate, array, top, props.Config.Success, props.Config.Candidate != nil, props.Emit),
|
|
796
851
|
)
|
|
797
852
|
}
|
|
798
853
|
names := make([]string, 0, len(targets))
|
|
@@ -819,8 +874,75 @@ func unionExplorer_check_union_array_like(props unionExplorer_check_union_array_
|
|
|
819
874
|
)
|
|
820
875
|
}
|
|
821
876
|
|
|
822
|
-
func unionExplorer_array_if(iterate func(init string, from *shimast.Expression, ifStatement *shimast.Node) *shimast.Node, array *shimast.Node, top *shimast.Node, success *shimast.Expression, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
877
|
+
func unionExplorer_array_if(iterate func(init string, from *shimast.Expression, ifStatement *shimast.Node) *shimast.Node, array *shimast.Node, top *shimast.Node, success *shimast.Expression, candidate bool, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
823
878
|
f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
|
|
879
|
+
if candidate {
|
|
880
|
+
elementCondition := f.NewCallExpression(
|
|
881
|
+
nativefactories.IdentifierFactory.Access(nil, array, "every"),
|
|
882
|
+
nil,
|
|
883
|
+
nil,
|
|
884
|
+
f.NewNodeList([]*shimast.Node{
|
|
885
|
+
f.NewArrowFunction(
|
|
886
|
+
nil,
|
|
887
|
+
nil,
|
|
888
|
+
f.NewNodeList([]*shimast.Node{
|
|
889
|
+
nativefactories.IdentifierFactory.Parameter("value", nativefactories.TypeFactory.Keyword("any", emit...), nil, emit...),
|
|
890
|
+
}),
|
|
891
|
+
nil,
|
|
892
|
+
nil,
|
|
893
|
+
f.NewToken(shimast.KindEqualsGreaterThanToken),
|
|
894
|
+
f.NewBinaryExpression(
|
|
895
|
+
nil,
|
|
896
|
+
success,
|
|
897
|
+
nil,
|
|
898
|
+
f.NewToken(shimast.KindEqualsEqualsEqualsToken),
|
|
899
|
+
f.NewCallExpression(
|
|
900
|
+
f.NewIdentifier("pred[0]"),
|
|
901
|
+
nil,
|
|
902
|
+
nil,
|
|
903
|
+
f.NewNodeList([]*shimast.Node{f.NewIdentifier("value")}),
|
|
904
|
+
shimast.NodeFlagsNone,
|
|
905
|
+
),
|
|
906
|
+
),
|
|
907
|
+
),
|
|
908
|
+
}),
|
|
909
|
+
shimast.NodeFlagsNone,
|
|
910
|
+
)
|
|
911
|
+
return f.NewBlock(f.NewNodeList([]*shimast.Node{
|
|
912
|
+
iterate(
|
|
913
|
+
"pred",
|
|
914
|
+
f.NewIdentifier("passed"),
|
|
915
|
+
f.NewIfStatement(
|
|
916
|
+
unionExplorer_array_candidate_condition(elementCondition, true, array, emit...),
|
|
917
|
+
f.NewReturnStatement(f.NewCallExpression(
|
|
918
|
+
f.NewIdentifier("pred[1]"),
|
|
919
|
+
nil,
|
|
920
|
+
nil,
|
|
921
|
+
f.NewNodeList([]*shimast.Node{array}),
|
|
922
|
+
shimast.NodeFlagsNone,
|
|
923
|
+
)),
|
|
924
|
+
nil,
|
|
925
|
+
),
|
|
926
|
+
),
|
|
927
|
+
f.NewIfStatement(
|
|
928
|
+
f.NewBinaryExpression(
|
|
929
|
+
nil,
|
|
930
|
+
nativefactories.ExpressionFactory.Number(0, emit...),
|
|
931
|
+
nil,
|
|
932
|
+
f.NewToken(shimast.KindLessThanToken),
|
|
933
|
+
f.NewIdentifier("passed.length"),
|
|
934
|
+
),
|
|
935
|
+
f.NewReturnStatement(f.NewCallExpression(
|
|
936
|
+
f.NewIdentifier("passed[0][1]"),
|
|
937
|
+
nil,
|
|
938
|
+
nil,
|
|
939
|
+
f.NewNodeList([]*shimast.Node{array}),
|
|
940
|
+
shimast.NodeFlagsNone,
|
|
941
|
+
)),
|
|
942
|
+
nil,
|
|
943
|
+
),
|
|
944
|
+
}), true)
|
|
945
|
+
}
|
|
824
946
|
return f.NewIfStatement(
|
|
825
947
|
f.NewBinaryExpression(
|
|
826
948
|
nil,
|
|
@@ -910,6 +1032,26 @@ func unionExplorer_array_if(iterate func(init string, from *shimast.Expression,
|
|
|
910
1032
|
)
|
|
911
1033
|
}
|
|
912
1034
|
|
|
1035
|
+
func unionExplorer_array_candidate_condition(element *shimast.Node, candidate bool, array *shimast.Node, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
1036
|
+
if candidate == false {
|
|
1037
|
+
return element
|
|
1038
|
+
}
|
|
1039
|
+
f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
|
|
1040
|
+
return f.NewBinaryExpression(
|
|
1041
|
+
nil,
|
|
1042
|
+
f.NewCallExpression(
|
|
1043
|
+
f.NewIdentifier("pred[2]"),
|
|
1044
|
+
nil,
|
|
1045
|
+
nil,
|
|
1046
|
+
f.NewNodeList([]*shimast.Node{array}),
|
|
1047
|
+
shimast.NodeFlagsNone,
|
|
1048
|
+
),
|
|
1049
|
+
nil,
|
|
1050
|
+
f.NewToken(shimast.KindAmpersandAmpersandToken),
|
|
1051
|
+
element,
|
|
1052
|
+
)
|
|
1053
|
+
}
|
|
1054
|
+
|
|
913
1055
|
func unionExplorer_return_or_statement(node *shimast.Node, emit ...*shimprinter.EmitContext) *shimast.Node {
|
|
914
1056
|
f := nativecontext.EmitFactoryOf(unionExplorer_factory, emit...)
|
|
915
1057
|
if node == nil || node.Kind == shimast.KindReturnStatement {
|