diff --git a/dev/openapi-ts.config.ts b/dev/openapi-ts.config.ts index d4cc848c61..b0f0e1bf6c 100644 --- a/dev/openapi-ts.config.ts +++ b/dev/openapi-ts.config.ts @@ -40,10 +40,10 @@ export default defineConfig(() => { // 'circular.yaml', // 'dutchie.json', // 'invalid', - // 'full.yaml', + 'full.yaml', // 'openai.yaml', // 'opencode.yaml', - 'pagination-ref.yaml', + // 'pagination-ref.yaml', // 'sdk-instance.yaml', // 'string-with-format.yaml', // 'transformers.json', @@ -431,7 +431,7 @@ export default defineConfig(() => { { // case: 'snake_case', // comments: false, - compatibilityVersion: 'mini', + compatibilityVersion: 4, dates: { // local: true, // offset: true, diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/string-with-format/zod.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/string-with-format/zod.gen.ts index ab38771c13..b60f7739c6 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/string-with-format/zod.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/string-with-format/zod.gen.ts @@ -3,8 +3,5 @@ import { z } from 'zod'; export const zFoo = z.object({ - foo: z.optional(z.array(z.union([ - z.string(), - z.string() - ]))) + foo: z.optional(z.array(z.union([z.string(), z.string()]))) }); diff --git a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts index 0165268187..ff8c6a7f8e 100644 --- a/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts +++ b/packages/openapi-ts-tests/main/test/__snapshots__/3.1.x/webhooks/zod.gen.ts @@ -55,9 +55,7 @@ export const zSessionUserRoomSystemCalloutRingingWebhookRequest = z.object({ export const zSessionRecordingStartedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_started' - ]), + event: z.enum(["session.recording_started"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -80,9 +78,7 @@ export const zSessionRecordingStartedWebhookRequest = z.object({ export const zSessionRecordingResumedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_resumed' - ]), + event: z.enum(["session.recording_resumed"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -105,9 +101,7 @@ export const zSessionRecordingResumedWebhookRequest = z.object({ export const zSessionLiveStreamingStoppedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.live_streaming_stopped' - ]), + event: z.enum(["session.live_streaming_stopped"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -119,10 +113,10 @@ export const zSessionLiveStreamingStoppedWebhookRequest = z.object({ start_time: z.iso.datetime(), live_streaming: z.object({ service: z.enum([ - 'Facebook', - 'Workplace_by_Facebook', - 'YouTube', - 'Custom_Live_Streaming_Service' + "Facebook", + "Workplace_by_Facebook", + "YouTube", + "Custom_Live_Streaming_Service" ]), custom_live_streaming_settings: z.object({ stream_url: z.string(), @@ -141,9 +135,7 @@ export const zSessionLiveStreamingStoppedWebhookRequest = z.object({ export const zSessionStreamIngestionStoppedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.stream_ingestion_stopped' - ]), + event: z.enum(["session.stream_ingestion_stopped"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -193,9 +185,7 @@ export const zSessionUserRoomSystemCalloutRejectedWebhookRequest = z.object({ export const zSessionAlertWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.alert' - ]), + event: z.enum(["session.alert"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -205,11 +195,11 @@ export const zSessionAlertWebhookRequest = z.object({ session_name: z.string(), session_key: z.optional(z.string()), issues: z.array(z.enum([ - 'Unstable audio quality', - 'Unstable video quality', - 'Unstable screen share quality', - 'High CPU occupation', - 'Call Reconnection' + "Unstable audio quality", + "Unstable video quality", + "Unstable screen share quality", + "High CPU occupation", + "Call Reconnection" ])) }) }) @@ -220,9 +210,7 @@ export const zSessionAlertWebhookRequest = z.object({ export const zSessionSharingEndedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.sharing_ended' - ]), + event: z.enum(["session.sharing_ended"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -237,10 +225,10 @@ export const zSessionSharingEndedWebhookRequest = z.object({ user_key: z.optional(z.string()), sharing_details: z.object({ content: z.enum([ - 'application', - 'whiteboard', - 'desktop', - 'unknown' + "application", + "whiteboard", + "desktop", + "unknown" ]), date_time: z.iso.datetime() }) @@ -254,9 +242,7 @@ export const zSessionSharingEndedWebhookRequest = z.object({ export const zSessionRecordingPausedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_paused' - ]), + event: z.enum(["session.recording_paused"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -279,9 +265,7 @@ export const zSessionRecordingPausedWebhookRequest = z.object({ export const zSessionEndedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.ended' - ]), + event: z.enum(["session.ended"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -301,9 +285,7 @@ export const zSessionEndedWebhookRequest = z.object({ export const zSessionStartedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.started' - ]), + event: z.enum(["session.started"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -322,9 +304,7 @@ export const zSessionStartedWebhookRequest = z.object({ export const zSessionStreamIngestionUnbindWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.stream_ingestion_unbind' - ]), + event: z.enum(["session.stream_ingestion_unbind"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -349,9 +329,7 @@ export const zSessionStreamIngestionUnbindWebhookRequest = z.object({ export const zSessionLiveStreamingStartedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.live_streaming_started' - ]), + event: z.enum(["session.live_streaming_started"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -363,10 +341,10 @@ export const zSessionLiveStreamingStartedWebhookRequest = z.object({ start_time: z.iso.datetime(), live_streaming: z.object({ service: z.enum([ - 'Facebook', - 'Workplace_by_Facebook', - 'YouTube', - 'Custom_Live_Streaming_Service' + "Facebook", + "Workplace_by_Facebook", + "YouTube", + "Custom_Live_Streaming_Service" ]), custom_live_streaming_settings: z.object({ stream_url: z.string(), @@ -436,9 +414,7 @@ export const zSessionUserPhoneCalloutAcceptedWebhookRequest = z.object({ export const zSessionUserLeftWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.user_left' - ]), + event: z.enum(["session.user_left"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -465,9 +441,7 @@ export const zSessionUserLeftWebhookRequest = z.object({ export const zSessionSharingStartedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.sharing_started' - ]), + event: z.enum(["session.sharing_started"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -482,10 +456,10 @@ export const zSessionSharingStartedWebhookRequest = z.object({ user_key: z.optional(z.string()), sharing_details: z.object({ content: z.enum([ - 'application', - 'whiteboard', - 'desktop', - 'unknown' + "application", + "whiteboard", + "desktop", + "unknown" ]), date_time: z.iso.datetime() }) @@ -522,9 +496,7 @@ export const zSessionUserPhoneCalloutCanceledWebhookRequest = z.object({ export const zSessionRecordingTranscriptCompletedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_transcript_completed' - ]), + event: z.enum(["session.recording_transcript_completed"]), event_ts: z.coerce.bigint(), download_token: z.string(), payload: z.object({ @@ -542,48 +514,46 @@ export const zSessionRecordingTranscriptCompletedWebhookRequest = z.object({ file_name: z.optional(z.string()), file_path: z.optional(z.string()), file_type: z.optional(z.enum([ - 'MP4', - 'M4A', - 'CHAT', - 'TRANSCRIPT', - 'CSV', - 'CC', - 'TB', - 'CHAT_MESSAGE', - 'TIMELINE' + "MP4", + "M4A", + "CHAT", + "TRANSCRIPT", + "CSV", + "CC", + "TB", + "CHAT_MESSAGE", + "TIMELINE" ])), file_size: z.optional(z.number()), file_extension: z.optional(z.enum([ - 'MP4', - 'M4A', - 'TXT', - 'VTT', - 'CSV', - 'JSON', - 'JPG' + "MP4", + "M4A", + "TXT", + "VTT", + "CSV", + "JSON", + "JPG" ])), download_url: z.optional(z.string()), - status: z.optional(z.enum([ - 'completed' - ])), + status: z.optional(z.enum(["completed"])), recording_type: z.optional(z.enum([ - 'shared_screen_with_speaker_view(CC)', - 'shared_screen_with_speaker_view', - 'shared_screen_with_gallery_view', - 'gallery_view', - 'shared_screen', - 'audio_only', - 'audio_transcript', - 'chat_file', - 'active_speaker', - 'host_video', - 'audio_only_each_participant', - 'cc_transcript', - 'closed_caption', - 'poll', - 'timeline', - 'thumbnail', - 'chat_message' + "shared_screen_with_speaker_view(CC)", + "shared_screen_with_speaker_view", + "shared_screen_with_gallery_view", + "gallery_view", + "shared_screen", + "audio_only", + "audio_transcript", + "chat_file", + "active_speaker", + "host_video", + "audio_only_each_participant", + "cc_transcript", + "closed_caption", + "poll", + "timeline", + "thumbnail", + "chat_message" ])) })) }) @@ -595,9 +565,7 @@ export const zSessionRecordingTranscriptCompletedWebhookRequest = z.object({ export const zSessionRecordingDeletedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_deleted' - ]), + event: z.enum(["session.recording_deleted"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -658,9 +626,7 @@ export const zSessionUserRoomSystemCalloutFailedWebhookRequest = z.object({ export const zSessionRecordingCompletedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_completed' - ]), + event: z.enum(["session.recording_completed"]), event_ts: z.coerce.bigint(), download_token: z.string(), payload: z.object({ @@ -678,47 +644,45 @@ export const zSessionRecordingCompletedWebhookRequest = z.object({ file_name: z.optional(z.string()), file_path: z.optional(z.string()), file_type: z.optional(z.enum([ - 'MP4', - 'M4A', - 'CHAT', - 'TRANSCRIPT', - 'CSV', - 'CC', - 'TB', - 'CHAT_MESSAGE' + "MP4", + "M4A", + "CHAT", + "TRANSCRIPT", + "CSV", + "CC", + "TB", + "CHAT_MESSAGE" ])), file_size: z.optional(z.number()), file_extension: z.optional(z.enum([ - 'MP4', - 'M4A', - 'TXT', - 'VTT', - 'CSV', - 'JSON', - 'JPG' + "MP4", + "M4A", + "TXT", + "VTT", + "CSV", + "JSON", + "JPG" ])), download_url: z.optional(z.string()), - status: z.optional(z.enum([ - 'completed' - ])), + status: z.optional(z.enum(["completed"])), recording_type: z.optional(z.enum([ - 'shared_screen_with_speaker_view(CC)', - 'shared_screen_with_speaker_view', - 'shared_screen_with_gallery_view', - 'gallery_view', - 'shared_screen', - 'audio_only', - 'audio_transcript', - 'chat_file', - 'active_speaker', - 'host_video', - 'audio_only_each_participant', - 'cc_transcript', - 'closed_caption', - 'poll', - 'timeline', - 'thumbnail', - 'chat_message' + "shared_screen_with_speaker_view(CC)", + "shared_screen_with_speaker_view", + "shared_screen_with_gallery_view", + "gallery_view", + "shared_screen", + "audio_only", + "audio_transcript", + "chat_file", + "active_speaker", + "host_video", + "audio_only_each_participant", + "cc_transcript", + "closed_caption", + "poll", + "timeline", + "thumbnail", + "chat_message" ])) })), participant_audio_files: z.optional(z.array(z.object({ @@ -728,47 +692,45 @@ export const zSessionRecordingCompletedWebhookRequest = z.object({ file_name: z.optional(z.string()), file_path: z.optional(z.string()), file_type: z.optional(z.enum([ - 'MP4', - 'M4A', - 'CHAT', - 'TRANSCRIPT', - 'CSV', - 'CC', - 'TB', - 'CHAT_MESSAGE' + "MP4", + "M4A", + "CHAT", + "TRANSCRIPT", + "CSV", + "CC", + "TB", + "CHAT_MESSAGE" ])), file_size: z.optional(z.number()), file_extension: z.optional(z.enum([ - 'MP4', - 'M4A', - 'TXT', - 'VTT', - 'CSV', - 'JSON', - 'JPG' + "MP4", + "M4A", + "TXT", + "VTT", + "CSV", + "JSON", + "JPG" ])), download_url: z.optional(z.string()), - status: z.optional(z.enum([ - 'completed' - ])), + status: z.optional(z.enum(["completed"])), recording_type: z.optional(z.enum([ - 'shared_screen_with_speaker_view(CC)', - 'shared_screen_with_speaker_view', - 'shared_screen_with_gallery_view', - 'gallery_view', - 'shared_screen', - 'audio_only', - 'audio_transcript', - 'chat_file', - 'active_speaker', - 'host_video', - 'audio_only_each_participant', - 'cc_transcript', - 'closed_caption', - 'poll', - 'timeline', - 'thumbnail', - 'chat_message' + "shared_screen_with_speaker_view(CC)", + "shared_screen_with_speaker_view", + "shared_screen_with_gallery_view", + "gallery_view", + "shared_screen", + "audio_only", + "audio_transcript", + "chat_file", + "active_speaker", + "host_video", + "audio_only_each_participant", + "cc_transcript", + "closed_caption", + "poll", + "timeline", + "thumbnail", + "chat_message" ])), user_id: z.optional(z.string()), user_key: z.optional(z.string()) @@ -779,21 +741,12 @@ export const zSessionRecordingCompletedWebhookRequest = z.object({ recording_end: z.optional(z.string()), file_name: z.optional(z.string()), file_path: z.optional(z.string()), - file_type: z.optional(z.enum([ - 'MP4' - ])), + file_type: z.optional(z.enum(["MP4"])), file_size: z.optional(z.number()), - file_extension: z.optional(z.enum([ - 'MP4' - ])), + file_extension: z.optional(z.enum(["MP4"])), download_url: z.optional(z.string()), - status: z.optional(z.enum([ - 'completed' - ])), - recording_type: z.optional(z.enum([ - 'individual_user', - 'individual_shared_screen' - ])), + status: z.optional(z.enum(["completed"])), + recording_type: z.optional(z.enum(["individual_user", "individual_shared_screen"])), user_id: z.optional(z.string()), user_key: z.optional(z.string()) }))) @@ -806,9 +759,7 @@ export const zSessionRecordingCompletedWebhookRequest = z.object({ export const zSessionRecordingTranscriptFailedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_transcript_failed' - ]), + event: z.enum(["session.recording_transcript_failed"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -827,9 +778,7 @@ export const zSessionRecordingTranscriptFailedWebhookRequest = z.object({ export const zSessionRecordingTrashedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_trashed' - ]), + event: z.enum(["session.recording_trashed"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -850,9 +799,7 @@ export const zSessionRecordingTrashedWebhookRequest = z.object({ export const zSessionUserJoinedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.user_joined' - ]), + event: z.enum(["session.user_joined"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -878,9 +825,7 @@ export const zSessionUserJoinedWebhookRequest = z.object({ export const zSessionStreamIngestionStartedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.stream_ingestion_started' - ]), + event: z.enum(["session.stream_ingestion_started"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -905,9 +850,7 @@ export const zSessionStreamIngestionStartedWebhookRequest = z.object({ export const zSessionStreamIngestionConnectedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.stream_ingestion_connected' - ]), + event: z.enum(["session.stream_ingestion_connected"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -932,9 +875,7 @@ export const zSessionStreamIngestionConnectedWebhookRequest = z.object({ export const zSessionStreamIngestionDisconnectedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.stream_ingestion_disconnected' - ]), + event: z.enum(["session.stream_ingestion_disconnected"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -959,9 +900,7 @@ export const zSessionStreamIngestionDisconnectedWebhookRequest = z.object({ export const zSessionRecordingRecoveredWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_recovered' - ]), + event: z.enum(["session.recording_recovered"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), @@ -1059,9 +998,7 @@ export const zSessionUserRoomSystemCalloutAcceptedWebhookRequest = z.object({ export const zSessionRecordingStoppedWebhookRequest = z.object({ body: z.optional(z.object({ - event: z.enum([ - 'session.recording_stopped' - ]), + event: z.enum(["session.recording_stopped"]), event_ts: z.coerce.bigint(), payload: z.object({ account_id: z.string(), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/mini/default/zod.gen.ts index 31874e2bde..3ce872349b 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/mini/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().check(z.maxLength(64), z.rege * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())) }); @@ -566,19 +566,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterString: z._default(z.string(), 'Hello World!'), + parameterString: z._default(z.string(), "Hello World!"), parameterNumber: z._default(z.number(), 123), parameterBoolean: z._default(z.boolean(), true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z._default(z.object({ prop: z.optional(z.string()) - }), { - prop: 'Hello World!' - }) + }), { prop: "Hello World!" }) }) }); @@ -586,13 +584,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])) })) }); @@ -601,11 +599,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -728,14 +726,14 @@ export const zTypesData = z.object({ })), query: z.object({ parameterNumber: z._default(z.number(), 123), - parameterString: z._default(z.string(), 'default'), + parameterString: z._default(z.string(), "default"), parameterBoolean: z._default(z.boolean(), true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.string(), z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v3/default/zod.gen.ts index 4640f7e817..0cd8554d53 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v3/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().max(64).regex(/^[a-zA-Z0-9_]* * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional() }); @@ -564,19 +564,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().default('Hello World!'), + parameterString: z.string().default("Hello World!"), parameterNumber: z.number().default(123), parameterBoolean: z.boolean().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z.object({ prop: z.string().optional() - }).default({ - prop: 'Hello World!' - }) + }).default({ prop: "Hello World!" }) }) }); @@ -584,13 +582,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional() }).optional() }); @@ -599,11 +597,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -726,14 +724,14 @@ export const zTypesData = z.object({ }).optional(), query: z.object({ parameterNumber: z.number().default(123), - parameterString: z.string().default('default'), + parameterString: z.string().default("default"), parameterBoolean: z.boolean().default(true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v4/default/zod.gen.ts index cc726c6563..fe57cbd2d1 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/2.0.x/v4/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().max(64).regex(/^[a-zA-Z0-9_]* * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())) }); @@ -566,19 +566,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterString: z.string().default('Hello World!'), + parameterString: z.string().default("Hello World!"), parameterNumber: z.number().default(123), parameterBoolean: z.boolean().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z.object({ prop: z.optional(z.string()) - }).default({ - prop: 'Hello World!' - }) + }).default({ prop: "Hello World!" }) }) }); @@ -586,13 +584,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])) })) }); @@ -601,11 +599,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -728,14 +726,14 @@ export const zTypesData = z.object({ })), query: z.object({ parameterNumber: z.number().default(123), - parameterString: z.string().default('default'), + parameterString: z.string().default("default"), parameterBoolean: z.boolean().default(true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.string(), z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/default/zod.gen.ts index c99bdd0783..ae9ea1ca70 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z._default(z.array(z.string()), ['test']); +export const zArrayWithStrings = z._default(z.array(z.string()), ["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z._default(z.optional(z.string()), 'test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z._default(z.optional(z.string()), "test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.unknown()) @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -498,24 +490,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -561,10 +545,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -750,14 +731,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.string() export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.string(), z.unknown()); export const zModelWithConst = z.object({ - String: z.optional(z.enum([ - 'String' - ])), + String: z.optional(z.enum(["String"])), number: z.optional(z.literal(0)), null: z.optional(z.unknown()), - withType: z.optional(z.enum([ - 'Some string' - ])) + withType: z.optional(z.enum(["Some string"])) }); /** @@ -769,10 +746,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -798,46 +772,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.iso.datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.iso.datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -867,10 +822,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1126,16 +1072,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1452,9 +1395,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z._default(z.optional(z.union([ - z._default(z.string(), 'Hello World!'), + z._default(z.string(), "Hello World!"), z.null() - ])), 'Hello World!'), + ])), "Hello World!"), parameterNumber: z._default(z.optional(z.union([ z._default(z.number(), 123), z.null() @@ -1464,9 +1407,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ zModelWithString, @@ -1479,13 +1422,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(zModelWithString) })) @@ -1495,11 +1438,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1647,9 +1590,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z._default(z.number(), 123), parameterString: z._default(z.union([ - z._default(z.string(), 'default'), + z._default(z.string(), "default"), z.null() - ]), 'default'), + ]), "default"), parameterBoolean: z._default(z.union([ z._default(z.boolean(), true), z.null() @@ -1667,9 +1610,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1769,9 +1712,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z._default(z.optional(z.boolean()), true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts index 4cd376b5f7..a29128efa1 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import * as z from 'zod/v4-mini'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/validators/zod.gen.ts index cfa348c12d..eec1dcba9c 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/mini/validators/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/v4-mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zFoo = z._default(z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/default/zod.gen.ts index f32143a782..c0c5463c4c 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.string().optional().default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.string().optional().default("test") + }), z.object({ bar: z.string().optional() - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.unknown().optional() @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.array(z.union([ - z.object({ + results: z.array(z.union([z.object({ foo: z.string().optional() - }), - z.object({ + }), z.object({ bar: z.string().optional() - }) - ])).optional() + })])).optional() }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.enum([ - '3.0' - ]).optional() + 'foo-bar-baz-qux': z.enum(["3.0"]).optional() }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional(), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -496,24 +488,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ]).optional() }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ]).optional() }); @@ -559,10 +543,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.union([ z.boolean(), - z.record(z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.array(z.union([z.number(), z.string()]))) ]).optional() }); @@ -748,14 +729,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.unknown( export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.unknown()); export const zModelWithConst = z.object({ - String: z.enum([ - 'String' - ]).optional(), + String: z.enum(["String"]).optional(), number: z.literal(0).optional(), null: z.unknown().optional(), - withType: z.enum([ - 'Some string' - ]).optional() + withType: z.enum(["Some string"]).optional() }); /** @@ -767,10 +744,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ]).optional() }); @@ -796,46 +770,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.string().datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.string().datetime(), - z.string().datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.string().datetime(), z.string().datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), @@ -865,10 +820,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -909,10 +861,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.union([ @@ -963,16 +912,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.string().optional(), @@ -1124,16 +1070,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.union([ z.string(), @@ -1450,9 +1393,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.never().optional(), query: z.object({ parameterString: z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ]).optional().default('Hello World!'), + ]).optional().default("Hello World!"), parameterNumber: z.union([ z.number().default(123), z.null() @@ -1462,9 +1405,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ]).optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: z.union([ zModelWithString, @@ -1477,13 +1420,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: zModelWithString.optional() }).optional() @@ -1493,11 +1436,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -1645,9 +1588,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1665,9 +1608,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1767,9 +1710,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.boolean().optional().default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts index 941cd87ea1..50d122c711 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod'; -export const zFoo = z.enum([ - 'foo', - 'bar' -]).nullable(); +export const zFoo = z.enum(["foo", "bar"]).nullable(); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/validators/zod.gen.ts index 9d727f32d0..93270e42df 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v3/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zFoo: z.ZodTypeAny = z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/default/zod.gen.ts index 9c08491ec4..b49dadded0 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.optional(z.string()).default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.optional(z.string()).default("test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.unknown()) @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -498,24 +490,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -561,10 +545,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -750,14 +731,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.string() export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.string(), z.unknown()); export const zModelWithConst = z.object({ - String: z.optional(z.enum([ - 'String' - ])), + String: z.optional(z.enum(["String"])), number: z.optional(z.literal(0)), null: z.optional(z.unknown()), - withType: z.optional(z.enum([ - 'Some string' - ])) + withType: z.optional(z.enum(["Some string"])) }); /** @@ -769,10 +746,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -798,46 +772,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.iso.datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.iso.datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -867,10 +822,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1126,16 +1072,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1452,9 +1395,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z.optional(z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ])).default('Hello World!'), + ])).default("Hello World!"), parameterNumber: z.optional(z.union([ z.number().default(123), z.null() @@ -1464,9 +1407,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ zModelWithString, @@ -1479,13 +1422,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(zModelWithString) })) @@ -1495,11 +1438,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1647,9 +1590,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1667,9 +1610,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1769,9 +1712,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.optional(z.boolean()).default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts index 8ebbc33b6d..f837389c2c 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod/v4'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/validators/zod.gen.ts index 0daf7a0a68..7b7e78e8ce 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.0.x/v4/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v4'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zFoo = z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/default/zod.gen.ts index 680e0829a8..ace8d51460 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z._default(z.array(z.string()), ['test']); +export const zArrayWithStrings = z._default(z.array(z.string()), ["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z._default(z.optional(z.string()), 'test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z._default(z.optional(z.string()), "test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -490,21 +482,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -513,10 +496,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -562,10 +542,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -766,10 +743,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -795,46 +769,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -864,10 +819,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1132,16 +1078,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1467,9 +1410,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z._default(z.optional(z.union([ - z._default(z.string(), 'Hello World!'), + z._default(z.string(), "Hello World!"), z.null() - ])), 'Hello World!'), + ])), "Hello World!"), parameterNumber: z._default(z.optional(z.union([ z._default(z.number(), 123), z.null() @@ -1479,14 +1422,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ - z._default(zModelWithString, { - prop: 'Hello World!' - }), + z._default(zModelWithString, { prop: "Hello World!" }), z.null() ])) })) @@ -1496,17 +1437,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), - parameterModel: z._default(z.optional(zModelWithString), { - prop: 'Hello World!' - }) + parameterModel: z._default(z.optional(zModelWithString), { prop: "Hello World!" }) })) }); @@ -1514,11 +1453,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1666,9 +1605,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z._default(z.number(), 123), parameterString: z._default(z.union([ - z._default(z.string(), 'default'), + z._default(z.string(), "default"), z.null() - ]), 'default'), + ]), "default"), parameterBoolean: z._default(z.union([ z._default(z.boolean(), true), z.null() @@ -1789,9 +1728,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z._default(z.optional(z.boolean()), true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts index 4cd376b5f7..a29128efa1 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import * as z from 'zod/v4-mini'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts index a314590d95..1e335b15bc 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ])), corge: z.optional(z.record(z.string(), z.unknown())), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts index 8ecedac9aa..3d13a31654 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/v4-mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts index d9cdb447e1..b5b1752a3e 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/v4-mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts index a8353e832e..31a7f56aaa 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/v4-mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts index bd49adf300..fed7bca7e4 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.optional(z.enum([ - 'dog', - 'cat' - ])), + type: z.optional(z.enum(["dog", "cat"])), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators/zod.gen.ts index 304d89bb57..36991a0586 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/mini/validators/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/v4-mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/default/zod.gen.ts index 58947fdc5a..44b2f2f984 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.string().optional().default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.string().optional().default("test") + }), z.object({ bar: z.string().optional() - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.array(z.union([ - z.object({ + results: z.array(z.union([z.object({ foo: z.string().optional() - }), - z.object({ + }), z.object({ bar: z.string().optional() - }) - ])).optional() + })])).optional() }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.enum([ - '3.0' - ]).optional() + 'foo-bar-baz-qux': z.enum(["3.0"]).optional() }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional(), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -488,21 +480,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ]).optional() }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -511,10 +494,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ]).optional() }); @@ -560,10 +540,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.union([ z.boolean(), - z.record(z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.array(z.union([z.number(), z.string()]))) ]).optional() }); @@ -764,10 +741,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ]).optional() }); @@ -793,46 +767,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.string().datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.string().datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.string().datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), @@ -862,10 +817,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -909,10 +861,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.union([ @@ -963,16 +912,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.string().optional(), @@ -1130,16 +1076,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.union([ z.string(), @@ -1465,9 +1408,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.never().optional(), query: z.object({ parameterString: z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ]).optional().default('Hello World!'), + ]).optional().default("Hello World!"), parameterNumber: z.union([ z.number().default(123), z.null() @@ -1477,14 +1420,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ]).optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: z.union([ - zModelWithString.default({ - prop: 'Hello World!' - }), + zModelWithString.default({ prop: "Hello World!" }), z.null() ]).optional() }).optional() @@ -1494,17 +1435,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), - parameterModel: zModelWithString.optional().default({ - prop: 'Hello World!' - }) + parameterModel: zModelWithString.optional().default({ prop: "Hello World!" }) }).optional() }); @@ -1512,11 +1451,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -1664,9 +1603,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1787,9 +1726,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.boolean().optional().default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts index 941cd87ea1..50d122c711 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod'; -export const zFoo = z.enum([ - 'foo', - 'bar' -]).nullable(); +export const zFoo = z.enum(["foo", "bar"]).nullable(); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts index 79075274d6..2a6f85b9a5 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ]).optional(), corge: z.record(z.unknown()).optional(), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts index c9317d5912..c5e54abe1f 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts index e89f8e00be..4f6c910cd9 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts index c26d40cf35..0b918977ec 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts index 83c308d683..30561e52c5 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.enum([ - 'dog', - 'cat' - ]).optional(), + type: z.enum(["dog", "cat"]).optional(), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators/zod.gen.ts index 8e5318a8c7..b754458126 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v3/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/default/zod.gen.ts index 57de43d2ac..aa57e5215b 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.optional(z.string()).default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.optional(z.string()).default("test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -490,21 +482,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -513,10 +496,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -562,10 +542,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -766,10 +743,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -795,46 +769,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -864,10 +819,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1132,16 +1078,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1467,9 +1410,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z.optional(z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ])).default('Hello World!'), + ])).default("Hello World!"), parameterNumber: z.optional(z.union([ z.number().default(123), z.null() @@ -1479,14 +1422,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ - zModelWithString.default({ - prop: 'Hello World!' - }), + zModelWithString.default({ prop: "Hello World!" }), z.null() ])) })) @@ -1496,17 +1437,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), - parameterModel: z.optional(zModelWithString).default({ - prop: 'Hello World!' - }) + parameterModel: z.optional(zModelWithString).default({ prop: "Hello World!" }) })) }); @@ -1514,11 +1453,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1666,9 +1605,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1789,9 +1728,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.optional(z.boolean()).default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts index 8ebbc33b6d..f837389c2c 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod/v4'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts index 152fe92964..88d4a097ee 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ])), corge: z.optional(z.record(z.string(), z.unknown())), diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts index 5781d917ff..7929b16937 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v4'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts index eb25f46f5a..7d6a557600 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v4'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts index b2d4ca7177..44518a7737 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v4'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts index 197f5de1d8..4f609516be 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.optional(z.enum([ - 'dog', - 'cat' - ])), + type: z.optional(z.enum(["dog", "cat"])), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators/zod.gen.ts index 15238b2a7e..f6fb529ebf 100644 --- a/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v3/__snapshots__/3.1.x/v4/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v4'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts index a89a89735c..0cf4451de3 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/mini/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().check(z.maxLength(64), z.rege * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())) }); @@ -566,19 +566,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterString: z._default(z.string(), 'Hello World!'), + parameterString: z._default(z.string(), "Hello World!"), parameterNumber: z._default(z.number(), 123), parameterBoolean: z._default(z.boolean(), true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z._default(z.object({ prop: z.optional(z.string()) - }), { - prop: 'Hello World!' - }) + }), { prop: "Hello World!" }) }) }); @@ -586,13 +584,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])) })) }); @@ -601,11 +599,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -728,14 +726,14 @@ export const zTypesData = z.object({ })), query: z.object({ parameterNumber: z._default(z.number(), 123), - parameterString: z._default(z.string(), 'default'), + parameterString: z._default(z.string(), "default"), parameterBoolean: z._default(z.boolean(), true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.string(), z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts index 46bd465e9a..eb5f8c4b6e 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v3/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().max(64).regex(/^[a-zA-Z0-9_]* * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional() }); @@ -564,19 +564,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().default('Hello World!'), + parameterString: z.string().default("Hello World!"), parameterNumber: z.number().default(123), parameterBoolean: z.boolean().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z.object({ prop: z.string().optional() - }).default({ - prop: 'Hello World!' - }) + }).default({ prop: "Hello World!" }) }) }); @@ -584,13 +582,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional() }).optional() }); @@ -599,11 +597,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -726,14 +724,14 @@ export const zTypesData = z.object({ }).optional(), query: z.object({ parameterNumber: z.number().default(123), - parameterString: z.string().default('default'), + parameterString: z.string().default("default"), parameterBoolean: z.boolean().default(true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts index 87c7a4316d..2a050bbb92 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/2.0.x/v4/default/zod.gen.ts @@ -74,12 +74,12 @@ export const zSimpleStringWithPattern = z.string().max(64).regex(/^[a-zA-Z0-9_]* * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); /** @@ -232,18 +232,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ test: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -260,15 +260,15 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())) }); @@ -566,19 +566,17 @@ export const zCallWithDefaultParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterString: z.string().default('Hello World!'), + parameterString: z.string().default("Hello World!"), parameterNumber: z.number().default(123), parameterBoolean: z.boolean().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]), parameterModel: z.object({ prop: z.optional(z.string()) - }).default({ - prop: 'Hello World!' - }) + }).default({ prop: "Hello World!" }) }) }); @@ -586,13 +584,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])) })) }); @@ -601,11 +599,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -728,14 +726,14 @@ export const zTypesData = z.object({ })), query: z.object({ parameterNumber: z.number().default(123), - parameterString: z.string().default('default'), + parameterString: z.string().default("default"), parameterBoolean: z.boolean().default(true), parameterArray: z.array(z.string()), parameterDictionary: z.record(z.string(), z.unknown()), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts index 5a6405c953..0f87b517e0 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z._default(z.array(z.string()), ['test']); +export const zArrayWithStrings = z._default(z.array(z.string()), ["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z._default(z.optional(z.string()), 'test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z._default(z.optional(z.string()), "test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.unknown()) @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -498,24 +490,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -561,10 +545,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -750,14 +731,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.string() export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.string(), z.unknown()); export const zModelWithConst = z.object({ - String: z.optional(z.enum([ - 'String' - ])), + String: z.optional(z.enum(["String"])), number: z.optional(z.literal(0)), null: z.optional(z.unknown()), - withType: z.optional(z.enum([ - 'Some string' - ])) + withType: z.optional(z.enum(["Some string"])) }); /** @@ -769,10 +746,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -798,46 +772,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.iso.datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.iso.datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -867,10 +822,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1126,16 +1072,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1452,9 +1395,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z._default(z.optional(z.union([ - z._default(z.string(), 'Hello World!'), + z._default(z.string(), "Hello World!"), z.null() - ])), 'Hello World!'), + ])), "Hello World!"), parameterNumber: z._default(z.optional(z.union([ z._default(z.number(), 123), z.null() @@ -1464,9 +1407,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ zModelWithString, @@ -1479,13 +1422,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(zModelWithString) })) @@ -1495,11 +1438,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1647,9 +1590,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z._default(z.number(), 123), parameterString: z._default(z.union([ - z._default(z.string(), 'default'), + z._default(z.string(), "default"), z.null() - ]), 'default'), + ]), "default"), parameterBoolean: z._default(z.union([ z._default(z.boolean(), true), z.null() @@ -1667,9 +1610,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1769,9 +1712,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z._default(z.optional(z.boolean()), true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts index fb5d80a303..d187b3bf82 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import * as z from 'zod/mini'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts index 7a5c784862..90725c7926 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/mini/validators/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zFoo = z._default(z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts index 50fddeaa4a..f2db189115 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.string().optional().default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.string().optional().default("test") + }), z.object({ bar: z.string().optional() - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.unknown().optional() @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.array(z.union([ - z.object({ + results: z.array(z.union([z.object({ foo: z.string().optional() - }), - z.object({ + }), z.object({ bar: z.string().optional() - }) - ])).optional() + })])).optional() }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.enum([ - '3.0' - ]).optional() + 'foo-bar-baz-qux': z.enum(["3.0"]).optional() }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional(), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -496,24 +488,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ]).optional() }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ]).optional() }); @@ -559,10 +543,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.union([ z.boolean(), - z.record(z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.array(z.union([z.number(), z.string()]))) ]).optional() }); @@ -748,14 +729,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.unknown( export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.unknown()); export const zModelWithConst = z.object({ - String: z.enum([ - 'String' - ]).optional(), + String: z.enum(["String"]).optional(), number: z.literal(0).optional(), null: z.unknown().optional(), - withType: z.enum([ - 'Some string' - ]).optional() + withType: z.enum(["Some string"]).optional() }); /** @@ -767,10 +744,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ]).optional() }); @@ -796,46 +770,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.string().datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.string().datetime(), - z.string().datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.string().datetime(), z.string().datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), @@ -865,10 +820,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -909,10 +861,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.union([ @@ -963,16 +912,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.string().optional(), @@ -1124,16 +1070,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.union([ z.string(), @@ -1450,9 +1393,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.never().optional(), query: z.object({ parameterString: z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ]).optional().default('Hello World!'), + ]).optional().default("Hello World!"), parameterNumber: z.union([ z.number().default(123), z.null() @@ -1462,9 +1405,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ]).optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: z.union([ zModelWithString, @@ -1477,13 +1420,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: zModelWithString.optional() }).optional() @@ -1493,11 +1436,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -1645,9 +1588,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1665,9 +1608,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1767,9 +1710,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.boolean().optional().default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts index c9196982b3..a4ae31da1b 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod/v3'; -export const zFoo = z.enum([ - 'foo', - 'bar' -]).nullable(); +export const zFoo = z.enum(["foo", "bar"]).nullable(); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts index bdddc57752..ddf3214139 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v3/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v3'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zFoo: z.ZodTypeAny = z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts index c44dd9b8e4..ac2dd64302 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.optional(z.string()).default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.optional(z.string()).default("test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.unknown()) @@ -190,14 +187,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -302,10 +296,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -314,18 +308,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -334,9 +328,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -351,22 +343,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -498,24 +490,16 @@ export const zCompositionWithNestedAnyAndTypeNull = z.object({ ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); -export const zConstValue = z.enum([ - 'ConstValue' -]); +export const zConstValue = z.enum(["ConstValue"]); /** * This is a model with one property with a 'any of' relationship where the options are not $ref */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -561,10 +545,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -750,14 +731,10 @@ export const zFreeFormObjectWithAdditionalPropertiesEqTrue = z.record(z.string() export const zFreeFormObjectWithAdditionalPropertiesEqEmptyObject = z.record(z.string(), z.unknown()); export const zModelWithConst = z.object({ - String: z.optional(z.enum([ - 'String' - ])), + String: z.optional(z.enum(["String"])), number: z.optional(z.literal(0)), null: z.optional(z.unknown()), - withType: z.optional(z.enum([ - 'Some string' - ])) + withType: z.optional(z.enum(["Some string"])) }); /** @@ -769,10 +746,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -798,46 +772,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.iso.datetime() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.iso.datetime()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -867,10 +822,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1126,16 +1072,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1452,9 +1395,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z.optional(z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ])).default('Hello World!'), + ])).default("Hello World!"), parameterNumber: z.optional(z.union([ z.number().default(123), z.null() @@ -1464,9 +1407,9 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ zModelWithString, @@ -1479,13 +1422,13 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(zModelWithString) })) @@ -1495,11 +1438,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1647,9 +1590,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1667,9 +1610,9 @@ export const zTypesData = z.object({ z.null() ]), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]) }) }); @@ -1769,9 +1712,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.optional(z.boolean()).default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts index 83397c84fa..d7fc87f62c 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts index 944f96e474..8e72791f0f 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.0.x/v4/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zFoo = z.union([ z.object({ diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts index 7974190a01..394464b158 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z._default(z.array(z.string()), ['test']); +export const zArrayWithStrings = z._default(z.array(z.string()), ["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z._default(z.optional(z.string()), 'test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z._default(z.optional(z.string()), "test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -490,21 +482,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -513,10 +496,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -562,10 +542,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -766,10 +743,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -795,46 +769,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -864,10 +819,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1132,16 +1078,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1467,9 +1410,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z._default(z.optional(z.union([ - z._default(z.string(), 'Hello World!'), + z._default(z.string(), "Hello World!"), z.null() - ])), 'Hello World!'), + ])), "Hello World!"), parameterNumber: z._default(z.optional(z.union([ z._default(z.number(), 123), z.null() @@ -1479,14 +1422,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ - z._default(zModelWithString, { - prop: 'Hello World!' - }), + z._default(zModelWithString, { prop: "Hello World!" }), z.null() ])) })) @@ -1496,17 +1437,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z._default(z.optional(z.string()), 'Hello World!'), + parameterString: z._default(z.optional(z.string()), "Hello World!"), parameterNumber: z._default(z.optional(z.number()), 123), parameterBoolean: z._default(z.optional(z.boolean()), true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), - parameterModel: z._default(z.optional(zModelWithString), { - prop: 'Hello World!' - }) + parameterModel: z._default(z.optional(zModelWithString), { prop: "Hello World!" }) })) }); @@ -1514,11 +1453,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z._default(z.optional(z.string()), 'Hello World!'), - parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ''), + parameterOptionalStringWithDefault: z._default(z.optional(z.string()), "Hello World!"), + parameterOptionalStringWithEmptyDefault: z._default(z.optional(z.string()), ""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z._default(z.string(), 'Hello World!'), - parameterStringWithEmptyDefault: z._default(z.string(), ''), + parameterStringWithDefault: z._default(z.string(), "Hello World!"), + parameterStringWithEmptyDefault: z._default(z.string(), ""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1666,9 +1605,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z._default(z.number(), 123), parameterString: z._default(z.union([ - z._default(z.string(), 'default'), + z._default(z.string(), "default"), z.null() - ]), 'default'), + ]), "default"), parameterBoolean: z._default(z.union([ z._default(z.boolean(), true), z.null() @@ -1789,9 +1728,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z._default(z.optional(z.boolean()), true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/defaults-with-ref-and-anyof/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/defaults-with-ref-and-anyof/zod.gen.ts index 74f89f961c..f1262708e1 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/defaults-with-ref-and-anyof/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/defaults-with-ref-and-anyof/zod.gen.ts @@ -2,29 +2,23 @@ import * as z from 'zod/mini'; -export const zAudioFormat = z.enum([ - 'pcm_16bit_44.1khz', - 'pcm_16bit_24khz' -]); +export const zAudioFormat = z.enum(["pcm_16bit_44.1khz", "pcm_16bit_24khz"]); export const zLanguage = z.enum([ - 'en', - 'es', - 'fr' + "en", + "es", + "fr" ]); export const zNestedConfig = z.object({ - model: z._default(z.string(), 'gpt-4'), + model: z._default(z.string(), "gpt-4"), temperature: z._default(z.number(), 1) }); export const zTestSchema = z.object({ primitiveDefault: z._default(z.number(), 42), - refWithPrimitiveDefault: z._default(zAudioFormat, 'pcm_16bit_44.1khz'), - refWithObjectDefault: z._default(zNestedConfig, { - model: 'gpt-4', - temperature: 1 - }), + refWithPrimitiveDefault: z._default(zAudioFormat, "pcm_16bit_44.1khz"), + refWithObjectDefault: z._default(zNestedConfig, { model: "gpt-4", temperature: 1 }), anyOfWithNullDefault: z._default(z.union([ z.number(), z.null() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts index fb5d80a303..d187b3bf82 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import * as z from 'zod/mini'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts index c6bbe64fa0..69a834847c 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ])), corge: z.optional(z.record(z.string(), z.unknown())), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts index 9ac32990ce..2b2bbe3596 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts index db559c7419..d9db6c9a3a 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts index 669174c0ac..bcd87393a1 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts index 8a820c15dd..fa1dda3b07 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.optional(z.enum([ - 'dog', - 'cat' - ])), + type: z.optional(z.enum(["dog", "cat"])), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts index b786abd75f..89f03442a8 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/mini/validators/zod.gen.ts @@ -2,7 +2,7 @@ import * as z from 'zod/mini'; -export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), 'baz'); +export const zBaz = z._default(z.readonly(z.string().check(z.regex(/foo\nbar/))), "baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts index bd1c50c977..5d43b41606 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.string().optional().default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.string().optional().default("test") + }), z.object({ bar: z.string().optional() - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.array(z.union([ - z.object({ + results: z.array(z.union([z.object({ foo: z.string().optional() - }), - z.object({ + }), z.object({ bar: z.string().optional() - }) - ])).optional() + })])).optional() }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional(), statusCode: z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ]).optional(), bool: z.literal(true).optional() }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.enum([ - '3.0' - ]).optional() + 'foo-bar-baz-qux': z.enum(["3.0"]).optional() }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.record(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), dictionaryWithEnumFromDescription: z.record(z.number().int()).optional(), arrayWithEnum: z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])).optional(), arrayWithDescription: z.array(z.number().int()).optional(), 'foo_bar-enum': z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ]).optional() }); @@ -488,21 +480,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ]).optional() }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -511,10 +494,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ]).optional() }); @@ -560,10 +540,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.union([ z.boolean(), - z.record(z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.array(z.union([z.number(), z.string()]))) ]).optional() }); @@ -764,10 +741,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ]).optional() }); @@ -793,46 +767,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.string().datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.string().datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.string().datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.array(zModelWithNestedArrayEnumsDataFoo).optional(), @@ -862,10 +817,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -909,10 +861,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.union([ @@ -963,16 +912,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.string().optional(), @@ -1130,16 +1076,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.array(z.number()).optional() }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.union([ z.string(), @@ -1465,9 +1408,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.never().optional(), query: z.object({ parameterString: z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ]).optional().default('Hello World!'), + ]).optional().default("Hello World!"), parameterNumber: z.union([ z.number().default(123), z.null() @@ -1477,14 +1420,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ]).optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), parameterModel: z.union([ - zModelWithString.default({ - prop: 'Hello World!' - }), + zModelWithString.default({ prop: "Hello World!" }), z.null() ]).optional() }).optional() @@ -1494,17 +1435,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterString: z.string().optional().default('Hello World!'), + parameterString: z.string().optional().default("Hello World!"), parameterNumber: z.number().optional().default(123), parameterBoolean: z.boolean().optional().default(true), parameterEnum: z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]).optional(), - parameterModel: zModelWithString.optional().default({ - prop: 'Hello World!' - }) + parameterModel: zModelWithString.optional().default({ prop: "Hello World!" }) }).optional() }); @@ -1512,11 +1451,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.never().optional(), path: z.never().optional(), query: z.object({ - parameterOptionalStringWithDefault: z.string().optional().default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.string().optional().default(''), + parameterOptionalStringWithDefault: z.string().optional().default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.string().optional().default(""), parameterOptionalStringWithNoDefault: z.string().optional(), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.union([ z.string(), @@ -1664,9 +1603,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1787,9 +1726,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.boolean().optional().default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/defaults-with-ref-and-anyof/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/defaults-with-ref-and-anyof/zod.gen.ts index 48d5f8925a..1f3541ff0b 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/defaults-with-ref-and-anyof/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/defaults-with-ref-and-anyof/zod.gen.ts @@ -2,29 +2,23 @@ import { z } from 'zod/v3'; -export const zAudioFormat = z.enum([ - 'pcm_16bit_44.1khz', - 'pcm_16bit_24khz' -]); +export const zAudioFormat = z.enum(["pcm_16bit_44.1khz", "pcm_16bit_24khz"]); export const zLanguage = z.enum([ - 'en', - 'es', - 'fr' + "en", + "es", + "fr" ]); export const zNestedConfig = z.object({ - model: z.string().default('gpt-4'), + model: z.string().default("gpt-4"), temperature: z.number().default(1) }); export const zTestSchema = z.object({ primitiveDefault: z.number().default(42), - refWithPrimitiveDefault: zAudioFormat.default('pcm_16bit_44.1khz'), - refWithObjectDefault: zNestedConfig.default({ - model: 'gpt-4', - temperature: 1 - }), + refWithPrimitiveDefault: zAudioFormat.default("pcm_16bit_44.1khz"), + refWithObjectDefault: zNestedConfig.default({ model: "gpt-4", temperature: 1 }), anyOfWithNullDefault: z.union([ z.number(), z.null() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts index c9196982b3..a4ae31da1b 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod/v3'; -export const zFoo = z.enum([ - 'foo', - 'bar' -]).nullable(); +export const zFoo = z.enum(["foo", "bar"]).nullable(); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts index 4994bcc671..5f05270de0 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ]).optional(), corge: z.record(z.unknown()).optional(), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts index 68a0a720f4..7715995e89 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v3'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts index f2ed3769dd..ead185d864 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v3'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts index 2b0fa9eed9..9126c032a4 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v3'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts index 754b9133a4..b064027f9a 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.enum([ - 'dog', - 'cat' - ]).optional(), + type: z.enum(["dog", "cat"]).optional(), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts index 15850f6a29..d490489c60 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v3/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod/v3'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.object({ qux: z.string().optional() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts index a9cded5374..9cba4c3198 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/default/zod.gen.ts @@ -90,20 +90,20 @@ export const zSimpleStringWithPattern = z.union([ * This is a simple enum with strings */ export const zEnumWithStrings = z.enum([ - 'Success', - 'Warning', - 'Error', + "Success", + "Warning", + "Error", "'Single Quote'", - '"Double Quotes"', - 'Non-ascii: øæåôöØÆÅÔÖ字符串' + "\"Double Quotes\"", + "Non-ascii: øæåôöØÆÅÔÖ字符串" ]); export const zEnumWithReplacedCharacters = z.union([ z.literal("'Single Quote'"), - z.literal('"Double Quotes"'), - z.literal('øæåôöØÆÅÔÖ字符串'), + z.literal("\"Double Quotes\""), + z.literal("øæåôöØÆÅÔÖ字符串"), z.literal(3.1), - z.literal('') + z.literal("") ]); /** @@ -160,7 +160,7 @@ export const zArrayWithBooleans = z.array(z.boolean()); /** * This is a simple array with strings */ -export const zArrayWithStrings = z.array(z.string()).default(['test']); +export const zArrayWithStrings = z.array(z.string()).default(["test"]); /** * This is a simple array with properties @@ -173,14 +173,11 @@ export const zArrayWithProperties = z.array(z.object({ /** * This is a simple array with any of properties */ -export const zArrayWithAnyOfProperties = z.array(z.union([ - z.object({ - foo: z.optional(z.string()).default('test') - }), - z.object({ +export const zArrayWithAnyOfProperties = z.array(z.union([z.object({ + foo: z.optional(z.string()).default("test") + }), z.object({ bar: z.optional(z.string()) - }) -])); + })])); export const zAnyOfAnyAndNull = z.object({ data: z.optional(z.union([ @@ -193,14 +190,11 @@ export const zAnyOfAnyAndNull = z.object({ * This is a simple array with any of properties */ export const zAnyOfArrays = z.object({ - results: z.optional(z.array(z.union([ - z.object({ + results: z.optional(z.array(z.union([z.object({ foo: z.optional(z.string()) - }), - z.object({ + }), z.object({ bar: z.optional(z.string()) - }) - ]))) + })]))) }); /** @@ -305,10 +299,10 @@ export const zModelWithNullableString = z.object({ z.null() ]), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -317,18 +311,18 @@ export const zModelWithNullableString = z.object({ */ export const zModelWithEnum = z.object({ 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])), statusCode: z.optional(z.enum([ - '100', - '200 FOO', - '300 FOO_BAR', - '400 foo-bar', - '500 foo.bar', - '600 foo&bar' + "100", + "200 FOO", + "300 FOO_BAR", + "400 foo-bar", + "500 foo.bar", + "600 foo&bar" ])), bool: z.optional(z.literal(true)) }); @@ -337,9 +331,7 @@ export const zModelWithEnum = z.object({ * This is a model with one enum with escaped name */ export const zModelWithEnumWithHyphen = z.object({ - 'foo-bar-baz-qux': z.optional(z.enum([ - '3.0' - ])) + 'foo-bar-baz-qux': z.optional(z.enum(["3.0"])) }); /** @@ -354,22 +346,22 @@ export const zModelWithEnumFromDescription = z.object({ */ export const zModelWithNestedEnums = z.object({ dictionaryWithEnum: z.optional(z.record(z.string(), z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), dictionaryWithEnumFromDescription: z.optional(z.record(z.string(), z.int())), arrayWithEnum: z.optional(z.array(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ]))), arrayWithDescription: z.optional(z.array(z.int())), 'foo_bar-enum': z.optional(z.enum([ - 'Success', - 'Warning', - 'Error', - 'ØÆÅ字符串' + "Success", + "Warning", + "Error", + "ØÆÅ字符串" ])) }); @@ -490,21 +482,12 @@ export const zCompositionWithAnyOfAnonymous = z.object({ */ export const zCompositionWithNestedAnyAndTypeNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - zModelWithDictionary, - z.null() - ])), - z.array(z.union([ - zModelWithArray, - z.null() - ])) + z.array(z.union([zModelWithDictionary, z.null()])), + z.array(z.union([zModelWithArray, z.null()])) ])) }); -export const z3eNum1Период = z.enum([ - 'Bird', - 'Dog' -]); +export const z3eNum1Период = z.enum(["Bird", "Dog"]); export const zConstValue = z.literal("ConstValue"); @@ -513,10 +496,7 @@ export const zConstValue = z.literal("ConstValue"); */ export const zCompositionWithNestedAnyOfAndNull = z.object({ propA: z.optional(z.union([ - z.array(z.union([ - z3eNum1Период, - zConstValue - ])), + z.array(z.union([z3eNum1Период, zConstValue])), z.null() ])) }); @@ -562,10 +542,7 @@ export const zCompositionWithOneOfAndSimpleArrayDictionary = z.object({ export const zCompositionWithOneOfAndComplexArrayDictionary = z.object({ propA: z.optional(z.union([ z.boolean(), - z.record(z.string(), z.array(z.union([ - z.number(), - z.string() - ]))) + z.record(z.string(), z.array(z.union([z.number(), z.string()]))) ])) }); @@ -766,10 +743,7 @@ export const zModelWithAdditionalPropertiesEqTrue = z.object({ export const zNestedAnyOfArraysNullable = z.object({ nullableArray: z.optional(z.union([ - z.array(z.union([ - z.string(), - z.boolean() - ])), + z.array(z.union([z.string(), z.boolean()])), z.null() ])) }); @@ -795,46 +769,27 @@ export const zModelWithNullableObject = z.object({ export const zModelWithOneOfEnum = z.union([ z.object({ - foo: z.enum([ - 'Bar' - ]) + foo: z.enum(["Bar"]) }), z.object({ - foo: z.enum([ - 'Baz' - ]) + foo: z.enum(["Baz"]) }), z.object({ - foo: z.enum([ - 'Qux' - ]) + foo: z.enum(["Qux"]) }), z.object({ content: z.iso.datetime(), - foo: z.enum([ - 'Quux' - ]) + foo: z.enum(["Quux"]) }), z.object({ - content: z.tuple([ - z.iso.datetime(), - z.string() - ]), - foo: z.enum([ - 'Corge' - ]) + content: z.tuple([z.iso.datetime(), z.string()]), + foo: z.enum(["Corge"]) }) ]); -export const zModelWithNestedArrayEnumsDataFoo = z.enum([ - 'foo', - 'bar' -]); +export const zModelWithNestedArrayEnumsDataFoo = z.enum(["foo", "bar"]); -export const zModelWithNestedArrayEnumsDataBar = z.enum([ - 'baz', - 'qux' -]); +export const zModelWithNestedArrayEnumsDataBar = z.enum(["baz", "qux"]); export const zModelWithNestedArrayEnumsData = z.object({ foo: z.optional(z.array(zModelWithNestedArrayEnumsDataFoo)), @@ -864,10 +819,7 @@ export const zModelWithArrayReadOnlyAndWriteOnly = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithConstantSizeArray = z.tuple([ - z.number(), - z.number() -]); +export const zModelWithConstantSizeArray = z.tuple([z.number(), z.number()]); export const zModelWithAnyOfConstantSizeArray = z.tuple([ z.union([ @@ -911,10 +863,7 @@ export const zModelWithAnyOfConstantSizeArrayNullable = z.tuple([ ]) ]); -export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([ - z.intersection(z.number(), z.string()), - z.intersection(z.number(), z.string()) -]); +export const zModelWithAnyOfConstantSizeArrayAndIntersect = z.tuple([z.intersection(z.number(), z.string()), z.intersection(z.number(), z.string())]); export const zModelWithNumericEnumUnion = z.object({ value: z.optional(z.union([ @@ -965,16 +914,13 @@ export const zDeleteFooData2 = z.string(); */ export const zImport = z.string(); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptions = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zSchemaWithFormRestrictedKeys = z.object({ description: z.optional(z.string()), @@ -1132,16 +1078,13 @@ export const zModelWithArrayReadOnlyAndWriteOnlyWritable = z.object({ propWithNumber: z.optional(z.array(z.number())) }); -export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([ - z.union([ +export const zModelWithAnyOfConstantSizeArrayWithNSizeAndOptionsWritable = z.tuple([z.union([ z.number(), zImport - ]), - z.union([ + ]), z.union([ z.number(), zImport - ]) -]); + ])]); export const zAdditionalPropertiesUnknownIssueWritable = z.record(z.string(), z.union([ z.string(), @@ -1467,9 +1410,9 @@ export const zCallWithDefaultParametersData = z.object({ path: z.optional(z.never()), query: z.optional(z.object({ parameterString: z.optional(z.union([ - z.string().default('Hello World!'), + z.string().default("Hello World!"), z.null() - ])).default('Hello World!'), + ])).default("Hello World!"), parameterNumber: z.optional(z.union([ z.number().default(123), z.null() @@ -1479,14 +1422,12 @@ export const zCallWithDefaultParametersData = z.object({ z.null() ])).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), parameterModel: z.optional(z.union([ - zModelWithString.default({ - prop: 'Hello World!' - }), + zModelWithString.default({ prop: "Hello World!" }), z.null() ])) })) @@ -1496,17 +1437,15 @@ export const zCallWithDefaultOptionalParametersData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.optional(z.object({ - parameterString: z.optional(z.string()).default('Hello World!'), + parameterString: z.optional(z.string()).default("Hello World!"), parameterNumber: z.optional(z.number()).default(123), parameterBoolean: z.optional(z.boolean()).default(true), parameterEnum: z.optional(z.enum([ - 'Success', - 'Warning', - 'Error' + "Success", + "Warning", + "Error" ])), - parameterModel: z.optional(zModelWithString).default({ - prop: 'Hello World!' - }) + parameterModel: z.optional(zModelWithString).default({ prop: "Hello World!" }) })) }); @@ -1514,11 +1453,11 @@ export const zCallToTestOrderOfParamsData = z.object({ body: z.optional(z.never()), path: z.optional(z.never()), query: z.object({ - parameterOptionalStringWithDefault: z.optional(z.string()).default('Hello World!'), - parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(''), + parameterOptionalStringWithDefault: z.optional(z.string()).default("Hello World!"), + parameterOptionalStringWithEmptyDefault: z.optional(z.string()).default(""), parameterOptionalStringWithNoDefault: z.optional(z.string()), - parameterStringWithDefault: z.string().default('Hello World!'), - parameterStringWithEmptyDefault: z.string().default(''), + parameterStringWithDefault: z.string().default("Hello World!"), + parameterStringWithEmptyDefault: z.string().default(""), parameterStringWithNoDefault: z.string(), parameterStringNullableWithNoDefault: z.optional(z.union([ z.string(), @@ -1666,9 +1605,9 @@ export const zTypesData = z.object({ query: z.object({ parameterNumber: z.number().default(123), parameterString: z.union([ - z.string().default('default'), + z.string().default("default"), z.null() - ]).default('default'), + ]).default("default"), parameterBoolean: z.union([ z.boolean().default(true), z.null() @@ -1789,9 +1728,9 @@ export const zComplexParamsData = z.object({ ]), enabled: z.optional(z.boolean()).default(true), type: z.enum([ - 'Monkey', - 'Horse', - 'Bird' + "Monkey", + "Horse", + "Bird" ]), listOfModels: z.optional(z.union([ z.array(zModelWithString), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/defaults-with-ref-and-anyof/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/defaults-with-ref-and-anyof/zod.gen.ts index 6a47287f0c..bebbbb2fce 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/defaults-with-ref-and-anyof/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/defaults-with-ref-and-anyof/zod.gen.ts @@ -2,29 +2,23 @@ import { z } from 'zod'; -export const zAudioFormat = z.enum([ - 'pcm_16bit_44.1khz', - 'pcm_16bit_24khz' -]); +export const zAudioFormat = z.enum(["pcm_16bit_44.1khz", "pcm_16bit_24khz"]); export const zLanguage = z.enum([ - 'en', - 'es', - 'fr' + "en", + "es", + "fr" ]); export const zNestedConfig = z.object({ - model: z.string().default('gpt-4'), + model: z.string().default("gpt-4"), temperature: z.number().default(1) }); export const zTestSchema = z.object({ primitiveDefault: z.number().default(42), - refWithPrimitiveDefault: zAudioFormat.default('pcm_16bit_44.1khz'), - refWithObjectDefault: zNestedConfig.default({ - model: 'gpt-4', - temperature: 1 - }), + refWithPrimitiveDefault: zAudioFormat.default("pcm_16bit_44.1khz"), + refWithObjectDefault: zNestedConfig.default({ model: "gpt-4", temperature: 1 }), anyOfWithNullDefault: z.union([ z.number(), z.null() diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts index 83397c84fa..d7fc87f62c 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/enum-null/zod.gen.ts @@ -2,17 +2,8 @@ import { z } from 'zod'; -export const zFoo = z.nullable(z.enum([ - 'foo', - 'bar' -])); +export const zFoo = z.nullable(z.enum(["foo", "bar"])); -export const zBar = z.enum([ - 'foo', - 'bar' -]); +export const zBar = z.enum(["foo", "bar"]); -export const zBaz = z.enum([ - 'foo', - 'bar' -]); +export const zBaz = z.enum(["foo", "bar"]); diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts index 46ea47c1df..d333bd0901 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/schema-const/zod.gen.ts @@ -11,7 +11,7 @@ export const zFoo = z.object({ z.literal(1), z.literal(2), z.literal(3), - z.literal('foo'), + z.literal("foo"), z.literal(true) ])), corge: z.optional(z.record(z.string(), z.unknown())), diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts index 515d9ad8bd..0ae49631f9 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-dates/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts index 9678e5eb9d..4222b28ff5 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-metadata/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts index 033e85ced5..100f5735ff 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-types/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export type BazZodType = z.infer; diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts index 3971835be0..f1062b60be 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators-union-merge/zod.gen.ts @@ -22,9 +22,9 @@ export const zDogDetails = z.object({ export const zCatDetails = z.object({ furLength: z.enum([ - 'short', - 'medium', - 'long' + "short", + "medium", + "long" ]), purrs: z.boolean() }); @@ -32,10 +32,7 @@ export const zCatDetails = z.object({ export const zPetStore = z.object({ animals: z.array(z.object({ name: z.string(), - type: z.optional(z.enum([ - 'dog', - 'cat' - ])), + type: z.optional(z.enum(["dog", "cat"])), details: z.union([ zDogDetails, zCatDetails diff --git a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts index f73a35bac9..c1dece30e3 100644 --- a/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts +++ b/packages/openapi-ts-tests/zod/v4/__snapshots__/3.1.x/v4/validators/zod.gen.ts @@ -2,7 +2,7 @@ import { z } from 'zod'; -export const zBaz = z.string().regex(/foo\nbar/).readonly().default('baz'); +export const zBaz = z.string().regex(/foo\nbar/).readonly().default("baz"); export const zQux = z.record(z.string(), z.object({ qux: z.optional(z.string()) diff --git a/packages/openapi-ts/src/plugins/zod/constants.ts b/packages/openapi-ts/src/plugins/zod/constants.ts index fe79a35555..5d44c67103 100644 --- a/packages/openapi-ts/src/plugins/zod/constants.ts +++ b/packages/openapi-ts/src/plugins/zod/constants.ts @@ -1,59 +1,57 @@ -import { tsc } from '~/tsc'; - // TODO: this is inaccurate, it combines identifiers for all supported versions export const identifiers = { - ZodMiniOptional: tsc.identifier({ text: 'ZodMiniOptional' }), - ZodOptional: tsc.identifier({ text: 'ZodOptional' }), - _default: tsc.identifier({ text: '_default' }), - and: tsc.identifier({ text: 'and' }), - array: tsc.identifier({ text: 'array' }), - bigint: tsc.identifier({ text: 'bigint' }), - boolean: tsc.identifier({ text: 'boolean' }), - check: tsc.identifier({ text: 'check' }), - coerce: tsc.identifier({ text: 'coerce' }), - date: tsc.identifier({ text: 'date' }), - datetime: tsc.identifier({ text: 'datetime' }), - default: tsc.identifier({ text: 'default' }), - describe: tsc.identifier({ text: 'describe' }), - email: tsc.identifier({ text: 'email' }), - enum: tsc.identifier({ text: 'enum' }), - globalRegistry: tsc.identifier({ text: 'globalRegistry' }), - gt: tsc.identifier({ text: 'gt' }), - gte: tsc.identifier({ text: 'gte' }), - infer: tsc.identifier({ text: 'infer' }), - int: tsc.identifier({ text: 'int' }), - intersection: tsc.identifier({ text: 'intersection' }), - ip: tsc.identifier({ text: 'ip' }), - ipv4: tsc.identifier({ text: 'ipv4' }), - ipv6: tsc.identifier({ text: 'ipv6' }), - iso: tsc.identifier({ text: 'iso' }), - lazy: tsc.identifier({ text: 'lazy' }), - length: tsc.identifier({ text: 'length' }), - literal: tsc.identifier({ text: 'literal' }), - lt: tsc.identifier({ text: 'lt' }), - lte: tsc.identifier({ text: 'lte' }), - max: tsc.identifier({ text: 'max' }), - maxLength: tsc.identifier({ text: 'maxLength' }), - min: tsc.identifier({ text: 'min' }), - minLength: tsc.identifier({ text: 'minLength' }), - never: tsc.identifier({ text: 'never' }), - null: tsc.identifier({ text: 'null' }), - nullable: tsc.identifier({ text: 'nullable' }), - number: tsc.identifier({ text: 'number' }), - object: tsc.identifier({ text: 'object' }), - optional: tsc.identifier({ text: 'optional' }), - parseAsync: tsc.identifier({ text: 'parseAsync' }), - readonly: tsc.identifier({ text: 'readonly' }), - record: tsc.identifier({ text: 'record' }), - regex: tsc.identifier({ text: 'regex' }), - register: tsc.identifier({ text: 'register' }), - string: tsc.identifier({ text: 'string' }), - time: tsc.identifier({ text: 'time' }), - tuple: tsc.identifier({ text: 'tuple' }), - undefined: tsc.identifier({ text: 'undefined' }), - union: tsc.identifier({ text: 'union' }), - unknown: tsc.identifier({ text: 'unknown' }), - url: tsc.identifier({ text: 'url' }), - uuid: tsc.identifier({ text: 'uuid' }), - void: tsc.identifier({ text: 'void' }), + ZodMiniOptional: 'ZodMiniOptional', + ZodOptional: 'ZodOptional', + _default: '_default', + and: 'and', + array: 'array', + bigint: 'bigint', + boolean: 'boolean', + check: 'check', + coerce: 'coerce', + date: 'date', + datetime: 'datetime', + default: 'default', + describe: 'describe', + email: 'email', + enum: 'enum', + globalRegistry: 'globalRegistry', + gt: 'gt', + gte: 'gte', + infer: 'infer', + int: 'int', + intersection: 'intersection', + ip: 'ip', + ipv4: 'ipv4', + ipv6: 'ipv6', + iso: 'iso', + lazy: 'lazy', + length: 'length', + literal: 'literal', + lt: 'lt', + lte: 'lte', + max: 'max', + maxLength: 'maxLength', + min: 'min', + minLength: 'minLength', + never: 'never', + null: 'null', + nullable: 'nullable', + number: 'number', + object: 'object', + optional: 'optional', + parseAsync: 'parseAsync', + readonly: 'readonly', + record: 'record', + regex: 'regex', + register: 'register', + string: 'string', + time: 'time', + tuple: 'tuple', + undefined: 'undefined', + union: 'union', + unknown: 'unknown', + url: 'url', + uuid: 'uuid', + void: 'void', }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts index 8393a00ae4..a3d2744334 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/plugin.ts @@ -48,12 +48,11 @@ export const irSchemaToAst = ({ }; const refSymbol = plugin.referenceSymbol(query); if (plugin.isSymbolRegistered(query)) { - ast.expression = $(refSymbol.placeholder).$render(); + ast.expression = $(refSymbol.placeholder); } else { ast.expression = $(z.placeholder) .attr(identifiers.lazy) - .call($.func().returns('any').do($(refSymbol.placeholder).return())) - .$render(); + .call($.func().returns('any').do($(refSymbol.placeholder).return())); ast.hasLazyExpression = true; state.hasLazyExpression.value = true; } @@ -67,15 +66,14 @@ export const irSchemaToAst = ({ ast.hasLazyExpression = typeAst.hasLazyExpression; if (plugin.config.metadata && schema.description) { - ast.expression = $(ast.expression) + ast.expression = ast.expression .attr(identifiers.register) .call( $(z.placeholder).attr(identifiers.globalRegistry), $.object() .pretty() .prop('description', $.literal(schema.description)), - ) - .$render(); + ); } } else if (schema.items) { schema = deduplicateSchema({ schema }); @@ -103,8 +101,7 @@ export const irSchemaToAst = ({ ) { ast.expression = $(z.placeholder) .attr(identifiers.intersection) - .call(...itemSchemas.map((schema) => schema.expression)) - .$render(); + .call(...itemSchemas.map((schema) => schema.expression)); } else { ast.expression = itemSchemas[0]!.expression; itemSchemas.slice(1).forEach((schema) => { @@ -115,10 +112,9 @@ export const irSchemaToAst = ({ schema.hasLazyExpression ? $(z.placeholder) .attr(identifiers.lazy) - .call($.func().do($(schema.expression).return())) + .call($.func().do(schema.expression.return())) : schema.expression, - ) - .$render(); + ); }); } } else { @@ -128,8 +124,7 @@ export const irSchemaToAst = ({ $.array() .pretty() .elements(...itemSchemas.map((schema) => schema.expression)), - ) - .$render(); + ); } } else { ast = irSchemaToAst({ plugin, schema, state }); @@ -150,15 +145,13 @@ export const irSchemaToAst = ({ if (schema.accessScope === 'read') { ast.expression = $(z.placeholder) .attr(identifiers.readonly) - .call(ast.expression) - .$render(); + .call(ast.expression); } if (optional) { ast.expression = $(z.placeholder) .attr(identifiers.optional) - .call(ast.expression) - .$render(); + .call(ast.expression); ast.typeName = identifiers.ZodMiniOptional; } @@ -171,8 +164,7 @@ export const irSchemaToAst = ({ if (callParameter) { ast.expression = $(z.placeholder) .attr(identifiers._default) - .call(ast.expression, callParameter) - .$render(); + .call(ast.expression, callParameter); } } } diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/array.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/array.ts index e564872a21..927f18fe51 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/array.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/array.ts @@ -1,9 +1,7 @@ -import type ts from 'typescript'; - import { deduplicateSchema } from '~/ir/schema'; import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -24,24 +22,18 @@ export const arrayToAst = ({ const result: Partial> = {}; - const functionName = tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }); + const functionName = $(z.placeholder).attr(identifiers.array); if (!schema.items) { - result.expression = tsc.callExpression({ - functionName, - parameters: [ - unknownToAst({ - plugin, - schema: { - type: 'unknown', - }, - state, - }).expression, - ], - }); + result.expression = functionName.call( + unknownToAst({ + plugin, + schema: { + type: 'unknown', + }, + state, + }).expression, + ); } else { schema = deduplicateSchema({ schema }); @@ -62,115 +54,71 @@ export const arrayToAst = ({ }); if (itemExpressions.length === 1) { - result.expression = tsc.callExpression({ - functionName, - parameters: itemExpressions, - }); + result.expression = functionName.call(...itemExpressions); } else { if (schema.logicalOperator === 'and') { const firstSchema = schema.items![0]!; // we want to add an intersection, but not every schema can use the same API. // if the first item contains another array or not an object, we cannot use // `.intersection()` as that does not exist on `.union()` and non-object schemas. - let intersectionExpression: ts.Expression; + let intersectionExpression: ReturnType; if ( firstSchema.logicalOperator === 'or' || (firstSchema.type && firstSchema.type !== 'object') ) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.intersection, - }), - parameters: itemExpressions, - }); + intersectionExpression = $(z.placeholder) + .attr(identifiers.intersection) + .call(...itemExpressions); } else { intersectionExpression = itemExpressions[0]!; for (let i = 1; i < itemExpressions.length; i++) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.intersection, - }), - parameters: [intersectionExpression, itemExpressions[i]!], - }); + intersectionExpression = $(z.placeholder) + .attr(identifiers.intersection) + .call(intersectionExpression, itemExpressions[i]); } } - result.expression = tsc.callExpression({ - functionName, - parameters: [intersectionExpression], - }); + result.expression = functionName.call(intersectionExpression); } else { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }), - parameters: [ - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: itemExpressions, - }), - ], - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.array) + .call( + $(z.placeholder) + .attr(identifiers.union) + .call($.array(...itemExpressions)), + ); } } } - const checks: Array = []; + const checks: Array> = []; if (schema.minItems === schema.maxItems && schema.minItems !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.length, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }), + $(z.placeholder).attr(identifiers.length).call($.toExpr(schema.minItems)), ); } else { if (schema.minItems !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.minLength, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }), + $(z.placeholder) + .attr(identifiers.minLength) + .call($.toExpr(schema.minItems)), ); } if (schema.maxItems !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.maxLength, - }), - parameters: [tsc.valueToExpression({ value: schema.maxItems })], - }), + $(z.placeholder) + .attr(identifiers.maxLength) + .call($.toExpr(schema.maxItems)), ); } } if (checks.length) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.check, - }), - parameters: checks, - }); + result.expression = result.expression + .attr(identifiers.check) + .call(...checks); } return result as Omit; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/boolean.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/boolean.ts index c67686f5e9..43a4ec1760 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/boolean.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/boolean.ts @@ -22,11 +22,11 @@ export const booleanToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; } chain = $(z.placeholder).attr(identifiers.boolean).call(); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/enum.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/enum.ts index ee63779bc9..49642b944f 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/enum.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/enum.ts @@ -1,7 +1,5 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -21,8 +19,8 @@ export const enumToAst = ({ const result: Partial> = {}; - const enumMembers: Array = []; - const literalMembers: Array = []; + const enumMembers: Array> = []; + const literalMembers: Array> = []; let isNullable = false; let allStrings = true; @@ -30,45 +28,25 @@ export const enumToAst = ({ for (const item of schema.items ?? []) { // Zod supports string, number, and boolean enums if (item.type === 'string' && typeof item.const === 'string') { - const stringLiteral = tsc.stringLiteral({ - text: item.const, - }); - enumMembers.push(stringLiteral); + const literal = $.literal(item.const); + enumMembers.push(literal); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [stringLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if ( (item.type === 'number' || item.type === 'integer') && typeof item.const === 'number' ) { allStrings = false; - const numberLiteral = tsc.ots.number(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [numberLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'boolean' && typeof item.const === 'boolean') { allStrings = false; - const booleanLiteral = tsc.ots.boolean(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [booleanLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'null' || item.const === null) { isNullable = true; @@ -87,44 +65,22 @@ export const enumToAst = ({ // Use z.enum() for pure string enums, z.union() for mixed or non-string types if (allStrings && enumMembers.length > 0) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.enum, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: enumMembers, - multiLine: false, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.enum) + .call($.array(...enumMembers)); } else if (literalMembers.length === 1) { // For single-member unions, use the member directly instead of wrapping in z.union() - result.expression = literalMembers[0]; + result.expression = literalMembers[0]!; } else { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: literalMembers, - multiLine: literalMembers.length > 3, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.union) + .call($.array(...literalMembers)); } if (isNullable) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.nullable, - }), - parameters: [result.expression], - }); + result.expression = $(z.placeholder) + .attr(identifiers.nullable) + .call(result.expression); } return result as Omit; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/never.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/never.ts index c95f9de7c2..ff41a62499 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/never.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/never.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const neverToAst = ({ resource: 'zod.z', }); const result: Partial> = {}; - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.never, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.never).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/null.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/null.ts index 8c03efbf5a..ab3ff037d5 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/null.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/null.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const nullToAst = ({ resource: 'zod.z', }); const result: Partial> = {}; - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.null, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.null).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/number.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/number.ts index db8d471666..856ab802eb 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/number.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/number.ts @@ -1,7 +1,5 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import { numberParameter } from '../../shared/numbers'; @@ -24,98 +22,54 @@ export const numberToAst = ({ if (typeof schema.const === 'number') { // TODO: parser - handle bigint constants - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.ots.number(schema.const)], - }); + result.expression = $(z.placeholder) + .attr(identifiers.literal) + .call($.literal(schema.const)); return result as Omit; } - result.expression = tsc.callExpression({ - functionName: isBigInt - ? tsc.propertyAccessExpression({ - expression: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.coerce, - }), - name: identifiers.bigint, - }) - : tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.number, - }), - }); + result.expression = isBigInt + ? $(z.placeholder).attr(identifiers.coerce).attr(identifiers.bigint).call() + : $(z.placeholder).attr(identifiers.number).call(); if (!isBigInt && schema.type === 'integer') { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.int, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.int).call(); } - const checks: Array = []; + const checks: Array> = []; if (schema.exclusiveMinimum !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.gt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMinimum }), - ], - }), + $(z.placeholder) + .attr(identifiers.gt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMinimum })), ); } else if (schema.minimum !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.gte, - }), - parameters: [numberParameter({ isBigInt, value: schema.minimum })], - }), + $(z.placeholder) + .attr(identifiers.gte) + .call(numberParameter({ isBigInt, value: schema.minimum })), ); } if (schema.exclusiveMaximum !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.lt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMaximum }), - ], - }), + $(z.placeholder) + .attr(identifiers.lt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMaximum })), ); } else if (schema.maximum !== undefined) { checks.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.lte, - }), - parameters: [numberParameter({ isBigInt, value: schema.maximum })], - }), + $(z.placeholder) + .attr(identifiers.lte) + .call(numberParameter({ isBigInt, value: schema.maximum })), ); } if (checks.length) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.check, - }), - parameters: checks, - }); + result.expression = result.expression + .attr(identifiers.check) + .call(...checks); } return result as Omit; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/object.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/object.ts index cdd2c0da75..a86d8639d9 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/object.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/object.ts @@ -1,5 +1,3 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; import { $ } from '~/ts-dsl'; @@ -60,13 +58,13 @@ export const objectToAst = ({ } if (propertyAst.hasLazyExpression) { - shape.getter(name, $(propertyAst.expression).return()); + shape.getter(name, propertyAst.expression.return()); } else { shape.prop(name, propertyAst.expression); } } - let additional: ts.Expression | null | undefined; + let additional: ReturnType | null | undefined; if ( schema.additionalProperties && (!schema.properties || !Object.keys(schema.properties).length) @@ -93,7 +91,7 @@ export const objectToAst = ({ }; const resolver = plugin.config['~resolvers']?.object?.base; const chain = resolver?.(args) ?? defaultObjectBaseResolver(args); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/string.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/string.ts index 5bdaee764f..c1ca8c8b3d 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/string.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/string.ts @@ -72,7 +72,7 @@ export const stringToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; } @@ -121,6 +121,6 @@ export const stringToAst = ({ chain = chain.attr(identifiers.check).call(...checks); } - result.expression = chain.$render(); + result.expression = chain; return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/tuple.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/tuple.ts index 70bfd1db68..524485ac74 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/tuple.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/tuple.ts @@ -1,8 +1,6 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -24,29 +22,15 @@ export const tupleToAst = ({ if (schema.const && Array.isArray(schema.const)) { const tupleElements = schema.const.map((value) => - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.valueToExpression({ value })], - }), + $(z.placeholder).attr(identifiers.literal).call($.toExpr(value)), ); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); return result as Omit; } - const tupleElements: Array = []; + const tupleElements: Array> = []; if (schema.items) { schema.items.forEach((item, index) => { @@ -65,17 +49,9 @@ export const tupleToAst = ({ }); } - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/undefined.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/undefined.ts index 3ca80927dc..2648e32f45 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/undefined.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/undefined.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const undefinedToAst = ({ resource: 'zod.z', }); const result: Partial> = {}; - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.undefined, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.undefined).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/unknown.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/unknown.ts index 7ba78c070e..d620f87d76 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/unknown.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/unknown.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const unknownToAst = ({ resource: 'zod.z', }); const result: Partial> = {}; - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.unknown, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.unknown).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/mini/toAst/void.ts b/packages/openapi-ts/src/plugins/zod/mini/toAst/void.ts index 96fe46951c..7fe90947e7 100644 --- a/packages/openapi-ts/src/plugins/zod/mini/toAst/void.ts +++ b/packages/openapi-ts/src/plugins/zod/mini/toAst/void.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const voidToAst = ({ resource: 'zod.z', }); const result: Partial> = {}; - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.void, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.void).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/shared/numbers.ts b/packages/openapi-ts/src/plugins/zod/shared/numbers.ts index 2da75b3bc0..d5b4325318 100644 --- a/packages/openapi-ts/src/plugins/zod/shared/numbers.ts +++ b/packages/openapi-ts/src/plugins/zod/shared/numbers.ts @@ -1,6 +1,4 @@ -import type ts from 'typescript'; - -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; export const numberParameter = ({ isBigInt, @@ -8,8 +6,8 @@ export const numberParameter = ({ }: { isBigInt: boolean; value: unknown; -}): ts.Expression | undefined => { - const expression = tsc.valueToExpression({ value }); +}): ReturnType | ReturnType | undefined => { + const expr = $.toExpr(value); if ( isBigInt && @@ -18,11 +16,8 @@ export const numberParameter = ({ typeof value === 'string' || typeof value === 'boolean') ) { - return tsc.callExpression({ - functionName: 'BigInt', - parameters: [expression], - }); + return $('BigInt').call(expr); } - return expression; + return expr; }; diff --git a/packages/openapi-ts/src/plugins/zod/shared/types.d.ts b/packages/openapi-ts/src/plugins/zod/shared/types.d.ts index 302e98d48f..d59027099d 100644 --- a/packages/openapi-ts/src/plugins/zod/shared/types.d.ts +++ b/packages/openapi-ts/src/plugins/zod/shared/types.d.ts @@ -3,11 +3,12 @@ import type ts from 'typescript'; import type { IR } from '~/ir/types'; import type { ToRefs } from '~/plugins'; +import type { $ } from '~/ts-dsl'; import type { ZodPlugin } from '../types'; export type Ast = { - expression: ts.Expression; + expression: ReturnType; hasLazyExpression?: boolean; typeName?: string | ts.Identifier; }; diff --git a/packages/openapi-ts/src/plugins/zod/types.d.ts b/packages/openapi-ts/src/plugins/zod/types.d.ts index ba1d7d9f0d..9038967a21 100644 --- a/packages/openapi-ts/src/plugins/zod/types.d.ts +++ b/packages/openapi-ts/src/plugins/zod/types.d.ts @@ -767,7 +767,7 @@ export type FormatResolverArgs = Required & { export type ObjectBaseResolverArgs = SharedResolverArgs & { /** Null = never */ - additional?: ts.Expression | null; + additional?: ReturnType | null; schema: IR.SchemaObject; shape: ReturnType; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts index 523dc72419..8d7f01888f 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/plugin.ts @@ -48,12 +48,11 @@ export const irSchemaToAst = ({ }; const refSymbol = plugin.referenceSymbol(query); if (plugin.isSymbolRegistered(query)) { - ast.expression = $(refSymbol.placeholder).$render(); + ast.expression = $(refSymbol.placeholder); } else { ast.expression = $(z.placeholder) .attr(identifiers.lazy) - .call($.func().do($(refSymbol.placeholder).return())) - .$render(); + .call($.func().do($(refSymbol.placeholder).return())); ast.hasLazyExpression = true; state.hasLazyExpression.value = true; } @@ -67,10 +66,9 @@ export const irSchemaToAst = ({ ast.typeName = typeAst.anyType; if (plugin.config.metadata && schema.description) { - ast.expression = $(ast.expression) + ast.expression = ast.expression .attr(identifiers.describe) - .call($.literal(schema.description)) - .$render(); + .call($.literal(schema.description)); } } else if (schema.items) { schema = deduplicateSchema({ schema }); @@ -99,15 +97,11 @@ export const irSchemaToAst = ({ ) { ast.expression = $(z.placeholder) .attr(identifiers.intersection) - .call(...itemTypes) - .$render(); + .call(...itemTypes); } else { ast.expression = itemTypes[0]; itemTypes.slice(1).forEach((item) => { - ast.expression = $(ast.expression!) - .attr(identifiers.and) - .call(item) - .$render(); + ast.expression = ast.expression!.attr(identifiers.and).call(item); }); } } else { @@ -117,8 +111,7 @@ export const irSchemaToAst = ({ $.array() .pretty() .elements(...itemTypes), - ) - .$render(); + ); } } else { ast = irSchemaToAst({ plugin, schema, state }); @@ -138,17 +131,11 @@ export const irSchemaToAst = ({ if (ast.expression) { if (schema.accessScope === 'read') { - ast.expression = $(ast.expression) - .attr(identifiers.readonly) - .call() - .$render(); + ast.expression = ast.expression.attr(identifiers.readonly).call(); } if (optional) { - ast.expression = $(ast.expression) - .attr(identifiers.optional) - .call() - .$render(); + ast.expression = ast.expression.attr(identifiers.optional).call(); } if (schema.default !== undefined) { @@ -158,10 +145,9 @@ export const irSchemaToAst = ({ value: schema.default, }); if (callParameter) { - ast.expression = $(ast.expression) + ast.expression = ast.expression .attr(identifiers.default) - .call(callParameter) - .$render(); + .call(callParameter); } } } diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/array.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/array.ts index ceda7cf7e2..9b164c6333 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/array.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/array.ts @@ -1,9 +1,7 @@ -import type ts from 'typescript'; - import { deduplicateSchema } from '~/ir/schema'; import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -24,27 +22,21 @@ export const arrayToAst = ({ resource: 'zod.z', }); - const functionName = tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }); + const functionName = $(z.placeholder).attr(identifiers.array); - let arrayExpression: ts.CallExpression | undefined; + let arrayExpression: ReturnType | undefined; let hasLazyExpression = false; if (!schema.items) { - arrayExpression = tsc.callExpression({ - functionName, - parameters: [ - unknownToAst({ - plugin, - schema: { - type: 'unknown', - }, - state, - }), - ], - }); + arrayExpression = functionName.call( + unknownToAst({ + plugin, + schema: { + type: 'unknown', + }, + state, + }), + ); } else { schema = deduplicateSchema({ schema }); @@ -65,96 +57,58 @@ export const arrayToAst = ({ }); if (itemExpressions.length === 1) { - arrayExpression = tsc.callExpression({ - functionName, - parameters: itemExpressions, - }); + arrayExpression = functionName.call(...itemExpressions); } else { if (schema.logicalOperator === 'and') { const firstSchema = schema.items![0]!; // we want to add an intersection, but not every schema can use the same API. // if the first item contains another array or not an object, we cannot use // `.and()` as that does not exist on `.union()` and non-object schemas. - let intersectionExpression: ts.Expression; + let intersectionExpression: ReturnType; if ( firstSchema.logicalOperator === 'or' || (firstSchema.type && firstSchema.type !== 'object') ) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.intersection, - }), - parameters: itemExpressions, - }); + intersectionExpression = $(z.placeholder) + .attr(identifiers.intersection) + .call(...itemExpressions); } else { intersectionExpression = itemExpressions[0]!; for (let i = 1; i < itemExpressions.length; i++) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: intersectionExpression, - name: identifiers.and, - }), - parameters: [itemExpressions[i]!], - }); + intersectionExpression = intersectionExpression + .attr(identifiers.and) + .call(itemExpressions[i]); } } - arrayExpression = tsc.callExpression({ - functionName, - parameters: [intersectionExpression], - }); + arrayExpression = functionName.call(intersectionExpression); } else { - arrayExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }), - parameters: [ - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: itemExpressions, - }), - ], - }), - ], - }); + arrayExpression = $(z.placeholder) + .attr(identifiers.array) + .call( + $(z.placeholder) + .attr(identifiers.union) + .call($.array(...itemExpressions)), + ); } } } if (schema.minItems === schema.maxItems && schema.minItems !== undefined) { - arrayExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: arrayExpression, - name: identifiers.length, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }); + arrayExpression = arrayExpression + .attr(identifiers.length) + .call($.toExpr(schema.minItems)); } else { if (schema.minItems !== undefined) { - arrayExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: arrayExpression, - name: identifiers.min, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }); + arrayExpression = arrayExpression + .attr(identifiers.min) + .call($.toExpr(schema.minItems)); } if (schema.maxItems !== undefined) { - arrayExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: arrayExpression, - name: identifiers.max, - }), - parameters: [tsc.valueToExpression({ value: schema.maxItems })], - }); + arrayExpression = arrayExpression + .attr(identifiers.max) + .call($.toExpr(schema.maxItems)); } } diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/boolean.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/boolean.ts index d962468f38..5706720392 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/boolean.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/boolean.ts @@ -1,5 +1,3 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { $ } from '~/ts-dsl'; @@ -11,7 +9,7 @@ export const booleanToAst = ({ schema, }: IrSchemaToAstOptions & { schema: SchemaWithType<'boolean'>; -}): ts.CallExpression => { +}): ReturnType => { let chain: ReturnType; const z = plugin.referenceSymbol({ @@ -23,9 +21,9 @@ export const booleanToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - return chain.$render(); + return chain; } chain = $(z.placeholder).attr(identifiers.boolean).call(); - return chain.$render(); + return chain; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/enum.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/enum.ts index 14fca5346a..67534af348 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/enum.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/enum.ts @@ -1,7 +1,5 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,14 +11,14 @@ export const enumToAst = ({ state, }: IrSchemaToAstOptions & { schema: SchemaWithType<'enum'>; -}): ts.CallExpression => { +}): ReturnType => { const z = plugin.referenceSymbol({ category: 'external', resource: 'zod.z', }); - const enumMembers: Array = []; - const literalMembers: Array = []; + const enumMembers: Array> = []; + const literalMembers: Array> = []; let isNullable = false; let allStrings = true; @@ -28,45 +26,25 @@ export const enumToAst = ({ for (const item of schema.items ?? []) { // Zod supports string, number, and boolean enums if (item.type === 'string' && typeof item.const === 'string') { - const stringLiteral = tsc.stringLiteral({ - text: item.const, - }); - enumMembers.push(stringLiteral); + const literal = $.literal(item.const); + enumMembers.push(literal); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [stringLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if ( (item.type === 'number' || item.type === 'integer') && typeof item.const === 'number' ) { allStrings = false; - const numberLiteral = tsc.ots.number(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [numberLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'boolean' && typeof item.const === 'boolean') { allStrings = false; - const booleanLiteral = tsc.ots.boolean(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [booleanLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'null' || item.const === null) { isNullable = true; @@ -84,45 +62,22 @@ export const enumToAst = ({ } // Use z.enum() for pure string enums, z.union() for mixed or non-string types - let enumExpression: ts.CallExpression; + let enumExpression: ReturnType; if (allStrings && enumMembers.length > 0) { - enumExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.enum, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: enumMembers, - multiLine: false, - }), - ], - }); + enumExpression = $(z.placeholder) + .attr(identifiers.enum) + .call($.array(...enumMembers)); } else if (literalMembers.length === 1) { // For single-member unions, use the member directly instead of wrapping in z.union() enumExpression = literalMembers[0]!; } else { - enumExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: literalMembers, - multiLine: literalMembers.length > 3, - }), - ], - }); + enumExpression = $(z.placeholder) + .attr(identifiers.union) + .call($.array(...literalMembers)); } if (isNullable) { - enumExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: enumExpression, - name: identifiers.nullable, - }), - }); + enumExpression = enumExpression.attr(identifiers.nullable).call(); } return enumExpression; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/never.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/never.ts index 7d0f30c6c9..1d9fc68fad 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/never.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/never.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,11 +13,6 @@ export const neverToAst = ({ category: 'external', resource: 'zod.z', }); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.never, - }), - }); + const expression = $(z.placeholder).attr(identifiers.never).call(); return expression; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/null.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/null.ts index 6a6c3e8baf..7a72f476e0 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/null.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/null.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,11 +13,6 @@ export const nullToAst = ({ category: 'external', resource: 'zod.z', }); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.null, - }), - }); + const expression = $(z.placeholder).attr(identifiers.null).call(); return expression; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/number.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/number.ts index 7a60f3dda7..75ce22ec7e 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/number.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/number.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import { numberParameter } from '../../shared/numbers'; @@ -20,78 +20,38 @@ export const numberToAst = ({ if (typeof schema.const === 'number') { // TODO: parser - handle bigint constants - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.ots.number(schema.const)], - }); + const expression = $(z.placeholder) + .attr(identifiers.literal) + .call($.literal(schema.const)); return expression; } - let numberExpression = tsc.callExpression({ - functionName: isBigInt - ? tsc.propertyAccessExpression({ - expression: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.coerce, - }), - name: identifiers.bigint, - }) - : tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.number, - }), - }); + let numberExpression = isBigInt + ? $(z.placeholder).attr(identifiers.coerce).attr(identifiers.bigint).call() + : $(z.placeholder).attr(identifiers.number).call(); if (!isBigInt && schema.type === 'integer') { - numberExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: numberExpression, - name: identifiers.int, - }), - }); + numberExpression = numberExpression.attr(identifiers.int).call(); } if (schema.exclusiveMinimum !== undefined) { - numberExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: numberExpression, - name: identifiers.gt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMinimum }), - ], - }); + numberExpression = numberExpression + .attr(identifiers.gt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMinimum })); } else if (schema.minimum !== undefined) { - numberExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: numberExpression, - name: identifiers.gte, - }), - parameters: [numberParameter({ isBigInt, value: schema.minimum })], - }); + numberExpression = numberExpression + .attr(identifiers.gte) + .call(numberParameter({ isBigInt, value: schema.minimum })); } if (schema.exclusiveMaximum !== undefined) { - numberExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: numberExpression, - name: identifiers.lt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMaximum }), - ], - }); + numberExpression = numberExpression + .attr(identifiers.lt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMaximum })); } else if (schema.maximum !== undefined) { - numberExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: numberExpression, - name: identifiers.lte, - }), - parameters: [numberParameter({ isBigInt, value: schema.maximum })], - }); + numberExpression = numberExpression + .attr(identifiers.lte) + .call(numberParameter({ isBigInt, value: schema.maximum })); } return numberExpression; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/object.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/object.ts index d9552df686..8d78122e0f 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/object.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/object.ts @@ -1,5 +1,3 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; import { $ } from '~/ts-dsl'; @@ -61,7 +59,7 @@ export const objectToAst = ({ shape.prop(name, propertyExpression.expression); } - let additional: ts.Expression | null | undefined; + let additional: ReturnType | null | undefined; const result: Partial> = {}; if ( schema.additionalProperties && @@ -89,7 +87,7 @@ export const objectToAst = ({ }; const resolver = plugin.config['~resolvers']?.object?.base; const chain = resolver?.(args) ?? defaultObjectBaseResolver(args); - result.expression = chain.$render(); + result.expression = chain; return { anyType: 'AnyZodObject', diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/string.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/string.ts index eededb99b5..9ae100e2f1 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/string.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/string.ts @@ -1,5 +1,3 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { $ } from '~/ts-dsl'; @@ -48,7 +46,7 @@ export const stringToAst = ({ schema, }: IrSchemaToAstOptions & { schema: SchemaWithType<'string'>; -}): ts.CallExpression => { +}): ReturnType => { let chain: ReturnType; const z = plugin.referenceSymbol({ @@ -60,7 +58,7 @@ export const stringToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - return chain.$render(); + return chain; } chain = $(z.placeholder).attr(identifiers.string).call(); @@ -88,5 +86,5 @@ export const stringToAst = ({ chain = chain.attr(identifiers.regex).call($.regexp(schema.pattern)); } - return chain.$render(); + return chain; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/tuple.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/tuple.ts index fbc71f4a59..7eee55bd0a 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/tuple.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/tuple.ts @@ -1,8 +1,6 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -26,32 +24,18 @@ export const tupleToAst = ({ if (schema.const && Array.isArray(schema.const)) { const tupleElements = schema.const.map((value) => - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.valueToExpression({ value })], - }), + $(z.placeholder).attr(identifiers.literal).call($.toExpr(value)), ); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + const expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); return { expression, hasLazyExpression, }; } - const tupleElements: Array = []; + const tupleElements: Array> = []; if (schema.items) { schema.items.forEach((item, index) => { @@ -70,17 +54,10 @@ export const tupleToAst = ({ }); } - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + const expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); + return { expression, hasLazyExpression, diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/undefined.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/undefined.ts index b3efccf16d..60545a2e09 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/undefined.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/undefined.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,11 +13,6 @@ export const undefinedToAst = ({ category: 'external', resource: 'zod.z', }); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.undefined, - }), - }); + const expression = $(z.placeholder).attr(identifiers.undefined).call(); return expression; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/unknown.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/unknown.ts index 6aac93079d..9afc011c28 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/unknown.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/unknown.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,11 +13,6 @@ export const unknownToAst = ({ category: 'external', resource: 'zod.z', }); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.unknown, - }), - }); + const expression = $(z.placeholder).attr(identifiers.unknown).call(); return expression; }; diff --git a/packages/openapi-ts/src/plugins/zod/v3/toAst/void.ts b/packages/openapi-ts/src/plugins/zod/v3/toAst/void.ts index bf82c6bd7f..79e069cab4 100644 --- a/packages/openapi-ts/src/plugins/zod/v3/toAst/void.ts +++ b/packages/openapi-ts/src/plugins/zod/v3/toAst/void.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { IrSchemaToAstOptions } from '../../shared/types'; @@ -13,11 +13,6 @@ export const voidToAst = ({ category: 'external', resource: 'zod.z', }); - const expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.void, - }), - }); + const expression = $(z.placeholder).attr(identifiers.void).call(); return expression; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts index e52d178157..bccc0f53aa 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/plugin.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/plugin.ts @@ -48,12 +48,11 @@ export const irSchemaToAst = ({ }; const refSymbol = plugin.referenceSymbol(query); if (plugin.isSymbolRegistered(query)) { - ast.expression = $(refSymbol.placeholder).$render(); + ast.expression = $(refSymbol.placeholder); } else { ast.expression = $(z.placeholder) .attr(identifiers.lazy) - .call($.func().returns('any').do($(refSymbol.placeholder).return())) - .$render(); + .call($.func().returns('any').do($(refSymbol.placeholder).return())); ast.hasLazyExpression = true; state.hasLazyExpression.value = true; } @@ -67,15 +66,14 @@ export const irSchemaToAst = ({ ast.hasLazyExpression = typeAst.hasLazyExpression; if (plugin.config.metadata && schema.description) { - ast.expression = $(ast.expression) + ast.expression = ast.expression .attr(identifiers.register) .call( $(z.placeholder).attr(identifiers.globalRegistry), $.object() .pretty() .prop('description', $.literal(schema.description)), - ) - .$render(); + ); } } else if (schema.items) { schema = deduplicateSchema({ schema }); @@ -103,21 +101,19 @@ export const irSchemaToAst = ({ ) { ast.expression = $(z.placeholder) .attr(identifiers.intersection) - .call(...itemSchemas.map((schema) => schema.expression)) - .$render(); + .call(...itemSchemas.map((schema) => schema.expression)); } else { ast.expression = itemSchemas[0]!.expression; itemSchemas.slice(1).forEach((schema) => { - ast.expression = $(ast.expression!) - .attr(identifiers.and) + ast.expression = ast + .expression!.attr(identifiers.and) .call( schema.hasLazyExpression ? $(z.placeholder) .attr(identifiers.lazy) - .call($.func().do($.return(schema.expression))) + .call($.func().do(schema.expression.return())) : schema.expression, - ) - .$render(); + ); }); } } else { @@ -127,8 +123,7 @@ export const irSchemaToAst = ({ $.array() .pretty() .elements(...itemSchemas.map((schema) => schema.expression)), - ) - .$render(); + ); } } else { ast = irSchemaToAst({ @@ -151,17 +146,13 @@ export const irSchemaToAst = ({ if (ast.expression) { if (schema.accessScope === 'read') { - ast.expression = $(ast.expression) - .attr(identifiers.readonly) - .call() - .$render(); + ast.expression = ast.expression.attr(identifiers.readonly).call(); } if (optional) { ast.expression = $(z.placeholder) .attr(identifiers.optional) - .call(ast.expression) - .$render(); + .call(ast.expression); ast.typeName = identifiers.ZodOptional; } @@ -172,10 +163,9 @@ export const irSchemaToAst = ({ value: schema.default, }); if (callParameter) { - ast.expression = $(ast.expression) + ast.expression = ast.expression .attr(identifiers.default) - .call(callParameter) - .$render(); + .call(callParameter); } } } diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/array.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/array.ts index 898c04d063..ab1415e3b5 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/array.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/array.ts @@ -1,9 +1,7 @@ -import type ts from 'typescript'; - import { deduplicateSchema } from '~/ir/schema'; import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -24,24 +22,18 @@ export const arrayToAst = ({ resource: 'zod.z', }); - const functionName = tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }); + const functionName = $(z.placeholder).attr(identifiers.array); if (!schema.items) { - result.expression = tsc.callExpression({ - functionName, - parameters: [ - unknownToAst({ - plugin, - schema: { - type: 'unknown', - }, - state, - }).expression, - ], - }); + result.expression = functionName.call( + unknownToAst({ + plugin, + schema: { + type: 'unknown', + }, + state, + }).expression, + ); } else { schema = deduplicateSchema({ schema }); @@ -62,96 +54,58 @@ export const arrayToAst = ({ }); if (itemExpressions.length === 1) { - result.expression = tsc.callExpression({ - functionName, - parameters: itemExpressions, - }); + result.expression = functionName.call(...itemExpressions); } else { if (schema.logicalOperator === 'and') { const firstSchema = schema.items![0]!; // we want to add an intersection, but not every schema can use the same API. // if the first item contains another array or not an object, we cannot use // `.and()` as that does not exist on `.union()` and non-object schemas. - let intersectionExpression: ts.Expression; + let intersectionExpression: ReturnType; if ( firstSchema.logicalOperator === 'or' || (firstSchema.type && firstSchema.type !== 'object') ) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.intersection, - }), - parameters: itemExpressions, - }); + intersectionExpression = $(z.placeholder) + .attr(identifiers.intersection) + .call(...itemExpressions); } else { intersectionExpression = itemExpressions[0]!; for (let i = 1; i < itemExpressions.length; i++) { - intersectionExpression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: intersectionExpression, - name: identifiers.and, - }), - parameters: [itemExpressions[i]!], - }); + intersectionExpression = intersectionExpression + .attr(identifiers.and) + .call(itemExpressions[i]); } } - result.expression = tsc.callExpression({ - functionName, - parameters: [intersectionExpression], - }); + result.expression = functionName.call(intersectionExpression); } else { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.array, - }), - parameters: [ - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: itemExpressions, - }), - ], - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.array) + .call( + $(z.placeholder) + .attr(identifiers.union) + .call($.array(...itemExpressions)), + ); } } } if (schema.minItems === schema.maxItems && schema.minItems !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.length, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }); + result.expression = result.expression + .attr(identifiers.length) + .call($.toExpr(schema.minItems)); } else { if (schema.minItems !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.min, - }), - parameters: [tsc.valueToExpression({ value: schema.minItems })], - }); + result.expression = result.expression + .attr(identifiers.min) + .call($.toExpr(schema.minItems)); } if (schema.maxItems !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.max, - }), - parameters: [tsc.valueToExpression({ value: schema.maxItems })], - }); + result.expression = result.expression + .attr(identifiers.max) + .call($.toExpr(schema.maxItems)); } } diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/boolean.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/boolean.ts index c67686f5e9..43a4ec1760 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/boolean.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/boolean.ts @@ -22,11 +22,11 @@ export const booleanToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; } chain = $(z.placeholder).attr(identifiers.boolean).call(); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/enum.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/enum.ts index ada87772d7..729fb23d08 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/enum.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/enum.ts @@ -1,7 +1,5 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -21,8 +19,8 @@ export const enumToAst = ({ resource: 'zod.z', }); - const enumMembers: Array = []; - const literalMembers: Array = []; + const enumMembers: Array> = []; + const literalMembers: Array> = []; let isNullable = false; let allStrings = true; @@ -30,45 +28,25 @@ export const enumToAst = ({ for (const item of schema.items ?? []) { // Zod supports string, number, and boolean enums if (item.type === 'string' && typeof item.const === 'string') { - const stringLiteral = tsc.stringLiteral({ - text: item.const, - }); - enumMembers.push(stringLiteral); + const literal = $.literal(item.const); + enumMembers.push(literal); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [stringLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if ( (item.type === 'number' || item.type === 'integer') && typeof item.const === 'number' ) { allStrings = false; - const numberLiteral = tsc.ots.number(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [numberLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'boolean' && typeof item.const === 'boolean') { allStrings = false; - const booleanLiteral = tsc.ots.boolean(item.const); + const literal = $.literal(item.const); literalMembers.push( - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [booleanLiteral], - }), + $(z.placeholder).attr(identifiers.literal).call(literal), ); } else if (item.type === 'null' || item.const === null) { isNullable = true; @@ -87,44 +65,22 @@ export const enumToAst = ({ // Use z.enum() for pure string enums, z.union() for mixed or non-string types if (allStrings && enumMembers.length > 0) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.enum, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: enumMembers, - multiLine: false, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.enum) + .call($.array(...enumMembers)); } else if (literalMembers.length === 1) { // For single-member unions, use the member directly instead of wrapping in z.union() - result.expression = literalMembers[0]; + result.expression = literalMembers[0]!; } else { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.union, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: literalMembers, - multiLine: literalMembers.length > 3, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.union) + .call($.array(...literalMembers)); } if (isNullable) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.nullable, - }), - parameters: [result.expression], - }); + result.expression = $(z.placeholder) + .attr(identifiers.nullable) + .call(result.expression); } return result as Omit; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/never.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/never.ts index c517a8e260..855b2747c4 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/never.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/never.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const neverToAst = ({ category: 'external', resource: 'zod.z', }); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.never, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.never).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/null.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/null.ts index 74401c5b05..f4f11bec3f 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/null.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/null.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const nullToAst = ({ category: 'external', resource: 'zod.z', }); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.null, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.null).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/number.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/number.ts index dc576841b8..738e16bb72 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/number.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/number.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import { numberParameter } from '../../shared/numbers'; @@ -22,78 +22,38 @@ export const numberToAst = ({ if (typeof schema.const === 'number') { // TODO: parser - handle bigint constants - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.ots.number(schema.const)], - }); + result.expression = $(z.placeholder) + .attr(identifiers.literal) + .call($.literal(schema.const)); return result as Omit; } - result.expression = tsc.callExpression({ - functionName: isBigInt - ? tsc.propertyAccessExpression({ - expression: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.coerce, - }), - name: identifiers.bigint, - }) - : tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.number, - }), - }); + result.expression = isBigInt + ? $(z.placeholder).attr(identifiers.coerce).attr(identifiers.bigint).call() + : $(z.placeholder).attr(identifiers.number).call(); if (!isBigInt && schema.type === 'integer') { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.int, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.int).call(); } if (schema.exclusiveMinimum !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.gt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMinimum }), - ], - }); + result.expression = result.expression + .attr(identifiers.gt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMinimum })); } else if (schema.minimum !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.gte, - }), - parameters: [numberParameter({ isBigInt, value: schema.minimum })], - }); + result.expression = result.expression + .attr(identifiers.gte) + .call(numberParameter({ isBigInt, value: schema.minimum })); } if (schema.exclusiveMaximum !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.lt, - }), - parameters: [ - numberParameter({ isBigInt, value: schema.exclusiveMaximum }), - ], - }); + result.expression = result.expression + .attr(identifiers.lt) + .call(numberParameter({ isBigInt, value: schema.exclusiveMaximum })); } else if (schema.maximum !== undefined) { - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: result.expression, - name: identifiers.lte, - }), - parameters: [numberParameter({ isBigInt, value: schema.maximum })], - }); + result.expression = result.expression + .attr(identifiers.lte) + .call(numberParameter({ isBigInt, value: schema.maximum })); } return result as Omit; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/object.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/object.ts index 6584a8eaf4..58bf30b083 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/object.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/object.ts @@ -1,5 +1,3 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; import { $ } from '~/ts-dsl'; @@ -60,13 +58,13 @@ export const objectToAst = ({ } if (propertyAst.hasLazyExpression) { - shape.getter(name, $(propertyAst.expression).return()); + shape.getter(name, propertyAst.expression.return()); } else { shape.prop(name, propertyAst.expression); } } - let additional: ts.Expression | null | undefined; + let additional: ReturnType | null | undefined; if ( schema.additionalProperties && (!schema.properties || !Object.keys(schema.properties).length) @@ -93,7 +91,7 @@ export const objectToAst = ({ }; const resolver = plugin.config['~resolvers']?.object?.base; const chain = resolver?.(args) ?? defaultObjectBaseResolver(args); - result.expression = chain.$render(); + result.expression = chain; // Return with typeName for circular references if (result.hasLazyExpression) { diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/string.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/string.ts index dc9ca590d5..525a44034e 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/string.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/string.ts @@ -72,7 +72,7 @@ export const stringToAst = ({ chain = $(z.placeholder) .attr(identifiers.literal) .call($.literal(schema.const)); - result.expression = chain.$render(); + result.expression = chain; return result as Omit; } @@ -101,6 +101,6 @@ export const stringToAst = ({ chain = chain.attr(identifiers.regex).call($.regexp(schema.pattern)); } - result.expression = chain.$render(); + result.expression = chain; return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/tuple.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/tuple.ts index 8addcd7d21..9b782a94f8 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/tuple.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/tuple.ts @@ -1,8 +1,6 @@ -import type ts from 'typescript'; - import type { SchemaWithType } from '~/plugins'; import { toRef } from '~/plugins/shared/utils/refs'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -24,29 +22,15 @@ export const tupleToAst = ({ if (schema.const && Array.isArray(schema.const)) { const tupleElements = schema.const.map((value) => - tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.literal, - }), - parameters: [tsc.valueToExpression({ value })], - }), + $(z.placeholder).attr(identifiers.literal).call($.toExpr(value)), ); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); return result as Omit; } - const tupleElements: Array = []; + const tupleElements: Array> = []; if (schema.items) { schema.items.forEach((item, index) => { @@ -65,17 +49,9 @@ export const tupleToAst = ({ }); } - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.tuple, - }), - parameters: [ - tsc.arrayLiteralExpression({ - elements: tupleElements, - }), - ], - }); + result.expression = $(z.placeholder) + .attr(identifiers.tuple) + .call($.array(...tupleElements)); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/undefined.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/undefined.ts index e441c90e12..a64c94b3c2 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/undefined.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/undefined.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const undefinedToAst = ({ category: 'external', resource: 'zod.z', }); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.undefined, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.undefined).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/unknown.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/unknown.ts index 7979dbcf53..d4491f70bf 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/unknown.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/unknown.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const unknownToAst = ({ category: 'external', resource: 'zod.z', }); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.unknown, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.unknown).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/plugins/zod/v4/toAst/void.ts b/packages/openapi-ts/src/plugins/zod/v4/toAst/void.ts index f81bf7b084..fce6b07ec8 100644 --- a/packages/openapi-ts/src/plugins/zod/v4/toAst/void.ts +++ b/packages/openapi-ts/src/plugins/zod/v4/toAst/void.ts @@ -1,5 +1,5 @@ import type { SchemaWithType } from '~/plugins'; -import { tsc } from '~/tsc'; +import { $ } from '~/ts-dsl'; import { identifiers } from '../../constants'; import type { Ast, IrSchemaToAstOptions } from '../../shared/types'; @@ -14,11 +14,6 @@ export const voidToAst = ({ category: 'external', resource: 'zod.z', }); - result.expression = tsc.callExpression({ - functionName: tsc.propertyAccessExpression({ - expression: z.placeholder, - name: identifiers.void, - }), - }); + result.expression = $(z.placeholder).attr(identifiers.void).call(); return result as Omit; }; diff --git a/packages/openapi-ts/src/ts-dsl/array.ts b/packages/openapi-ts/src/ts-dsl/array.ts index bccb6c4460..86e6603ec3 100644 --- a/packages/openapi-ts/src/ts-dsl/array.ts +++ b/packages/openapi-ts/src/ts-dsl/array.ts @@ -13,6 +13,13 @@ export class ArrayTsDsl extends TsDsl { | { expr: MaybeTsDsl; kind: 'spread' } > = []; + constructor( + ...exprs: Array> + ) { + super(); + this.elements(...exprs); + } + /** Adds a single array element. */ element(expr: string | number | boolean | MaybeTsDsl): this { const node = @@ -44,9 +51,6 @@ export class ArrayTsDsl extends TsDsl { $render(): ts.ArrayLiteralExpression { const elements = this._elements.map((item) => { const node = this.$node(item.expr); - if (!ts.isExpression(node)) { - throw new Error('Invalid array element: must be an expression.'); - } return item.kind === 'spread' ? ts.factory.createSpreadElement(node) : node; diff --git a/packages/openapi-ts/src/ts-dsl/as.ts b/packages/openapi-ts/src/ts-dsl/as.ts index f188ad042f..d383620b6b 100644 --- a/packages/openapi-ts/src/ts-dsl/as.ts +++ b/packages/openapi-ts/src/ts-dsl/as.ts @@ -1,16 +1,19 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, TypeTsDsl, WithString } from './base'; +import type { MaybeTsDsl, TypeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ExprMixin, registerLazyAccessAsFactory } from './mixins/expr'; export class AsTsDsl extends TsDsl { - private expr: MaybeTsDsl; - private type: WithString; + private expr: string | MaybeTsDsl; + private type: string | TypeTsDsl; - constructor(expr: MaybeTsDsl, type: WithString) { + constructor( + expr: string | MaybeTsDsl, + type: string | TypeTsDsl, + ) { super(); this.expr = expr; this.type = type; diff --git a/packages/openapi-ts/src/ts-dsl/attr.ts b/packages/openapi-ts/src/ts-dsl/attr.ts index c8dcfa69d3..c5dfa63585 100644 --- a/packages/openapi-ts/src/ts-dsl/attr.ts +++ b/packages/openapi-ts/src/ts-dsl/attr.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { AssignmentMixin } from './mixins/assignment'; @@ -12,12 +12,12 @@ import { OptionalMixin } from './mixins/optional'; export class AttrTsDsl extends TsDsl< ts.PropertyAccessExpression | ts.ElementAccessExpression > { - private left: MaybeTsDsl; - private right: WithString | number; + private left: string | MaybeTsDsl; + private right: string | ts.MemberName | number; constructor( - left: MaybeTsDsl, - right: WithString | number, + left: string | MaybeTsDsl, + right: string | ts.MemberName | number, ) { super(); this.left = left; @@ -43,12 +43,12 @@ export class AttrTsDsl extends TsDsl< return ts.factory.createPropertyAccessChain( leftNode, ts.factory.createToken(ts.SyntaxKind.QuestionDotToken), - this.$expr(this.right), + this.$maybeId(this.right), ); } return ts.factory.createPropertyAccessExpression( leftNode, - this.$expr(this.right), + this.$maybeId(this.right), ); } } diff --git a/packages/openapi-ts/src/ts-dsl/await.ts b/packages/openapi-ts/src/ts-dsl/await.ts index 5ba418f250..2bb333f0c7 100644 --- a/packages/openapi-ts/src/ts-dsl/await.ts +++ b/packages/openapi-ts/src/ts-dsl/await.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ExprMixin, registerLazyAccessAwaitFactory } from './mixins/expr'; export class AwaitTsDsl extends TsDsl { - private _awaitExpr: MaybeTsDsl; + private _awaitExpr: string | MaybeTsDsl; - constructor(expr: MaybeTsDsl) { + constructor(expr: string | MaybeTsDsl) { super(); this._awaitExpr = expr; } diff --git a/packages/openapi-ts/src/ts-dsl/base.ts b/packages/openapi-ts/src/ts-dsl/base.ts index 1a30246c16..e7b3cc38fc 100644 --- a/packages/openapi-ts/src/ts-dsl/base.ts +++ b/packages/openapi-ts/src/ts-dsl/base.ts @@ -2,10 +2,6 @@ import ts from 'typescript'; export type MaybeArray = T | ReadonlyArray; -export type WithStatement = T | ts.Statement; - -export type WithString = T | string; - export interface ITsDsl { $render(): T; } @@ -13,10 +9,8 @@ export interface ITsDsl { export abstract class TsDsl implements ITsDsl { abstract $render(): T; - protected $expr(expr: WithString): T { - return typeof expr === 'string' - ? (ts.factory.createIdentifier(expr) as T) - : expr; + protected $id(text: string): ts.Identifier { + return ts.factory.createIdentifier(text); } /** Conditionally applies a callback to this builder. */ @@ -94,66 +88,71 @@ export abstract class TsDsl implements ITsDsl { return this; } - protected $node(input: I): NodeOfMaybe { - if (input === undefined) { + protected $maybeId( + expr: T, + ): T extends string ? ts.Identifier : T { + return ( + typeof expr === 'string' ? this.$id(expr) : expr + ) as T extends string ? ts.Identifier : T; + } + + protected $node(value: I): NodeOfMaybe { + if (value === undefined) { return undefined as NodeOfMaybe; } - if (typeof input === 'string') { - return this.$expr(input) as NodeOfMaybe; - } - if (typeof input === 'boolean') { - return ( - input ? ts.factory.createTrue() : ts.factory.createFalse() - ) as NodeOfMaybe; + if (typeof value === 'string') { + return this.$id(value) as NodeOfMaybe; } - if (input instanceof Array) { - return input.map((item) => this._render(item)) as NodeOfMaybe; + if (value instanceof Array) { + return value.map((item) => this._render(item)) as NodeOfMaybe; } - return this._render(input as any) as NodeOfMaybe; + return this._render(value as any) as NodeOfMaybe; } protected $stmt( - input: MaybeArray>>, + value: MaybeArray>, ): ReadonlyArray { - const arr = input instanceof Array ? input : [input]; + const arr = value instanceof Array ? value : [value]; return arr.map((item) => { const node = - typeof item === 'string' ? this.$expr(item) : this._render(item as any); + typeof item === 'string' ? this.$id(item) : this._render(item); return ts.isExpression(node) ? ts.factory.createExpressionStatement(node) - : (node as ts.Statement); + : node; }); } protected $type( - input: I, + value: I, args?: ReadonlyArray, ): TypeOfMaybe { - if (input === undefined) { + if (value === undefined) { return undefined as TypeOfMaybe; } - if (typeof input === 'string') { - return ts.factory.createTypeReferenceNode(input, args) as TypeOfMaybe; + if (typeof value === 'string') { + return ts.factory.createTypeReferenceNode(value, args) as TypeOfMaybe; } - if (typeof input === 'boolean') { - const literal = input + if (typeof value === 'boolean') { + const literal = value ? ts.factory.createTrue() : ts.factory.createFalse(); return ts.factory.createLiteralTypeNode(literal) as TypeOfMaybe; } - if (typeof input === 'number') { + if (typeof value === 'number') { return ts.factory.createLiteralTypeNode( - ts.factory.createNumericLiteral(input), + ts.factory.createNumericLiteral(value), ) as TypeOfMaybe; } - if (input instanceof Array) { - return input.map((item) => this.$type(item, args)) as TypeOfMaybe; + if (value instanceof Array) { + return value.map((item) => this.$type(item, args)) as TypeOfMaybe; } - return this._render(input as any) as TypeOfMaybe; + return this._render(value as any) as TypeOfMaybe; } - private _render(value: MaybeTsDsl): T { - return (value instanceof TsDsl ? value.$render() : value) as T; + private _render(value: I): I extends TsDsl ? N : I { + return ( + value instanceof TsDsl ? value.$render() : value + ) as I extends TsDsl ? N : I; } } @@ -166,13 +165,11 @@ type NodeOf = ? ReadonlyArray ? N : U> : I extends string ? ts.Expression - : I extends boolean - ? ts.Expression - : I extends TsDsl - ? N - : I extends ts.Node - ? I - : never; + : I extends TsDsl + ? N + : I extends ts.Node + ? I + : never; export type MaybeTsDsl = // if T includes string diff --git a/packages/openapi-ts/src/ts-dsl/binary.ts b/packages/openapi-ts/src/ts-dsl/binary.ts index 036bcb99a0..6f2ea67512 100644 --- a/packages/openapi-ts/src/ts-dsl/binary.ts +++ b/packages/openapi-ts/src/ts-dsl/binary.ts @@ -1,6 +1,6 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; type Operator = @@ -22,14 +22,14 @@ type Operator = | '||'; export class BinaryTsDsl extends TsDsl { - private left: MaybeTsDsl; + private left: string | MaybeTsDsl; private operator: Operator | ts.BinaryOperator; - private right: MaybeTsDsl; + private right: string | MaybeTsDsl; constructor( - left: MaybeTsDsl, + left: string | MaybeTsDsl, operator: Operator | ts.BinaryOperator, - right: MaybeTsDsl, + right: string | MaybeTsDsl, ) { super(); this.left = left; diff --git a/packages/openapi-ts/src/ts-dsl/call.ts b/packages/openapi-ts/src/ts-dsl/call.ts index dbc48a36d9..694c293b4d 100644 --- a/packages/openapi-ts/src/ts-dsl/call.ts +++ b/packages/openapi-ts/src/ts-dsl/call.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ArgsMixin } from './mixins/args'; @@ -9,11 +9,11 @@ import { ExprMixin, registerLazyAccessCallFactory } from './mixins/expr'; import { TypeArgsMixin } from './mixins/type-args'; export class CallTsDsl extends TsDsl { - private _callee: MaybeTsDsl; + private _callee: string | MaybeTsDsl; constructor( - callee: MaybeTsDsl, - ...args: ReadonlyArray | undefined> + callee: string | MaybeTsDsl, + ...args: ReadonlyArray | undefined> ) { super(); this._callee = callee; diff --git a/packages/openapi-ts/src/ts-dsl/class.ts b/packages/openapi-ts/src/ts-dsl/class.ts index 8410d199bc..26405e7b7e 100644 --- a/packages/openapi-ts/src/ts-dsl/class.ts +++ b/packages/openapi-ts/src/ts-dsl/class.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { FieldTsDsl } from './field'; import { InitTsDsl } from './init'; @@ -37,12 +37,12 @@ export class ClassTsDsl extends TsDsl { } /** Adds a base class to extend from. */ - extends(base?: WithString | false | null): this { + extends(base?: string | ts.Expression | false | null): this { if (!base) return this; this.heritageClauses.push( ts.factory.createHeritageClause(ts.SyntaxKind.ExtendsKeyword, [ ts.factory.createExpressionWithTypeArguments( - this.$expr(base), + this.$maybeId(base), undefined, ), ]), @@ -82,7 +82,7 @@ export class ClassTsDsl extends TsDsl { const body = this.$node(this.body) as ReadonlyArray; return ts.factory.createClassDeclaration( [...this.$decorators(), ...this.modifiers.list()], - this.$expr(this.name), + this.name, this.$generics(), this.heritageClauses, body, diff --git a/packages/openapi-ts/src/ts-dsl/decorator.ts b/packages/openapi-ts/src/ts-dsl/decorator.ts index 94d96be6b4..962cb4f9a0 100644 --- a/packages/openapi-ts/src/ts-dsl/decorator.ts +++ b/packages/openapi-ts/src/ts-dsl/decorator.ts @@ -1,17 +1,17 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ArgsMixin } from './mixins/args'; export class DecoratorTsDsl extends TsDsl { - private name: WithString; + private name: string | ts.Expression; constructor( - name: WithString, - ...args: ReadonlyArray> + name: string | ts.Expression, + ...args: ReadonlyArray> ) { super(); this.name = name; @@ -23,11 +23,11 @@ export class DecoratorTsDsl extends TsDsl { return ts.factory.createDecorator( args.length ? ts.factory.createCallExpression( - this.$expr(this.name), + this.$maybeId(this.name), undefined, args, ) - : this.$expr(this.name), + : this.$maybeId(this.name), ); } } diff --git a/packages/openapi-ts/src/ts-dsl/expr.ts b/packages/openapi-ts/src/ts-dsl/expr.ts index 9b4eb38023..7699517434 100644 --- a/packages/openapi-ts/src/ts-dsl/expr.ts +++ b/packages/openapi-ts/src/ts-dsl/expr.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import type ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ExprMixin } from './mixins/expr'; @@ -11,9 +11,9 @@ import { TypeQueryTsDsl } from './type/query'; import { TypeOfExprTsDsl } from './typeof'; export class ExprTsDsl extends TsDsl { - private _exprInput: MaybeTsDsl; + private _exprInput: string | MaybeTsDsl; - constructor(id: MaybeTsDsl) { + constructor(id: string | MaybeTsDsl) { super(); this._exprInput = id; } diff --git a/packages/openapi-ts/src/ts-dsl/field.ts b/packages/openapi-ts/src/ts-dsl/field.ts index 46ada75ff0..34988d7815 100644 --- a/packages/openapi-ts/src/ts-dsl/field.ts +++ b/packages/openapi-ts/src/ts-dsl/field.ts @@ -37,7 +37,7 @@ export class FieldTsDsl extends TsDsl { $render(): ts.PropertyDeclaration { return ts.factory.createPropertyDeclaration( [...this.$decorators(), ...this.modifiers.list()], - this.$expr(this.name), + this.name, undefined, this.$type(this._type), this.$value(), diff --git a/packages/openapi-ts/src/ts-dsl/func.ts b/packages/openapi-ts/src/ts-dsl/func.ts index 79dc3166d4..566de956ff 100644 --- a/packages/openapi-ts/src/ts-dsl/func.ts +++ b/packages/openapi-ts/src/ts-dsl/func.ts @@ -96,7 +96,7 @@ class ImplFuncTsDsl extends TsDsl< return ts.factory.createFunctionExpression( [...this.modifiers.list()], undefined, - this.$expr(this.name), + this.name, this.$generics(), this.$params(), this.$type(this._returns), diff --git a/packages/openapi-ts/src/ts-dsl/if.ts b/packages/openapi-ts/src/ts-dsl/if.ts index 0e3f853f02..109d76bd73 100644 --- a/packages/openapi-ts/src/ts-dsl/if.ts +++ b/packages/openapi-ts/src/ts-dsl/if.ts @@ -1,21 +1,21 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { DoMixin } from './mixins/do'; export class IfTsDsl extends TsDsl { - private _condition?: MaybeTsDsl; + private _condition?: string | MaybeTsDsl; private _else?: ReadonlyArray>; - constructor(condition?: MaybeTsDsl) { + constructor(condition?: string | MaybeTsDsl) { super(); if (condition) this.condition(condition); } - condition(condition: MaybeTsDsl): this { + condition(condition: string | MaybeTsDsl): this { this._condition = condition; return this; } diff --git a/packages/openapi-ts/src/ts-dsl/index.ts b/packages/openapi-ts/src/ts-dsl/index.ts index 20d1270f23..6481cfd12e 100644 --- a/packages/openapi-ts/src/ts-dsl/index.ts +++ b/packages/openapi-ts/src/ts-dsl/index.ts @@ -18,11 +18,11 @@ import { LiteralTsDsl } from './literal'; import { MethodTsDsl } from './method'; import { NewTsDsl } from './new'; import { NewlineTsDsl } from './newline'; -import { NotTsDsl } from './not'; import { NoteTsDsl } from './note'; import { ObjectTsDsl } from './object'; import { ParamTsDsl } from './param'; import { PatternTsDsl } from './pattern'; +import { PrefixTsDsl } from './prefix'; import { RegExpTsDsl } from './regexp'; import { ReturnTsDsl } from './return'; import { SetterTsDsl } from './setter'; @@ -41,6 +41,7 @@ import { TypeParamTsDsl } from './type/param'; import { TypeQueryTsDsl } from './type/query'; import { TypeTupleTsDsl } from './type/tuple'; import { TypeOfExprTsDsl } from './typeof'; +import { toExpr } from './utils'; import { VarTsDsl } from './var'; const base = { @@ -131,6 +132,10 @@ const base = { method: (...args: ConstructorParameters) => new MethodTsDsl(...args), + /** Creates a negation expression (`-x`). */ + neg: (...args: ConstructorParameters) => + new PrefixTsDsl(...args).neg(), + /** Creates a new expression (e.g. `new ClassName()`). */ new: (...args: ConstructorParameters) => new NewTsDsl(...args), @@ -139,9 +144,9 @@ const base = { newline: (...args: ConstructorParameters) => new NewlineTsDsl(...args), - /** Creates a logical NOT expression (e.g. `!expr`). */ - not: (...args: ConstructorParameters) => - new NotTsDsl(...args), + /** Creates a logical NOT expression (`!x`). */ + not: (...args: ConstructorParameters) => + new PrefixTsDsl(...args).not(), /** Creates a block comment (/* ... *\/). */ note: (...args: ConstructorParameters) => @@ -159,6 +164,10 @@ const base = { pattern: (...args: ConstructorParameters) => new PatternTsDsl(...args), + /** Creates a prefix unary expression (e.g. `-x`, `!x`, `~x`). */ + prefix: (...args: ConstructorParameters) => + new PrefixTsDsl(...args), + /** Creates a regular expression literal (e.g. `/foo/gi`). */ regexp: (...args: ConstructorParameters) => new RegExpTsDsl(...args), @@ -183,6 +192,9 @@ const base = { throw: (...args: ConstructorParameters) => new ThrowTsDsl(...args), + /** Converts a runtime value into a corresponding expression node. */ + toExpr: (...args: Parameters) => toExpr(...args), + /** Creates a basic type reference or type expression (e.g. Foo or Foo). */ type: Object.assign( (...args: ConstructorParameters) => diff --git a/packages/openapi-ts/src/ts-dsl/literal.ts b/packages/openapi-ts/src/ts-dsl/literal.ts index 986e2c0170..cb04ae6838 100644 --- a/packages/openapi-ts/src/ts-dsl/literal.ts +++ b/packages/openapi-ts/src/ts-dsl/literal.ts @@ -1,25 +1,30 @@ import ts from 'typescript'; import { TsDsl } from './base'; +import { PrefixTsDsl } from './prefix'; export class LiteralTsDsl extends TsDsl { - private value: string | number | boolean; + private value: string | number | boolean | null; - constructor(value: string | number | boolean) { + constructor(value: string | number | boolean | null) { super(); this.value = value; } $render(): ts.LiteralTypeNode['literal'] { - switch (typeof this.value) { - case 'boolean': - return this.value ? ts.factory.createTrue() : ts.factory.createFalse(); - case 'number': - return ts.factory.createNumericLiteral(this.value); - case 'string': - return ts.factory.createStringLiteral(this.value); - default: - throw new Error(`Unsupported literal: ${String(this.value)}`); + if (typeof this.value === 'boolean') { + return this.value ? ts.factory.createTrue() : ts.factory.createFalse(); } + if (typeof this.value === 'number') { + const expr = ts.factory.createNumericLiteral(Math.abs(this.value)); + return this.value < 0 ? this.$node(new PrefixTsDsl(expr).neg()) : expr; + } + if (typeof this.value === 'string') { + return ts.factory.createStringLiteral(this.value); + } + if (this.value === null) { + return ts.factory.createNull(); + } + throw new Error(`Unsupported literal: ${String(this.value)}`); } } diff --git a/packages/openapi-ts/src/ts-dsl/method.ts b/packages/openapi-ts/src/ts-dsl/method.ts index 5ad8498f54..dbe1323468 100644 --- a/packages/openapi-ts/src/ts-dsl/method.ts +++ b/packages/openapi-ts/src/ts-dsl/method.ts @@ -42,7 +42,7 @@ export class MethodTsDsl extends TsDsl { return ts.factory.createMethodDeclaration( [...this.$decorators(), ...this.modifiers.list()], undefined, - this.$expr(this.name), + this.name, this.questionToken, this.$generics(), this.$params(), diff --git a/packages/openapi-ts/src/ts-dsl/mixins/args.ts b/packages/openapi-ts/src/ts-dsl/mixins/args.ts index 059165e380..5670e8faae 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/args.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/args.ts @@ -1,22 +1,22 @@ import type ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TsDsl } from '../base'; /** * Adds `.arg()` and `.args()` for managing expression arguments in call-like nodes. */ export class ArgsMixin extends TsDsl { - private _args?: Array>; + private _args?: Array>; /** Adds a single expression argument. */ - arg(arg: MaybeTsDsl): this { + arg(arg: string | MaybeTsDsl): this { (this._args ??= []).push(arg); return this; } /** Adds one or more expression arguments. */ - args(...args: ReadonlyArray>): this { + args(...args: ReadonlyArray>): this { (this._args ??= []).push(...args); return this; } @@ -24,7 +24,7 @@ export class ArgsMixin extends TsDsl { /** Renders the arguments into an array of `Expression`s. */ protected $args(): ReadonlyArray { if (!this._args) return []; - return this.$node(this._args).map((arg) => this.$expr(arg)); + return this.$node(this._args).map((arg) => this.$maybeId(arg)); } $render(): ts.Node { diff --git a/packages/openapi-ts/src/ts-dsl/mixins/assignment.ts b/packages/openapi-ts/src/ts-dsl/mixins/assignment.ts index 989179852e..9253f56599 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/assignment.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/assignment.ts @@ -1,11 +1,13 @@ -import type { MaybeTsDsl, WithString } from '../base'; +import type ts from 'typescript'; + +import type { MaybeTsDsl } from '../base'; import { BinaryTsDsl } from '../binary'; export class AssignmentMixin { /** Creates an assignment expression (e.g. `this = expr`). */ assign( - this: MaybeTsDsl, - expr: MaybeTsDsl, + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, ): BinaryTsDsl { return new BinaryTsDsl(this, '=', expr); } diff --git a/packages/openapi-ts/src/ts-dsl/mixins/decorator.ts b/packages/openapi-ts/src/ts-dsl/mixins/decorator.ts index dbbb4208f9..1678763187 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/decorator.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/decorator.ts @@ -1,6 +1,6 @@ import type ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TsDsl } from '../base'; import { DecoratorTsDsl } from '../decorator'; @@ -9,8 +9,8 @@ export class DecoratorMixin extends TsDsl { /** Adds a decorator (e.g. `@sealed({ in: 'root' })`). */ decorator( - name: WithString, - ...args: ReadonlyArray> + name: string | ts.Expression, + ...args: ReadonlyArray> ): this { (this.decorators ??= []).push(new DecoratorTsDsl(name, ...args)); return this; diff --git a/packages/openapi-ts/src/ts-dsl/mixins/do.ts b/packages/openapi-ts/src/ts-dsl/mixins/do.ts index b0f6724896..5f27132dca 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/do.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/do.ts @@ -1,16 +1,16 @@ import type ts from 'typescript'; -import type { MaybeTsDsl, WithStatement } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TsDsl } from '../base'; /** * Adds `.do()` for appending statements or expressions to a body. */ export class DoMixin extends TsDsl { - private _do?: Array>; + private _do?: Array>; /** Adds one or more expressions/statements to the body. */ - do(...items: ReadonlyArray>): this { + do(...items: ReadonlyArray>): this { (this._do ??= []).push(...items); return this; } diff --git a/packages/openapi-ts/src/ts-dsl/mixins/expr.ts b/packages/openapi-ts/src/ts-dsl/mixins/expr.ts index 80f26e4e75..895842abd7 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/expr.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/expr.ts @@ -3,7 +3,7 @@ import type ts from 'typescript'; import type { AsTsDsl } from '../as'; import type { AttrTsDsl } from '../attr'; import type { AwaitTsDsl } from '../await'; -import type { MaybeTsDsl, TypeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl, TypeTsDsl } from '../base'; import type { CallTsDsl } from '../call'; import type { ReturnTsDsl } from '../return'; @@ -15,8 +15,8 @@ import type { ReturnTsDsl } from '../return'; */ type AsFactory = ( - expr: MaybeTsDsl, - type: WithString, + expr: string | MaybeTsDsl, + type: string | TypeTsDsl, ) => AsTsDsl; let asFactory: AsFactory | undefined; /** Registers the Attr DSL factory after its module has finished evaluating. */ @@ -25,8 +25,8 @@ export function registerLazyAccessAsFactory(factory: AsFactory): void { } type AttrFactory = ( - expr: MaybeTsDsl, - name: WithString | number, + expr: string | MaybeTsDsl, + name: string | ts.MemberName | number, ) => AttrTsDsl; let attrFactory: AttrFactory | undefined; /** Registers the Attr DSL factory after its module has finished evaluating. */ @@ -34,7 +34,7 @@ export function registerLazyAccessAttrFactory(factory: AttrFactory): void { attrFactory = factory; } -type AwaitFactory = (expr: MaybeTsDsl) => AwaitTsDsl; +type AwaitFactory = (expr: string | MaybeTsDsl) => AwaitTsDsl; let awaitFactory: AwaitFactory | undefined; /** Registers the Await DSL factory after its module has finished evaluating. */ export function registerLazyAccessAwaitFactory(factory: AwaitFactory): void { @@ -42,8 +42,8 @@ export function registerLazyAccessAwaitFactory(factory: AwaitFactory): void { } type CallFactory = ( - expr: MaybeTsDsl, - args: ReadonlyArray | undefined>, + expr: string | MaybeTsDsl, + args: ReadonlyArray | undefined>, ) => CallTsDsl; let callFactory: CallFactory | undefined; /** Registers the Call DSL factory after its module has finished evaluating. */ @@ -51,7 +51,7 @@ export function registerLazyAccessCallFactory(factory: CallFactory): void { callFactory = factory; } -type ReturnFactory = (expr: MaybeTsDsl) => ReturnTsDsl; +type ReturnFactory = (expr: string | MaybeTsDsl) => ReturnTsDsl; let returnFactory: ReturnFactory | undefined; /** Registers the Return DSL factory after its module has finished evaluating. */ export function registerLazyAccessReturnFactory(factory: ReturnFactory): void { @@ -60,33 +60,36 @@ export function registerLazyAccessReturnFactory(factory: ReturnFactory): void { export class ExprMixin { /** Creates an `as` type assertion expression (e.g. `value as Type`). */ - as(this: MaybeTsDsl, type: WithString): AsTsDsl { + as( + this: string | MaybeTsDsl, + type: string | TypeTsDsl, + ): AsTsDsl { return asFactory!(this, type); } /** Accesses a property on the current expression (e.g. `this.foo`). */ attr( - this: MaybeTsDsl, - name: WithString | number, + this: string | MaybeTsDsl, + name: string | ts.MemberName | number, ): AttrTsDsl { return attrFactory!(this, name); } /** Awaits the current expression (e.g. `await expr`). */ - await(this: MaybeTsDsl): AwaitTsDsl { + await(this: string | MaybeTsDsl): AwaitTsDsl { return awaitFactory!(this); } /** Calls the current expression (e.g. `fn(arg1, arg2)`). */ call( - this: MaybeTsDsl, - ...args: ReadonlyArray | undefined> + this: string | MaybeTsDsl, + ...args: ReadonlyArray | undefined> ): CallTsDsl { return callFactory!(this, args); } /** Produces a `return` statement returning the current expression. */ - return(this: MaybeTsDsl): ReturnTsDsl { + return(this: string | MaybeTsDsl): ReturnTsDsl { return returnFactory!(this); } } diff --git a/packages/openapi-ts/src/ts-dsl/mixins/operator.ts b/packages/openapi-ts/src/ts-dsl/mixins/operator.ts index 11c0c8f9e5..6bb5beded2 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/operator.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/operator.ts @@ -1,65 +1,112 @@ -import type { MaybeTsDsl, WithString } from '../base'; +import type ts from 'typescript'; + +import type { MaybeTsDsl } from '../base'; import { BinaryTsDsl } from '../binary'; export class OperatorMixin { /** Logical AND — `this && expr` */ - and(this: MaybeTsDsl, expr: MaybeTsDsl) { + and( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '&&', expr); } /** Nullish coalescing — `this ?? expr` */ - coalesce(this: MaybeTsDsl, expr: MaybeTsDsl) { + coalesce( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '??', expr); } /** Division — `this / expr` */ - div(this: MaybeTsDsl, expr: MaybeTsDsl) { + div( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '/', expr); } /** Strict equality — `this === expr` */ - eq(this: MaybeTsDsl, expr: MaybeTsDsl) { + eq( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '===', expr); } /** Greater than — `this > expr` */ - gt(this: MaybeTsDsl, expr: MaybeTsDsl) { + gt( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '>', expr); } /** Greater than or equal — `this >= expr` */ - gte(this: MaybeTsDsl, expr: MaybeTsDsl) { + gte( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '>=', expr); } /** Loose equality — `this == expr` */ - looseEq(this: MaybeTsDsl, expr: MaybeTsDsl) { + looseEq( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '==', expr); } /** Loose inequality — `this != expr` */ - looseNeq(this: MaybeTsDsl, expr: MaybeTsDsl) { + looseNeq( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '!=', expr); } /** Less than — `this < expr` */ - lt(this: MaybeTsDsl, expr: MaybeTsDsl) { + lt( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '<', expr); } /** Less than or equal — `this <= expr` */ - lte(this: MaybeTsDsl, expr: MaybeTsDsl) { + lte( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '<=', expr); } /** Subtraction — `this - expr` */ - minus(this: MaybeTsDsl, expr: MaybeTsDsl) { + minus( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '-', expr); } /** Strict inequality — `this !== expr` */ - neq(this: MaybeTsDsl, expr: MaybeTsDsl) { + neq( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '!==', expr); } /** Logical OR — `this || expr` */ - or(this: MaybeTsDsl, expr: MaybeTsDsl) { + or( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '||', expr); } /** Addition — `this + expr` */ - plus(this: MaybeTsDsl, expr: MaybeTsDsl) { + plus( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '+', expr); } /** Multiplication — `this * expr` */ - times(this: MaybeTsDsl, expr: MaybeTsDsl) { + times( + this: string | MaybeTsDsl, + expr: string | MaybeTsDsl, + ) { return new BinaryTsDsl(this, '*', expr); } } diff --git a/packages/openapi-ts/src/ts-dsl/mixins/type-args.ts b/packages/openapi-ts/src/ts-dsl/mixins/type-args.ts index 9c0e06e392..bbec9b944e 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/type-args.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/type-args.ts @@ -1,20 +1,20 @@ import type ts from 'typescript'; -import type { MaybeTsDsl, TypeOfTsDsl, TypeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl, TypeOfTsDsl, TypeTsDsl } from '../base'; import { TsDsl } from '../base'; export class TypeArgsMixin extends TsDsl { - protected _generics?: Array>>>; + protected _generics?: Array>>; /** Adds a single type argument (e.g. `string` in `Foo`). */ - generic(arg: WithString>>): this { + generic(arg: string | MaybeTsDsl>): this { (this._generics ??= []).push(arg); return this; } /** Adds type arguments (e.g. `Map`). */ generics( - ...args: ReadonlyArray>>> + ...args: ReadonlyArray>> ): this { this._generics = [...args]; return this; diff --git a/packages/openapi-ts/src/ts-dsl/mixins/value.ts b/packages/openapi-ts/src/ts-dsl/mixins/value.ts index 68dbb441b5..016466d4ee 100644 --- a/packages/openapi-ts/src/ts-dsl/mixins/value.ts +++ b/packages/openapi-ts/src/ts-dsl/mixins/value.ts @@ -1,13 +1,13 @@ import type ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TsDsl } from '../base'; export class ValueMixin extends TsDsl { - private value?: MaybeTsDsl; + private value?: string | MaybeTsDsl; /** Sets the initializer expression (e.g. `= expr`). */ - assign(this: T, expr: MaybeTsDsl): T { + assign(this: T, expr: string | MaybeTsDsl): T { this.value = expr; return this; } diff --git a/packages/openapi-ts/src/ts-dsl/new.ts b/packages/openapi-ts/src/ts-dsl/new.ts index 996eeac108..b03ba2145a 100644 --- a/packages/openapi-ts/src/ts-dsl/new.ts +++ b/packages/openapi-ts/src/ts-dsl/new.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ArgsMixin } from './mixins/args'; @@ -9,11 +9,11 @@ import { ExprMixin } from './mixins/expr'; import { TypeArgsMixin } from './mixins/type-args'; export class NewTsDsl extends TsDsl { - private classExpr: MaybeTsDsl; + private classExpr: string | MaybeTsDsl; constructor( - classExpr: MaybeTsDsl, - ...args: ReadonlyArray> + classExpr: string | MaybeTsDsl, + ...args: ReadonlyArray> ) { super(); this.classExpr = classExpr; diff --git a/packages/openapi-ts/src/ts-dsl/not.ts b/packages/openapi-ts/src/ts-dsl/not.ts deleted file mode 100644 index 0cb7ca83ce..0000000000 --- a/packages/openapi-ts/src/ts-dsl/not.ts +++ /dev/null @@ -1,20 +0,0 @@ -import ts from 'typescript'; - -import type { MaybeTsDsl, WithString } from './base'; -import { TsDsl } from './base'; - -export class NotTsDsl extends TsDsl { - private _notExpr: MaybeTsDsl; - - constructor(expr: MaybeTsDsl) { - super(); - this._notExpr = expr; - } - - $render(): ts.PrefixUnaryExpression { - return ts.factory.createPrefixUnaryExpression( - ts.SyntaxKind.ExclamationToken, - this.$node(this._notExpr), - ); - } -} diff --git a/packages/openapi-ts/src/ts-dsl/object.ts b/packages/openapi-ts/src/ts-dsl/object.ts index 2c36d60e38..f6c47c746e 100644 --- a/packages/openapi-ts/src/ts-dsl/object.ts +++ b/packages/openapi-ts/src/ts-dsl/object.ts @@ -3,7 +3,7 @@ import ts from 'typescript'; import { numberRegExp } from '~/utils/regexp'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { GetterTsDsl } from './getter'; import { mixin } from './mixins/apply'; @@ -15,21 +15,21 @@ import { SetterTsDsl } from './setter'; export class ObjectTsDsl extends TsDsl { private props: Array< | { - expr: WithString>; + expr: string | MaybeTsDsl; kind: 'getter'; name: string; } - | { expr: MaybeTsDsl; kind: 'prop'; name: string } + | { expr: string | MaybeTsDsl; kind: 'prop'; name: string } | { - expr: WithString>; + expr: string | MaybeTsDsl; kind: 'setter'; name: string; } - | { expr: MaybeTsDsl; kind: 'spread' } + | { expr: string | MaybeTsDsl; kind: 'spread' } > = []; /** Adds a getter property (e.g. `{ get foo() { ... } }`). */ - getter(name: string, expr: WithString>): this { + getter(name: string, expr: string | MaybeTsDsl): this { this.props.push({ expr, kind: 'getter', name }); return this; } @@ -45,19 +45,19 @@ export class ObjectTsDsl extends TsDsl { } /** Adds a property assignment. */ - prop(name: string, expr: MaybeTsDsl): this { + prop(name: string, expr: string | MaybeTsDsl): this { this.props.push({ expr, kind: 'prop', name }); return this; } /** Adds a setter property (e.g. `{ set foo(v) { ... } }`). */ - setter(name: string, expr: WithString>): this { + setter(name: string, expr: string | MaybeTsDsl): this { this.props.push({ expr, kind: 'setter', name }); return this; } /** Adds a spread property (e.g. `{ ...options }`). */ - spread(expr: MaybeTsDsl): this { + spread(expr: string | MaybeTsDsl): this { this.props.push({ expr, kind: 'spread' }); return this; } diff --git a/packages/openapi-ts/src/ts-dsl/prefix.ts b/packages/openapi-ts/src/ts-dsl/prefix.ts new file mode 100644 index 0000000000..3fbe02a286 --- /dev/null +++ b/packages/openapi-ts/src/ts-dsl/prefix.ts @@ -0,0 +1,56 @@ +import ts from 'typescript'; + +import type { MaybeTsDsl } from './base'; +import { TsDsl } from './base'; + +export class PrefixTsDsl extends TsDsl { + private _expr?: string | MaybeTsDsl; + private _op?: ts.PrefixUnaryOperator; + + constructor( + expr?: string | MaybeTsDsl, + op?: ts.PrefixUnaryOperator, + ) { + super(); + this._expr = expr; + this._op = op; + } + + /** Sets the operand (the expression being prefixed). */ + expr(expr: string | MaybeTsDsl): this { + this._expr = expr; + return this; + } + + /** Sets the operator to MinusToken for negation (`-`). */ + neg(): this { + this._op = ts.SyntaxKind.MinusToken; + return this; + } + + /** Sets the operator to ExclamationToken for logical NOT (`!`). */ + not(): this { + this._op = ts.SyntaxKind.ExclamationToken; + return this; + } + + /** Sets the operator (e.g. `ts.SyntaxKind.ExclamationToken` for `!`). */ + op(op: ts.PrefixUnaryOperator): this { + this._op = op; + return this; + } + + /** Renders the prefix unary expression node. */ + $render(): ts.PrefixUnaryExpression { + if (!this._expr) { + throw new Error('Missing expression for prefix unary expression'); + } + if (!this._op) { + throw new Error('Missing operator for prefix unary expression'); + } + return ts.factory.createPrefixUnaryExpression( + this._op, + this.$node(this._expr), + ); + } +} diff --git a/packages/openapi-ts/src/ts-dsl/return.ts b/packages/openapi-ts/src/ts-dsl/return.ts index d33b449c82..94a7d8edfe 100644 --- a/packages/openapi-ts/src/ts-dsl/return.ts +++ b/packages/openapi-ts/src/ts-dsl/return.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { ExprMixin, registerLazyAccessReturnFactory } from './mixins/expr'; export class ReturnTsDsl extends TsDsl { - private _returnExpr?: MaybeTsDsl; + private _returnExpr?: string | MaybeTsDsl; - constructor(expr?: MaybeTsDsl) { + constructor(expr?: string | MaybeTsDsl) { super(); this._returnExpr = expr; } diff --git a/packages/openapi-ts/src/ts-dsl/template.ts b/packages/openapi-ts/src/ts-dsl/template.ts index 5c92d85119..648be8d021 100644 --- a/packages/openapi-ts/src/ts-dsl/template.ts +++ b/packages/openapi-ts/src/ts-dsl/template.ts @@ -1,19 +1,19 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; export class TemplateTsDsl extends TsDsl< ts.TemplateExpression | ts.NoSubstitutionTemplateLiteral > { - private parts: Array> = []; + private parts: Array> = []; - constructor(value?: MaybeTsDsl) { + constructor(value?: string | MaybeTsDsl) { super(); if (value !== undefined) this.add(value); } - add(value: MaybeTsDsl): this { + add(value: string | MaybeTsDsl): this { this.parts.push(value); return this; } @@ -21,7 +21,7 @@ export class TemplateTsDsl extends TsDsl< $render(): ts.TemplateExpression | ts.NoSubstitutionTemplateLiteral { const parts = this.$node(this.parts); - const normalized: Array = []; + const normalized: Array = []; // merge consecutive string parts for (let index = 0; index < parts.length; index++) { const current = parts[index]!; diff --git a/packages/openapi-ts/src/ts-dsl/ternary.ts b/packages/openapi-ts/src/ts-dsl/ternary.ts index 5bb64bf6dd..b485cf3042 100644 --- a/packages/openapi-ts/src/ts-dsl/ternary.ts +++ b/packages/openapi-ts/src/ts-dsl/ternary.ts @@ -1,29 +1,29 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; export class TernaryTsDsl extends TsDsl { - private _condition?: MaybeTsDsl; - private _then?: MaybeTsDsl; - private _else?: MaybeTsDsl; + private _condition?: string | MaybeTsDsl; + private _then?: string | MaybeTsDsl; + private _else?: string | MaybeTsDsl; - constructor(condition?: MaybeTsDsl) { + constructor(condition?: string | MaybeTsDsl) { super(); if (condition) this.condition(condition); } - condition(condition: MaybeTsDsl) { + condition(condition: string | MaybeTsDsl) { this._condition = condition; return this; } - do(expr: MaybeTsDsl) { + do(expr: string | MaybeTsDsl) { this._then = expr; return this; } - otherwise(expr: MaybeTsDsl) { + otherwise(expr: string | MaybeTsDsl) { this._else = expr; return this; } diff --git a/packages/openapi-ts/src/ts-dsl/throw.ts b/packages/openapi-ts/src/ts-dsl/throw.ts index 37e7077c25..efdbbe32b6 100644 --- a/packages/openapi-ts/src/ts-dsl/throw.ts +++ b/packages/openapi-ts/src/ts-dsl/throw.ts @@ -1,20 +1,20 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; export class ThrowTsDsl extends TsDsl { - private error: MaybeTsDsl; - private msg?: MaybeTsDsl; + private error: string | MaybeTsDsl; + private msg?: string | MaybeTsDsl; private useNew: boolean; - constructor(error: MaybeTsDsl, useNew = true) { + constructor(error: string | MaybeTsDsl, useNew = true) { super(); this.error = error; this.useNew = useNew; } - message(value: MaybeTsDsl): this { + message(value: string | MaybeTsDsl): this { this.msg = value; return this; } diff --git a/packages/openapi-ts/src/ts-dsl/type/and.ts b/packages/openapi-ts/src/ts-dsl/type/and.ts index 78f61359f6..3db27db20a 100644 --- a/packages/openapi-ts/src/ts-dsl/type/and.ts +++ b/packages/openapi-ts/src/ts-dsl/type/and.ts @@ -1,17 +1,16 @@ import ts from 'typescript'; -import type { WithString } from '../base'; import { TypeTsDsl } from '../base'; export class TypeAndTsDsl extends TypeTsDsl { - private _types: Array | TypeTsDsl> = []; + private _types: Array = []; - constructor(...nodes: Array | TypeTsDsl>) { + constructor(...nodes: Array) { super(); this.types(...nodes); } - types(...nodes: Array | TypeTsDsl>): this { + types(...nodes: Array): this { this._types.push(...nodes); return this; } diff --git a/packages/openapi-ts/src/ts-dsl/type/attr.ts b/packages/openapi-ts/src/ts-dsl/type/attr.ts index 1a3bcaad4b..e4c58edff2 100644 --- a/packages/openapi-ts/src/ts-dsl/type/attr.ts +++ b/packages/openapi-ts/src/ts-dsl/type/attr.ts @@ -1,20 +1,20 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TsDsl } from '../base'; export class TypeAttrTsDsl extends TsDsl { - private _base?: WithString>; - private right: WithString; + private _base?: string | MaybeTsDsl; + private right: string | ts.Identifier; constructor( - base: WithString>, - right: WithString, + base: string | MaybeTsDsl, + right: string | ts.Identifier, ); - constructor(right: WithString); + constructor(right: string | ts.Identifier); constructor( - baseOrRight: WithString>, - maybeRight?: WithString, + baseOrRight: string | MaybeTsDsl, + maybeRight?: string | ts.Identifier, ) { super(); if (maybeRight) { @@ -22,11 +22,11 @@ export class TypeAttrTsDsl extends TsDsl { this.right = maybeRight; } else { this.base(undefined); - this.right = baseOrRight as WithString; + this.right = baseOrRight as string | ts.Identifier; } } - base(base?: WithString>): this { + base(base?: string | MaybeTsDsl): this { this._base = base; return this; } @@ -39,7 +39,7 @@ export class TypeAttrTsDsl extends TsDsl { if (!ts.isEntityName(left)) { throw new Error('TypeAttrTsDsl: base must be an EntityName'); } - const right = this.$expr(this.right); + const right = this.$maybeId(this.right); return ts.factory.createQualifiedName(left, right); } } diff --git a/packages/openapi-ts/src/ts-dsl/type/expr.ts b/packages/openapi-ts/src/ts-dsl/type/expr.ts index 870d176870..8c62ab6318 100644 --- a/packages/openapi-ts/src/ts-dsl/type/expr.ts +++ b/packages/openapi-ts/src/ts-dsl/type/expr.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { WithString } from '../base'; import { TypeTsDsl } from '../base'; import { mixin } from '../mixins/apply'; import { TypeArgsMixin } from '../mixins/type-args'; @@ -9,7 +8,7 @@ import { TypeAttrTsDsl } from './attr'; import { TypeIdxTsDsl } from './idx'; export class TypeExprTsDsl extends TypeTsDsl { - private _exprInput?: WithString | TypeAttrTsDsl; + private _exprInput?: string | ts.Identifier | TypeAttrTsDsl; constructor(); constructor(fn: (t: TypeExprTsDsl) => void); @@ -29,7 +28,7 @@ export class TypeExprTsDsl extends TypeTsDsl { } /** Accesses a nested type (e.g. `Foo.Bar`). */ - attr(right: WithString | TypeAttrTsDsl): this { + attr(right: string | ts.Identifier | TypeAttrTsDsl): this { this._exprInput = right instanceof TypeAttrTsDsl ? right.base(this._exprInput) @@ -38,7 +37,7 @@ export class TypeExprTsDsl extends TypeTsDsl { } /** Creates an indexed-access type (e.g. `Foo[K]`). */ - idx(index: WithString | number): TypeIdxTsDsl { + idx(index: string | ts.TypeNode | number): TypeIdxTsDsl { return new TypeIdxTsDsl(this, index); } diff --git a/packages/openapi-ts/src/ts-dsl/type/idx.ts b/packages/openapi-ts/src/ts-dsl/type/idx.ts index 725d4e28f4..9492641ee0 100644 --- a/packages/openapi-ts/src/ts-dsl/type/idx.ts +++ b/packages/openapi-ts/src/ts-dsl/type/idx.ts @@ -1,27 +1,27 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TypeTsDsl } from '../base'; export class TypeIdxTsDsl extends TypeTsDsl { - private _base: WithString>; - private _index: WithString> | number; + private _base: string | MaybeTsDsl; + private _index: string | MaybeTsDsl | number; constructor( - base: WithString>, - index: WithString> | number, + base: string | MaybeTsDsl, + index: string | MaybeTsDsl | number, ) { super(); this._base = base; this._index = index; } - base(base: WithString>): this { + base(base: string | MaybeTsDsl): this { this._base = base; return this; } - index(index: WithString> | number): this { + index(index: string | MaybeTsDsl | number): this { this._index = index; return this; } diff --git a/packages/openapi-ts/src/ts-dsl/type/object.ts b/packages/openapi-ts/src/ts-dsl/type/object.ts index e5b4f7b4f6..129a73fd18 100644 --- a/packages/openapi-ts/src/ts-dsl/type/object.ts +++ b/packages/openapi-ts/src/ts-dsl/type/object.ts @@ -1,7 +1,6 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { WithString } from '../base'; import { TypeTsDsl } from '../base'; import { mixin } from '../mixins/apply'; import { OptionalMixin } from '../mixins/optional'; @@ -23,7 +22,7 @@ export class TypeObjectTsDsl extends TypeTsDsl { class TypePropTsDsl extends TypeTsDsl { private name: string; - private typeInput?: WithString; + private typeInput?: string | ts.TypeNode; constructor(name: string, fn: (p: TypePropTsDsl) => void) { super(); @@ -32,7 +31,7 @@ class TypePropTsDsl extends TypeTsDsl { } /** Sets the property type. */ - type(type: WithString): this { + type(type: string | ts.TypeNode): this { this.typeInput = type; return this; } @@ -44,7 +43,7 @@ class TypePropTsDsl extends TypeTsDsl { } return ts.factory.createPropertySignature( undefined, - this.$expr(this.name), + this.name, this.questionToken, this.$type(this.typeInput), ); diff --git a/packages/openapi-ts/src/ts-dsl/type/or.ts b/packages/openapi-ts/src/ts-dsl/type/or.ts index f95e0b6605..8c71d7a775 100644 --- a/packages/openapi-ts/src/ts-dsl/type/or.ts +++ b/packages/openapi-ts/src/ts-dsl/type/or.ts @@ -1,17 +1,16 @@ import ts from 'typescript'; -import type { WithString } from '../base'; import { TypeTsDsl } from '../base'; export class TypeOrTsDsl extends TypeTsDsl { - private _types: Array | TypeTsDsl> = []; + private _types: Array = []; - constructor(...nodes: Array | TypeTsDsl>) { + constructor(...nodes: Array) { super(); this.types(...nodes); } - types(...nodes: Array | TypeTsDsl>): this { + types(...nodes: Array): this { this._types.push(...nodes); return this; } diff --git a/packages/openapi-ts/src/ts-dsl/type/param.ts b/packages/openapi-ts/src/ts-dsl/type/param.ts index 7c02ffe8ca..50b43a28e1 100644 --- a/packages/openapi-ts/src/ts-dsl/type/param.ts +++ b/packages/openapi-ts/src/ts-dsl/type/param.ts @@ -1,15 +1,15 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TypeTsDsl } from '../base'; export class TypeParamTsDsl extends TypeTsDsl { - protected name?: WithString; - protected constraint?: WithString> | boolean; - protected defaultValue?: WithString> | boolean; + protected name?: string | ts.Identifier; + protected constraint?: string | MaybeTsDsl | boolean; + protected defaultValue?: string | MaybeTsDsl | boolean; constructor( - name?: WithString, + name?: string | ts.Identifier, fn?: (name: TypeParamTsDsl) => void, ) { super(); @@ -17,12 +17,12 @@ export class TypeParamTsDsl extends TypeTsDsl { fn?.(this); } - default(value: WithString> | boolean): this { + default(value: string | MaybeTsDsl | boolean): this { this.defaultValue = value; return this; } - extends(constraint: WithString> | boolean): this { + extends(constraint: string | MaybeTsDsl | boolean): this { this.constraint = constraint; return this; } @@ -31,7 +31,7 @@ export class TypeParamTsDsl extends TypeTsDsl { if (!this.name) throw new Error('Missing type name'); return ts.factory.createTypeParameterDeclaration( undefined, - this.$expr(this.name), + this.$maybeId(this.name), this.$type(this.constraint), this.$type(this.defaultValue), ); diff --git a/packages/openapi-ts/src/ts-dsl/type/query.ts b/packages/openapi-ts/src/ts-dsl/type/query.ts index e58bbdda0b..85158c5173 100644 --- a/packages/openapi-ts/src/ts-dsl/type/query.ts +++ b/packages/openapi-ts/src/ts-dsl/type/query.ts @@ -1,12 +1,12 @@ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from '../base'; +import type { MaybeTsDsl } from '../base'; import { TypeTsDsl } from '../base'; export class TypeQueryTsDsl extends TypeTsDsl { - private expr: MaybeTsDsl; + private expr: string | MaybeTsDsl; - constructor(expr: MaybeTsDsl) { + constructor(expr: string | MaybeTsDsl) { super(); this.expr = expr; } diff --git a/packages/openapi-ts/src/ts-dsl/type/tuple.ts b/packages/openapi-ts/src/ts-dsl/type/tuple.ts index ff050ab68e..2ea4ec6e65 100644 --- a/packages/openapi-ts/src/ts-dsl/type/tuple.ts +++ b/packages/openapi-ts/src/ts-dsl/type/tuple.ts @@ -1,17 +1,16 @@ import ts from 'typescript'; -import type { WithString } from '../base'; import { TypeTsDsl } from '../base'; export class TypeTupleTsDsl extends TypeTsDsl { - private _elements: Array | TypeTsDsl> = []; + private _elements: Array = []; - constructor(...nodes: Array | TypeTsDsl>) { + constructor(...nodes: Array) { super(); this.elements(...nodes); } - elements(...types: Array | TypeTsDsl>): this { + elements(...types: Array): this { this._elements.push(...types); return this; } diff --git a/packages/openapi-ts/src/ts-dsl/typeof.ts b/packages/openapi-ts/src/ts-dsl/typeof.ts index bff6df46eb..f31ec1bbe4 100644 --- a/packages/openapi-ts/src/ts-dsl/typeof.ts +++ b/packages/openapi-ts/src/ts-dsl/typeof.ts @@ -1,15 +1,15 @@ /* eslint-disable @typescript-eslint/no-empty-object-type, @typescript-eslint/no-unsafe-declaration-merging */ import ts from 'typescript'; -import type { MaybeTsDsl, WithString } from './base'; +import type { MaybeTsDsl } from './base'; import { TsDsl } from './base'; import { mixin } from './mixins/apply'; import { OperatorMixin } from './mixins/operator'; export class TypeOfExprTsDsl extends TsDsl { - private _expr: MaybeTsDsl; + private _expr: string | MaybeTsDsl; - constructor(expr: MaybeTsDsl) { + constructor(expr: string | MaybeTsDsl) { super(); this._expr = expr; } diff --git a/packages/openapi-ts/src/ts-dsl/utils.ts b/packages/openapi-ts/src/ts-dsl/utils.ts new file mode 100644 index 0000000000..689f9ac8ff --- /dev/null +++ b/packages/openapi-ts/src/ts-dsl/utils.ts @@ -0,0 +1,39 @@ +import type ts from 'typescript'; + +import { ArrayTsDsl } from './array'; +import { TsDsl } from './base'; +import { LiteralTsDsl } from './literal'; +import { ObjectTsDsl } from './object'; + +export const toExpr = (value: unknown): TsDsl | undefined => { + if (value instanceof TsDsl) { + return value; + } + + if (value === null) { + return new LiteralTsDsl(value); + } + + if ( + typeof value === 'number' || + typeof value === 'boolean' || + typeof value === 'string' + ) { + return new LiteralTsDsl(value); + } + + if (value instanceof Array) { + return new ArrayTsDsl(...value.map((v) => toExpr(v) ?? v)); + } + + if (typeof value === 'object') { + const obj = new ObjectTsDsl(); + for (const [key, val] of Object.entries(value)) { + const expr = toExpr(val); + if (expr) obj.prop(key, expr); + } + return obj; + } + + return; +};