create-prisma 0.14.1 → 0.14.2-pr.128.422.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 CHANGED
@@ -2,8 +2,13 @@
2
2
 
3
3
  Create a Prisma 8 app with Prisma Composer built in.
4
4
 
5
- Requires Node.js 22.18 or newer, matching the Prisma CLI.
6
- Generated apps must also meet their selected framework's Node.js requirements.
5
+ ## Supported versions
6
+
7
+ create-prisma supports exactly what Prisma ORM supports: Node.js 22.18 or newer on the 22 line, 24.11 or newer on the 24 line, or 26 and newer (`^22.18.0 || ^24.11.0 || >=26.0.0`). Node.js 23 and 24.0 to 24.10 are not supported. create-prisma refuses unsupported Node.js versions before it writes any files, and the generated minimal, hono, elysia, nest and turborepo projects declare the same range in `engines.node`.
8
+
9
+ Each supported Node.js release works with the npm it ships, including npm 10 on Node.js 22. pnpm, Yarn 4.10 or newer, Bun and Deno are also supported. Yarn 1 is not supported. When create-prisma runs on Bun or Deno instead of Node.js, it skips the Node.js check.
10
+
11
+ The one exception is the `nuxt` template. Nuxt itself requires Node.js `^22.22.3 || ^24.15.0 || >=26.0.0`, so Nuxt projects declare that narrower range.
7
12
 
8
13
  ## Quick start
9
14
 
@@ -22,10 +27,7 @@ PostgreSQL apps with Composer include `@prisma/dev` as a project devDependency f
22
27
  local Postgres. In a monorepo it belongs at the root, where Composer runs. Prisma 8
23
28
  does not include this runtime itself. MongoDB and Deno-only apps do not need it.
24
29
 
