@zenstackhq/cli 3.0.0-alpha.4 → 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.
@@ -1,23 +1,22 @@
1
-
2
- 
3
- > @zenstackhq/cli@3.0.0-alpha.1 build /Users/yiming/git/zenstack/zenstack-v3/packages/cli
4
- > tsup-node
5
-
6
- CLI Building entry: {"index":"src/index.ts"}
7
- CLI Using tsconfig: tsconfig.json
8
- CLI tsup v8.3.5
9
- CLI Using tsup config: /Users/yiming/git/zenstack/zenstack-v3/packages/cli/tsup.config.ts
10
- CLI Target: esnext
11
- CLI Cleaning output folder
12
- ESM Build start
13
- CJS Build start
14
- ESM dist/index.js 14.02 KB
15
- ESM dist/index.js.map 27.76 KB
16
- ESM ⚡️ Build success in 51ms
17
- CJS dist/index.cjs 15.95 KB
18
- CJS dist/index.cjs.map 27.84 KB
19
- CJS ⚡️ Build success in 51ms
20
- DTS Build start
21
- DTS ⚡️ Build success in 1226ms
22
- DTS dist/index.d.ts 108.00 B
23
- DTS dist/index.d.cts 108.00 B
1
+
2
+ > @zenstackhq/cli@3.0.0-alpha.7 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
3
+ > tsup-node
4
+
5
+ CLI Building entry: {"index":"src/index.ts"}
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.0
8
+ CLI Using tsup config: /home/runner/work/zenstack-v3/zenstack-v3/packages/cli/tsup.config.ts
9
+ CLI Target: esnext
10
+ CLI Cleaning output folder
11
+ ESM Build start
12
+ CJS Build start
13
+ CJS dist/index.cjs 19.10 KB
14
+ CJS dist/index.cjs.map 33.40 KB
15
+ CJS ⚡️ Build success in 111ms
16
+ ESM dist/index.js 16.02 KB
17
+ ESM dist/index.js.map 33.25 KB
18
+ ESM ⚡️ Build success in 111ms
19
+ DTS Build start
20
+ DTS ⚡️ Build success in 3501ms
21
+ DTS dist/index.d.ts 108.00 B
22
+ DTS dist/index.d.cts 108.00 B
package/dist/index.cjs CHANGED
@@ -6,9 +6,6 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- var __commonJS = (cb, mod) => function __require() {
10
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
- };
12
9
  var __export = (target, all) => {
13
10
  for (var name in all)
14
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -31,69 +28,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
31
28
  ));
32
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
30
 
34
- // package.json
35
- var require_package = __commonJS({
36
- "package.json"(exports2, module2) {
37
- module2.exports = {
38
- name: "@zenstackhq/cli",
39
- publisher: "zenstack",
40
- displayName: "ZenStack CLI",
41
- description: "FullStack database toolkit with built-in access control and automatic API generation.",
42
- version: "3.0.0-alpha.4",
43
- type: "module",
44
- author: {
45
- name: "ZenStack Team"
46
- },
47
- homepage: "https://zenstack.dev",
48
- license: "MIT",
49
- keywords: [
50
- "orm",
51
- "fullstack",
52
- "react",
53
- "typescript",
54
- "data modeling"
55
- ],
56
- bin: {
57
- zenstack: "bin/cli"
58
- },
59
- scripts: {
60
- build: "tsup-node",
61
- watch: "tsup-node --watch",
62
- lint: "eslint src --ext ts",
63
- test: "vitest",
64
- pack: "pnpm pack"
65
- },
66
- dependencies: {
67
- "@types/node": "^20.0.0",
68
- "@zenstackhq/language": "workspace:*",
69
- "@zenstackhq/sdk": "workspace:*",
70
- "async-exit-hook": "^2.0.1",
71
- colors: "1.4.0",
72
- commander: "^8.3.0",
73
- langium: "~3.3.0",
74
- ora: "^5.4.1",
75
- "package-manager-detector": "^1.3.0",
76
- "tiny-invariant": "^1.3.3",
77
- "ts-pattern": "^4.3.0"
78
- },
79
- peerDependencies: {
80
- prisma: "^6.0.0",
81
- typescript: "^5.0.0"
82
- },
83
- devDependencies: {
84
- "@types/async-exit-hook": "^2.0.0",
85
- "@types/better-sqlite3": "^7.6.13",
86
- "@types/semver": "^7.3.13",
87
- "@types/tmp": "^0.2.6",
88
- "@zenstackhq/runtime": "workspace:*",
89
- "@zenstackhq/testtools": "workspace:*",
90
- "better-sqlite3": "^11.8.1",
91
- tmp: "^0.2.3"
92
- }
93
- };
94
- }
95
- });
96
-
97
31
  // src/index.ts
