@@ -347,7 +347,7 @@ import SidebarItems from "./SidebarItems";${
: null
}
-import { AuthSession, getUserAuth } from "${formatFilePath(
+import { type AuthSession, getUserAuth } from "${formatFilePath(
shared.auth.authUtils,
{
prefix: "alias",
@@ -378,7 +378,7 @@ const UserDetails = ({ session }: { session: AuthSession }) => {
if (session.session === null) return null;
const { user } = session.session;
- if (!user?.name || user.name.length == 0) return null;
+ if (!user?.name || user.name.length === 0) return null;
return (
diff --git a/src/commands/add/misc/resend/generators.ts b/src/commands/add/misc/resend/generators.ts
index a850abac..41bf5651 100644
--- a/src/commands/add/misc/resend/generators.ts
+++ b/src/commands/add/misc/resend/generators.ts
@@ -15,7 +15,7 @@ import { emailSchema } from "${formatFilePath(resend.emailUtils, {
removeExtension: true,
})}";
import { useRef, useState } from "react";
-import { z } from "zod";
+import type { z } from "zod";
type FormInput = z.infer
;
type Errors = { [K in keyof FormInput]: string[] };
@@ -220,7 +220,7 @@ export const resend = new Resend(env.RESEND_API_KEY);
};
const generateEmailUtilsTs = () => {
- return `import { z } from "zod";
+ return `import type { z } from "zod";
export const emailSchema = z.object({
name: z.string().min(3),
diff --git a/src/commands/add/misc/trpc/generators.ts b/src/commands/add/misc/trpc/generators.ts
index 24adb779..55950a2e 100644
--- a/src/commands/add/misc/trpc/generators.ts
+++ b/src/commands/add/misc/trpc/generators.ts
@@ -52,7 +52,7 @@ export const protectedProcedure = t.procedure.use(enforceUserIsAuthed);
`;
const { trpc } = getFilePaths();
return `import { initTRPC, TRPCError } from "@trpc/server";
-import { Context } from "${formatFilePath(trpc.trpcContext, {
+import type { Context } from "${formatFilePath(trpc.trpcContext, {
prefix: "alias",
removeExtension: true,
})}";
@@ -121,7 +121,7 @@ export const apiTrpcRouteTs = () => {
const { trpc, shared } = getFilePaths();
return `import { fetchRequestHandler } from "@trpc/server/adapters/fetch";
-import { NextRequest } from "next/server";
+import type { NextRequest } from "next/server";
import { appRouter } from "${formatFilePath(trpc.rootRouter, {
prefix: "alias",
removeExtension: true,
@@ -166,7 +166,7 @@ export const libTrpcClientTs = () => {
const { trpc } = getFilePaths();
return `import { createTRPCReact } from "@trpc/react-query";
-import { type AppRouter } from "${formatFilePath(trpc.rootRouter, {
+import type { AppRouter } from "${formatFilePath(trpc.rootRouter, {
prefix: "alias",
removeExtension: true,
})}";
@@ -180,7 +180,8 @@ export const libTrpcProviderTsx = () => {
import { QueryClient, QueryClientProvider } from "@tanstack/react-query";
import { loggerLink, unstable_httpBatchStreamLink } from "@trpc/client";
-import React, { useState } from "react";
+import type React from "react";
+import { useState } from "react";
import { trpc } from "./client";
import { getUrl } from "./utils";
@@ -273,7 +274,7 @@ import {
TRPCClientError,
} from "@trpc/client";
import { callProcedure } from "@trpc/server";
-import { type TRPCErrorResponse } from "@trpc/server/rpc";
+import type { TRPCErrorResponse } from "@trpc/server/rpc";
import { observable } from "@trpc/server/observable";
import { cache } from "react";
@@ -386,7 +387,7 @@ export const libTrpcUtilsTs = () => {
}
export function getUrl() {
- return getBaseUrl() + "/api/trpc";
+ return \`\${getBaseUrl()}/api/trpc\`;
}`;
};
@@ -394,7 +395,7 @@ export const libTrpcApiTsBatchLink = () => {
const { trpc } = getFilePaths();
return `import { cookies } from "next/headers";
-import { type AppRouter } from "${formatFilePath(trpc.rootRouter, {
+import type { AppRouter } from "${formatFilePath(trpc.rootRouter, {
prefix: "alias",
removeExtension: true,
})}";
diff --git a/src/commands/add/orm/drizzle/generators.ts b/src/commands/add/orm/drizzle/generators.ts
index cabf2014..d6b4d9e8 100644
--- a/src/commands/add/orm/drizzle/generators.ts
+++ b/src/commands/add/orm/drizzle/generators.ts
@@ -859,7 +859,7 @@ const generateEnvMjs = (
blank = false
) => {
return `import { createEnv } from "@t3-oss/env-nextjs";
-import { z } from "zod";${
+import type { z } from "zod";${
preferredPackageManager !== "bun" && ormType === "drizzle"
? '\nimport "dotenv/config";'
: ""
diff --git a/src/commands/add/orm/prisma/generators.ts b/src/commands/add/orm/prisma/generators.ts
index 9d9036dc..1338b083 100644
--- a/src/commands/add/orm/prisma/generators.ts
+++ b/src/commands/add/orm/prisma/generators.ts
@@ -60,7 +60,7 @@ if (process.env.NODE_ENV !== "production") global.db = db;
export const generatePrismaComputerModel = () => {
const { alias } = readConfigFile();
return `import { computerSchema } from "${alias}/zodAutoGenSchemas";
-import { z } from "zod";
+import type { z } from "zod";
export const insertComputerSchema = computerSchema;
export const insertComputerParams = computerSchema.omit({
diff --git a/src/commands/generate/generators/apiRoute.ts b/src/commands/generate/generators/apiRoute.ts
index 4c6cd21d..96bdc2b1 100644
--- a/src/commands/generate/generators/apiRoute.ts
+++ b/src/commands/generate/generators/apiRoute.ts
@@ -24,7 +24,7 @@ const generateRouteContent = (schema: Schema, driver: DBType) => {
const template = `import { NextResponse } from "next/server";
import { revalidatePath } from "next/cache";
-import { z } from "zod";
+import type { z } from "zod";
import {
create${tableNameSingularCapitalised},
diff --git a/src/commands/generate/generators/model/schema/index.ts b/src/commands/generate/generators/model/schema/index.ts
index 53dbce2a..be6dfa84 100644
--- a/src/commands/generate/generators/model/schema/index.ts
+++ b/src/commands/generate/generators/model/schema/index.ts
@@ -86,7 +86,7 @@ const generateImportStatement = (
.join(", ")
.concat(
`, ${mappings.tableFunc}`
- )}${schema.index ? ", uniqueIndex" : ""} } from "drizzle-orm/${dbType}-core";\nimport { createInsertSchema, createSelectSchema } from "drizzle-zod";\nimport { z } from "zod";\n${
+ )}${schema.index ? ", uniqueIndex" : ""} } from "drizzle-orm/${dbType}-core";\nimport { createInsertSchema, createSelectSchema } from "drizzle-zod";\nimport type { z } from "zod";\n${
referenceImports.length > 0 ? referenceImports.join("\n") : ""
}${
belongsToUser && provider !== "planetscale" && authSubType !== "managed"
@@ -96,7 +96,7 @@ const generateImportStatement = (
})}";`
: ""
}
-import { type get${tableNameCapitalised} } from "${formatFilePath(
+import type { get${tableNameCapitalised} } from "${formatFilePath(
shared.orm.servicesDir,
{ prefix: "alias", removeExtension: false }
)}/${tableNameCamelCase}/queries";
@@ -111,7 +111,7 @@ import { nanoid${
}
if (orm === "prisma")
return `import { ${tableNameSingular}Schema } from "${alias}/zodAutoGenSchemas";
-import { z } from "zod";${
+import type { z } from "zod";${
schema.includeTimestamps
? `\nimport { timestamps } from "${formatFilePath("lib/utils", {
prefix: "alias",
diff --git a/src/commands/generate/generators/views-with-server-actions.ts b/src/commands/generate/generators/views-with-server-actions.ts
index bacf0c15..a4594696 100644
--- a/src/commands/generate/generators/views-with-server-actions.ts
+++ b/src/commands/generate/generators/views-with-server-actions.ts
@@ -801,7 +801,7 @@ const createFormComponent = (schema: Schema) => {
...new Set(schema.fields.map((field) => field.type)),
] as ColumnType[];
- return `import { z } from "zod";
+ return `import type { z } from "zod";
import { useState, useTransition } from "react";
import { useFormStatus } from "react-dom";
@@ -933,6 +933,20 @@ const ${tableNameSingularCapitalised}Form = ({${
}
};
+ const onError = (
+ action: Action,
+ data?: { error: string; values: ${tableNameSingularCapitalised} },
+ ) => {
+ const failed = Boolean(data?.error);
+ if (failed) {
+ openModal && openModal(data?.values);
+ toast.error(\`Failed to \${action}\`, {
+ description: data?.error ?? "Error",
+ });
+ }
+ return
+ };
+
const handleSubmit = async (data: FormData) => {
setErrors(null);
diff --git a/src/commands/generate/generators/views.ts b/src/commands/generate/generators/views.ts
index 926cbd51..5a98ced1 100644
--- a/src/commands/generate/generators/views.ts
+++ b/src/commands/generate/generators/views.ts
@@ -173,10 +173,10 @@ export default function ${tableNameSingularCapitalised}List({ ${tableNameCamelCa
{${tableNameFirstChar}.${tableNameCamelCase}.map((${tableNameSingular}) => (
<${tableNameSingularCapitalised} ${tableNameSingular}={${tableNameSingular}} key={${
- relations.length > 0
- ? `${tableNameSingular}.${tableNameSingular}`
- : tableNameSingular
- }.id} />
+ relations.length > 0
+ ? `${tableNameSingular}.${tableNameSingular}`
+ : tableNameSingular
+ }.id} />
))}
);
@@ -191,18 +191,18 @@ const ${tableNameSingularCapitalised} = ({ ${tableNameSingular} }: { ${tableName
? `${tableNameSingular}.${tableNameSingular}`
: tableNameSingular
}.${toCamelCase(schema.fields[0].name)}${
- schema.fields[0].type === "date" ||
- schema.fields[0].type === "timestamp" ||
- schema.fields[0].type === "DateTime"
- ? ".toString()"
- : ""
- }}
+ schema.fields[0].type === "date" ||
+ schema.fields[0].type === "timestamp" ||
+ schema.fields[0].type === "DateTime"
+ ? ".toString()"
+ : ""
+ }}
<${tableNameSingularCapitalised}Modal ${tableNameSingular}={${
- relations.length > 0
- ? `${tableNameSingular}.${tableNameSingular}`
- : tableNameSingular
- }} />
+ relations.length > 0
+ ? `${tableNameSingular}.${tableNameSingular}`
+ : tableNameSingular
+ }} />
);
};
@@ -301,7 +301,7 @@ const createformInputComponent = (field: DBField): string => {
`;
return `