@prisma/cli-init 0.0.1 → 0.0.3

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.ts CHANGED
@@ -1,3 +1,5 @@
1
- declare function run(args: string[], config: any): void;
1
+ import { PrismaConfigInternal } from '@prisma/config';
2
+
3
+ declare function run(args: string[], config: PrismaConfigInternal): Promise<string | Error>;
2
4
 
3
5
  export { run };
package/dist/index.js CHANGED
@@ -1,6 +1,608 @@
1
- // index.ts
1
+ import {
2
+ credentialsFile,
3
+ poll,
4
+ printPpgInitOutput,
5
+ requestOrThrow,
6
+ successMessage
7
+ } from "./chunk-VVHEUIBQ.js";
8
+
9
+ // src/Init.ts
10
+ import { confirm, input, select } from "@inquirer/prompts";
11
+ import {
12
+ arg,
13
+ canConnectToDatabase,
14
+ checkUnsupportedDataProxy,
15
+ format,
16
+ getCommandWithExecutor,
17
+ HelpError,
18
+ isError,
19
+ link,
20
+ logger,
21
+ PRISMA_POSTGRES_PROTOCOL,
22
+ PRISMA_POSTGRES_PROVIDER,
23
+ protocolToConnectorType
24
+ } from "@prisma/internals";
25
+ import dotenv from "dotenv";
26
+ import { Schema as Shape } from "effect";
27
+ import fs2 from "fs";
28
+ import { bold as bold2, dim, green, red as red2, yellow } from "kleur/colors";
29
+ import ora from "ora";
30
+ import path2 from "path";
31
+ import { match, P } from "ts-pattern";
32
+
33
+ // src/utils/client-output-path.ts
34
+ import fs from "fs";
35
+ import path from "path";
36
+ import { getTsconfig } from "get-tsconfig";
37
+ function determineClientOutputPath(schemaDir) {
38
+ const sourceDir = getSourceDir();
39
+ const outputPath = path.join(sourceDir, "generated", "prisma");
40
+ const relativeOutputPath = path.relative(schemaDir, outputPath);
41
+ return relativeOutputPath.replaceAll(path.sep, "/");
42
+ }
43
+ function getSourceDir() {
44
+ const projectDir = process.cwd();
45
+ const sourceRootFromTsConfig = getSourceDirFromTypeScriptConfig();
46
+ if (sourceRootFromTsConfig) {
47
+ return path.join(projectDir, sourceRootFromTsConfig);
48
+ }
49
+ for (const dir of ["src", "lib", "app"]) {
50
+ const absoluteSourceDir = path.join(projectDir, dir);
51
+ if (fs.existsSync(absoluteSourceDir)) {
52
+ return absoluteSourceDir;
53
+ }
54
+ }
55
+ return projectDir;
56
+ }
57
+ function getSourceDirFromTypeScriptConfig() {
58
+ const tsconfig = getTsconfig();
59
+ if (!tsconfig) {
60
+ return void 0;
61
+ }
62
+ const { config } = tsconfig;
63
+ return config.compilerOptions?.rootDir ?? config.compilerOptions?.baseUrl ?? config.compilerOptions?.rootDirs?.[0];
64
+ }
65
+
66
+ // src/platform/accelerate/regions.ts
67
+ var getRegionsOrThrow = async (input2) => {
68
+ const { token } = input2;
69
+ const { system } = await requestOrThrow({
70
+ token,
71
+ body: {
72
+ query: (
73
+ /* GraphQL */
74
+ `
75
+ query {
76
+ system {
77
+ accelerate {
78
+ regions {
79
+ id
80
+ displayName
81
+ ppgStatus
82
+ }
83
+ }
84
+ }
85
+ }
86
+ `
87
+ )
88
+ }
89
+ });
90
+ return system.accelerate.regions;
91
+ };
92
+ var getPrismaPostgresRegionsOrThrow = async (input2) => {
93
+ const regions = await getRegionsOrThrow(input2);
94
+ const ppgRegions = regions.filter((_) => _.ppgStatus !== "unsupported").sort((a, b) => b.displayName.localeCompare(a.displayName));
95
+ return ppgRegions;
96
+ };
97
+
98
+ // src/utils/print.ts
99
+ import { bgRed, bold, red } from "kleur/colors";
100
+ function printError(text) {
101
+ return bold(bgRed(" ERROR ")) + " " + red(text);
102
+ }
103
+
104
+ // src/Init.ts
105
+ var defaultSchema = (props) => {
106
+ const {
107
+ datasourceProvider = "postgresql",
108
+ generatorProvider = defaultGeneratorProvider,
109
+ previewFeatures = defaultPreviewFeatures,
110
+ output = "../generated/prisma",
111
+ withModel = false
112
+ } = props ?? {};
113
+ const aboutAccelerate = `
114
+ // Looking for ways to speed up your queries, or scale easily with your serverless or edge functions?
115
+ // Try Prisma Accelerate: https://pris.ly/cli/accelerate-init
116
+ `;
117
+ const isProviderCompatibleWithAccelerate = datasourceProvider !== "sqlite";
118
+ let schema = `// This is your Prisma schema file,
119
+ // learn more about it in the docs: https://pris.ly/d/prisma-schema
120
+ ${isProviderCompatibleWithAccelerate ? aboutAccelerate : ""}
121
+ generator client {
122
+ provider = "${generatorProvider}"
123
+ ${previewFeatures.length > 0 ? ` previewFeatures = [${previewFeatures.map((feature) => `"${feature}"`).join(", ")}]
124
+ ` : ""} output = "${output}"
125
+ }
126
+
127
+ datasource db {
128
+ provider = "${datasourceProvider}"
129
+ url = env("DATABASE_URL")
130
+ }
131
+ `;
132
+ if (withModel) {
133
+ const defaultAttributes = `email String @unique
134
+ name String?`;
135
+ switch (datasourceProvider) {
136
+ case "mongodb":
137
+ schema += `
138
+ model User {
139
+ id String @id @default(auto()) @map("_id") @db.ObjectId
140
+ ${defaultAttributes}
141
+ }
142
+ `;
143
+ break;
144
+ case "cockroachdb":
145
+ schema += `
146
+ model User {
147
+ id BigInt @id @default(sequence())
148
+ ${defaultAttributes}
149
+ }
150
+ `;
151
+ break;
152
+ default:
153
+ schema += `
154
+ model User {
155
+ id Int @id @default(autoincrement())
156
+ ${defaultAttributes}
157
+ }
158
+ `;
159
+ }
160
+ }
161
+ return schema;
162
+ };
163
+ var defaultEnv = (url = "postgresql://johndoe:randompassword@localhost:5432/mydb?schema=public", comments = true) => {
164
+ let env = comments ? `# Environment variables declared in this file are automatically made available to Prisma.
165
+ # See the documentation for more detail: https://pris.ly/d/prisma-schema#accessing-environment-variables-from-the-schema
166
+
167
+ # Prisma supports the native connection string format for PostgreSQL, MySQL, SQLite, SQL Server, MongoDB and CockroachDB.
168
+ # See the documentation for all the connection string options: https://pris.ly/d/connection-strings
169
+
170
+ ` : "";
171
+ env += `DATABASE_URL="${url}"`;
172
+ return env;
173
+ };
174
+ var defaultPort = (datasourceProvider) => {
175
+ switch (datasourceProvider) {
176
+ case "mysql":
177
+ return 3306;
178
+ case "sqlserver":
179
+ return 1433;
180
+ case "mongodb":
181
+ return 27017;
182
+ case "postgresql":
183
+ return 5432;
184
+ case "cockroachdb":
185
+ return 26257;
186
+ case PRISMA_POSTGRES_PROVIDER:
187
+ return null;
188
+ }
189
+ return void 0;
190
+ };
191
+ var defaultURL = (datasourceProvider, port = defaultPort(datasourceProvider), schema = "public") => {
192
+ switch (datasourceProvider) {
193
+ case "postgresql":
194
+ return `postgresql://johndoe:randompassword@localhost:${port}/mydb?schema=${schema}`;
195
+ case "cockroachdb":
196
+ return `postgresql://johndoe:randompassword@localhost:${port}/mydb?schema=${schema}`;
197
+ case "mysql":
198
+ return `mysql://johndoe:randompassword@localhost:${port}/mydb`;
199
+ case "sqlserver":
200
+ return `sqlserver://localhost:${port};database=mydb;user=SA;password=randompassword;`;
201
+ case "mongodb":
202
+ return `mongodb+srv://root:randompassword@cluster0.ab1cd.mongodb.net/mydb?retryWrites=true&w=majority`;
203
+ case "sqlite":
204
+ return "file:./dev.db";
205
+ default:
206
+ return void 0;
207
+ }
208
+ };
209
+ var defaultGitIgnore = () => {
210
+ return `node_modules
211
+ # Keep environment variables out of version control
212
+ .env
213
+ `;
214
+ };
215
+ var defaultGeneratorProvider = "prisma-client-js";
216
+ var defaultPreviewFeatures = [];
217
+ var Init = class _Init {
218
+ static new() {
219
+ return new _Init();
220
+ }
221
+ static help = format(`
222
+ Set up a new Prisma project
223
+
224
+ ${bold2("Usage")}
225
+
226
+ ${dim("$")} prisma init [options]
227
+
228
+ ${bold2("Options")}
229
+
230
+ -h, --help Display this help message
231
+ --db Provisions a fully managed Prisma Postgres database on the Prisma Data Platform.
232
+ --datasource-provider Define the datasource provider to use: postgresql, mysql, sqlite, sqlserver, mongodb or cockroachdb
233
+ --generator-provider Define the generator provider to use. Default: \`prisma-client-js\`
234
+ --preview-feature Define a preview feature to use.
235
+ --output Define Prisma Client generator output path to use.
236
+ --url Define a custom datasource url
237
+
238
+ ${bold2("Flags")}
239
+
240
+ --with-model Add example model to created schema file
241
+
242
+ ${bold2("Examples")}
243
+
244
+ Set up a new Prisma project with PostgreSQL (default)
245
+ ${dim("$")} prisma init
246
+
247
+ Set up a new Prisma project and specify MySQL as the datasource provider to use
248
+ ${dim("$")} prisma init --datasource-provider mysql
249
+
250
+ Set up a new Prisma project and specify \`prisma-client-go\` as the generator provider to use
251
+ ${dim("$")} prisma init --generator-provider prisma-client-go
252
+
253
+ Set up a new Prisma project and specify \`x\` and \`y\` as the preview features to use
254
+ ${dim("$")} prisma init --preview-feature x --preview-feature y
255
+
256
+ Set up a new Prisma project and specify \`./generated-client\` as the output path to use
257
+ ${dim("$")} prisma init --output ./generated-client
258
+
259
+ Set up a new Prisma project and specify the url that will be used
260
+ ${dim("$")} prisma init --url mysql://user:password@localhost:3306/mydb
261
+
262
+ Set up a new Prisma project with an example model
263
+ ${dim("$")} prisma init --with-model
264
+ `);
265
+ async parse(argv, _config) {
266
+ const args = arg(argv, {
267
+ "--help": Boolean,
268
+ "-h": "--help",
269
+ "--url": String,
270
+ "--datasource-provider": String,
271
+ "--generator-provider": String,
272
+ "--preview-feature": [String],
273
+ "--output": String,
274
+ "--with-model": Boolean,
275
+ "--db": Boolean,
276
+ "--region": String,
277
+ "--name": String,
278
+ "--non-interactive": Boolean,
279
+ "--prompt": String,
280
+ "--vibe": String
281
+ });
282
+ if (isError(args) || args["--help"]) {
283
+ return this.help();
284
+ }
285
+ checkUnsupportedDataProxy({ cmd: "init", urls: [args["--url"]] });
286
+ const outputDirName = args._[0];
287
+ if (outputDirName) {
288
+ throw Error("The init command does not take any argument.");
289
+ }
290
+ const { datasourceProvider, url } = await match(args).with(
291
+ {
292
+ "--datasource-provider": P.when(
293
+ (datasourceProvider2) => Boolean(datasourceProvider2)
294
+ )
295
+ },
296
+ (input2) => {
297
+ const datasourceProviderLowercase = input2["--datasource-provider"].toLowerCase();
298
+ if (![
299
+ "postgresql",
300
+ "mysql",
301
+ "sqlserver",
302
+ "sqlite",
303
+ "mongodb",
304
+ "cockroachdb",
305
+ "prismapostgres",
306
+ "prisma+postgres"
307
+ ].includes(datasourceProviderLowercase)) {
308
+ throw new Error(
309
+ `Provider "${args["--datasource-provider"]}" is invalid or not supported. Try again with "postgresql", "mysql", "sqlite", "sqlserver", "mongodb" or "cockroachdb".`
310
+ );
311
+ }
312
+ const datasourceProvider2 = datasourceProviderLowercase;
313
+ const url2 = defaultURL(datasourceProvider2);
314
+ return Promise.resolve({
315
+ datasourceProvider: datasourceProvider2,
316
+ url: url2
317
+ });
318
+ }
319
+ ).with(
320
+ {
321
+ "--url": P.when((url2) => Boolean(url2))
322
+ },
323
+ async (input2) => {
324
+ const url2 = input2["--url"];
325
+ const canConnect = await canConnectToDatabase(url2);
326
+ if (canConnect !== true) {
327
+ const { code, message } = canConnect;
328
+ if (code !== "P1003") {
329
+ if (code) {
330
+ throw new Error(`${code}: ${message}`);
331
+ } else {
332
+ throw new Error(message);
333
+ }
334
+ }
335
+ }
336
+ const datasourceProvider2 = protocolToConnectorType(`${url2.split(":")[0]}:`);
337
+ return { datasourceProvider: datasourceProvider2, url: url2 };
338
+ }
339
+ ).otherwise(() => {
340
+ return Promise.resolve({
341
+ datasourceProvider: "postgresql",
342
+ url: void 0
343
+ });
344
+ });
345
+ const generatorProvider = args["--generator-provider"];
346
+ const previewFeatures = args["--preview-feature"];
347
+ const output = args["--output"];
348
+ const isPpgCommand = args["--db"] || datasourceProvider === PRISMA_POSTGRES_PROVIDER || args["--prompt"] || args["--vibe"];
349
+ let prismaPostgresDatabaseUrl;
350
+ let workspaceId = ``;
351
+ let projectId = ``;
352
+ let environmentId = ``;
353
+ const outputDir = process.cwd();
354
+ const prismaFolder = path2.join(outputDir, "prisma");
355
+ let generatedSchema;
356
+ let generatedName;
357
+ if (isPpgCommand) {
358
+ const PlatformCommands = await import("./_-26BQWV6Z.js");
359
+ const credentials = await credentialsFile.load();
360
+ if (isError(credentials))
361
+ throw credentials;
362
+ if (!credentials) {
363
+ if (args["--non-interactive"]) {
364
+ return "Please authenticate before creating a Prisma Postgres project.";
365
+ }
366
+ console.log("This will create a project for you on console.prisma.io and requires you to be authenticated.");
367
+ const authAnswer = await confirm({
368
+ message: "Would you like to authenticate?"
369
+ });
370
+ if (!authAnswer) {
371
+ return "Project creation aborted. You need to authenticate to use Prisma Postgres";
372
+ }
373
+ const authenticationResult = await PlatformCommands.loginOrSignup();
374
+ console.log(`Successfully authenticated as ${bold2(authenticationResult.email)}.`);
375
+ }
376
+ if (args["--prompt"] || args["--vibe"]) {
377
+ const prompt = args["--prompt"] || args["--vibe"] || "";
378
+ const spinner2 = ora(`Generating a Prisma Schema based on your description ${bold2(prompt)} ...`).start();
379
+ try {
380
+ const serverResponseShape = Shape.Struct({
381
+ generatedSchema: Shape.String,
382
+ generatedName: Shape.String
383
+ });
384
+ ({ generatedSchema, generatedName } = Shape.decodeUnknownSync(serverResponseShape)(
385
+ await (await fetch(`https://prisma-generate-server.prisma.workers.dev/`, {
386
+ method: "POST",
387
+ headers: {
388
+ "Content-Type": "application/json"
389
+ },
390
+ body: JSON.stringify({
391
+ description: prompt
392
+ })
393
+ })).json()
394
+ ));
395
+ } catch (e) {
396
+ spinner2.fail();
397
+ throw e;
398
+ }
399
+ spinner2.succeed("Schema is ready");
400
+ }
401
+ console.log("Let's set up your Prisma Postgres database!");
402
+ const platformToken = await PlatformCommands.getTokenOrThrow(args);
403
+ const defaultWorkspace = await PlatformCommands.Workspace.getDefaultWorkspaceOrThrow({ token: platformToken });
404
+ const regions = await getPrismaPostgresRegionsOrThrow({ token: platformToken });
405
+ const ppgRegionSelection = args["--region"] || await select({
406
+ message: "Select your region:",
407
+ default: "us-east-1",
408
+ choices: regions.map((region) => ({
409
+ name: `${region.id} - ${region.displayName}`,
410
+ value: region.id,
411
+ disabled: region.ppgStatus === "unavailable"
412
+ })),
413
+ loop: true
414
+ });
415
+ const projectDisplayNameAnswer = args["--name"] || await input({
416
+ message: "Enter a project name:",
417
+ default: generatedName || "My Prisma Project"
418
+ });
419
+ const spinner = ora(
420
+ `Creating project ${bold2(projectDisplayNameAnswer)} (this may take a few seconds)...`
421
+ ).start();
422
+ try {
423
+ const project = await PlatformCommands.Project.createProjectOrThrow({
424
+ token: platformToken,
425
+ displayName: projectDisplayNameAnswer,
426
+ workspaceId: defaultWorkspace.id,
427
+ allowRemoteDatabases: false,
428
+ ppgRegion: ppgRegionSelection
429
+ });
430
+ spinner.text = `Waiting for your Prisma Postgres database to be ready...`;
431
+ workspaceId = defaultWorkspace.id;
432
+ projectId = project.id;
433
+ environmentId = project.defaultEnvironment.id;
434
+ await poll(
435
+ () => PlatformCommands.Environment.getEnvironmentOrThrow({
436
+ environmentId: project.defaultEnvironment.id,
437
+ token: platformToken
438
+ }),
439
+ (environment) => environment.ppg.status === "healthy" && environment.accelerate.status.enabled,
440
+ 5e3,
441
+ // Poll every 5 seconds
442
+ 12e4
443
+ // if it takes more than two minutes, bail with an error
444
+ );
445
+ const serviceToken = await PlatformCommands.ServiceToken.createOrThrow({
446
+ token: platformToken,
447
+ environmentId: project.defaultEnvironment.id,
448
+ displayName: `database-setup-prismaPostgres-api-key`
449
+ });
450
+ prismaPostgresDatabaseUrl = `${PRISMA_POSTGRES_PROTOCOL}//accelerate.prisma-data.net/?api_key=${serviceToken.value}`;
451
+ spinner.succeed(successMessage("Your Prisma Postgres database is ready \u2705"));
452
+ } catch (error) {
453
+ spinner.fail(error instanceof Error ? error.message : "Something went wrong");
454
+ throw error;
455
+ }
456
+ }
457
+ if (fs2.existsSync(path2.join(outputDir, "schema.prisma")) || fs2.existsSync(prismaFolder) || fs2.existsSync(path2.join(prismaFolder, "schema.prisma"))) {
458
+ if (isPpgCommand) {
459
+ return printPpgInitOutput({
460
+ databaseUrl: prismaPostgresDatabaseUrl,
461
+ workspaceId,
462
+ projectId,
463
+ environmentId,
464
+ isExistingPrismaProject: true
465
+ });
466
+ }
467
+ }
468
+ if (fs2.existsSync(path2.join(outputDir, "schema.prisma"))) {
469
+ console.log(
470
+ printError(`File ${bold2("schema.prisma")} already exists in your project.
471
+ Please try again in a project that is not yet using Prisma.
472
+ `)
473
+ );
474
+ process.exit(1);
475
+ }
476
+ if (fs2.existsSync(prismaFolder)) {
477
+ console.log(
478
+ printError(`A folder called ${bold2("prisma")} already exists in your project.
479
+ Please try again in a project that is not yet using Prisma.
480
+ `)
481
+ );
482
+ process.exit(1);
483
+ }
484
+ if (fs2.existsSync(path2.join(prismaFolder, "schema.prisma"))) {
485
+ console.log(
486
+ printError(`File ${bold2("prisma/schema.prisma")} already exists in your project.
487
+ Please try again in a project that is not yet using Prisma.
488
+ `)
489
+ );
490
+ process.exit(1);
491
+ }
492
+ if (!fs2.existsSync(outputDir)) {
493
+ fs2.mkdirSync(outputDir);
494
+ }
495
+ if (!fs2.existsSync(prismaFolder)) {
496
+ fs2.mkdirSync(prismaFolder);
497
+ }
498
+ const clientOutput = output ?? determineClientOutputPath(prismaFolder);
499
+ fs2.writeFileSync(
500
+ path2.join(prismaFolder, "schema.prisma"),
501
+ generatedSchema || defaultSchema({
502
+ datasourceProvider,
503
+ generatorProvider,
504
+ previewFeatures,
505
+ output: clientOutput,
506
+ withModel: args["--with-model"]
507
+ })
508
+ );
509
+ const databaseUrl = prismaPostgresDatabaseUrl || url;
510
+ const warnings = [];
511
+ const envPath = path2.join(outputDir, ".env");
512
+ if (!fs2.existsSync(envPath)) {
513
+ fs2.writeFileSync(envPath, defaultEnv(databaseUrl));
514
+ } else {
515
+ const envFile = fs2.readFileSync(envPath, { encoding: "utf8" });
516
+ const config = dotenv.parse(envFile);
517
+ if (Object.keys(config).includes("DATABASE_URL")) {
518
+ warnings.push(
519
+ `${yellow("warn")} Prisma would have added DATABASE_URL but it already exists in ${bold2(
520
+ path2.relative(outputDir, envPath)
521
+ )}`
522
+ );
523
+ } else {
524
+ fs2.appendFileSync(envPath, `
525
+
526
+ # This was inserted by \`prisma init\`:
527
+ ` + defaultEnv(databaseUrl));
528
+ }
529
+ }
530
+ const gitignorePath = path2.join(outputDir, ".gitignore");
531
+ try {
532
+ fs2.writeFileSync(gitignorePath, defaultGitIgnore(), { flag: "wx" });
533
+ } catch (e) {
534
+ if (e.code === "EEXIST") {
535
+ warnings.push(
536
+ `${yellow(
537
+ "warn"
538
+ )} You already have a .gitignore file. Don't forget to add \`.env\` in it to not commit any private information.`
539
+ );
540
+ } else {
541
+ console.error("Failed to write .gitignore file, reason: ", e);
542
+ }
543
+ }
544
+ const steps = [];
545
+ if (datasourceProvider === "mongodb") {
546
+ steps.push(`Define models in the schema.prisma file.`);
547
+ } else {
548
+ steps.push(
549
+ `Run ${green(getCommandWithExecutor("prisma db pull"))} to turn your database schema into a Prisma schema.`
550
+ );
551
+ }
552
+ steps.push(
553
+ `Run ${green(
554
+ getCommandWithExecutor("prisma generate")
555
+ )} to generate the Prisma Client. You can then start querying your database.`
556
+ );
557
+ steps.push(
558
+ `Tip: Explore how you can extend the ${green(
559
+ "ORM"
560
+ )} with scalable connection pooling, global caching, and real-time database events. Read: https://pris.ly/cli/beyond-orm`
561
+ );
562
+ if (!url && !args["--datasource-provider"]) {
563
+ steps.unshift(
564
+ `Set the ${green("provider")} of the ${green("datasource")} block in ${green(
565
+ "schema.prisma"
566
+ )} to match your database: ${green("postgresql")}, ${green("mysql")}, ${green("sqlite")}, ${green(
567
+ "sqlserver"
568
+ )}, ${green("mongodb")} or ${green("cockroachdb")}.`
569
+ );
570
+ }
571
+ if (!args["--url"]) {
572
+ steps.unshift(
573
+ `Set the ${green("DATABASE_URL")} in the ${green(
574
+ ".env"
575
+ )} file to point to your existing database. If your database has no tables yet, read https://pris.ly/d/getting-started`
576
+ );
577
+ }
578
+ const defaultOutput = `
579
+ \u2714 Your Prisma schema was created at ${green("prisma/schema.prisma")}
580
+ You can now open it in your favorite editor.
581
+ ${warnings.length > 0 && logger.should.warn() ? `
582
+ ${warnings.join("\n")}
583
+ ` : ""}
584
+ Next steps:
585
+ ${steps.map((s, i) => `${i + 1}. ${s}`).join("\n")}
586
+
587
+ More information in our documentation:
588
+ ${link("https://pris.ly/d/getting-started")}
589
+ `;
590
+ return isPpgCommand ? printPpgInitOutput({ databaseUrl: prismaPostgresDatabaseUrl, workspaceId, projectId, environmentId }) : defaultOutput;
591
+ }
592
+ // help message
593
+ help(error) {
594
+ if (error) {
595
+ return new HelpError(`
596
+ ${bold2(red2(`!`))} ${error}
597
+ ${_Init.help}`);
598
+ }
599
+ return _Init.help;
600
+ }
601
+ };
602
+
603
+ // src/index.ts
2
604
  function run(args, config) {
3
- console.log("Hello world from @primsa/cli-init");
605
+ return new Init().parse(args, config);
4
606
  }
