@better-t-stack/types 3.42.2 → 3.43.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +136 -57
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +2 -23
- package/dist/index.mjs.map +1 -1
- package/dist/json-schema.d.mts +39 -26
- package/dist/json-schema.d.mts.map +1 -1
- package/dist/json-schema.mjs +1 -1
- package/dist/schemas-B-p9IhC-.mjs +876 -0
- package/dist/schemas-B-p9IhC-.mjs.map +1 -0
- package/dist/schemas.d.mts +69 -62
- package/dist/schemas.d.mts.map +1 -1
- package/dist/schemas.mjs +1 -569
- package/package.json +3 -3
- package/dist/schemas.mjs.map +0 -1
|
@@ -0,0 +1,876 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
//#region src/constants.ts
|
|
3
|
+
const webFrontends = [
|
|
4
|
+
"tanstack-router",
|
|
5
|
+
"react-router",
|
|
6
|
+
"tanstack-start",
|
|
7
|
+
"next",
|
|
8
|
+
"nuxt",
|
|
9
|
+
"svelte",
|
|
10
|
+
"solid",
|
|
11
|
+
"astro"
|
|
12
|
+
];
|
|
13
|
+
const desktopWebFrontends = [
|
|
14
|
+
"tanstack-router",
|
|
15
|
+
"react-router",
|
|
16
|
+
"tanstack-start",
|
|
17
|
+
"next",
|
|
18
|
+
"nuxt",
|
|
19
|
+
"svelte",
|
|
20
|
+
"astro"
|
|
21
|
+
];
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/compatibility.ts
|
|
24
|
+
const TASK_RUNNER_ADDONS = [
|
|
25
|
+
"turborepo",
|
|
26
|
+
"nx",
|
|
27
|
+
"vite-plus"
|
|
28
|
+
];
|
|
29
|
+
const OBSERVABILITY_ADDONS = ["evlog", "axiom"];
|
|
30
|
+
const STATIC_DESKTOP_ADDONS = ["tauri", "electrobun"];
|
|
31
|
+
const TAURI_STATIC_EXPORT_FRONTENDS = ["next", "tanstack-start"];
|
|
32
|
+
const CONVEX_BETTER_AUTH_INCOMPATIBLE_FRONTENDS = [
|
|
33
|
+
"nuxt",
|
|
34
|
+
"svelte",
|
|
35
|
+
"solid",
|
|
36
|
+
"astro"
|
|
37
|
+
];
|
|
38
|
+
const CONVEX_BETTER_AUTH_SUPPORTED_FRONTENDS = [
|
|
39
|
+
"tanstack-router",
|
|
40
|
+
"react-router",
|
|
41
|
+
"tanstack-start",
|
|
42
|
+
"next",
|
|
43
|
+
"native-bare",
|
|
44
|
+
"native-uniwind",
|
|
45
|
+
"native-unistyles"
|
|
46
|
+
];
|
|
47
|
+
const FULLSTACK_FRONTENDS = [
|
|
48
|
+
"next",
|
|
49
|
+
"tanstack-start",
|
|
50
|
+
"nuxt",
|
|
51
|
+
"svelte",
|
|
52
|
+
"solid",
|
|
53
|
+
"astro"
|
|
54
|
+
];
|
|
55
|
+
const SERVER_BACKENDS = [
|
|
56
|
+
"hono",
|
|
57
|
+
"express",
|
|
58
|
+
"fastify",
|
|
59
|
+
"elysia"
|
|
60
|
+
];
|
|
61
|
+
const EVLOG_FULLSTACK_FRONTENDS = [
|
|
62
|
+
"next",
|
|
63
|
+
"tanstack-start",
|
|
64
|
+
"nuxt",
|
|
65
|
+
"svelte",
|
|
66
|
+
"astro"
|
|
67
|
+
];
|
|
68
|
+
const CLERK_INCOMPATIBLE_FRONTENDS = CONVEX_BETTER_AUTH_INCOMPATIBLE_FRONTENDS;
|
|
69
|
+
const CLERK_SUPPORTED_FRONTENDS = CONVEX_BETTER_AUTH_SUPPORTED_FRONTENDS;
|
|
70
|
+
const TRPC_INCOMPATIBLE_FRONTENDS = [
|
|
71
|
+
"nuxt",
|
|
72
|
+
"svelte",
|
|
73
|
+
"solid",
|
|
74
|
+
"astro"
|
|
75
|
+
];
|
|
76
|
+
const CONVEX_INCOMPATIBLE_FRONTENDS = ["solid", "astro"];
|
|
77
|
+
const AI_INCOMPATIBLE_FRONTENDS = ["solid", "astro"];
|
|
78
|
+
const CONVEX_AI_INCOMPATIBLE_FRONTENDS = [
|
|
79
|
+
"solid",
|
|
80
|
+
"astro",
|
|
81
|
+
"svelte",
|
|
82
|
+
"nuxt"
|
|
83
|
+
];
|
|
84
|
+
const DESKTOP_STATIC_EXPORT_FRONTENDS = [
|
|
85
|
+
"next",
|
|
86
|
+
"svelte",
|
|
87
|
+
"astro",
|
|
88
|
+
"react-router"
|
|
89
|
+
];
|
|
90
|
+
const evlogCompatibilityMessage = "The observability addons support Hono, Express, Fastify, Elysia, or backend self with Next.js, TanStack Start, Nuxt, SvelteKit, or Astro. Convex and backend none are not supported yet.";
|
|
91
|
+
const ADDON_COMPATIBILITY = {
|
|
92
|
+
pwa: [
|
|
93
|
+
"tanstack-router",
|
|
94
|
+
"react-router",
|
|
95
|
+
"solid",
|
|
96
|
+
"next"
|
|
97
|
+
],
|
|
98
|
+
tauri: desktopWebFrontends,
|
|
99
|
+
electrobun: desktopWebFrontends,
|
|
100
|
+
biome: [],
|
|
101
|
+
husky: [],
|
|
102
|
+
lefthook: [],
|
|
103
|
+
turborepo: [],
|
|
104
|
+
nx: [],
|
|
105
|
+
"vite-plus": [],
|
|
106
|
+
starlight: [],
|
|
107
|
+
ultracite: [],
|
|
108
|
+
mcp: [],
|
|
109
|
+
oxlint: [],
|
|
110
|
+
fumadocs: [],
|
|
111
|
+
opentui: [],
|
|
112
|
+
wxt: [],
|
|
113
|
+
skills: [],
|
|
114
|
+
evlog: [],
|
|
115
|
+
axiom: [],
|
|
116
|
+
none: []
|
|
117
|
+
};
|
|
118
|
+
function supportsEvlogAddon(frontend = [], backend, _runtime) {
|
|
119
|
+
if (!backend) return true;
|
|
120
|
+
if (SERVER_BACKENDS.some((value) => value === backend)) return true;
|
|
121
|
+
if (backend === "self") {
|
|
122
|
+
if (frontend.length === 0) return true;
|
|
123
|
+
return frontend.some((f) => EVLOG_FULLSTACK_FRONTENDS.some((value) => value === f));
|
|
124
|
+
}
|
|
125
|
+
return false;
|
|
126
|
+
}
|
|
127
|
+
function isFrontendAllowedWithBackend(frontend, backend, auth) {
|
|
128
|
+
if (backend === "convex") {
|
|
129
|
+
if (auth === "better-auth" && CONVEX_BETTER_AUTH_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend)) return false;
|
|
130
|
+
if (CONVEX_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend)) return false;
|
|
131
|
+
}
|
|
132
|
+
if (auth === "clerk") {
|
|
133
|
+
if (CLERK_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend)) return false;
|
|
134
|
+
}
|
|
135
|
+
return true;
|
|
136
|
+
}
|
|
137
|
+
function supportsConvexBetterAuth(frontends = []) {
|
|
138
|
+
return frontends.some((frontend) => CONVEX_BETTER_AUTH_SUPPORTED_FRONTENDS.some((value) => value === frontend));
|
|
139
|
+
}
|
|
140
|
+
function allowedApisForFrontends(frontends = []) {
|
|
141
|
+
return frontends.some((frontend) => TRPC_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend)) ? ["orpc", "none"] : [
|
|
142
|
+
"trpc",
|
|
143
|
+
"orpc",
|
|
144
|
+
"none"
|
|
145
|
+
];
|
|
146
|
+
}
|
|
147
|
+
function isExampleTodoAllowed(backend, database, api) {
|
|
148
|
+
if (backend === "convex") return true;
|
|
149
|
+
if (database === "none" || api === "none") return false;
|
|
150
|
+
return true;
|
|
151
|
+
}
|
|
152
|
+
function isExampleAIAllowed(backend, frontends = []) {
|
|
153
|
+
return backend !== "none" && !frontends.some((frontend) => AI_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend) || backend === "convex" && CONVEX_AI_INCOMPATIBLE_FRONTENDS.some((value) => value === frontend));
|
|
154
|
+
}
|
|
155
|
+
const PRISMA_COMPUTE_WEB_FRONTENDS = [
|
|
156
|
+
"next",
|
|
157
|
+
"nuxt",
|
|
158
|
+
"astro",
|
|
159
|
+
"react-router",
|
|
160
|
+
"tanstack-start",
|
|
161
|
+
"svelte",
|
|
162
|
+
"solid"
|
|
163
|
+
];
|
|
164
|
+
function supportsPrismaWebDeploy(frontend) {
|
|
165
|
+
return frontend.some((value) => PRISMA_COMPUTE_WEB_FRONTENDS.some((frontend) => frontend === value));
|
|
166
|
+
}
|
|
167
|
+
function validateAddonCompatibility(addon, frontend, auth, backend, runtime) {
|
|
168
|
+
if (OBSERVABILITY_ADDONS.some((value) => value === addon) && !supportsEvlogAddon(frontend, backend, runtime)) return {
|
|
169
|
+
isCompatible: false,
|
|
170
|
+
reason: evlogCompatibilityMessage
|
|
171
|
+
};
|
|
172
|
+
if (STATIC_DESKTOP_ADDONS.some((value) => value === addon) && auth === "clerk" && frontend.includes("react-router")) return {
|
|
173
|
+
isCompatible: false,
|
|
174
|
+
reason: `${addon} addon forces React Router into a static export, but Clerk on React Router requires SSR middleware. Remove the addon or use a different auth/frontend.`
|
|
175
|
+
};
|
|
176
|
+
if (backend === "self" && STATIC_DESKTOP_ADDONS.some((value) => value === addon)) return {
|
|
177
|
+
isCompatible: false,
|
|
178
|
+
reason: `${addon} addon requires a separate backend or no backend because backend 'self' emits server routes that cannot be bundled as static desktop assets.`
|
|
179
|
+
};
|
|
180
|
+
if (addon === "tauri" && isTauriBlockedByConvexBetterAuth(frontend, backend, auth)) return {
|
|
181
|
+
isCompatible: false,
|
|
182
|
+
reason: "tauri addon is not compatible with Convex Better Auth on Next.js or TanStack Start because those templates use server auth bootstrap and cannot be exported as static desktop assets."
|
|
183
|
+
};
|
|
184
|
+
if (!Object.hasOwn(ADDON_COMPATIBILITY, addon)) return {
|
|
185
|
+
isCompatible: false,
|
|
186
|
+
reason: `Unknown addon: ${addon}`
|
|
187
|
+
};
|
|
188
|
+
const compatibleFrontends = ADDON_COMPATIBILITY[addon];
|
|
189
|
+
if (compatibleFrontends.length > 0) {
|
|
190
|
+
if (!frontend.some((f) => compatibleFrontends.some((value) => value === f))) return {
|
|
191
|
+
isCompatible: false,
|
|
192
|
+
reason: `${addon} addon requires one of these frontends: ${compatibleFrontends.join(", ")}`
|
|
193
|
+
};
|
|
194
|
+
}
|
|
195
|
+
return { isCompatible: true };
|
|
196
|
+
}
|
|
197
|
+
function supportsClerkFrontend(frontends) {
|
|
198
|
+
return frontends.every((frontend) => frontend === "none" || CLERK_SUPPORTED_FRONTENDS.some((value) => value === frontend));
|
|
199
|
+
}
|
|
200
|
+
function supportsClerkBackend(backend, frontends = []) {
|
|
201
|
+
if (!backend) return true;
|
|
202
|
+
if (backend === "self") return frontends.length === 0 || frontends.some((frontend) => frontend === "next" || frontend === "tanstack-start");
|
|
203
|
+
return backend === "convex" || SERVER_BACKENDS.some((value) => value === backend);
|
|
204
|
+
}
|
|
205
|
+
function isTauriBlockedByConvexBetterAuth(frontends, backend, auth) {
|
|
206
|
+
return backend === "convex" && auth === "better-auth" && frontends.some((frontend) => TAURI_STATIC_EXPORT_FRONTENDS.some((value) => value === frontend));
|
|
207
|
+
}
|
|
208
|
+
function hasCloudflareNextPostgresConflict(config) {
|
|
209
|
+
return config.webDeploy === "cloudflare" && !!config.frontend?.includes("next") && config.database === "postgres" && config.orm === "prisma" && config.dbSetup !== "neon" && config.dbSetup !== "prisma-postgres";
|
|
210
|
+
}
|
|
211
|
+
function getDesktopDeployConflict(deploy, addons = [], frontends = [], backend, auth) {
|
|
212
|
+
if (deploy !== "docker" && deploy !== "prisma") return null;
|
|
213
|
+
const selectedDesktopAddons = addons.filter((addon) => STATIC_DESKTOP_ADDONS.some((value) => value === addon));
|
|
214
|
+
const affectedFrontend = frontends.find((frontend) => DESKTOP_STATIC_EXPORT_FRONTENDS.some((value) => value === frontend));
|
|
215
|
+
if (!selectedDesktopAddons.length || !affectedFrontend) return null;
|
|
216
|
+
if (deploy === "docker" && affectedFrontend === "next" && !selectedDesktopAddons.includes("tauri") && backend === "convex" && auth === "better-auth") return null;
|
|
217
|
+
return {
|
|
218
|
+
affectedFrontend,
|
|
219
|
+
selectedDesktopAddons
|
|
220
|
+
};
|
|
221
|
+
}
|
|
222
|
+
const ORM_DATABASES = {
|
|
223
|
+
none: ["none"],
|
|
224
|
+
drizzle: [
|
|
225
|
+
"sqlite",
|
|
226
|
+
"postgres",
|
|
227
|
+
"mysql"
|
|
228
|
+
],
|
|
229
|
+
prisma: [
|
|
230
|
+
"sqlite",
|
|
231
|
+
"postgres",
|
|
232
|
+
"mysql",
|
|
233
|
+
"mongodb"
|
|
234
|
+
],
|
|
235
|
+
mongoose: ["mongodb"]
|
|
236
|
+
};
|
|
237
|
+
function supportsOrmDatabase(orm, database) {
|
|
238
|
+
return ORM_DATABASES[orm].some((value) => value === database);
|
|
239
|
+
}
|
|
240
|
+
const DATABASE_SETUP_DATABASES = {
|
|
241
|
+
turso: ["sqlite"],
|
|
242
|
+
d1: ["sqlite"],
|
|
243
|
+
neon: ["postgres"],
|
|
244
|
+
supabase: ["postgres"],
|
|
245
|
+
"prisma-postgres": ["postgres"],
|
|
246
|
+
planetscale: ["postgres", "mysql"],
|
|
247
|
+
"mongodb-atlas": ["mongodb"],
|
|
248
|
+
docker: [
|
|
249
|
+
"postgres",
|
|
250
|
+
"mysql",
|
|
251
|
+
"mongodb"
|
|
252
|
+
]
|
|
253
|
+
};
|
|
254
|
+
function supportsDatabaseSetup(dbSetup, database) {
|
|
255
|
+
return dbSetup === "none" || !!database && getDatabaseSetupDatabases(dbSetup).some((value) => value === database);
|
|
256
|
+
}
|
|
257
|
+
function supportsRuntimeBackend(runtime, backend) {
|
|
258
|
+
if (!runtime || !backend) return true;
|
|
259
|
+
if (getBackendDisabledOptions(backend).some((key) => key === "runtime")) return runtime === "none";
|
|
260
|
+
return runtime !== "none" && (runtime !== "workers" || backend === "hono");
|
|
261
|
+
}
|
|
262
|
+
function supportsRuntimeDatabase(runtime, database) {
|
|
263
|
+
return runtime !== "workers" || database !== "mongodb";
|
|
264
|
+
}
|
|
265
|
+
function supportsDatabaseSetupRuntime(dbSetup, runtime, backend) {
|
|
266
|
+
if (dbSetup === "docker") return runtime !== "workers";
|
|
267
|
+
if (dbSetup === "d1") return runtime === "workers" || backend === "self";
|
|
268
|
+
return true;
|
|
269
|
+
}
|
|
270
|
+
function supportsServerDeployRuntime(deploy, runtime) {
|
|
271
|
+
if (!deploy) return true;
|
|
272
|
+
if (deploy === "none") return runtime !== "workers";
|
|
273
|
+
if (deploy === "cloudflare") return runtime === "workers";
|
|
274
|
+
return runtime === "bun" || runtime === "node";
|
|
275
|
+
}
|
|
276
|
+
function supportsPaymentsAuth(payments, auth) {
|
|
277
|
+
return payments !== "polar" || auth === "better-auth";
|
|
278
|
+
}
|
|
279
|
+
const BACKEND_DISABLED_OPTIONS = {
|
|
280
|
+
convex: [
|
|
281
|
+
"runtime",
|
|
282
|
+
"database",
|
|
283
|
+
"orm",
|
|
284
|
+
"api",
|
|
285
|
+
"dbSetup",
|
|
286
|
+
"serverDeploy"
|
|
287
|
+
],
|
|
288
|
+
none: [
|
|
289
|
+
"runtime",
|
|
290
|
+
"database",
|
|
291
|
+
"orm",
|
|
292
|
+
"api",
|
|
293
|
+
"auth",
|
|
294
|
+
"payments",
|
|
295
|
+
"dbSetup",
|
|
296
|
+
"serverDeploy"
|
|
297
|
+
],
|
|
298
|
+
self: ["runtime", "serverDeploy"]
|
|
299
|
+
};
|
|
300
|
+
function getBackendDisabledOptions(backend) {
|
|
301
|
+
return Object.entries(BACKEND_DISABLED_OPTIONS).find(([candidate]) => candidate === backend)?.[1] ?? [];
|
|
302
|
+
}
|
|
303
|
+
function getDatabaseSetupDatabases(dbSetup) {
|
|
304
|
+
return dbSetup === "none" ? [] : DATABASE_SETUP_DATABASES[dbSetup];
|
|
305
|
+
}
|
|
306
|
+
//#endregion
|
|
307
|
+
//#region src/schemas.ts
|
|
308
|
+
const DatabaseSchema = z.enum([
|
|
309
|
+
"none",
|
|
310
|
+
"sqlite",
|
|
311
|
+
"postgres",
|
|
312
|
+
"mysql",
|
|
313
|
+
"mongodb"
|
|
314
|
+
]).describe("Database type");
|
|
315
|
+
const ORMSchema = z.enum([
|
|
316
|
+
"drizzle",
|
|
317
|
+
"prisma",
|
|
318
|
+
"mongoose",
|
|
319
|
+
"none"
|
|
320
|
+
]).describe("ORM type");
|
|
321
|
+
const BackendSchema = z.enum([
|
|
322
|
+
"hono",
|
|
323
|
+
"express",
|
|
324
|
+
"fastify",
|
|
325
|
+
"elysia",
|
|
326
|
+
"convex",
|
|
327
|
+
"self",
|
|
328
|
+
"none"
|
|
329
|
+
]).describe("Backend framework");
|
|
330
|
+
const RuntimeSchema = z.enum([
|
|
331
|
+
"bun",
|
|
332
|
+
"node",
|
|
333
|
+
"workers",
|
|
334
|
+
"none"
|
|
335
|
+
]).describe("Runtime environment");
|
|
336
|
+
const FrontendSchema = z.enum([
|
|
337
|
+
"tanstack-router",
|
|
338
|
+
"react-router",
|
|
339
|
+
"tanstack-start",
|
|
340
|
+
"next",
|
|
341
|
+
"nuxt",
|
|
342
|
+
"native-bare",
|
|
343
|
+
"native-uniwind",
|
|
344
|
+
"native-unistyles",
|
|
345
|
+
"svelte",
|
|
346
|
+
"solid",
|
|
347
|
+
"astro",
|
|
348
|
+
"none"
|
|
349
|
+
]).describe("Frontend framework");
|
|
350
|
+
const AddonsSchema = z.enum([
|
|
351
|
+
"pwa",
|
|
352
|
+
"tauri",
|
|
353
|
+
"electrobun",
|
|
354
|
+
"starlight",
|
|
355
|
+
"biome",
|
|
356
|
+
"lefthook",
|
|
357
|
+
"husky",
|
|
358
|
+
"mcp",
|
|
359
|
+
"turborepo",
|
|
360
|
+
"nx",
|
|
361
|
+
"vite-plus",
|
|
362
|
+
"fumadocs",
|
|
363
|
+
"ultracite",
|
|
364
|
+
"oxlint",
|
|
365
|
+
"opentui",
|
|
366
|
+
"wxt",
|
|
367
|
+
"skills",
|
|
368
|
+
"evlog",
|
|
369
|
+
"axiom",
|
|
370
|
+
"none"
|
|
371
|
+
]).describe("Additional addons");
|
|
372
|
+
const AddonsListSchema = z.array(AddonsSchema).superRefine((addons, ctx) => {
|
|
373
|
+
if (addons.filter((addon) => TASK_RUNNER_ADDONS.includes(addon)).length > 1) ctx.addIssue({
|
|
374
|
+
code: z.ZodIssueCode.custom,
|
|
375
|
+
message: "`nx`, `turborepo`, and `vite-plus` cannot be used together"
|
|
376
|
+
});
|
|
377
|
+
if (addons.filter((addon) => OBSERVABILITY_ADDONS.includes(addon)).length > 1) ctx.addIssue({
|
|
378
|
+
code: z.ZodIssueCode.custom,
|
|
379
|
+
message: "`evlog` and `axiom` cannot be used together because Axiom includes evlog"
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
const ExamplesSchema = z.enum([
|
|
383
|
+
"todo",
|
|
384
|
+
"ai",
|
|
385
|
+
"none"
|
|
386
|
+
]).describe("Example templates to include");
|
|
387
|
+
const PackageManagerSchema = z.enum([
|
|
388
|
+
"npm",
|
|
389
|
+
"pnpm",
|
|
390
|
+
"bun"
|
|
391
|
+
]).describe("Package manager");
|
|
392
|
+
const DatabaseSetupSchema = z.enum([
|
|
393
|
+
"turso",
|
|
394
|
+
"neon",
|
|
395
|
+
"prisma-postgres",
|
|
396
|
+
"planetscale",
|
|
397
|
+
"mongodb-atlas",
|
|
398
|
+
"supabase",
|
|
399
|
+
"d1",
|
|
400
|
+
"docker",
|
|
401
|
+
"none"
|
|
402
|
+
]).describe("Database hosting setup");
|
|
403
|
+
const APISchema = z.enum([
|
|
404
|
+
"trpc",
|
|
405
|
+
"orpc",
|
|
406
|
+
"none"
|
|
407
|
+
]).describe("API type");
|
|
408
|
+
const AuthSchema = z.enum([
|
|
409
|
+
"better-auth",
|
|
410
|
+
"clerk",
|
|
411
|
+
"none"
|
|
412
|
+
]).describe("Authentication provider");
|
|
413
|
+
const PaymentsSchema = z.enum(["polar", "none"]).describe("Payments provider");
|
|
414
|
+
const WebDeploySchema = z.enum([
|
|
415
|
+
"cloudflare",
|
|
416
|
+
"prisma",
|
|
417
|
+
"docker",
|
|
418
|
+
"vercel",
|
|
419
|
+
"none"
|
|
420
|
+
]).describe("Web deployment");
|
|
421
|
+
const ServerDeploySchema = z.enum([
|
|
422
|
+
"cloudflare",
|
|
423
|
+
"prisma",
|
|
424
|
+
"docker",
|
|
425
|
+
"vercel",
|
|
426
|
+
"none"
|
|
427
|
+
]).describe("Server deployment");
|
|
428
|
+
const DirectoryConflictSchema = z.enum([
|
|
429
|
+
"merge",
|
|
430
|
+
"overwrite",
|
|
431
|
+
"increment",
|
|
432
|
+
"error"
|
|
433
|
+
]).describe("How to handle existing directory conflicts");
|
|
434
|
+
const TemplateSchema = z.enum([
|
|
435
|
+
"mern",
|
|
436
|
+
"pern",
|
|
437
|
+
"t3",
|
|
438
|
+
"uniwind",
|
|
439
|
+
"none"
|
|
440
|
+
]).describe("Predefined project template");
|
|
441
|
+
const WxtTemplateSchema = z.enum([
|
|
442
|
+
"vanilla",
|
|
443
|
+
"vue",
|
|
444
|
+
"react",
|
|
445
|
+
"solid",
|
|
446
|
+
"svelte"
|
|
447
|
+
]).describe("WXT template");
|
|
448
|
+
const TuiTemplateSchema = z.enum([
|
|
449
|
+
"core",
|
|
450
|
+
"react",
|
|
451
|
+
"solid"
|
|
452
|
+
]).describe("OpenTUI template");
|
|
453
|
+
const FumadocsTemplateSchema = z.enum([
|
|
454
|
+
"next-mdx",
|
|
455
|
+
"next-mdx-static",
|
|
456
|
+
"waku",
|
|
457
|
+
"react-router",
|
|
458
|
+
"react-router-spa",
|
|
459
|
+
"tanstack-start",
|
|
460
|
+
"tanstack-start-spa",
|
|
461
|
+
"astro"
|
|
462
|
+
]).describe("Fumadocs template");
|
|
463
|
+
const FumadocsSearchSchema = z.enum(["orama", "orama-cloud"]).describe("Fumadocs search solution");
|
|
464
|
+
const FumadocsOgImageSchema = z.enum(["next-og", "takumi"]).describe("Fumadocs OG image generator");
|
|
465
|
+
const FumadocsAiChatSchema = z.enum([
|
|
466
|
+
"openrouter",
|
|
467
|
+
"llmgateway",
|
|
468
|
+
"inkeep"
|
|
469
|
+
]).describe("Fumadocs AI chat provider");
|
|
470
|
+
const InstallScopeSchema = z.enum(["project", "global"]).describe("Installation scope");
|
|
471
|
+
const McpServerSchema = z.enum([
|
|
472
|
+
"better-t-stack",
|
|
473
|
+
"context7",
|
|
474
|
+
"nx",
|
|
475
|
+
"cloudflare-docs",
|
|
476
|
+
"convex",
|
|
477
|
+
"shadcn",
|
|
478
|
+
"next-devtools",
|
|
479
|
+
"nuxt-docs",
|
|
480
|
+
"nuxt-ui-docs",
|
|
481
|
+
"svelte-docs",
|
|
482
|
+
"astro-docs",
|
|
483
|
+
"planetscale",
|
|
484
|
+
"neon",
|
|
485
|
+
"supabase",
|
|
486
|
+
"better-auth",
|
|
487
|
+
"clerk",
|
|
488
|
+
"expo",
|
|
489
|
+
"polar"
|
|
490
|
+
]).describe("MCP server to install");
|
|
491
|
+
const McpAgentSchema = z.enum([
|
|
492
|
+
"antigravity",
|
|
493
|
+
"cline",
|
|
494
|
+
"cline-cli",
|
|
495
|
+
"cursor",
|
|
496
|
+
"claude-code",
|
|
497
|
+
"codex",
|
|
498
|
+
"opencode",
|
|
499
|
+
"gemini-cli",
|
|
500
|
+
"github-copilot-cli",
|
|
501
|
+
"grok-build",
|
|
502
|
+
"mcporter",
|
|
503
|
+
"vscode",
|
|
504
|
+
"windsurf",
|
|
505
|
+
"zed",
|
|
506
|
+
"claude-desktop",
|
|
507
|
+
"goose",
|
|
508
|
+
"fx",
|
|
509
|
+
"kilo-code",
|
|
510
|
+
"kimi-code",
|
|
511
|
+
"kiro-cli"
|
|
512
|
+
]).describe("Agent target for MCP installation");
|
|
513
|
+
const SkillsSourceSchema = z.enum([
|
|
514
|
+
"vercel-labs/agent-skills",
|
|
515
|
+
"vercel/ai",
|
|
516
|
+
"vercel/turborepo",
|
|
517
|
+
"yusukebe/hono-skill",
|
|
518
|
+
"vercel/next.js",
|
|
519
|
+
"nuxt/ui",
|
|
520
|
+
"heroui-inc/heroui",
|
|
521
|
+
"shadcn/ui",
|
|
522
|
+
"better-auth/skills",
|
|
523
|
+
"clerk/skills",
|
|
524
|
+
"neondatabase/agent-skills",
|
|
525
|
+
"supabase/agent-skills",
|
|
526
|
+
"planetscale/database-skills",
|
|
527
|
+
"expo/skills",
|
|
528
|
+
"prisma/skills",
|
|
529
|
+
"elysiajs/skills",
|
|
530
|
+
"waynesutton/convexskills",
|
|
531
|
+
"msmps/opentui-skill",
|
|
532
|
+
"haydenbleasel/ultracite",
|
|
533
|
+
"https://www.evlog.dev"
|
|
534
|
+
]).describe("Skill source repository");
|
|
535
|
+
const SkillsAgentSchema = z.enum([
|
|
536
|
+
"universal",
|
|
537
|
+
"adal",
|
|
538
|
+
"aider-desk",
|
|
539
|
+
"amp",
|
|
540
|
+
"antigravity",
|
|
541
|
+
"antigravity-cli",
|
|
542
|
+
"astrbot",
|
|
543
|
+
"augment",
|
|
544
|
+
"autohand-code",
|
|
545
|
+
"bob",
|
|
546
|
+
"claude-code",
|
|
547
|
+
"cline",
|
|
548
|
+
"codearts-agent",
|
|
549
|
+
"codebuddy",
|
|
550
|
+
"codemaker",
|
|
551
|
+
"codestudio",
|
|
552
|
+
"codex",
|
|
553
|
+
"command-code",
|
|
554
|
+
"continue",
|
|
555
|
+
"cortex",
|
|
556
|
+
"crush",
|
|
557
|
+
"cursor",
|
|
558
|
+
"deepagents",
|
|
559
|
+
"devin",
|
|
560
|
+
"dexto",
|
|
561
|
+
"droid",
|
|
562
|
+
"eve",
|
|
563
|
+
"firebender",
|
|
564
|
+
"forgecode",
|
|
565
|
+
"gemini-cli",
|
|
566
|
+
"github-copilot",
|
|
567
|
+
"goose",
|
|
568
|
+
"grok",
|
|
569
|
+
"hermes-agent",
|
|
570
|
+
"iflow-cli",
|
|
571
|
+
"inference-sh",
|
|
572
|
+
"jazz",
|
|
573
|
+
"junie",
|
|
574
|
+
"kilo",
|
|
575
|
+
"kimchi",
|
|
576
|
+
"kimi-code-cli",
|
|
577
|
+
"kiro-cli",
|
|
578
|
+
"kode",
|
|
579
|
+
"lingma",
|
|
580
|
+
"loaf",
|
|
581
|
+
"mcpjam",
|
|
582
|
+
"minimax-code",
|
|
583
|
+
"mistral-vibe",
|
|
584
|
+
"moxby",
|
|
585
|
+
"mux",
|
|
586
|
+
"neovate",
|
|
587
|
+
"ona",
|
|
588
|
+
"clawdbot",
|
|
589
|
+
"openclaw",
|
|
590
|
+
"opencode",
|
|
591
|
+
"openhands",
|
|
592
|
+
"pi",
|
|
593
|
+
"pochi",
|
|
594
|
+
"posit-assistant",
|
|
595
|
+
"promptscript",
|
|
596
|
+
"qoder",
|
|
597
|
+
"qoder-cn",
|
|
598
|
+
"qwen-code",
|
|
599
|
+
"reasonix",
|
|
600
|
+
"replit",
|
|
601
|
+
"roo",
|
|
602
|
+
"rovodev",
|
|
603
|
+
"tabnine-cli",
|
|
604
|
+
"terramind",
|
|
605
|
+
"tinycloud",
|
|
606
|
+
"trae",
|
|
607
|
+
"trae-cn",
|
|
608
|
+
"warp",
|
|
609
|
+
"windsurf",
|
|
610
|
+
"zcode",
|
|
611
|
+
"zed",
|
|
612
|
+
"zencoder",
|
|
613
|
+
"zenflow"
|
|
614
|
+
]).describe("Agent target for skill installation; prefer universal for agents that consume .agents/skills");
|
|
615
|
+
const SkillSelectionSchema = z.strictObject({
|
|
616
|
+
source: SkillsSourceSchema.describe("Skill source to install from"),
|
|
617
|
+
skills: z.array(z.string()).describe("Curated skill names to install from this source")
|
|
618
|
+
});
|
|
619
|
+
const UltraciteLinterSchema = z.enum(["biome", "oxlint"]).describe("Ultracite linter");
|
|
620
|
+
const UltraciteEditorSchema = z.enum([
|
|
621
|
+
"vscode",
|
|
622
|
+
"cursor",
|
|
623
|
+
"windsurf",
|
|
624
|
+
"codebuddy",
|
|
625
|
+
"antigravity",
|
|
626
|
+
"bob",
|
|
627
|
+
"kiro",
|
|
628
|
+
"trae",
|
|
629
|
+
"void",
|
|
630
|
+
"zed",
|
|
631
|
+
"universal"
|
|
632
|
+
]).describe("Ultracite editor integration");
|
|
633
|
+
const UltraciteAgentSchema = z.enum([
|
|
634
|
+
"universal",
|
|
635
|
+
"claude",
|
|
636
|
+
"codex",
|
|
637
|
+
"jules",
|
|
638
|
+
"replit",
|
|
639
|
+
"devin",
|
|
640
|
+
"lovable",
|
|
641
|
+
"zencoder",
|
|
642
|
+
"ona",
|
|
643
|
+
"openclaw",
|
|
644
|
+
"continue",
|
|
645
|
+
"snowflake-cortex",
|
|
646
|
+
"deepagents",
|
|
647
|
+
"qoder",
|
|
648
|
+
"kimi-cli",
|
|
649
|
+
"mcpjam",
|
|
650
|
+
"mux",
|
|
651
|
+
"pi",
|
|
652
|
+
"adal",
|
|
653
|
+
"copilot",
|
|
654
|
+
"cline",
|
|
655
|
+
"amp",
|
|
656
|
+
"aider",
|
|
657
|
+
"firebase-studio",
|
|
658
|
+
"open-hands",
|
|
659
|
+
"gemini",
|
|
660
|
+
"junie",
|
|
661
|
+
"augmentcode",
|
|
662
|
+
"bob",
|
|
663
|
+
"kilo-code",
|
|
664
|
+
"goose",
|
|
665
|
+
"roo-code",
|
|
666
|
+
"warp",
|
|
667
|
+
"droid",
|
|
668
|
+
"opencode",
|
|
669
|
+
"crush",
|
|
670
|
+
"qwen",
|
|
671
|
+
"amazon-q-cli",
|
|
672
|
+
"firebender",
|
|
673
|
+
"cursor-cli",
|
|
674
|
+
"mistral-vibe",
|
|
675
|
+
"vercel"
|
|
676
|
+
]).describe("Ultracite agent integration");
|
|
677
|
+
const UltraciteHookSchema = z.enum([
|
|
678
|
+
"cursor",
|
|
679
|
+
"windsurf",
|
|
680
|
+
"codebuddy",
|
|
681
|
+
"claude",
|
|
682
|
+
"copilot"
|
|
683
|
+
]).describe("Ultracite hook integration");
|
|
684
|
+
const DbSetupModeSchema = z.enum([
|
|
685
|
+
"manual",
|
|
686
|
+
"auto",
|
|
687
|
+
"alchemy"
|
|
688
|
+
]).describe("Database setup mode");
|
|
689
|
+
const NeonSetupMethodSchema = z.enum([
|
|
690
|
+
"neon-new",
|
|
691
|
+
"neon",
|
|
692
|
+
"neondb",
|
|
693
|
+
"neonctl"
|
|
694
|
+
]).describe("Neon database provisioning method");
|
|
695
|
+
const AddonOptionsSchema = z.strictObject({
|
|
696
|
+
wxt: z.strictObject({
|
|
697
|
+
template: WxtTemplateSchema,
|
|
698
|
+
devPort: z.number().int().min(1).max(65535).optional().describe("WXT dev server port")
|
|
699
|
+
}).optional().describe("Options for the WXT addon"),
|
|
700
|
+
fumadocs: z.strictObject({
|
|
701
|
+
template: FumadocsTemplateSchema,
|
|
702
|
+
devPort: z.number().int().min(1).max(65535).optional().describe("Fumadocs dev server port"),
|
|
703
|
+
search: FumadocsSearchSchema.optional().describe("Fumadocs search solution"),
|
|
704
|
+
ogImage: FumadocsOgImageSchema.optional().describe("Fumadocs OG image generator"),
|
|
705
|
+
aiChat: FumadocsAiChatSchema.optional().describe("Fumadocs AI chat provider")
|
|
706
|
+
}).optional().describe("Options for the Fumadocs addon"),
|
|
707
|
+
opentui: z.strictObject({ template: TuiTemplateSchema }).optional().describe("Options for the OpenTUI addon"),
|
|
708
|
+
mcp: z.strictObject({
|
|
709
|
+
scope: InstallScopeSchema.optional(),
|
|
710
|
+
servers: z.array(McpServerSchema).optional().describe("MCP servers to install"),
|
|
711
|
+
agents: z.array(McpAgentSchema).optional().describe("Agents to wire MCP servers into")
|
|
712
|
+
}).optional().describe("Options for the MCP addon"),
|
|
713
|
+
skills: z.strictObject({
|
|
714
|
+
scope: InstallScopeSchema.optional(),
|
|
715
|
+
agents: z.array(SkillsAgentSchema).optional().describe("Agents to install skills into"),
|
|
716
|
+
selections: z.array(SkillSelectionSchema).optional().describe("Skills grouped by source")
|
|
717
|
+
}).optional().describe("Options for the Skills addon"),
|
|
718
|
+
ultracite: z.strictObject({
|
|
719
|
+
linter: UltraciteLinterSchema.optional(),
|
|
720
|
+
editors: z.array(UltraciteEditorSchema).optional(),
|
|
721
|
+
agents: z.array(UltraciteAgentSchema).optional(),
|
|
722
|
+
hooks: z.array(UltraciteHookSchema).optional()
|
|
723
|
+
}).optional().describe("Options for the Ultracite addon")
|
|
724
|
+
}).describe("Addon-specific configuration");
|
|
725
|
+
const DbSetupOptionsSchema = z.strictObject({
|
|
726
|
+
mode: DbSetupModeSchema.optional().describe("How database setup should be executed"),
|
|
727
|
+
neon: z.strictObject({
|
|
728
|
+
method: NeonSetupMethodSchema.optional(),
|
|
729
|
+
projectName: z.string().min(1).optional().describe("Neon project name"),
|
|
730
|
+
regionId: z.string().min(1).optional().describe("Neon region identifier")
|
|
731
|
+
}).optional().describe("Options for Neon setup"),
|
|
732
|
+
prismaPostgres: z.strictObject({ regionId: z.string().min(1).optional().describe("Prisma Postgres region identifier") }).optional().describe("Options for Prisma Postgres setup"),
|
|
733
|
+
turso: z.strictObject({
|
|
734
|
+
databaseName: z.string().min(1).optional().describe("Turso database name"),
|
|
735
|
+
groupName: z.string().min(1).optional().describe("Turso database group name"),
|
|
736
|
+
installCli: z.boolean().optional().describe("Whether the CLI may install the Turso CLI automatically")
|
|
737
|
+
}).optional().describe("Options for Turso setup")
|
|
738
|
+
}).describe("Database setup configuration");
|
|
739
|
+
const ProjectNameSchema = z.string().min(1, "Project name cannot be empty").max(255, "Project name must be less than 255 characters").refine((name) => name === "." || !name.startsWith("."), "Project name cannot start with a dot (except for '.')").refine((name) => name === "." || !name.startsWith("-"), "Project name cannot start with a dash").refine((name) => {
|
|
740
|
+
return ![
|
|
741
|
+
"<",
|
|
742
|
+
">",
|
|
743
|
+
":",
|
|
744
|
+
"\"",
|
|
745
|
+
"|",
|
|
746
|
+
"?",
|
|
747
|
+
"*"
|
|
748
|
+
].some((char) => name.includes(char));
|
|
749
|
+
}, "Project name contains invalid characters").refine((name) => name.toLowerCase() !== "node_modules", "Project name is reserved").describe("Project name or path");
|
|
750
|
+
const CreateInputSchema = z.object({
|
|
751
|
+
projectName: z.string().optional(),
|
|
752
|
+
template: TemplateSchema.optional(),
|
|
753
|
+
yes: z.boolean().optional(),
|
|
754
|
+
yolo: z.boolean().optional(),
|
|
755
|
+
dryRun: z.boolean().optional(),
|
|
756
|
+
verbose: z.boolean().optional(),
|
|
757
|
+
addonOptions: AddonOptionsSchema.optional(),
|
|
758
|
+
dbSetupOptions: DbSetupOptionsSchema.optional(),
|
|
759
|
+
database: DatabaseSchema.optional(),
|
|
760
|
+
orm: ORMSchema.optional(),
|
|
761
|
+
auth: AuthSchema.optional(),
|
|
762
|
+
payments: PaymentsSchema.optional(),
|
|
763
|
+
frontend: z.array(FrontendSchema).optional(),
|
|
764
|
+
addons: AddonsListSchema.optional(),
|
|
765
|
+
examples: z.array(ExamplesSchema).optional(),
|
|
766
|
+
git: z.boolean().optional(),
|
|
767
|
+
packageManager: PackageManagerSchema.optional(),
|
|
768
|
+
install: z.boolean().optional(),
|
|
769
|
+
dbSetup: DatabaseSetupSchema.optional(),
|
|
770
|
+
backend: BackendSchema.optional(),
|
|
771
|
+
runtime: RuntimeSchema.optional(),
|
|
772
|
+
api: APISchema.optional(),
|
|
773
|
+
webDeploy: WebDeploySchema.optional(),
|
|
774
|
+
serverDeploy: ServerDeploySchema.optional(),
|
|
775
|
+
directoryConflict: DirectoryConflictSchema.optional(),
|
|
776
|
+
renderTitle: z.boolean().optional(),
|
|
777
|
+
disableAnalytics: z.boolean().optional(),
|
|
778
|
+
manualDb: z.boolean().optional()
|
|
779
|
+
}).strict().refine((input) => !(input.manualDb !== void 0 && input.dbSetupOptions?.mode !== void 0), {
|
|
780
|
+
message: "`manualDb` and `dbSetupOptions.mode` are mutually exclusive",
|
|
781
|
+
path: ["dbSetupOptions", "mode"]
|
|
782
|
+
});
|
|
783
|
+
const WorkspacePackageNameSchema = z.string().min(1, "Package name cannot be empty").max(214, "Package name must not exceed 214 characters").regex(/^[a-z0-9](?:[a-z0-9._-]*[a-z0-9])?$/, "Package name must be an unscoped lowercase npm name").refine((name) => name !== "node_modules", "Package name is reserved").describe("Name of a workspace package to scaffold");
|
|
784
|
+
const AddInputSchema = z.object({
|
|
785
|
+
addons: AddonsListSchema.optional(),
|
|
786
|
+
package: WorkspacePackageNameSchema.optional(),
|
|
787
|
+
addonOptions: AddonOptionsSchema.optional(),
|
|
788
|
+
webDeploy: WebDeploySchema.optional(),
|
|
789
|
+
serverDeploy: ServerDeploySchema.optional(),
|
|
790
|
+
projectDir: z.string().optional(),
|
|
791
|
+
install: z.boolean().optional(),
|
|
792
|
+
packageManager: PackageManagerSchema.optional(),
|
|
793
|
+
dryRun: z.boolean().optional(),
|
|
794
|
+
disableAnalytics: z.boolean().optional()
|
|
795
|
+
}).strict();
|
|
796
|
+
const CLIInputSchema = CreateInputSchema.safeExtend({ projectDirectory: z.string().optional() }).strict();
|
|
797
|
+
const ProjectConfigSchema = z.object({
|
|
798
|
+
projectName: z.string(),
|
|
799
|
+
projectDir: z.string(),
|
|
800
|
+
relativePath: z.string(),
|
|
801
|
+
addonOptions: AddonOptionsSchema.optional(),
|
|
802
|
+
dbSetupOptions: DbSetupOptionsSchema.optional(),
|
|
803
|
+
database: DatabaseSchema,
|
|
804
|
+
orm: ORMSchema,
|
|
805
|
+
backend: BackendSchema,
|
|
806
|
+
runtime: RuntimeSchema,
|
|
807
|
+
frontend: z.array(FrontendSchema),
|
|
808
|
+
addons: AddonsListSchema,
|
|
809
|
+
examples: z.array(ExamplesSchema),
|
|
810
|
+
auth: AuthSchema,
|
|
811
|
+
payments: PaymentsSchema,
|
|
812
|
+
git: z.boolean(),
|
|
813
|
+
packageManager: PackageManagerSchema,
|
|
814
|
+
install: z.boolean(),
|
|
815
|
+
dbSetup: DatabaseSetupSchema,
|
|
816
|
+
api: APISchema,
|
|
817
|
+
webDeploy: WebDeploySchema,
|
|
818
|
+
serverDeploy: ServerDeploySchema
|
|
819
|
+
});
|
|
820
|
+
const BetterTStackConfigSchema = z.object({
|
|
821
|
+
version: z.string().describe("CLI version used to create this project"),
|
|
822
|
+
createdAt: z.string().describe("Timestamp when the project was created"),
|
|
823
|
+
reproducibleCommand: z.string().optional().describe("Command to reproduce this project setup"),
|
|
824
|
+
addonOptions: AddonOptionsSchema.optional(),
|
|
825
|
+
dbSetupOptions: DbSetupOptionsSchema.optional(),
|
|
826
|
+
database: DatabaseSchema,
|
|
827
|
+
orm: ORMSchema,
|
|
828
|
+
backend: BackendSchema,
|
|
829
|
+
runtime: RuntimeSchema,
|
|
830
|
+
frontend: z.array(FrontendSchema),
|
|
831
|
+
addons: AddonsListSchema,
|
|
832
|
+
examples: z.array(ExamplesSchema),
|
|
833
|
+
auth: AuthSchema,
|
|
834
|
+
payments: PaymentsSchema,
|
|
835
|
+
packageManager: PackageManagerSchema,
|
|
836
|
+
dbSetup: DatabaseSetupSchema,
|
|
837
|
+
api: APISchema,
|
|
838
|
+
webDeploy: WebDeploySchema,
|
|
839
|
+
serverDeploy: ServerDeploySchema
|
|
840
|
+
});
|
|
841
|
+
const BetterTStackConfigFileSchema = BetterTStackConfigSchema.safeExtend({ $schema: z.string().optional().describe("JSON Schema reference for validation") }).strict().meta({
|
|
842
|
+
id: "https://r2.better-t-stack.dev/schema.json",
|
|
843
|
+
title: "Better-T-Stack Configuration",
|
|
844
|
+
description: "Configuration file for Better-T-Stack projects"
|
|
845
|
+
});
|
|
846
|
+
const InitResultSchema = z.object({
|
|
847
|
+
success: z.boolean(),
|
|
848
|
+
projectConfig: ProjectConfigSchema,
|
|
849
|
+
reproducibleCommand: z.string(),
|
|
850
|
+
timeScaffolded: z.string(),
|
|
851
|
+
elapsedTimeMs: z.number(),
|
|
852
|
+
projectDirectory: z.string(),
|
|
853
|
+
relativePath: z.string(),
|
|
854
|
+
error: z.string().optional(),
|
|
855
|
+
warnings: z.array(z.string()).optional()
|
|
856
|
+
});
|
|
857
|
+
const DATABASE_VALUES = DatabaseSchema.options;
|
|
858
|
+
const ORM_VALUES = ORMSchema.options;
|
|
859
|
+
const BACKEND_VALUES = BackendSchema.options;
|
|
860
|
+
const RUNTIME_VALUES = RuntimeSchema.options;
|
|
861
|
+
const FRONTEND_VALUES = FrontendSchema.options;
|
|
862
|
+
const ADDONS_VALUES = AddonsSchema.options;
|
|
863
|
+
const EXAMPLES_VALUES = ExamplesSchema.options;
|
|
864
|
+
const PACKAGE_MANAGER_VALUES = PackageManagerSchema.options;
|
|
865
|
+
const DATABASE_SETUP_VALUES = DatabaseSetupSchema.options;
|
|
866
|
+
const API_VALUES = APISchema.options;
|
|
867
|
+
const AUTH_VALUES = AuthSchema.options;
|
|
868
|
+
const PAYMENTS_VALUES = PaymentsSchema.options;
|
|
869
|
+
const WEB_DEPLOY_VALUES = WebDeploySchema.options;
|
|
870
|
+
const SERVER_DEPLOY_VALUES = ServerDeploySchema.options;
|
|
871
|
+
const DIRECTORY_CONFLICT_VALUES = DirectoryConflictSchema.options;
|
|
872
|
+
const TEMPLATE_VALUES = TemplateSchema.options;
|
|
873
|
+
//#endregion
|
|
874
|
+
export { TuiTemplateSchema as $, FumadocsTemplateSchema as A, isExampleTodoAllowed as At, PackageManagerSchema as B, supportsPaymentsAuth as Bt, EXAMPLES_VALUES as C, TRPC_INCOMPATIBLE_FRONTENDS as Ct, FumadocsAiChatSchema as D, getDesktopDeployConflict as Dt, FrontendSchema as E, getDatabaseSetupDatabases as Et, NeonSetupMethodSchema as F, supportsConvexBetterAuth as Ft, RuntimeSchema as G, validateAddonCompatibility as Gt, ProjectConfigSchema as H, supportsRuntimeBackend as Ht, ORMSchema as I, supportsDatabaseSetup as It, SkillSelectionSchema as J, SERVER_DEPLOY_VALUES as K, desktopWebFrontends as Kt, ORM_VALUES as L, supportsDatabaseSetupRuntime as Lt, InstallScopeSchema as M, isTauriBlockedByConvexBetterAuth as Mt, McpAgentSchema as N, supportsClerkBackend as Nt, FumadocsOgImageSchema as O, hasCloudflareNextPostgresConflict as Ot, McpServerSchema as P, supportsClerkFrontend as Pt, TemplateSchema as Q, PACKAGE_MANAGER_VALUES as R, supportsEvlogAddon as Rt, DirectoryConflictSchema as S, TASK_RUNNER_ADDONS as St, FRONTEND_VALUES as T, getBackendDisabledOptions as Tt, ProjectNameSchema as U, supportsRuntimeDatabase as Ut, PaymentsSchema as V, supportsPrismaWebDeploy as Vt, RUNTIME_VALUES as W, supportsServerDeployRuntime as Wt, SkillsSourceSchema as X, SkillsAgentSchema as Y, TEMPLATE_VALUES as Z, DIRECTORY_CONFLICT_VALUES as _, FULLSTACK_FRONTENDS as _t, AddInputSchema as a, WebDeploySchema as at, DbSetupModeSchema as b, SERVER_BACKENDS as bt, AuthSchema as c, ADDON_COMPATIBILITY as ct, BetterTStackConfigFileSchema as d, CLERK_SUPPORTED_FRONTENDS as dt, UltraciteAgentSchema as et, BetterTStackConfigSchema as f, CONVEX_AI_INCOMPATIBLE_FRONTENDS as ft, DATABASE_VALUES as g, DESKTOP_STATIC_EXPORT_FRONTENDS as gt, DATABASE_SETUP_VALUES as h, CONVEX_INCOMPATIBLE_FRONTENDS as ht, AUTH_VALUES as i, WEB_DEPLOY_VALUES as it, InitResultSchema as j, isFrontendAllowedWithBackend as jt, FumadocsSearchSchema as k, isExampleAIAllowed as kt, BACKEND_VALUES as l, AI_INCOMPATIBLE_FRONTENDS as lt, CreateInputSchema as m, CONVEX_BETTER_AUTH_SUPPORTED_FRONTENDS as mt, APISchema as n, UltraciteHookSchema as nt, AddonOptionsSchema as o, WorkspacePackageNameSchema as ot, CLIInputSchema as p, CONVEX_BETTER_AUTH_INCOMPATIBLE_FRONTENDS as pt, ServerDeploySchema as q, webFrontends as qt, API_VALUES as r, UltraciteLinterSchema as rt, AddonsSchema as s, WxtTemplateSchema as st, ADDONS_VALUES as t, UltraciteEditorSchema as tt, BackendSchema as u, CLERK_INCOMPATIBLE_FRONTENDS as ut, DatabaseSchema as v, OBSERVABILITY_ADDONS as vt, ExamplesSchema as w, allowedApisForFrontends as wt, DbSetupOptionsSchema as x, STATIC_DESKTOP_ADDONS as xt, DatabaseSetupSchema as y, PRISMA_COMPUTE_WEB_FRONTENDS as yt, PAYMENTS_VALUES as z, supportsOrmDatabase as zt };
|
|
875
|
+
|
|
876
|
+
//# sourceMappingURL=schemas-B-p9IhC-.mjs.map
|