@zenstackhq/cli 3.0.0-alpha.6 → 3.0.0-alpha.7
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/.turbo/turbo-build.log +8 -8
- package/dist/index.cjs +96 -73
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +95 -72
- package/dist/index.js.map +1 -1
- package/package.json +10 -8
- package/src/actions/action-utils.ts +12 -2
- package/src/actions/db.ts +27 -26
- package/src/actions/generate.ts +10 -2
- package/src/actions/migrate.ts +44 -31
- package/src/index.ts +7 -0
- package/test/db.test.ts +18 -0
- package/test/generate.test.ts +44 -0
- package/test/init.test.ts +13 -0
- package/test/migrate.test.ts +41 -0
- package/test/utils.ts +23 -0
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @zenstackhq/cli@3.0.0-alpha.
|
|
2
|
+
> @zenstackhq/cli@3.0.0-alpha.7 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
|
|
3
3
|
> tsup-node
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts"}
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
13
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m19.10 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m33.40 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 111ms
|
|
16
|
+
[32mESM[39m [1mdist/index.js [22m[32m16.02 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m33.25 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 111ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 3501ms
|
|
21
21
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m108.00 B[39m
|
|
22
22
|
[32mDTS[39m [1mdist/index.d.cts [22m[32m108.00 B[39m
|
package/dist/index.cjs
CHANGED
|
@@ -39,7 +39,7 @@ var import_colors5 = __toESM(require("colors"), 1);
|
|
|
39
39
|
var import_commander = require("commander");
|
|
40
40
|
|
|
41
41
|
// src/actions/db.ts
|
|
42
|
-
var
|
|
42
|
+
var import_node_fs2 = __toESM(require("fs"), 1);
|
|
43
43
|
|
|
44
44
|
// src/utils/exec-utils.ts
|
|
45
45
|
var import_child_process = require("child_process");
|
|
@@ -64,7 +64,11 @@ function execPackage(cmd, options) {
|
|
|
64
64
|
__name(execPackage, "execPackage");
|
|
65
65
|
|
|
66
66
|
// src/actions/action-utils.ts
|
|
67
|
+
var import_language = require("@zenstackhq/language");
|
|
68
|
+
var import_sdk = require("@zenstackhq/sdk");
|
|
69
|
+
var import_colors = __toESM(require("colors"), 1);
|
|
67
70
|
var import_node_fs = __toESM(require("fs"), 1);
|
|
71
|
+
var import_node_path = __toESM(require("path"), 1);
|
|
68
72
|
|
|
69
73
|
// src/cli-error.ts
|
|
70
74
|
var CliError = class extends Error {
|
|
@@ -74,8 +78,6 @@ var CliError = class extends Error {
|
|
|
74
78
|
};
|
|
75
79
|
|
|
76
80
|
// src/actions/action-utils.ts
|
|
77
|
-
var import_language = require("@zenstackhq/language");
|
|
78
|
-
var import_colors = __toESM(require("colors"), 1);
|
|
79
81
|
function getSchemaFile(file) {
|
|
80
82
|
if (file) {
|
|
81
83
|
if (!import_node_fs.default.existsSync(file)) {
|
|
@@ -112,23 +114,69 @@ function handleSubProcessError(err) {
|
|
|
112
114
|
}
|
|
113
115
|
}
|
|
114
116
|
__name(handleSubProcessError, "handleSubProcessError");
|
|
117
|
+
async function generateTempPrismaSchema(zmodelPath) {
|
|
118
|
+
const model = await loadSchemaDocument(zmodelPath);
|
|
119
|
+
const prismaSchema = await new import_sdk.PrismaSchemaGenerator(model).generate();
|
|
120
|
+
const prismaSchemaFile = import_node_path.default.resolve(import_node_path.default.dirname(zmodelPath), "~schema.prisma");
|
|
121
|
+
import_node_fs.default.writeFileSync(prismaSchemaFile, prismaSchema);
|
|
122
|
+
return prismaSchemaFile;
|
|
123
|
+
}
|
|
124
|
+
__name(generateTempPrismaSchema, "generateTempPrismaSchema");
|
|
125
|
+
|
|
126
|
+
// src/actions/db.ts
|
|
127
|
+
async function run(command, options) {
|
|
128
|
+
switch (command) {
|
|
129
|
+
case "push":
|
|
130
|
+
await runPush(options);
|
|
131
|
+
break;
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
__name(run, "run");
|
|
135
|
+
async function runPush(options) {
|
|
136
|
+
const schemaFile = getSchemaFile(options.schema);
|
|
137
|
+
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
|
|
138
|
+
try {
|
|
139
|
+
const cmd = `prisma db push --schema "${prismaSchemaFile}"${options.acceptDataLoss ? " --accept-data-loss" : ""}${options.forceReset ? " --force-reset" : ""} --skip-generate`;
|
|
140
|
+
try {
|
|
141
|
+
await execPackage(cmd, {
|
|
142
|
+
stdio: "inherit"
|
|
143
|
+
});
|
|
144
|
+
} catch (err) {
|
|
145
|
+
handleSubProcessError(err);
|
|
146
|
+
}
|
|
147
|
+
} finally {
|
|
148
|
+
if (import_node_fs2.default.existsSync(prismaSchemaFile)) {
|
|
149
|
+
import_node_fs2.default.unlinkSync(prismaSchemaFile);
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
__name(runPush, "runPush");
|
|
115
154
|
|
|
116
155
|
// src/actions/generate.ts
|
|
117
156
|
var import_common_helpers = require("@zenstackhq/common-helpers");
|
|
118
157
|
var import_ast = require("@zenstackhq/language/ast");
|
|
119
|
-
var
|
|
158
|
+
var import_sdk2 = require("@zenstackhq/sdk");
|
|
120
159
|
var import_colors2 = __toESM(require("colors"), 1);
|
|
121
|
-
var
|
|
122
|
-
var
|
|
123
|
-
async function
|
|
160
|
+
var import_node_fs3 = __toESM(require("fs"), 1);
|
|
161
|
+
var import_node_path2 = __toESM(require("path"), 1);
|
|
162
|
+
async function run2(options) {
|
|
124
163
|
const schemaFile = getSchemaFile(options.schema);
|
|
125
164
|
const model = await loadSchemaDocument(schemaFile);
|
|
126
|
-
const outputPath = options.output ??
|
|
127
|
-
const tsSchemaFile =
|
|
128
|
-
await new
|
|
165
|
+
const outputPath = options.output ?? import_node_path2.default.dirname(schemaFile);
|
|
166
|
+
const tsSchemaFile = import_node_path2.default.join(outputPath, "schema.ts");
|
|
167
|
+
await new import_sdk2.TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);
|
|
129
168
|
await runPlugins(model, outputPath, tsSchemaFile);
|
|
130
|
-
|
|
131
|
-
|
|
169
|
+
if (options.savePrismaSchema) {
|
|
170
|
+
const prismaSchema = await new import_sdk2.PrismaSchemaGenerator(model).generate();
|
|
171
|
+
let prismaSchemaFile = import_node_path2.default.join(outputPath, "schema.prisma");
|
|
172
|
+
if (typeof options.savePrismaSchema === "string") {
|
|
173
|
+
prismaSchemaFile = import_node_path2.default.resolve(outputPath, options.savePrismaSchema);
|
|
174
|
+
import_node_fs3.default.mkdirSync(import_node_path2.default.dirname(prismaSchemaFile), {
|
|
175
|
+
recursive: true
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
import_node_fs3.default.writeFileSync(prismaSchemaFile, prismaSchema);
|
|
179
|
+
}
|
|
132
180
|
if (!options.silent) {
|
|
133
181
|
console.log(import_colors2.default.green("Generation completed successfully."));
|
|
134
182
|
console.log(`You can now create a ZenStack client with it.
|
|
@@ -144,7 +192,7 @@ const client = new ZenStackClient(schema, {
|
|
|
144
192
|
`);
|
|
145
193
|
}
|
|
146
194
|
}
|
|
147
|
-
__name(
|
|
195
|
+
__name(run2, "run");
|
|
148
196
|
async function runPlugins(model, outputPath, tsSchemaFile) {
|
|
149
197
|
const plugins = model.declarations.filter(import_ast.isPlugin);
|
|
150
198
|
for (const plugin of plugins) {
|
|
@@ -166,33 +214,6 @@ async function runPlugins(model, outputPath, tsSchemaFile) {
|
|
|
166
214
|
}
|
|
167
215
|
__name(runPlugins, "runPlugins");
|
|
168
216
|
|
|
169
|
-
// src/actions/db.ts
|
|
170
|
-
async function run2(command, options) {
|
|
171
|
-
const schemaFile = getSchemaFile(options.schema);
|
|
172
|
-
await run({
|
|
173
|
-
schema: schemaFile,
|
|
174
|
-
silent: true
|
|
175
|
-
});
|
|
176
|
-
const prismaSchemaFile = import_node_path2.default.join(import_node_path2.default.dirname(schemaFile), "schema.prisma");
|
|
177
|
-
switch (command) {
|
|
178
|
-
case "push":
|
|
179
|
-
await runPush(prismaSchemaFile, options);
|
|
180
|
-
break;
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
__name(run2, "run");
|
|
184
|
-
async function runPush(prismaSchemaFile, options) {
|
|
185
|
-
const cmd = `prisma db push --schema "${prismaSchemaFile}"${options.acceptDataLoss ? " --accept-data-loss" : ""}${options.forceReset ? " --force-reset" : ""} --skip-generate`;
|
|
186
|
-
try {
|
|
187
|
-
await execPackage(cmd, {
|
|
188
|
-
stdio: "inherit"
|
|
189
|
-
});
|
|
190
|
-
} catch (err) {
|
|
191
|
-
handleSubProcessError(err);
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
__name(runPush, "runPush");
|
|
195
|
-
|
|
196
217
|
// src/actions/info.ts
|
|
197
218
|
var import_colors3 = __toESM(require("colors"), 1);
|
|
198
219
|
var import_node_path3 = __toESM(require("path"), 1);
|
|
@@ -255,7 +276,7 @@ __name(getZenStackPackages, "getZenStackPackages");
|
|
|
255
276
|
|
|
256
277
|
// src/actions/init.ts
|
|
257
278
|
var import_colors4 = __toESM(require("colors"), 1);
|
|
258
|
-
var
|
|
279
|
+
var import_node_fs4 = __toESM(require("fs"), 1);
|
|
259
280
|
var import_node_path4 = __toESM(require("path"), 1);
|
|
260
281
|
var import_ora = __toESM(require("ora"), 1);
|
|
261
282
|
var import_package_manager_detector = require("package-manager-detector");
|
|
@@ -331,11 +352,11 @@ async function run4(projectPath) {
|
|
|
331
352
|
}
|
|
332
353
|
}
|
|
333
354
|
const generationFolder = "zenstack";
|
|
334
|
-
if (!
|
|
335
|
-
|
|
355
|
+
if (!import_node_fs4.default.existsSync(import_node_path4.default.join(projectPath, generationFolder))) {
|
|
356
|
+
import_node_fs4.default.mkdirSync(import_node_path4.default.join(projectPath, generationFolder));
|
|
336
357
|
}
|
|
337
|
-
if (!
|
|
338
|
-
|
|
358
|
+
if (!import_node_fs4.default.existsSync(import_node_path4.default.join(projectPath, generationFolder, "schema.zmodel"))) {
|
|
359
|
+
import_node_fs4.default.writeFileSync(import_node_path4.default.join(projectPath, generationFolder, "schema.zmodel"), STARTER_ZMODEL);
|
|
339
360
|
} else {
|
|
340
361
|
console.log(import_colors4.default.yellow("Schema file already exists. Skipping generation of sample."));
|
|
341
362
|
}
|
|
@@ -346,33 +367,35 @@ async function run4(projectPath) {
|
|
|
346
367
|
__name(run4, "run");
|
|
347
368
|
|
|
348
369
|
// src/actions/migrate.ts
|
|
349
|
-
var
|
|
370
|
+
var import_node_fs5 = __toESM(require("fs"), 1);
|
|
350
371
|
async function run5(command, options) {
|
|
351
372
|
const schemaFile = getSchemaFile(options.schema);
|
|
352
|
-
await
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
358
|
-
|
|
359
|
-
|
|
360
|
-
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
373
|
+
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
|
|
374
|
+
try {
|
|
375
|
+
switch (command) {
|
|
376
|
+
case "dev":
|
|
377
|
+
await runDev(prismaSchemaFile, options);
|
|
378
|
+
break;
|
|
379
|
+
case "reset":
|
|
380
|
+
await runReset(prismaSchemaFile, options);
|
|
381
|
+
break;
|
|
382
|
+
case "deploy":
|
|
383
|
+
await runDeploy(prismaSchemaFile, options);
|
|
384
|
+
break;
|
|
385
|
+
case "status":
|
|
386
|
+
await runStatus(prismaSchemaFile, options);
|
|
387
|
+
break;
|
|
388
|
+
}
|
|
389
|
+
} finally {
|
|
390
|
+
if (import_node_fs5.default.existsSync(prismaSchemaFile)) {
|
|
391
|
+
import_node_fs5.default.unlinkSync(prismaSchemaFile);
|
|
392
|
+
}
|
|
370
393
|
}
|
|
371
394
|
}
|
|
372
395
|
__name(run5, "run");
|
|
373
|
-
async function runDev(prismaSchemaFile,
|
|
396
|
+
async function runDev(prismaSchemaFile, options) {
|
|
374
397
|
try {
|
|
375
|
-
await execPackage(`prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate`, {
|
|
398
|
+
await execPackage(`prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate${options.name ? ` --name ${options.name}` : ""}${options.createOnly ? " --create-only" : ""}`, {
|
|
376
399
|
stdio: "inherit"
|
|
377
400
|
});
|
|
378
401
|
} catch (err) {
|
|
@@ -420,14 +443,14 @@ function handleSubProcessError2(err) {
|
|
|
420
443
|
__name(handleSubProcessError2, "handleSubProcessError");
|
|
421
444
|
|
|
422
445
|
// src/utils/version-utils.ts
|
|
423
|
-
var
|
|
424
|
-
var
|
|
446
|
+
var import_node_fs6 = __toESM(require("fs"), 1);
|
|
447
|
+
var import_node_path5 = __toESM(require("path"), 1);
|
|
425
448
|
var import_node_url = require("url");
|
|
426
449
|
var import_meta = {};
|
|
427
450
|
function getVersion() {
|
|
428
451
|
try {
|
|
429
|
-
const _dirname = typeof __dirname !== "undefined" ? __dirname :
|
|
430
|
-
return JSON.parse(
|
|
452
|
+
const _dirname = typeof __dirname !== "undefined" ? __dirname : import_node_path5.default.dirname((0, import_node_url.fileURLToPath)(import_meta.url));
|
|
453
|
+
return JSON.parse(import_node_fs6.default.readFileSync(import_node_path5.default.join(_dirname, "../package.json"), "utf8")).version;
|
|
431
454
|
} catch {
|
|
432
455
|
return void 0;
|
|
433
456
|
}
|
|
@@ -436,13 +459,13 @@ __name(getVersion, "getVersion");
|
|
|
436
459
|
|
|
437
460
|
// src/index.ts
|
|
438
461
|
var generateAction = /* @__PURE__ */ __name(async (options) => {
|
|
439
|
-
await
|
|
462
|
+
await run2(options);
|
|
440
463
|
}, "generateAction");
|
|
441
464
|
var migrateAction = /* @__PURE__ */ __name(async (command, options) => {
|
|
442
465
|
await run5(command, options);
|
|
443
466
|
}, "migrateAction");
|
|
444
467
|
var dbAction = /* @__PURE__ */ __name(async (command, options) => {
|
|
445
|
-
await
|
|
468
|
+
await run(command, options);
|
|
446
469
|
}, "dbAction");
|
|
447
470
|
var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
448
471
|
await run3(projectPath);
|
|
@@ -458,7 +481,7 @@ function createProgram() {
|
|
|
458
481
|
|
|
459
482
|
Documentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
|
|
460
483
|
const schemaOption = new import_commander.Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`);
|
|
461
|
-
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new import_commander.Option("-o, --output <path>", "default output directory for core plugins")).action(generateAction);
|
|
484
|
+
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new import_commander.Option("--silent", "do not print any output")).addOption(new import_commander.Option("--save-prisma-schema [path]", "save a Prisma schema file, by default into the output directory")).addOption(new import_commander.Option("-o, --output <path>", "default output directory for core plugins")).action(generateAction);
|
|
462
485
|
const migrateCommand = program2.command("migrate").description("Update the database schema with migrations.");
|
|
463
486
|
migrateCommand.command("dev").addOption(schemaOption).addOption(new import_commander.Option("-n, --name <name>", "migration name")).addOption(new import_commander.Option("--create-only", "only create migration, do not apply")).description("Create a migration from changes in schema and apply it to the database.").action((options) => migrateAction("dev", options));
|
|
464
487
|
migrateCommand.command("reset").addOption(schemaOption).addOption(new import_commander.Option("--force", "skip the confirmation prompt")).description("Reset your database and apply all migrations, all data will be lost.").action((options) => migrateAction("reset", options));
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport * as actions from './actions';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is a Prisma power pack for building full-stack apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .description('check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n return program;\n}\n\nconst program = createProgram();\nprogram.parse(process.argv);\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile, handleSubProcessError } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'push':\n await runPush(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runPush(prismaSchemaFile: string, options: any) {\n const cmd = `prisma db push --schema \"${prismaSchemaFile}\"${\n options.acceptDataLoss ? ' --accept-data-loss' : ''\n }${options.forceReset ? ' --force-reset' : ''} --skip-generate`;\n try {\n await execPackage(cmd, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import fs from 'node:fs';\nimport { CliError } from '../cli-error';\nimport { loadDocument } from '@zenstackhq/language';\nimport colors from 'colors';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n console.error(colors.red('Error loading schema:'));\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Failed to load schema');\n }\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator, TsSchemaGenerator, type CliGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: boolean;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = options.output ?? path.dirname(schemaFile);\n\n // generate TS schema\n const tsSchemaFile = path.join(outputPath, 'schema.ts');\n await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);\n\n await runPlugins(model, outputPath, tsSchemaFile);\n\n // generate Prisma schema\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outputPath, 'schema.prisma'), prismaSchema);\n\n if (!options.silent) {\n console.log(colors.green('Generation completed successfully.'));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialectConfig: { ... }\n});\n\\`\\`\\`\n`);\n }\n}\n\nasync function runPlugins(model: Model, outputPath: string, tsSchemaFile: string) {\n const plugins = model.declarations.filter(isPlugin);\n for (const plugin of plugins) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n let useProvider = provider;\n if (useProvider.startsWith('@core/')) {\n useProvider = `@zenstackhq/runtime/plugins/${useProvider.slice(6)}`;\n }\n const generator = (await import(useProvider)).default as CliGenerator;\n console.log('Running generator:', provider);\n await generator({ model, outputPath, tsSchemaFile });\n }\n}\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from './zenstack/schema';\nimport SQLite from 'better-sqlite3';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialectConfig: {\n database: new SQLite('./zenstack/dev.db'),\n },\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as any);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runDev(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: { force: boolean }) {\n try {\n await execPackage(`prisma migrate reset --schema \"${prismaSchemaFile}\"${options.force ? ' --force' : ''}`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate deploy --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_path","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","console","error","colors","red","errors","forEach","err","model","handleSubProcessError","Error","status","process","exit","import_colors","import_node_fs","run","options","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","output","path","dirname","tsSchemaFile","join","TsSchemaGenerator","generate","runPlugins","prismaSchema","PrismaSchemaGenerator","fs","writeFileSync","silent","console","log","colors","green","plugins","declarations","filter","isPlugin","plugin","providerField","fields","find","f","name","invariant","provider","value","useProvider","startsWith","slice","generator","default","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runPush","cmd","acceptDataLoss","forceReset","execPackage","stdio","err","handleSubProcessError","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runDev","runReset","runDeploy","runStatus","_options","execPackage","stdio","err","handleSubProcessError","force","Error","status","process","exit","import_node_fs","import_node_path","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","dbCommand","argument","parse","process","argv"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport * as actions from './actions';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is a Prisma power pack for building full-stack apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(new Option('--silent', 'do not print any output'))\n .addOption(\n new Option(\n '--save-prisma-schema [path]',\n 'save a Prisma schema file, by default into the output directory',\n ),\n )\n .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .description('check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n return program;\n}\n\nconst program = createProgram();\nprogram.parse(process.argv);\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = `prisma db push --schema \"${prismaSchemaFile}\"${\n options.acceptDataLoss ? ' --accept-data-loss' : ''\n }${options.forceReset ? ' --force-reset' : ''} --skip-generate`;\n try {\n await execPackage(cmd, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n console.error(colors.red('Error loading schema:'));\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Failed to load schema');\n }\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string) {\n const model = await loadSchemaDocument(zmodelPath);\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n const prismaSchemaFile = path.resolve(path.dirname(zmodelPath), '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator, TsSchemaGenerator, type CliGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: boolean;\n savePrismaSchema?: string | boolean;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = options.output ?? path.dirname(schemaFile);\n\n // generate TS schema\n const tsSchemaFile = path.join(outputPath, 'schema.ts');\n await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);\n\n await runPlugins(model, outputPath, tsSchemaFile);\n\n // generate Prisma schema\n if (options.savePrismaSchema) {\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n let prismaSchemaFile = path.join(outputPath, 'schema.prisma');\n if (typeof options.savePrismaSchema === 'string') {\n prismaSchemaFile = path.resolve(outputPath, options.savePrismaSchema);\n fs.mkdirSync(path.dirname(prismaSchemaFile), { recursive: true });\n }\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n }\n\n if (!options.silent) {\n console.log(colors.green('Generation completed successfully.'));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialectConfig: { ... }\n});\n\\`\\`\\`\n`);\n }\n}\n\nasync function runPlugins(model: Model, outputPath: string, tsSchemaFile: string) {\n const plugins = model.declarations.filter(isPlugin);\n for (const plugin of plugins) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n let useProvider = provider;\n if (useProvider.startsWith('@core/')) {\n useProvider = `@zenstackhq/runtime/plugins/${useProvider.slice(6)}`;\n }\n const generator = (await import(useProvider)).default as CliGenerator;\n console.log('Running generator:', provider);\n await generator({ model, outputPath, tsSchemaFile });\n }\n}\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from './zenstack/schema';\nimport SQLite from 'better-sqlite3';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialectConfig: {\n database: new SQLite('./zenstack/dev.db'),\n },\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n await execPackage(\n `prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate${options.name ? ` --name ${options.name}` : ''}${options.createOnly ? ' --create-only' : ''}`,\n {\n stdio: 'inherit',\n },\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n await execPackage(`prisma migrate reset --schema \"${prismaSchemaFile}\"${options.force ? ' --force' : ''}`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n await execPackage(`prisma migrate deploy --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","console","error","colors","red","errors","forEach","err","model","handleSubProcessError","Error","status","process","exit","generateTempPrismaSchema","zmodelPath","prismaSchema","PrismaSchemaGenerator","generate","prismaSchemaFile","path","resolve","dirname","writeFileSync","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","execPackage","stdio","err","handleSubProcessError","fs","existsSync","unlinkSync","import_sdk","import_colors","import_node_fs","import_node_path","run","options","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","output","path","dirname","tsSchemaFile","join","TsSchemaGenerator","generate","runPlugins","savePrismaSchema","prismaSchema","PrismaSchemaGenerator","prismaSchemaFile","resolve","fs","mkdirSync","recursive","writeFileSync","silent","console","log","colors","green","plugins","declarations","filter","isPlugin","plugin","providerField","fields","find","f","name","invariant","provider","value","useProvider","startsWith","slice","generator","default","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_fs","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","fs","existsSync","unlinkSync","execPackage","name","createOnly","stdio","err","handleSubProcessError","force","_options","Error","status","process","exit","import_node_fs","import_node_path","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","dbCommand","argument","parse","process","argv"]}
|