typia 13.1.1 → 13.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -0
- package/lib/_virtual/_rolldown/runtime.mjs +1 -5
- package/lib/executable/FileSystemIdentity.d.ts +44 -0
- package/lib/executable/FileSystemIdentity.js +213 -0
- package/lib/executable/FileSystemIdentity.js.map +1 -0
- package/lib/executable/FileSystemIdentity.mjs +133 -0
- package/lib/executable/FileSystemIdentity.mjs.map +1 -0
- package/lib/executable/TypiaGenerateWizard.js +272 -106
- package/lib/executable/TypiaGenerateWizard.js.map +1 -1
- package/lib/executable/TypiaGenerateWizard.mjs +239 -95
- package/lib/executable/TypiaGenerateWizard.mjs.map +1 -1
- package/lib/functional.d.ts +15 -12
- package/lib/functional.js.map +1 -1
- package/lib/functional.mjs.map +1 -1
- package/lib/internal/_ProtobufReader.d.ts +32 -0
- package/lib/internal/_ProtobufReader.js +148 -48
- package/lib/internal/_ProtobufReader.js.map +1 -1
- package/lib/internal/_ProtobufReader.mjs +137 -41
- package/lib/internal/_ProtobufReader.mjs.map +1 -1
- package/lib/internal/_createStandardSchema.js +18 -1
- package/lib/internal/_createStandardSchema.js.map +1 -1
- package/lib/internal/_createStandardSchema.mjs +12 -1
- package/lib/internal/_createStandardSchema.mjs.map +1 -1
- package/lib/internal/_decimal.d.ts +14 -0
- package/lib/internal/_decimal.js +61 -0
- package/lib/internal/_decimal.js.map +1 -0
- package/lib/internal/_decimal.mjs +49 -0
- package/lib/internal/_decimal.mjs.map +1 -0
- package/lib/internal/_httpQueryParseURLSearchParams.js +23 -2
- package/lib/internal/_httpQueryParseURLSearchParams.js.map +1 -1
- package/lib/internal/_httpQueryParseURLSearchParams.mjs +20 -2
- package/lib/internal/_httpQueryParseURLSearchParams.mjs.map +1 -1
- package/lib/internal/_isFormatByte.js +2 -5
- package/lib/internal/_isFormatByte.js.map +1 -1
- package/lib/internal/_isFormatByte.mjs +2 -5
- package/lib/internal/_isFormatByte.mjs.map +1 -1
- package/lib/internal/_isFormatDate.js +15 -2
- package/lib/internal/_isFormatDate.js.map +1 -1
- package/lib/internal/_isFormatDate.mjs +22 -2
- package/lib/internal/_isFormatDate.mjs.map +1 -1
- package/lib/internal/_isFormatDateTime.js +21 -2
- package/lib/internal/_isFormatDateTime.js.map +1 -1
- package/lib/internal/_isFormatDateTime.mjs +13 -2
- package/lib/internal/_isFormatDateTime.mjs.map +1 -1
- package/lib/internal/_isFormatIri.js +3 -2
- package/lib/internal/_isFormatIri.js.map +1 -1
- package/lib/internal/_isFormatIri.mjs +3 -2
- package/lib/internal/_isFormatIri.mjs.map +1 -1
- package/lib/internal/_isFormatIriReference.js +10 -2
- package/lib/internal/_isFormatIriReference.js.map +1 -1
- package/lib/internal/_isFormatIriReference.mjs +9 -2
- package/lib/internal/_isFormatIriReference.mjs.map +1 -1
- package/lib/internal/_isFormatUriReference.js +1 -1
- package/lib/internal/_isFormatUriReference.js.map +1 -1
- package/lib/internal/_isFormatUriReference.mjs +1 -1
- package/lib/internal/_isFormatUriReference.mjs.map +1 -1
- package/lib/internal/_isMultipleOf.d.ts +1 -0
- package/lib/internal/_isMultipleOf.js +13 -0
- package/lib/internal/_isMultipleOf.js.map +1 -0
- package/lib/internal/_isMultipleOf.mjs +12 -0
- package/lib/internal/_isMultipleOf.mjs.map +1 -0
- package/lib/internal/_isTypeFloat.js +1 -1
- package/lib/internal/_isTypeFloat.js.map +1 -1
- package/lib/internal/_isTypeFloat.mjs +1 -1
- package/lib/internal/_isTypeFloat.mjs.map +1 -1
- package/lib/internal/_isTypeInt64.js +1 -0
- package/lib/internal/_isTypeInt64.js.map +1 -1
- package/lib/internal/_isTypeInt64.mjs.map +1 -1
- package/lib/internal/_isTypeInt64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeInt64Bigint.js +15 -0
- package/lib/internal/_isTypeInt64Bigint.js.map +1 -0
- package/lib/internal/_isTypeInt64Bigint.mjs +8 -0
- package/lib/internal/_isTypeInt64Bigint.mjs.map +1 -0
- package/lib/internal/_isTypeUint64.js +1 -0
- package/lib/internal/_isTypeUint64.js.map +1 -1
- package/lib/internal/_isTypeUint64.mjs.map +1 -1
- package/lib/internal/_isTypeUint64Bigint.d.ts +1 -0
- package/lib/internal/_isTypeUint64Bigint.js +10 -0
- package/lib/internal/_isTypeUint64Bigint.js.map +1 -0
- package/lib/internal/_isTypeUint64Bigint.mjs +8 -0
- package/lib/internal/_isTypeUint64Bigint.mjs.map +1 -0
- package/lib/internal/_isUniqueItems.js +96 -109
- package/lib/internal/_isUniqueItems.js.map +1 -1
- package/lib/internal/_isUniqueItems.mjs +62 -50
- package/lib/internal/_isUniqueItems.mjs.map +1 -1
- package/lib/internal/_jsonStringifyArray.d.ts +1 -0
- package/lib/internal/_jsonStringifyArray.js +48 -0
- package/lib/internal/_jsonStringifyArray.js.map +1 -0
- package/lib/internal/_jsonStringifyArray.mjs +40 -0
- package/lib/internal/_jsonStringifyArray.mjs.map +1 -0
- package/lib/internal/_jsonStringifyElement.d.ts +1 -0
- package/lib/internal/_jsonStringifyElement.js +23 -0
- package/lib/internal/_jsonStringifyElement.js.map +1 -0
- package/lib/internal/_jsonStringifyElement.mjs +23 -0
- package/lib/internal/_jsonStringifyElement.mjs.map +1 -0
- package/lib/internal/_jsonStringifyProperty.d.ts +1 -0
- package/lib/internal/_jsonStringifyProperty.js +31 -0
- package/lib/internal/_jsonStringifyProperty.js.map +1 -0
- package/lib/internal/_jsonStringifyProperty.mjs +31 -0
- package/lib/internal/_jsonStringifyProperty.mjs.map +1 -0
- package/lib/internal/_llmApplicationFinalize.js +1 -1
- package/lib/internal/_llmApplicationFinalize.js.map +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs +1 -1
- package/lib/internal/_llmApplicationFinalize.mjs.map +1 -1
- package/lib/internal/_notationAny.js +8 -1
- package/lib/internal/_notationAny.js.map +1 -1
- package/lib/internal/_notationAny.mjs +7 -1
- package/lib/internal/_notationAny.mjs.map +1 -1
- package/lib/internal/_notationAssign.d.ts +1 -0
- package/lib/internal/_notationAssign.js +18 -0
- package/lib/internal/_notationAssign.js.map +1 -0
- package/lib/internal/_notationAssign.mjs +17 -0
- package/lib/internal/_notationAssign.mjs.map +1 -0
- package/lib/internal/_notationCamel.js +30 -9
- package/lib/internal/_notationCamel.js.map +1 -1
- package/lib/internal/_notationCamel.mjs +13 -5
- package/lib/internal/_notationCamel.mjs.map +1 -1
- package/lib/internal/_notationKebab.d.ts +1 -0
- package/lib/internal/_notationKebab.js +15 -0
- package/lib/internal/_notationKebab.js.map +1 -0
- package/lib/internal/_notationKebab.mjs +15 -0
- package/lib/internal/_notationKebab.mjs.map +1 -0
- package/lib/internal/_notationKeyCollision.d.ts +1 -0
- package/lib/internal/_notationKeyCollision.js +8 -0
- package/lib/internal/_notationKeyCollision.js.map +1 -0
- package/lib/internal/_notationKeyCollision.mjs +8 -0
- package/lib/internal/_notationKeyCollision.mjs.map +1 -0
- package/lib/internal/_notationPascal.js +20 -5
- package/lib/internal/_notationPascal.js.map +1 -1
- package/lib/internal/_notationPascal.mjs +10 -5
- package/lib/internal/_notationPascal.mjs.map +1 -1
- package/lib/internal/_notationSnake.js +25 -22
- package/lib/internal/_notationSnake.js.map +1 -1
- package/lib/internal/_notationSnake.mjs +11 -11
- package/lib/internal/_notationSnake.mjs.map +1 -1
- package/lib/internal/_plainCloneAny.js +174 -38
- package/lib/internal/_plainCloneAny.js.map +1 -1
- package/lib/internal/_plainCloneAny.mjs +126 -22
- package/lib/internal/_plainCloneAny.mjs.map +1 -1
- package/lib/internal/_randomArray.d.ts +1 -1
- package/lib/internal/_randomArray.js +11 -4
- package/lib/internal/_randomArray.js.map +1 -1
- package/lib/internal/_randomArray.mjs +9 -3
- package/lib/internal/_randomArray.mjs.map +1 -1
- package/lib/internal/_randomFormatByte.d.ts +2 -1
- package/lib/internal/_randomFormatByte.js +25 -1
- package/lib/internal/_randomFormatByte.js.map +1 -1
- package/lib/internal/_randomFormatByte.mjs +20 -1
- package/lib/internal/_randomFormatByte.mjs.map +1 -1
- package/lib/internal/_randomFormatDate.d.ts +3 -4
- package/lib/internal/_randomFormatDate.js +3 -10
- package/lib/internal/_randomFormatDate.js.map +1 -1
- package/lib/internal/_randomFormatDate.mjs +3 -6
- package/lib/internal/_randomFormatDate.mjs.map +1 -1
- package/lib/internal/_randomFormatDatetime.d.ts +3 -4
- package/lib/internal/_randomFormatDatetime.js +26 -8
- package/lib/internal/_randomFormatDatetime.js.map +1 -1
- package/lib/internal/_randomFormatDatetime.mjs +17 -6
- package/lib/internal/_randomFormatDatetime.mjs.map +1 -1
- package/lib/internal/_randomFormatDuration.d.ts +2 -1
- package/lib/internal/_randomFormatDuration.js +23 -14
- package/lib/internal/_randomFormatDuration.js.map +1 -1
- package/lib/internal/_randomFormatDuration.mjs +22 -13
- package/lib/internal/_randomFormatDuration.mjs.map +1 -1
- package/lib/internal/_randomFormatEmail.d.ts +2 -1
- package/lib/internal/_randomFormatEmail.js +8 -1
- package/lib/internal/_randomFormatEmail.js.map +1 -1
- package/lib/internal/_randomFormatEmail.mjs +5 -1
- package/lib/internal/_randomFormatEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatHostname.d.ts +8 -1
- package/lib/internal/_randomFormatHostname.js +45 -2
- package/lib/internal/_randomFormatHostname.js.map +1 -1
- package/lib/internal/_randomFormatHostname.mjs +38 -2
- package/lib/internal/_randomFormatHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.d.ts +2 -1
- package/lib/internal/_randomFormatIdnEmail.js +16 -2
- package/lib/internal/_randomFormatIdnEmail.js.map +1 -1
- package/lib/internal/_randomFormatIdnEmail.mjs +11 -2
- package/lib/internal/_randomFormatIdnEmail.mjs.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.d.ts +2 -1
- package/lib/internal/_randomFormatIdnHostname.js +26 -1
- package/lib/internal/_randomFormatIdnHostname.js.map +1 -1
- package/lib/internal/_randomFormatIdnHostname.mjs +25 -2
- package/lib/internal/_randomFormatIdnHostname.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv4.d.ts +2 -1
- package/lib/internal/_randomFormatIpv4.js +32 -1
- package/lib/internal/_randomFormatIpv4.js.map +1 -1
- package/lib/internal/_randomFormatIpv4.mjs +23 -1
- package/lib/internal/_randomFormatIpv4.mjs.map +1 -1
- package/lib/internal/_randomFormatIpv6.d.ts +2 -1
- package/lib/internal/_randomFormatIpv6.js +58 -1
- package/lib/internal/_randomFormatIpv6.js.map +1 -1
- package/lib/internal/_randomFormatIpv6.mjs +45 -1
- package/lib/internal/_randomFormatIpv6.mjs.map +1 -1
- package/lib/internal/_randomFormatIri.d.ts +2 -1
- package/lib/internal/_randomFormatIri.js +1 -1
- package/lib/internal/_randomFormatIri.js.map +1 -1
- package/lib/internal/_randomFormatIri.mjs +1 -1
- package/lib/internal/_randomFormatIri.mjs.map +1 -1
- package/lib/internal/_randomFormatIriReference.d.ts +2 -1
- package/lib/internal/_randomFormatIriReference.js +1 -1
- package/lib/internal/_randomFormatIriReference.js.map +1 -1
- package/lib/internal/_randomFormatIriReference.mjs +1 -1
- package/lib/internal/_randomFormatIriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatJsonPointer.js +20 -1
- package/lib/internal/_randomFormatJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatJsonPointer.mjs +15 -1
- package/lib/internal/_randomFormatJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatPassword.d.ts +2 -1
- package/lib/internal/_randomFormatPassword.js +7 -5
- package/lib/internal/_randomFormatPassword.js.map +1 -1
- package/lib/internal/_randomFormatPassword.mjs +5 -1
- package/lib/internal/_randomFormatPassword.mjs.map +1 -1
- package/lib/internal/_randomFormatRegex.d.ts +2 -1
- package/lib/internal/_randomFormatRegex.js +15 -1
- package/lib/internal/_randomFormatRegex.js.map +1 -1
- package/lib/internal/_randomFormatRegex.mjs +14 -1
- package/lib/internal/_randomFormatRegex.mjs.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.d.ts +2 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.js +20 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.js.map +1 -1
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs +21 -5
- package/lib/internal/_randomFormatRelativeJsonPointer.mjs.map +1 -1
- package/lib/internal/_randomFormatTime.d.ts +2 -1
- package/lib/internal/_randomFormatTime.js +34 -7
- package/lib/internal/_randomFormatTime.js.map +1 -1
- package/lib/internal/_randomFormatTime.mjs +37 -4
- package/lib/internal/_randomFormatTime.mjs.map +1 -1
- package/lib/internal/_randomFormatUri.d.ts +2 -1
- package/lib/internal/_randomFormatUri.js +1 -1
- package/lib/internal/_randomFormatUri.js.map +1 -1
- package/lib/internal/_randomFormatUri.mjs +1 -1
- package/lib/internal/_randomFormatUri.mjs.map +1 -1
- package/lib/internal/_randomFormatUriReference.d.ts +2 -1
- package/lib/internal/_randomFormatUriReference.js +1 -1
- package/lib/internal/_randomFormatUriReference.js.map +1 -1
- package/lib/internal/_randomFormatUriReference.mjs +1 -1
- package/lib/internal/_randomFormatUriReference.mjs.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.d.ts +2 -1
- package/lib/internal/_randomFormatUriTemplate.js +1 -1
- package/lib/internal/_randomFormatUriTemplate.js.map +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs +1 -1
- package/lib/internal/_randomFormatUriTemplate.mjs.map +1 -1
- package/lib/internal/_randomFormatUrl.d.ts +2 -1
- package/lib/internal/_randomFormatUrl.js +21 -1
- package/lib/internal/_randomFormatUrl.js.map +1 -1
- package/lib/internal/_randomFormatUrl.mjs +18 -1
- package/lib/internal/_randomFormatUrl.mjs.map +1 -1
- package/lib/internal/_randomFormatUuid.d.ts +2 -1
- package/lib/internal/_randomFormatUuid.js +3 -2
- package/lib/internal/_randomFormatUuid.js.map +1 -1
- package/lib/internal/_randomFormatUuid.mjs +3 -2
- package/lib/internal/_randomFormatUuid.mjs.map +1 -1
- package/lib/internal/_randomInteger.js +59 -28
- package/lib/internal/_randomInteger.js.map +1 -1
- package/lib/internal/_randomInteger.mjs +56 -16
- package/lib/internal/_randomInteger.mjs.map +1 -1
- package/lib/internal/_randomMultiple.d.ts +8 -0
- package/lib/internal/_randomMultiple.js +168 -0
- package/lib/internal/_randomMultiple.js.map +1 -0
- package/lib/internal/_randomMultiple.mjs +158 -0
- package/lib/internal/_randomMultiple.mjs.map +1 -0
- package/lib/internal/_randomNumber.js +42 -42
- package/lib/internal/_randomNumber.js.map +1 -1
- package/lib/internal/_randomNumber.mjs +41 -27
- package/lib/internal/_randomNumber.mjs.map +1 -1
- package/lib/internal/_randomPattern.d.ts +2 -1
- package/lib/internal/_randomPattern.js +19 -4
- package/lib/internal/_randomPattern.js.map +1 -1
- package/lib/internal/_randomPattern.mjs +10 -4
- package/lib/internal/_randomPattern.mjs.map +1 -1
- package/lib/internal/_randomStringLength.d.ts +64 -0
- package/lib/internal/_randomStringLength.js +84 -0
- package/lib/internal/_randomStringLength.js.map +1 -0
- package/lib/internal/_randomStringLength.mjs +79 -0
- package/lib/internal/_randomStringLength.mjs.map +1 -0
- package/lib/internal/_stringLength.d.ts +1 -0
- package/lib/internal/_stringLength.js +11 -0
- package/lib/internal/_stringLength.js.map +1 -0
- package/lib/internal/_stringLength.mjs +10 -0
- package/lib/internal/_stringLength.mjs.map +1 -0
- package/lib/internal/_validateReport.js +4 -1
- package/lib/internal/_validateReport.js.map +1 -1
- package/lib/internal/_validateReport.mjs +2 -1
- package/lib/internal/_validateReport.mjs.map +1 -1
- package/lib/internal/private/__notationRename.d.ts +14 -0
- package/lib/internal/private/__notationRename.js +25 -0
- package/lib/internal/private/__notationRename.js.map +1 -0
- package/lib/internal/private/__notationRename.mjs +24 -0
- package/lib/internal/private/__notationRename.mjs.map +1 -0
- package/lib/internal/private/__randomComposition.d.ts +23 -0
- package/lib/internal/private/__randomComposition.js +48 -0
- package/lib/internal/private/__randomComposition.js.map +1 -0
- package/lib/internal/private/__randomComposition.mjs +54 -0
- package/lib/internal/private/__randomComposition.mjs.map +1 -0
- package/lib/internal/private/__randomEpoch.d.ts +19 -0
- package/lib/internal/private/__randomEpoch.js +31 -0
- package/lib/internal/private/__randomEpoch.js.map +1 -0
- package/lib/internal/private/__randomEpoch.mjs +28 -0
- package/lib/internal/private/__randomEpoch.mjs.map +1 -0
- package/lib/json.d.ts +2 -2
- package/lib/json.mjs.map +1 -1
- package/lib/module.d.ts +2 -2
- package/lib/module.js.map +1 -1
- package/lib/module.mjs.map +1 -1
- package/lib/notations.d.ts +20 -4
- package/lib/notations.js.map +1 -1
- package/lib/notations.mjs.map +1 -1
- package/native/adapter/plugin_options.go +117 -0
- package/native/adapter/plugin_options_payload_matrix_test.go +181 -0
- package/native/cmd/ttsc-typia/any_array_type_tags_transform_test.go +63 -9
- package/native/cmd/ttsc-typia/assert_guard_factory_contract_test.go +152 -0
- package/native/cmd/ttsc-typia/build.go +84 -64
- package/native/cmd/ttsc-typia/build_no_emit_preserves_analysis_options_test.go +67 -0
- package/native/cmd/ttsc-typia/build_no_emit_transform_diagnostics_test.go +138 -0
- package/native/cmd/ttsc-typia/build_plugin_options_come_from_payload_test.go +48 -0
- package/native/cmd/ttsc-typia/build_transactional_emit_success_test.go +81 -0
- package/native/cmd/ttsc-typia/build_transform_failure_atomicity_test.go +138 -0
- package/native/cmd/ttsc-typia/callable_interface_function_semantics_transform_test.go +331 -0
- package/native/cmd/ttsc-typia/callable_type_literal_boundaries_transform_test.go +1184 -0
- package/native/cmd/ttsc-typia/command_routes_and_diagnostics_coverage_test.go +3 -1
- package/native/cmd/ttsc-typia/compare_functional_union_membership_transform_test.go +434 -0
- package/native/cmd/ttsc-typia/compare_less_nan_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/compare_native_object_overmatch_transform_test.go +161 -0
- package/native/cmd/ttsc-typia/compare_nondiscriminable_union_transform_test.go +343 -0
- package/native/cmd/ttsc-typia/compare_template_literal_union_transform_test.go +241 -0
- package/native/cmd/ttsc-typia/compare_union_discrimination_transform_test.go +289 -0
- package/native/cmd/ttsc-typia/default_library_spoof_native_identity_transform_test.go +216 -0
- package/native/cmd/ttsc-typia/escaped_property_key_path_transform_test.go +193 -0
- package/native/cmd/ttsc-typia/finite_option_number_leaf_transform_test.go +240 -0
- package/native/cmd/ttsc-typia/functional_promised_type_transform_test.go +220 -0
- package/native/cmd/ttsc-typia/functional_receiver_transform_test.go +232 -0
- package/native/cmd/ttsc-typia/is_object_function_member_transform_test.go +205 -0
- package/native/cmd/ttsc-typia/json_application_alias_function_validation_transform_test.go +151 -0
- package/native/cmd/ttsc-typia/json_is_stringify_finite_number_transform_test.go +198 -0
- package/native/cmd/ttsc-typia/json_schema_dynamic_key_determinism_transform_test.go +246 -0
- package/native/cmd/ttsc-typia/json_stringify_contextual_undefined_transform_test.go +556 -0
- package/native/cmd/ttsc-typia/json_stringify_special_key_transform_test.go +238 -0
- package/native/cmd/ttsc-typia/lib_replacement_native_identity_transform_test.go +277 -0
- package/native/cmd/ttsc-typia/main_wasm.go +21 -2
- package/native/cmd/ttsc-typia/native_collection_identity_is_transform_test.go +234 -0
- package/native/cmd/ttsc-typia/native_generic_name_guard_is_transform_test.go +194 -0
- package/native/cmd/ttsc-typia/native_name_collision_is_transform_test.go +204 -0
- package/native/cmd/ttsc-typia/native_named_intersection_union_transform_test.go +390 -0
- package/native/cmd/ttsc-typia/node_buffer_native_exports_is_transform_test.go +526 -0
- package/native/cmd/ttsc-typia/non_trailing_rest_tuple_transform_test.go +23 -11
- package/native/cmd/ttsc-typia/notation_dynamic_keys_transform_test.go +286 -0
- package/native/cmd/ttsc-typia/notation_kebab_case_transform_test.go +1 -1
- package/native/cmd/ttsc-typia/notation_literal_collision_transform_test.go +164 -0
- package/native/cmd/ttsc-typia/notation_pascal_case_transform_test.go +230 -0
- package/native/cmd/ttsc-typia/notation_unicode_key_transform_test.go +309 -0
- package/native/cmd/ttsc-typia/package_declaration_native_identity_is_transform_test.go +293 -0
- package/native/cmd/ttsc-typia/pattern_line_terminator_escape_transform_test.go +224 -0
- package/native/cmd/ttsc-typia/plain_prune_union_object_overmatch_transform_test.go +219 -0
- package/native/cmd/ttsc-typia/plugin_options_payload_helpers_test.go +181 -0
- package/native/cmd/ttsc-typia/private_field_filter_is_transform_test.go +278 -0
- package/native/cmd/ttsc-typia/project_catalog_transform_coverage_test.go +73 -27
- package/native/cmd/ttsc-typia/project_dependencies_barrel_reexport_transform_test.go +120 -0
- package/native/cmd/ttsc-typia/project_dependencies_collapsed_alias_transform_test.go +134 -0
- package/native/cmd/ttsc-typia/project_dependencies_custom_lib_name_transform_test.go +135 -0
- package/native/cmd/ttsc-typia/project_dependencies_default_barrel_transform_test.go +114 -0
- package/native/cmd/ttsc-typia/project_dependencies_empty_heritage_transform_test.go +100 -0
- package/native/cmd/ttsc-typia/project_dependencies_envelope_transform_test.go +148 -0
- package/native/cmd/ttsc-typia/project_dependencies_index_signature_alias_transform_test.go +139 -0
- package/native/cmd/ttsc-typia/project_dependencies_local_reexport_transform_test.go +122 -0
- package/native/cmd/ttsc-typia/project_dependencies_signature_alias_transform_test.go +125 -0
- package/native/cmd/ttsc-typia/project_dependencies_star_barrel_transform_test.go +112 -0
- package/native/cmd/ttsc-typia/project_reference_graph_envelope_transform_test.go +190 -0
- package/native/cmd/ttsc-typia/protobuf_diagnostic_code_transform_test.go +167 -0
- package/native/cmd/ttsc-typia/protobuf_is_encode_finite_number_transform_test.go +98 -0
- package/native/cmd/ttsc-typia/protobuf_sequence_field_numbers_transform_test.go +52 -22
- package/native/cmd/ttsc-typia/symbol_index_domain_transform_test.go +316 -0
- package/native/cmd/ttsc-typia/symbol_key_member_filter_transform_test.go +279 -0
- package/native/cmd/ttsc-typia/template_interpolation_type_tags_transform_test.go +86 -23
- package/native/cmd/ttsc-typia/template_literal_type_tags_transform_test.go +3 -1
- package/native/cmd/ttsc-typia/transform.go +251 -39
- package/native/cmd/ttsc-typia/{transform_declaration_source_produces_no_js_test.go → transform_declaration_source_produces_no_javascript_test.go} +10 -2
- package/native/cmd/ttsc-typia/transform_fixtures_emit_coverage_test.go +21 -4
- package/native/cmd/ttsc-typia/transform_helpers_test.go +236 -3
- package/native/cmd/ttsc-typia/transform_plugin_options_come_from_payload_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_atomicity_test.go +114 -0
- package/native/cmd/ttsc-typia/transform_single_file_failure_writes_no_stdout_test.go +43 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_distinguishes_same_basename_sources_test.go +81 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_empty_emit_reports_no_output_test.go +100 -0
- package/native/cmd/ttsc-typia/transform_single_file_js_locates_output_across_layouts_test.go +160 -0
- package/native/cmd/ttsc-typia/transform_single_file_success_publishes_artifact_test.go +54 -0
- package/native/cmd/ttsc-typia/transform_wasm_host_argv_reports_diagnostics_test.go +39 -0
- package/native/cmd/ttsc-typia/tuple_optional_compare_clone_transform_test.go +227 -0
- package/native/cmd/ttsc-typia/user_global_native_identity_transform_test.go +484 -0
- package/native/core/factories/FormatCheatSheet.go +40 -7
- package/native/core/factories/IdentifierFactory.go +131 -4
- package/native/core/factories/MetadataCommentTagFactory.go +83 -40
- package/native/core/factories/MetadataTypeTagFactory.go +13 -1
- package/native/core/factories/NumericRangeFactory.go +60 -17
- package/native/core/factories/ProtobufFactory.go +13 -5
- package/native/core/factories/factory_utility_coverage_test.go +8 -2
- package/native/core/factories/format_alias_resolves_to_cheat_sheet_test.go +57 -0
- package/native/core/factories/format_alias_table_targets_the_cheat_sheet_test.go +44 -0
- package/native/core/factories/identifier_factory_postfix_escapes_every_key_test.go +147 -0
- package/native/core/factories/identifier_factory_postfix_survives_every_code_point_test.go +86 -0
- package/native/core/factories/internal/metadata/MetadataHelper.go +226 -17
- package/native/core/factories/internal/metadata/emplace_metadata_object.go +141 -8
- package/native/core/factories/internal/metadata/iterate_metadata.go +6 -0
- package/native/core/factories/internal/metadata/iterate_metadata_function.go +5 -12
- package/native/core/factories/internal/metadata/iterate_metadata_intersection.go +111 -29
- package/native/core/factories/internal/metadata/iterate_metadata_map.go +5 -0
- package/native/core/factories/internal/metadata/iterate_metadata_native.go +45 -2
- package/native/core/factories/internal/metadata/iterate_metadata_set.go +5 -0
- package/native/core/factories/internal/metadata/type_arguments_precondition_test.go +70 -0
- package/native/core/factories/metadata_comment_tag_factory_coverage_test.go +39 -0
- package/native/core/factories/metadata_comment_tag_factory_exclusivity_matches_interface_test.go +84 -0
- package/native/core/factories/metadata_type_tag_factory_accepts_legal_tag_combinations_test.go +60 -0
- package/native/core/factories/metadata_type_tag_factory_declarations_test.go +86 -0
- package/native/core/factories/metadata_type_tag_factory_keeps_bool_form_exclusivity_test.go +38 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_cross_kind_exclusive_tags_test.go +65 -0
- package/native/core/factories/metadata_type_tag_factory_rejects_duplicated_array_form_tags_test.go +41 -0
- package/native/core/factories/numeric_range_factory_enforces_64bit_bounds_test.go +69 -0
- package/native/core/factories/protobuf_recovery_ownership_test.go +64 -0
- package/native/core/programmers/IsProgrammer.go +15 -1
- package/native/core/programmers/RandomProgrammer.go +51 -14
- package/native/core/programmers/compare/CompareEqualProgrammer.go +410 -8
- package/native/core/programmers/compare/CompareLessProgrammer.go +4 -2
- package/native/core/programmers/functional/FunctionalAssertFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalAssertParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalAssertReturnProgrammer.go +6 -14
- package/native/core/programmers/functional/FunctionalIsFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalIsParametersProgrammer.go +49 -14
- package/native/core/programmers/functional/FunctionalIsReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateFunctionProgrammer.go +4 -6
- package/native/core/programmers/functional/FunctionalValidateParametersProgrammer.go +5 -13
- package/native/core/programmers/functional/FunctionalValidateReturnProgrammer.go +5 -13
- package/native/core/programmers/functional/internal/FunctionalGeneralProgrammer.go +4 -17
- package/native/core/programmers/helpers/CloneJoiner.go +32 -0
- package/native/core/programmers/helpers/FunctionProgrammer.go +6 -13
- package/native/core/programmers/helpers/NotationJoiner.go +86 -28
- package/native/core/programmers/helpers/StringifyJoinder.go +161 -51
- package/native/core/programmers/helpers/UnionExplorer.go +203 -61
- package/native/core/programmers/helpers/joiner_branch_coverage_test.go +116 -118
- package/native/core/programmers/helpers/union_explorer_coverage_test.go +1 -1
- package/native/core/programmers/internal/CheckerProgrammer.go +100 -48
- package/native/core/programmers/iterate/check_template.go +344 -32
- package/native/core/programmers/iterate/iterate_check_coverage_test.go +76 -158
- package/native/core/programmers/iterate/iterate_utility_coverage_test.go +231 -270
- package/native/core/programmers/iterate/json_schema_discriminator.go +36 -10
- package/native/core/programmers/iterate/json_schema_discriminator_declaration_syntax_test.go +205 -0
- package/native/core/programmers/iterate/json_schema_object.go +49 -7
- package/native/core/programmers/iterate/json_schema_pattern_property_order_test.go +44 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader.go +674 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_boolean_default_test.go +95 -0
- package/native/core/programmers/iterate/openapi_v3_downgrader_test.go +123 -0
- package/native/core/programmers/iterate/template_interpolation_tags_test.go +40 -8
- package/native/core/programmers/iterate/template_runtime_pattern.go +63 -7
- package/native/core/programmers/json/JsonApplicationProgrammer.go +45 -11
- package/native/core/programmers/json/JsonSchemasProgrammer.go +12 -2
- package/native/core/programmers/json/JsonStringifyProgrammer.go +47 -6
- package/native/core/programmers/llm/LlmApplicationProgrammer.go +21 -11
- package/native/core/programmers/llm/LlmSchemaProgrammer.go +23 -6
- package/native/core/programmers/llm/llm_reference_codec_test.go +24 -0
- package/native/core/programmers/notations/NotationGeneralProgrammer.go +183 -67
- package/native/core/programmers/notations/notation_general_helpers_test.go +1 -3
- package/native/core/programmers/notations/notation_general_programmer_pascal_multiword_test.go +72 -0
- package/native/core/programmers/notations/notation_general_programmer_underscore_boundary_test.go +68 -0
- package/native/core/programmers/plain/PlainClassifyProgrammer.go +23 -15
- package/native/core/programmers/plain/PlainCloneProgrammer.go +20 -7
- package/native/core/programmers/plain/PlainPruneProgrammer.go +19 -5
- package/native/core/programmers/plain/plain_tuple_seed_recovery_ownership_test.go +25 -0
- package/native/core/programmers/protobuf/ProtobufDecodeProgrammer.go +37 -28
- package/native/core/programmers/protobuf/ProtobufMessageProgrammer.go +41 -22
- package/native/core/programmers/protobuf/protobuf_programmer_helper_coverage_test.go +26 -0
- package/native/core/programmers/random_programmer_length_argument_test.go +53 -0
- package/native/core/schemas/metadata/MetadataCollection.go +266 -25
- package/native/core/schemas/metadata/MetadataDefaultLibrary.go +81 -0
- package/native/core/schemas/metadata/MetadataDependency.go +388 -0
- package/native/core/schemas/metadata/MetadataObjectType.go +24 -22
- package/native/core/schemas/metadata/metadata_collection_generic_argument_dot_test.go +122 -0
- package/native/core/schemas/metadata/metadata_collection_name_allocation_test.go +147 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_cascade_test.go +55 -0
- package/native/core/schemas/metadata/metadata_collection_openapi_name_test.go +68 -0
- package/native/core/utils/PatternUtil.go +13 -0
- package/native/core/utils/PromiseTypeFactory.go +59 -0
- package/native/core/utils/ProtobufNameEncoder.go +8 -0
- package/native/core/utils/promise_type_factory_semantics_test.go +118 -0
- package/native/go.mod +9 -1
- package/native/transform/CallExpressionTransformer.go +12 -0
- package/native/transform/features/json/JsonApplicationTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemaTransformer.go +1 -1
- package/native/transform/features/json/JsonSchemasTransformer.go +5 -4
- package/native/transform/features/protobuf/ProtobufMessageTransformer.go +1 -1
- package/package.json +12 -4
- package/src/executable/FileSystemIdentity.ts +222 -0
- package/src/executable/TypiaGenerateWizard.ts +386 -113
- package/src/functional.ts +30 -60
- package/src/internal/_ProtobufReader.ts +161 -46
- package/src/internal/_createStandardSchema.ts +15 -1
- package/src/internal/_decimal.ts +69 -0
- package/src/internal/_httpQueryParseURLSearchParams.ts +24 -2
- package/src/internal/_isFormatByte.ts +2 -5
- package/src/internal/_isFormatDate.ts +15 -2
- package/src/internal/_isFormatDateTime.ts +28 -2
- package/src/internal/_isFormatIri.ts +5 -2
- package/src/internal/_isFormatIriReference.ts +11 -3
- package/src/internal/_isFormatUriReference.ts +1 -1
- package/src/internal/_isMultipleOf.ts +8 -0
- package/src/internal/_isTypeFloat.ts +1 -1
- package/src/internal/_isTypeInt64.ts +1 -0
- package/src/internal/_isTypeInt64Bigint.ts +12 -0
- package/src/internal/_isTypeUint64.ts +1 -0
- package/src/internal/_isTypeUint64Bigint.ts +7 -0
- package/src/internal/_isUniqueItems.ts +134 -132
- package/src/internal/_jsonStringifyArray.ts +50 -0
- package/src/internal/_jsonStringifyElement.ts +19 -0
- package/src/internal/_jsonStringifyProperty.ts +30 -0
- package/src/internal/_llmApplicationFinalize.ts +6 -1
- package/src/internal/_notationAny.ts +9 -4
- package/src/internal/_notationAssign.ts +20 -0
- package/src/internal/_notationCamel.ts +31 -10
- package/src/internal/_notationKebab.ts +11 -0
- package/src/internal/_notationKeyCollision.ts +9 -0
- package/src/internal/_notationPascal.ts +19 -6
- package/src/internal/_notationSnake.ts +24 -21
- package/src/internal/_plainCloneAny.ts +208 -33
- package/src/internal/_randomArray.ts +13 -4
- package/src/internal/_randomFormatByte.ts +31 -1
- package/src/internal/_randomFormatDate.ts +6 -17
- package/src/internal/_randomFormatDatetime.ts +34 -15
- package/src/internal/_randomFormatDuration.ts +30 -13
- package/src/internal/_randomFormatEmail.ts +8 -2
- package/src/internal/_randomFormatHostname.ts +48 -1
- package/src/internal/_randomFormatIdnEmail.ts +18 -2
- package/src/internal/_randomFormatIdnHostname.ts +34 -2
- package/src/internal/_randomFormatIpv4.ts +43 -2
- package/src/internal/_randomFormatIpv6.ts +67 -2
- package/src/internal/_randomFormatIri.ts +3 -1
- package/src/internal/_randomFormatIriReference.ts +3 -1
- package/src/internal/_randomFormatJsonPointer.ts +28 -2
- package/src/internal/_randomFormatPassword.ts +11 -6
- package/src/internal/_randomFormatRegex.ts +22 -1
- package/src/internal/_randomFormatRelativeJsonPointer.ts +26 -6
- package/src/internal/_randomFormatTime.ts +46 -10
- package/src/internal/_randomFormatUri.ts +3 -1
- package/src/internal/_randomFormatUriReference.ts +3 -1
- package/src/internal/_randomFormatUriTemplate.ts +3 -1
- package/src/internal/_randomFormatUrl.ts +25 -2
- package/src/internal/_randomFormatUuid.ts +10 -6
- package/src/internal/_randomInteger.ts +87 -40
- package/src/internal/_randomMultiple.ts +245 -0
- package/src/internal/_randomNumber.ts +72 -55
- package/src/internal/_randomPattern.ts +29 -4
- package/src/internal/_randomStringLength.ts +116 -0
- package/src/internal/_stringLength.ts +5 -0
- package/src/internal/_validateReport.ts +5 -1
- package/src/internal/private/__notationRename.ts +21 -0
- package/src/internal/private/__randomComposition.ts +50 -0
- package/src/internal/private/__randomEpoch.ts +34 -0
- package/src/json.ts +2 -2
- package/src/module.ts +4 -6
- package/src/notations.ts +20 -4
- package/lib/internal/private/__notationCapitalize.d.ts +0 -1
- package/lib/internal/private/__notationCapitalize.js +0 -6
- package/lib/internal/private/__notationCapitalize.js.map +0 -1
- package/lib/internal/private/__notationCapitalize.mjs +0 -6
- package/lib/internal/private/__notationCapitalize.mjs.map +0 -1
- package/lib/internal/private/__notationUnsnake.d.ts +0 -4
- package/lib/internal/private/__notationUnsnake.js +0 -26
- package/lib/internal/private/__notationUnsnake.js.map +0 -1
- package/lib/internal/private/__notationUnsnake.mjs +0 -15
- package/lib/internal/private/__notationUnsnake.mjs.map +0 -1
- package/native/adapter/visit.go +0 -173
- package/native/adapter/visit_property_chain_edges_test.go +0 -129
- package/native/cmd/ttsc-typia/plugin_options_missing_config_test.go +0 -26
- package/native/cmd/ttsc-typia/plugin_options_undefined_false_test.go +0 -36
- package/native/core/programmers/helpers/disable_function_programmer_declare.go +0 -10
- package/native/core/programmers/iterate/check_union_array_like.go +0 -422
- package/native/core/programmers/iterate/prune_object_properties.go +0 -105
- package/native/core/programmers/iterate/stringify_dynamic_properties.go +0 -219
- package/native/core/programmers/iterate/stringify_native.go +0 -14
- package/native/core/programmers/iterate/stringify_regular_properties.go +0 -112
- package/native/core/schemas/metadata/MetadataApplication.go +0 -41
- package/src/internal/private/__notationCapitalize.ts +0 -2
- package/src/internal/private/__notationUnsnake.ts +0 -24
|
@@ -17,8 +17,10 @@ const commander_1 = require("commander");
|
|
|
17
17
|
const fs_1 = __importDefault(require("fs"));
|
|
18
18
|
const inquirer_1 = __importDefault(require("inquirer"));
|
|
19
19
|
const module_1 = require("module");
|
|
20
|
+
const os_1 = __importDefault(require("os"));
|
|
20
21
|
const path_1 = __importDefault(require("path"));
|
|
21
22
|
const tinyglobby_1 = require("tinyglobby");
|
|
23
|
+
const FileSystemIdentity_1 = require("./FileSystemIdentity");
|
|
22
24
|
var TypiaGenerateWizard;
|
|
23
25
|
(function (TypiaGenerateWizard) {
|
|
24
26
|
function generate() {
|
|
@@ -94,21 +96,50 @@ var TypiaGenerateWizard;
|
|
|
94
96
|
return __awaiter(this, void 0, void 0, function* () {
|
|
95
97
|
location.output = path_1.default.resolve(location.output);
|
|
96
98
|
location.project = resolveProjectConfigFile(location.project);
|
|
99
|
+
const policy = new FileSystemIdentity_1.FileSystemIdentity.Policy();
|
|
100
|
+
const outputProbe = yield nearestExistingAncestor(location.output);
|
|
101
|
+
yield ensureExistingDirectoryPath({
|
|
102
|
+
label: "output parent path",
|
|
103
|
+
directory: outputProbe,
|
|
104
|
+
});
|
|
105
|
+
policy.observe(yield FileSystemIdentity_1.FileSystemIdentity.probeDirectory(outputProbe), outputProbe);
|
|
106
|
+
policy.observe(yield FileSystemIdentity_1.FileSystemIdentity.inspectDirectory(path_1.default.dirname(location.project)), path_1.default.dirname(location.project));
|
|
97
107
|
const entries = location.files.length === 0
|
|
98
|
-
? yield prepareDirectoryInput(location)
|
|
99
|
-
: yield prepareFileInputs(location);
|
|
108
|
+
? yield prepareDirectoryInput(location, policy)
|
|
109
|
+
: yield prepareFileInputs(location, policy);
|
|
110
|
+
const identity = policy.get();
|
|
111
|
+
yield inspectTargetDirectories({
|
|
112
|
+
identity,
|
|
113
|
+
output: location.output,
|
|
114
|
+
targets: entries.map((entry) => entry.target),
|
|
115
|
+
});
|
|
100
116
|
const binary = resolveTsgoBinary();
|
|
101
117
|
const cwd = path_1.default.dirname(location.project);
|
|
102
|
-
const
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
tsconfig: location.project,
|
|
118
|
+
const temporaryProject = yield createTemporaryProject({
|
|
119
|
+
entries,
|
|
120
|
+
project: location.project,
|
|
106
121
|
});
|
|
107
|
-
|
|
122
|
+
let transformed;
|
|
123
|
+
try {
|
|
124
|
+
transformed = transformProject({
|
|
125
|
+
binary,
|
|
126
|
+
cwd,
|
|
127
|
+
projectRoot: cwd,
|
|
128
|
+
tsconfig: temporaryProject.config,
|
|
129
|
+
});
|
|
130
|
+
}
|
|
131
|
+
finally {
|
|
132
|
+
yield fs_1.default.promises.rm(temporaryProject.directory, {
|
|
133
|
+
force: true,
|
|
134
|
+
recursive: true,
|
|
135
|
+
});
|
|
136
|
+
}
|
|
137
|
+
const outputByKey = indexTransformedOutputs(transformed, identity);
|
|
108
138
|
const outputs = entries.map((entry) => {
|
|
109
139
|
const output = getTransformedOutput({
|
|
110
140
|
cwd,
|
|
111
141
|
entry,
|
|
142
|
+
identity,
|
|
112
143
|
outputByKey,
|
|
113
144
|
});
|
|
114
145
|
if (output === undefined) {
|
|
@@ -118,19 +149,40 @@ var TypiaGenerateWizard;
|
|
|
118
149
|
});
|
|
119
150
|
yield ensureOutputDirectory(location.output);
|
|
120
151
|
yield ensureTargetDirectories({
|
|
152
|
+
identity,
|
|
121
153
|
output: location.output,
|
|
122
154
|
targets: outputs.map(({ entry }) => entry.target),
|
|
123
155
|
});
|
|
124
156
|
yield ensurePhysicalTargets({
|
|
157
|
+
identity,
|
|
125
158
|
output: location.output,
|
|
126
159
|
entries: outputs.map(({ entry }) => entry),
|
|
127
160
|
});
|
|
128
|
-
yield ensureTargetFiles(outputs.map(({ entry }) => entry));
|
|
161
|
+
yield ensureTargetFiles(outputs.map(({ entry }) => entry), identity);
|
|
129
162
|
for (const { entry, output } of outputs) {
|
|
130
163
|
yield fs_1.default.promises.writeFile(entry.target, formatOutput(output), "utf8");
|
|
131
164
|
}
|
|
132
165
|
});
|
|
133
166
|
}
|
|
167
|
+
function createTemporaryProject(props) {
|
|
168
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
169
|
+
const directory = yield fs_1.default.promises.mkdtemp(path_1.default.join(os_1.default.tmpdir(), "typia-generate-project-"));
|
|
170
|
+
const config = path_1.default.join(directory, "tsconfig.json");
|
|
171
|
+
try {
|
|
172
|
+
yield fs_1.default.promises.writeFile(config, JSON.stringify({
|
|
173
|
+
extends: props.project,
|
|
174
|
+
exclude: [],
|
|
175
|
+
files: props.entries.map((entry) => compilerInputPath(entry.file)),
|
|
176
|
+
include: [],
|
|
177
|
+
}), "utf8");
|
|
178
|
+
return { config, directory };
|
|
179
|
+
}
|
|
180
|
+
catch (error) {
|
|
181
|
+
yield fs_1.default.promises.rm(directory, { force: true, recursive: true });
|
|
182
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to prepare the bounded input project: ${formatUnknownError(error)}`);
|
|
183
|
+
}
|
|
184
|
+
});
|
|
185
|
+
}
|
|
134
186
|
function ensureOutputDirectory(output) {
|
|
135
187
|
return __awaiter(this, void 0, void 0, function* () {
|
|
136
188
|
if (fs_1.default.existsSync(output) === false) {
|
|
@@ -147,13 +199,28 @@ var TypiaGenerateWizard;
|
|
|
147
199
|
}
|
|
148
200
|
function ensureTargetDirectories(props) {
|
|
149
201
|
return __awaiter(this, void 0, void 0, function* () {
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
202
|
+
yield inspectTargetDirectories(props);
|
|
203
|
+
const directories = targetDirectories(props);
|
|
204
|
+
for (const directory of directories.values()) {
|
|
205
|
+
try {
|
|
206
|
+
yield fs_1.default.promises.mkdir(directory, { recursive: true });
|
|
207
|
+
}
|
|
208
|
+
catch (exp) {
|
|
209
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to create output parent directory ${directory}: ${formatUnknownError(exp)}`);
|
|
210
|
+
}
|
|
211
|
+
yield ensureExistingDirectory({
|
|
212
|
+
label: "output parent path",
|
|
213
|
+
directory,
|
|
214
|
+
});
|
|
154
215
|
}
|
|
216
|
+
});
|
|
217
|
+
}
|
|
218
|
+
function inspectTargetDirectories(props) {
|
|
219
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
220
|
+
const directories = targetDirectories(props);
|
|
155
221
|
for (const directory of directories.values()) {
|
|
156
222
|
yield ensureOutputAncestorDirectories({
|
|
223
|
+
identity: props.identity,
|
|
157
224
|
output: props.output,
|
|
158
225
|
directory,
|
|
159
226
|
});
|
|
@@ -164,20 +231,16 @@ var TypiaGenerateWizard;
|
|
|
164
231
|
});
|
|
165
232
|
}
|
|
166
233
|
}
|
|
167
|
-
for (const directory of directories.values()) {
|
|
168
|
-
try {
|
|
169
|
-
yield fs_1.default.promises.mkdir(directory, { recursive: true });
|
|
170
|
-
}
|
|
171
|
-
catch (exp) {
|
|
172
|
-
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to create output parent directory ${directory}: ${formatUnknownError(exp)}`);
|
|
173
|
-
}
|
|
174
|
-
yield ensureExistingDirectory({
|
|
175
|
-
label: "output parent path",
|
|
176
|
-
directory,
|
|
177
|
-
});
|
|
178
|
-
}
|
|
179
234
|
});
|
|
180
235
|
}
|
|
236
|
+
function targetDirectories(props) {
|
|
237
|
+
const directories = new Map();
|
|
238
|
+
for (const target of props.targets) {
|
|
239
|
+
const directory = path_1.default.dirname(target);
|
|
240
|
+
directories.set(props.identity.filesystemKey(directory), directory);
|
|
241
|
+
}
|
|
242
|
+
return directories;
|
|
243
|
+
}
|
|
181
244
|
function ensureCreatableDirectory(directory) {
|
|
182
245
|
return __awaiter(this, void 0, void 0, function* () {
|
|
183
246
|
const parent = yield nearestExistingAncestor(directory);
|
|
@@ -204,7 +267,7 @@ var TypiaGenerateWizard;
|
|
|
204
267
|
return __awaiter(this, void 0, void 0, function* () {
|
|
205
268
|
const output = path_1.default.resolve(props.output);
|
|
206
269
|
const directory = path_1.default.resolve(props.directory);
|
|
207
|
-
if (
|
|
270
|
+
if (props.identity.contains(directory, output) === false) {
|
|
208
271
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output parent path escapes output directory: ${props.directory}`);
|
|
209
272
|
}
|
|
210
273
|
const relative = path_1.default.relative(output, directory);
|
|
@@ -247,7 +310,7 @@ var TypiaGenerateWizard;
|
|
|
247
310
|
for (const segment of relative === "" ? [] : relative.split(path_1.default.sep)) {
|
|
248
311
|
current = path_1.default.join(current, segment);
|
|
249
312
|
yield ensureExistingDirectorySegment({
|
|
250
|
-
label:
|
|
313
|
+
label: path_1.default.normalize(current) === path_1.default.normalize(directory)
|
|
251
314
|
? props.label
|
|
252
315
|
: `${props.label} ancestor`,
|
|
253
316
|
directory: current,
|
|
@@ -271,33 +334,33 @@ var TypiaGenerateWizard;
|
|
|
271
334
|
const output = yield fs_1.default.promises.realpath(props.output);
|
|
272
335
|
const inputs = new Set();
|
|
273
336
|
for (const entry of props.entries) {
|
|
274
|
-
inputs.add(filesystemKey(yield fs_1.default.promises.realpath(entry.file)));
|
|
337
|
+
inputs.add(props.identity.filesystemKey(yield fs_1.default.promises.realpath(entry.file)));
|
|
275
338
|
}
|
|
276
339
|
for (const entry of props.entries) {
|
|
277
340
|
const parent = path_1.default.dirname(entry.target);
|
|
278
341
|
const directory = yield fs_1.default.promises.realpath(parent);
|
|
279
|
-
if (
|
|
342
|
+
if (props.identity.contains(directory, output) === false) {
|
|
280
343
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output parent path escapes output directory through a symbolic link: ${parent}`);
|
|
281
344
|
}
|
|
282
345
|
const target = path_1.default.join(directory, path_1.default.basename(entry.target));
|
|
283
|
-
if (inputs.has(filesystemKey(target))) {
|
|
346
|
+
if (inputs.has(props.identity.filesystemKey(target))) {
|
|
284
347
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output file would overwrite input file through a symbolic link: ${entry.target}`);
|
|
285
348
|
}
|
|
286
349
|
}
|
|
287
350
|
});
|
|
288
351
|
}
|
|
289
|
-
function ensureTargetFiles(entries) {
|
|
352
|
+
function ensureTargetFiles(entries, identity) {
|
|
290
353
|
return __awaiter(this, void 0, void 0, function* () {
|
|
291
354
|
const inputs = new Set();
|
|
292
355
|
const files = new Map();
|
|
293
356
|
for (const entry of entries) {
|
|
294
|
-
inputs.add(fileIdentityKey(yield fs_1.default.promises.stat(entry.file)));
|
|
295
|
-
files.set(filesystemKey(entry.target), entry);
|
|
357
|
+
inputs.add(fileIdentityKey(yield fs_1.default.promises.stat(entry.file, { bigint: true }), yield fs_1.default.promises.realpath(entry.file)));
|
|
358
|
+
files.set(identity.filesystemKey(entry.target), entry);
|
|
296
359
|
}
|
|
297
360
|
for (const entry of files.values()) {
|
|
298
361
|
let stat;
|
|
299
362
|
try {
|
|
300
|
-
stat = yield fs_1.default.promises.lstat(entry.target);
|
|
363
|
+
stat = yield fs_1.default.promises.lstat(entry.target, { bigint: true });
|
|
301
364
|
}
|
|
302
365
|
catch (exp) {
|
|
303
366
|
if (isMissingFileError(exp)) {
|
|
@@ -308,16 +371,16 @@ var TypiaGenerateWizard;
|
|
|
308
371
|
if (stat.isFile() === false) {
|
|
309
372
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output file path is not a regular file: ${entry.target}`);
|
|
310
373
|
}
|
|
311
|
-
if (inputs.has(fileIdentityKey(stat))) {
|
|
374
|
+
if (inputs.has(fileIdentityKey(stat, yield fs_1.default.promises.realpath(entry.target)))) {
|
|
312
375
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output file would overwrite input file through a physical file alias: ${entry.target}`);
|
|
313
376
|
}
|
|
314
|
-
if (stat.nlink > 1) {
|
|
377
|
+
if (stat.nlink > BigInt(1)) {
|
|
315
378
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output file has multiple hard links: ${entry.target}`);
|
|
316
379
|
}
|
|
317
380
|
}
|
|
318
381
|
});
|
|
319
382
|
}
|
|
320
|
-
function prepareDirectoryInput(location) {
|
|
383
|
+
function prepareDirectoryInput(location, policy) {
|
|
321
384
|
return __awaiter(this, void 0, void 0, function* () {
|
|
322
385
|
if (location.input === undefined) {
|
|
323
386
|
throw new URIError("Error on TypiaGenerateWizard.generate(): input path is required.");
|
|
@@ -329,15 +392,17 @@ var TypiaGenerateWizard;
|
|
|
329
392
|
if ((yield isDirectory(input)) === false) {
|
|
330
393
|
throw new URIError("Error on TypiaGenerateWizard.generate(): input path is not a directory.");
|
|
331
394
|
}
|
|
395
|
+
const inputReal = yield fs_1.default.promises.realpath(input);
|
|
396
|
+
const outputReal = yield optionalRealPath(location.output);
|
|
332
397
|
const files = [];
|
|
333
398
|
yield gather({
|
|
334
|
-
location: {
|
|
335
|
-
input,
|
|
336
|
-
output: location.output,
|
|
337
|
-
},
|
|
338
399
|
container: files,
|
|
339
400
|
from: input,
|
|
340
|
-
|
|
401
|
+
inputReal,
|
|
402
|
+
outputReal,
|
|
403
|
+
policy,
|
|
404
|
+
visitedDirectories: new Set(),
|
|
405
|
+
visitedFiles: new Set(),
|
|
341
406
|
});
|
|
342
407
|
return files.map((file) => ({
|
|
343
408
|
file,
|
|
@@ -345,29 +410,31 @@ var TypiaGenerateWizard;
|
|
|
345
410
|
}));
|
|
346
411
|
});
|
|
347
412
|
}
|
|
348
|
-
function prepareFileInputs(location) {
|
|
413
|
+
function prepareFileInputs(location, policy) {
|
|
349
414
|
return __awaiter(this, void 0, void 0, function* () {
|
|
350
415
|
const targets = new Set();
|
|
351
416
|
const output = [];
|
|
352
|
-
for (const input of yield expandFileInputs(location.files, location.output)) {
|
|
417
|
+
for (const input of yield expandFileInputs(location.files, location.output, policy)) {
|
|
353
418
|
const file = path_1.default.resolve(input);
|
|
419
|
+
policy.observe(yield FileSystemIdentity_1.FileSystemIdentity.inspectDirectory(path_1.default.dirname(file)), path_1.default.dirname(file));
|
|
420
|
+
const identity = policy.get();
|
|
354
421
|
if (fs_1.default.existsSync(file) === false) {
|
|
355
422
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): input file does not exist: ${input}`);
|
|
356
423
|
}
|
|
357
424
|
else if ((yield isFile(file)) === false) {
|
|
358
425
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): input path is not a file: ${input}`);
|
|
359
426
|
}
|
|
360
|
-
else if (isDeclarationFile(file)) {
|
|
427
|
+
else if (identity.isDeclarationFile(file)) {
|
|
361
428
|
continue;
|
|
362
429
|
}
|
|
363
|
-
else if (isSupportedExtension(file) === false) {
|
|
430
|
+
else if (identity.isSupportedExtension(file) === false) {
|
|
364
431
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): input file is not a supported TypeScript source: ${input}`);
|
|
365
432
|
}
|
|
366
433
|
const target = path_1.default.join(location.output, path_1.default.basename(file));
|
|
367
|
-
if (isSamePath(file, target)) {
|
|
434
|
+
if (identity.isSamePath(file, target)) {
|
|
368
435
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): output file would overwrite input file: ${input}`);
|
|
369
436
|
}
|
|
370
|
-
const key = filesystemKey(target);
|
|
437
|
+
const key = identity.filesystemKey(target);
|
|
371
438
|
if (targets.has(key)) {
|
|
372
439
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): duplicate output filename for ${target}`);
|
|
373
440
|
}
|
|
@@ -380,26 +447,34 @@ var TypiaGenerateWizard;
|
|
|
380
447
|
return output;
|
|
381
448
|
});
|
|
382
449
|
}
|
|
383
|
-
function expandFileInputs(inputs, directory) {
|
|
450
|
+
function expandFileInputs(inputs, directory, policy) {
|
|
384
451
|
return __awaiter(this, void 0, void 0, function* () {
|
|
385
452
|
const output = [];
|
|
386
453
|
for (const input of inputs) {
|
|
387
454
|
const pattern = toGlobPattern(input);
|
|
388
455
|
if ((0, tinyglobby_1.isDynamicPattern)(pattern, { caseSensitiveMatch: true })) {
|
|
456
|
+
const searchDirectory = yield globSearchDirectory(input);
|
|
457
|
+
const caseSensitive = yield FileSystemIdentity_1.FileSystemIdentity.inspectDirectory(searchDirectory);
|
|
458
|
+
if (caseSensitive === undefined) {
|
|
459
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to determine filesystem case behavior for input pattern base ${searchDirectory}.`);
|
|
460
|
+
}
|
|
461
|
+
policy.observe(caseSensitive, searchDirectory);
|
|
462
|
+
const identity = policy.get();
|
|
389
463
|
const matches = yield (0, tinyglobby_1.glob)(pattern, {
|
|
390
464
|
absolute: true,
|
|
391
|
-
caseSensitiveMatch:
|
|
465
|
+
caseSensitiveMatch: identity.caseSensitive,
|
|
392
466
|
cwd: process.cwd(),
|
|
393
467
|
onlyFiles: true,
|
|
394
468
|
});
|
|
395
469
|
if (matches.length === 0) {
|
|
396
470
|
throw new URIError(`Error on TypiaGenerateWizard.generate(): input pattern does not match any files: ${input}`);
|
|
397
471
|
}
|
|
398
|
-
output.push(...excludeOutputFiles(matches, directory).filter(isSupportedExtension));
|
|
472
|
+
output.push(...excludeOutputFiles(matches, directory, identity).filter((file) => identity.isSupportedExtension(file)));
|
|
399
473
|
}
|
|
400
474
|
else {
|
|
401
475
|
const file = path_1.default.resolve(input);
|
|
402
|
-
|
|
476
|
+
policy.observe(yield FileSystemIdentity_1.FileSystemIdentity.inspectDirectory(path_1.default.dirname(file)), path_1.default.dirname(file));
|
|
477
|
+
if (policy.get().contains(file, directory) === false) {
|
|
403
478
|
output.push(file);
|
|
404
479
|
}
|
|
405
480
|
}
|
|
@@ -407,8 +482,22 @@ var TypiaGenerateWizard;
|
|
|
407
482
|
return output;
|
|
408
483
|
});
|
|
409
484
|
}
|
|
410
|
-
function excludeOutputFiles(files, directory) {
|
|
411
|
-
return files.filter((file) =>
|
|
485
|
+
function excludeOutputFiles(files, directory, identity) {
|
|
486
|
+
return files.filter((file) => identity.contains(file, directory) === false);
|
|
487
|
+
}
|
|
488
|
+
function globSearchDirectory(input) {
|
|
489
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
490
|
+
let current = path_1.default.resolve(input);
|
|
491
|
+
while ((0, tinyglobby_1.isDynamicPattern)(toGlobPattern(current), { caseSensitiveMatch: true })) {
|
|
492
|
+
const parent = path_1.default.dirname(current);
|
|
493
|
+
if (parent === current)
|
|
494
|
+
break;
|
|
495
|
+
current = parent;
|
|
496
|
+
}
|
|
497
|
+
if (fs_1.default.existsSync(current) && (yield isDirectory(current)))
|
|
498
|
+
return current;
|
|
499
|
+
return nearestExistingAncestor(path_1.default.dirname(current));
|
|
500
|
+
});
|
|
412
501
|
}
|
|
413
502
|
function toGlobPattern(input) {
|
|
414
503
|
return input.replace(/\\/g, "/");
|
|
@@ -418,6 +507,7 @@ var TypiaGenerateWizard;
|
|
|
418
507
|
const result = new TtscCompiler({
|
|
419
508
|
binary: props.binary,
|
|
420
509
|
cwd: props.cwd,
|
|
510
|
+
projectRoot: props.projectRoot,
|
|
421
511
|
tsconfig: props.tsconfig,
|
|
422
512
|
}).transform();
|
|
423
513
|
if (result.type === "success") {
|
|
@@ -534,7 +624,7 @@ var TypiaGenerateWizard;
|
|
|
534
624
|
function resolveFromRoots(request, roots) {
|
|
535
625
|
for (const root of roots) {
|
|
536
626
|
try {
|
|
537
|
-
return
|
|
627
|
+
return (0, module_1.createRequire)(path_1.default.join(root, "package.json")).resolve(request);
|
|
538
628
|
}
|
|
539
629
|
catch (_a) {
|
|
540
630
|
continue;
|
|
@@ -556,68 +646,115 @@ var TypiaGenerateWizard;
|
|
|
556
646
|
}
|
|
557
647
|
function gather(props) {
|
|
558
648
|
return __awaiter(this, void 0, void 0, function* () {
|
|
559
|
-
|
|
649
|
+
const currentReal = yield resolveTraversalPath(props.from);
|
|
650
|
+
if (props.outputReal !== undefined &&
|
|
651
|
+
isPhysicalSameOrChildPath(currentReal, props.outputReal))
|
|
652
|
+
return;
|
|
653
|
+
ensurePhysicalInputContainment({
|
|
654
|
+
file: props.from,
|
|
655
|
+
input: props.inputReal,
|
|
656
|
+
real: currentReal,
|
|
657
|
+
});
|
|
658
|
+
const currentStat = yield fs_1.default.promises.stat(props.from, {
|
|
659
|
+
bigint: true,
|
|
660
|
+
});
|
|
661
|
+
const directoryIdentity = fileIdentityKey(currentStat, currentReal);
|
|
662
|
+
if (props.visitedDirectories.has(directoryIdentity)) {
|
|
663
|
+
const lexicalStat = yield fs_1.default.promises.lstat(props.from);
|
|
664
|
+
if (lexicalStat.isSymbolicLink()) {
|
|
665
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): input directory link revisits a physical directory: ${props.from}.`);
|
|
666
|
+
}
|
|
560
667
|
return;
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
|
|
668
|
+
}
|
|
669
|
+
props.visitedDirectories.add(directoryIdentity);
|
|
670
|
+
props.policy.observe(yield FileSystemIdentity_1.FileSystemIdentity.inspectDirectory(props.from), props.from);
|
|
671
|
+
const identity = props.policy.get();
|
|
672
|
+
const entries = yield Promise.all((yield fs_1.default.promises.readdir(props.from)).map((name) => __awaiter(this, void 0, void 0, function* () {
|
|
673
|
+
const file = path_1.default.join(props.from, name);
|
|
674
|
+
try {
|
|
675
|
+
return { file, name, stat: yield fs_1.default.promises.lstat(file) };
|
|
676
|
+
}
|
|
677
|
+
catch (error) {
|
|
678
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to inspect input path ${file}: ${formatUnknownError(error)}`);
|
|
679
|
+
}
|
|
680
|
+
})));
|
|
681
|
+
entries.sort((x, y) => {
|
|
682
|
+
const linkOrder = Number(x.stat.isSymbolicLink()) - Number(y.stat.isSymbolicLink());
|
|
683
|
+
return linkOrder !== 0
|
|
684
|
+
? linkOrder
|
|
685
|
+
: Buffer.compare(Buffer.from(x.name), Buffer.from(y.name));
|
|
686
|
+
});
|
|
687
|
+
for (const entry of entries) {
|
|
688
|
+
let stat;
|
|
689
|
+
let real;
|
|
690
|
+
try {
|
|
691
|
+
stat = yield fs_1.default.promises.stat(entry.file, { bigint: true });
|
|
692
|
+
real = yield fs_1.default.promises.realpath(entry.file);
|
|
693
|
+
}
|
|
694
|
+
catch (error) {
|
|
695
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): input link target is missing or unreadable: ${entry.file}: ${formatUnknownError(error)}`);
|
|
696
|
+
}
|
|
697
|
+
if (props.outputReal !== undefined &&
|
|
698
|
+
isPhysicalSameOrChildPath(real, props.outputReal))
|
|
699
|
+
continue;
|
|
700
|
+
ensurePhysicalInputContainment({
|
|
701
|
+
file: entry.file,
|
|
702
|
+
input: props.inputReal,
|
|
703
|
+
real,
|
|
704
|
+
});
|
|
564
705
|
if (stat.isDirectory()) {
|
|
565
|
-
yield gather({
|
|
566
|
-
location: props.location,
|
|
567
|
-
container: props.container,
|
|
568
|
-
from: next,
|
|
569
|
-
to: path_1.default.join(props.to, file),
|
|
570
|
-
});
|
|
706
|
+
yield gather(Object.assign(Object.assign({}, props), { from: entry.file }));
|
|
571
707
|
continue;
|
|
572
708
|
}
|
|
573
|
-
if (
|
|
574
|
-
|
|
575
|
-
|
|
709
|
+
if (stat.isFile() === false ||
|
|
710
|
+
identity.isSupportedExtension(entry.name) === false)
|
|
711
|
+
continue;
|
|
712
|
+
const fileIdentity = fileIdentityKey(stat, real);
|
|
713
|
+
if (props.visitedFiles.has(fileIdentity))
|
|
714
|
+
continue;
|
|
715
|
+
props.visitedFiles.add(fileIdentity);
|
|
716
|
+
props.container.push(entry.file);
|
|
576
717
|
}
|
|
577
718
|
});
|
|
578
719
|
}
|
|
579
|
-
function isSupportedExtension(filename) {
|
|
580
|
-
const normalized = isCaseSensitive()
|
|
581
|
-
? filename
|
|
582
|
-
: filename.toLowerCase();
|
|
583
|
-
return TS_PATTERN.test(normalized) && !DTS_PATTERN.test(normalized);
|
|
584
|
-
}
|
|
585
|
-
function isDeclarationFile(filename) {
|
|
586
|
-
const normalized = isCaseSensitive()
|
|
587
|
-
? filename
|
|
588
|
-
: filename.toLowerCase();
|
|
589
|
-
return DTS_PATTERN.test(normalized);
|
|
590
|
-
}
|
|
591
720
|
function formatOutput(output) {
|
|
592
721
|
return output.startsWith("// @ts-nocheck")
|
|
593
722
|
? output
|
|
594
723
|
: `// @ts-nocheck\n${output}`;
|
|
595
724
|
}
|
|
596
|
-
function indexTransformedOutputs(outputs) {
|
|
725
|
+
function indexTransformedOutputs(outputs, identity) {
|
|
597
726
|
const map = new Map();
|
|
598
727
|
for (const [file, output] of Object.entries(outputs)) {
|
|
599
|
-
|
|
728
|
+
const key = identity.projectFileKey(file);
|
|
729
|
+
if (map.has(key)) {
|
|
730
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): transformed outputs have ambiguous filesystem identities: ${file}.`);
|
|
731
|
+
}
|
|
732
|
+
map.set(key, output);
|
|
600
733
|
}
|
|
601
734
|
return map;
|
|
602
735
|
}
|
|
603
736
|
function getTransformedOutput(props) {
|
|
604
|
-
const output = props.outputByKey.get(projectFileKey(projectKey(props.cwd, props.entry.file)));
|
|
737
|
+
const output = props.outputByKey.get(props.identity.projectFileKey(projectKey(props.cwd, props.entry.file)));
|
|
605
738
|
if (output !== undefined) {
|
|
606
739
|
return output;
|
|
607
740
|
}
|
|
741
|
+
const compilerFile = compilerInputPath(props.entry.file);
|
|
742
|
+
if (props.identity.isSamePath(compilerFile, props.entry.file) === false &&
|
|
743
|
+
props.identity.contains(compilerFile, props.cwd)) {
|
|
744
|
+
const compiled = props.outputByKey.get(props.identity.projectFileKey(projectKey(props.cwd, compilerFile)));
|
|
745
|
+
if (compiled !== undefined)
|
|
746
|
+
return compiled;
|
|
747
|
+
}
|
|
608
748
|
const real = resolveRealPath(props.entry.file);
|
|
609
|
-
if (isSamePath(real, props.entry.file) ||
|
|
610
|
-
|
|
749
|
+
if (props.identity.isSamePath(real, props.entry.file) ||
|
|
750
|
+
props.identity.contains(real, props.cwd) === false) {
|
|
611
751
|
return undefined;
|
|
612
752
|
}
|
|
613
|
-
return props.outputByKey.get(projectFileKey(projectKey(props.cwd, real)));
|
|
753
|
+
return props.outputByKey.get(props.identity.projectFileKey(projectKey(props.cwd, real)));
|
|
614
754
|
}
|
|
615
755
|
function projectKey(root, file) {
|
|
616
756
|
return path_1.default.relative(root, file).replace(/\\/g, "/");
|
|
617
757
|
}
|
|
618
|
-
function projectFileKey(file) {
|
|
619
|
-
return isCaseSensitive() ? file : file.toLowerCase();
|
|
620
|
-
}
|
|
621
758
|
function resolveRealPath(file) {
|
|
622
759
|
try {
|
|
623
760
|
return fs_1.default.realpathSync(file);
|
|
@@ -626,23 +763,50 @@ var TypiaGenerateWizard;
|
|
|
626
763
|
return file;
|
|
627
764
|
}
|
|
628
765
|
}
|
|
629
|
-
function
|
|
630
|
-
|
|
766
|
+
function compilerInputPath(file) {
|
|
767
|
+
try {
|
|
768
|
+
if (fs_1.default.lstatSync(file).isSymbolicLink()) {
|
|
769
|
+
return path_1.default.join(resolveRealPath(path_1.default.dirname(file)), path_1.default.basename(file));
|
|
770
|
+
}
|
|
771
|
+
}
|
|
772
|
+
catch (_a) {
|
|
773
|
+
return file;
|
|
774
|
+
}
|
|
775
|
+
return resolveRealPath(file);
|
|
631
776
|
}
|
|
632
|
-
function
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
|
|
777
|
+
function optionalRealPath(file) {
|
|
778
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
779
|
+
try {
|
|
780
|
+
return yield fs_1.default.promises.realpath(file);
|
|
781
|
+
}
|
|
782
|
+
catch (error) {
|
|
783
|
+
if (isMissingFileError(error))
|
|
784
|
+
return undefined;
|
|
785
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to resolve path ${file}: ${formatUnknownError(error)}`);
|
|
786
|
+
}
|
|
787
|
+
});
|
|
788
|
+
}
|
|
789
|
+
function resolveTraversalPath(file) {
|
|
790
|
+
return __awaiter(this, void 0, void 0, function* () {
|
|
791
|
+
try {
|
|
792
|
+
return yield fs_1.default.promises.realpath(file);
|
|
793
|
+
}
|
|
794
|
+
catch (error) {
|
|
795
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): unable to resolve input path ${file}: ${formatUnknownError(error)}`);
|
|
796
|
+
}
|
|
797
|
+
});
|
|
639
798
|
}
|
|
640
|
-
function
|
|
641
|
-
|
|
642
|
-
|
|
799
|
+
function ensurePhysicalInputContainment(props) {
|
|
800
|
+
if (isPhysicalSameOrChildPath(props.real, props.input))
|
|
801
|
+
return;
|
|
802
|
+
throw new URIError(`Error on TypiaGenerateWizard.generate(): input path resolves outside the input directory: ${props.file}.`);
|
|
643
803
|
}
|
|
644
|
-
function
|
|
645
|
-
|
|
804
|
+
function isPhysicalSameOrChildPath(file, directory) {
|
|
805
|
+
const relative = path_1.default.relative(directory, file);
|
|
806
|
+
return (relative === "" ||
|
|
807
|
+
(relative !== ".." &&
|
|
808
|
+
relative.startsWith(`..${path_1.default.sep}`) === false &&
|
|
809
|
+
path_1.default.isAbsolute(relative) === false));
|
|
646
810
|
}
|
|
647
811
|
function isMissingFileError(exp) {
|
|
648
812
|
return (typeof exp === "object" &&
|
|
@@ -650,8 +814,12 @@ var TypiaGenerateWizard;
|
|
|
650
814
|
"code" in exp &&
|
|
651
815
|
exp.code === "ENOENT");
|
|
652
816
|
}
|
|
653
|
-
|
|
654
|
-
|
|
817
|
+
/**
|
|
818
|
+
* Delegates to {@link FileSystemIdentity.identityKey}, which owns the rule and
|
|
819
|
+
* carries the reasoning for reading the identity as a `bigint`.
|
|
820
|
+
*/
|
|
821
|
+
function fileIdentityKey(stat, realpath) {
|
|
822
|
+
return FileSystemIdentity_1.FileSystemIdentity.identityKey(stat, realpath);
|
|
655
823
|
}
|
|
656
824
|
function formatDiagnostics(diagnostics) {
|
|
657
825
|
return diagnostics.length === 0
|
|
@@ -681,6 +849,4 @@ var TypiaGenerateWizard;
|
|
|
681
849
|
return String(error);
|
|
682
850
|
}
|
|
683
851
|
})(TypiaGenerateWizard || (exports.TypiaGenerateWizard = TypiaGenerateWizard = {}));
|
|
684
|
-
const TS_PATTERN = /\.[cm]?tsx?$/;
|
|
685
|
-
const DTS_PATTERN = /\.d\.[cm]?tsx?$/;
|
|
686
852
|
//# sourceMappingURL=TypiaGenerateWizard.js.map
|