create-prisma 0.4.2-next.37.93.1 → 0.4.2-next.37.94.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/README.md +1 -1
- package/dist/cli.mjs +1 -1
- package/dist/{create-DGDCo1EV.mjs → create-DgTPw_xS.mjs} +12 -99
- package/dist/index.mjs +2 -2
- package/package.json +1 -1
- package/templates/create/astro/README.md.hbs +1 -1
- package/templates/create/elysia/README.md.hbs +1 -1
- package/templates/create/hono/README.md.hbs +1 -1
- package/templates/create/minimal/README.md.hbs +1 -1
- package/templates/create/nest/README.md.hbs +1 -1
- package/templates/create/next/README.md.hbs +1 -1
- package/templates/create/nuxt/README.md.hbs +1 -1
- package/templates/create/svelte/README.md.hbs +1 -1
- package/templates/create/tanstack-start/README.md.hbs +1 -1
package/README.md
CHANGED
|
@@ -8,7 +8,7 @@ Scaffold a new app with Prisma Next already wired up.
|
|
|
8
8
|
|
|
9
9
|
- creates a new app from a supported template
|
|
10
10
|
- adds Prisma Next dependencies for PostgreSQL or MongoDB
|
|
11
|
-
- runs `prisma-next init --no-install` to scaffold `prisma/contract.*`, `prisma-next.config.ts`, `prisma/db.ts`, `prisma-next.md`, `.env.example
|
|
11
|
+
- runs `prisma-next init --no-install` to scaffold `prisma/contract.*`, `prisma-next.config.ts`, `prisma/db.ts`, `prisma-next.md`, and `.env.example`
|
|
12
12
|
- writes a template-specific Prisma Next runtime helper
|
|
13
13
|
- adds `contract:emit`, `db:init`, `db:update`, `db:verify`, `db:seed`, `migration:plan`, `migrate`, `migration:status`, and `migration:show` scripts
|
|
14
14
|
- adds `db:up` / `db:down` and `docker-compose.yml` for default MongoDB projects
|
package/dist/cli.mjs
CHANGED
|
@@ -49,7 +49,7 @@ async function getAnonymousId() {
|
|
|
49
49
|
}
|
|
50
50
|
function getCommonProperties() {
|
|
51
51
|
return {
|
|
52
|
-
"cli-version": "0.4.2-next.37.
|
|
52
|
+
"cli-version": "0.4.2-next.37.94.1",
|
|
53
53
|
"node-version": process.version,
|
|
54
54
|
platform: process.platform,
|
|
55
55
|
arch: process.arch
|
|
@@ -152,7 +152,6 @@ const dependencyVersionMap = {
|
|
|
152
152
|
"@elysiajs/node": "^1.4.5",
|
|
153
153
|
"@types/node": "^25.6.2",
|
|
154
154
|
dotenv: "^17.4.2",
|
|
155
|
-
skills: "1.5.7",
|
|
156
155
|
tsx: "^4.21.0"
|
|
157
156
|
};
|
|
158
157
|
const PRISMA_NEXT_PACKAGE_VERSION = "latest";
|
|
@@ -602,7 +601,6 @@ function getDbPackages(provider, _packageManager) {
|
|
|
602
601
|
//#endregion
|
|
603
602
|
//#region src/tasks/install.ts
|
|
604
603
|
function getPrismaNextScriptMap(packageManager) {
|
|
605
|
-
const skillsSyncCommand = packageManager === "deno" ? `deno run -A npm:skills@${dependencyVersionMap.skills} experimental_sync --agent "*" -y` : "skills experimental_sync --agent \"*\" -y";
|
|
606
604
|
if (packageManager === "deno") {
|
|
607
605
|
const prismaNextCli = `deno run -A --env-file=.env npm:${getPrismaNextPackageSpecifier("prisma-next")}`;
|
|
608
606
|
return {
|
|
@@ -614,8 +612,7 @@ function getPrismaNextScriptMap(packageManager) {
|
|
|
614
612
|
"migration:plan": `${prismaNextCli} migration plan`,
|
|
615
613
|
migrate: `${prismaNextCli} migrate`,
|
|
616
614
|
"migration:status": `${prismaNextCli} migration status`,
|
|
617
|
-
"migration:show": `${prismaNextCli} migration show
|
|
618
|
-
"skills:sync": skillsSyncCommand
|
|
615
|
+
"migration:show": `${prismaNextCli} migration show`
|
|
619
616
|
};
|
|
620
617
|
}
|
|
621
618
|
if (packageManager === "bun") {
|
|
@@ -629,8 +626,7 @@ function getPrismaNextScriptMap(packageManager) {
|
|
|
629
626
|
"migration:plan": `${prismaNextCli} migration plan`,
|
|
630
627
|
migrate: `${prismaNextCli} migrate`,
|
|
631
628
|
"migration:status": `${prismaNextCli} migration status`,
|
|
632
|
-
"migration:show": `${prismaNextCli} migration show
|
|
633
|
-
"skills:sync": skillsSyncCommand
|
|
629
|
+
"migration:show": `${prismaNextCli} migration show`
|
|
634
630
|
};
|
|
635
631
|
}
|
|
636
632
|
return {
|
|
@@ -642,8 +638,7 @@ function getPrismaNextScriptMap(packageManager) {
|
|
|
642
638
|
"migration:plan": "prisma-next migration plan",
|
|
643
639
|
migrate: "prisma-next migrate",
|
|
644
640
|
"migration:status": "prisma-next migration status",
|
|
645
|
-
"migration:show": "prisma-next migration show"
|
|
646
|
-
"skills:sync": skillsSyncCommand
|
|
641
|
+
"migration:show": "prisma-next migration show"
|
|
647
642
|
};
|
|
648
643
|
}
|
|
649
644
|
function unique(items) {
|
|
@@ -721,9 +716,7 @@ async function writePrismaDependencies(provider, packageManager, authoring, proj
|
|
|
721
716
|
const devDependencies = [
|
|
722
717
|
"prisma-next",
|
|
723
718
|
"@prisma-next/cli",
|
|
724
|
-
"@
|
|
725
|
-
"@types/node",
|
|
726
|
-
"skills"
|
|
719
|
+
"@types/node"
|
|
727
720
|
];
|
|
728
721
|
devDependencies.push(...getGeneratedContractTypePackages(provider));
|
|
729
722
|
devDependencies.push(...getMigrationPackages(provider));
|
|
@@ -823,7 +816,6 @@ const DEFAULT_INSTALL = true;
|
|
|
823
816
|
const DEFAULT_EMIT = true;
|
|
824
817
|
const DEFAULT_INTERACTIVE_PRISMA_POSTGRES = true;
|
|
825
818
|
const DEFAULT_AUTOMATED_PRISMA_POSTGRES = false;
|
|
826
|
-
const CLAUDE_SKILLS_DIR = ".claude/skills";
|
|
827
819
|
const MONGO_DOCKER_COMPOSE = `services:
|
|
828
820
|
mongodb:
|
|
829
821
|
image: mongo:latest
|
|
@@ -1255,77 +1247,6 @@ async function installDependenciesForContext(context, projectDir) {
|
|
|
1255
1247
|
return false;
|
|
1256
1248
|
}
|
|
1257
1249
|
}
|
|
1258
|
-
function getSkillsSyncCliCommand(packageManager) {
|
|
1259
|
-
if (packageManager === "deno") return `deno run -A npm:skills@${dependencyVersionMap.skills} experimental_sync --agent "*" -y`;
|
|
1260
|
-
return getLocalPackageBinaryCommand(packageManager, "skills", [
|
|
1261
|
-
"experimental_sync",
|
|
1262
|
-
"--agent",
|
|
1263
|
-
"*",
|
|
1264
|
-
"-y"
|
|
1265
|
-
]);
|
|
1266
|
-
}
|
|
1267
|
-
function getSkillsSyncCliArgs(packageManager) {
|
|
1268
|
-
if (packageManager === "deno") return {
|
|
1269
|
-
command: "deno",
|
|
1270
|
-
args: [
|
|
1271
|
-
"run",
|
|
1272
|
-
"-A",
|
|
1273
|
-
`npm:skills@${dependencyVersionMap.skills}`,
|
|
1274
|
-
"experimental_sync",
|
|
1275
|
-
"--agent",
|
|
1276
|
-
"*",
|
|
1277
|
-
"-y"
|
|
1278
|
-
]
|
|
1279
|
-
};
|
|
1280
|
-
return getLocalPackageBinaryArgs(packageManager, "skills", [
|
|
1281
|
-
"experimental_sync",
|
|
1282
|
-
"--agent",
|
|
1283
|
-
"*",
|
|
1284
|
-
"-y"
|
|
1285
|
-
]);
|
|
1286
|
-
}
|
|
1287
|
-
async function syncAgentSkillsForContext(context, projectDir) {
|
|
1288
|
-
if (!context.shouldInstall) return { didSyncAgentSkills: false };
|
|
1289
|
-
const claudeDirectory = await prepareClaudeSkillsDirectory(projectDir);
|
|
1290
|
-
const syncCommand = getSkillsSyncCliCommand(context.packageManager);
|
|
1291
|
-
if (context.verbose) log.step(`Running ${syncCommand}`);
|
|
1292
|
-
try {
|
|
1293
|
-
const syncArgs = getSkillsSyncCliArgs(context.packageManager);
|
|
1294
|
-
await execa(syncArgs.command, syncArgs.args, {
|
|
1295
|
-
cwd: projectDir,
|
|
1296
|
-
stdio: context.verbose ? "inherit" : "pipe",
|
|
1297
|
-
env: {
|
|
1298
|
-
...process.env,
|
|
1299
|
-
CI: "1"
|
|
1300
|
-
}
|
|
1301
|
-
});
|
|
1302
|
-
if (context.verbose) log.success("Prisma Next agent skills synced.");
|
|
1303
|
-
return { didSyncAgentSkills: true };
|
|
1304
|
-
} catch (error) {
|
|
1305
|
-
if (context.verbose) log.warn("Could not sync Prisma Next agent skills.");
|
|
1306
|
-
if (claudeDirectory.didCreateClaudeRoot) await removeEmptyClaudeSkillsDirectory(projectDir);
|
|
1307
|
-
return {
|
|
1308
|
-
didSyncAgentSkills: false,
|
|
1309
|
-
warning: `Agent skill sync failed: ${getCommandErrorMessage(error)}`
|
|
1310
|
-
};
|
|
1311
|
-
}
|
|
1312
|
-
}
|
|
1313
|
-
async function prepareClaudeSkillsDirectory(projectDir) {
|
|
1314
|
-
const claudeRoot = path.join(projectDir, ".claude");
|
|
1315
|
-
const didCreateClaudeRoot = !await fs.pathExists(claudeRoot);
|
|
1316
|
-
try {
|
|
1317
|
-
await fs.ensureDir(path.join(projectDir, CLAUDE_SKILLS_DIR));
|
|
1318
|
-
return { didCreateClaudeRoot };
|
|
1319
|
-
} catch {
|
|
1320
|
-
return { didCreateClaudeRoot: false };
|
|
1321
|
-
}
|
|
1322
|
-
}
|
|
1323
|
-
async function removeEmptyClaudeSkillsDirectory(projectDir) {
|
|
1324
|
-
const claudeSkillsDir = path.join(projectDir, CLAUDE_SKILLS_DIR);
|
|
1325
|
-
const claudeRoot = path.dirname(claudeSkillsDir);
|
|
1326
|
-
if (await fs.pathExists(claudeSkillsDir) && (await fs.readdir(claudeSkillsDir)).length === 0) await fs.remove(claudeSkillsDir);
|
|
1327
|
-
if (await fs.pathExists(claudeRoot) && (await fs.readdir(claudeRoot)).length === 0) await fs.remove(claudeRoot);
|
|
1328
|
-
}
|
|
1329
1250
|
async function finalizePrismaFilesForContext(context, projectDir, provisionResult) {
|
|
1330
1251
|
try {
|
|
1331
1252
|
await finalizePrismaFiles({
|
|
@@ -1382,24 +1303,19 @@ async function emitPrismaNextContractForContext(context, projectDir) {
|
|
|
1382
1303
|
};
|
|
1383
1304
|
}
|
|
1384
1305
|
}
|
|
1385
|
-
function buildWarningLines(provisionWarning, emitWarning
|
|
1306
|
+
function buildWarningLines(provisionWarning, emitWarning) {
|
|
1386
1307
|
const warningLines = [];
|
|
1387
1308
|
if (provisionWarning) warningLines.push(`- ${provisionWarning}`);
|
|
1388
|
-
if (skillSyncWarning) warningLines.push(`- ${skillSyncWarning}`);
|
|
1389
1309
|
if (emitWarning) warningLines.push(`- ${emitWarning}`);
|
|
1390
1310
|
return warningLines;
|
|
1391
1311
|
}
|
|
1392
1312
|
function buildNextStepsForContext(opts) {
|
|
1393
|
-
const { context, options, didEmitContract
|
|
1313
|
+
const { context, options, didEmitContract } = opts;
|
|
1394
1314
|
const nextSteps = [...options.prependNextSteps ?? []];
|
|
1395
1315
|
if (!context.shouldInstall) nextSteps.push({
|
|
1396
1316
|
command: getInstallCommand(context.packageManager),
|
|
1397
1317
|
description: "Install the project dependencies."
|
|
1398
1318
|
});
|
|
1399
|
-
if (!didSyncAgentSkills) nextSteps.push({
|
|
1400
|
-
command: getRunScriptCommand(context.packageManager, "skills:sync"),
|
|
1401
|
-
description: "Sync the Prisma Next agent skills from installed packages."
|
|
1402
|
-
});
|
|
1403
1319
|
if (!didEmitContract || !context.shouldEmit) nextSteps.push({
|
|
1404
1320
|
command: getRunScriptCommand(context.packageManager, "contract:emit"),
|
|
1405
1321
|
description: "Emit contract.json and TypeScript types from your Prisma Next contract."
|
|
@@ -1433,14 +1349,14 @@ function buildNextStepsForContext(opts) {
|
|
|
1433
1349
|
function formatNextSteps(nextSteps) {
|
|
1434
1350
|
return nextSteps.map((step) => `${step.command}\n ${step.description}`).join("\n\n");
|
|
1435
1351
|
}
|
|
1436
|
-
function formatAgentPrompt(
|
|
1352
|
+
function formatAgentPrompt() {
|
|
1437
1353
|
return [
|
|
1438
1354
|
"Ask your agent:",
|
|
1439
1355
|
"What can I do with Prisma Next?",
|
|
1440
1356
|
"",
|
|
1441
1357
|
"Learn more:",
|
|
1442
1358
|
`Docs: prisma-next.md`,
|
|
1443
|
-
|
|
1359
|
+
"Skills: https://github.com/prisma/prisma-next/tree/main/skills"
|
|
1444
1360
|
].join("\n");
|
|
1445
1361
|
}
|
|
1446
1362
|
async function executePrismaSetupContext(context, options = {}) {
|
|
@@ -1470,8 +1386,6 @@ async function executePrismaSetupContext(context, options = {}) {
|
|
|
1470
1386
|
stopProgressOnFailure();
|
|
1471
1387
|
return false;
|
|
1472
1388
|
}
|
|
1473
|
-
if (context.shouldInstall) progressSpinner?.message("Syncing Prisma Next agent skills...");
|
|
1474
|
-
const skillSyncResult = await syncAgentSkillsForContext(context, projectDir);
|
|
1475
1389
|
progressSpinner?.message("Configuring Prisma Next...");
|
|
1476
1390
|
if (!await finalizePrismaFilesForContext(context, projectDir, provisionResult)) {
|
|
1477
1391
|
stopProgressOnFailure();
|
|
@@ -1483,16 +1397,15 @@ async function executePrismaSetupContext(context, options = {}) {
|
|
|
1483
1397
|
}
|
|
1484
1398
|
if (context.shouldEmit && context.shouldInstall) progressSpinner?.message("Emitting Prisma Next contract artifacts...");
|
|
1485
1399
|
const emitResult = await emitPrismaNextContractForContext(context, projectDir);
|
|
1486
|
-
const warningLines = buildWarningLines(provisionResult.warning, emitResult.warning
|
|
1400
|
+
const warningLines = buildWarningLines(provisionResult.warning, emitResult.warning);
|
|
1487
1401
|
const nextSteps = buildNextStepsForContext({
|
|
1488
1402
|
context,
|
|
1489
1403
|
options,
|
|
1490
|
-
didEmitContract: emitResult.didEmitContract
|
|
1491
|
-
didSyncAgentSkills: skillSyncResult.didSyncAgentSkills
|
|
1404
|
+
didEmitContract: emitResult.didEmitContract
|
|
1492
1405
|
});
|
|
1493
1406
|
progressSpinner?.stop("Prisma Next project ready.");
|
|
1494
1407
|
if (warningLines.length > 0) note(warningLines.map((line) => line.replace(/^- /, "")).join("\n"), "Heads up");
|
|
1495
|
-
note(formatAgentPrompt(
|
|
1408
|
+
note(formatAgentPrompt(), "Agent prompt");
|
|
1496
1409
|
if (context.verbose) note(formatNextSteps(nextSteps), "Next steps for Prisma Next");
|
|
1497
1410
|
outro("Prisma Next setup complete.");
|
|
1498
1411
|
return true;
|
package/dist/index.mjs
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
import { a as DatabaseProviderSchema, i as CreateTemplateSchema, n as AuthoringStyleSchema, o as DatabaseUrlSchema, r as CreateCommandInputSchema, s as PackageManagerSchema, t as runCreateCommand } from "./create-
|
|
2
|
+
import { a as DatabaseProviderSchema, i as CreateTemplateSchema, n as AuthoringStyleSchema, o as DatabaseUrlSchema, r as CreateCommandInputSchema, s as PackageManagerSchema, t as runCreateCommand } from "./create-DgTPw_xS.mjs";
|
|
3
3
|
import { os } from "@orpc/server";
|
|
4
4
|
import { createCli } from "trpc-cli";
|
|
5
5
|
|
|
6
6
|
//#region src/index.ts
|
|
7
|
-
const CLI_VERSION = "0.4.2-next.37.
|
|
7
|
+
const CLI_VERSION = "0.4.2-next.37.94.1";
|
|
8
8
|
const router = os.router({ create: os.meta({
|
|
9
9
|
description: "Create a new project with Prisma setup",
|
|
10
10
|
default: true,
|
package/package.json
CHANGED
|
@@ -35,7 +35,7 @@ Database helper scripts are added to `package.json`:
|
|
|
35
35
|
|
|
36
36
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
37
37
|
|
|
38
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
38
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
39
39
|
The Astro Vite dev server also auto-emits Prisma Next contract artifacts when the contract changes.
|
|
40
40
|
|
|
41
41
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
@@ -33,7 +33,7 @@ Database helper scripts are added to `package.json`:
|
|
|
33
33
|
|
|
34
34
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
35
35
|
|
|
36
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
36
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
37
37
|
|
|
38
38
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
39
39
|
|
|
@@ -33,7 +33,7 @@ Database helper scripts are added to `package.json`:
|
|
|
33
33
|
|
|
34
34
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
35
35
|
|
|
36
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
36
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
37
37
|
|
|
38
38
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
39
39
|
|
|
@@ -31,7 +31,7 @@ Database helper scripts are added to `package.json`:
|
|
|
31
31
|
{{/if}}
|
|
32
32
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
33
33
|
|
|
34
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
34
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
35
35
|
|
|
36
36
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
37
37
|
|
|
@@ -34,7 +34,7 @@ Database helper scripts are added to `package.json`:
|
|
|
34
34
|
|
|
35
35
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
36
36
|
|
|
37
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
37
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
38
38
|
|
|
39
39
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
40
40
|
|
|
@@ -33,7 +33,7 @@ Database helper scripts are added to `package.json`:
|
|
|
33
33
|
|
|
34
34
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
35
35
|
|
|
36
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
36
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
37
37
|
|
|
38
38
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
39
39
|
|
|
@@ -35,7 +35,7 @@ Database helper scripts are added to `package.json`:
|
|
|
35
35
|
|
|
36
36
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
37
37
|
|
|
38
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
38
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
39
39
|
The Nuxt Vite dev server also auto-emits Prisma Next contract artifacts when the contract changes.
|
|
40
40
|
|
|
41
41
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
@@ -34,7 +34,7 @@ Database helper scripts are added to `package.json`:
|
|
|
34
34
|
|
|
35
35
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
36
36
|
|
|
37
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
37
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
38
38
|
The SvelteKit Vite dev server also auto-emits Prisma Next contract artifacts when the contract changes.
|
|
39
39
|
|
|
40
40
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|
|
@@ -34,7 +34,7 @@ Database helper scripts are added to `package.json`:
|
|
|
34
34
|
|
|
35
35
|
- `{{runScriptCommand packageManager "db:seed"}}` - insert sample users manually
|
|
36
36
|
|
|
37
|
-
For provider-specific Prisma Next reference docs, see `prisma-next.md`.
|
|
37
|
+
For provider-specific Prisma Next reference docs, see `prisma-next.md`. Prisma Next skills live in the upstream `skills/` directory: https://github.com/prisma/prisma-next/tree/main/skills.
|
|
38
38
|
The TanStack Start Vite dev server also auto-emits Prisma Next contract artifacts when the contract changes.
|
|
39
39
|
|
|
40
40
|
Node-based Prisma Next projects expect Node.js 24 LTS or newer.
|