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,465 +1,465 @@
|
|
|
1
|
-
package main
|
|
2
|
-
|
|
3
|
-
import (
|
|
4
|
-
"os"
|
|
5
|
-
"os/exec"
|
|
6
|
-
"path/filepath"
|
|
7
|
-
"regexp"
|
|
8
|
-
"strings"
|
|
9
|
-
"testing"
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
// TestPlainClassifyFromNewTransform verifies plain.classify construction
|
|
13
|
-
// strategies for a class-TYPE target (typeof C): the static factory `C.from(x)`,
|
|
14
|
-
// the single-argument `new C(x)` (including an inherited constructor and a
|
|
15
|
-
// rest-only constructor whose seed is the rest element), and a cross-module
|
|
16
|
-
// class resolved to a value import. The instance form classify<C> still
|
|
17
|
-
// field-copies (regression guard for the field-copy slice).
|
|
18
|
-
//
|
|
19
|
-
// 1. Transform a fixture exercising every arm.
|
|
20
|
-
// 2. Require the emit to take `.from(` / `new ` for the construction arms and
|
|
21
|
-
// keep `Object.create` for the instance field-copy arm, and to import the
|
|
22
|
-
// cross-module class.
|
|
23
|
-
// 3. Execute each classify and require a real instance with working methods.
|
|
24
|
-
func TestPlainClassifyFromNewTransform(t *testing.T) {
|
|
25
|
-
project := plainClassifyFromNewProject(t)
|
|
26
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
27
|
-
return runTransform([]string{
|
|
28
|
-
"--cwd", project,
|
|
29
|
-
"--tsconfig", "tsconfig.json",
|
|
30
|
-
"--file", "src/main.ts",
|
|
31
|
-
"--output", "js",
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
if code != 0 {
|
|
35
|
-
t.Fatalf("classify from/new transform failed: code=%d stderr=\n%s", code, errText)
|
|
36
|
-
}
|
|
37
|
-
if !strings.Contains(out, ".from(") {
|
|
38
|
-
t.Fatalf("classify of a typeof-C with a static factory should emit C.from(seed):\n%s", out)
|
|
39
|
-
}
|
|
40
|
-
if !strings.Contains(out, "new Box(") {
|
|
41
|
-
t.Fatalf("classify of a typeof-C with a single-arg constructor should emit new Box(seed):\n%s", out)
|
|
42
|
-
}
|
|
43
|
-
if !strings.Contains(out, "Object.create") {
|
|
44
|
-
t.Fatalf("the instance-form classify<Plain> must still field-copy (Object.create):\n%s", out)
|
|
45
|
-
}
|
|
46
|
-
plainClassifyFromNewRunRuntimeCases(t, project, out)
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
func plainClassifyFromNewProject(t *testing.T) string {
|
|
50
|
-
t.Helper()
|
|
51
|
-
root := ttscTypiaTestRepoRoot(t)
|
|
52
|
-
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
53
|
-
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
54
|
-
t.Fatalf("mkdir temp base: %v", err)
|
|
55
|
-
}
|
|
56
|
-
dir, err := os.MkdirTemp(base, "plain-classify-fromnew-")
|
|
57
|
-
if err != nil {
|
|
58
|
-
t.Fatalf("create temp fixture: %v", err)
|
|
59
|
-
}
|
|
60
|
-
t.Cleanup(func() {
|
|
61
|
-
_ = os.RemoveAll(dir)
|
|
62
|
-
})
|
|
63
|
-
src := filepath.Join(dir, "src")
|
|
64
|
-
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
65
|
-
t.Fatalf("mkdir fixture src: %v", err)
|
|
66
|
-
}
|
|
67
|
-
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
68
|
-
t.Fatalf("write tsconfig: %v", err)
|
|
69
|
-
}
|
|
70
|
-
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(plainClassifyFromNewSource), 0o644); err != nil {
|
|
71
|
-
t.Fatalf("write source: %v", err)
|
|
72
|
-
}
|
|
73
|
-
return dir
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
func plainClassifyFromNewRunRuntimeCases(t *testing.T, project string, js string) {
|
|
77
|
-
t.Helper()
|
|
78
|
-
node, err := exec.LookPath("node")
|
|
79
|
-
if err != nil {
|
|
80
|
-
t.Skip("node executable not found")
|
|
81
|
-
}
|
|
82
|
-
runtimeDir := filepath.Join(project, "runtime")
|
|
83
|
-
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
84
|
-
t.Fatalf("mkdir runtime dir: %v", err)
|
|
85
|
-
}
|
|
86
|
-
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
87
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
88
|
-
t.Fatalf("write generic internal stub: %v", err)
|
|
89
|
-
}
|
|
90
|
-
runtimeJS := plainClassifyFromNewRewrite(t, js)
|
|
91
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(runtimeJS), 0o644); err != nil {
|
|
92
|
-
t.Fatalf("write runtime module: %v", err)
|
|
93
|
-
}
|
|
94
|
-
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
95
|
-
if err := os.WriteFile(runner, []byte(plainClassifyFromNewRuntimeRunner), 0o644); err != nil {
|
|
96
|
-
t.Fatalf("write runtime runner: %v", err)
|
|
97
|
-
}
|
|
98
|
-
cmd := exec.Command(node, runner)
|
|
99
|
-
cmd.Dir = runtimeDir
|
|
100
|
-
output, err := cmd.CombinedOutput()
|
|
101
|
-
if err != nil {
|
|
102
|
-
t.Fatalf("classify from/new runtime cases failed: %v\n%s", err, output)
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// plainClassifyFromNewRewrite resolves the emitted module's typia imports to
|
|
107
|
-
// local stubs. Beyond the known internal helpers, the createClassify path emits
|
|
108
|
-
// is-check helpers (config.Addition) that are DEFINED but never called at
|
|
109
|
-
// runtime — e.g. for an inherited Error field. Those are stubbed generically so
|
|
110
|
-
// the module loads; each is logged so a genuinely-needed helper is visible.
|
|
111
|
-
func plainClassifyFromNewRewrite(t *testing.T, js string) string {
|
|
112
|
-
t.Helper()
|
|
113
|
-
s := strings.ReplaceAll(js, `require("typia")`, `require("./typia-stub.cjs")`)
|
|
114
|
-
for from, to := range map[string]string{
|
|
115
|
-
`require("typia/lib/internal/_validateReport")`: `require("./validate-report-stub.cjs")`,
|
|
116
|
-
`require("typia/lib/internal/_createStandardSchema")`: `require("./standard-schema-stub.cjs")`,
|
|
117
|
-
`require("typia/lib/internal/_assertGuard")`: `require("./assert-guard-stub.cjs")`,
|
|
118
|
-
`require("typia/lib/internal/_accessExpressionAsString")`: `require("./access-expression-stub.cjs")`,
|
|
119
|
-
} {
|
|
120
|
-
s = strings.ReplaceAll(s, from, to)
|
|
121
|
-
}
|
|
122
|
-
re := regexp.MustCompile(`require\("typia/lib/internal/([A-Za-z0-9_]+)"\)`)
|
|
123
|
-
for _, m := range re.FindAllStringSubmatch(s, -1) {
|
|
124
|
-
t.Logf("from/new emit references typia/lib/internal/%s (generic-stubbed)", m[1])
|
|
125
|
-
}
|
|
126
|
-
s = re.ReplaceAllString(s, `require("./generic-internal-stub.cjs")`)
|
|
127
|
-
if strings.Contains(s, `require("typia")`) || strings.Contains(s, "typia/lib/internal/") {
|
|
128
|
-
t.Fatalf("unresolved typia import remains after rewrite:\n%s", s)
|
|
129
|
-
}
|
|
130
|
-
return s
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
// plainClassifyFromNewGenericStub returns an identity function for any helper
|
|
134
|
-
// name, so a generated-but-unused internal helper does not break module load.
|
|
135
|
-
const plainClassifyFromNewGenericStub = `module.exports = new Proxy(
|
|
136
|
-
{},
|
|
137
|
-
{ get: () => (x) => x },
|
|
138
|
-
);
|
|
139
|
-
`
|
|
140
|
-
|
|
141
|
-
const plainClassifyFromNewTSConfig = `{
|
|
142
|
-
"compilerOptions": {
|
|
143
|
-
"target": "ES2022",
|
|
144
|
-
"module": "commonjs",
|
|
145
|
-
"moduleResolution": "bundler",
|
|
146
|
-
"ignoreDeprecations": "6.0",
|
|
147
|
-
"types": ["*"],
|
|
148
|
-
"esModuleInterop": true,
|
|
149
|
-
"strict": true,
|
|
150
|
-
"skipLibCheck": true
|
|
151
|
-
},
|
|
152
|
-
"include": ["src"]
|
|
153
|
-
}
|
|
154
|
-
`
|
|
155
|
-
|
|
156
|
-
const plainClassifyFromNewSource = `import typia from "typia";
|
|
157
|
-
|
|
158
|
-
// from: private constructor + static factory returning the instance
|
|
159
|
-
export class Point {
|
|
160
|
-
private constructor(
|
|
161
|
-
public readonly x: number,
|
|
162
|
-
public readonly y: number,
|
|
163
|
-
) {}
|
|
164
|
-
static from(seed: { x: number; y: number }): Point {
|
|
165
|
-
return new Point(seed.x, seed.y);
|
|
166
|
-
}
|
|
167
|
-
sum(): number {
|
|
168
|
-
return this.x + this.y;
|
|
169
|
-
}
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
// new: single-argument public constructor
|
|
173
|
-
export class Box {
|
|
174
|
-
value!: number;
|
|
175
|
-
label!: string;
|
|
176
|
-
constructor(seed: { value: number; label: string }) {
|
|
177
|
-
this.value = seed.value;
|
|
178
|
-
this.label = seed.label;
|
|
179
|
-
}
|
|
180
|
-
describe(): string {
|
|
181
|
-
return this.label + ":" + this.value;
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
// new with an inherited single-argument constructor
|
|
186
|
-
export class HttpError extends Error {
|
|
187
|
-
constructor(message?: string) {
|
|
188
|
-
super(message);
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
|
|
192
|
-
// rest-only constructor -> the seed is the rest ELEMENT (number)
|
|
193
|
-
export class Bag {
|
|
194
|
-
items: number[];
|
|
195
|
-
constructor(...items: number[]) {
|
|
196
|
-
this.items = items;
|
|
197
|
-
}
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// instance form -> field copy (regression: stays Object.create)
|
|
201
|
-
export class Plain {
|
|
202
|
-
id!: number;
|
|
203
|
-
name!: string;
|
|
204
|
-
greet(): string {
|
|
205
|
-
return "hi " + this.name;
|
|
206
|
-
}
|
|
207
|
-
}
|
|
208
|
-
|
|
209
|
-
// self-referential SEED: the constructor seed contains the class itself. The
|
|
210
|
-
// top is built via new Tree(seed); a nested Tree inside the seed is field-copied
|
|
211
|
-
// (the Classifiable contract method-strips a nested class in a seed). Codegen
|
|
212
|
-
// must terminate.
|
|
213
|
-
export class Tree {
|
|
214
|
-
value!: number;
|
|
215
|
-
children!: Tree[];
|
|
216
|
-
constructor(seed: { value: number; children: Tree[] }) {
|
|
217
|
-
this.value = seed.value;
|
|
218
|
-
this.children = seed.children;
|
|
219
|
-
}
|
|
220
|
-
}
|
|
221
|
-
|
|
222
|
-
// any-seed factory: a static from(json: any) must FALL TO field-copy (the
|
|
223
|
-
// any seed collapses the factory arm, matching ClassifiableSeedValue), so
|
|
224
|
-
// J.from must NOT be called at runtime.
|
|
225
|
-
export class J {
|
|
226
|
-
id!: number;
|
|
227
|
-
static fromCalled = false;
|
|
228
|
-
static from(json: any): J {
|
|
229
|
-
J.fromCalled = true;
|
|
230
|
-
const j = new J();
|
|
231
|
-
j.id = json.id;
|
|
232
|
-
return j;
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
export const fromPoint = typia.plain.createClassify<typeof Point>();
|
|
237
|
-
export const newBox = typia.plain.createClassify<typeof Box>();
|
|
238
|
-
export const newError = typia.plain.createClassify<typeof HttpError>();
|
|
239
|
-
export const restBag = typia.plain.createClassify<typeof Bag>();
|
|
240
|
-
export const fieldPlain = typia.plain.createClassify<Plain>();
|
|
241
|
-
export const buildTree = typia.plain.createClassify<typeof Tree>();
|
|
242
|
-
export const classifyJ = typia.plain.createClassify<typeof J>();
|
|
243
|
-
// assert/validate against a class TYPE must validate the SEED, not typeof C's
|
|
244
|
-
// static members (the validation_type redirect).
|
|
245
|
-
export const assertPoint = typia.plain.createAssertClassify<typeof Point>();
|
|
246
|
-
export const validatePoint = typia.plain.createValidateClassify<typeof Point>();
|
|
247
|
-
`
|
|
248
|
-
|
|
249
|
-
const plainClassifyFromNewRuntimeRunner = `const mod = require("./main.cjs");
|
|
250
|
-
|
|
251
|
-
const assert = (cond, msg) => {
|
|
252
|
-
if (!cond) throw new Error(msg);
|
|
253
|
-
};
|
|
254
|
-
|
|
255
|
-
// (1) static factory: C.from(seed) -> real instance + method
|
|
256
|
-
const point = mod.fromPoint({ x: 1, y: 2 });
|
|
257
|
-
assert(point instanceof mod.Point, "point should be a Point instance");
|
|
258
|
-
assert(point.sum() === 3, "Point.from seed should reconstruct (sum), got: " + point.sum());
|
|
259
|
-
|
|
260
|
-
// (2) single-arg constructor: new C(seed)
|
|
261
|
-
const box = mod.newBox({ value: 5, label: "a" });
|
|
262
|
-
assert(box instanceof mod.Box, "box should be a Box instance");
|
|
263
|
-
assert(box.describe() === "a:5", "new Box(seed) should reconstruct, got: " + box.describe());
|
|
264
|
-
|
|
265
|
-
// (3) inherited single-arg constructor
|
|
266
|
-
const err = mod.newError("boom");
|
|
267
|
-
assert(err instanceof mod.HttpError, "err should be an HttpError instance");
|
|
268
|
-
assert(err instanceof Error, "HttpError should still be an Error");
|
|
269
|
-
assert(err.message === "boom", "inherited ctor should pass the seed, got: " + err.message);
|
|
270
|
-
|
|
271
|
-
// (4) rest-only constructor: seed is the element
|
|
272
|
-
const bag = mod.restBag(7);
|
|
273
|
-
assert(bag instanceof mod.Bag, "bag should be a Bag instance");
|
|
274
|
-
assert(Array.isArray(bag.items) && bag.items[0] === 7, "rest seed should reconstruct, got: " + JSON.stringify(bag.items));
|
|
275
|
-
|
|
276
|
-
// (5) instance form -> field copy (regression)
|
|
277
|
-
const plain = mod.fieldPlain({ id: 1, name: "Kim" });
|
|
278
|
-
assert(plain instanceof mod.Plain, "plain should be a Plain instance (field copy)");
|
|
279
|
-
assert(plain.greet() === "hi Kim", "instance field-copy prototype method should work");
|
|
280
|
-
|
|
281
|
-
// (6) self-referential seed terminates: top via new, nested via field copy
|
|
282
|
-
const tree = mod.buildTree({ value: 1, children: [{ value: 2, children: [] }] });
|
|
283
|
-
assert(tree instanceof mod.Tree, "tree should be a Tree instance (new)");
|
|
284
|
-
assert(tree.children[0] instanceof mod.Tree, "nested tree should be a Tree (field copy)");
|
|
285
|
-
assert(tree.children[0].value === 2, "nested tree value should be preserved");
|
|
286
|
-
|
|
287
|
-
// (7) assertClassify<typeof Point> validates the SEED (not typeof C statics)
|
|
288
|
-
assert(mod.assertPoint({ x: 1, y: 2 }) instanceof mod.Point, "assertPoint valid seed -> Point");
|
|
289
|
-
let threw = false;
|
|
290
|
-
try {
|
|
291
|
-
mod.assertPoint({ x: "no", y: 2 });
|
|
292
|
-
} catch (e) {
|
|
293
|
-
threw = true;
|
|
294
|
-
}
|
|
295
|
-
assert(threw, "assertPoint should throw on an invalid seed");
|
|
296
|
-
|
|
297
|
-
// (8) validateClassify<typeof Point> validates the SEED
|
|
298
|
-
const ok = mod.validatePoint({ x: 3, y: 4 });
|
|
299
|
-
assert(ok.success === true, "validatePoint should succeed on a valid seed");
|
|
300
|
-
assert(ok.data instanceof mod.Point, "validatePoint data should be a Point instance");
|
|
301
|
-
const bad = mod.validatePoint({ x: "no", y: 4 });
|
|
302
|
-
assert(bad.success === false, "validatePoint should fail on an invalid seed");
|
|
303
|
-
assert(
|
|
304
|
-
Array.isArray(bad.errors) && bad.errors.length > 0,
|
|
305
|
-
"validatePoint failure should populate errors",
|
|
306
|
-
);
|
|
307
|
-
|
|
308
|
-
// (9) any-seed from falls to field copy: J.from must NOT be called
|
|
309
|
-
const j = mod.classifyJ({ id: 9 });
|
|
310
|
-
assert(j instanceof mod.J, "j should be a J instance (field copy)");
|
|
311
|
-
assert(j.id === 9, "j.id should be field-copied, got: " + j.id);
|
|
312
|
-
assert(mod.J.fromCalled === false, "any-seed from must fall to field-copy, not call J.from");
|
|
313
|
-
`
|
|
314
|
-
|
|
315
|
-
// TestPlainClassifyCrossModuleTransform verifies a class declared in ANOTHER
|
|
316
|
-
// module and referenced only as a TYPE at the call site is value-imported when
|
|
317
|
-
// reconstructed: field-copy (Object.create(Model.prototype)) and from
|
|
318
|
-
// (Factory.from). Without the cross-module value import the emitted module would
|
|
319
|
-
// throw ReferenceError. Two files are transformed (model + main) and run
|
|
320
|
-
// together.
|
|
321
|
-
func TestPlainClassifyCrossModuleTransform(t *testing.T) {
|
|
322
|
-
project := plainClassifyCrossModuleProject(t)
|
|
323
|
-
transform := func(file string) string {
|
|
324
|
-
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
325
|
-
return runTransform([]string{
|
|
326
|
-
"--cwd", project,
|
|
327
|
-
"--tsconfig", "tsconfig.json",
|
|
328
|
-
"--file", file,
|
|
329
|
-
"--output", "js",
|
|
330
|
-
})
|
|
331
|
-
})
|
|
332
|
-
if code != 0 {
|
|
333
|
-
t.Fatalf("transform %s failed: code=%d stderr=\n%s", file, code, errText)
|
|
334
|
-
}
|
|
335
|
-
return out
|
|
336
|
-
}
|
|
337
|
-
modelJS := transform("src/model.ts")
|
|
338
|
-
mainJS := transform("src/main.ts")
|
|
339
|
-
if !strings.Contains(mainJS, "model") {
|
|
340
|
-
t.Fatalf("main module should value-import the cross-module class:\n%s", mainJS)
|
|
341
|
-
}
|
|
342
|
-
plainClassifyCrossModuleRun(t, project, modelJS, mainJS)
|
|
343
|
-
}
|
|
344
|
-
|
|
345
|
-
func plainClassifyCrossModuleProject(t *testing.T) string {
|
|
346
|
-
t.Helper()
|
|
347
|
-
root := ttscTypiaTestRepoRoot(t)
|
|
348
|
-
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
349
|
-
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
350
|
-
t.Fatalf("mkdir temp base: %v", err)
|
|
351
|
-
}
|
|
352
|
-
dir, err := os.MkdirTemp(base, "plain-classify-crossmodule-")
|
|
353
|
-
if err != nil {
|
|
354
|
-
t.Fatalf("create temp fixture: %v", err)
|
|
355
|
-
}
|
|
356
|
-
t.Cleanup(func() { _ = os.RemoveAll(dir) })
|
|
357
|
-
src := filepath.Join(dir, "src")
|
|
358
|
-
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
359
|
-
t.Fatalf("mkdir fixture src: %v", err)
|
|
360
|
-
}
|
|
361
|
-
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
362
|
-
t.Fatalf("write tsconfig: %v", err)
|
|
363
|
-
}
|
|
364
|
-
if err := os.WriteFile(filepath.Join(src, "model.ts"), []byte(plainClassifyCrossModuleModel), 0o644); err != nil {
|
|
365
|
-
t.Fatalf("write model: %v", err)
|
|
366
|
-
}
|
|
367
|
-
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(plainClassifyCrossModuleMain), 0o644); err != nil {
|
|
368
|
-
t.Fatalf("write main: %v", err)
|
|
369
|
-
}
|
|
370
|
-
return dir
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
func plainClassifyCrossModuleRun(t *testing.T, project string, modelJS string, mainJS string) {
|
|
374
|
-
t.Helper()
|
|
375
|
-
node, err := exec.LookPath("node")
|
|
376
|
-
if err != nil {
|
|
377
|
-
t.Skip("node executable not found")
|
|
378
|
-
}
|
|
379
|
-
runtimeDir := filepath.Join(project, "runtime")
|
|
380
|
-
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
381
|
-
t.Fatalf("mkdir runtime dir: %v", err)
|
|
382
|
-
}
|
|
383
|
-
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
384
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
385
|
-
t.Fatalf("write generic stub: %v", err)
|
|
386
|
-
}
|
|
387
|
-
// model.ts has no typia calls; write it as model.js so the typia-injected
|
|
388
|
-
// `require("./model")` value import in main resolves.
|
|
389
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "model.js"), []byte(modelJS), 0o644); err != nil {
|
|
390
|
-
t.Fatalf("write model.js: %v", err)
|
|
391
|
-
}
|
|
392
|
-
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, mainJS)), 0o644); err != nil {
|
|
393
|
-
t.Fatalf("write main.cjs: %v", err)
|
|
394
|
-
}
|
|
395
|
-
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
396
|
-
if err := os.WriteFile(runner, []byte(plainClassifyCrossModuleRunner), 0o644); err != nil {
|
|
397
|
-
t.Fatalf("write runner: %v", err)
|
|
398
|
-
}
|
|
399
|
-
cmd := exec.Command(node, runner)
|
|
400
|
-
cmd.Dir = runtimeDir
|
|
401
|
-
output, err := cmd.CombinedOutput()
|
|
402
|
-
if err != nil {
|
|
403
|
-
t.Fatalf("cross-module runtime cases failed: %v\n%s", err, output)
|
|
404
|
-
}
|
|
405
|
-
}
|
|
406
|
-
|
|
407
|
-
const plainClassifyCrossModuleModel = `export class Model {
|
|
408
|
-
id!: number;
|
|
409
|
-
greet(): string {
|
|
410
|
-
return "m" + this.id;
|
|
411
|
-
}
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
export class Factory {
|
|
415
|
-
value!: number;
|
|
416
|
-
private constructor(value: number) {
|
|
417
|
-
this.value = value;
|
|
418
|
-
}
|
|
419
|
-
static from(seed: { value: number }): Factory {
|
|
420
|
-
const f = Object.create(Factory.prototype) as Factory;
|
|
421
|
-
(f as { value: number }).value = seed.value;
|
|
422
|
-
return f;
|
|
423
|
-
}
|
|
424
|
-
}
|
|
425
|
-
|
|
426
|
-
// default-exported field-copy class: the value import must be a DEFAULT import
|
|
427
|
-
export default class Memo {
|
|
428
|
-
text!: string;
|
|
429
|
-
show(): string {
|
|
430
|
-
return this.text;
|
|
431
|
-
}
|
|
432
|
-
}
|
|
433
|
-
`
|
|
434
|
-
|
|
435
|
-
const plainClassifyCrossModuleMain = `import typia from "typia";
|
|
436
|
-
import type Memo, { Model, Factory } from "./model";
|
|
437
|
-
|
|
438
|
-
export const classifyModel = typia.plain.createClassify<Model>();
|
|
439
|
-
export const classifyFactory = typia.plain.createClassify<typeof Factory>();
|
|
440
|
-
export const classifyMemo = typia.plain.createClassify<Memo>();
|
|
441
|
-
`
|
|
442
|
-
|
|
443
|
-
const plainClassifyCrossModuleRunner = `const model = require("./model.js");
|
|
444
|
-
const main = require("./main.cjs");
|
|
445
|
-
|
|
446
|
-
const assert = (cond, msg) => {
|
|
447
|
-
if (!cond) throw new Error(msg);
|
|
448
|
-
};
|
|
449
|
-
|
|
450
|
-
// cross-module field copy: Model is imported only as a TYPE at the call site,
|
|
451
|
-
// so the emitted module must add a VALUE import to reach Model.prototype.
|
|
452
|
-
const m = main.classifyModel({ id: 3 });
|
|
453
|
-
assert(m instanceof model.Model, "cross-module field-copy should yield a Model instance");
|
|
454
|
-
assert(m.greet() === "m3", "Model method should work, got: " + m.greet());
|
|
455
|
-
|
|
456
|
-
// cross-module from construction
|
|
457
|
-
const w = main.classifyFactory({ value: 7 });
|
|
458
|
-
assert(w instanceof model.Factory, "cross-module from should yield a Factory instance");
|
|
459
|
-
assert(w.value === 7, "Factory.from seed should reconstruct, got: " + w.value);
|
|
460
|
-
|
|
461
|
-
// cross-module DEFAULT-export field copy: the value import must be a default import
|
|
462
|
-
const memo = main.classifyMemo({ text: "hi" });
|
|
463
|
-
assert(memo instanceof model.default, "cross-module default-export field-copy should yield a Memo instance");
|
|
464
|
-
assert(memo.show() === "hi", "Memo method should work, got: " + memo.show());
|
|
465
|
-
`
|
|
1
|
+
package main
|
|
2
|
+
|
|
3
|
+
import (
|
|
4
|
+
"os"
|
|
5
|
+
"os/exec"
|
|
6
|
+
"path/filepath"
|
|
7
|
+
"regexp"
|
|
8
|
+
"strings"
|
|
9
|
+
"testing"
|
|
10
|
+
)
|
|
11
|
+
|
|
12
|
+
// TestPlainClassifyFromNewTransform verifies plain.classify construction
|
|
13
|
+
// strategies for a class-TYPE target (typeof C): the static factory `C.from(x)`,
|
|
14
|
+
// the single-argument `new C(x)` (including an inherited constructor and a
|
|
15
|
+
// rest-only constructor whose seed is the rest element), and a cross-module
|
|
16
|
+
// class resolved to a value import. The instance form classify<C> still
|
|
17
|
+
// field-copies (regression guard for the field-copy slice).
|
|
18
|
+
//
|
|
19
|
+
// 1. Transform a fixture exercising every arm.
|
|
20
|
+
// 2. Require the emit to take `.from(` / `new ` for the construction arms and
|
|
21
|
+
// keep `Object.create` for the instance field-copy arm, and to import the
|
|
22
|
+
// cross-module class.
|
|
23
|
+
// 3. Execute each classify and require a real instance with working methods.
|
|
24
|
+
func TestPlainClassifyFromNewTransform(t *testing.T) {
|
|
25
|
+
project := plainClassifyFromNewProject(t)
|
|
26
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
27
|
+
return runTransform([]string{
|
|
28
|
+
"--cwd", project,
|
|
29
|
+
"--tsconfig", "tsconfig.json",
|
|
30
|
+
"--file", "src/main.ts",
|
|
31
|
+
"--output", "js",
|
|
32
|
+
})
|
|
33
|
+
})
|
|
34
|
+
if code != 0 {
|
|
35
|
+
t.Fatalf("classify from/new transform failed: code=%d stderr=\n%s", code, errText)
|
|
36
|
+
}
|
|
37
|
+
if !strings.Contains(out, ".from(") {
|
|
38
|
+
t.Fatalf("classify of a typeof-C with a static factory should emit C.from(seed):\n%s", out)
|
|
39
|
+
}
|
|
40
|
+
if !strings.Contains(out, "new Box(") {
|
|
41
|
+
t.Fatalf("classify of a typeof-C with a single-arg constructor should emit new Box(seed):\n%s", out)
|
|
42
|
+
}
|
|
43
|
+
if !strings.Contains(out, "Object.create") {
|
|
44
|
+
t.Fatalf("the instance-form classify<Plain> must still field-copy (Object.create):\n%s", out)
|
|
45
|
+
}
|
|
46
|
+
plainClassifyFromNewRunRuntimeCases(t, project, out)
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
func plainClassifyFromNewProject(t *testing.T) string {
|
|
50
|
+
t.Helper()
|
|
51
|
+
root := ttscTypiaTestRepoRoot(t)
|
|
52
|
+
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
53
|
+
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
54
|
+
t.Fatalf("mkdir temp base: %v", err)
|
|
55
|
+
}
|
|
56
|
+
dir, err := os.MkdirTemp(base, "plain-classify-fromnew-")
|
|
57
|
+
if err != nil {
|
|
58
|
+
t.Fatalf("create temp fixture: %v", err)
|
|
59
|
+
}
|
|
60
|
+
t.Cleanup(func() {
|
|
61
|
+
_ = os.RemoveAll(dir)
|
|
62
|
+
})
|
|
63
|
+
src := filepath.Join(dir, "src")
|
|
64
|
+
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
65
|
+
t.Fatalf("mkdir fixture src: %v", err)
|
|
66
|
+
}
|
|
67
|
+
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
68
|
+
t.Fatalf("write tsconfig: %v", err)
|
|
69
|
+
}
|
|
70
|
+
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(plainClassifyFromNewSource), 0o644); err != nil {
|
|
71
|
+
t.Fatalf("write source: %v", err)
|
|
72
|
+
}
|
|
73
|
+
return dir
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
func plainClassifyFromNewRunRuntimeCases(t *testing.T, project string, js string) {
|
|
77
|
+
t.Helper()
|
|
78
|
+
node, err := exec.LookPath("node")
|
|
79
|
+
if err != nil {
|
|
80
|
+
t.Skip("node executable not found")
|
|
81
|
+
}
|
|
82
|
+
runtimeDir := filepath.Join(project, "runtime")
|
|
83
|
+
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
84
|
+
t.Fatalf("mkdir runtime dir: %v", err)
|
|
85
|
+
}
|
|
86
|
+
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
87
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
88
|
+
t.Fatalf("write generic internal stub: %v", err)
|
|
89
|
+
}
|
|
90
|
+
runtimeJS := plainClassifyFromNewRewrite(t, js)
|
|
91
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(runtimeJS), 0o644); err != nil {
|
|
92
|
+
t.Fatalf("write runtime module: %v", err)
|
|
93
|
+
}
|
|
94
|
+
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
95
|
+
if err := os.WriteFile(runner, []byte(plainClassifyFromNewRuntimeRunner), 0o644); err != nil {
|
|
96
|
+
t.Fatalf("write runtime runner: %v", err)
|
|
97
|
+
}
|
|
98
|
+
cmd := exec.Command(node, runner)
|
|
99
|
+
cmd.Dir = runtimeDir
|
|
100
|
+
output, err := cmd.CombinedOutput()
|
|
101
|
+
if err != nil {
|
|
102
|
+
t.Fatalf("classify from/new runtime cases failed: %v\n%s", err, output)
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
|
|
106
|
+
// plainClassifyFromNewRewrite resolves the emitted module's typia imports to
|
|
107
|
+
// local stubs. Beyond the known internal helpers, the createClassify path emits
|
|
108
|
+
// is-check helpers (config.Addition) that are DEFINED but never called at
|
|
109
|
+
// runtime — e.g. for an inherited Error field. Those are stubbed generically so
|
|
110
|
+
// the module loads; each is logged so a genuinely-needed helper is visible.
|
|
111
|
+
func plainClassifyFromNewRewrite(t *testing.T, js string) string {
|
|
112
|
+
t.Helper()
|
|
113
|
+
s := strings.ReplaceAll(js, `require("typia")`, `require("./typia-stub.cjs")`)
|
|
114
|
+
for from, to := range map[string]string{
|
|
115
|
+
`require("typia/lib/internal/_validateReport")`: `require("./validate-report-stub.cjs")`,
|
|
116
|
+
`require("typia/lib/internal/_createStandardSchema")`: `require("./standard-schema-stub.cjs")`,
|
|
117
|
+
`require("typia/lib/internal/_assertGuard")`: `require("./assert-guard-stub.cjs")`,
|
|
118
|
+
`require("typia/lib/internal/_accessExpressionAsString")`: `require("./access-expression-stub.cjs")`,
|
|
119
|
+
} {
|
|
120
|
+
s = strings.ReplaceAll(s, from, to)
|
|
121
|
+
}
|
|
122
|
+
re := regexp.MustCompile(`require\("typia/lib/internal/([A-Za-z0-9_]+)"\)`)
|
|
123
|
+
for _, m := range re.FindAllStringSubmatch(s, -1) {
|
|
124
|
+
t.Logf("from/new emit references typia/lib/internal/%s (generic-stubbed)", m[1])
|
|
125
|
+
}
|
|
126
|
+
s = re.ReplaceAllString(s, `require("./generic-internal-stub.cjs")`)
|
|
127
|
+
if strings.Contains(s, `require("typia")`) || strings.Contains(s, "typia/lib/internal/") {
|
|
128
|
+
t.Fatalf("unresolved typia import remains after rewrite:\n%s", s)
|
|
129
|
+
}
|
|
130
|
+
return s
|
|
131
|
+
}
|
|
132
|
+
|
|
133
|
+
// plainClassifyFromNewGenericStub returns an identity function for any helper
|
|
134
|
+
// name, so a generated-but-unused internal helper does not break module load.
|
|
135
|
+
const plainClassifyFromNewGenericStub = `module.exports = new Proxy(
|
|
136
|
+
{},
|
|
137
|
+
{ get: () => (x) => x },
|
|
138
|
+
);
|
|
139
|
+
`
|
|
140
|
+
|
|
141
|
+
const plainClassifyFromNewTSConfig = `{
|
|
142
|
+
"compilerOptions": {
|
|
143
|
+
"target": "ES2022",
|
|
144
|
+
"module": "commonjs",
|
|
145
|
+
"moduleResolution": "bundler",
|
|
146
|
+
"ignoreDeprecations": "6.0",
|
|
147
|
+
"types": ["*"],
|
|
148
|
+
"esModuleInterop": true,
|
|
149
|
+
"strict": true,
|
|
150
|
+
"skipLibCheck": true
|
|
151
|
+
},
|
|
152
|
+
"include": ["src"]
|
|
153
|
+
}
|
|
154
|
+
`
|
|
155
|
+
|
|
156
|
+
const plainClassifyFromNewSource = `import typia from "typia";
|
|
157
|
+
|
|
158
|
+
// from: private constructor + static factory returning the instance
|
|
159
|
+
export class Point {
|
|
160
|
+
private constructor(
|
|
161
|
+
public readonly x: number,
|
|
162
|
+
public readonly y: number,
|
|
163
|
+
) {}
|
|
164
|
+
static from(seed: { x: number; y: number }): Point {
|
|
165
|
+
return new Point(seed.x, seed.y);
|
|
166
|
+
}
|
|
167
|
+
sum(): number {
|
|
168
|
+
return this.x + this.y;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
// new: single-argument public constructor
|
|
173
|
+
export class Box {
|
|
174
|
+
value!: number;
|
|
175
|
+
label!: string;
|
|
176
|
+
constructor(seed: { value: number; label: string }) {
|
|
177
|
+
this.value = seed.value;
|
|
178
|
+
this.label = seed.label;
|
|
179
|
+
}
|
|
180
|
+
describe(): string {
|
|
181
|
+
return this.label + ":" + this.value;
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
// new with an inherited single-argument constructor
|
|
186
|
+
export class HttpError extends Error {
|
|
187
|
+
constructor(message?: string) {
|
|
188
|
+
super(message);
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
// rest-only constructor -> the seed is the rest ELEMENT (number)
|
|
193
|
+
export class Bag {
|
|
194
|
+
items: number[];
|
|
195
|
+
constructor(...items: number[]) {
|
|
196
|
+
this.items = items;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// instance form -> field copy (regression: stays Object.create)
|
|
201
|
+
export class Plain {
|
|
202
|
+
id!: number;
|
|
203
|
+
name!: string;
|
|
204
|
+
greet(): string {
|
|
205
|
+
return "hi " + this.name;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
// self-referential SEED: the constructor seed contains the class itself. The
|
|
210
|
+
// top is built via new Tree(seed); a nested Tree inside the seed is field-copied
|
|
211
|
+
// (the Classifiable contract method-strips a nested class in a seed). Codegen
|
|
212
|
+
// must terminate.
|
|
213
|
+
export class Tree {
|
|
214
|
+
value!: number;
|
|
215
|
+
children!: Tree[];
|
|
216
|
+
constructor(seed: { value: number; children: Tree[] }) {
|
|
217
|
+
this.value = seed.value;
|
|
218
|
+
this.children = seed.children;
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
|
|
222
|
+
// any-seed factory: a static from(json: any) must FALL TO field-copy (the
|
|
223
|
+
// any seed collapses the factory arm, matching ClassifiableSeedValue), so
|
|
224
|
+
// J.from must NOT be called at runtime.
|
|
225
|
+
export class J {
|
|
226
|
+
id!: number;
|
|
227
|
+
static fromCalled = false;
|
|
228
|
+
static from(json: any): J {
|
|
229
|
+
J.fromCalled = true;
|
|
230
|
+
const j = new J();
|
|
231
|
+
j.id = json.id;
|
|
232
|
+
return j;
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
export const fromPoint = typia.plain.createClassify<typeof Point>();
|
|
237
|
+
export const newBox = typia.plain.createClassify<typeof Box>();
|
|
238
|
+
export const newError = typia.plain.createClassify<typeof HttpError>();
|
|
239
|
+
export const restBag = typia.plain.createClassify<typeof Bag>();
|
|
240
|
+
export const fieldPlain = typia.plain.createClassify<Plain>();
|
|
241
|
+
export const buildTree = typia.plain.createClassify<typeof Tree>();
|
|
242
|
+
export const classifyJ = typia.plain.createClassify<typeof J>();
|
|
243
|
+
// assert/validate against a class TYPE must validate the SEED, not typeof C's
|
|
244
|
+
// static members (the validation_type redirect).
|
|
245
|
+
export const assertPoint = typia.plain.createAssertClassify<typeof Point>();
|
|
246
|
+
export const validatePoint = typia.plain.createValidateClassify<typeof Point>();
|
|
247
|
+
`
|
|
248
|
+
|
|
249
|
+
const plainClassifyFromNewRuntimeRunner = `const mod = require("./main.cjs");
|
|
250
|
+
|
|
251
|
+
const assert = (cond, msg) => {
|
|
252
|
+
if (!cond) throw new Error(msg);
|
|
253
|
+
};
|
|
254
|
+
|
|
255
|
+
// (1) static factory: C.from(seed) -> real instance + method
|
|
256
|
+
const point = mod.fromPoint({ x: 1, y: 2 });
|
|
257
|
+
assert(point instanceof mod.Point, "point should be a Point instance");
|
|
258
|
+
assert(point.sum() === 3, "Point.from seed should reconstruct (sum), got: " + point.sum());
|
|
259
|
+
|
|
260
|
+
// (2) single-arg constructor: new C(seed)
|
|
261
|
+
const box = mod.newBox({ value: 5, label: "a" });
|
|
262
|
+
assert(box instanceof mod.Box, "box should be a Box instance");
|
|
263
|
+
assert(box.describe() === "a:5", "new Box(seed) should reconstruct, got: " + box.describe());
|
|
264
|
+
|
|
265
|
+
// (3) inherited single-arg constructor
|
|
266
|
+
const err = mod.newError("boom");
|
|
267
|
+
assert(err instanceof mod.HttpError, "err should be an HttpError instance");
|
|
268
|
+
assert(err instanceof Error, "HttpError should still be an Error");
|
|
269
|
+
assert(err.message === "boom", "inherited ctor should pass the seed, got: " + err.message);
|
|
270
|
+
|
|
271
|
+
// (4) rest-only constructor: seed is the element
|
|
272
|
+
const bag = mod.restBag(7);
|
|
273
|
+
assert(bag instanceof mod.Bag, "bag should be a Bag instance");
|
|
274
|
+
assert(Array.isArray(bag.items) && bag.items[0] === 7, "rest seed should reconstruct, got: " + JSON.stringify(bag.items));
|
|
275
|
+
|
|
276
|
+
// (5) instance form -> field copy (regression)
|
|
277
|
+
const plain = mod.fieldPlain({ id: 1, name: "Kim" });
|
|
278
|
+
assert(plain instanceof mod.Plain, "plain should be a Plain instance (field copy)");
|
|
279
|
+
assert(plain.greet() === "hi Kim", "instance field-copy prototype method should work");
|
|
280
|
+
|
|
281
|
+
// (6) self-referential seed terminates: top via new, nested via field copy
|
|
282
|
+
const tree = mod.buildTree({ value: 1, children: [{ value: 2, children: [] }] });
|
|
283
|
+
assert(tree instanceof mod.Tree, "tree should be a Tree instance (new)");
|
|
284
|
+
assert(tree.children[0] instanceof mod.Tree, "nested tree should be a Tree (field copy)");
|
|
285
|
+
assert(tree.children[0].value === 2, "nested tree value should be preserved");
|
|
286
|
+
|
|
287
|
+
// (7) assertClassify<typeof Point> validates the SEED (not typeof C statics)
|
|
288
|
+
assert(mod.assertPoint({ x: 1, y: 2 }) instanceof mod.Point, "assertPoint valid seed -> Point");
|
|
289
|
+
let threw = false;
|
|
290
|
+
try {
|
|
291
|
+
mod.assertPoint({ x: "no", y: 2 });
|
|
292
|
+
} catch (e) {
|
|
293
|
+
threw = true;
|
|
294
|
+
}
|
|
295
|
+
assert(threw, "assertPoint should throw on an invalid seed");
|
|
296
|
+
|
|
297
|
+
// (8) validateClassify<typeof Point> validates the SEED
|
|
298
|
+
const ok = mod.validatePoint({ x: 3, y: 4 });
|
|
299
|
+
assert(ok.success === true, "validatePoint should succeed on a valid seed");
|
|
300
|
+
assert(ok.data instanceof mod.Point, "validatePoint data should be a Point instance");
|
|
301
|
+
const bad = mod.validatePoint({ x: "no", y: 4 });
|
|
302
|
+
assert(bad.success === false, "validatePoint should fail on an invalid seed");
|
|
303
|
+
assert(
|
|
304
|
+
Array.isArray(bad.errors) && bad.errors.length > 0,
|
|
305
|
+
"validatePoint failure should populate errors",
|
|
306
|
+
);
|
|
307
|
+
|
|
308
|
+
// (9) any-seed from falls to field copy: J.from must NOT be called
|
|
309
|
+
const j = mod.classifyJ({ id: 9 });
|
|
310
|
+
assert(j instanceof mod.J, "j should be a J instance (field copy)");
|
|
311
|
+
assert(j.id === 9, "j.id should be field-copied, got: " + j.id);
|
|
312
|
+
assert(mod.J.fromCalled === false, "any-seed from must fall to field-copy, not call J.from");
|
|
313
|
+
`
|
|
314
|
+
|
|
315
|
+
// TestPlainClassifyCrossModuleTransform verifies a class declared in ANOTHER
|
|
316
|
+
// module and referenced only as a TYPE at the call site is value-imported when
|
|
317
|
+
// reconstructed: field-copy (Object.create(Model.prototype)) and from
|
|
318
|
+
// (Factory.from). Without the cross-module value import the emitted module would
|
|
319
|
+
// throw ReferenceError. Two files are transformed (model + main) and run
|
|
320
|
+
// together.
|
|
321
|
+
func TestPlainClassifyCrossModuleTransform(t *testing.T) {
|
|
322
|
+
project := plainClassifyCrossModuleProject(t)
|
|
323
|
+
transform := func(file string) string {
|
|
324
|
+
out, errText, code := ttscTypiaTestCapture(func() int {
|
|
325
|
+
return runTransform([]string{
|
|
326
|
+
"--cwd", project,
|
|
327
|
+
"--tsconfig", "tsconfig.json",
|
|
328
|
+
"--file", file,
|
|
329
|
+
"--output", "js",
|
|
330
|
+
})
|
|
331
|
+
})
|
|
332
|
+
if code != 0 {
|
|
333
|
+
t.Fatalf("transform %s failed: code=%d stderr=\n%s", file, code, errText)
|
|
334
|
+
}
|
|
335
|
+
return out
|
|
336
|
+
}
|
|
337
|
+
modelJS := transform("src/model.ts")
|
|
338
|
+
mainJS := transform("src/main.ts")
|
|
339
|
+
if !strings.Contains(mainJS, "model") {
|
|
340
|
+
t.Fatalf("main module should value-import the cross-module class:\n%s", mainJS)
|
|
341
|
+
}
|
|
342
|
+
plainClassifyCrossModuleRun(t, project, modelJS, mainJS)
|
|
343
|
+
}
|
|
344
|
+
|
|
345
|
+
func plainClassifyCrossModuleProject(t *testing.T) string {
|
|
346
|
+
t.Helper()
|
|
347
|
+
root := ttscTypiaTestRepoRoot(t)
|
|
348
|
+
base := filepath.Join(root, "packages", "typia", "native", ".tmp-ttsc-typia-tests")
|
|
349
|
+
if err := os.MkdirAll(base, 0o755); err != nil {
|
|
350
|
+
t.Fatalf("mkdir temp base: %v", err)
|
|
351
|
+
}
|
|
352
|
+
dir, err := os.MkdirTemp(base, "plain-classify-crossmodule-")
|
|
353
|
+
if err != nil {
|
|
354
|
+
t.Fatalf("create temp fixture: %v", err)
|
|
355
|
+
}
|
|
356
|
+
t.Cleanup(func() { _ = os.RemoveAll(dir) })
|
|
357
|
+
src := filepath.Join(dir, "src")
|
|
358
|
+
if err := os.MkdirAll(src, 0o755); err != nil {
|
|
359
|
+
t.Fatalf("mkdir fixture src: %v", err)
|
|
360
|
+
}
|
|
361
|
+
if err := os.WriteFile(filepath.Join(dir, "tsconfig.json"), []byte(plainClassifyFromNewTSConfig), 0o644); err != nil {
|
|
362
|
+
t.Fatalf("write tsconfig: %v", err)
|
|
363
|
+
}
|
|
364
|
+
if err := os.WriteFile(filepath.Join(src, "model.ts"), []byte(plainClassifyCrossModuleModel), 0o644); err != nil {
|
|
365
|
+
t.Fatalf("write model: %v", err)
|
|
366
|
+
}
|
|
367
|
+
if err := os.WriteFile(filepath.Join(src, "main.ts"), []byte(plainClassifyCrossModuleMain), 0o644); err != nil {
|
|
368
|
+
t.Fatalf("write main: %v", err)
|
|
369
|
+
}
|
|
370
|
+
return dir
|
|
371
|
+
}
|
|
372
|
+
|
|
373
|
+
func plainClassifyCrossModuleRun(t *testing.T, project string, modelJS string, mainJS string) {
|
|
374
|
+
t.Helper()
|
|
375
|
+
node, err := exec.LookPath("node")
|
|
376
|
+
if err != nil {
|
|
377
|
+
t.Skip("node executable not found")
|
|
378
|
+
}
|
|
379
|
+
runtimeDir := filepath.Join(project, "runtime")
|
|
380
|
+
if err := os.MkdirAll(runtimeDir, 0o755); err != nil {
|
|
381
|
+
t.Fatalf("mkdir runtime dir: %v", err)
|
|
382
|
+
}
|
|
383
|
+
ttscTypiaTestWriteCommonRuntimeStubs(t, runtimeDir)
|
|
384
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "generic-internal-stub.cjs"), []byte(plainClassifyFromNewGenericStub), 0o644); err != nil {
|
|
385
|
+
t.Fatalf("write generic stub: %v", err)
|
|
386
|
+
}
|
|
387
|
+
// model.ts has no typia calls; write it as model.js so the typia-injected
|
|
388
|
+
// `require("./model")` value import in main resolves.
|
|
389
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "model.js"), []byte(modelJS), 0o644); err != nil {
|
|
390
|
+
t.Fatalf("write model.js: %v", err)
|
|
391
|
+
}
|
|
392
|
+
if err := os.WriteFile(filepath.Join(runtimeDir, "main.cjs"), []byte(plainClassifyFromNewRewrite(t, mainJS)), 0o644); err != nil {
|
|
393
|
+
t.Fatalf("write main.cjs: %v", err)
|
|
394
|
+
}
|
|
395
|
+
runner := filepath.Join(runtimeDir, "run.cjs")
|
|
396
|
+
if err := os.WriteFile(runner, []byte(plainClassifyCrossModuleRunner), 0o644); err != nil {
|
|
397
|
+
t.Fatalf("write runner: %v", err)
|
|
398
|
+
}
|
|
399
|
+
cmd := exec.Command(node, runner)
|
|
400
|
+
cmd.Dir = runtimeDir
|
|
401
|
+
output, err := cmd.CombinedOutput()
|
|
402
|
+
if err != nil {
|
|
403
|
+
t.Fatalf("cross-module runtime cases failed: %v\n%s", err, output)
|
|
404
|
+
}
|
|
405
|
+
}
|
|
406
|
+
|
|
407
|
+
const plainClassifyCrossModuleModel = `export class Model {
|
|
408
|
+
id!: number;
|
|
409
|
+
greet(): string {
|
|
410
|
+
return "m" + this.id;
|
|
411
|
+
}
|
|
412
|
+
}
|
|
413
|
+
|
|
414
|
+
export class Factory {
|
|
415
|
+
value!: number;
|
|
416
|
+
private constructor(value: number) {
|
|
417
|
+
this.value = value;
|
|
418
|
+
}
|
|
419
|
+
static from(seed: { value: number }): Factory {
|
|
420
|
+
const f = Object.create(Factory.prototype) as Factory;
|
|
421
|
+
(f as { value: number }).value = seed.value;
|
|
422
|
+
return f;
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
|
|
426
|
+
// default-exported field-copy class: the value import must be a DEFAULT import
|
|
427
|
+
export default class Memo {
|
|
428
|
+
text!: string;
|
|
429
|
+
show(): string {
|
|
430
|
+
return this.text;
|
|
431
|
+
}
|
|
432
|
+
}
|
|
433
|
+
`
|
|
434
|
+
|
|
435
|
+
const plainClassifyCrossModuleMain = `import typia from "typia";
|
|
436
|
+
import type Memo, { Model, Factory } from "./model";
|
|
437
|
+
|
|
438
|
+
export const classifyModel = typia.plain.createClassify<Model>();
|
|
439
|
+
export const classifyFactory = typia.plain.createClassify<typeof Factory>();
|
|
440
|
+
export const classifyMemo = typia.plain.createClassify<Memo>();
|
|
441
|
+
`
|
|
442
|
+
|
|
443
|
+
const plainClassifyCrossModuleRunner = `const model = require("./model.js");
|
|
444
|
+
const main = require("./main.cjs");
|
|
445
|
+
|
|
446
|
+
const assert = (cond, msg) => {
|
|
447
|
+
if (!cond) throw new Error(msg);
|
|
448
|
+
};
|
|
449
|
+
|
|
450
|
+
// cross-module field copy: Model is imported only as a TYPE at the call site,
|
|
451
|
+
// so the emitted module must add a VALUE import to reach Model.prototype.
|
|
452
|
+
const m = main.classifyModel({ id: 3 });
|
|
453
|
+
assert(m instanceof model.Model, "cross-module field-copy should yield a Model instance");
|
|
454
|
+
assert(m.greet() === "m3", "Model method should work, got: " + m.greet());
|
|
455
|
+
|
|
456
|
+
// cross-module from construction
|
|
457
|
+
const w = main.classifyFactory({ value: 7 });
|
|
458
|
+
assert(w instanceof model.Factory, "cross-module from should yield a Factory instance");
|
|
459
|
+
assert(w.value === 7, "Factory.from seed should reconstruct, got: " + w.value);
|
|
460
|
+
|
|
461
|
+
// cross-module DEFAULT-export field copy: the value import must be a default import
|
|
462
|
+
const memo = main.classifyMemo({ text: "hi" });
|
|
463
|
+
assert(memo instanceof model.default, "cross-module default-export field-copy should yield a Memo instance");
|
|
464
|
+
assert(memo.show() === "hi", "Memo method should work, got: " + memo.show());
|
|
465
|
+
`
|