25
- For npm, use 11.6.0 or newer, which includes the [upstream resolver fix](https://github.com/npm/cli/pull/8448).
26
- Older npm releases can crash resolving the dependency tree (`Cannot read properties of null (reading 'edgesOut')`). Run
27
- `npm install --global npm@11` to update. create-prisma checks the selected package manager
28
- before writing project files and never upgrades your package manager automatically. Yarn 1 is not supported.
30
+ create-prisma checks the selected package manager before writing project files and never upgrades your package manager automatically.
29
31
 
30
32
  The deployment prompt is:
31
33
 
package/dist/cli.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  #!/usr/bin/env node
2
- import { a as ApplicationLayer, i as runCreatePrismaCli } from "./src-Cyh2vdRk.mjs";
2
+ import { a as ApplicationLayer, i as runCreatePrismaCli } from "./src-C7ad6vya.mjs";
3
3
  import { Effect } from "effect";
4
4
  import { NodeRuntime } from "@effect/platform-node-shared";
5
5
  //#region src/cli.ts
package/dist/index.mjs CHANGED
@@ -1,3 +1,3 @@
1
1
  #!/usr/bin/env node
2
- import { c as AgentSkillTargetSchema, d as CreateTemplateSchema, f as DatabaseProviderSchema, i as runCreatePrismaCli, l as AuthoringStyleSchema, n as createCreatePrismaCli, o as CREATE_PRISMA_RESULT_SCHEMA_VERSION, p as PackageManagerSchema, r as createPrismaCommand, s as CreateCommandResultSchema, t as create, u as CreateCommandInputSchema } from "./src-Cyh2vdRk.mjs";
2
+ import { c as AgentSkillTargetSchema, d as CreateTemplateSchema, f as DatabaseProviderSchema, i as runCreatePrismaCli, l as AuthoringStyleSchema, n as createCreatePrismaCli, o as CREATE_PRISMA_RESULT_SCHEMA_VERSION, p as PackageManagerSchema, r as createPrismaCommand, s as CreateCommandResultSchema, t as create, u as CreateCommandInputSchema } from "./src-C7ad6vya.mjs";
3
3
  export { AgentSkillTargetSchema, AuthoringStyleSchema, CREATE_PRISMA_RESULT_SCHEMA_VERSION, CreateCommandInputSchema, CreateCommandResultSchema, CreateTemplateSchema, DatabaseProviderSchema, PackageManagerSchema, create, createCreatePrismaCli, createPrismaCommand, runCreatePrismaCli };
@@ -464,20 +464,14 @@ function getPackageManagerErrorCode(command, output) {
464
464
  }
465
465
  //#endregion
466
466
  //#region src/telemetry/client.ts
467
- const TELEMETRY_API_KEY = "phc_cmc85avbWyuJ2JyKdGPdv7dxXli8xLdWDBPbvIXWJfs";
467
+ const TELEMETRY_API_KEY = "";
468
468
  const TELEMETRY_HOST = "https://us.i.posthog.com";
469
469
  const TELEMETRY_CONFIG_FILE = "telemetry.json";
470
470
  const TELEMETRY_TIMEOUT_MS = 2e3;
471
471
  const AnonymousId = Schema.String.check(Schema.isUUID(4));
472
472
  const decodeAnonymousId = Schema.decodeUnknownExit(AnonymousId);
473
- const isTruthyEnvValue = (value) => [
474
- "1",
475
- "true",
476
- "yes",
477
- "on"
478
- ].includes(String(value ?? "").trim().toLowerCase());
479
473
  function shouldDisableTelemetry() {
480
- return isTruthyEnvValue(process.env.CI) || isTruthyEnvValue(process.env.GITHUB_ACTIONS) || process.env.CREATE_PRISMA_DISABLE_TELEMETRY !== void 0 || process.env.CREATE_PRISMA_TELEMETRY_DISABLED !== void 0 || process.env.DO_NOT_TRACK !== void 0;
474
+ return true;
481
475
  }
482
476
  function getTelemetryConfigDir() {
483
477
  if (process.platform === "darwin") return path.join(os.homedir(), "Library", "Application Support", "create-prisma");
@@ -501,7 +495,7 @@ const getAnonymousIdEffect = Effect.fn("Telemetry.getAnonymousId")(function* ()
501
495
  return anonymousId;
502
496
  });
503
497
  const getCommonProperties = () => ({
504
- "cli-version": "0.14.1",
498
+ "cli-version": "0.14.2-pr.128.422.1",
505
499
  "node-version": process.version,
506
500
  platform: process.platform,
507
501
  arch: process.arch
@@ -742,8 +736,17 @@ function getErrorMessage(error) {
742
736
  //#endregion
743
737
  //#region src/utils/package-manager.ts
744
738
  const DENO_ALLOW_FRESH_DEPENDENCIES = "--minimum-dependency-age=0";
739
+ const npmForMinimumNode = {
740
+ node: [
741
+ 22,
742
+ 18,
743
+ 0
744
+ ],
745
+ fallback: "10.9.3",
746
+ majors: /* @__PURE__ */ new Set([10, 11])
747
+ };
745
748
  const packageManagerManifestValues = {
746
- npm: "npm@12.2.0",
749
+ npm: `npm@${npmForMinimumNode.fallback}`,
747
750
  pnpm: "pnpm@11.28.5",
748
751
  yarn: "yarn@4.18.1",
749
752
  bun: "bun@1.4.2"
@@ -752,15 +755,7 @@ const packageManagerChecks = {
752
755
  npm: {
753
756
  name: "npm",
754
757
  versionArgs: ["--version"],
755
- install: "Install Node.js from https://nodejs.org to get npm",
756
- minimum: {
757
- version: [
758
- 11,
759
- 6,
760
- 0
761
- ],
762
- guidance: "Older npm releases can crash while resolving Prisma dependencies. Run npm install --global npm@11, then retry create-prisma."
763
- }
758
+ install: "Install Node.js from https://nodejs.org to get npm"
764
759
  },
765
760
  pnpm: {
766
761
  name: "pnpm",
@@ -801,7 +796,10 @@ function parsePackageManagerVersion(packageManager, version) {
801
796
  Number(match[2]),
802
797
  Number(match[3])
803
798
  ];
804
- return parts.every(Number.isSafeInteger) ? parts : void 0;
799
+ return parts.every(Number.isSafeInteger) ? {
800
+ version: match[0],
801
+ parts
802
+ } : void 0;
805
803
  }
806
804
  function isOlderVersion(version, minimum) {
807
805
  for (const [index, part] of version.entries()) if (part !== minimum[index]) return part < minimum[index];
@@ -831,11 +829,12 @@ const probePackageManagerEffect = Effect.fn("PackageManager.probe")(function* (p
831
829
  reason: "package_manager_check_failed",
832
830
  message: `Could not determine the installed ${name} version: ${output}`
833
831
  });
834
- if (minimum && isOlderVersion(version, minimum.version)) return yield* new CreateFailure({
832
+ if (minimum && isOlderVersion(version.parts, minimum.version)) return yield* new CreateFailure({
835
833
  stage: "validate_input",
836
834
  reason: "unsupported_package_manager_version",
837
- message: `${name} ${version.join(".")} is unsupported. Required: ${name} ${minimum.version.join(".")} or newer. ${minimum.guidance}`
835
+ message: `${name} ${version.version} is unsupported. Required: ${name} ${minimum.version.join(".")} or newer. ${minimum.guidance}`
838
836
  });
837
+ return version;
839
838
  });
840
839
  const verifyPackageManagerEffect = Effect.fn("PackageManager.verify")(function* (packageManager, projectDir) {
841
840
  if (projectDir) return yield* probePackageManagerEffect(packageManager, projectDir);
@@ -850,7 +849,7 @@ const verifyPackageManagerEffect = Effect.fn("PackageManager.verify")(function*
850
849
  message: `Could not prepare a directory to check ${packageManagerChecks[packageManager].name}: ${getErrorMessage(cause)}`,
851
850
  cause
852
851
  })));
853
- yield* probePackageManagerEffect(packageManager, probeDir);
852
+ return yield* probePackageManagerEffect(packageManager, probeDir);
854
853
  }, Effect.scoped);
855
854
  function parseUserAgent(userAgent) {
856
855
  if (userAgent?.startsWith("pnpm")) return "pnpm";
@@ -923,9 +922,10 @@ const detectPackageManagerEffect = Effect.fn("PackageManager.detect")(function*
923
922
  if (fromUserAgent) return fromUserAgent;
924
923
  return "npm";
925
924
  });
926
- function getPackageManagerManifestValue(packageManager) {
925
+ function getPackageManagerManifestValue(packageManager, detectedVersion) {
927
926
  if (!packageManager) return;
928
927
  if (packageManager === "deno") return;
928
+ if (packageManager === "npm" && detectedVersion && npmForMinimumNode.majors.has(detectedVersion.parts[0])) return `npm@${detectedVersion.version}`;
929
929
  return packageManagerManifestValues[packageManager];
930
930
  }
931
931
  function getInstallCommand(packageManager) {
@@ -1080,7 +1080,6 @@ function getRunScriptArgs(packageManager, scriptName) {
1080
1080
  //#region src/templates/shared.ts
1081
1081
  Handlebars.registerHelper("eq", (left, right) => left === right);
1082
1082
  Handlebars.registerHelper("runScriptCommand", (packageManager, scriptName) => packageManager ? getRunScriptCommand(packageManager, scriptName) : "");
1083
- Handlebars.registerHelper("packageManagerManifestValue", (packageManager) => getPackageManagerManifestValue(packageManager) ?? "");
1084
1083
  Handlebars.registerHelper("runtimeScript", (packageManager, kind, sourceEntrypoint, builtEntrypoint, _options) => packageManager ? getRuntimeScriptCommand(packageManager, kind, {
1085
1084
  sourceEntrypoint,
1086
1085
  builtEntrypoint
@@ -1154,6 +1153,7 @@ function createTemplateContext(options) {
1154
1153
  provider: options.provider,
1155
1154
  authoring: options.authoring,
1156
1155
  packageManager: options.packageManager,
1156
+ packageManagerManifest: getPackageManagerManifestValue(options.packageManager, options.packageManagerVersion) ?? null,
1157
1157
  skillAgents: options.skillAgents ?? agentSkillTargets,
1158
1158
  tsdownEntry: tsdownEntries[options.template] ?? null
1159
1159
  };
@@ -2296,11 +2296,17 @@ function getCreatePrismaIntro() {
2296
2296
  }
2297
2297
  //#endregion
2298
2298
  //#region src/utils/node-version.ts
2299
- const MINIMUM_NODE_VERSION = [
2299
+ const minimumByMajor = /* @__PURE__ */ new Map([[22, [
2300
2300
  22,
2301
2301
  18,
2302
2302
  0
2303
- ];
2303
+ ]], [24, [
2304
+ 24,
2305
+ 11,
2306
+ 0
2307
+ ]]]);
2308
+ const FIRST_MAJOR_WITH_EVERY_RELEASE_SUPPORTED = 26;
2309
+ minimumByMajor.get(22);
2304
2310
  function parseVersion(version) {
2305
2311
  const [major = "0", minor = "0", patch = "0"] = version.replace(/^v/, "").split(".");
2306
2312
  return [
@@ -2309,18 +2315,23 @@ function parseVersion(version) {
2309
2315
  Number.parseInt(patch, 10)
2310
2316
  ];
2311
2317
  }
2318
+ function isAtLeast(current, minimum) {
2319
+ for (const [index, part] of current.entries()) if (part !== minimum[index]) return part > minimum[index];
2320
+ return true;
2321
+ }
2322
+ function runsOnNode(versions = process.versions) {
2323
+ return versions.bun === void 0 && versions.deno === void 0;
2324
+ }
2312
2325
  function supportsPrisma(nodeVersion = process.versions.node) {
2313
2326
  const current = parseVersion(nodeVersion);
2314
- for (let index = 0; index < MINIMUM_NODE_VERSION.length; index += 1) {
2315
- if (current[index] > MINIMUM_NODE_VERSION[index]) return true;
2316
- if (current[index] < MINIMUM_NODE_VERSION[index]) return false;
2317
- }
2318
- return true;
2327
+ if (current[0] >= FIRST_MAJOR_WITH_EVERY_RELEASE_SUPPORTED) return true;
2328
+ const minimum = minimumByMajor.get(current[0]);
2329
+ return minimum !== void 0 && isAtLeast(current, minimum);
2319
2330
  }
2320
2331
  function getUnsupportedNodeMessage(nodeVersion = process.versions.node) {
2321
2332
  return [
2322
2333
  `Node.js ${nodeVersion} is unsupported by create-prisma@latest.`,
2323
- "Required: Node.js 22.18 or newer.",
2334
+ "Required: Node.js 22.18 or newer on the 22 line, 24.11 or newer on the 24 line, or 26 and newer.",
2324
2335
  "Update Node.js and run the command again."
2325
2336
  ].join("\n");
2326
2337
  }
@@ -2635,7 +2646,7 @@ const initializeExistingApp = Effect.fn("Create.initExisting")(function* (contex
2635
2646
  initialization
2636
2647
  };
2637
2648
  });
2638
- const executeCreateContext = Effect.fn("Create.execute")(function* (context) {
2649
+ const executeCreateContext = Effect.fn("Create.execute")(function* (context, packageManagerVersion) {
2639
2650
  const output = context.prismaSetupContext.output;
2640
2651
  const createSpinner = context.prismaSetupContext.verbose ? void 0 : spinner({ output });
2641
2652
  yield* Effect.sync(() => {
@@ -2649,6 +2660,7 @@ const executeCreateContext = Effect.fn("Create.execute")(function* (context) {
2649
2660
  provider: context.prismaSetupContext.databaseProvider,
2650
2661
  authoring: context.prismaSetupContext.authoring,
2651
2662
  packageManager: context.prismaSetupContext.packageManager,
2663
+ packageManagerVersion,
2652
2664
  skillAgents: context.prismaSetupContext.skillAgents
2653
2665
  }).pipe(Effect.andThen(writeCreateTemplateDependenciesEffect({
2654
2666
  template: context.template,
@@ -2699,7 +2711,7 @@ const createProjectEffect = Effect.fn("Create.project")(function* (rawInput, inp
2699
2711
  reason: "invalid_input",
2700
2712
  message: "--verbose cannot be used with --json because JSON mode is output-only."
2701
2713
  });
2702
- if (!supportsPrisma()) {
2714
+ if (runsOnNode() && !supportsPrisma()) {
2703
2715
  const message = getUnsupportedNodeMessage();
2704
2716
  yield* Effect.sync(() => cancel(message, { output }));
2705
2717
  return yield* new CreateFailure({
@@ -2712,11 +2724,11 @@ const createProjectEffect = Effect.fn("Create.project")(function* (rawInput, inp
2712
2724
  yield* Effect.sync(() => intro(getCreatePrismaIntro(), { output }));
2713
2725
  const context = yield* atCreateStage(collectCreateContext(input), "collect_context", "unexpected_error");
2714
2726
  yield* Ref.set(contextRef, Option.some(context));
2715
- yield* atCreateStage(context.operation === "orm_init" ? verifyPackageManagerEffect(context.packageManager, context.targetDirectory) : verifyPackageManagerEffect(context.prismaSetupContext.packageManager), "validate_input", "package_manager_check_failed");
2727
+ const packageManagerVersion = yield* atCreateStage(context.operation === "orm_init" ? verifyPackageManagerEffect(context.packageManager, context.targetDirectory) : verifyPackageManagerEffect(context.prismaSetupContext.packageManager), "validate_input", "package_manager_check_failed");
2716
2728
  return {
2717
2729
  input,
2718
2730
  context,
2719
- result: context.operation === "orm_init" ? yield* initializeExistingApp(context, input) : yield* executeCreateContext(context)
2731
+ result: context.operation === "orm_init" ? yield* initializeExistingApp(context, input) : yield* executeCreateContext(context, packageManagerVersion)
2720
2732
  };
2721
2733
  });
2722
2734
  const runCreateCommandEffect = Effect.fn("Create.run")(function* (rawInput = {}) {
@@ -2778,7 +2790,7 @@ function isJsonOutputRequested(argv) {
2778
2790
  const writeJsonResult = Effect.fn("JsonOutput.write")((result) => Effect.sync(() => process.stdout.write(`${JSON.stringify(result)}\n`)));
2779
2791
  //#endregion
2780
2792
  //#region src/index.ts
2781
- const CLI_VERSION = "0.14.1";
2793
+ const CLI_VERSION = "0.14.2-pr.128.422.1";
2782
2794
  const optionalArgument = (name, description) => Argument.String(name).pipe(Argument.withDescription(description), Argument.optional, Argument.map(Option.getOrUndefined));
2783
2795
  const optionalBoolean = (name, description) => Flag.Boolean(name).pipe(Flag.withDescription(description), Flag.optional, Flag.map(Option.getOrUndefined));
2784
2796
  const optionalString = (name, description) => Flag.String(name).pipe(Flag.withDescription(description), Flag.optional, Flag.map(Option.getOrUndefined));
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-prisma",
3
- "version": "0.14.1",
3
+ "version": "0.14.2-pr.128.422.1",
4
4
  "private": false,
5
5
  "description": "Create Prisma 8 projects with first-party templates and great DX.",
6
6
  "homepage": "https://github.com/prisma/create-prisma",
@@ -70,7 +70,7 @@
70
70
  },
71
71
  "engines": {
72
72
  "bun": ">=1.3.0",
73
- "node": ">=22.18.0"
73
+ "node": "^22.18.0 || ^24.11.0 || >=26.0.0"
74
74
  },
75
75
  "packageManager": "bun@1.4.1"
76
76
  }
@@ -2,8 +2,8 @@
2
2
  "name": "{{projectName}}",
3
3
  "type": "module",
4
4
  "version": "0.0.1",
5
- {{#if (packageManagerManifestValue packageManager)}}
6
- "packageManager": "{{packageManagerManifestValue packageManager}}",
5
+ {{#if packageManagerManifest}}
6
+ "packageManager": "{{packageManagerManifest}}",
7
7
  {{/if}}
8
8
  "scripts": {
9
9
  "dev": "astro dev",
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
- {{#if (packageManagerManifestValue packageManager)}}
5
- "packageManager": "{{packageManagerManifestValue packageManager}}",
4
+ {{#if packageManagerManifest}}
5
+ "packageManager": "{{packageManagerManifest}}",
6
6
  {{/if}}
7
7
  "type": "module",
8
8
  "engines": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
- {{#if (packageManagerManifestValue packageManager)}}
5
- "packageManager": "{{packageManagerManifestValue packageManager}}",
4
+ {{#if packageManagerManifest}}
5
+ "packageManager": "{{packageManagerManifest}}",
6
6
  {{/if}}
7
7
  "type": "module",
8
8
  "engines": {
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
- {{#if (packageManagerManifestValue packageManager)}}
5
- "packageManager": "{{packageManagerManifestValue packageManager}}",
4
+ {{#if packageManagerManifest}}
5
+ "packageManager": "{{packageManagerManifest}}",
6
6
  {{/if}}
7
7
  "type": "module",
8
8
  {{#unless (eq packageManager "deno")}}
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
- {{#if (packageManagerManifestValue packageManager)}}
5
- "packageManager": "{{packageManagerManifestValue packageManager}}",
4
+ {{#if packageManagerManifest}}
5
+ "packageManager": "{{packageManagerManifest}}",
6
6
  {{/if}}
7
7
  "type": "module",
8
8
  "engines": {
@@ -2,8 +2,8 @@
2
2
  "name": "{{projectName}}",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
- {{#if (packageManagerManifestValue packageManager)}}
6
- "packageManager": "{{packageManagerManifestValue packageManager}}",
5
+ {{#if packageManagerManifest}}
6
+ "packageManager": "{{packageManagerManifest}}",
7
7
  {{/if}}
8
8
  "type": "module",
9
9
  "scripts": {
@@ -6,8 +6,8 @@
6
6
  },
7
7
  "private": true,
8
8
  "version": "0.0.1",
9
- {{#if (packageManagerManifestValue packageManager)}}
10
- "packageManager": "{{packageManagerManifestValue packageManager}}",
9
+ {{#if packageManagerManifest}}
10
+ "packageManager": "{{packageManagerManifest}}",
11
11
  {{/if}}
12
12
  "scripts": {
13
13
  "build": "nuxt build",
@@ -2,8 +2,8 @@
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
4
  "version": "0.0.1",
5
- {{#if (packageManagerManifestValue packageManager)}}
6
- "packageManager": "{{packageManagerManifestValue packageManager}}",
5
+ {{#if packageManagerManifest}}
6
+ "packageManager": "{{packageManagerManifest}}",
7
7
  {{/if}}
8
8
  "type": "module",
9
9
  "imports": {
@@ -2,8 +2,8 @@
2
2
  "name": "{{projectName}}",
3
3
  "private": true,
4
4
  "version": "0.1.0",
5
- {{#if (packageManagerManifestValue packageManager)}}
6
- "packageManager": "{{packageManagerManifestValue packageManager}}",
5
+ {{#if packageManagerManifest}}
6
+ "packageManager": "{{packageManagerManifest}}",
7
7
  {{/if}}
8
8
  "type": "module",
9
9
  "scripts": {
@@ -2,8 +2,8 @@
2
2
  "name": "{{projectName}}",
3
3
  "version": "0.1.0",
4
4
  "private": true,
5
- {{#if (packageManagerManifestValue packageManager)}}
6
- "packageManager": "{{packageManagerManifestValue packageManager}}",
5
+ {{#if packageManagerManifest}}
6
+ "packageManager": "{{packageManagerManifest}}",
7
7
  {{/if}}
8
8
  "type": "module",
9
9
  "workspaces": [