98
32
  var src_exports = {};
99
33
  __export(src_exports, {
@@ -105,7 +39,7 @@ var import_colors5 = __toESM(require("colors"), 1);
105
39
  var import_commander = require("commander");
106
40
 
107
41
  // src/actions/db.ts
108
- var import_node_path2 = __toESM(require("path"), 1);
42
+ var import_node_fs2 = __toESM(require("fs"), 1);
109
43
 
110
44
  // src/utils/exec-utils.ts
111
45
  var import_child_process = require("child_process");
@@ -130,7 +64,11 @@ function execPackage(cmd, options) {
130
64
  __name(execPackage, "execPackage");
131
65
 
132
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);
133
70
  var import_node_fs = __toESM(require("fs"), 1);
71
+ var import_node_path = __toESM(require("path"), 1);
134
72
 
135
73
  // src/cli-error.ts
136
74
  var CliError = class extends Error {
@@ -140,8 +78,6 @@ var CliError = class extends Error {
140
78
  };
141
79
 
142
80
  // src/actions/action-utils.ts
143
- var import_language = require("@zenstackhq/language");
144
- var import_colors = __toESM(require("colors"), 1);
145
81
  function getSchemaFile(file) {
146
82
  if (file) {
147
83
  if (!import_node_fs.default.existsSync(file)) {
@@ -178,23 +114,69 @@ function handleSubProcessError(err) {
178
114
  }
179
115
  }
180
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");
181
154
 
182
155
  // src/actions/generate.ts
156
+ var import_common_helpers = require("@zenstackhq/common-helpers");
183
157
  var import_ast = require("@zenstackhq/language/ast");
184
- var import_sdk = require("@zenstackhq/sdk");
158
+ var import_sdk2 = require("@zenstackhq/sdk");
185
159
  var import_colors2 = __toESM(require("colors"), 1);
186
- var import_node_fs2 = __toESM(require("fs"), 1);
187
- var import_node_path = __toESM(require("path"), 1);
188
- var import_tiny_invariant = __toESM(require("tiny-invariant"), 1);
189
- async function run(options) {
160
+ var import_node_fs3 = __toESM(require("fs"), 1);
161
+ var import_node_path2 = __toESM(require("path"), 1);
162
+ async function run2(options) {
190
163
  const schemaFile = getSchemaFile(options.schema);
191
164
  const model = await loadSchemaDocument(schemaFile);
192
- const outputPath = options.output ?? import_node_path.default.dirname(schemaFile);
193
- const tsSchemaFile = import_node_path.default.join(outputPath, "schema.ts");
194
- await new import_sdk.TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);
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);
195
168
  await runPlugins(model, outputPath, tsSchemaFile);
196
- const prismaSchema = await new import_sdk.PrismaSchemaGenerator(model).generate();
197
- import_node_fs2.default.writeFileSync(import_node_path.default.join(outputPath, "schema.prisma"), prismaSchema);
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
+ }
198
180
  if (!options.silent) {
199
181
  console.log(import_colors2.default.green("Generation completed successfully."));
200
182
  console.log(`You can now create a ZenStack client with it.
@@ -204,18 +186,18 @@ import { ZenStackClient } from '@zenstackhq/runtime';
204
186
  import { schema } from '${outputPath}/schema';
205
187
 
206
188
  const client = new ZenStackClient(schema, {
207
- dialectConfig: { ... }
189
+ dialectConfig: { ... }
208
190
  });
209
191
  \`\`\`
210
192
  `);
211
193
  }
212
194
  }
213
- __name(run, "run");
195
+ __name(run2, "run");
214
196
  async function runPlugins(model, outputPath, tsSchemaFile) {
215
197
  const plugins = model.declarations.filter(import_ast.isPlugin);
216
198
  for (const plugin of plugins) {
217
199
  const providerField = plugin.fields.find((f) => f.name === "provider");
218
- (0, import_tiny_invariant.default)(providerField, `Plugin ${plugin.name} does not have a provider field`);
200
+ (0, import_common_helpers.invariant)(providerField, `Plugin ${plugin.name} does not have a provider field`);
219
201
  const provider = providerField.value.value;
220
202
  let useProvider = provider;
221
203
  if (useProvider.startsWith("@core/")) {
@@ -232,33 +214,6 @@ async function runPlugins(model, outputPath, tsSchemaFile) {
232
214
  }
233
215
  __name(runPlugins, "runPlugins");
234
216
 
235
- // src/actions/db.ts
236
- async function run2(command, options) {
237
- const schemaFile = getSchemaFile(options.schema);
238
- await run({
239
- schema: schemaFile,
240
- silent: true
241
- });
242
- const prismaSchemaFile = import_node_path2.default.join(import_node_path2.default.dirname(schemaFile), "schema.prisma");
243
- switch (command) {
244
- case "push":
245
- await runPush(prismaSchemaFile, options);
246
- break;
247
- }
248
- }
249
- __name(run2, "run");
250
- async function runPush(prismaSchemaFile, options) {
251
- const cmd = `prisma db push --schema "${prismaSchemaFile}"${options.acceptDataLoss ? " --accept-data-loss" : ""}${options.forceReset ? " --force-reset" : ""} --skip-generate`;
252
- try {
253
- await execPackage(cmd, {
254
- stdio: "inherit"
255
- });
256
- } catch (err) {
257
- handleSubProcessError(err);
258
- }
259
- }
260
- __name(runPush, "runPush");
261
-
262
217
  // src/actions/info.ts
263
218
  var import_colors3 = __toESM(require("colors"), 1);
264
219
  var import_node_path3 = __toESM(require("path"), 1);
@@ -290,7 +245,7 @@ async function getZenStackPackages(projectPath) {
290
245
  type: "json"
291
246
  }
292
247
  })).default;
293
- } catch (err) {
248
+ } catch {
294
249
  return [];
295
250
  }
296
251
  const packages = Array.from(new Set([
@@ -321,7 +276,7 @@ __name(getZenStackPackages, "getZenStackPackages");
321
276
 
322
277
  // src/actions/init.ts
323
278
  var import_colors4 = __toESM(require("colors"), 1);
324
- var import_node_fs3 = __toESM(require("fs"), 1);
279
+ var import_node_fs4 = __toESM(require("fs"), 1);
325
280
  var import_node_path4 = __toESM(require("path"), 1);
326
281
  var import_ora = __toESM(require("ora"), 1);
327
282
  var import_package_manager_detector = require("package-manager-detector");
@@ -397,11 +352,11 @@ async function run4(projectPath) {
397
352
  }
398
353
  }
399
354
  const generationFolder = "zenstack";
400
- if (!import_node_fs3.default.existsSync(import_node_path4.default.join(projectPath, generationFolder))) {
401
- import_node_fs3.default.mkdirSync(import_node_path4.default.join(projectPath, generationFolder));
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));
402
357
  }
403
- if (!import_node_fs3.default.existsSync(import_node_path4.default.join(projectPath, generationFolder, "schema.zmodel"))) {
404
- import_node_fs3.default.writeFileSync(import_node_path4.default.join(projectPath, generationFolder, "schema.zmodel"), STARTER_ZMODEL);
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);
405
360
  } else {
406
361
  console.log(import_colors4.default.yellow("Schema file already exists. Skipping generation of sample."));
407
362
  }
@@ -412,33 +367,35 @@ async function run4(projectPath) {
412
367
  __name(run4, "run");
413
368
 
414
369
  // src/actions/migrate.ts
415
- var import_node_path5 = __toESM(require("path"), 1);
370
+ var import_node_fs5 = __toESM(require("fs"), 1);
416
371
  async function run5(command, options) {
417
372
  const schemaFile = getSchemaFile(options.schema);
418
- await run({
419
- schema: schemaFile,
420
- silent: true
421
- });
422
- const prismaSchemaFile = import_node_path5.default.join(import_node_path5.default.dirname(schemaFile), "schema.prisma");
423
- switch (command) {
424
- case "dev":
425
- await runDev(prismaSchemaFile, options);
426
- break;
427
- case "reset":
428
- await runReset(prismaSchemaFile, options);
429
- break;
430
- case "deploy":
431
- await runDeploy(prismaSchemaFile, options);
432
- break;
433
- case "status":
434
- await runStatus(prismaSchemaFile, options);
435
- break;
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
+ }
436
393
  }
437
394
  }
438
395
  __name(run5, "run");
439
- async function runDev(prismaSchemaFile, _options) {
396
+ async function runDev(prismaSchemaFile, options) {
440
397
  try {
441
- 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" : ""}`, {
442
399
  stdio: "inherit"
443
400
  });
444
401
  } catch (err) {
@@ -486,28 +443,29 @@ function handleSubProcessError2(err) {
486
443
  __name(handleSubProcessError2, "handleSubProcessError");
487
444
 
488
445
  // src/utils/version-utils.ts
446
+ var import_node_fs6 = __toESM(require("fs"), 1);
447
+ var import_node_path5 = __toESM(require("path"), 1);
448
+ var import_node_url = require("url");
449
+ var import_meta = {};
489
450
  function getVersion() {
490
451
  try {
491
- return require("../package.json").version;
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;
492
454
  } catch {
493
- try {
494
- return require_package().version;
495
- } catch {
496
- return void 0;
497
- }
455
+ return void 0;
498
456
  }
499
457
  }
500
458
  __name(getVersion, "getVersion");
501
459
 
502
460
  // src/index.ts
503
461
  var generateAction = /* @__PURE__ */ __name(async (options) => {
504
- await run(options);
462
+ await run2(options);
505
463
  }, "generateAction");
506
464
  var migrateAction = /* @__PURE__ */ __name(async (command, options) => {
507
465
  await run5(command, options);
508
466
  }, "migrateAction");
509
467
  var dbAction = /* @__PURE__ */ __name(async (command, options) => {
510
- await run2(command, options);
468
+ await run(command, options);
511
469
  }, "dbAction");
512
470
  var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
513
471
  await run3(projectPath);
@@ -523,7 +481,7 @@ function createProgram() {
523
481
 
524
482
  Documentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
525
483
  const schemaOption = new import_commander.Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`);
526
- 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);
527
485
  const migrateCommand = program2.command("migrate").description("Update the database schema with migrations.");
528
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));
529
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));
@@ -1 +1 @@
1
- {"version":3,"sources":["../package.json","../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":["{\n \"name\": \"@zenstackhq/cli\",\n \"publisher\": \"zenstack\",\n \"displayName\": \"ZenStack CLI\",\n \"description\": \"FullStack database toolkit with built-in access control and automatic API generation.\",\n \"version\": \"3.0.0-alpha.4\",\n \"type\": \"module\",\n \"author\": {\n \"name\": \"ZenStack Team\"\n },\n \"homepage\": \"https://zenstack.dev\",\n \"license\": \"MIT\",\n \"keywords\": [\n \"orm\",\n \"fullstack\",\n \"react\",\n \"typescript\",\n \"data modeling\"\n ],\n \"bin\": {\n \"zenstack\": \"bin/cli\"\n },\n \"scripts\": {\n \"build\": \"tsup-node\",\n \"watch\": \"tsup-node --watch\",\n \"lint\": \"eslint src --ext ts\",\n \"test\": \"vitest\",\n \"pack\": \"pnpm pack\"\n },\n \"dependencies\": {\n \"@types/node\": \"^20.0.0\",\n \"@zenstackhq/language\": \"workspace:*\",\n \"@zenstackhq/sdk\": \"workspace:*\",\n \"async-exit-hook\": \"^2.0.1\",\n \"colors\": \"1.4.0\",\n \"commander\": \"^8.3.0\",\n \"langium\": \"~3.3.0\",\n \"ora\": \"^5.4.1\",\n \"package-manager-detector\": \"^1.3.0\",\n \"tiny-invariant\": \"^1.3.3\",\n \"ts-pattern\": \"^4.3.0\"\n },\n \"peerDependencies\": {\n \"prisma\": \"^6.0.0\",\n \"typescript\": \"^5.0.0\"\n },\n \"devDependencies\": {\n \"@types/async-exit-hook\": \"^2.0.0\",\n \"@types/better-sqlite3\": \"^7.6.13\",\n \"@types/semver\": \"^7.3.13\",\n \"@types/tmp\": \"^0.2.6\",\n \"@zenstackhq/runtime\": \"workspace:*\",\n \"@zenstackhq/testtools\": \"workspace:*\",\n \"better-sqlite3\": \"^11.8.1\",\n \"tmp\": \"^0.2.3\"\n }\n}\n","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 (\n options: Parameters<typeof actions.generate>[0]\n): 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(\n new Option(\n '-o, --output <path>',\n 'default output directory for core plugins'\n )\n )\n .action(generateAction);\n\n const migrateCommand = program\n .command('migrate')\n .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(\n new Option('--create-only', 'only create migration, do not apply')\n )\n .description(\n 'Create a migration from changes in schema and apply it to the database.'\n )\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(\n 'Reset your database and apply all migrations, all data will be lost.'\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description(\n 'Deploy your pending migrations to your production/staging database.'\n )\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\n .command('db')\n .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(\n new Option('--accept-data-loss', 'ignore data loss warnings')\n )\n .addOption(\n new Option(\n '--force-reset',\n 'force a reset of the database before push'\n )\n )\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description(\n 'Get information of installed ZenStack and related packages.'\n )\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(\n path.dirname(schemaFile),\n 'schema.prisma'\n );\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(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }\n): 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 (\n err instanceof Error &&\n 'status' in err &&\n typeof err.status === 'number'\n ) {\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 { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport type { CliGenerator } from '@zenstackhq/runtime/client';\nimport { PrismaSchemaGenerator, TsSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport invariant from 'tiny-invariant';\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(\n model: Model,\n outputPath: string,\n tsSchemaFile: string\n) {\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(\n providerField,\n `Plugin ${plugin.name} does not have a provider field`\n );\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(\n 'Unable to locate package.json. Are you in a valid project directory?'\n );\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(\n colors.yellow(\n 'WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'\n )\n );\n }\n}\n\nasync function getZenStackPackages(\n projectPath: string\n): 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 (err) {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [\n ...Object.keys(pkgJson.dependencies ?? {}),\n ...Object.keys(pkgJson.devDependencies ?? {}),\n ].filter((p) => p.startsWith('@zenstackhq/') || p === 'zenstack')\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(\n `Unable to determine how to install package \"${pkg.name}\". Please install it manually.`\n );\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 (\n !fs.existsSync(\n path.join(projectPath, generationFolder, 'schema.zmodel')\n )\n ) {\n fs.writeFileSync(\n path.join(projectPath, generationFolder, 'schema.zmodel'),\n STARTER_ZMODEL\n );\n } else {\n console.log(\n colors.yellow(\n 'Schema file already exists. Skipping generation of sample.'\n )\n );\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(\n colors.gray(\n `See \"${generationFolder}/schema.zmodel\" for your database schema.`\n )\n );\n console.log(\n colors.gray(\n 'Run `zenstack generate` to compile the the schema into a TypeScript file.'\n )\n );\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(\n path.dirname(schemaFile),\n 'schema.prisma'\n );\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(\n `prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: { force: boolean }) {\n try {\n await execPackage(\n `prisma migrate reset --schema \"${prismaSchemaFile}\"${\n options.force ? ' --force' : ''\n }`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(\n `prisma migrate deploy --schema \"${prismaSchemaFile}\"`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(\n `prisma migrate status --schema \"${prismaSchemaFile}\"`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (\n err instanceof Error &&\n 'status' in err &&\n typeof err.status === 'number'\n ) {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport function getVersion(): string | undefined {\n try {\n return require('../package.json').version;\n } catch {\n try {\n // dev environment\n return require('../../package.json').version;\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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","names":["exports","module","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","err","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","getVersion","require","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"]}