typia 13.0.1-dev.20260703.1 → 13.0.2
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/LICENSE +21 -21
- package/README.md +169 -171
- package/lib/TypeGuardError.mjs +42 -3
- package/lib/TypeGuardError.mjs.map +1 -1
- package/lib/_virtual/_rolldown/runtime.mjs +17 -0
- package/lib/compare.mjs +39 -3
- package/lib/compare.mjs.map +1 -1
- package/lib/executable/TypiaGenerateWizard.js +7 -2
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +474 -3
- package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
- package/lib/executable/generate/ttsc.js +11 -8
- package/lib/executable/generate/ttsc.js.map +1 -1
- package/lib/executable/generate/ttsc.mjs +37 -3
- package/lib/executable/generate/ttsc.mjs.map +1 -1
- package/lib/executable/typia.js +10 -4
- package/lib/executable/typia.js.map +1 -1
- package/lib/executable/typia.mjs +59 -3
- package/lib/executable/typia.mjs.map +1 -1
- package/lib/functional.mjs +99 -3
- package/lib/functional.mjs.map +1 -1
- package/lib/http.mjs +139 -3
- package/lib/http.mjs.map +1 -1
- package/lib/index.mjs +18 -2
- package/lib/index.mjs.map +1 -1
- package/lib/internal/_IProtobufWriter.mjs +0 -3
- package/lib/internal/_ProtobufReader.js +7 -6
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +140 -3
- package/lib/internal/_ProtobufReader.mjs.map +1 -1
- package/lib/internal/_ProtobufSizer.mjs +84 -3
- package/lib/internal/_ProtobufSizer.mjs.map +1 -1
- package/lib/internal/_ProtobufWriter.mjs +94 -3
- package/lib/internal/_ProtobufWriter.mjs.map +1 -1
- package/lib/internal/_accessExpressionAsString.mjs +46 -3
- package/lib/internal/_accessExpressionAsString.mjs.map +1 -1
- package/lib/internal/_assertGuard.mjs +11 -3
- package/lib/internal/_assertGuard.mjs.map +1 -1
- package/lib/internal/_coerceLlmArguments.mjs +7 -3
- package/lib/internal/_coerceLlmArguments.mjs.map +1 -1
- package/lib/internal/_createStandardSchema.mjs +64 -3
- package/lib/internal/_createStandardSchema.mjs.map +1 -1
- package/lib/internal/_functionalTypeGuardErrorFactory.mjs +7 -3
- package/lib/internal/_functionalTypeGuardErrorFactory.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadArray.mjs +6 -3
- package/lib/internal/_httpFormDataReadArray.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadBigint.mjs +13 -3
- package/lib/internal/_httpFormDataReadBigint.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadBlob.mjs +6 -3
- package/lib/internal/_httpFormDataReadBlob.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadBoolean.mjs +6 -3
- package/lib/internal/_httpFormDataReadBoolean.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadFile.mjs +6 -3
- package/lib/internal/_httpFormDataReadFile.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadNumber.mjs +10 -3
- package/lib/internal/_httpFormDataReadNumber.mjs.map +1 -1
- package/lib/internal/_httpFormDataReadString.mjs +6 -3
- package/lib/internal/_httpFormDataReadString.mjs.map +1 -1
- package/lib/internal/_httpHeaderReadBigint.mjs +13 -3
- package/lib/internal/_httpHeaderReadBigint.mjs.map +1 -1
- package/lib/internal/_httpHeaderReadBoolean.mjs +6 -3
- package/lib/internal/_httpHeaderReadBoolean.mjs.map +1 -1
- package/lib/internal/_httpHeaderReadNumber.mjs +10 -3
- package/lib/internal/_httpHeaderReadNumber.mjs.map +1 -1
- package/lib/internal/_httpParameterReadBigint.mjs +13 -3
- package/lib/internal/_httpParameterReadBigint.mjs.map +1 -1
- package/lib/internal/_httpParameterReadBoolean.mjs +6 -3
- package/lib/internal/_httpParameterReadBoolean.mjs.map +1 -1
- package/lib/internal/_httpParameterReadNumber.mjs +10 -3
- package/lib/internal/_httpParameterReadNumber.mjs.map +1 -1
- package/lib/internal/_httpParameterReadString.mjs +6 -3
- package/lib/internal/_httpParameterReadString.mjs.map +1 -1
- package/lib/internal/_httpQueryParseURLSearchParams.mjs +13 -3
- package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
- package/lib/internal/_httpQueryReadArray.mjs +6 -3
- package/lib/internal/_httpQueryReadArray.mjs.map +1 -1
- package/lib/internal/_httpQueryReadBigint.mjs +13 -3
- package/lib/internal/_httpQueryReadBigint.mjs.map +1 -1
- package/lib/internal/_httpQueryReadBoolean.mjs +6 -3
- package/lib/internal/_httpQueryReadBoolean.mjs.map +1 -1
- package/lib/internal/_httpQueryReadNumber.mjs +10 -3
- package/lib/internal/_httpQueryReadNumber.mjs.map +1 -1
- package/lib/internal/_httpQueryReadString.mjs +6 -3
- package/lib/internal/_httpQueryReadString.mjs.map +1 -1
- package/lib/internal/_isBetween.mjs +6 -3
- package/lib/internal/_isBetween.mjs.map +1 -1
- package/lib/internal/_isBigintString.mjs +13 -3
- package/lib/internal/_isBigintString.mjs.map +1 -1
- package/lib/internal/_isFormatByte.mjs +10 -3
- package/lib/internal/_isFormatByte.mjs.map +1 -1
- package/lib/internal/_isFormatDate.mjs +7 -3
- package/lib/internal/_isFormatDate.mjs.map +1 -1
- package/lib/internal/_isFormatDateTime.mjs +7 -3
- package/lib/internal/_isFormatDateTime.mjs.map +1 -1
- package/lib/internal/_isFormatDuration.mjs +7 -3
- package/lib/internal/_isFormatDuration.mjs.map +1 -1
- package/lib/internal/_isFormatEmail.mjs +7 -3
- package/lib/internal/_isFormatEmail.mjs.map +1 -1
- package/lib/internal/_isFormatHostname.mjs +7 -3
- package/lib/internal/_isFormatHostname.mjs.map +1 -1
- package/lib/internal/_isFormatIdnEmail.mjs +7 -3
- package/lib/internal/_isFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_isFormatIdnHostname.mjs +7 -3
- package/lib/internal/_isFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_isFormatIpv4.mjs +7 -3
- package/lib/internal/_isFormatIpv4.mjs.map +1 -1
- package/lib/internal/_isFormatIpv6.mjs +7 -3
- package/lib/internal/_isFormatIpv6.mjs.map +1 -1
- package/lib/internal/_isFormatIri.mjs +7 -3
- package/lib/internal/_isFormatIri.mjs.map +1 -1
- package/lib/internal/_isFormatIriReference.mjs +7 -3
- package/lib/internal/_isFormatIriReference.mjs.map +1 -1
- package/lib/internal/_isFormatJsonPointer.mjs +7 -3
- package/lib/internal/_isFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_isFormatPassword.mjs +6 -3
- package/lib/internal/_isFormatPassword.mjs.map +1 -1
- package/lib/internal/_isFormatRegex.mjs +13 -3
- package/lib/internal/_isFormatRegex.mjs.map +1 -1
- package/lib/internal/_isFormatRelativeJsonPointer.mjs +7 -3
- package/lib/internal/_isFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_isFormatTime.mjs +7 -3
- package/lib/internal/_isFormatTime.mjs.map +1 -1
- package/lib/internal/_isFormatUri.mjs +8 -3
- package/lib/internal/_isFormatUri.mjs.map +1 -1
- package/lib/internal/_isFormatUriReference.mjs +7 -3
- package/lib/internal/_isFormatUriReference.mjs.map +1 -1
- package/lib/internal/_isFormatUriTemplate.mjs +7 -3
- package/lib/internal/_isFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_isFormatUrl.mjs +7 -3
- package/lib/internal/_isFormatUrl.mjs.map +1 -1
- package/lib/internal/_isFormatUuid.mjs +7 -3
- package/lib/internal/_isFormatUuid.mjs.map +1 -1
- package/lib/internal/_isTypeFloat.mjs +8 -3
- package/lib/internal/_isTypeFloat.mjs.map +1 -1
- package/lib/internal/_isTypeInt16.mjs +8 -3
- package/lib/internal/_isTypeInt16.mjs.map +1 -1
- package/lib/internal/_isTypeInt32.mjs +8 -3
- package/lib/internal/_isTypeInt32.mjs.map +1 -1
- package/lib/internal/_isTypeInt64.mjs +8 -3
- package/lib/internal/_isTypeInt64.mjs.map +1 -1
- package/lib/internal/_isTypeInt8.mjs +8 -3
- package/lib/internal/_isTypeInt8.mjs.map +1 -1
- package/lib/internal/_isTypeUint16.mjs +8 -3
- package/lib/internal/_isTypeUint16.mjs.map +1 -1
- package/lib/internal/_isTypeUint32.mjs +8 -3
- package/lib/internal/_isTypeUint32.mjs.map +1 -1
- package/lib/internal/_isTypeUint64.mjs +8 -3
- package/lib/internal/_isTypeUint64.mjs.map +1 -1
- package/lib/internal/_isTypeUint8.mjs +8 -3
- package/lib/internal/_isTypeUint8.mjs.map +1 -1
- package/lib/internal/_isUniqueItems.mjs +67 -3
- package/lib/internal/_isUniqueItems.mjs.map +1 -1
- package/lib/internal/_jsonStringifyNumber.mjs +6 -3
- package/lib/internal/_jsonStringifyNumber.mjs.map +1 -1
- package/lib/internal/_jsonStringifyRest.mjs +8 -3
- package/lib/internal/_jsonStringifyRest.mjs.map +1 -1
- package/lib/internal/_jsonStringifyString.mjs +34 -3
- package/lib/internal/_jsonStringifyString.mjs.map +1 -1
- package/lib/internal/_jsonStringifyTail.mjs +6 -3
- package/lib/internal/_jsonStringifyTail.mjs.map +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs +19 -3
- package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
- package/lib/internal/_notationAny.mjs +18 -3
- package/lib/internal/_notationAny.mjs.map +1 -1
- package/lib/internal/_notationCamel.mjs +11 -3
- package/lib/internal/_notationCamel.mjs.map +1 -1
- package/lib/internal/_notationPascal.mjs +11 -3
- package/lib/internal/_notationPascal.mjs.map +1 -1
- package/lib/internal/_notationSnake.mjs +32 -3
- package/lib/internal/_notationSnake.mjs.map +1 -1
- package/lib/internal/_parseLlmArguments.mjs +7 -3
- package/lib/internal/_parseLlmArguments.mjs.map +1 -1
- package/lib/internal/_plainCloneAny.mjs +35 -3
- package/lib/internal/_plainCloneAny.mjs.map +1 -1
- package/lib/internal/_randomArray.mjs +22 -3
- package/lib/internal/_randomArray.mjs.map +1 -1
- package/lib/internal/_randomBigint.mjs +7 -3
- package/lib/internal/_randomBigint.mjs.map +1 -1
- package/lib/internal/_randomBoolean.mjs +6 -3
- package/lib/internal/_randomBoolean.mjs.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +7 -3
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +11 -3
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +11 -3
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +26 -3
- package/lib/internal/_randomFormatDuration.mjs.map +1 -1
- package/lib/internal/_randomFormatEmail.mjs +12 -3
- package/lib/internal/_randomFormatEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatHostname.mjs +12 -3
- package/lib/internal/_randomFormatHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.mjs +7 -3
- package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.mjs +7 -3
- package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +12 -3
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +12 -3
- package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
- package/lib/internal/_randomFormatIri.mjs +7 -3
- package/lib/internal/_randomFormatIri.mjs.map +1 -1
- package/lib/internal/_randomFormatIriReference.mjs +7 -3
- package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +12 -3
- package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatPassword.mjs +11 -3
- package/lib/internal/_randomFormatPassword.mjs.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +7 -3
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +11 -3
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +12 -3
- package/lib/internal/_randomFormatTime.mjs.map +1 -1
- package/lib/internal/_randomFormatUri.mjs +7 -3
- package/lib/internal/_randomFormatUri.mjs.map +1 -1
- package/lib/internal/_randomFormatUriReference.mjs +7 -3
- package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs +7 -3
- package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_randomFormatUrl.mjs +12 -3
- package/lib/internal/_randomFormatUrl.mjs.map +1 -1
- package/lib/internal/_randomFormatUuid.mjs +9 -3
- package/lib/internal/_randomFormatUuid.mjs.map +1 -1
- package/lib/internal/_randomInteger.mjs +31 -3
- package/lib/internal/_randomInteger.mjs.map +1 -1
- package/lib/internal/_randomNumber.mjs +45 -3
- package/lib/internal/_randomNumber.mjs.map +1 -1
- package/lib/internal/_randomPattern.mjs +14 -3
- package/lib/internal/_randomPattern.mjs.map +1 -1
- package/lib/internal/_randomPick.mjs +12 -3
- package/lib/internal/_randomPick.mjs.map +1 -1
- package/lib/internal/_randomString.mjs +23 -3
- package/lib/internal/_randomString.mjs.map +1 -1
- package/lib/internal/_throwTypeGuardError.mjs +9 -3
- package/lib/internal/_throwTypeGuardError.mjs.map +1 -1
- package/lib/internal/_validateReport.mjs +23 -3
- package/lib/internal/_validateReport.mjs.map +1 -1
- package/lib/internal/private/__notationCapitalize.mjs +6 -3
- package/lib/internal/private/__notationCapitalize.mjs.map +1 -1
- package/lib/internal/private/__notationUnsnake.mjs +15 -3
- package/lib/internal/private/__notationUnsnake.mjs.map +1 -1
- package/lib/json.mjs +94 -3
- package/lib/json.mjs.map +1 -1
- package/lib/llm.mjs +54 -3
- package/lib/llm.mjs.map +1 -1
- package/lib/module.mjs +131 -2
- package/lib/module.mjs.map +1 -1
- package/lib/notations.mjs +169 -3
- package/lib/notations.mjs.map +1 -1
- package/lib/plain.mjs +119 -3
- package/lib/plain.mjs.map +1 -1
- package/lib/protobuf.mjs +94 -3
- package/lib/protobuf.mjs.map +1 -1
- package/lib/re-exports.d.ts +2 -1
- package/lib/re-exports.js +5 -1
- package/lib/re-exports.js.map +1 -1
- package/lib/re-exports.mjs +2 -2
- package/lib/reflect.mjs +29 -3
- package/lib/reflect.mjs.map +1 -1
- package/lib/transform.mjs +15 -2
- package/lib/transform.mjs.map +1 -1
- package/lib/transformers/NoTransformConfigurationError.mjs +19 -3
- package/lib/transformers/NoTransformConfigurationError.mjs.map +1 -1
- package/native/adapter/adapter.go +29 -29
- package/native/adapter/adapter_options_branch_matrix_test.go +54 -54
- package/native/adapter/visit.go +173 -173
- package/native/adapter/visit_property_chain_edges_test.go +129 -129
- package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +204 -204
- package/native/cmd/ttsc-typia/atomic_intersection_schema_transform_test.go +148 -148
- package/native/cmd/ttsc-typia/boolean_literal_discriminant_schema_transform_test.go +374 -374
- package/native/cmd/ttsc-typia/build.go +188 -188
- package/native/cmd/ttsc-typia/build_reports_semantic_diagnostics_test.go +34 -34
- package/native/cmd/ttsc-typia/build_reports_syntactic_diagnostics_test.go +34 -34
- package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +314 -314
- package/native/cmd/ttsc-typia/compare_equal_cover_transform_test.go +271 -271
- package/native/cmd/ttsc-typia/compare_less_transform_test.go +180 -180
- package/native/cmd/ttsc-typia/compare_method_delegation_transform_test.go +173 -173
- package/native/cmd/ttsc-typia/demo_rejects_bad_flag_test.go +25 -25
- package/native/cmd/ttsc-typia/diagnostics.go +51 -51
- package/native/cmd/ttsc-typia/dynamic_key_path_helper_alias_transform_test.go +159 -159
- package/native/cmd/ttsc-typia/exclude_type_tag_transform_test.go +176 -176
- package/native/cmd/ttsc-typia/inline_type_display_name_transform_test.go +290 -290
- package/native/cmd/ttsc-typia/instance_union_create_is_transform_test.go +248 -248
- package/native/cmd/ttsc-typia/intersection_all_never_union_transform_test.go +168 -168
- package/native/cmd/ttsc-typia/intersection_brand_transform_test.go +267 -267
- package/native/cmd/ttsc-typia/intersection_nonsensible_backstop_transform_test.go +157 -132
- package/native/cmd/ttsc-typia/intersection_union_validation_transform_test.go +590 -590
- package/native/cmd/ttsc-typia/json_is_stringify_scoped_checker_transform_test.go +206 -0
- package/native/cmd/ttsc-typia/json_stringify_constant_atomic_union_transform_test.go +171 -171
- package/native/cmd/ttsc-typia/main.go +97 -97
- package/native/cmd/ttsc-typia/main_wasm.go +226 -226
- package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +156 -156
- package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +186 -186
- package/native/cmd/ttsc-typia/nullable_primitive_property_is_transform_test.go +236 -236
- package/native/cmd/ttsc-typia/object_custom_tag_validation_transform_test.go +332 -332
- package/native/cmd/ttsc-typia/object_union_explicit_pointer_schema_transform_test.go +269 -269
- package/native/cmd/ttsc-typia/plain_classify_class_ref_transform_test.go +261 -261
- package/native/cmd/ttsc-typia/plain_classify_container_seed_transform_test.go +144 -144
- package/native/cmd/ttsc-typia/plain_classify_cross_module_extra_transform_test.go +211 -211
- package/native/cmd/ttsc-typia/plain_classify_deep_nested_transform_test.go +184 -184
- package/native/cmd/ttsc-typia/plain_classify_field_copy_transform_test.go +204 -204
- package/native/cmd/ttsc-typia/plain_classify_from_new_transform_test.go +465 -465
- package/native/cmd/ttsc-typia/plain_classify_strategy_edges_transform_test.go +519 -519
- package/native/cmd/ttsc-typia/plain_classify_union_transform_test.go +149 -149
- package/native/cmd/ttsc-typia/plain_classify_validated_union_transform_test.go +212 -212
- package/native/cmd/ttsc-typia/plain_clone_bigint_wrapper_transform_test.go +153 -153
- package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +26 -26
- package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +36 -36
- package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -73
- package/native/cmd/ttsc-typia/protobuf_object_generic_union_encode_transform_test.go +248 -248
- package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +107 -107
- package/native/cmd/ttsc-typia/random_recursive_min_items_diagnostic_test.go +234 -234
- package/native/cmd/ttsc-typia/random_unsatisfiable_recursive_diagnostic_test.go +146 -146
- package/native/cmd/ttsc-typia/recursive_visit_tracking_transform_test.go +473 -473
- package/native/cmd/ttsc-typia/run_default_build_route_test.go +31 -31
- package/native/cmd/ttsc-typia/schema_dts_role_transform_test.go +404 -404
- package/native/cmd/ttsc-typia/shallow_depth_argument_error_transform_test.go +88 -88
- package/native/cmd/ttsc-typia/shallow_depth_limit_transform_test.go +278 -278
- package/native/cmd/ttsc-typia/shallow_depth_runtime_test.go +173 -173
- package/native/cmd/ttsc-typia/shallow_factory_depth_runtime_test.go +171 -171
- package/native/cmd/ttsc-typia/shallow_nested_depth_transform_test.go +148 -148
- package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +322 -322
- package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +162 -162
- package/native/cmd/ttsc-typia/transform.go +270 -270
- package/native/cmd/ttsc-typia/transform_declaration_source_produces_no_js_test.go +59 -59
- package/native/cmd/ttsc-typia/transform_diagnostics_preserve_details_test.go +203 -203
- package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +528 -528
- package/native/cmd/ttsc-typia/transform_helpers_test.go +155 -155
- package/native/core/context/EmitFactory.go +39 -39
- package/native/core/context/IProgrammerProps.go +14 -14
- package/native/core/context/ITransformOptions.go +9 -9
- package/native/core/context/ITypiaContext.go +36 -36
- package/native/core/context/ImportProgrammer.go +388 -354
- package/native/core/context/TransformerError.go +117 -117
- package/native/core/context/import_programmer_module_identifier_test.go +29 -0
- package/native/core/context/import_programmer_statement_coverage_test.go +71 -71
- package/native/core/context/index.go +1 -1
- package/native/core/context/transformer_error_formatting_test.go +100 -100
- package/native/core/factories/CommentFactory.go +27 -27
- package/native/core/factories/ExpressionFactory.go +357 -357
- package/native/core/factories/FormatCheatSheet.go +30 -30
- package/native/core/factories/IdentifierFactory.go +172 -172
- package/native/core/factories/JsonMetadataFactory.go +154 -154
- package/native/core/factories/LiteralFactory.go +319 -282
- package/native/core/factories/MetadataCommentTagFactory.go +446 -446
- package/native/core/factories/MetadataFactory.go +543 -543
- package/native/core/factories/MetadataTypeTagFactory.go +560 -560
- package/native/core/factories/MetadataTypeTagSchemaFactory.go +117 -117
- package/native/core/factories/NumericRangeFactory.go +132 -132
- package/native/core/factories/ProtobufFactory.go +1090 -1090
- package/native/core/factories/StatementFactory.go +114 -114
- package/native/core/factories/TemplateFactory.go +82 -82
- package/native/core/factories/TypeFactory.go +176 -176
- package/native/core/factories/ValueFactory.go +43 -43
- package/native/core/factories/factory_utility_coverage_test.go +1006 -1006
- package/native/core/factories/index.go +1 -1
- package/native/core/factories/internal/metadata/IMetadataIteratorProps.go +70 -70
- package/native/core/factories/internal/metadata/MetadataHelper.go +425 -425
- package/native/core/factories/internal/metadata/comment_tags_coverage_test.go +184 -184
- package/native/core/factories/internal/metadata/emend_metadata_atomics.go +80 -80
- package/native/core/factories/internal/metadata/emplace_metadata_alias.go +41 -41
- package/native/core/factories/internal/metadata/emplace_metadata_array_type.go +44 -44
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +599 -599
- package/native/core/factories/internal/metadata/emplace_metadata_tuple.go +69 -69
- package/native/core/factories/internal/metadata/explore_metadata.go +75 -75
- package/native/core/factories/internal/metadata/iterate_metadata.go +55 -55
- package/native/core/factories/internal/metadata/iterate_metadata_alias.go +36 -36
- package/native/core/factories/internal/metadata/iterate_metadata_array.go +77 -77
- package/native/core/factories/internal/metadata/iterate_metadata_atomic.go +63 -63
- package/native/core/factories/internal/metadata/iterate_metadata_coalesce.go +30 -30
- package/native/core/factories/internal/metadata/iterate_metadata_collection.go +366 -366
- package/native/core/factories/internal/metadata/iterate_metadata_collection_branch_matrix_test.go +201 -201
- package/native/core/factories/internal/metadata/iterate_metadata_comment_tags.go +34 -34
- package/native/core/factories/internal/metadata/iterate_metadata_constant.go +139 -139
- package/native/core/factories/internal/metadata/iterate_metadata_escape.go +56 -56
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +93 -93
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +1054 -1054
- package/native/core/factories/internal/metadata/iterate_metadata_intersection_brand_coverage_test.go +114 -114
- package/native/core/factories/internal/metadata/iterate_metadata_intersection_coverage_test.go +106 -106
- package/native/core/factories/internal/metadata/iterate_metadata_intersection_shareable_name_test.go +22 -22
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +55 -55
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +122 -122
- package/native/core/factories/internal/metadata/iterate_metadata_object.go +35 -35
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +41 -41
- package/native/core/factories/internal/metadata/iterate_metadata_sort.go +202 -202
- package/native/core/factories/internal/metadata/iterate_metadata_template.go +41 -41
- package/native/core/factories/internal/metadata/iterate_metadata_tuple.go +24 -24
- package/native/core/factories/internal/metadata/iterate_metadata_union.go +40 -40
- package/native/core/factories/internal/metadata/js_doc_parameter_name_reads_qualified_name_test.go +55 -55
- package/native/core/factories/internal/metadata/optional_coalesce_coverage_test.go +38 -38
- package/native/core/factories/internal/metadata/sort_constants_coverage_test.go +63 -63
- package/native/core/factories/json_metadata_factory_dedupes_bigint_diagnostics_test.go +36 -36
- package/native/core/factories/json_metadata_factory_rejects_bigint_native_test.go +29 -29
- package/native/core/factories/literal_factory_ordered_object_marshals_json_test.go +40 -0
- package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +239 -239
- package/native/core/factories/protobuf_factory_rejects_invalid_field_names_test.go +75 -75
- package/native/core/index.go +1 -1
- package/native/core/programmers/AssertProgrammer.go +511 -511
- package/native/core/programmers/IsProgrammer.go +418 -419
- package/native/core/programmers/RandomProgrammer.go +1448 -1448
- package/native/core/programmers/ValidateProgrammer.go +488 -488
- package/native/core/programmers/compare/CompareEqualProgrammer.go +668 -668
- package/native/core/programmers/compare/CompareLessProgrammer.go +489 -489
- package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +172 -172
- package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +135 -135
- package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +131 -131
- package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +106 -106
- package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +222 -222
- package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +129 -129
- package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +172 -172
- package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +252 -252
- package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +147 -147
- package/native/core/programmers/functional/functional_assert_helper_coverage_test.go +26 -26
- package/native/core/programmers/functional/index.go +1 -1
- package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +53 -53
- package/native/core/programmers/helpers/AtomicPredicator.go +75 -75
- package/native/core/programmers/helpers/ClassifyJoiner.go +174 -174
- package/native/core/programmers/helpers/CloneJoiner.go +307 -307
- package/native/core/programmers/helpers/FunctionProgrammer.go +218 -218
- package/native/core/programmers/helpers/HttpMetadataUtil.go +30 -30
- package/native/core/programmers/helpers/ICheckEntry.go +14 -14
- package/native/core/programmers/helpers/IExpressionEntry.go +15 -15
- package/native/core/programmers/helpers/ModuloText.go +26 -26
- package/native/core/programmers/helpers/NotationJoiner.go +204 -204
- package/native/core/programmers/helpers/OptionPredicator.go +39 -39
- package/native/core/programmers/helpers/ProtobufUtil.go +273 -273
- package/native/core/programmers/helpers/ProtobufWire.go +14 -14
- package/native/core/programmers/helpers/PruneJoiner.go +290 -290
- package/native/core/programmers/helpers/RandomJoiner.go +805 -805
- package/native/core/programmers/helpers/StringifyJoinder.go +409 -409
- package/native/core/programmers/helpers/StringifyPredicator.go +25 -25
- package/native/core/programmers/helpers/UnionExplorer.go +966 -966
- package/native/core/programmers/helpers/UnionPredicator.go +92 -92
- package/native/core/programmers/helpers/clone_joiner_optional_condition_test.go +70 -70
- package/native/core/programmers/helpers/disable_function_programmer_declare.go +10 -10
- package/native/core/programmers/helpers/function_programmer_unique_names_test.go +54 -54
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +147 -147
- package/native/core/programmers/helpers/random_joiner_recursive_array_guard_test.go +166 -166
- package/native/core/programmers/helpers/union_explorer_coverage_test.go +135 -135
- package/native/core/programmers/helpers/union_predicator_checks_neighbor_flag_test.go +34 -34
- package/native/core/programmers/helpers/union_predicator_skips_atomic_like_native_fields_test.go +65 -65
- package/native/core/programmers/helpers/union_predicator_skips_collection_bucket_fields_test.go +72 -72
- package/native/core/programmers/helpers/union_predicator_skips_shared_native_names_test.go +239 -239
- package/native/core/programmers/helpers/union_predicator_skips_shared_object_fields_test.go +43 -43
- package/native/core/programmers/helpers/union_predicator_skips_shared_template_fields_test.go +57 -57
- package/native/core/programmers/http/HttpAssertFormDataProgrammer.go +116 -116
- package/native/core/programmers/http/HttpAssertHeadersProgrammer.go +59 -59
- package/native/core/programmers/http/HttpAssertQueryProgrammer.go +71 -71
- package/native/core/programmers/http/HttpFormDataProgrammer.go +416 -416
- package/native/core/programmers/http/HttpHeadersProgrammer.go +428 -428
- package/native/core/programmers/http/HttpIsFormDataProgrammer.go +142 -142
- package/native/core/programmers/http/HttpIsHeadersProgrammer.go +53 -53
- package/native/core/programmers/http/HttpIsQueryProgrammer.go +65 -65
- package/native/core/programmers/http/HttpParameterProgrammer.go +190 -190
- package/native/core/programmers/http/HttpQueryProgrammer.go +484 -484
- package/native/core/programmers/http/HttpValidateFormDataProgrammer.go +110 -110
- package/native/core/programmers/http/HttpValidateHeadersProgrammer.go +56 -56
- package/native/core/programmers/http/HttpValidateQueryProgrammer.go +68 -68
- package/native/core/programmers/http/http_programmer_helper_coverage_test.go +120 -120
- package/native/core/programmers/http/index.go +1 -1
- package/native/core/programmers/index.go +1 -1
- package/native/core/programmers/internal/CheckerProgrammer.go +2064 -2064
- package/native/core/programmers/internal/FeatureProgrammer.go +1361 -1361
- package/native/core/programmers/internal/feature_programmer_visit_guard_test.go +70 -70
- package/native/core/programmers/internal/internal_utility_coverage_test.go +384 -384
- package/native/core/programmers/iterate/check_array_length.go +64 -64
- package/native/core/programmers/iterate/check_bigint.go +78 -78
- package/native/core/programmers/iterate/check_dynamic_key.go +271 -271
- package/native/core/programmers/iterate/check_dynamic_key_tag_rows_test.go +46 -46
- package/native/core/programmers/iterate/check_dynamic_properties.go +292 -292
- package/native/core/programmers/iterate/check_everything.go +33 -33
- package/native/core/programmers/iterate/check_exclude.go +88 -88
- package/native/core/programmers/iterate/check_native.go +38 -38
- package/native/core/programmers/iterate/check_number.go +180 -180
- package/native/core/programmers/iterate/check_object.go +113 -113
- package/native/core/programmers/iterate/check_object_strict_optional_undefined_test.go +74 -74
- package/native/core/programmers/iterate/check_object_type_tags.go +64 -64
- package/native/core/programmers/iterate/check_string.go +78 -78
- package/native/core/programmers/iterate/check_template.go +346 -346
- package/native/core/programmers/iterate/check_union_array_like.go +422 -422
- package/native/core/programmers/iterate/decode_union_object.go +157 -157
- package/native/core/programmers/iterate/feature_object_entries.go +188 -188
- package/native/core/programmers/iterate/iterate_check_coverage_test.go +178 -178
- package/native/core/programmers/iterate/iterate_utility_coverage_test.go +302 -302
- package/native/core/programmers/iterate/json_schema_alias.go +62 -62
- package/native/core/programmers/iterate/json_schema_array.go +66 -66
- package/native/core/programmers/iterate/json_schema_bigint.go +17 -17
- package/native/core/programmers/iterate/json_schema_boolean.go +17 -17
- package/native/core/programmers/iterate/json_schema_constant.go +53 -53
- package/native/core/programmers/iterate/json_schema_description.go +21 -21
- package/native/core/programmers/iterate/json_schema_discriminator.go +57 -57
- package/native/core/programmers/iterate/json_schema_escaped.go +68 -68
- package/native/core/programmers/iterate/json_schema_jsDocTags.go +48 -48
- package/native/core/programmers/iterate/json_schema_native.go +106 -106
- package/native/core/programmers/iterate/json_schema_number.go +17 -17
- package/native/core/programmers/iterate/json_schema_object.go +187 -184
- package/native/core/programmers/iterate/json_schema_plugin.go +47 -47
- package/native/core/programmers/iterate/json_schema_station.go +251 -251
- package/native/core/programmers/iterate/json_schema_string.go +17 -17
- package/native/core/programmers/iterate/json_schema_template.go +63 -63
- package/native/core/programmers/iterate/json_schema_title.go +25 -25
- package/native/core/programmers/iterate/json_schema_tuple.go +41 -41
- package/native/core/programmers/iterate/metadata_to_pattern.go +64 -64
- package/native/core/programmers/iterate/postfix_of_tuple.go +12 -12
- package/native/core/programmers/iterate/prune_object_properties.go +105 -105
- package/native/core/programmers/iterate/stringify_dynamic_properties.go +219 -219
- package/native/core/programmers/iterate/stringify_native.go +14 -14
- package/native/core/programmers/iterate/stringify_regular_properties.go +112 -112
- package/native/core/programmers/iterate/template_interpolation_tags_test.go +495 -495
- package/native/core/programmers/iterate/template_runtime_pattern.go +262 -262
- package/native/core/programmers/iterate/template_to_pattern.go +29 -29
- package/native/core/programmers/iterate/wrap_metadata_rest_tuple.go +23 -23
- package/native/core/programmers/json/JsonApplicationProgrammer.go +380 -380
- package/native/core/programmers/json/JsonAssertParseProgrammer.go +115 -115
- package/native/core/programmers/json/JsonAssertStringifyProgrammer.go +108 -108
- package/native/core/programmers/json/JsonIsParseProgrammer.go +162 -162
- package/native/core/programmers/json/JsonIsStringifyProgrammer.go +113 -113
- package/native/core/programmers/json/JsonSchemaProgrammer.go +94 -94
- package/native/core/programmers/json/JsonSchemasProgrammer.go +142 -142
- package/native/core/programmers/json/JsonStringifyProgrammer.go +1528 -1508
- package/native/core/programmers/json/JsonValidateParseProgrammer.go +105 -105
- package/native/core/programmers/json/JsonValidateStringifyProgrammer.go +126 -126
- package/native/core/programmers/json/index.go +1 -1
- package/native/core/programmers/json/json_schema_programmer_coverage_test.go +198 -198
- package/native/core/programmers/json/json_schemas_programmer_dedupes_bigint_diagnostics_test.go +37 -37
- package/native/core/programmers/json/json_schemas_programmer_rejects_bigint_native_test.go +29 -29
- package/native/core/programmers/json/json_stringify_programmer_coverage_test.go +422 -422
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +526 -526
- package/native/core/programmers/llm/LlmCoerceProgrammer.go +109 -109
- package/native/core/programmers/llm/LlmControllerProgrammer.go +51 -51
- package/native/core/programmers/llm/LlmMetadataFactory.go +89 -89
- package/native/core/programmers/llm/LlmParametersProgrammer.go +141 -141
- package/native/core/programmers/llm/LlmParseProgrammer.go +121 -121
- package/native/core/programmers/llm/LlmSchemaProgrammer.go +902 -846
- package/native/core/programmers/llm/LlmStructuredOutputProgrammer.go +147 -147
- package/native/core/programmers/llm/index.go +1 -1
- package/native/core/programmers/llm/llm_application_programmer_coverage_test.go +166 -166
- package/native/core/programmers/llm/llm_schema_programmer_coverage_test.go +282 -282
- package/native/core/programmers/llm/llm_schema_programmer_dedupes_bigint_diagnostics_test.go +38 -38
- package/native/core/programmers/llm/llm_schema_programmer_rejects_bigint_native_test.go +30 -30
- package/native/core/programmers/llm/llm_schema_programmer_rejects_exclude_tag_in_strict_test.go +52 -52
- package/native/core/programmers/notations/NotationAssertGeneralProgrammer.go +107 -107
- package/native/core/programmers/notations/NotationGeneralProgrammer.go +1441 -1441
- package/native/core/programmers/notations/NotationIsGeneralProgrammer.go +112 -112
- package/native/core/programmers/notations/NotationValidateGeneralProgrammer.go +131 -131
- package/native/core/programmers/notations/index.go +1 -1
- package/native/core/programmers/notations/notation_general_helpers_test.go +395 -395
- package/native/core/programmers/notations/notation_general_programmer_snake_prefix_test.go +44 -44
- package/native/core/programmers/plain/PlainAssertClassifyProgrammer.go +111 -111
- package/native/core/programmers/plain/PlainAssertCloneProgrammer.go +102 -102
- package/native/core/programmers/plain/PlainAssertPruneProgrammer.go +117 -117
- package/native/core/programmers/plain/PlainClassifyProgrammer.go +2205 -2205
- package/native/core/programmers/plain/PlainCloneProgrammer.go +1254 -1254
- package/native/core/programmers/plain/PlainIsCloneProgrammer.go +117 -117
- package/native/core/programmers/plain/PlainIsPruneProgrammer.go +106 -106
- package/native/core/programmers/plain/PlainPruneProgrammer.go +837 -837
- package/native/core/programmers/plain/PlainValidateClassifyProgrammer.go +127 -127
- package/native/core/programmers/plain/PlainValidateCloneProgrammer.go +123 -123
- package/native/core/programmers/plain/PlainValidatePruneProgrammer.go +114 -114
- package/native/core/programmers/plain/index.go +1 -1
- package/native/core/programmers/plain/plain_programmer_helper_coverage_test.go +284 -284
- package/native/core/programmers/plain/plain_prune_programmer_branch_matrix_test.go +145 -145
- package/native/core/programmers/programmer_direct_helper_coverage_test.go +70 -70
- package/native/core/programmers/protobuf/ProtobufAssertDecodeProgrammer.go +125 -125
- package/native/core/programmers/protobuf/ProtobufAssertEncodeProgrammer.go +143 -143
- package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +861 -861
- package/native/core/programmers/protobuf/ProtobufEncodeProgrammer.go +1269 -1269
- package/native/core/programmers/protobuf/ProtobufIsDecodeProgrammer.go +122 -122
- package/native/core/programmers/protobuf/ProtobufIsEncodeProgrammer.go +115 -115
- package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +269 -269
- package/native/core/programmers/protobuf/ProtobufValidateDecodeProgrammer.go +111 -111
- package/native/core/programmers/protobuf/ProtobufValidateEncodeProgrammer.go +145 -145
- package/native/core/programmers/protobuf/index.go +1 -1
- package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +454 -454
- package/native/core/programmers/random_programmer_helper_coverage_test.go +367 -367
- package/native/core/programmers/random_programmer_min_items_tag_test.go +44 -44
- package/native/core/programmers/reflect/ReflectLiteralsProgrammer.go +125 -125
- package/native/core/schemas/index.go +1 -1
- package/native/core/schemas/metadata/IMetadataDictionary.go +8 -8
- package/native/core/schemas/metadata/IMetadataTypeTagSequence.go +53 -53
- package/native/core/schemas/metadata/MetadataAlias.go +36 -36
- package/native/core/schemas/metadata/MetadataAliasType.go +64 -64
- package/native/core/schemas/metadata/MetadataApplication.go +41 -41
- package/native/core/schemas/metadata/MetadataArray.go +36 -36
- package/native/core/schemas/metadata/MetadataArrayType.go +59 -59
- package/native/core/schemas/metadata/MetadataAtomic.go +69 -69
- package/native/core/schemas/metadata/MetadataCollection.go +698 -698
- package/native/core/schemas/metadata/MetadataComponents.go +122 -122
- package/native/core/schemas/metadata/MetadataConstant.go +47 -47
- package/native/core/schemas/metadata/MetadataConstantValue.go +97 -97
- package/native/core/schemas/metadata/MetadataEscaped.go +40 -40
- package/native/core/schemas/metadata/MetadataFunction.go +46 -46
- package/native/core/schemas/metadata/MetadataMap.go +45 -45
- package/native/core/schemas/metadata/MetadataNative.go +72 -72
- package/native/core/schemas/metadata/MetadataObject.go +36 -36
- package/native/core/schemas/metadata/MetadataObjectType.go +223 -223
- package/native/core/schemas/metadata/MetadataParameter.go +46 -46
- package/native/core/schemas/metadata/MetadataProperty.go +50 -50
- package/native/core/schemas/metadata/MetadataSchema.go +1485 -1485
- package/native/core/schemas/metadata/MetadataSet.go +41 -41
- package/native/core/schemas/metadata/MetadataTemplate.go +70 -70
- package/native/core/schemas/metadata/MetadataTuple.go +20 -20
- package/native/core/schemas/metadata/MetadataTupleType.go +69 -69
- package/native/core/schemas/metadata/index.go +1 -1
- package/native/core/schemas/metadata/metadata_object_type_required_literal_property_test.go +51 -51
- package/native/core/schemas/metadata/metadata_schema_covers_tag_matrix_test.go +125 -125
- package/native/core/schemas/metadata/metadata_schema_sole_literal_caches_pointer_test.go +38 -38
- package/native/core/schemas/metadata/schema_sequence_and_json_coverage_test.go +427 -427
- package/native/core/schemas/protobuf/IProtobufProperty.go +6 -6
- package/native/core/schemas/protobuf/IProtobufPropertyType.go +55 -55
- package/native/core/schemas/protobuf/IProtobufSchema.go +54 -54
- package/native/core/schemas/protobuf/index.go +1 -1
- package/native/core/schemas/protobuf/protobuf_marker_coverage_test.go +58 -58
- package/native/core/typings/Writable.go +5 -5
- package/native/core/utils/PatternUtil.go +57 -57
- package/native/core/utils/ProtobufNameEncoder.go +47 -47
- package/native/go.mod +31 -31
- package/native/go.sum +22 -22
- package/native/go.work +22 -22
- package/native/transform/CallExpressionTransformer.go +719 -719
- package/native/transform/FileTransformer.go +221 -221
- package/native/transform/ITransformProps.go +5 -5
- package/native/transform/ImportTransformer.go +285 -285
- package/native/transform/NodeTransformer.go +25 -25
- package/native/transform/TransformerError.go +11 -11
- package/native/transform/TypiaGenerator.go +171 -171
- package/native/transform/call_expression_transformer_registry_coverage_test.go +53 -53
- package/native/transform/call_expression_transformer_target_test.go +46 -46
- package/native/transform/features/AssertTransformer.go +39 -39
- package/native/transform/features/CreateAssertTransformer.go +39 -39
- package/native/transform/features/CreateIsTransformer.go +35 -35
- package/native/transform/features/CreateRandomTransformer.go +47 -47
- package/native/transform/features/CreateShallowTransformer.go +33 -33
- package/native/transform/features/CreateValidateTransformer.go +35 -35
- package/native/transform/features/IsTransformer.go +35 -35
- package/native/transform/features/RandomTransformer.go +54 -54
- package/native/transform/features/ShallowTransformer.go +65 -65
- package/native/transform/features/ValidateTransformer.go +35 -35
- package/native/transform/features/compare/CompareCoverTransformer.go +14 -14
- package/native/transform/features/compare/CompareCreateCoverTransformer.go +14 -14
- package/native/transform/features/compare/CompareCreateEqualTransformer.go +14 -14
- package/native/transform/features/compare/CompareCreateLessTransformer.go +14 -14
- package/native/transform/features/compare/CompareEqualTransformer.go +73 -73
- package/native/transform/features/compare/CompareLessTransformer.go +71 -71
- package/native/transform/features/feature_transformer_entry_coverage_test.go +59 -59
- package/native/transform/features/functional/FunctionalGenericTransformer.go +70 -70
- package/native/transform/features/http/CreateHttpAssertFormDataTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpAssertHeadersTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpAssertQueryTransformer.go +28 -28
- package/native/transform/features/http/CreateHttpFormDataTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpHeadersTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpIsFormDataTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpIsHeadersTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpIsQueryTransformer.go +28 -28
- package/native/transform/features/http/CreateHttpParameterTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpQueryTransformer.go +28 -28
- package/native/transform/features/http/CreateHttpValidateFormDataTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpValidateHeadersTransformer.go +22 -22
- package/native/transform/features/http/CreateHttpValidateQueryTransformer.go +28 -28
- package/native/transform/features/http/HttpAssertFormDataTransformer.go +22 -22
- package/native/transform/features/http/HttpAssertHeadersTransformer.go +22 -22
- package/native/transform/features/http/HttpAssertQueryTransformer.go +28 -28
- package/native/transform/features/http/HttpFormDataTransformer.go +22 -22
- package/native/transform/features/http/HttpHeadersTransformer.go +22 -22
- package/native/transform/features/http/HttpIsFormDataTransformer.go +22 -22
- package/native/transform/features/http/HttpIsHeadersTransformer.go +22 -22
- package/native/transform/features/http/HttpIsQueryTransformer.go +28 -28
- package/native/transform/features/http/HttpParameterTransformer.go +22 -22
- package/native/transform/features/http/HttpQueryTransformer.go +28 -28
- package/native/transform/features/http/HttpValidateFormDataTransformer.go +22 -22
- package/native/transform/features/http/HttpValidateHeadersTransformer.go +22 -22
- package/native/transform/features/http/HttpValidateQueryTransformer.go +28 -28
- package/native/transform/features/http/http_transformer_entry_coverage_test.go +65 -65
- package/native/transform/features/json/JsonApplicationTransformer.go +75 -75
- package/native/transform/features/json/JsonAssertParseTransformer.go +22 -22
- package/native/transform/features/json/JsonAssertStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateAssertParseTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateAssertStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateIsParseTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateIsStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateValidateParseTransformer.go +22 -22
- package/native/transform/features/json/JsonCreateValidateStringifyProgrammer.go +22 -22
- package/native/transform/features/json/JsonIsParseTransformer.go +22 -22
- package/native/transform/features/json/JsonIsStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonSchemaTransformer.go +175 -175
- package/native/transform/features/json/JsonSchemasTransformer.go +109 -109
- package/native/transform/features/json/JsonStringifyTransformer.go +22 -22
- package/native/transform/features/json/JsonValidateParseTransformer.go +22 -22
- package/native/transform/features/json/JsonValidateStringifyTransformer.go +22 -22
- package/native/transform/features/json/json_transformer_entry_coverage_test.go +56 -56
- package/native/transform/features/llm/LlmApplicationTransformer.go +54 -54
- package/native/transform/features/llm/LlmCoerceTransformer.go +63 -63
- package/native/transform/features/llm/LlmControllerTransformer.go +59 -59
- package/native/transform/features/llm/LlmCreateCoerceTransformer.go +54 -54
- package/native/transform/features/llm/LlmCreateParseTransformer.go +54 -54
- package/native/transform/features/llm/LlmParametersTransformer.go +49 -49
- package/native/transform/features/llm/LlmParseTransformer.go +63 -63
- package/native/transform/features/llm/LlmSchemaTransformer.go +167 -167
- package/native/transform/features/llm/LlmStructuredOutputTransformer.go +55 -55
- package/native/transform/features/llm/llm_transformer_entry_coverage_test.go +48 -48
- package/native/transform/features/notations/NotationAssertGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationCreateAssertGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationCreateGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationCreateIsGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationCreateValidateGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationGeneralTransformer.go +36 -36
- package/native/transform/features/notations/NotationIsGeneralTransformer.go +27 -27
- package/native/transform/features/notations/NotationValidateGeneralTransformer.go +27 -27
- package/native/transform/features/notations/notation_transformer_entry_coverage_test.go +58 -58
- package/native/transform/features/plain/PlainAssertClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainAssertCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainAssertPruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateAssertClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateAssertCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateAssertPruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateIsCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateIsPruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreatePruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateValidateClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateValidateCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainCreateValidatePruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainIsCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainIsPruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainPruneTransformer.go +22 -22
- package/native/transform/features/plain/PlainValidateClassifyTransformer.go +22 -22
- package/native/transform/features/plain/PlainValidateCloneTransformer.go +22 -22
- package/native/transform/features/plain/PlainValidatePruneTransformer.go +22 -22
- package/native/transform/features/plain/plain_transformer_entry_coverage_test.go +61 -61
- package/native/transform/features/protobuf/ProtobufAssertDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufAssertEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateAssertDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateAssertEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateIsDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateIsEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateValidateDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufCreateValidateEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufIsDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufIsEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufMessageTransformer.go +31 -31
- package/native/transform/features/protobuf/ProtobufValidateDecodeTransformer.go +22 -22
- package/native/transform/features/protobuf/ProtobufValidateEncodeTransformer.go +22 -22
- package/native/transform/features/protobuf/protobuf_transformer_entry_coverage_test.go +56 -56
- package/native/transform/features/reflect/ReflectLiteralsTransformer.go +32 -32
- package/native/transform/features/reflect/ReflectMetadataTransformer.go +73 -73
- package/native/transform/features/reflect/ReflectNameTransformer.go +100 -100
- package/native/transform/features/reflect/ReflectSchemaTransformer.go +153 -153
- package/native/transform/features/reflect/ReflectSchemasTransformer.go +68 -68
- package/native/transform/features/reflect/reflect_metadata_transformer_edge_branches_test.go +55 -55
- package/native/transform/features/reflect/reflect_transformer_entry_coverage_test.go +47 -47
- package/native/transform/file_transformer_coverage_test.go +94 -94
- package/native/transform/import_transformer_coverage_test.go +153 -153
- package/native/transform/index.go +1 -1
- package/native/transform/internal/GenericTransformer.go +236 -236
- package/native/transform/transform.go +57 -57
- package/native/transform/typia_generator_helpers_coverage_test.go +166 -166
- package/package.json +8 -15
- package/src/executable/TypiaGenerateWizard.ts +5 -1
- package/src/executable/generate/ttsc.ts +3 -4
- package/src/executable/typia.ts +8 -4
- package/src/internal/_ProtobufReader.ts +187 -187
- package/src/internal/_randomArray.ts +34 -34
- package/src/internal/_randomString.ts +30 -30
- package/src/re-exports.ts +8 -3
- package/src/transform.ts +21 -21
- package/lib/TypeGuardError2.mjs +0 -55
- package/lib/TypeGuardError2.mjs.map +0 -1
- package/lib/_virtual/NoTransformConfigurationError.mjs +0 -4
- package/lib/_virtual/NoTransformConfigurationError.mjs.map +0 -1
- package/lib/_virtual/TypeGuardError.mjs +0 -4
- package/lib/_virtual/TypeGuardError.mjs.map +0 -1
- package/lib/_virtual/TypiaGenerateWizard.mjs +0 -4
- package/lib/_virtual/TypiaGenerateWizard.mjs.map +0 -1
- package/lib/_virtual/_IProtobufWriter.mjs +0 -4
- package/lib/_virtual/_IProtobufWriter.mjs.map +0 -1
- package/lib/_virtual/_ProtobufReader.mjs +0 -4
- package/lib/_virtual/_ProtobufReader.mjs.map +0 -1
- package/lib/_virtual/_ProtobufSizer.mjs +0 -4
- package/lib/_virtual/_ProtobufSizer.mjs.map +0 -1
- package/lib/_virtual/_ProtobufWriter.mjs +0 -4
- package/lib/_virtual/_ProtobufWriter.mjs.map +0 -1
- package/lib/_virtual/__notationCapitalize.mjs +0 -4
- package/lib/_virtual/__notationCapitalize.mjs.map +0 -1
- package/lib/_virtual/__notationUnsnake.mjs +0 -4
- package/lib/_virtual/__notationUnsnake.mjs.map +0 -1
- package/lib/_virtual/_accessExpressionAsString.mjs +0 -4
- package/lib/_virtual/_accessExpressionAsString.mjs.map +0 -1
- package/lib/_virtual/_assertGuard.mjs +0 -4
- package/lib/_virtual/_assertGuard.mjs.map +0 -1
- package/lib/_virtual/_coerceLlmArguments.mjs +0 -4
- package/lib/_virtual/_coerceLlmArguments.mjs.map +0 -1
- package/lib/_virtual/_commander.mjs +0 -7
- package/lib/_virtual/_commander.mjs.map +0 -1
- package/lib/_virtual/_commonjsHelpers.mjs +0 -35
- package/lib/_virtual/_commonjsHelpers.mjs.map +0 -1
- package/lib/_virtual/_createStandardSchema.mjs +0 -4
- package/lib/_virtual/_createStandardSchema.mjs.map +0 -1
- package/lib/_virtual/_functionalTypeGuardErrorFactory.mjs +0 -4
- package/lib/_virtual/_functionalTypeGuardErrorFactory.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadArray.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadArray.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadBigint.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadBigint.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadBlob.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadBlob.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadBoolean.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadBoolean.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadFile.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadFile.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadNumber.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadNumber.mjs.map +0 -1
- package/lib/_virtual/_httpFormDataReadString.mjs +0 -4
- package/lib/_virtual/_httpFormDataReadString.mjs.map +0 -1
- package/lib/_virtual/_httpHeaderReadBigint.mjs +0 -4
- package/lib/_virtual/_httpHeaderReadBigint.mjs.map +0 -1
- package/lib/_virtual/_httpHeaderReadBoolean.mjs +0 -4
- package/lib/_virtual/_httpHeaderReadBoolean.mjs.map +0 -1
- package/lib/_virtual/_httpHeaderReadNumber.mjs +0 -4
- package/lib/_virtual/_httpHeaderReadNumber.mjs.map +0 -1
- package/lib/_virtual/_httpParameterReadBigint.mjs +0 -4
- package/lib/_virtual/_httpParameterReadBigint.mjs.map +0 -1
- package/lib/_virtual/_httpParameterReadBoolean.mjs +0 -4
- package/lib/_virtual/_httpParameterReadBoolean.mjs.map +0 -1
- package/lib/_virtual/_httpParameterReadNumber.mjs +0 -4
- package/lib/_virtual/_httpParameterReadNumber.mjs.map +0 -1
- package/lib/_virtual/_httpParameterReadString.mjs +0 -4
- package/lib/_virtual/_httpParameterReadString.mjs.map +0 -1
- package/lib/_virtual/_httpQueryParseURLSearchParams.mjs +0 -4
- package/lib/_virtual/_httpQueryParseURLSearchParams.mjs.map +0 -1
- package/lib/_virtual/_httpQueryReadArray.mjs +0 -4
- package/lib/_virtual/_httpQueryReadArray.mjs.map +0 -1
- package/lib/_virtual/_httpQueryReadBigint.mjs +0 -4
- package/lib/_virtual/_httpQueryReadBigint.mjs.map +0 -1
- package/lib/_virtual/_httpQueryReadBoolean.mjs +0 -4
- package/lib/_virtual/_httpQueryReadBoolean.mjs.map +0 -1
- package/lib/_virtual/_httpQueryReadNumber.mjs +0 -4
- package/lib/_virtual/_httpQueryReadNumber.mjs.map +0 -1
- package/lib/_virtual/_httpQueryReadString.mjs +0 -4
- package/lib/_virtual/_httpQueryReadString.mjs.map +0 -1
- package/lib/_virtual/_inquirer.mjs +0 -7
- package/lib/_virtual/_inquirer.mjs.map +0 -1
- package/lib/_virtual/_isBetween.mjs +0 -4
- package/lib/_virtual/_isBetween.mjs.map +0 -1
- package/lib/_virtual/_isBigintString.mjs +0 -4
- package/lib/_virtual/_isBigintString.mjs.map +0 -1
- package/lib/_virtual/_isFormatByte.mjs +0 -4
- package/lib/_virtual/_isFormatByte.mjs.map +0 -1
- package/lib/_virtual/_isFormatDate.mjs +0 -4
- package/lib/_virtual/_isFormatDate.mjs.map +0 -1
- package/lib/_virtual/_isFormatDateTime.mjs +0 -4
- package/lib/_virtual/_isFormatDateTime.mjs.map +0 -1
- package/lib/_virtual/_isFormatDuration.mjs +0 -4
- package/lib/_virtual/_isFormatDuration.mjs.map +0 -1
- package/lib/_virtual/_isFormatEmail.mjs +0 -4
- package/lib/_virtual/_isFormatEmail.mjs.map +0 -1
- package/lib/_virtual/_isFormatHostname.mjs +0 -4
- package/lib/_virtual/_isFormatHostname.mjs.map +0 -1
- package/lib/_virtual/_isFormatIdnEmail.mjs +0 -4
- package/lib/_virtual/_isFormatIdnEmail.mjs.map +0 -1
- package/lib/_virtual/_isFormatIdnHostname.mjs +0 -4
- package/lib/_virtual/_isFormatIdnHostname.mjs.map +0 -1
- package/lib/_virtual/_isFormatIpv4.mjs +0 -4
- package/lib/_virtual/_isFormatIpv4.mjs.map +0 -1
- package/lib/_virtual/_isFormatIpv6.mjs +0 -4
- package/lib/_virtual/_isFormatIpv6.mjs.map +0 -1
- package/lib/_virtual/_isFormatIri.mjs +0 -4
- package/lib/_virtual/_isFormatIri.mjs.map +0 -1
- package/lib/_virtual/_isFormatIriReference.mjs +0 -4
- package/lib/_virtual/_isFormatIriReference.mjs.map +0 -1
- package/lib/_virtual/_isFormatJsonPointer.mjs +0 -4
- package/lib/_virtual/_isFormatJsonPointer.mjs.map +0 -1
- package/lib/_virtual/_isFormatPassword.mjs +0 -4
- package/lib/_virtual/_isFormatPassword.mjs.map +0 -1
- package/lib/_virtual/_isFormatRegex.mjs +0 -4
- package/lib/_virtual/_isFormatRegex.mjs.map +0 -1
- package/lib/_virtual/_isFormatRelativeJsonPointer.mjs +0 -4
- package/lib/_virtual/_isFormatRelativeJsonPointer.mjs.map +0 -1
- package/lib/_virtual/_isFormatTime.mjs +0 -4
- package/lib/_virtual/_isFormatTime.mjs.map +0 -1
- package/lib/_virtual/_isFormatUri.mjs +0 -4
- package/lib/_virtual/_isFormatUri.mjs.map +0 -1
- package/lib/_virtual/_isFormatUriReference.mjs +0 -4
- package/lib/_virtual/_isFormatUriReference.mjs.map +0 -1
- package/lib/_virtual/_isFormatUriTemplate.mjs +0 -4
- package/lib/_virtual/_isFormatUriTemplate.mjs.map +0 -1
- package/lib/_virtual/_isFormatUrl.mjs +0 -4
- package/lib/_virtual/_isFormatUrl.mjs.map +0 -1
- package/lib/_virtual/_isFormatUuid.mjs +0 -4
- package/lib/_virtual/_isFormatUuid.mjs.map +0 -1
- package/lib/_virtual/_isTypeFloat.mjs +0 -4
- package/lib/_virtual/_isTypeFloat.mjs.map +0 -1
- package/lib/_virtual/_isTypeInt16.mjs +0 -4
- package/lib/_virtual/_isTypeInt16.mjs.map +0 -1
- package/lib/_virtual/_isTypeInt32.mjs +0 -4
- package/lib/_virtual/_isTypeInt32.mjs.map +0 -1
- package/lib/_virtual/_isTypeInt64.mjs +0 -4
- package/lib/_virtual/_isTypeInt64.mjs.map +0 -1
- package/lib/_virtual/_isTypeInt8.mjs +0 -4
- package/lib/_virtual/_isTypeInt8.mjs.map +0 -1
- package/lib/_virtual/_isTypeUint16.mjs +0 -4
- package/lib/_virtual/_isTypeUint16.mjs.map +0 -1
- package/lib/_virtual/_isTypeUint32.mjs +0 -4
- package/lib/_virtual/_isTypeUint32.mjs.map +0 -1
- package/lib/_virtual/_isTypeUint64.mjs +0 -4
- package/lib/_virtual/_isTypeUint64.mjs.map +0 -1
- package/lib/_virtual/_isTypeUint8.mjs +0 -4
- package/lib/_virtual/_isTypeUint8.mjs.map +0 -1
- package/lib/_virtual/_isUniqueItems.mjs +0 -4
- package/lib/_virtual/_isUniqueItems.mjs.map +0 -1
- package/lib/_virtual/_jsonStringifyNumber.mjs +0 -4
- package/lib/_virtual/_jsonStringifyNumber.mjs.map +0 -1
- package/lib/_virtual/_jsonStringifyRest.mjs +0 -4
- package/lib/_virtual/_jsonStringifyRest.mjs.map +0 -1
- package/lib/_virtual/_jsonStringifyString.mjs +0 -4
- package/lib/_virtual/_jsonStringifyString.mjs.map +0 -1
- package/lib/_virtual/_jsonStringifyTail.mjs +0 -4
- package/lib/_virtual/_jsonStringifyTail.mjs.map +0 -1
- package/lib/_virtual/_llmApplicationFinalize.mjs +0 -4
- package/lib/_virtual/_llmApplicationFinalize.mjs.map +0 -1
- package/lib/_virtual/_node_child_process.mjs +0 -7
- package/lib/_virtual/_node_child_process.mjs.map +0 -1
- package/lib/_virtual/_node_fs.mjs +0 -7
- package/lib/_virtual/_node_fs.mjs.map +0 -1
- package/lib/_virtual/_node_module.mjs +0 -7
- package/lib/_virtual/_node_module.mjs.map +0 -1
- package/lib/_virtual/_node_path.mjs +0 -7
- package/lib/_virtual/_node_path.mjs.map +0 -1
- package/lib/_virtual/_notationAny.mjs +0 -4
- package/lib/_virtual/_notationAny.mjs.map +0 -1
- package/lib/_virtual/_notationCamel.mjs +0 -4
- package/lib/_virtual/_notationCamel.mjs.map +0 -1
- package/lib/_virtual/_notationPascal.mjs +0 -4
- package/lib/_virtual/_notationPascal.mjs.map +0 -1
- package/lib/_virtual/_notationSnake.mjs +0 -4
- package/lib/_virtual/_notationSnake.mjs.map +0 -1
- package/lib/_virtual/_parseLlmArguments.mjs +0 -4
- package/lib/_virtual/_parseLlmArguments.mjs.map +0 -1
- package/lib/_virtual/_plainCloneAny.mjs +0 -4
- package/lib/_virtual/_plainCloneAny.mjs.map +0 -1
- package/lib/_virtual/_randexp.mjs +0 -7
- package/lib/_virtual/_randexp.mjs.map +0 -1
- package/lib/_virtual/_randomArray.mjs +0 -4
- package/lib/_virtual/_randomArray.mjs.map +0 -1
- package/lib/_virtual/_randomBigint.mjs +0 -4
- package/lib/_virtual/_randomBigint.mjs.map +0 -1
- package/lib/_virtual/_randomBoolean.mjs +0 -4
- package/lib/_virtual/_randomBoolean.mjs.map +0 -1
- package/lib/_virtual/_randomFormatByte.mjs +0 -4
- package/lib/_virtual/_randomFormatByte.mjs.map +0 -1
- package/lib/_virtual/_randomFormatDate.mjs +0 -4
- package/lib/_virtual/_randomFormatDate.mjs.map +0 -1
- package/lib/_virtual/_randomFormatDatetime.mjs +0 -4
- package/lib/_virtual/_randomFormatDatetime.mjs.map +0 -1
- package/lib/_virtual/_randomFormatDuration.mjs +0 -4
- package/lib/_virtual/_randomFormatDuration.mjs.map +0 -1
- package/lib/_virtual/_randomFormatEmail.mjs +0 -4
- package/lib/_virtual/_randomFormatEmail.mjs.map +0 -1
- package/lib/_virtual/_randomFormatHostname.mjs +0 -4
- package/lib/_virtual/_randomFormatHostname.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIdnEmail.mjs +0 -4
- package/lib/_virtual/_randomFormatIdnEmail.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIdnHostname.mjs +0 -4
- package/lib/_virtual/_randomFormatIdnHostname.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIpv4.mjs +0 -4
- package/lib/_virtual/_randomFormatIpv4.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIpv6.mjs +0 -4
- package/lib/_virtual/_randomFormatIpv6.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIri.mjs +0 -4
- package/lib/_virtual/_randomFormatIri.mjs.map +0 -1
- package/lib/_virtual/_randomFormatIriReference.mjs +0 -4
- package/lib/_virtual/_randomFormatIriReference.mjs.map +0 -1
- package/lib/_virtual/_randomFormatJsonPointer.mjs +0 -4
- package/lib/_virtual/_randomFormatJsonPointer.mjs.map +0 -1
- package/lib/_virtual/_randomFormatPassword.mjs +0 -4
- package/lib/_virtual/_randomFormatPassword.mjs.map +0 -1
- package/lib/_virtual/_randomFormatRegex.mjs +0 -4
- package/lib/_virtual/_randomFormatRegex.mjs.map +0 -1
- package/lib/_virtual/_randomFormatRelativeJsonPointer.mjs +0 -4
- package/lib/_virtual/_randomFormatRelativeJsonPointer.mjs.map +0 -1
- package/lib/_virtual/_randomFormatTime.mjs +0 -4
- package/lib/_virtual/_randomFormatTime.mjs.map +0 -1
- package/lib/_virtual/_randomFormatUri.mjs +0 -4
- package/lib/_virtual/_randomFormatUri.mjs.map +0 -1
- package/lib/_virtual/_randomFormatUriReference.mjs +0 -4
- package/lib/_virtual/_randomFormatUriReference.mjs.map +0 -1
- package/lib/_virtual/_randomFormatUriTemplate.mjs +0 -4
- package/lib/_virtual/_randomFormatUriTemplate.mjs.map +0 -1
- package/lib/_virtual/_randomFormatUrl.mjs +0 -4
- package/lib/_virtual/_randomFormatUrl.mjs.map +0 -1
- package/lib/_virtual/_randomFormatUuid.mjs +0 -4
- package/lib/_virtual/_randomFormatUuid.mjs.map +0 -1
- package/lib/_virtual/_randomInteger.mjs +0 -4
- package/lib/_virtual/_randomInteger.mjs.map +0 -1
- package/lib/_virtual/_randomNumber.mjs +0 -4
- package/lib/_virtual/_randomNumber.mjs.map +0 -1
- package/lib/_virtual/_randomPattern.mjs +0 -4
- package/lib/_virtual/_randomPattern.mjs.map +0 -1
- package/lib/_virtual/_randomPick.mjs +0 -4
- package/lib/_virtual/_randomPick.mjs.map +0 -1
- package/lib/_virtual/_randomString.mjs +0 -4
- package/lib/_virtual/_randomString.mjs.map +0 -1
- package/lib/_virtual/_throwTypeGuardError.mjs +0 -4
- package/lib/_virtual/_throwTypeGuardError.mjs.map +0 -1
- package/lib/_virtual/_tinyglobby.mjs +0 -7
- package/lib/_virtual/_tinyglobby.mjs.map +0 -1
- package/lib/_virtual/_validateReport.mjs +0 -4
- package/lib/_virtual/_validateReport.mjs.map +0 -1
- package/lib/_virtual/compare.mjs +0 -4
- package/lib/_virtual/compare.mjs.map +0 -1
- package/lib/_virtual/functional.mjs +0 -4
- package/lib/_virtual/functional.mjs.map +0 -1
- package/lib/_virtual/http.mjs +0 -4
- package/lib/_virtual/http.mjs.map +0 -1
- package/lib/_virtual/index.mjs +0 -4
- package/lib/_virtual/index.mjs.map +0 -1
- package/lib/_virtual/json.mjs +0 -4
- package/lib/_virtual/json.mjs.map +0 -1
- package/lib/_virtual/llm.mjs +0 -4
- package/lib/_virtual/llm.mjs.map +0 -1
- package/lib/_virtual/module.mjs +0 -4
- package/lib/_virtual/module.mjs.map +0 -1
- package/lib/_virtual/notations.mjs +0 -4
- package/lib/_virtual/notations.mjs.map +0 -1
- package/lib/_virtual/plain.mjs +0 -4
- package/lib/_virtual/plain.mjs.map +0 -1
- package/lib/_virtual/protobuf.mjs +0 -4
- package/lib/_virtual/protobuf.mjs.map +0 -1
- package/lib/_virtual/re-exports.mjs +0 -4
- package/lib/_virtual/re-exports.mjs.map +0 -1
- package/lib/_virtual/reflect.mjs +0 -4
- package/lib/_virtual/reflect.mjs.map +0 -1
- package/lib/_virtual/transform.mjs +0 -4
- package/lib/_virtual/transform.mjs.map +0 -1
- package/lib/_virtual/ttsc.mjs +0 -4
- package/lib/_virtual/ttsc.mjs.map +0 -1
- package/lib/_virtual/typia.mjs +0 -4
- package/lib/_virtual/typia.mjs.map +0 -1
- package/lib/compare2.mjs +0 -39
- package/lib/compare2.mjs.map +0 -1
- package/lib/executable/TypiaGenerateWizard2.mjs +0 -719
- package/lib/executable/TypiaGenerateWizard2.mjs.map +0 -1
- package/lib/executable/generate/ttsc2.mjs +0 -56
- package/lib/executable/generate/ttsc2.mjs.map +0 -1
- package/lib/executable/typia2.mjs +0 -88
- package/lib/executable/typia2.mjs.map +0 -1
- package/lib/functional2.mjs +0 -99
- package/lib/functional2.mjs.map +0 -1
- package/lib/http2.mjs +0 -139
- package/lib/http2.mjs.map +0 -1
- package/lib/index2.mjs +0 -53
- package/lib/index2.mjs.map +0 -1
- package/lib/internal/_IProtobufWriter.mjs.map +0 -1
- package/lib/internal/_IProtobufWriter2.mjs +0 -6
- package/lib/internal/_IProtobufWriter2.mjs.map +0 -1
- package/lib/internal/_ProtobufReader2.mjs +0 -169
- package/lib/internal/_ProtobufReader2.mjs.map +0 -1
- package/lib/internal/_ProtobufSizer2.mjs +0 -119
- package/lib/internal/_ProtobufSizer2.mjs.map +0 -1
- package/lib/internal/_ProtobufWriter2.mjs +0 -107
- package/lib/internal/_ProtobufWriter2.mjs.map +0 -1
- package/lib/internal/_accessExpressionAsString2.mjs +0 -49
- package/lib/internal/_accessExpressionAsString2.mjs.map +0 -1
- package/lib/internal/_assertGuard2.mjs +0 -20
- package/lib/internal/_assertGuard2.mjs.map +0 -1
- package/lib/internal/_coerceLlmArguments2.mjs +0 -11
- package/lib/internal/_coerceLlmArguments2.mjs.map +0 -1
- package/lib/internal/_createStandardSchema2.mjs +0 -138
- package/lib/internal/_createStandardSchema2.mjs.map +0 -1
- package/lib/internal/_functionalTypeGuardErrorFactory2.mjs +0 -12
- package/lib/internal/_functionalTypeGuardErrorFactory2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadArray2.mjs +0 -9
- package/lib/internal/_httpFormDataReadArray2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadBigint2.mjs +0 -23
- package/lib/internal/_httpFormDataReadBigint2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadBlob2.mjs +0 -15
- package/lib/internal/_httpFormDataReadBlob2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadBoolean2.mjs +0 -21
- package/lib/internal/_httpFormDataReadBoolean2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadFile2.mjs +0 -15
- package/lib/internal/_httpFormDataReadFile2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadNumber2.mjs +0 -19
- package/lib/internal/_httpFormDataReadNumber2.mjs.map +0 -1
- package/lib/internal/_httpFormDataReadString2.mjs +0 -15
- package/lib/internal/_httpFormDataReadString2.mjs.map +0 -1
- package/lib/internal/_httpHeaderReadBigint2.mjs +0 -17
- package/lib/internal/_httpHeaderReadBigint2.mjs.map +0 -1
- package/lib/internal/_httpHeaderReadBoolean2.mjs +0 -15
- package/lib/internal/_httpHeaderReadBoolean2.mjs.map +0 -1
- package/lib/internal/_httpHeaderReadNumber2.mjs +0 -13
- package/lib/internal/_httpHeaderReadNumber2.mjs.map +0 -1
- package/lib/internal/_httpParameterReadBigint2.mjs +0 -17
- package/lib/internal/_httpParameterReadBigint2.mjs.map +0 -1
- package/lib/internal/_httpParameterReadBoolean2.mjs +0 -15
- package/lib/internal/_httpParameterReadBoolean2.mjs.map +0 -1
- package/lib/internal/_httpParameterReadNumber2.mjs +0 -13
- package/lib/internal/_httpParameterReadNumber2.mjs.map +0 -1
- package/lib/internal/_httpParameterReadString2.mjs +0 -9
- package/lib/internal/_httpParameterReadString2.mjs.map +0 -1
- package/lib/internal/_httpQueryParseURLSearchParams2.mjs +0 -16
- package/lib/internal/_httpQueryParseURLSearchParams2.mjs.map +0 -1
- package/lib/internal/_httpQueryReadArray2.mjs +0 -9
- package/lib/internal/_httpQueryReadArray2.mjs.map +0 -1
- package/lib/internal/_httpQueryReadBigint2.mjs +0 -17
- package/lib/internal/_httpQueryReadBigint2.mjs.map +0 -1
- package/lib/internal/_httpQueryReadBoolean2.mjs +0 -19
- package/lib/internal/_httpQueryReadBoolean2.mjs.map +0 -1
- package/lib/internal/_httpQueryReadNumber2.mjs +0 -13
- package/lib/internal/_httpQueryReadNumber2.mjs.map +0 -1
- package/lib/internal/_httpQueryReadString2.mjs +0 -9
- package/lib/internal/_httpQueryReadString2.mjs.map +0 -1
- package/lib/internal/_isBetween2.mjs +0 -9
- package/lib/internal/_isBetween2.mjs.map +0 -1
- package/lib/internal/_isBigintString2.mjs +0 -17
- package/lib/internal/_isBigintString2.mjs.map +0 -1
- package/lib/internal/_isFormatByte2.mjs +0 -13
- package/lib/internal/_isFormatByte2.mjs.map +0 -1
- package/lib/internal/_isFormatDate2.mjs +0 -10
- package/lib/internal/_isFormatDate2.mjs.map +0 -1
- package/lib/internal/_isFormatDateTime2.mjs +0 -10
- package/lib/internal/_isFormatDateTime2.mjs.map +0 -1
- package/lib/internal/_isFormatDuration2.mjs +0 -10
- package/lib/internal/_isFormatDuration2.mjs.map +0 -1
- package/lib/internal/_isFormatEmail2.mjs +0 -10
- package/lib/internal/_isFormatEmail2.mjs.map +0 -1
- package/lib/internal/_isFormatHostname2.mjs +0 -10
- package/lib/internal/_isFormatHostname2.mjs.map +0 -1
- package/lib/internal/_isFormatIdnEmail2.mjs +0 -10
- package/lib/internal/_isFormatIdnEmail2.mjs.map +0 -1
- package/lib/internal/_isFormatIdnHostname2.mjs +0 -10
- package/lib/internal/_isFormatIdnHostname2.mjs.map +0 -1
- package/lib/internal/_isFormatIpv42.mjs +0 -10
- package/lib/internal/_isFormatIpv42.mjs.map +0 -1
- package/lib/internal/_isFormatIpv62.mjs +0 -10
- package/lib/internal/_isFormatIpv62.mjs.map +0 -1
- package/lib/internal/_isFormatIri2.mjs +0 -10
- package/lib/internal/_isFormatIri2.mjs.map +0 -1
- package/lib/internal/_isFormatIriReference2.mjs +0 -10
- package/lib/internal/_isFormatIriReference2.mjs.map +0 -1
- package/lib/internal/_isFormatJsonPointer2.mjs +0 -10
- package/lib/internal/_isFormatJsonPointer2.mjs.map +0 -1
- package/lib/internal/_isFormatPassword2.mjs +0 -9
- package/lib/internal/_isFormatPassword2.mjs.map +0 -1
- package/lib/internal/_isFormatRegex2.mjs +0 -17
- package/lib/internal/_isFormatRegex2.mjs.map +0 -1
- package/lib/internal/_isFormatRelativeJsonPointer2.mjs +0 -10
- package/lib/internal/_isFormatRelativeJsonPointer2.mjs.map +0 -1
- package/lib/internal/_isFormatTime2.mjs +0 -10
- package/lib/internal/_isFormatTime2.mjs.map +0 -1
- package/lib/internal/_isFormatUri2.mjs +0 -11
- package/lib/internal/_isFormatUri2.mjs.map +0 -1
- package/lib/internal/_isFormatUriReference2.mjs +0 -10
- package/lib/internal/_isFormatUriReference2.mjs.map +0 -1
- package/lib/internal/_isFormatUriTemplate2.mjs +0 -10
- package/lib/internal/_isFormatUriTemplate2.mjs.map +0 -1
- package/lib/internal/_isFormatUrl2.mjs +0 -10
- package/lib/internal/_isFormatUrl2.mjs.map +0 -1
- package/lib/internal/_isFormatUuid2.mjs +0 -10
- package/lib/internal/_isFormatUuid2.mjs.map +0 -1
- package/lib/internal/_isTypeFloat2.mjs +0 -11
- package/lib/internal/_isTypeFloat2.mjs.map +0 -1
- package/lib/internal/_isTypeInt162.mjs +0 -11
- package/lib/internal/_isTypeInt162.mjs.map +0 -1
- package/lib/internal/_isTypeInt322.mjs +0 -11
- package/lib/internal/_isTypeInt322.mjs.map +0 -1
- package/lib/internal/_isTypeInt642.mjs +0 -11
- package/lib/internal/_isTypeInt642.mjs.map +0 -1
- package/lib/internal/_isTypeInt82.mjs +0 -11
- package/lib/internal/_isTypeInt82.mjs.map +0 -1
- package/lib/internal/_isTypeUint162.mjs +0 -11
- package/lib/internal/_isTypeUint162.mjs.map +0 -1
- package/lib/internal/_isTypeUint322.mjs +0 -11
- package/lib/internal/_isTypeUint322.mjs.map +0 -1
- package/lib/internal/_isTypeUint642.mjs +0 -11
- package/lib/internal/_isTypeUint642.mjs.map +0 -1
- package/lib/internal/_isTypeUint82.mjs +0 -11
- package/lib/internal/_isTypeUint82.mjs.map +0 -1
- package/lib/internal/_isUniqueItems2.mjs +0 -143
- package/lib/internal/_isUniqueItems2.mjs.map +0 -1
- package/lib/internal/_jsonStringifyNumber2.mjs +0 -9
- package/lib/internal/_jsonStringifyNumber2.mjs.map +0 -1
- package/lib/internal/_jsonStringifyRest2.mjs +0 -11
- package/lib/internal/_jsonStringifyRest2.mjs.map +0 -1
- package/lib/internal/_jsonStringifyString2.mjs +0 -45
- package/lib/internal/_jsonStringifyString2.mjs.map +0 -1
- package/lib/internal/_jsonStringifyTail2.mjs +0 -9
- package/lib/internal/_jsonStringifyTail2.mjs.map +0 -1
- package/lib/internal/_llmApplicationFinalize2.mjs +0 -11
- package/lib/internal/_llmApplicationFinalize2.mjs.map +0 -1
- package/lib/internal/_notationAny2.mjs +0 -42
- package/lib/internal/_notationAny2.mjs.map +0 -1
- package/lib/internal/_notationCamel2.mjs +0 -21
- package/lib/internal/_notationCamel2.mjs.map +0 -1
- package/lib/internal/_notationPascal2.mjs +0 -17
- package/lib/internal/_notationPascal2.mjs.map +0 -1
- package/lib/internal/_notationSnake2.mjs +0 -54
- package/lib/internal/_notationSnake2.mjs.map +0 -1
- package/lib/internal/_parseLlmArguments2.mjs +0 -11
- package/lib/internal/_parseLlmArguments2.mjs.map +0 -1
- package/lib/internal/_plainCloneAny2.mjs +0 -67
- package/lib/internal/_plainCloneAny2.mjs.map +0 -1
- package/lib/internal/_randomArray2.mjs +0 -31
- package/lib/internal/_randomArray2.mjs.map +0 -1
- package/lib/internal/_randomBigint2.mjs +0 -12
- package/lib/internal/_randomBigint2.mjs.map +0 -1
- package/lib/internal/_randomBoolean2.mjs +0 -9
- package/lib/internal/_randomBoolean2.mjs.map +0 -1
- package/lib/internal/_randomFormatByte2.mjs +0 -10
- package/lib/internal/_randomFormatByte2.mjs.map +0 -1
- package/lib/internal/_randomFormatDate2.mjs +0 -20
- package/lib/internal/_randomFormatDate2.mjs.map +0 -1
- package/lib/internal/_randomFormatDatetime2.mjs +0 -18
- package/lib/internal/_randomFormatDatetime2.mjs.map +0 -1
- package/lib/internal/_randomFormatDuration2.mjs +0 -35
- package/lib/internal/_randomFormatDuration2.mjs.map +0 -1
- package/lib/internal/_randomFormatEmail2.mjs +0 -17
- package/lib/internal/_randomFormatEmail2.mjs.map +0 -1
- package/lib/internal/_randomFormatHostname2.mjs +0 -13
- package/lib/internal/_randomFormatHostname2.mjs.map +0 -1
- package/lib/internal/_randomFormatIdnEmail2.mjs +0 -12
- package/lib/internal/_randomFormatIdnEmail2.mjs.map +0 -1
- package/lib/internal/_randomFormatIdnHostname2.mjs +0 -12
- package/lib/internal/_randomFormatIdnHostname2.mjs.map +0 -1
- package/lib/internal/_randomFormatIpv42.mjs +0 -17
- package/lib/internal/_randomFormatIpv42.mjs.map +0 -1
- package/lib/internal/_randomFormatIpv62.mjs +0 -17
- package/lib/internal/_randomFormatIpv62.mjs.map +0 -1
- package/lib/internal/_randomFormatIri2.mjs +0 -12
- package/lib/internal/_randomFormatIri2.mjs.map +0 -1
- package/lib/internal/_randomFormatIriReference2.mjs +0 -12
- package/lib/internal/_randomFormatIriReference2.mjs.map +0 -1
- package/lib/internal/_randomFormatJsonPointer2.mjs +0 -13
- package/lib/internal/_randomFormatJsonPointer2.mjs.map +0 -1
- package/lib/internal/_randomFormatPassword2.mjs +0 -16
- package/lib/internal/_randomFormatPassword2.mjs.map +0 -1
- package/lib/internal/_randomFormatRegex2.mjs +0 -10
- package/lib/internal/_randomFormatRegex2.mjs.map +0 -1
- package/lib/internal/_randomFormatRelativeJsonPointer2.mjs +0 -16
- package/lib/internal/_randomFormatRelativeJsonPointer2.mjs.map +0 -1
- package/lib/internal/_randomFormatTime2.mjs +0 -19
- package/lib/internal/_randomFormatTime2.mjs.map +0 -1
- package/lib/internal/_randomFormatUri2.mjs +0 -12
- package/lib/internal/_randomFormatUri2.mjs.map +0 -1
- package/lib/internal/_randomFormatUriReference2.mjs +0 -12
- package/lib/internal/_randomFormatUriReference2.mjs.map +0 -1
- package/lib/internal/_randomFormatUriTemplate2.mjs +0 -12
- package/lib/internal/_randomFormatUriTemplate2.mjs.map +0 -1
- package/lib/internal/_randomFormatUrl2.mjs +0 -17
- package/lib/internal/_randomFormatUrl2.mjs.map +0 -1
- package/lib/internal/_randomFormatUuid2.mjs +0 -13
- package/lib/internal/_randomFormatUuid2.mjs.map +0 -1
- package/lib/internal/_randomInteger2.mjs +0 -47
- package/lib/internal/_randomInteger2.mjs.map +0 -1
- package/lib/internal/_randomNumber2.mjs +0 -66
- package/lib/internal/_randomNumber2.mjs.map +0 -1
- package/lib/internal/_randomPattern2.mjs +0 -22
- package/lib/internal/_randomPattern2.mjs.map +0 -1
- package/lib/internal/_randomPick2.mjs +0 -17
- package/lib/internal/_randomPick2.mjs.map +0 -1
- package/lib/internal/_randomString2.mjs +0 -32
- package/lib/internal/_randomString2.mjs.map +0 -1
- package/lib/internal/_throwTypeGuardError2.mjs +0 -14
- package/lib/internal/_throwTypeGuardError2.mjs.map +0 -1
- package/lib/internal/_validateReport2.mjs +0 -29
- package/lib/internal/_validateReport2.mjs.map +0 -1
- package/lib/internal/private/__notationCapitalize2.mjs +0 -9
- package/lib/internal/private/__notationCapitalize2.mjs.map +0 -1
- package/lib/internal/private/__notationUnsnake2.mjs +0 -29
- package/lib/internal/private/__notationUnsnake2.mjs.map +0 -1
- package/lib/json2.mjs +0 -94
- package/lib/json2.mjs.map +0 -1
- package/lib/llm2.mjs +0 -54
- package/lib/llm2.mjs.map +0 -1
- package/lib/module2.mjs +0 -185
- package/lib/module2.mjs.map +0 -1
- package/lib/notations2.mjs +0 -169
- package/lib/notations2.mjs.map +0 -1
- package/lib/plain2.mjs +0 -119
- package/lib/plain2.mjs.map +0 -1
- package/lib/protobuf2.mjs +0 -94
- package/lib/protobuf2.mjs.map +0 -1
- package/lib/re-exports.mjs.map +0 -1
- package/lib/re-exports2.mjs +0 -17
- package/lib/re-exports2.mjs.map +0 -1
- package/lib/reflect2.mjs +0 -29
- package/lib/reflect2.mjs.map +0 -1
- package/lib/transform2.mjs +0 -26
- package/lib/transform2.mjs.map +0 -1
- package/lib/transformers/NoTransformConfigurationError2.mjs +0 -21
- package/lib/transformers/NoTransformConfigurationError2.mjs.map +0 -1
|
@@ -1,519 +1,519 @@
|
|
|
1
|
-
package main
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"os"
|
|
5
|
-
"os/exec"
|
|
6
|
-
"path/filepath"
|
|
7
|
-
"strings"
|
|
8
|
-
"testing"
|
|
9
|
-
)
|
|
10
|
-
|
|
11
|
-
// TestPlainClassifyStrategyEdgesTransform covers two construction-strategy edges:
|
|
12
|
-
// - an ABSTRACT class must FIELD-COPY (a runtime `new AbstractClass(seed)` throws
|
|
13
|
-
// "Cannot create an instance of an abstract class"), and
|
|
14
|
-
// - a TUPLE-typed rest parameter `constructor(...args: [Seed, number?])` must
|
|
15
|
-
// build via `new` with the first tuple element as the seed (matching
|
|
16
|
-
// Classifiable's `[infer P, ...Rest]` rule).
|
|
17
|
-
func TestPlainClassifyStrategyEdgesTransform(t *testing.T) {
|
|
18
|
-
project := plainClassifyStrategyEdgesProject(t)
|
|
19
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
20
|
-
return runTransform([]string{
|
|
21
|
-
"--cwd", project,
|
|
22
|
-
"--tsconfig", "tsconfig.json",
|
|
23
|
-
"--file", "src/main.ts",
|
|
24
|
-
"--output", "js",
|
|
25
|
-
})
|
|
26
|
-
})
|
|
27
|
-
if code != 0 {
|
|
28
|
-
t.Fatalf("classify strategy-edges transform failed: code=%d stderr=\n%s", code, errText)
|
|
29
|
-
}
|
|
30
|
-
// the abstract class must NOT be constructed with `new Shape(`
|
|
31
|
-
if strings.Contains(out, "new Shape(") {
|
|
32
|
-
t.Fatalf("an abstract class must field-copy, never `new Shape(seed)`:\n%s", out)
|
|
33
|
-
}
|
|
34
|
-
if !strings.Contains(out, "Object.create(Shape.prototype)") {
|
|
35
|
-
t.Fatalf("the abstract class should field-copy via Object.create(Shape.prototype):\n%s", out)
|
|
36
|
-
}
|
|
37
|
-
// the tuple-rest ctor must build via `new Pair(`
|
|
38
|
-
if !strings.Contains(out, "new Pair(") {
|
|
39
|
-
t.Fatalf("the tuple-rest constructor should build via new Pair(seed):\n%s", out)
|
|
40
|
-
}
|
|
41
|
-
plainClassifyStrategyEdgesRun(t, project, out)
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
// TestPlainClassifyPrivateFieldRejected verifies that a class carrying ES
|
|
45
|
-
// `#private` fields is REJECTED at a field-copied position (a nested class), at
|
|
46
|
-
// transform time, rather than emitting field-copy code whose prototype methods
|
|
47
|
-
// throw "Cannot read private member" at runtime.
|
|
48
|
-
func TestPlainClassifyPrivateFieldRejected(t *testing.T) {
|
|
49
|
-
project := plainClassifyPrivateProject(t)
|
|
50
|
-
// Project mode (no --file/--output js): runTransformProject reports typia
|
|
51
|
-
// transform diagnostics and exits non-zero, the established pattern for
|
|
52
|
-
// asserting a transform-time rejection (see compare_equal_cover).
|
|
53
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
54
|
-
return runTransform([]string{
|
|
55
|
-
"--cwd", project,
|
|
56
|
-
"--tsconfig", "tsconfig.json",
|
|
57
|
-
})
|
|
58
|
-
})
|
|
59
|
-
if code == 0 {
|
|
60
|
-
t.Fatalf("a nested #private-field class must be rejected at transform time, but the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
61
|
-
}
|
|
62
|
-
if !strings.Contains(out, "typia transform error") {
|
|
63
|
-
t.Fatalf("the #private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
func plainClassifyStrategyEdgesProject(t *testing.T) string {
|
|
68
|
-
t.Helper()
|
|
69
|
-
return plainClassifyWriteProject(t, "plain-classify-strategy-", plainClassifyStrategyEdgesSource)
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
func plainClassifyPrivateProject(t *testing.T) string {
|
|
73
|
-
t.Helper()
|
|
74
|
-
return plainClassifyWriteProject(t, "plain-classify-private-", plainClassifyPrivateSource)
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// plainClassifyWriteProject stages a one-file fixture project reusing the
|
|
78
|
-
// from/new tsconfig, returning the project dir.
|
|
79
|
-
func plainClassifyWriteProject(t *testing.T, prefix string, source string) string {
|
|
80
|
-
t.Helper()
|
|
81
|
-
root := ttscTypiaTestRepoRoot(t)
|
|
82
|
-
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
83
|
-
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
84
|
-
t.Fatalf("mkdir temp base: %v", err)
|
|
85
|
-
}
|
|
86
|
-
dir, err := os.MkdirTemp(base, prefix)
|
|
87
|
-
if err != nil {
|
|
88
|
-
t.Fatalf("create temp fixture: %v", err)
|
|
89
|
-
}
|
|
90
|
-
t.Cleanup(func() { _ = os.RemoveAll(dir) })
|
|
91
|
-
src := filepath.Join(dir, "src")
|
|
92
|
-
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
93
|
-
t.Fatalf("mkdir fixture src: %v", err)
|
|
94
|
-
}
|
|
95
|
-
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
96
|
-
t.Fatalf("write tsconfig: %v", err)
|
|
97
|
-
}
|
|
98
|
-
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(source), 0o644); err != nil {
|
|
99
|
-
t.Fatalf("write source: %v", err)
|
|
100
|
-
}
|
|
101
|
-
return dir
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
func plainClassifyStrategyEdgesRun(t *testing.T, project string, js string) {
|
|
105
|
-
t.Helper()
|
|
106
|
-
node, err := exec.LookPath("node")
|
|
107
|
-
if err != nil {
|
|
108
|
-
t.Skip("node executable not found")
|
|
109
|
-
}
|
|
110
|
-
runtimeDir := filepath.Join(project, "runtime")
|
|
111
|
-
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
112
|
-
t.Fatalf("mkdir runtime dir: %v", err)
|
|
113
|
-
}
|
|
114
|
-
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
115
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
116
|
-
t.Fatalf("write generic stub: %v", err)
|
|
117
|
-
}
|
|
118
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, js)), 0o644); err != nil {
|
|
119
|
-
t.Fatalf("write runtime module: %v", err)
|
|
120
|
-
}
|
|
121
|
-
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
122
|
-
if err := os.WriteFile(runner, []byte(plainClassifyStrategyEdgesRunner), 0o644); err != nil {
|
|
123
|
-
t.Fatalf("write runner: %v", err)
|
|
124
|
-
}
|
|
125
|
-
cmd := exec.Command(node, runner)
|
|
126
|
-
cmd.Dir = runtimeDir
|
|
127
|
-
output, err := cmd.CombinedOutput()
|
|
128
|
-
if err != nil {
|
|
129
|
-
t.Fatalf("classify strategy-edges runtime cases failed: %v\n%s", err, output)
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
const plainClassifyStrategyEdgesSource = `import typia from "typia";
|
|
134
|
-
|
|
135
|
-
// ABSTRACT class: typeof Shape has only an ` + "`abstract new`" + ` signature, which is
|
|
136
|
-
// not runtime-newable, so classify must FIELD-COPY the instance shape.
|
|
137
|
-
export abstract class Shape {
|
|
138
|
-
kind!: string;
|
|
139
|
-
describe(): string {
|
|
140
|
-
return "shape:" + this.kind;
|
|
141
|
-
}
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// TUPLE-rest constructor: the seed is the FIRST tuple element { a; b }.
|
|
145
|
-
export class Pair {
|
|
146
|
-
a!: number;
|
|
147
|
-
b!: number;
|
|
148
|
-
constructor(...args: [{ a: number; b: number }, number?]) {
|
|
149
|
-
this.a = args[0].a;
|
|
150
|
-
this.b = args[0].b;
|
|
151
|
-
}
|
|
152
|
-
sum(): number {
|
|
153
|
-
return this.a + this.b;
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
export const buildShape = typia.plain.createClassify<typeof Shape>();
|
|
158
|
-
export const buildPair = typia.plain.createClassify<typeof Pair>();
|
|
159
|
-
`
|
|
160
|
-
|
|
161
|
-
const plainClassifyStrategyEdgesRunner = `const mod = require("./main.cjs");
|
|
162
|
-
|
|
163
|
-
const assert = (cond, msg) => {
|
|
164
|
-
if (!cond) throw new Error(msg);
|
|
165
|
-
};
|
|
166
|
-
|
|
167
|
-
// abstract class field-copies into a real instance with a working prototype method
|
|
168
|
-
const sh = mod.buildShape({ kind: "circle" });
|
|
169
|
-
assert(sh instanceof mod.Shape, "abstract class should field-copy into a Shape instance");
|
|
170
|
-
assert(sh.describe() === "shape:circle", "abstract class prototype method should work, got: " + sh.describe());
|
|
171
|
-
|
|
172
|
-
// tuple-rest ctor builds via new with the first tuple element as the seed
|
|
173
|
-
const pr = mod.buildPair({ a: 3, b: 4 });
|
|
174
|
-
assert(pr instanceof mod.Pair, "tuple-rest ctor should build a Pair instance");
|
|
175
|
-
assert(pr.sum() === 7, "tuple-rest construction should reconstruct, got: " + pr.sum());
|
|
176
|
-
`
|
|
177
|
-
|
|
178
|
-
const plainClassifyPrivateSource = `import typia from "typia";
|
|
179
|
-
|
|
180
|
-
// A class with an ES #private field — its private slot is installed only by the
|
|
181
|
-
// constructor, so a field-copy (Object.create + assign) cannot restore it.
|
|
182
|
-
class Secret {
|
|
183
|
-
#token!: string;
|
|
184
|
-
reveal(): string {
|
|
185
|
-
return this.#token;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
// Holder nests Secret at a field-copied position, so classify cannot soundly
|
|
190
|
-
// reconstruct it and must reject at transform time.
|
|
191
|
-
export class Holder {
|
|
192
|
-
secret!: Secret;
|
|
193
|
-
}
|
|
194
|
-
|
|
195
|
-
export const buildHolder = typia.plain.createClassify<Holder>();
|
|
196
|
-
`
|
|
197
|
-
|
|
198
|
-
// TestPlainClassifyStaticPrivateAllowed verifies that a class whose ONLY #private
|
|
199
|
-
// member is STATIC is NOT rejected — a static `#x` lives on the constructor, not
|
|
200
|
-
// on instances, so field-copy (Object.create(prototype) + assign) still yields a
|
|
201
|
-
// sound instance.
|
|
202
|
-
func TestPlainClassifyStaticPrivateAllowed(t *testing.T) {
|
|
203
|
-
project := plainClassifyWriteProject(t, "plain-classify-staticpriv-", plainClassifyStaticPrivateSource)
|
|
204
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
205
|
-
return runTransform([]string{
|
|
206
|
-
"--cwd", project,
|
|
207
|
-
"--tsconfig", "tsconfig.json",
|
|
208
|
-
"--file", "src/main.ts",
|
|
209
|
-
"--output", "js",
|
|
210
|
-
})
|
|
211
|
-
})
|
|
212
|
-
if code != 0 {
|
|
213
|
-
t.Fatalf("a class with only a STATIC #private member must field-copy, not be rejected: code=%d\n%s", code, errText)
|
|
214
|
-
}
|
|
215
|
-
if !strings.Contains(out, "Object.create(Counter.prototype)") {
|
|
216
|
-
t.Fatalf("the static-#private class should field-copy onto Counter.prototype:\n%s", out)
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
|
|
220
|
-
// TestPlainClassifySelfRefPrivateRejected verifies that a SELF-REFERENTIAL
|
|
221
|
-
// #private class is rejected: construction is root-only, so its nested
|
|
222
|
-
// self-occurrences are field-copied (losing the #private slots), which the guard
|
|
223
|
-
// must reject rather than emit code that throws at runtime.
|
|
224
|
-
func TestPlainClassifySelfRefPrivateRejected(t *testing.T) {
|
|
225
|
-
project := plainClassifyWriteProject(t, "plain-classify-selfrefpriv-", plainClassifySelfRefPrivateSource)
|
|
226
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
227
|
-
return runTransform([]string{
|
|
228
|
-
"--cwd", project,
|
|
229
|
-
"--tsconfig", "tsconfig.json",
|
|
230
|
-
})
|
|
231
|
-
})
|
|
232
|
-
if code == 0 {
|
|
233
|
-
t.Fatalf("a self-referential #private class field-copies its nested occurrences, so it must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
234
|
-
}
|
|
235
|
-
if !strings.Contains(out, "typia transform error") {
|
|
236
|
-
t.Fatalf("the self-ref #private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
|
|
240
|
-
const plainClassifyStaticPrivateSource = `import typia from "typia";
|
|
241
|
-
|
|
242
|
-
// Only a STATIC #private member — it lives on the constructor, not instances, so
|
|
243
|
-
// field-copy reconstructs a sound instance and classify must NOT reject it.
|
|
244
|
-
export class Counter {
|
|
245
|
-
value = 0;
|
|
246
|
-
static #total = 0;
|
|
247
|
-
bump(): number {
|
|
248
|
-
this.value += 1;
|
|
249
|
-
Counter.#total += 1;
|
|
250
|
-
return this.value;
|
|
251
|
-
}
|
|
252
|
-
}
|
|
253
|
-
|
|
254
|
-
export const build = typia.plain.createClassify<Counter>();
|
|
255
|
-
`
|
|
256
|
-
|
|
257
|
-
const plainClassifySelfRefPrivateSource = `import typia from "typia";
|
|
258
|
-
|
|
259
|
-
// A self-referential class with an INSTANCE #private field, built via new at the
|
|
260
|
-
// root. Its nested self-occurrences (next) are field-copied — construction is
|
|
261
|
-
// root-only — so the #private slot would be lost there: classify must reject.
|
|
262
|
-
export class Node {
|
|
263
|
-
#id!: string;
|
|
264
|
-
next: Node | null = null;
|
|
265
|
-
constructor(seed: { id: string; next: Node | null }) {
|
|
266
|
-
this.#id = seed.id;
|
|
267
|
-
this.next = seed.next;
|
|
268
|
-
}
|
|
269
|
-
id(): string {
|
|
270
|
-
return this.#id;
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
|
|
274
|
-
export const build = typia.plain.createClassify<typeof Node>();
|
|
275
|
-
`
|
|
276
|
-
|
|
277
|
-
// TestPlainClassifyUnboundAnonymousClass verifies an anonymous class expression
|
|
278
|
-
// with NO enclosing const binding field-copies as a plain {} instead of emitting
|
|
279
|
-
// `Object.create(__class.prototype)` — the binder-internal __class name is not a
|
|
280
|
-
// usable runtime binding (it would throw ReferenceError).
|
|
281
|
-
func TestPlainClassifyUnboundAnonymousClass(t *testing.T) {
|
|
282
|
-
project := plainClassifyWriteProject(t, "plain-classify-anon-", plainClassifyUnboundAnonSource)
|
|
283
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
284
|
-
return runTransform([]string{
|
|
285
|
-
"--cwd", project,
|
|
286
|
-
"--tsconfig", "tsconfig.json",
|
|
287
|
-
"--file", "src/main.ts",
|
|
288
|
-
"--output", "js",
|
|
289
|
-
})
|
|
290
|
-
})
|
|
291
|
-
if code != 0 {
|
|
292
|
-
t.Fatalf("unbound anonymous class transform failed: code=%d\n%s", code, errText)
|
|
293
|
-
}
|
|
294
|
-
if strings.Contains(out, "__class") {
|
|
295
|
-
t.Fatalf("an unbound anonymous class must NOT leak the binder-internal __class name:\n%s", out)
|
|
296
|
-
}
|
|
297
|
-
plainClassifyRunNode(t, project, out, plainClassifyUnboundAnonRunner)
|
|
298
|
-
}
|
|
299
|
-
|
|
300
|
-
// plainClassifyRunNode writes the rewritten module + a custom runner and runs it.
|
|
301
|
-
func plainClassifyRunNode(t *testing.T, project string, js string, runnerSrc string) {
|
|
302
|
-
t.Helper()
|
|
303
|
-
node, err := exec.LookPath("node")
|
|
304
|
-
if err != nil {
|
|
305
|
-
t.Skip("node executable not found")
|
|
306
|
-
}
|
|
307
|
-
runtimeDir := filepath.Join(project, "runtime")
|
|
308
|
-
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
309
|
-
t.Fatalf("mkdir runtime dir: %v", err)
|
|
310
|
-
}
|
|
311
|
-
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
312
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
313
|
-
t.Fatalf("write generic stub: %v", err)
|
|
314
|
-
}
|
|
315
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, js)), 0o644); err != nil {
|
|
316
|
-
t.Fatalf("write runtime module: %v", err)
|
|
317
|
-
}
|
|
318
|
-
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
319
|
-
if err := os.WriteFile(runner, []byte(runnerSrc), 0o644); err != nil {
|
|
320
|
-
t.Fatalf("write runner: %v", err)
|
|
321
|
-
}
|
|
322
|
-
cmd := exec.Command(node, runner)
|
|
323
|
-
cmd.Dir = runtimeDir
|
|
324
|
-
output, err := cmd.CombinedOutput()
|
|
325
|
-
if err != nil {
|
|
326
|
-
t.Fatalf("runtime cases failed: %v\n%s", err, output)
|
|
327
|
-
}
|
|
328
|
-
}
|
|
329
|
-
|
|
330
|
-
const plainClassifyUnboundAnonSource = `import typia from "typia";
|
|
331
|
-
|
|
332
|
-
// An anonymous class expression with NO enclosing const binding (returned from a
|
|
333
|
-
// factory). Its binder-internal name is not a usable runtime binding, so classify
|
|
334
|
-
// must field-copy a plain {} rather than reference that unbound name.
|
|
335
|
-
const factory = () =>
|
|
336
|
-
class {
|
|
337
|
-
x!: number;
|
|
338
|
-
label(): string {
|
|
339
|
-
return "x=" + this.x;
|
|
340
|
-
}
|
|
341
|
-
};
|
|
342
|
-
export type Widget = InstanceType<ReturnType<typeof factory>>;
|
|
343
|
-
|
|
344
|
-
export const build = typia.plain.createClassify<Widget>();
|
|
345
|
-
`
|
|
346
|
-
|
|
347
|
-
// TestPlainClassifyInheritedPrivateRejected verifies that a class extending a
|
|
348
|
-
// #private-bearing base is rejected: field-copying the subclass never installs
|
|
349
|
-
// the inherited #private slot, so its prototype methods would throw at runtime.
|
|
350
|
-
func TestPlainClassifyInheritedPrivateRejected(t *testing.T) {
|
|
351
|
-
project := plainClassifyWriteProject(t, "plain-classify-inheritedpriv-", plainClassifyInheritedPrivateSource)
|
|
352
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
353
|
-
return runTransform([]string{
|
|
354
|
-
"--cwd", project,
|
|
355
|
-
"--tsconfig", "tsconfig.json",
|
|
356
|
-
})
|
|
357
|
-
})
|
|
358
|
-
if code == 0 {
|
|
359
|
-
t.Fatalf("a class extending a #private-bearing base must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
360
|
-
}
|
|
361
|
-
if !strings.Contains(out, "typia transform error") {
|
|
362
|
-
t.Fatalf("the inherited-#private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
363
|
-
}
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
const plainClassifyInheritedPrivateSource = `import typia from "typia";
|
|
367
|
-
|
|
368
|
-
// A base class with an INSTANCE #private field; the subclass adds only public
|
|
369
|
-
// data. Field-copying the subclass never installs the inherited #private slot, so
|
|
370
|
-
// classify must reject it — the prototype chain matters.
|
|
371
|
-
class Base {
|
|
372
|
-
#secret = 0;
|
|
373
|
-
bump(): number {
|
|
374
|
-
this.#secret += 1;
|
|
375
|
-
return this.#secret;
|
|
376
|
-
}
|
|
377
|
-
}
|
|
378
|
-
export class Derived extends Base {
|
|
379
|
-
name!: string;
|
|
380
|
-
}
|
|
381
|
-
|
|
382
|
-
export const build = typia.plain.createClassify<Derived>();
|
|
383
|
-
`
|
|
384
|
-
|
|
385
|
-
const plainClassifyUnboundAnonRunner = `const mod = require("./main.cjs");
|
|
386
|
-
|
|
387
|
-
const assert = (cond, msg) => {
|
|
388
|
-
if (!cond) throw new Error(msg);
|
|
389
|
-
};
|
|
390
|
-
|
|
391
|
-
// must NOT throw "ReferenceError: __class is not defined"; field-copies the data
|
|
392
|
-
const w = mod.build({ x: 5 });
|
|
393
|
-
assert(w && w.x === 5, "unbound anonymous class should field-copy its data, got: " + JSON.stringify(w));
|
|
394
|
-
`
|
|
395
|
-
|
|
396
|
-
// TestPlainClassifyNamedInterfaceFieldCopy verifies that a named INTERFACE field
|
|
397
|
-
// is field-copied as a plain {} — an interface has no runtime value, so emitting
|
|
398
|
-
// Object.create(<Interface>.prototype) would throw ReferenceError.
|
|
399
|
-
func TestPlainClassifyNamedInterfaceFieldCopy(t *testing.T) {
|
|
400
|
-
project := plainClassifyWriteProject(t, "plain-classify-iface-", plainClassifyInterfaceSource)
|
|
401
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
402
|
-
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json", "--file", "src/main.ts", "--output", "js"})
|
|
403
|
-
})
|
|
404
|
-
if code != 0 {
|
|
405
|
-
t.Fatalf("named-interface field transform failed: code=%d\n%s", code, errText)
|
|
406
|
-
}
|
|
407
|
-
if strings.Contains(out, "Object.create(Animal.prototype)") {
|
|
408
|
-
t.Fatalf("a named interface must NOT be field-copied via Object.create(Animal.prototype):\n%s", out)
|
|
409
|
-
}
|
|
410
|
-
if !strings.Contains(out, "Object.create(Zoo.prototype)") {
|
|
411
|
-
t.Fatalf("the enclosing class should still field-copy onto Zoo.prototype:\n%s", out)
|
|
412
|
-
}
|
|
413
|
-
plainClassifyRunNode(t, project, out, plainClassifyInterfaceRunner)
|
|
414
|
-
}
|
|
415
|
-
|
|
416
|
-
// TestPlainClassifyRecursiveAnonymousObject verifies a RECURSIVE anonymous object
|
|
417
|
-
// type (whose IsLiteral() is false) field-copies as {} rather than emitting
|
|
418
|
-
// Object.create(__type.prototype) (a ReferenceError).
|
|
419
|
-
func TestPlainClassifyRecursiveAnonymousObject(t *testing.T) {
|
|
420
|
-
project := plainClassifyWriteProject(t, "plain-classify-recanon-", plainClassifyRecAnonSource)
|
|
421
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
422
|
-
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json", "--file", "src/main.ts", "--output", "js"})
|
|
423
|
-
})
|
|
424
|
-
if code != 0 {
|
|
425
|
-
t.Fatalf("recursive-anonymous-object transform failed: code=%d\n%s", code, errText)
|
|
426
|
-
}
|
|
427
|
-
if strings.Contains(out, "__type") {
|
|
428
|
-
t.Fatalf("a recursive anonymous object must NOT leak the binder-internal __type name:\n%s", out)
|
|
429
|
-
}
|
|
430
|
-
plainClassifyRunNode(t, project, out, plainClassifyRecAnonRunner)
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
// TestPlainClassifyGenericPrivateRejected verifies that a GENERIC class with its
|
|
434
|
-
// own instance #private is rejected — its instantiation Gen<string> is a bare
|
|
435
|
-
// TypeReference, but the member scan resolves the class declaration so the
|
|
436
|
-
// #private is still detected.
|
|
437
|
-
func TestPlainClassifyGenericPrivateRejected(t *testing.T) {
|
|
438
|
-
project := plainClassifyWriteProject(t, "plain-classify-genericpriv-", plainClassifyGenericPrivateSource)
|
|
439
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
440
|
-
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json"})
|
|
441
|
-
})
|
|
442
|
-
if code == 0 {
|
|
443
|
-
t.Fatalf("a generic class with its own #private must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
444
|
-
}
|
|
445
|
-
if !strings.Contains(out, "typia transform error") {
|
|
446
|
-
t.Fatalf("the generic-#private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
447
|
-
}
|
|
448
|
-
}
|
|
449
|
-
|
|
450
|
-
const plainClassifyInterfaceSource = `import typia from "typia";
|
|
451
|
-
|
|
452
|
-
// A named INTERFACE — a type-only name with no runtime value.
|
|
453
|
-
export interface Animal {
|
|
454
|
-
name: string;
|
|
455
|
-
legs: number;
|
|
456
|
-
}
|
|
457
|
-
|
|
458
|
-
// Zoo is a real class (field-copies onto its prototype); its animal field is
|
|
459
|
-
// the interface, which must field-copy as a plain {}.
|
|
460
|
-
export class Zoo {
|
|
461
|
-
label!: string;
|
|
462
|
-
animal!: Animal;
|
|
463
|
-
describe(): string {
|
|
464
|
-
return this.label + ":" + this.animal.name;
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
export const build = typia.plain.createClassify<Zoo>();
|
|
469
|
-
`
|
|
470
|
-
|
|
471
|
-
const plainClassifyInterfaceRunner = `const mod = require("./main.cjs");
|
|
472
|
-
|
|
473
|
-
const assert = (cond, msg) => {
|
|
474
|
-
if (!cond) throw new Error(msg);
|
|
475
|
-
};
|
|
476
|
-
|
|
477
|
-
const z = mod.build({ label: "z", animal: { name: "fox", legs: 4 } });
|
|
478
|
-
assert(z instanceof mod.Zoo, "Zoo should be a class instance");
|
|
479
|
-
assert(z.describe() === "z:fox", "Zoo method should work, got: " + z.describe());
|
|
480
|
-
assert(z.animal && z.animal.name === "fox" && z.animal.legs === 4, "interface field is a plain object");
|
|
481
|
-
`
|
|
482
|
-
|
|
483
|
-
const plainClassifyRecAnonSource = `import typia from "typia";
|
|
484
|
-
|
|
485
|
-
// A RECURSIVE anonymous object type alias — no runtime value, IsLiteral() is
|
|
486
|
-
// false because it is recursive, so classify must still field-copy a plain {}.
|
|
487
|
-
export type Rec = { value: number; self: Rec | null };
|
|
488
|
-
|
|
489
|
-
export const build = typia.plain.createClassify<Rec>();
|
|
490
|
-
`
|
|
491
|
-
|
|
492
|
-
const plainClassifyRecAnonRunner = `const mod = require("./main.cjs");
|
|
493
|
-
|
|
494
|
-
const assert = (cond, msg) => {
|
|
495
|
-
if (!cond) throw new Error(msg);
|
|
496
|
-
};
|
|
497
|
-
|
|
498
|
-
// must NOT throw "ReferenceError: __type is not defined"
|
|
499
|
-
const r = mod.build({ value: 1, self: { value: 2, self: null } });
|
|
500
|
-
assert(r && r.value === 1, "recursive anonymous object should field-copy, got: " + JSON.stringify(r));
|
|
501
|
-
assert(r.self && r.self.value === 2 && r.self.self === null, "nested recursion should field-copy");
|
|
502
|
-
`
|
|
503
|
-
|
|
504
|
-
const plainClassifyGenericPrivateSource = `import typia from "typia";
|
|
505
|
-
|
|
506
|
-
// A GENERIC class with its OWN instance #private. classify<Gen<string>> emplaces
|
|
507
|
-
// the Gen<string> instance (a bare TypeReference), but the member scan resolves
|
|
508
|
-
// Gen's declaration, so the own #private is detected and the class is rejected.
|
|
509
|
-
export class Gen<T> {
|
|
510
|
-
#secret = 0;
|
|
511
|
-
value!: T;
|
|
512
|
-
bump(): number {
|
|
513
|
-
this.#secret += 1;
|
|
514
|
-
return this.#secret;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
|
|
518
|
-
export const build = typia.plain.createClassify<Gen<string>>();
|
|
519
|
-
`
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"os"
|
|
5
|
+
"os/exec"
|
|
6
|
+
"path/filepath"
|
|
7
|
+
"strings"
|
|
8
|
+
"testing"
|
|
9
|
+
)
|
|
10
|
+
|
|
11
|
+
// TestPlainClassifyStrategyEdgesTransform covers two construction-strategy edges:
|
|
12
|
+
// - an ABSTRACT class must FIELD-COPY (a runtime `new AbstractClass(seed)` throws
|
|
13
|
+
// "Cannot create an instance of an abstract class"), and
|
|
14
|
+
// - a TUPLE-typed rest parameter `constructor(...args: [Seed, number?])` must
|
|
15
|
+
// build via `new` with the first tuple element as the seed (matching
|
|
16
|
+
// Classifiable's `[infer P, ...Rest]` rule).
|
|
17
|
+
func TestPlainClassifyStrategyEdgesTransform(t *testing.T) {
|
|
18
|
+
project := plainClassifyStrategyEdgesProject(t)
|
|
19
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
20
|
+
return runTransform([]string{
|
|
21
|
+
"--cwd", project,
|
|
22
|
+
"--tsconfig", "tsconfig.json",
|
|
23
|
+
"--file", "src/main.ts",
|
|
24
|
+
"--output", "js",
|
|
25
|
+
})
|
|
26
|
+
})
|
|
27
|
+
if code != 0 {
|
|
28
|
+
t.Fatalf("classify strategy-edges transform failed: code=%d stderr=\n%s", code, errText)
|
|
29
|
+
}
|
|
30
|
+
// the abstract class must NOT be constructed with `new Shape(`
|
|
31
|
+
if strings.Contains(out, "new Shape(") {
|
|
32
|
+
t.Fatalf("an abstract class must field-copy, never `new Shape(seed)`:\n%s", out)
|
|
33
|
+
}
|
|
34
|
+
if !strings.Contains(out, "Object.create(Shape.prototype)") {
|
|
35
|
+
t.Fatalf("the abstract class should field-copy via Object.create(Shape.prototype):\n%s", out)
|
|
36
|
+
}
|
|
37
|
+
// the tuple-rest ctor must build via `new Pair(`
|
|
38
|
+
if !strings.Contains(out, "new Pair(") {
|
|
39
|
+
t.Fatalf("the tuple-rest constructor should build via new Pair(seed):\n%s", out)
|
|
40
|
+
}
|
|
41
|
+
plainClassifyStrategyEdgesRun(t, project, out)
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
// TestPlainClassifyPrivateFieldRejected verifies that a class carrying ES
|
|
45
|
+
// `#private` fields is REJECTED at a field-copied position (a nested class), at
|
|
46
|
+
// transform time, rather than emitting field-copy code whose prototype methods
|
|
47
|
+
// throw "Cannot read private member" at runtime.
|
|
48
|
+
func TestPlainClassifyPrivateFieldRejected(t *testing.T) {
|
|
49
|
+
project := plainClassifyPrivateProject(t)
|
|
50
|
+
// Project mode (no --file/--output js): runTransformProject reports typia
|
|
51
|
+
// transform diagnostics and exits non-zero, the established pattern for
|
|
52
|
+
// asserting a transform-time rejection (see compare_equal_cover).
|
|
53
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
54
|
+
return runTransform([]string{
|
|
55
|
+
"--cwd", project,
|
|
56
|
+
"--tsconfig", "tsconfig.json",
|
|
57
|
+
})
|
|
58
|
+
})
|
|
59
|
+
if code == 0 {
|
|
60
|
+
t.Fatalf("a nested #private-field class must be rejected at transform time, but the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
61
|
+
}
|
|
62
|
+
if !strings.Contains(out, "typia transform error") {
|
|
63
|
+
t.Fatalf("the #private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
func plainClassifyStrategyEdgesProject(t *testing.T) string {
|
|
68
|
+
t.Helper()
|
|
69
|
+
return plainClassifyWriteProject(t, "plain-classify-strategy-", plainClassifyStrategyEdgesSource)
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
func plainClassifyPrivateProject(t *testing.T) string {
|
|
73
|
+
t.Helper()
|
|
74
|
+
return plainClassifyWriteProject(t, "plain-classify-private-", plainClassifyPrivateSource)
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// plainClassifyWriteProject stages a one-file fixture project reusing the
|
|
78
|
+
// from/new tsconfig, returning the project dir.
|
|
79
|
+
func plainClassifyWriteProject(t *testing.T, prefix string, source string) string {
|
|
80
|
+
t.Helper()
|
|
81
|
+
root := ttscTypiaTestRepoRoot(t)
|
|
82
|
+
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
83
|
+
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
84
|
+
t.Fatalf("mkdir temp base: %v", err)
|
|
85
|
+
}
|
|
86
|
+
dir, err := os.MkdirTemp(base, prefix)
|
|
87
|
+
if err != nil {
|
|
88
|
+
t.Fatalf("create temp fixture: %v", err)
|
|
89
|
+
}
|
|
90
|
+
t.Cleanup(func() { _ = os.RemoveAll(dir) })
|
|
91
|
+
src := filepath.Join(dir, "src")
|
|
92
|
+
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
93
|
+
t.Fatalf("mkdir fixture src: %v", err)
|
|
94
|
+
}
|
|
95
|
+
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
96
|
+
t.Fatalf("write tsconfig: %v", err)
|
|
97
|
+
}
|
|
98
|
+
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(source), 0o644); err != nil {
|
|
99
|
+
t.Fatalf("write source: %v", err)
|
|
100
|
+
}
|
|
101
|
+
return dir
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
func plainClassifyStrategyEdgesRun(t *testing.T, project string, js string) {
|
|
105
|
+
t.Helper()
|
|
106
|
+
node, err := exec.LookPath("node")
|
|
107
|
+
if err != nil {
|
|
108
|
+
t.Skip("node executable not found")
|
|
109
|
+
}
|
|
110
|
+
runtimeDir := filepath.Join(project, "runtime")
|
|
111
|
+
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
112
|
+
t.Fatalf("mkdir runtime dir: %v", err)
|
|
113
|
+
}
|
|
114
|
+
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
115
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
116
|
+
t.Fatalf("write generic stub: %v", err)
|
|
117
|
+
}
|
|
118
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, js)), 0o644); err != nil {
|
|
119
|
+
t.Fatalf("write runtime module: %v", err)
|
|
120
|
+
}
|
|
121
|
+
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
122
|
+
if err := os.WriteFile(runner, []byte(plainClassifyStrategyEdgesRunner), 0o644); err != nil {
|
|
123
|
+
t.Fatalf("write runner: %v", err)
|
|
124
|
+
}
|
|
125
|
+
cmd := exec.Command(node, runner)
|
|
126
|
+
cmd.Dir = runtimeDir
|
|
127
|
+
output, err := cmd.CombinedOutput()
|
|
128
|
+
if err != nil {
|
|
129
|
+
t.Fatalf("classify strategy-edges runtime cases failed: %v\n%s", err, output)
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
const plainClassifyStrategyEdgesSource = `import typia from "typia";
|
|
134
|
+
|
|
135
|
+
// ABSTRACT class: typeof Shape has only an ` + "`abstract new`" + ` signature, which is
|
|
136
|
+
// not runtime-newable, so classify must FIELD-COPY the instance shape.
|
|
137
|
+
export abstract class Shape {
|
|
138
|
+
kind!: string;
|
|
139
|
+
describe(): string {
|
|
140
|
+
return "shape:" + this.kind;
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
// TUPLE-rest constructor: the seed is the FIRST tuple element { a; b }.
|
|
145
|
+
export class Pair {
|
|
146
|
+
a!: number;
|
|
147
|
+
b!: number;
|
|
148
|
+
constructor(...args: [{ a: number; b: number }, number?]) {
|
|
149
|
+
this.a = args[0].a;
|
|
150
|
+
this.b = args[0].b;
|
|
151
|
+
}
|
|
152
|
+
sum(): number {
|
|
153
|
+
return this.a + this.b;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
|
|
157
|
+
export const buildShape = typia.plain.createClassify<typeof Shape>();
|
|
158
|
+
export const buildPair = typia.plain.createClassify<typeof Pair>();
|
|
159
|
+
`
|
|
160
|
+
|
|
161
|
+
const plainClassifyStrategyEdgesRunner = `const mod = require("./main.cjs");
|
|
162
|
+
|
|
163
|
+
const assert = (cond, msg) => {
|
|
164
|
+
if (!cond) throw new Error(msg);
|
|
165
|
+
};
|
|
166
|
+
|
|
167
|
+
// abstract class field-copies into a real instance with a working prototype method
|
|
168
|
+
const sh = mod.buildShape({ kind: "circle" });
|
|
169
|
+
assert(sh instanceof mod.Shape, "abstract class should field-copy into a Shape instance");
|
|
170
|
+
assert(sh.describe() === "shape:circle", "abstract class prototype method should work, got: " + sh.describe());
|
|
171
|
+
|
|
172
|
+
// tuple-rest ctor builds via new with the first tuple element as the seed
|
|
173
|
+
const pr = mod.buildPair({ a: 3, b: 4 });
|
|
174
|
+
assert(pr instanceof mod.Pair, "tuple-rest ctor should build a Pair instance");
|
|
175
|
+
assert(pr.sum() === 7, "tuple-rest construction should reconstruct, got: " + pr.sum());
|
|
176
|
+
`
|
|
177
|
+
|
|
178
|
+
const plainClassifyPrivateSource = `import typia from "typia";
|
|
179
|
+
|
|
180
|
+
// A class with an ES #private field — its private slot is installed only by the
|
|
181
|
+
// constructor, so a field-copy (Object.create + assign) cannot restore it.
|
|
182
|
+
class Secret {
|
|
183
|
+
#token!: string;
|
|
184
|
+
reveal(): string {
|
|
185
|
+
return this.#token;
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
// Holder nests Secret at a field-copied position, so classify cannot soundly
|
|
190
|
+
// reconstruct it and must reject at transform time.
|
|
191
|
+
export class Holder {
|
|
192
|
+
secret!: Secret;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
export const buildHolder = typia.plain.createClassify<Holder>();
|
|
196
|
+
`
|
|
197
|
+
|
|
198
|
+
// TestPlainClassifyStaticPrivateAllowed verifies that a class whose ONLY #private
|
|
199
|
+
// member is STATIC is NOT rejected — a static `#x` lives on the constructor, not
|
|
200
|
+
// on instances, so field-copy (Object.create(prototype) + assign) still yields a
|
|
201
|
+
// sound instance.
|
|
202
|
+
func TestPlainClassifyStaticPrivateAllowed(t *testing.T) {
|
|
203
|
+
project := plainClassifyWriteProject(t, "plain-classify-staticpriv-", plainClassifyStaticPrivateSource)
|
|
204
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
205
|
+
return runTransform([]string{
|
|
206
|
+
"--cwd", project,
|
|
207
|
+
"--tsconfig", "tsconfig.json",
|
|
208
|
+
"--file", "src/main.ts",
|
|
209
|
+
"--output", "js",
|
|
210
|
+
})
|
|
211
|
+
})
|
|
212
|
+
if code != 0 {
|
|
213
|
+
t.Fatalf("a class with only a STATIC #private member must field-copy, not be rejected: code=%d\n%s", code, errText)
|
|
214
|
+
}
|
|
215
|
+
if !strings.Contains(out, "Object.create(Counter.prototype)") {
|
|
216
|
+
t.Fatalf("the static-#private class should field-copy onto Counter.prototype:\n%s", out)
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
|
|
220
|
+
// TestPlainClassifySelfRefPrivateRejected verifies that a SELF-REFERENTIAL
|
|
221
|
+
// #private class is rejected: construction is root-only, so its nested
|
|
222
|
+
// self-occurrences are field-copied (losing the #private slots), which the guard
|
|
223
|
+
// must reject rather than emit code that throws at runtime.
|
|
224
|
+
func TestPlainClassifySelfRefPrivateRejected(t *testing.T) {
|
|
225
|
+
project := plainClassifyWriteProject(t, "plain-classify-selfrefpriv-", plainClassifySelfRefPrivateSource)
|
|
226
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
227
|
+
return runTransform([]string{
|
|
228
|
+
"--cwd", project,
|
|
229
|
+
"--tsconfig", "tsconfig.json",
|
|
230
|
+
})
|
|
231
|
+
})
|
|
232
|
+
if code == 0 {
|
|
233
|
+
t.Fatalf("a self-referential #private class field-copies its nested occurrences, so it must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
234
|
+
}
|
|
235
|
+
if !strings.Contains(out, "typia transform error") {
|
|
236
|
+
t.Fatalf("the self-ref #private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
|
|
240
|
+
const plainClassifyStaticPrivateSource = `import typia from "typia";
|
|
241
|
+
|
|
242
|
+
// Only a STATIC #private member — it lives on the constructor, not instances, so
|
|
243
|
+
// field-copy reconstructs a sound instance and classify must NOT reject it.
|
|
244
|
+
export class Counter {
|
|
245
|
+
value = 0;
|
|
246
|
+
static #total = 0;
|
|
247
|
+
bump(): number {
|
|
248
|
+
this.value += 1;
|
|
249
|
+
Counter.#total += 1;
|
|
250
|
+
return this.value;
|
|
251
|
+
}
|
|
252
|
+
}
|
|
253
|
+
|
|
254
|
+
export const build = typia.plain.createClassify<Counter>();
|
|
255
|
+
`
|
|
256
|
+
|
|
257
|
+
const plainClassifySelfRefPrivateSource = `import typia from "typia";
|
|
258
|
+
|
|
259
|
+
// A self-referential class with an INSTANCE #private field, built via new at the
|
|
260
|
+
// root. Its nested self-occurrences (next) are field-copied — construction is
|
|
261
|
+
// root-only — so the #private slot would be lost there: classify must reject.
|
|
262
|
+
export class Node {
|
|
263
|
+
#id!: string;
|
|
264
|
+
next: Node | null = null;
|
|
265
|
+
constructor(seed: { id: string; next: Node | null }) {
|
|
266
|
+
this.#id = seed.id;
|
|
267
|
+
this.next = seed.next;
|
|
268
|
+
}
|
|
269
|
+
id(): string {
|
|
270
|
+
return this.#id;
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
export const build = typia.plain.createClassify<typeof Node>();
|
|
275
|
+
`
|
|
276
|
+
|
|
277
|
+
// TestPlainClassifyUnboundAnonymousClass verifies an anonymous class expression
|
|
278
|
+
// with NO enclosing const binding field-copies as a plain {} instead of emitting
|
|
279
|
+
// `Object.create(__class.prototype)` — the binder-internal __class name is not a
|
|
280
|
+
// usable runtime binding (it would throw ReferenceError).
|
|
281
|
+
func TestPlainClassifyUnboundAnonymousClass(t *testing.T) {
|
|
282
|
+
project := plainClassifyWriteProject(t, "plain-classify-anon-", plainClassifyUnboundAnonSource)
|
|
283
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
284
|
+
return runTransform([]string{
|
|
285
|
+
"--cwd", project,
|
|
286
|
+
"--tsconfig", "tsconfig.json",
|
|
287
|
+
"--file", "src/main.ts",
|
|
288
|
+
"--output", "js",
|
|
289
|
+
})
|
|
290
|
+
})
|
|
291
|
+
if code != 0 {
|
|
292
|
+
t.Fatalf("unbound anonymous class transform failed: code=%d\n%s", code, errText)
|
|
293
|
+
}
|
|
294
|
+
if strings.Contains(out, "__class") {
|
|
295
|
+
t.Fatalf("an unbound anonymous class must NOT leak the binder-internal __class name:\n%s", out)
|
|
296
|
+
}
|
|
297
|
+
plainClassifyRunNode(t, project, out, plainClassifyUnboundAnonRunner)
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
// plainClassifyRunNode writes the rewritten module + a custom runner and runs it.
|
|
301
|
+
func plainClassifyRunNode(t *testing.T, project string, js string, runnerSrc string) {
|
|
302
|
+
t.Helper()
|
|
303
|
+
node, err := exec.LookPath("node")
|
|
304
|
+
if err != nil {
|
|
305
|
+
t.Skip("node executable not found")
|
|
306
|
+
}
|
|
307
|
+
runtimeDir := filepath.Join(project, "runtime")
|
|
308
|
+
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
309
|
+
t.Fatalf("mkdir runtime dir: %v", err)
|
|
310
|
+
}
|
|
311
|
+
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
312
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
313
|
+
t.Fatalf("write generic stub: %v", err)
|
|
314
|
+
}
|
|
315
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, js)), 0o644); err != nil {
|
|
316
|
+
t.Fatalf("write runtime module: %v", err)
|
|
317
|
+
}
|
|
318
|
+
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
319
|
+
if err := os.WriteFile(runner, []byte(runnerSrc), 0o644); err != nil {
|
|
320
|
+
t.Fatalf("write runner: %v", err)
|
|
321
|
+
}
|
|
322
|
+
cmd := exec.Command(node, runner)
|
|
323
|
+
cmd.Dir = runtimeDir
|
|
324
|
+
output, err := cmd.CombinedOutput()
|
|
325
|
+
if err != nil {
|
|
326
|
+
t.Fatalf("runtime cases failed: %v\n%s", err, output)
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
const plainClassifyUnboundAnonSource = `import typia from "typia";
|
|
331
|
+
|
|
332
|
+
// An anonymous class expression with NO enclosing const binding (returned from a
|
|
333
|
+
// factory). Its binder-internal name is not a usable runtime binding, so classify
|
|
334
|
+
// must field-copy a plain {} rather than reference that unbound name.
|
|
335
|
+
const factory = () =>
|
|
336
|
+
class {
|
|
337
|
+
x!: number;
|
|
338
|
+
label(): string {
|
|
339
|
+
return "x=" + this.x;
|
|
340
|
+
}
|
|
341
|
+
};
|
|
342
|
+
export type Widget = InstanceType<ReturnType<typeof factory>>;
|
|
343
|
+
|
|
344
|
+
export const build = typia.plain.createClassify<Widget>();
|
|
345
|
+
`
|
|
346
|
+
|
|
347
|
+
// TestPlainClassifyInheritedPrivateRejected verifies that a class extending a
|
|
348
|
+
// #private-bearing base is rejected: field-copying the subclass never installs
|
|
349
|
+
// the inherited #private slot, so its prototype methods would throw at runtime.
|
|
350
|
+
func TestPlainClassifyInheritedPrivateRejected(t *testing.T) {
|
|
351
|
+
project := plainClassifyWriteProject(t, "plain-classify-inheritedpriv-", plainClassifyInheritedPrivateSource)
|
|
352
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
353
|
+
return runTransform([]string{
|
|
354
|
+
"--cwd", project,
|
|
355
|
+
"--tsconfig", "tsconfig.json",
|
|
356
|
+
})
|
|
357
|
+
})
|
|
358
|
+
if code == 0 {
|
|
359
|
+
t.Fatalf("a class extending a #private-bearing base must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
360
|
+
}
|
|
361
|
+
if !strings.Contains(out, "typia transform error") {
|
|
362
|
+
t.Fatalf("the inherited-#private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
|
|
366
|
+
const plainClassifyInheritedPrivateSource = `import typia from "typia";
|
|
367
|
+
|
|
368
|
+
// A base class with an INSTANCE #private field; the subclass adds only public
|
|
369
|
+
// data. Field-copying the subclass never installs the inherited #private slot, so
|
|
370
|
+
// classify must reject it — the prototype chain matters.
|
|
371
|
+
class Base {
|
|
372
|
+
#secret = 0;
|
|
373
|
+
bump(): number {
|
|
374
|
+
this.#secret += 1;
|
|
375
|
+
return this.#secret;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
export class Derived extends Base {
|
|
379
|
+
name!: string;
|
|
380
|
+
}
|
|
381
|
+
|
|
382
|
+
export const build = typia.plain.createClassify<Derived>();
|
|
383
|
+
`
|
|
384
|
+
|
|
385
|
+
const plainClassifyUnboundAnonRunner = `const mod = require("./main.cjs");
|
|
386
|
+
|
|
387
|
+
const assert = (cond, msg) => {
|
|
388
|
+
if (!cond) throw new Error(msg);
|
|
389
|
+
};
|
|
390
|
+
|
|
391
|
+
// must NOT throw "ReferenceError: __class is not defined"; field-copies the data
|
|
392
|
+
const w = mod.build({ x: 5 });
|
|
393
|
+
assert(w && w.x === 5, "unbound anonymous class should field-copy its data, got: " + JSON.stringify(w));
|
|
394
|
+
`
|
|
395
|
+
|
|
396
|
+
// TestPlainClassifyNamedInterfaceFieldCopy verifies that a named INTERFACE field
|
|
397
|
+
// is field-copied as a plain {} — an interface has no runtime value, so emitting
|
|
398
|
+
// Object.create(<Interface>.prototype) would throw ReferenceError.
|
|
399
|
+
func TestPlainClassifyNamedInterfaceFieldCopy(t *testing.T) {
|
|
400
|
+
project := plainClassifyWriteProject(t, "plain-classify-iface-", plainClassifyInterfaceSource)
|
|
401
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
402
|
+
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json", "--file", "src/main.ts", "--output", "js"})
|
|
403
|
+
})
|
|
404
|
+
if code != 0 {
|
|
405
|
+
t.Fatalf("named-interface field transform failed: code=%d\n%s", code, errText)
|
|
406
|
+
}
|
|
407
|
+
if strings.Contains(out, "Object.create(Animal.prototype)") {
|
|
408
|
+
t.Fatalf("a named interface must NOT be field-copied via Object.create(Animal.prototype):\n%s", out)
|
|
409
|
+
}
|
|
410
|
+
if !strings.Contains(out, "Object.create(Zoo.prototype)") {
|
|
411
|
+
t.Fatalf("the enclosing class should still field-copy onto Zoo.prototype:\n%s", out)
|
|
412
|
+
}
|
|
413
|
+
plainClassifyRunNode(t, project, out, plainClassifyInterfaceRunner)
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
// TestPlainClassifyRecursiveAnonymousObject verifies a RECURSIVE anonymous object
|
|
417
|
+
// type (whose IsLiteral() is false) field-copies as {} rather than emitting
|
|
418
|
+
// Object.create(__type.prototype) (a ReferenceError).
|
|
419
|
+
func TestPlainClassifyRecursiveAnonymousObject(t *testing.T) {
|
|
420
|
+
project := plainClassifyWriteProject(t, "plain-classify-recanon-", plainClassifyRecAnonSource)
|
|
421
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
422
|
+
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json", "--file", "src/main.ts", "--output", "js"})
|
|
423
|
+
})
|
|
424
|
+
if code != 0 {
|
|
425
|
+
t.Fatalf("recursive-anonymous-object transform failed: code=%d\n%s", code, errText)
|
|
426
|
+
}
|
|
427
|
+
if strings.Contains(out, "__type") {
|
|
428
|
+
t.Fatalf("a recursive anonymous object must NOT leak the binder-internal __type name:\n%s", out)
|
|
429
|
+
}
|
|
430
|
+
plainClassifyRunNode(t, project, out, plainClassifyRecAnonRunner)
|
|
431
|
+
}
|
|
432
|
+
|
|
433
|
+
// TestPlainClassifyGenericPrivateRejected verifies that a GENERIC class with its
|
|
434
|
+
// own instance #private is rejected — its instantiation Gen<string> is a bare
|
|
435
|
+
// TypeReference, but the member scan resolves the class declaration so the
|
|
436
|
+
// #private is still detected.
|
|
437
|
+
func TestPlainClassifyGenericPrivateRejected(t *testing.T) {
|
|
438
|
+
project := plainClassifyWriteProject(t, "plain-classify-genericpriv-", plainClassifyGenericPrivateSource)
|
|
439
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
440
|
+
return runTransform([]string{"--cwd", project, "--tsconfig", "tsconfig.json"})
|
|
441
|
+
})
|
|
442
|
+
if code == 0 {
|
|
443
|
+
t.Fatalf("a generic class with its own #private must be rejected; the transform succeeded\nstdout=%s\nstderr=%s", out, errText)
|
|
444
|
+
}
|
|
445
|
+
if !strings.Contains(out, "typia transform error") {
|
|
446
|
+
t.Fatalf("the generic-#private rejection diagnostic is missing:\nstdout=%s\nstderr=%s", out, errText)
|
|
447
|
+
}
|
|
448
|
+
}
|
|
449
|
+
|
|
450
|
+
const plainClassifyInterfaceSource = `import typia from "typia";
|
|
451
|
+
|
|
452
|
+
// A named INTERFACE — a type-only name with no runtime value.
|
|
453
|
+
export interface Animal {
|
|
454
|
+
name: string;
|
|
455
|
+
legs: number;
|
|
456
|
+
}
|
|
457
|
+
|
|
458
|
+
// Zoo is a real class (field-copies onto its prototype); its animal field is
|
|
459
|
+
// the interface, which must field-copy as a plain {}.
|
|
460
|
+
export class Zoo {
|
|
461
|
+
label!: string;
|
|
462
|
+
animal!: Animal;
|
|
463
|
+
describe(): string {
|
|
464
|
+
return this.label + ":" + this.animal.name;
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
export const build = typia.plain.createClassify<Zoo>();
|
|
469
|
+
`
|
|
470
|
+
|
|
471
|
+
const plainClassifyInterfaceRunner = `const mod = require("./main.cjs");
|
|
472
|
+
|
|
473
|
+
const assert = (cond, msg) => {
|
|
474
|
+
if (!cond) throw new Error(msg);
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
const z = mod.build({ label: "z", animal: { name: "fox", legs: 4 } });
|
|
478
|
+
assert(z instanceof mod.Zoo, "Zoo should be a class instance");
|
|
479
|
+
assert(z.describe() === "z:fox", "Zoo method should work, got: " + z.describe());
|
|
480
|
+
assert(z.animal && z.animal.name === "fox" && z.animal.legs === 4, "interface field is a plain object");
|
|
481
|
+
`
|
|
482
|
+
|
|
483
|
+
const plainClassifyRecAnonSource = `import typia from "typia";
|
|
484
|
+
|
|
485
|
+
// A RECURSIVE anonymous object type alias — no runtime value, IsLiteral() is
|
|
486
|
+
// false because it is recursive, so classify must still field-copy a plain {}.
|
|
487
|
+
export type Rec = { value: number; self: Rec | null };
|
|
488
|
+
|
|
489
|
+
export const build = typia.plain.createClassify<Rec>();
|
|
490
|
+
`
|
|
491
|
+
|
|
492
|
+
const plainClassifyRecAnonRunner = `const mod = require("./main.cjs");
|
|
493
|
+
|
|
494
|
+
const assert = (cond, msg) => {
|
|
495
|
+
if (!cond) throw new Error(msg);
|
|
496
|
+
};
|
|
497
|
+
|
|
498
|
+
// must NOT throw "ReferenceError: __type is not defined"
|
|
499
|
+
const r = mod.build({ value: 1, self: { value: 2, self: null } });
|
|
500
|
+
assert(r && r.value === 1, "recursive anonymous object should field-copy, got: " + JSON.stringify(r));
|
|
501
|
+
assert(r.self && r.self.value === 2 && r.self.self === null, "nested recursion should field-copy");
|
|
502
|
+
`
|
|
503
|
+
|
|
504
|
+
const plainClassifyGenericPrivateSource = `import typia from "typia";
|
|
505
|
+
|
|
506
|
+
// A GENERIC class with its OWN instance #private. classify<Gen<string>> emplaces
|
|
507
|
+
// the Gen<string> instance (a bare TypeReference), but the member scan resolves
|
|
508
|
+
// Gen's declaration, so the own #private is detected and the class is rejected.
|
|
509
|
+
export class Gen<T> {
|
|
510
|
+
#secret = 0;
|
|
511
|
+
value!: T;
|
|
512
|
+
bump(): number {
|
|
513
|
+
this.#secret += 1;
|
|
514
|
+
return this.#secret;
|
|
515
|
+
}
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
export const build = typia.plain.createClassify<Gen<string>>();
|
|
519
|
+
`
|