@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.
- package/.turbo/turbo-build.log +22 -23
- package/dist/index.cjs +103 -145
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +103 -153
- package/dist/index.js.map +1 -1
- package/eslint.config.js +4 -0
- package/package.json +12 -15
- package/src/actions/action-utils.ts +14 -8
- package/src/actions/db.ts +27 -29
- package/src/actions/generate.ts +15 -15
- package/src/actions/info.ts +9 -18
- package/src/actions/init.ts +6 -27
- package/src/actions/migrate.ts +50 -58
- package/src/index.ts +18 -39
- package/src/utils/exec-utils.ts +2 -5
- package/src/utils/version-utils.ts +9 -9
- 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/tsconfig.json +1 -1
- package/.turbo/turbo-lint.log +0 -18
package/dist/index.js
CHANGED
|
@@ -1,78 +1,5 @@
|
|
|
1
1
|
var __defProp = Object.defineProperty;
|
|
2
|
-
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
3
2
|
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
4
|
-
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
5
|
-
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
6
|
-
}) : x)(function(x) {
|
|
7
|
-
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
8
|
-
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
9
|
-
});
|
|
10
|
-
var __commonJS = (cb, mod) => function __require2() {
|
|
11
|
-
return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
|
|
12
|
-
};
|
|
13
|
-
|
|
14
|
-
// package.json
|
|
15
|
-
var require_package = __commonJS({
|
|
16
|
-
"package.json"(exports, module) {
|
|
17
|
-
module.exports = {
|
|
18
|
-
name: "@zenstackhq/cli",
|
|
19
|
-
publisher: "zenstack",
|
|
20
|
-
displayName: "ZenStack CLI",
|
|
21
|
-
description: "FullStack database toolkit with built-in access control and automatic API generation.",
|
|
22
|
-
version: "3.0.0-alpha.4",
|
|
23
|
-
type: "module",
|
|
24
|
-
author: {
|
|
25
|
-
name: "ZenStack Team"
|
|
26
|
-
},
|
|
27
|
-
homepage: "https://zenstack.dev",
|
|
28
|
-
license: "MIT",
|
|
29
|
-
keywords: [
|
|
30
|
-
"orm",
|
|
31
|
-
"fullstack",
|
|
32
|
-
"react",
|
|
33
|
-
"typescript",
|
|
34
|
-
"data modeling"
|
|
35
|
-
],
|
|
36
|
-
bin: {
|
|
37
|
-
zenstack: "bin/cli"
|
|
38
|
-
},
|
|
39
|
-
scripts: {
|
|
40
|
-
build: "tsup-node",
|
|
41
|
-
watch: "tsup-node --watch",
|
|
42
|
-
lint: "eslint src --ext ts",
|
|
43
|
-
test: "vitest",
|
|
44
|
-
pack: "pnpm pack"
|
|
45
|
-
},
|
|
46
|
-
dependencies: {
|
|
47
|
-
"@types/node": "^20.0.0",
|
|
48
|
-
"@zenstackhq/language": "workspace:*",
|
|
49
|
-
"@zenstackhq/sdk": "workspace:*",
|
|
50
|
-
"async-exit-hook": "^2.0.1",
|
|
51
|
-
colors: "1.4.0",
|
|
52
|
-
commander: "^8.3.0",
|
|
53
|
-
langium: "~3.3.0",
|
|
54
|
-
ora: "^5.4.1",
|
|
55
|
-
"package-manager-detector": "^1.3.0",
|
|
56
|
-
"tiny-invariant": "^1.3.3",
|
|
57
|
-
"ts-pattern": "^4.3.0"
|
|
58
|
-
},
|
|
59
|
-
peerDependencies: {
|
|
60
|
-
prisma: "^6.0.0",
|
|
61
|
-
typescript: "^5.0.0"
|
|
62
|
-
},
|
|
63
|
-
devDependencies: {
|
|
64
|
-
"@types/async-exit-hook": "^2.0.0",
|
|
65
|
-
"@types/better-sqlite3": "^7.6.13",
|
|
66
|
-
"@types/semver": "^7.3.13",
|
|
67
|
-
"@types/tmp": "^0.2.6",
|
|
68
|
-
"@zenstackhq/runtime": "workspace:*",
|
|
69
|
-
"@zenstackhq/testtools": "workspace:*",
|
|
70
|
-
"better-sqlite3": "^11.8.1",
|
|
71
|
-
tmp: "^0.2.3"
|
|
72
|
-
}
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
});
|
|
76
3
|
|
|
77
4
|
// src/index.ts
|
|
78
5
|
import { ZModelLanguageMetaData } from "@zenstackhq/language";
|
|
@@ -80,7 +7,7 @@ import colors5 from "colors";
|
|
|
80
7
|
import { Command, Option } from "commander";
|
|
81
8
|
|
|
82
9
|
// src/actions/db.ts
|
|
83
|
-
import
|
|
10
|
+
import fs2 from "fs";
|
|
84
11
|
|
|
85
12
|
// src/utils/exec-utils.ts
|
|
86
13
|
import { execSync as _exec } from "child_process";
|
|
@@ -105,7 +32,11 @@ function execPackage(cmd, options) {
|
|
|
105
32
|
__name(execPackage, "execPackage");
|
|
106
33
|
|
|
107
34
|
// src/actions/action-utils.ts
|
|
108
|
-
import
|
|
35
|
+
import { loadDocument } from "@zenstackhq/language";
|
|
36
|
+
import { PrismaSchemaGenerator } from "@zenstackhq/sdk";
|
|
37
|
+
import colors from "colors";
|
|
38
|
+
import fs from "fs";
|
|
39
|
+
import path from "path";
|
|
109
40
|
|
|
110
41
|
// src/cli-error.ts
|
|
111
42
|
var CliError = class extends Error {
|
|
@@ -115,8 +46,6 @@ var CliError = class extends Error {
|
|
|
115
46
|
};
|
|
116
47
|
|
|
117
48
|
// src/actions/action-utils.ts
|
|
118
|
-
import { loadDocument } from "@zenstackhq/language";
|
|
119
|
-
import colors from "colors";
|
|
120
49
|
function getSchemaFile(file) {
|
|
121
50
|
if (file) {
|
|
122
51
|
if (!fs.existsSync(file)) {
|
|
@@ -153,23 +82,69 @@ function handleSubProcessError(err) {
|
|
|
153
82
|
}
|
|
154
83
|
}
|
|
155
84
|
__name(handleSubProcessError, "handleSubProcessError");
|
|
85
|
+
async function generateTempPrismaSchema(zmodelPath) {
|
|
86
|
+
const model = await loadSchemaDocument(zmodelPath);
|
|
87
|
+
const prismaSchema = await new PrismaSchemaGenerator(model).generate();
|
|
88
|
+
const prismaSchemaFile = path.resolve(path.dirname(zmodelPath), "~schema.prisma");
|
|
89
|
+
fs.writeFileSync(prismaSchemaFile, prismaSchema);
|
|
90
|
+
return prismaSchemaFile;
|
|
91
|
+
}
|
|
92
|
+
__name(generateTempPrismaSchema, "generateTempPrismaSchema");
|
|
93
|
+
|
|
94
|
+
// src/actions/db.ts
|
|
95
|
+
async function run(command, options) {
|
|
96
|
+
switch (command) {
|
|
97
|
+
case "push":
|
|
98
|
+
await runPush(options);
|
|
99
|
+
break;
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
__name(run, "run");
|
|
103
|
+
async function runPush(options) {
|
|
104
|
+
const schemaFile = getSchemaFile(options.schema);
|
|
105
|
+
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
|
|
106
|
+
try {
|
|
107
|
+
const cmd = `prisma db push --schema "${prismaSchemaFile}"${options.acceptDataLoss ? " --accept-data-loss" : ""}${options.forceReset ? " --force-reset" : ""} --skip-generate`;
|
|
108
|
+
try {
|
|
109
|
+
await execPackage(cmd, {
|
|
110
|
+
stdio: "inherit"
|
|
111
|
+
});
|
|
112
|
+
} catch (err) {
|
|
113
|
+
handleSubProcessError(err);
|
|
114
|
+
}
|
|
115
|
+
} finally {
|
|
116
|
+
if (fs2.existsSync(prismaSchemaFile)) {
|
|
117
|
+
fs2.unlinkSync(prismaSchemaFile);
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
__name(runPush, "runPush");
|
|
156
122
|
|
|
157
123
|
// src/actions/generate.ts
|
|
124
|
+
import { invariant } from "@zenstackhq/common-helpers";
|
|
158
125
|
import { isPlugin } from "@zenstackhq/language/ast";
|
|
159
|
-
import { PrismaSchemaGenerator, TsSchemaGenerator } from "@zenstackhq/sdk";
|
|
126
|
+
import { PrismaSchemaGenerator as PrismaSchemaGenerator2, TsSchemaGenerator } from "@zenstackhq/sdk";
|
|
160
127
|
import colors2 from "colors";
|
|
161
|
-
import
|
|
162
|
-
import
|
|
163
|
-
|
|
164
|
-
async function run(options) {
|
|
128
|
+
import fs3 from "fs";
|
|
129
|
+
import path2 from "path";
|
|
130
|
+
async function run2(options) {
|
|
165
131
|
const schemaFile = getSchemaFile(options.schema);
|
|
166
132
|
const model = await loadSchemaDocument(schemaFile);
|
|
167
|
-
const outputPath = options.output ??
|
|
168
|
-
const tsSchemaFile =
|
|
133
|
+
const outputPath = options.output ?? path2.dirname(schemaFile);
|
|
134
|
+
const tsSchemaFile = path2.join(outputPath, "schema.ts");
|
|
169
135
|
await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);
|
|
170
136
|
await runPlugins(model, outputPath, tsSchemaFile);
|
|
171
|
-
|
|
172
|
-
|
|
137
|
+
if (options.savePrismaSchema) {
|
|
138
|
+
const prismaSchema = await new PrismaSchemaGenerator2(model).generate();
|
|
139
|
+
let prismaSchemaFile = path2.join(outputPath, "schema.prisma");
|
|
140
|
+
if (typeof options.savePrismaSchema === "string") {
|
|
141
|
+
prismaSchemaFile = path2.resolve(outputPath, options.savePrismaSchema);
|
|
142
|
+
fs3.mkdirSync(path2.dirname(prismaSchemaFile), {
|
|
143
|
+
recursive: true
|
|
144
|
+
});
|
|
145
|
+
}
|
|
146
|
+
fs3.writeFileSync(prismaSchemaFile, prismaSchema);
|
|
147
|
+
}
|
|
173
148
|
if (!options.silent) {
|
|
174
149
|
console.log(colors2.green("Generation completed successfully."));
|
|
175
150
|
console.log(`You can now create a ZenStack client with it.
|
|
@@ -179,13 +154,13 @@ import { ZenStackClient } from '@zenstackhq/runtime';
|
|
|
179
154
|
import { schema } from '${outputPath}/schema';
|
|
180
155
|
|
|
181
156
|
const client = new ZenStackClient(schema, {
|
|
182
|
-
dialectConfig: { ... }
|
|
157
|
+
dialectConfig: { ... }
|
|
183
158
|
});
|
|
184
159
|
\`\`\`
|
|
185
160
|
`);
|
|
186
161
|
}
|
|
187
162
|
}
|
|
188
|
-
__name(
|
|
163
|
+
__name(run2, "run");
|
|
189
164
|
async function runPlugins(model, outputPath, tsSchemaFile) {
|
|
190
165
|
const plugins = model.declarations.filter(isPlugin);
|
|
191
166
|
for (const plugin of plugins) {
|
|
@@ -207,36 +182,9 @@ async function runPlugins(model, outputPath, tsSchemaFile) {
|
|
|
207
182
|
}
|
|
208
183
|
__name(runPlugins, "runPlugins");
|
|
209
184
|
|
|
210
|
-
// src/actions/db.ts
|
|
211
|
-
async function run2(command, options) {
|
|
212
|
-
const schemaFile = getSchemaFile(options.schema);
|
|
213
|
-
await run({
|
|
214
|
-
schema: schemaFile,
|
|
215
|
-
silent: true
|
|
216
|
-
});
|
|
217
|
-
const prismaSchemaFile = path2.join(path2.dirname(schemaFile), "schema.prisma");
|
|
218
|
-
switch (command) {
|
|
219
|
-
case "push":
|
|
220
|
-
await runPush(prismaSchemaFile, options);
|
|
221
|
-
break;
|
|
222
|
-
}
|
|
223
|
-
}
|
|
224
|
-
__name(run2, "run");
|
|
225
|
-
async function runPush(prismaSchemaFile, options) {
|
|
226
|
-
const cmd = `prisma db push --schema "${prismaSchemaFile}"${options.acceptDataLoss ? " --accept-data-loss" : ""}${options.forceReset ? " --force-reset" : ""} --skip-generate`;
|
|
227
|
-
try {
|
|
228
|
-
await execPackage(cmd, {
|
|
229
|
-
stdio: "inherit"
|
|
230
|
-
});
|
|
231
|
-
} catch (err) {
|
|
232
|
-
handleSubProcessError(err);
|
|
233
|
-
}
|
|
234
|
-
}
|
|
235
|
-
__name(runPush, "runPush");
|
|
236
|
-
|
|
237
185
|
// src/actions/info.ts
|
|
238
186
|
import colors3 from "colors";
|
|
239
|
-
import path3 from "
|
|
187
|
+
import path3 from "path";
|
|
240
188
|
async function run3(projectPath) {
|
|
241
189
|
const packages = await getZenStackPackages(projectPath);
|
|
242
190
|
if (!packages) {
|
|
@@ -265,7 +213,7 @@ async function getZenStackPackages(projectPath) {
|
|
|
265
213
|
type: "json"
|
|
266
214
|
}
|
|
267
215
|
})).default;
|
|
268
|
-
} catch
|
|
216
|
+
} catch {
|
|
269
217
|
return [];
|
|
270
218
|
}
|
|
271
219
|
const packages = Array.from(new Set([
|
|
@@ -296,8 +244,8 @@ __name(getZenStackPackages, "getZenStackPackages");
|
|
|
296
244
|
|
|
297
245
|
// src/actions/init.ts
|
|
298
246
|
import colors4 from "colors";
|
|
299
|
-
import
|
|
300
|
-
import path4 from "
|
|
247
|
+
import fs4 from "fs";
|
|
248
|
+
import path4 from "path";
|
|
301
249
|
import ora from "ora";
|
|
302
250
|
import { detect, resolveCommand } from "package-manager-detector";
|
|
303
251
|
|
|
@@ -372,11 +320,11 @@ async function run4(projectPath) {
|
|
|
372
320
|
}
|
|
373
321
|
}
|
|
374
322
|
const generationFolder = "zenstack";
|
|
375
|
-
if (!
|
|
376
|
-
|
|
323
|
+
if (!fs4.existsSync(path4.join(projectPath, generationFolder))) {
|
|
324
|
+
fs4.mkdirSync(path4.join(projectPath, generationFolder));
|
|
377
325
|
}
|
|
378
|
-
if (!
|
|
379
|
-
|
|
326
|
+
if (!fs4.existsSync(path4.join(projectPath, generationFolder, "schema.zmodel"))) {
|
|
327
|
+
fs4.writeFileSync(path4.join(projectPath, generationFolder, "schema.zmodel"), STARTER_ZMODEL);
|
|
380
328
|
} else {
|
|
381
329
|
console.log(colors4.yellow("Schema file already exists. Skipping generation of sample."));
|
|
382
330
|
}
|
|
@@ -387,33 +335,35 @@ async function run4(projectPath) {
|
|
|
387
335
|
__name(run4, "run");
|
|
388
336
|
|
|
389
337
|
// src/actions/migrate.ts
|
|
390
|
-
import
|
|
338
|
+
import fs5 from "fs";
|
|
391
339
|
async function run5(command, options) {
|
|
392
340
|
const schemaFile = getSchemaFile(options.schema);
|
|
393
|
-
await
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
341
|
+
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
|
|
342
|
+
try {
|
|
343
|
+
switch (command) {
|
|
344
|
+
case "dev":
|
|
345
|
+
await runDev(prismaSchemaFile, options);
|
|
346
|
+
break;
|
|
347
|
+
case "reset":
|
|
348
|
+
await runReset(prismaSchemaFile, options);
|
|
349
|
+
break;
|
|
350
|
+
case "deploy":
|
|
351
|
+
await runDeploy(prismaSchemaFile, options);
|
|
352
|
+
break;
|
|
353
|
+
case "status":
|
|
354
|
+
await runStatus(prismaSchemaFile, options);
|
|
355
|
+
break;
|
|
356
|
+
}
|
|
357
|
+
} finally {
|
|
358
|
+
if (fs5.existsSync(prismaSchemaFile)) {
|
|
359
|
+
fs5.unlinkSync(prismaSchemaFile);
|
|
360
|
+
}
|
|
411
361
|
}
|
|
412
362
|
}
|
|
413
363
|
__name(run5, "run");
|
|
414
|
-
async function runDev(prismaSchemaFile,
|
|
364
|
+
async function runDev(prismaSchemaFile, options) {
|
|
415
365
|
try {
|
|
416
|
-
await execPackage(`prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate`, {
|
|
366
|
+
await execPackage(`prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate${options.name ? ` --name ${options.name}` : ""}${options.createOnly ? " --create-only" : ""}`, {
|
|
417
367
|
stdio: "inherit"
|
|
418
368
|
});
|
|
419
369
|
} catch (err) {
|
|
@@ -461,28 +411,28 @@ function handleSubProcessError2(err) {
|
|
|
461
411
|
__name(handleSubProcessError2, "handleSubProcessError");
|
|
462
412
|
|
|
463
413
|
// src/utils/version-utils.ts
|
|
414
|
+
import fs6 from "fs";
|
|
415
|
+
import path5 from "path";
|
|
416
|
+
import { fileURLToPath } from "url";
|
|
464
417
|
function getVersion() {
|
|
465
418
|
try {
|
|
466
|
-
|
|
419
|
+
const _dirname = typeof __dirname !== "undefined" ? __dirname : path5.dirname(fileURLToPath(import.meta.url));
|
|
420
|
+
return JSON.parse(fs6.readFileSync(path5.join(_dirname, "../package.json"), "utf8")).version;
|
|
467
421
|
} catch {
|
|
468
|
-
|
|
469
|
-
return require_package().version;
|
|
470
|
-
} catch {
|
|
471
|
-
return void 0;
|
|
472
|
-
}
|
|
422
|
+
return void 0;
|
|
473
423
|
}
|
|
474
424
|
}
|
|
475
425
|
__name(getVersion, "getVersion");
|
|
476
426
|
|
|
477
427
|
// src/index.ts
|
|
478
428
|
var generateAction = /* @__PURE__ */ __name(async (options) => {
|
|
479
|
-
await
|
|
429
|
+
await run2(options);
|
|
480
430
|
}, "generateAction");
|
|
481
431
|
var migrateAction = /* @__PURE__ */ __name(async (command, options) => {
|
|
482
432
|
await run5(command, options);
|
|
483
433
|
}, "migrateAction");
|
|
484
434
|
var dbAction = /* @__PURE__ */ __name(async (command, options) => {
|
|
485
|
-
await
|
|
435
|
+
await run(command, options);
|
|
486
436
|
}, "dbAction");
|
|
487
437
|
var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
488
438
|
await run3(projectPath);
|
|
@@ -498,7 +448,7 @@ function createProgram() {
|
|
|
498
448
|
|
|
499
449
|
Documentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
|
|
500
450
|
const schemaOption = new Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`);
|
|
501
|
-
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new Option("-o, --output <path>", "default output directory for core plugins")).action(generateAction);
|
|
451
|
+
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new Option("--silent", "do not print any output")).addOption(new Option("--save-prisma-schema [path]", "save a Prisma schema file, by default into the output directory")).addOption(new Option("-o, --output <path>", "default output directory for core plugins")).action(generateAction);
|
|
502
452
|
const migrateCommand = program2.command("migrate").description("Update the database schema with migrations.");
|
|
503
453
|
migrateCommand.command("dev").addOption(schemaOption).addOption(new Option("-n, --name <name>", "migration name")).addOption(new 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));
|
|
504
454
|
migrateCommand.command("reset").addOption(schemaOption).addOption(new 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.js.map
CHANGED
|
@@ -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":["ZModelLanguageMetaData","colors","Command","Option","path","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","fs","CliError","Error","loadDocument","colors","getSchemaFile","file","fs","existsSync","CliError","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","console","error","colors","red","errors","forEach","err","model","handleSubProcessError","Error","status","process","exit","isPlugin","PrismaSchemaGenerator","TsSchemaGenerator","colors","fs","path","invariant","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","colors","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","colors","fs","path","ora","detect","resolveCommand","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","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":["ZModelLanguageMetaData","colors","Command","Option","fs","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","loadDocument","PrismaSchemaGenerator","colors","fs","path","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","invariant","isPlugin","PrismaSchemaGenerator","TsSchemaGenerator","colors","fs","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","colors","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","colors","fs","path","ora","detect","resolveCommand","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","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","fs","path","fileURLToPath","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"]}
|
package/eslint.config.js
ADDED
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publisher": "zenstack",
|
|
4
4
|
"displayName": "ZenStack CLI",
|
|
5
5
|
"description": "FullStack database toolkit with built-in access control and automatic API generation.",
|
|
6
|
-
"version": "3.0.0-alpha.
|
|
6
|
+
"version": "3.0.0-alpha.7",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "ZenStack Team"
|
|
@@ -21,37 +21,34 @@
|
|
|
21
21
|
"zenstack": "bin/cli"
|
|
22
22
|
},
|
|
23
23
|
"dependencies": {
|
|
24
|
-
"@types/node": "^20.0.0",
|
|
25
|
-
"async-exit-hook": "^2.0.1",
|
|
26
24
|
"colors": "1.4.0",
|
|
27
25
|
"commander": "^8.3.0",
|
|
28
|
-
"langium": "
|
|
26
|
+
"langium": "3.5.0",
|
|
29
27
|
"ora": "^5.4.1",
|
|
30
28
|
"package-manager-detector": "^1.3.0",
|
|
31
|
-
"
|
|
32
|
-
"
|
|
33
|
-
"@zenstackhq/
|
|
34
|
-
"@zenstackhq/
|
|
29
|
+
"ts-pattern": "^5.7.1",
|
|
30
|
+
"@zenstackhq/common-helpers": "3.0.0-alpha.7",
|
|
31
|
+
"@zenstackhq/sdk": "3.0.0-alpha.7",
|
|
32
|
+
"@zenstackhq/language": "3.0.0-alpha.7"
|
|
35
33
|
},
|
|
36
34
|
"peerDependencies": {
|
|
37
|
-
"prisma": "^6.0.0"
|
|
38
|
-
"typescript": "^5.0.0"
|
|
35
|
+
"prisma": "^6.0.0"
|
|
39
36
|
},
|
|
40
37
|
"devDependencies": {
|
|
41
|
-
"@types/async-exit-hook": "^2.0.0",
|
|
42
38
|
"@types/better-sqlite3": "^7.6.13",
|
|
43
|
-
"@types/semver": "^7.3.13",
|
|
44
39
|
"@types/tmp": "^0.2.6",
|
|
45
40
|
"better-sqlite3": "^11.8.1",
|
|
46
41
|
"tmp": "^0.2.3",
|
|
47
|
-
"@zenstackhq/
|
|
48
|
-
"@zenstackhq/
|
|
42
|
+
"@zenstackhq/eslint-config": "3.0.0-alpha.7",
|
|
43
|
+
"@zenstackhq/testtools": "3.0.0-alpha.7",
|
|
44
|
+
"@zenstackhq/runtime": "3.0.0-alpha.7",
|
|
45
|
+
"@zenstackhq/typescript-config": "3.0.0-alpha.7"
|
|
49
46
|
},
|
|
50
47
|
"scripts": {
|
|
51
48
|
"build": "tsup-node",
|
|
52
49
|
"watch": "tsup-node --watch",
|
|
53
50
|
"lint": "eslint src --ext ts",
|
|
54
|
-
"test": "vitest",
|
|
51
|
+
"test": "vitest run",
|
|
55
52
|
"pack": "pnpm pack"
|
|
56
53
|
}
|
|
57
54
|
}
|