5
607
  export {
6
608
  run
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@prisma/cli-init",
3
- "version": "0.0.1",
3
+ "version": "0.0.3",
4
4
  "description": "Init CLI for Prisma",
5
5
  "type": "module",
6
6
  "sideEffects": false,
@@ -16,5 +16,52 @@
16
16
  "import": "./dist/index.js",
17
17
  "default": "./dist/index.js"
18
18
  }
19
+ },
20
+ "keywords": [
21
+ "cli",
22
+ "prisma",
23
+ "init",
24
+ "development",
25
+ "server",
26
+ "ppg",
27
+ "postgres"
28
+ ],
29
+ "devDependencies": {
30
+ "@arethetypeswrong/cli": "0.17.4",
31
+ "@prisma/get-platform": "6.7.0",
32
+ "@types/fs-extra": "11.0.4",
33
+ "@types/node": "22.3.0",
34
+ "strip-ansi": "7.1.0",
35
+ "tsup": "8.0.2",
36
+ "typescript": "5.8.3",
37
+ "vitest": "3.1.3"
38
+ },
39
+ "dependencies": {
40
+ "@inquirer/prompts": "7.3.3",
41
+ "@prisma/config": "6.7.0",
42
+ "@prisma/debug": "6.7.0",
43
+ "@prisma/generator": "6.7.0",
44
+ "@prisma/internals": "6.7.0",
45
+ "arg": "5.0.2",
46
+ "async-listen": "3.1.0",
47
+ "checkpoint-client": "1.1.33",
48
+ "dotenv": "16.5.0",
49
+ "effect": "3.12.10",
50
+ "fs-extra": "11.3.0",
51
+ "get-tsconfig": "4.10.0",
52
+ "kleur": "4.1.5",
53
+ "node-fetch": "3.3.2",
54
+ "open": "7.4.2",
55
+ "ora": "8.2.0",
56
+ "ts-pattern": "5.6.2",
57
+ "xdg-app-paths": "8.3.0"
58
+ },
59
+ "scripts": {
60
+ "build": "tsup",
61
+ "check:exports": "attw . --pack --profile esm-only",
62
+ "dev": "tsup --watch",
63
+ "lint": "eslint --fix .",
64
+ "test": "vitest",
65
+ "typecheck": "tsc --noEmit"
19
66
  }
20
67
  }