Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ require (
github.com/go-sourcemap/sourcemap v2.1.3+incompatible // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/kr/pretty v0.3.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/rogpeppe/go-internal v1.14.1 // indirect
Expand Down
2 changes: 2 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@ github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/pprof v0.0.0-20230207041349-798e818bf904 h1:4/hN5RUoecvl+RmJRE2YxKWtnnQls6rQjjW5oV7qg2U=
github.com/google/pprof v0.0.0-20230207041349-798e818bf904/go.mod h1:uglQLonpP8qtYCYyzA+8c/9qtqgA3qsXGYqCPKARAFg=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
Expand Down
42 changes: 42 additions & 0 deletions testdata/zod/golden.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
// Code generated by 'guts'. DO NOT EDIT.

import { z } from "zod";

export type Base = z.infer<typeof BaseSchema>;

export const BaseSchema = z.object({
id: z.string(),
created_at: z.string(),
updated_at: z.string()
});

export type CreateTicketRequest = z.infer<typeof CreateTicketRequestSchema>;

export const CreateTicketRequestSchema = z.object({
title: z.string(),
description: z.string().optional(),
priority: PrioritySchema,
tags: z.array(z.string()).optional()
});

export type Priority = z.infer<typeof PrioritySchema>;

export const PrioritySchema = z.union([z.literal(2), z.literal(0), z.literal(1)]);

export type Status = z.infer<typeof StatusSchema>;

export const StatusSchema = z.enum(["active", "closed", "pending"]);

export type Ticket = z.infer<typeof TicketSchema>;

export const TicketSchema = BaseSchema.extend({
title: z.string(),
description: z.string().optional(),
status: StatusSchema,
priority: PrioritySchema,
assignee_id: z.string().optional(),
tags: z.array(z.string()),
metadata: z.record(z.string(), z.string()).nullable(),
children: z.array(z.lazy((): z.ZodType => TicketSchema))
});

54 changes: 54 additions & 0 deletions testdata/zod/types.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
// Package zod provides sample types for testing the Zod mutation.
package zod

import (
"time"

"github.com/google/uuid"
)

type Status string

const (
StatusActive Status = "active"
StatusPending Status = "pending"
StatusClosed Status = "closed"
)

type Priority int

const (
PriorityLow Priority = 0
PriorityMedium Priority = 1
PriorityHigh Priority = 2
)

// Base is embedded by Ticket to test heritage/extend.
type Base struct {
ID uuid.UUID `json:"id"`
CreatedAt time.Time `json:"created_at"`
UpdatedAt time.Time `json:"updated_at"`
}

// Ticket demonstrates a realistic struct with enums, nullable
// pointers, embedded structs, arrays, and maps.
type Ticket struct {
Base

Title string `json:"title"`
Description *string `json:"description,omitempty"`
Status Status `json:"status"`
Priority Priority `json:"priority"`
AssigneeID *uuid.UUID `json:"assignee_id,omitempty"`
Tags []string `json:"tags"`
Metadata map[string]string `json:"metadata"`
Children []Ticket `json:"children"`
}

// CreateTicketRequest demonstrates a request body type.
type CreateTicketRequest struct {
Title string `json:"title"`
Description string `json:"description,omitempty"`
Priority Priority `json:"priority"`
Tags []string `json:"tags,omitempty"`
}
48 changes: 48 additions & 0 deletions testdata/zod/zod.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
// Code generated by 'guts'. DO NOT EDIT.

// From zod/types.go
/**
* Base is embedded by Ticket to test heritage/extend.
*/
export interface Base {
readonly id: string;
readonly created_at: string;
readonly updated_at: string;
}

// From zod/types.go
/**
* CreateTicketRequest demonstrates a request body type.
*/
export interface CreateTicketRequest {
readonly title: string;
readonly description?: string;
readonly priority: Priority;
readonly tags?: readonly string[];
}

export const Priorities: Priority[] = [2, 0, 1];

// From zod/types.go
export type Priority = 2 | 0 | 1;

// From zod/types.go
export type Status = "active" | "closed" | "pending";

export const Statuses: Status[] = ["active", "closed", "pending"];

// From zod/types.go
/**
* Ticket demonstrates a realistic struct with enums, nullable
* pointers, embedded structs, arrays, and maps.
*/
export interface Ticket extends Base {
readonly title: string;
readonly description?: string | null;
readonly status: Status;
readonly priority: Priority;
readonly assignee_id?: string | null;
readonly tags: readonly string[];
readonly metadata: Record<string, string> | null;
readonly children: readonly Ticket[];
}
Loading
Loading