@zenstackhq/cli 3.0.0-beta.22 → 3.0.0-beta.24
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/dist/index.cjs +207 -142
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +208 -138
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/actions/action-utils.ts +13 -5
- package/src/actions/db.ts +3 -3
- package/src/actions/format.ts +27 -0
- package/src/actions/generate.ts +13 -1
- package/src/actions/index.ts +3 -2
- package/src/actions/migrate.ts +18 -22
- package/src/index.ts +28 -14
- package/src/plugins/typescript.ts +12 -1
- package/src/utils/exec-utils.ts +27 -0
- package/test/format.test.ts +33 -0
- package/test/generate.test.ts +15 -0
- package/test/migrate.test.ts +1 -2
package/dist/index.cjs
CHANGED
|
@@ -28,34 +28,12 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
|
|
|
28
28
|
));
|
|
29
29
|
|
|
30
30
|
// src/index.ts
|
|
31
|
-
var
|
|
32
|
-
var
|
|
31
|
+
var import_language3 = require("@zenstackhq/language");
|
|
32
|
+
var import_colors8 = __toESM(require("colors"), 1);
|
|
33
33
|
var import_commander = require("commander");
|
|
34
34
|
|
|
35
|
-
// src/actions/
|
|
36
|
-
var
|
|
37
|
-
|
|
38
|
-
// src/utils/exec-utils.ts
|
|
39
|
-
var import_child_process = require("child_process");
|
|
40
|
-
function execSync(cmd, options) {
|
|
41
|
-
const { env: env2, ...restOptions } = options ?? {};
|
|
42
|
-
const mergedEnv = env2 ? {
|
|
43
|
-
...process.env,
|
|
44
|
-
...env2
|
|
45
|
-
} : void 0;
|
|
46
|
-
(0, import_child_process.execSync)(cmd, {
|
|
47
|
-
encoding: "utf-8",
|
|
48
|
-
stdio: options?.stdio ?? "inherit",
|
|
49
|
-
env: mergedEnv,
|
|
50
|
-
...restOptions
|
|
51
|
-
});
|
|
52
|
-
}
|
|
53
|
-
__name(execSync, "execSync");
|
|
54
|
-
function execPackage(cmd, options) {
|
|
55
|
-
const packageManager = process?.versions?.["bun"] ? "bunx" : "npx";
|
|
56
|
-
execSync(`${packageManager} ${cmd}`, options);
|
|
57
|
-
}
|
|
58
|
-
__name(execPackage, "execPackage");
|
|
35
|
+
// src/actions/check.ts
|
|
36
|
+
var import_colors2 = __toESM(require("colors"), 1);
|
|
59
37
|
|
|
60
38
|
// src/actions/action-utils.ts
|
|
61
39
|
var import_language = require("@zenstackhq/language");
|
|
@@ -85,14 +63,22 @@ function getSchemaFile(file) {
|
|
|
85
63
|
if (!import_node_fs.default.existsSync(pkgJsonConfig.schema)) {
|
|
86
64
|
throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);
|
|
87
65
|
}
|
|
88
|
-
|
|
66
|
+
if (import_node_fs.default.statSync(pkgJsonConfig.schema).isDirectory()) {
|
|
67
|
+
const schemaPath = import_node_path.default.join(pkgJsonConfig.schema, "schema.zmodel");
|
|
68
|
+
if (!import_node_fs.default.existsSync(schemaPath)) {
|
|
69
|
+
throw new CliError(`Schema file not found: ${schemaPath}`);
|
|
70
|
+
}
|
|
71
|
+
return schemaPath;
|
|
72
|
+
} else {
|
|
73
|
+
return pkgJsonConfig.schema;
|
|
74
|
+
}
|
|
89
75
|
}
|
|
90
|
-
if (import_node_fs.default.existsSync("./
|
|
91
|
-
return "./zenstack/schema.zmodel";
|
|
92
|
-
} else if (import_node_fs.default.existsSync("./schema.zmodel")) {
|
|
76
|
+
if (import_node_fs.default.existsSync("./schema.zmodel")) {
|
|
93
77
|
return "./schema.zmodel";
|
|
78
|
+
} else if (import_node_fs.default.existsSync("./zenstack/schema.zmodel")) {
|
|
79
|
+
return "./zenstack/schema.zmodel";
|
|
94
80
|
} else {
|
|
95
|
-
throw new CliError('Schema file not found in default locations ("./
|
|
81
|
+
throw new CliError('Schema file not found in default locations ("./schema.zmodel" or "./zenstack/schema.zmodel").');
|
|
96
82
|
}
|
|
97
83
|
}
|
|
98
84
|
__name(getSchemaFile, "getSchemaFile");
|
|
@@ -175,28 +161,85 @@ function findUp(names, cwd = process.cwd(), multiple = false, result = []) {
|
|
|
175
161
|
}
|
|
176
162
|
__name(findUp, "findUp");
|
|
177
163
|
|
|
164
|
+
// src/actions/check.ts
|
|
165
|
+
async function run(options) {
|
|
166
|
+
const schemaFile = getSchemaFile(options.schema);
|
|
167
|
+
try {
|
|
168
|
+
await loadSchemaDocument(schemaFile);
|
|
169
|
+
console.log(import_colors2.default.green("\u2713 Schema validation completed successfully."));
|
|
170
|
+
} catch (error) {
|
|
171
|
+
console.error(import_colors2.default.red("\u2717 Schema validation failed."));
|
|
172
|
+
throw error;
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
__name(run, "run");
|
|
176
|
+
|
|
178
177
|
// src/actions/db.ts
|
|
179
|
-
|
|
178
|
+
var import_node_fs2 = __toESM(require("fs"), 1);
|
|
179
|
+
|
|
180
|
+
// src/utils/exec-utils.ts
|
|
181
|
+
var import_child_process = require("child_process");
|
|
182
|
+
var import_url = require("url");
|
|
183
|
+
var import_meta = {};
|
|
184
|
+
function execSync(cmd, options) {
|
|
185
|
+
const { env: env2, ...restOptions } = options ?? {};
|
|
186
|
+
const mergedEnv = env2 ? {
|
|
187
|
+
...process.env,
|
|
188
|
+
...env2
|
|
189
|
+
} : void 0;
|
|
190
|
+
(0, import_child_process.execSync)(cmd, {
|
|
191
|
+
encoding: "utf-8",
|
|
192
|
+
stdio: options?.stdio ?? "inherit",
|
|
193
|
+
env: mergedEnv,
|
|
194
|
+
...restOptions
|
|
195
|
+
});
|
|
196
|
+
}
|
|
197
|
+
__name(execSync, "execSync");
|
|
198
|
+
function execPackage(cmd, options) {
|
|
199
|
+
const packageManager = process?.versions?.["bun"] ? "bunx" : "npx";
|
|
200
|
+
execSync(`${packageManager} ${cmd}`, options);
|
|
201
|
+
}
|
|
202
|
+
__name(execPackage, "execPackage");
|
|
203
|
+
function execPrisma(args, options) {
|
|
204
|
+
let prismaPath;
|
|
205
|
+
try {
|
|
206
|
+
if (typeof import_meta.resolve === "function") {
|
|
207
|
+
prismaPath = (0, import_url.fileURLToPath)(import_meta.resolve("prisma/build/index.js"));
|
|
208
|
+
} else {
|
|
209
|
+
prismaPath = require.resolve("prisma/build/index.js");
|
|
210
|
+
}
|
|
211
|
+
} catch {
|
|
212
|
+
}
|
|
213
|
+
if (!prismaPath) {
|
|
214
|
+
execPackage(`prisma ${args}`, options);
|
|
215
|
+
return;
|
|
216
|
+
}
|
|
217
|
+
execSync(`node ${prismaPath} ${args}`, options);
|
|
218
|
+
}
|
|
219
|
+
__name(execPrisma, "execPrisma");
|
|
220
|
+
|
|
221
|
+
// src/actions/db.ts
|
|
222
|
+
async function run2(command, options) {
|
|
180
223
|
switch (command) {
|
|
181
224
|
case "push":
|
|
182
225
|
await runPush(options);
|
|
183
226
|
break;
|
|
184
227
|
}
|
|
185
228
|
}
|
|
186
|
-
__name(
|
|
229
|
+
__name(run2, "run");
|
|
187
230
|
async function runPush(options) {
|
|
188
231
|
const schemaFile = getSchemaFile(options.schema);
|
|
189
232
|
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);
|
|
190
233
|
try {
|
|
191
234
|
const cmd = [
|
|
192
|
-
"
|
|
235
|
+
"db push",
|
|
193
236
|
` --schema "${prismaSchemaFile}"`,
|
|
194
237
|
options.acceptDataLoss ? " --accept-data-loss" : "",
|
|
195
238
|
options.forceReset ? " --force-reset" : "",
|
|
196
239
|
" --skip-generate"
|
|
197
240
|
].join("");
|
|
198
241
|
try {
|
|
199
|
-
|
|
242
|
+
execPrisma(cmd);
|
|
200
243
|
} catch (err) {
|
|
201
244
|
handleSubProcessError(err);
|
|
202
245
|
}
|
|
@@ -208,11 +251,29 @@ async function runPush(options) {
|
|
|
208
251
|
}
|
|
209
252
|
__name(runPush, "runPush");
|
|
210
253
|
|
|
254
|
+
// src/actions/format.ts
|
|
255
|
+
var import_language2 = require("@zenstackhq/language");
|
|
256
|
+
var import_colors3 = __toESM(require("colors"), 1);
|
|
257
|
+
var import_node_fs3 = __toESM(require("fs"), 1);
|
|
258
|
+
async function run3(options) {
|
|
259
|
+
const schemaFile = getSchemaFile(options.schema);
|
|
260
|
+
let formattedContent;
|
|
261
|
+
try {
|
|
262
|
+
formattedContent = await (0, import_language2.formatDocument)(import_node_fs3.default.readFileSync(schemaFile, "utf-8"));
|
|
263
|
+
} catch (error) {
|
|
264
|
+
console.error(import_colors3.default.red("\u2717 Schema formatting failed."));
|
|
265
|
+
throw error;
|
|
266
|
+
}
|
|
267
|
+
import_node_fs3.default.writeFileSync(schemaFile, formattedContent, "utf-8");
|
|
268
|
+
console.log(import_colors3.default.green("\u2713 Schema formatting completed successfully."));
|
|
269
|
+
}
|
|
270
|
+
__name(run3, "run");
|
|
271
|
+
|
|
211
272
|
// src/actions/generate.ts
|
|
212
273
|
var import_common_helpers = require("@zenstackhq/common-helpers");
|
|
213
274
|
var import_ast2 = require("@zenstackhq/language/ast");
|
|
214
275
|
var import_utils = require("@zenstackhq/language/utils");
|
|
215
|
-
var
|
|
276
|
+
var import_colors4 = __toESM(require("colors"), 1);
|
|
216
277
|
var import_node_path4 = __toESM(require("path"), 1);
|
|
217
278
|
var import_ora = __toESM(require("ora"), 1);
|
|
218
279
|
|
|
@@ -225,7 +286,7 @@ __export(plugins_exports, {
|
|
|
225
286
|
|
|
226
287
|
// src/plugins/prisma.ts
|
|
227
288
|
var import_sdk2 = require("@zenstackhq/sdk");
|
|
228
|
-
var
|
|
289
|
+
var import_node_fs4 = __toESM(require("fs"), 1);
|
|
229
290
|
var import_node_path2 = __toESM(require("path"), 1);
|
|
230
291
|
var plugin = {
|
|
231
292
|
name: "Prisma Schema Generator",
|
|
@@ -234,21 +295,21 @@ var plugin = {
|
|
|
234
295
|
let outFile = import_node_path2.default.join(defaultOutputPath, "schema.prisma");
|
|
235
296
|
if (typeof pluginOptions["output"] === "string") {
|
|
236
297
|
outFile = import_node_path2.default.resolve(defaultOutputPath, pluginOptions["output"]);
|
|
237
|
-
if (!
|
|
238
|
-
|
|
298
|
+
if (!import_node_fs4.default.existsSync(import_node_path2.default.dirname(outFile))) {
|
|
299
|
+
import_node_fs4.default.mkdirSync(import_node_path2.default.dirname(outFile), {
|
|
239
300
|
recursive: true
|
|
240
301
|
});
|
|
241
302
|
}
|
|
242
303
|
}
|
|
243
304
|
const prismaSchema = await new import_sdk2.PrismaSchemaGenerator(model).generate();
|
|
244
|
-
|
|
305
|
+
import_node_fs4.default.writeFileSync(outFile, prismaSchema);
|
|
245
306
|
}
|
|
246
307
|
};
|
|
247
308
|
var prisma_default = plugin;
|
|
248
309
|
|
|
249
310
|
// src/plugins/typescript.ts
|
|
250
311
|
var import_sdk3 = require("@zenstackhq/sdk");
|
|
251
|
-
var
|
|
312
|
+
var import_node_fs5 = __toESM(require("fs"), 1);
|
|
252
313
|
var import_node_path3 = __toESM(require("path"), 1);
|
|
253
314
|
var plugin2 = {
|
|
254
315
|
name: "TypeScript Schema Generator",
|
|
@@ -257,32 +318,37 @@ var plugin2 = {
|
|
|
257
318
|
let outDir = defaultOutputPath;
|
|
258
319
|
if (typeof pluginOptions["output"] === "string") {
|
|
259
320
|
outDir = import_node_path3.default.resolve(defaultOutputPath, pluginOptions["output"]);
|
|
260
|
-
if (!
|
|
261
|
-
|
|
321
|
+
if (!import_node_fs5.default.existsSync(outDir)) {
|
|
322
|
+
import_node_fs5.default.mkdirSync(outDir, {
|
|
262
323
|
recursive: true
|
|
263
324
|
});
|
|
264
325
|
}
|
|
265
326
|
}
|
|
266
327
|
const lite = pluginOptions["lite"] === true;
|
|
267
328
|
const liteOnly = pluginOptions["liteOnly"] === true;
|
|
329
|
+
const importWithFileExtension = pluginOptions["importWithFileExtension"];
|
|
330
|
+
if (importWithFileExtension && typeof importWithFileExtension !== "string") {
|
|
331
|
+
throw new Error('The "importWithFileExtension" option must be a string if specified.');
|
|
332
|
+
}
|
|
268
333
|
await new import_sdk3.TsSchemaGenerator().generate(model, {
|
|
269
334
|
outDir,
|
|
270
335
|
lite,
|
|
271
|
-
liteOnly
|
|
336
|
+
liteOnly,
|
|
337
|
+
importWithFileExtension
|
|
272
338
|
});
|
|
273
339
|
}
|
|
274
340
|
};
|
|
275
341
|
var typescript_default = plugin2;
|
|
276
342
|
|
|
277
343
|
// src/actions/generate.ts
|
|
278
|
-
async function
|
|
344
|
+
async function run4(options) {
|
|
279
345
|
const start = Date.now();
|
|
280
346
|
const schemaFile = getSchemaFile(options.schema);
|
|
281
347
|
const model = await loadSchemaDocument(schemaFile);
|
|
282
348
|
const outputPath = getOutputPath(options, schemaFile);
|
|
283
349
|
await runPlugins(schemaFile, model, outputPath, options);
|
|
284
350
|
if (!options.silent) {
|
|
285
|
-
console.log(
|
|
351
|
+
console.log(import_colors4.default.green(`Generation completed successfully in ${Date.now() - start}ms.
|
|
286
352
|
`));
|
|
287
353
|
console.log(`You can now create a ZenStack client with it.
|
|
288
354
|
|
|
@@ -298,7 +364,7 @@ const client = new ZenStackClient(schema, {
|
|
|
298
364
|
Check documentation: https://zenstack.dev/docs/3.x`);
|
|
299
365
|
}
|
|
300
366
|
}
|
|
301
|
-
__name(
|
|
367
|
+
__name(run4, "run");
|
|
302
368
|
function getOutputPath(options, schemaFile) {
|
|
303
369
|
if (options.output) {
|
|
304
370
|
return options.output;
|
|
@@ -333,9 +399,18 @@ async function runPlugins(schemaFile, model, outputPath, options) {
|
|
|
333
399
|
}
|
|
334
400
|
}
|
|
335
401
|
if (cliPlugin) {
|
|
402
|
+
const pluginOptions = getPluginOptions(plugin3);
|
|
403
|
+
if (provider === "@core/typescript") {
|
|
404
|
+
if (pluginOptions["lite"] === void 0) {
|
|
405
|
+
pluginOptions["lite"] = options.lite;
|
|
406
|
+
}
|
|
407
|
+
if (pluginOptions["liteOnly"] === void 0) {
|
|
408
|
+
pluginOptions["liteOnly"] = options.liteOnly;
|
|
409
|
+
}
|
|
410
|
+
}
|
|
336
411
|
processedPlugins.push({
|
|
337
412
|
cliPlugin,
|
|
338
|
-
pluginOptions
|
|
413
|
+
pluginOptions
|
|
339
414
|
});
|
|
340
415
|
}
|
|
341
416
|
}
|
|
@@ -402,9 +477,9 @@ function getPluginOptions(plugin3) {
|
|
|
402
477
|
__name(getPluginOptions, "getPluginOptions");
|
|
403
478
|
|
|
404
479
|
// src/actions/info.ts
|
|
405
|
-
var
|
|
480
|
+
var import_colors5 = __toESM(require("colors"), 1);
|
|
406
481
|
var import_node_path5 = __toESM(require("path"), 1);
|
|
407
|
-
async function
|
|
482
|
+
async function run5(projectPath) {
|
|
408
483
|
const packages = await getZenStackPackages(projectPath);
|
|
409
484
|
if (!packages) {
|
|
410
485
|
console.error("Unable to locate package.json. Are you in a valid project directory?");
|
|
@@ -416,13 +491,13 @@ async function run3(projectPath) {
|
|
|
416
491
|
if (version2) {
|
|
417
492
|
versions.add(version2);
|
|
418
493
|
}
|
|
419
|
-
console.log(` ${
|
|
494
|
+
console.log(` ${import_colors5.default.green(pkg.padEnd(20))} ${version2}`);
|
|
420
495
|
}
|
|
421
496
|
if (versions.size > 1) {
|
|
422
|
-
console.warn(
|
|
497
|
+
console.warn(import_colors5.default.yellow("WARNING: Multiple versions of Zenstack packages detected. This may cause issues."));
|
|
423
498
|
}
|
|
424
499
|
}
|
|
425
|
-
__name(
|
|
500
|
+
__name(run5, "run");
|
|
426
501
|
async function getZenStackPackages(projectPath) {
|
|
427
502
|
let pkgJson;
|
|
428
503
|
const resolvedPath = import_node_path5.default.resolve(projectPath);
|
|
@@ -465,8 +540,8 @@ async function getZenStackPackages(projectPath) {
|
|
|
465
540
|
__name(getZenStackPackages, "getZenStackPackages");
|
|
466
541
|
|
|
467
542
|
// src/actions/init.ts
|
|
468
|
-
var
|
|
469
|
-
var
|
|
543
|
+
var import_colors6 = __toESM(require("colors"), 1);
|
|
544
|
+
var import_node_fs6 = __toESM(require("fs"), 1);
|
|
470
545
|
var import_node_path6 = __toESM(require("path"), 1);
|
|
471
546
|
var import_ora2 = __toESM(require("ora"), 1);
|
|
472
547
|
var import_package_manager_detector = require("package-manager-detector");
|
|
@@ -501,7 +576,7 @@ model Post {
|
|
|
501
576
|
`;
|
|
502
577
|
|
|
503
578
|
// src/actions/init.ts
|
|
504
|
-
async function
|
|
579
|
+
async function run6(projectPath) {
|
|
505
580
|
const packages = [
|
|
506
581
|
{
|
|
507
582
|
name: "@zenstackhq/cli@next",
|
|
@@ -519,7 +594,7 @@ async function run4(projectPath) {
|
|
|
519
594
|
name: "npm"
|
|
520
595
|
};
|
|
521
596
|
}
|
|
522
|
-
console.log(
|
|
597
|
+
console.log(import_colors6.default.gray(`Using package manager: ${pm.agent}`));
|
|
523
598
|
for (const pkg of packages) {
|
|
524
599
|
const resolved = (0, import_package_manager_detector.resolveCommand)(pm.agent, "install", [
|
|
525
600
|
pkg.name,
|
|
@@ -542,24 +617,24 @@ async function run4(projectPath) {
|
|
|
542
617
|
}
|
|
543
618
|
}
|
|
544
619
|
const generationFolder = "zenstack";
|
|
545
|
-
if (!
|
|
546
|
-
|
|
620
|
+
if (!import_node_fs6.default.existsSync(import_node_path6.default.join(projectPath, generationFolder))) {
|
|
621
|
+
import_node_fs6.default.mkdirSync(import_node_path6.default.join(projectPath, generationFolder));
|
|
547
622
|
}
|
|
548
|
-
if (!
|
|
549
|
-
|
|
623
|
+
if (!import_node_fs6.default.existsSync(import_node_path6.default.join(projectPath, generationFolder, "schema.zmodel"))) {
|
|
624
|
+
import_node_fs6.default.writeFileSync(import_node_path6.default.join(projectPath, generationFolder, "schema.zmodel"), STARTER_ZMODEL);
|
|
550
625
|
} else {
|
|
551
|
-
console.log(
|
|
626
|
+
console.log(import_colors6.default.yellow("Schema file already exists. Skipping generation of sample."));
|
|
552
627
|
}
|
|
553
|
-
console.log(
|
|
554
|
-
console.log(
|
|
555
|
-
console.log(
|
|
628
|
+
console.log(import_colors6.default.green("ZenStack project initialized successfully!"));
|
|
629
|
+
console.log(import_colors6.default.gray(`See "${generationFolder}/schema.zmodel" for your database schema.`));
|
|
630
|
+
console.log(import_colors6.default.gray("Run `zenstack generate` to compile the the schema into a TypeScript file."));
|
|
556
631
|
}
|
|
557
|
-
__name(
|
|
632
|
+
__name(run6, "run");
|
|
558
633
|
|
|
559
634
|
// src/actions/migrate.ts
|
|
560
|
-
var
|
|
635
|
+
var import_node_fs7 = __toESM(require("fs"), 1);
|
|
561
636
|
var import_node_path7 = __toESM(require("path"), 1);
|
|
562
|
-
async function
|
|
637
|
+
async function run7(command, options) {
|
|
563
638
|
const schemaFile = getSchemaFile(options.schema);
|
|
564
639
|
const prismaSchemaDir = options.migrations ? import_node_path7.default.dirname(options.migrations) : void 0;
|
|
565
640
|
const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);
|
|
@@ -582,73 +657,73 @@ async function run5(command, options) {
|
|
|
582
657
|
break;
|
|
583
658
|
}
|
|
584
659
|
} finally {
|
|
585
|
-
if (
|
|
586
|
-
|
|
660
|
+
if (import_node_fs7.default.existsSync(prismaSchemaFile)) {
|
|
661
|
+
import_node_fs7.default.unlinkSync(prismaSchemaFile);
|
|
587
662
|
}
|
|
588
663
|
}
|
|
589
664
|
}
|
|
590
|
-
__name(
|
|
591
|
-
|
|
665
|
+
__name(run7, "run");
|
|
666
|
+
function runDev(prismaSchemaFile, options) {
|
|
592
667
|
try {
|
|
593
668
|
const cmd = [
|
|
594
|
-
"
|
|
669
|
+
"migrate dev",
|
|
595
670
|
` --schema "${prismaSchemaFile}"`,
|
|
596
671
|
" --skip-generate",
|
|
597
|
-
options.name ? ` --name ${options.name}` : "",
|
|
672
|
+
options.name ? ` --name "${options.name}"` : "",
|
|
598
673
|
options.createOnly ? " --create-only" : ""
|
|
599
674
|
].join("");
|
|
600
|
-
|
|
675
|
+
execPrisma(cmd);
|
|
601
676
|
} catch (err) {
|
|
602
677
|
handleSubProcessError2(err);
|
|
603
678
|
}
|
|
604
679
|
}
|
|
605
680
|
__name(runDev, "runDev");
|
|
606
|
-
|
|
681
|
+
function runReset(prismaSchemaFile, options) {
|
|
607
682
|
try {
|
|
608
683
|
const cmd = [
|
|
609
|
-
"
|
|
684
|
+
"migrate reset",
|
|
610
685
|
` --schema "${prismaSchemaFile}"`,
|
|
611
686
|
" --skip-generate",
|
|
612
687
|
options.force ? " --force" : ""
|
|
613
688
|
].join("");
|
|
614
|
-
|
|
689
|
+
execPrisma(cmd);
|
|
615
690
|
} catch (err) {
|
|
616
691
|
handleSubProcessError2(err);
|
|
617
692
|
}
|
|
618
693
|
}
|
|
619
694
|
__name(runReset, "runReset");
|
|
620
|
-
|
|
695
|
+
function runDeploy(prismaSchemaFile, _options) {
|
|
621
696
|
try {
|
|
622
697
|
const cmd = [
|
|
623
|
-
"
|
|
698
|
+
"migrate deploy",
|
|
624
699
|
` --schema "${prismaSchemaFile}"`
|
|
625
700
|
].join("");
|
|
626
|
-
|
|
701
|
+
execPrisma(cmd);
|
|
627
702
|
} catch (err) {
|
|
628
703
|
handleSubProcessError2(err);
|
|
629
704
|
}
|
|
630
705
|
}
|
|
631
706
|
__name(runDeploy, "runDeploy");
|
|
632
|
-
|
|
707
|
+
function runStatus(prismaSchemaFile, _options) {
|
|
633
708
|
try {
|
|
634
|
-
|
|
709
|
+
execPrisma(`migrate status --schema "${prismaSchemaFile}"`);
|
|
635
710
|
} catch (err) {
|
|
636
711
|
handleSubProcessError2(err);
|
|
637
712
|
}
|
|
638
713
|
}
|
|
639
714
|
__name(runStatus, "runStatus");
|
|
640
|
-
|
|
715
|
+
function runResolve(prismaSchemaFile, options) {
|
|
641
716
|
if (!options.applied && !options.rolledBack) {
|
|
642
717
|
throw new CliError("Either --applied or --rolled-back option must be provided");
|
|
643
718
|
}
|
|
644
719
|
try {
|
|
645
720
|
const cmd = [
|
|
646
|
-
"
|
|
721
|
+
"migrate resolve",
|
|
647
722
|
` --schema "${prismaSchemaFile}"`,
|
|
648
|
-
options.applied ? ` --applied ${options.applied}` : "",
|
|
649
|
-
options.rolledBack ? ` --rolled-back ${options.rolledBack}` : ""
|
|
723
|
+
options.applied ? ` --applied "${options.applied}"` : "",
|
|
724
|
+
options.rolledBack ? ` --rolled-back "${options.rolledBack}"` : ""
|
|
650
725
|
].join("");
|
|
651
|
-
|
|
726
|
+
execPrisma(cmd);
|
|
652
727
|
} catch (err) {
|
|
653
728
|
handleSubProcessError2(err);
|
|
654
729
|
}
|
|
@@ -663,24 +738,10 @@ function handleSubProcessError2(err) {
|
|
|
663
738
|
}
|
|
664
739
|
__name(handleSubProcessError2, "handleSubProcessError");
|
|
665
740
|
|
|
666
|
-
// src/actions/check.ts
|
|
667
|
-
var import_colors5 = __toESM(require("colors"), 1);
|
|
668
|
-
async function run6(options) {
|
|
669
|
-
const schemaFile = getSchemaFile(options.schema);
|
|
670
|
-
try {
|
|
671
|
-
await loadSchemaDocument(schemaFile);
|
|
672
|
-
console.log(import_colors5.default.green("\u2713 Schema validation completed successfully."));
|
|
673
|
-
} catch (error) {
|
|
674
|
-
console.error(import_colors5.default.red("\u2717 Schema validation failed."));
|
|
675
|
-
throw error;
|
|
676
|
-
}
|
|
677
|
-
}
|
|
678
|
-
__name(run6, "run");
|
|
679
|
-
|
|
680
741
|
// src/telemetry.ts
|
|
681
742
|
var import_mixpanel = require("mixpanel");
|
|
682
743
|
var import_node_crypto2 = require("crypto");
|
|
683
|
-
var
|
|
744
|
+
var import_node_fs12 = __toESM(require("fs"), 1);
|
|
684
745
|
var os2 = __toESM(require("os"), 1);
|
|
685
746
|
|
|
686
747
|
// src/constants.ts
|
|
@@ -691,14 +752,14 @@ var import_node_process = require("process");
|
|
|
691
752
|
var isInCi = import_node_process.env["CI"] !== "0" && import_node_process.env["CI"] !== "false" && ("CI" in import_node_process.env || "CONTINUOUS_INTEGRATION" in import_node_process.env || Object.keys(import_node_process.env).some((key) => key.startsWith("CI_")));
|
|
692
753
|
|
|
693
754
|
// src/utils/is-container.ts
|
|
694
|
-
var
|
|
755
|
+
var import_node_fs9 = __toESM(require("fs"), 1);
|
|
695
756
|
|
|
696
757
|
// src/utils/is-docker.ts
|
|
697
|
-
var
|
|
758
|
+
var import_node_fs8 = __toESM(require("fs"), 1);
|
|
698
759
|
var isDockerCached;
|
|
699
760
|
function hasDockerEnv() {
|
|
700
761
|
try {
|
|
701
|
-
|
|
762
|
+
import_node_fs8.default.statSync("/.dockerenv");
|
|
702
763
|
return true;
|
|
703
764
|
} catch {
|
|
704
765
|
return false;
|
|
@@ -707,7 +768,7 @@ function hasDockerEnv() {
|
|
|
707
768
|
__name(hasDockerEnv, "hasDockerEnv");
|
|
708
769
|
function hasDockerCGroup() {
|
|
709
770
|
try {
|
|
710
|
-
return
|
|
771
|
+
return import_node_fs8.default.readFileSync("/proc/self/cgroup", "utf8").includes("docker");
|
|
711
772
|
} catch {
|
|
712
773
|
return false;
|
|
713
774
|
}
|
|
@@ -725,7 +786,7 @@ __name(isDocker, "isDocker");
|
|
|
725
786
|
var cachedResult;
|
|
726
787
|
var hasContainerEnv = /* @__PURE__ */ __name(() => {
|
|
727
788
|
try {
|
|
728
|
-
|
|
789
|
+
import_node_fs9.default.statSync("/run/.containerenv");
|
|
729
790
|
return true;
|
|
730
791
|
} catch {
|
|
731
792
|
return false;
|
|
@@ -742,7 +803,7 @@ __name(isInContainer, "isInContainer");
|
|
|
742
803
|
// src/utils/is-wsl.ts
|
|
743
804
|
var import_node_process2 = __toESM(require("process"), 1);
|
|
744
805
|
var import_node_os = __toESM(require("os"), 1);
|
|
745
|
-
var
|
|
806
|
+
var import_node_fs10 = __toESM(require("fs"), 1);
|
|
746
807
|
var isWsl = /* @__PURE__ */ __name(() => {
|
|
747
808
|
if (import_node_process2.default.platform !== "linux") {
|
|
748
809
|
return false;
|
|
@@ -751,7 +812,7 @@ var isWsl = /* @__PURE__ */ __name(() => {
|
|
|
751
812
|
return true;
|
|
752
813
|
}
|
|
753
814
|
try {
|
|
754
|
-
return
|
|
815
|
+
return import_node_fs10.default.readFileSync("/proc/version", "utf8").toLowerCase().includes("microsoft");
|
|
755
816
|
} catch {
|
|
756
817
|
return false;
|
|
757
818
|
}
|
|
@@ -815,18 +876,18 @@ function getMachineId() {
|
|
|
815
876
|
__name(getMachineId, "getMachineId");
|
|
816
877
|
|
|
817
878
|
// src/utils/version-utils.ts
|
|
818
|
-
var
|
|
819
|
-
var
|
|
879
|
+
var import_colors7 = __toESM(require("colors"), 1);
|
|
880
|
+
var import_node_fs11 = __toESM(require("fs"), 1);
|
|
820
881
|
var import_node_path8 = __toESM(require("path"), 1);
|
|
821
882
|
var import_node_url = require("url");
|
|
822
883
|
var import_semver = __toESM(require("semver"), 1);
|
|
823
|
-
var
|
|
884
|
+
var import_meta2 = {};
|
|
824
885
|
var CHECK_VERSION_TIMEOUT = 2e3;
|
|
825
886
|
var VERSION_CHECK_TAG = "next";
|
|
826
887
|
function getVersion() {
|
|
827
888
|
try {
|
|
828
|
-
const _dirname = typeof __dirname !== "undefined" ? __dirname : import_node_path8.default.dirname((0, import_node_url.fileURLToPath)(
|
|
829
|
-
return JSON.parse(
|
|
889
|
+
const _dirname = typeof __dirname !== "undefined" ? __dirname : import_node_path8.default.dirname((0, import_node_url.fileURLToPath)(import_meta2.url));
|
|
890
|
+
return JSON.parse(import_node_fs11.default.readFileSync(import_node_path8.default.join(_dirname, "../package.json"), "utf8")).version;
|
|
830
891
|
} catch {
|
|
831
892
|
return void 0;
|
|
832
893
|
}
|
|
@@ -841,7 +902,7 @@ async function checkNewVersion() {
|
|
|
841
902
|
return;
|
|
842
903
|
}
|
|
843
904
|
if (latestVersion && currVersion && import_semver.default.gt(latestVersion, currVersion)) {
|
|
844
|
-
console.log(`A newer version ${
|
|
905
|
+
console.log(`A newer version ${import_colors7.default.cyan(latestVersion)} is available.`);
|
|
845
906
|
}
|
|
846
907
|
}
|
|
847
908
|
__name(checkNewVersion, "checkNewVersion");
|
|
@@ -864,7 +925,7 @@ async function getLatestVersion() {
|
|
|
864
925
|
__name(getLatestVersion, "getLatestVersion");
|
|
865
926
|
|
|
866
927
|
// src/telemetry.ts
|
|
867
|
-
var
|
|
928
|
+
var import_meta3 = {};
|
|
868
929
|
var Telemetry = class {
|
|
869
930
|
static {
|
|
870
931
|
__name(this, "Telemetry");
|
|
@@ -955,9 +1016,9 @@ var Telemetry = class {
|
|
|
955
1016
|
}
|
|
956
1017
|
getPrismaVersion() {
|
|
957
1018
|
try {
|
|
958
|
-
const packageJsonPath =
|
|
1019
|
+
const packageJsonPath = import_meta3.resolve("prisma/package.json");
|
|
959
1020
|
const packageJsonUrl = new URL(packageJsonPath);
|
|
960
|
-
const packageJson = JSON.parse(
|
|
1021
|
+
const packageJson = JSON.parse(import_node_fs12.default.readFileSync(packageJsonUrl, "utf8"));
|
|
961
1022
|
return packageJson.version;
|
|
962
1023
|
} catch {
|
|
963
1024
|
return void 0;
|
|
@@ -968,45 +1029,49 @@ var telemetry = new Telemetry();
|
|
|
968
1029
|
|
|
969
1030
|
// src/index.ts
|
|
970
1031
|
var generateAction = /* @__PURE__ */ __name(async (options) => {
|
|
971
|
-
await telemetry.trackCommand("generate", () =>
|
|
1032
|
+
await telemetry.trackCommand("generate", () => run4(options));
|
|
972
1033
|
}, "generateAction");
|
|
973
1034
|
var migrateAction = /* @__PURE__ */ __name(async (subCommand, options) => {
|
|
974
|
-
await telemetry.trackCommand(`migrate ${subCommand}`, () =>
|
|
1035
|
+
await telemetry.trackCommand(`migrate ${subCommand}`, () => run7(subCommand, options));
|
|
975
1036
|
}, "migrateAction");
|
|
976
1037
|
var dbAction = /* @__PURE__ */ __name(async (subCommand, options) => {
|
|
977
|
-
await telemetry.trackCommand(`db ${subCommand}`, () =>
|
|
1038
|
+
await telemetry.trackCommand(`db ${subCommand}`, () => run2(subCommand, options));
|
|
978
1039
|
}, "dbAction");
|
|
979
1040
|
var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
980
|
-
await telemetry.trackCommand("info", () =>
|
|
1041
|
+
await telemetry.trackCommand("info", () => run5(projectPath));
|
|
981
1042
|
}, "infoAction");
|
|
982
1043
|
var initAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
983
|
-
await telemetry.trackCommand("init", () =>
|
|
1044
|
+
await telemetry.trackCommand("init", () => run6(projectPath));
|
|
984
1045
|
}, "initAction");
|
|
985
1046
|
var checkAction = /* @__PURE__ */ __name(async (options) => {
|
|
986
|
-
await telemetry.trackCommand("check", () =>
|
|
1047
|
+
await telemetry.trackCommand("check", () => run(options));
|
|
987
1048
|
}, "checkAction");
|
|
1049
|
+
var formatAction = /* @__PURE__ */ __name(async (options) => {
|
|
1050
|
+
await telemetry.trackCommand("format", () => run3(options));
|
|
1051
|
+
}, "formatAction");
|
|
988
1052
|
function createProgram() {
|
|
989
|
-
const program = new import_commander.Command("zen");
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
program.description(`${import_colors7.default.bold.blue("\u03B6")} ZenStack is the data layer for modern TypeScript apps.
|
|
1053
|
+
const program = new import_commander.Command("zen").alias("zenstack").helpOption("-h, --help", "Show this help message").version(getVersion(), "-v --version", "Show CLI version");
|
|
1054
|
+
const schemaExtensions = import_language3.ZModelLanguageMetaData.fileExtensions.join(", ");
|
|
1055
|
+
program.description(`${import_colors8.default.bold.blue("\u03B6")} ZenStack is the data layer for modern TypeScript apps.
|
|
993
1056
|
|
|
994
1057
|
Documentation: https://zenstack.dev/docs/3.x`).showHelpAfterError().showSuggestionAfterError();
|
|
995
1058
|
const schemaOption = new import_commander.Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "zenstack/schema.zmodel" unless specified in package.json.`);
|
|
996
1059
|
const noVersionCheckOption = new import_commander.Option("--no-version-check", "do not check for new version");
|
|
997
|
-
program.command("generate").description("Run code generation plugins
|
|
1060
|
+
program.command("generate").description("Run code generation plugins").addOption(schemaOption).addOption(noVersionCheckOption).addOption(new import_commander.Option("-o, --output <path>", "default output directory for code generation")).addOption(new import_commander.Option("--lite", "also generate a lite version of schema without attributes").default(false)).addOption(new import_commander.Option("--lite-only", "only generate lite version of schema without attributes").default(false)).addOption(new import_commander.Option("--silent", "suppress all output except errors").default(false)).action(generateAction);
|
|
998
1061
|
const migrateCommand = program.command("migrate").description("Run database schema migration related tasks.");
|
|
999
1062
|
const migrationsOption = new import_commander.Option("--migrations <path>", 'path that contains the "migrations" directory');
|
|
1000
|
-
migrateCommand.command("dev").addOption(schemaOption).addOption(noVersionCheckOption).addOption(new import_commander.Option("-n, --name <name>", "migration name")).addOption(new import_commander.Option("--create-only", "only create migration, do not apply")).addOption(migrationsOption).description("Create a migration from changes in schema and apply it to the database
|
|
1001
|
-
migrateCommand.command("reset").addOption(schemaOption).addOption(new import_commander.Option("--force", "skip the confirmation prompt")).addOption(migrationsOption).addOption(noVersionCheckOption).description("Reset your database and apply all migrations, all data will be lost
|
|
1002
|
-
migrateCommand.command("deploy").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).description("Deploy your pending migrations to your production/staging database
|
|
1003
|
-
migrateCommand.command("status").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).description("Check the status of your database migrations
|
|
1004
|
-
migrateCommand.command("resolve").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).addOption(new import_commander.Option("--applied <migration>", "record a specific migration as applied")).addOption(new import_commander.Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases
|
|
1005
|
-
const dbCommand = program.command("db").description("Manage your database schema during development
|
|
1006
|
-
dbCommand.command("push").description("Push the state from your schema to your database
|
|
1007
|
-
program.command("info").description("Get information of installed ZenStack packages
|
|
1008
|
-
program.command("init").description("Initialize an existing project for ZenStack
|
|
1009
|
-
program.command("check").description("Check a ZModel schema for syntax or semantic errors
|
|
1063
|
+
migrateCommand.command("dev").addOption(schemaOption).addOption(noVersionCheckOption).addOption(new import_commander.Option("-n, --name <name>", "migration name")).addOption(new import_commander.Option("--create-only", "only create migration, do not apply")).addOption(migrationsOption).description("Create a migration from changes in schema and apply it to the database").action((options) => migrateAction("dev", options));
|
|
1064
|
+
migrateCommand.command("reset").addOption(schemaOption).addOption(new import_commander.Option("--force", "skip the confirmation prompt")).addOption(migrationsOption).addOption(noVersionCheckOption).description("Reset your database and apply all migrations, all data will be lost").action((options) => migrateAction("reset", options));
|
|
1065
|
+
migrateCommand.command("deploy").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).description("Deploy your pending migrations to your production/staging database").action((options) => migrateAction("deploy", options));
|
|
1066
|
+
migrateCommand.command("status").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).description("Check the status of your database migrations").action((options) => migrateAction("status", options));
|
|
1067
|
+
migrateCommand.command("resolve").addOption(schemaOption).addOption(noVersionCheckOption).addOption(migrationsOption).addOption(new import_commander.Option("--applied <migration>", "record a specific migration as applied")).addOption(new import_commander.Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases").action((options) => migrateAction("resolve", options));
|
|
1068
|
+
const dbCommand = program.command("db").description("Manage your database schema during development");
|
|
1069
|
+
dbCommand.command("push").description("Push the state from your schema to your database").addOption(schemaOption).addOption(noVersionCheckOption).addOption(new import_commander.Option("--accept-data-loss", "ignore data loss warnings")).addOption(new import_commander.Option("--force-reset", "force a reset of the database before push")).action((options) => dbAction("push", options));
|
|
1070
|
+
program.command("info").description("Get information of installed ZenStack packages").argument("[path]", "project path", ".").addOption(noVersionCheckOption).action(infoAction);
|
|
1071
|
+
program.command("init").description("Initialize an existing project for ZenStack").argument("[path]", "project path", ".").addOption(noVersionCheckOption).action(initAction);
|
|
1072
|
+
program.command("check").description("Check a ZModel schema for syntax or semantic errors").addOption(schemaOption).addOption(noVersionCheckOption).action(checkAction);
|
|
1073
|
+
program.command("format").description("Format a ZModel schema file").addOption(schemaOption).addOption(noVersionCheckOption).action(formatAction);
|
|
1074
|
+
program.addHelpCommand("help [command]", "Display help for a command");
|
|
1010
1075
|
program.hook("preAction", async (_thisCommand, actionCommand) => {
|
|
1011
1076
|
if (actionCommand.getOptionValue("versionCheck") !== false) {
|
|
1012
1077
|
await checkNewVersion();
|
|
@@ -1027,10 +1092,10 @@ async function main() {
|
|
|
1027
1092
|
if (e instanceof import_commander.CommanderError) {
|
|
1028
1093
|
exitCode = e.exitCode;
|
|
1029
1094
|
} else if (e instanceof CliError) {
|
|
1030
|
-
console.error(
|
|
1095
|
+
console.error(import_colors8.default.red(e.message));
|
|
1031
1096
|
exitCode = 1;
|
|
1032
1097
|
} else {
|
|
1033
|
-
console.error(
|
|
1098
|
+
console.error(import_colors8.default.red(`Unhandled error: ${e}`));
|
|
1034
1099
|
exitCode = 1;
|
|
1035
1100
|
}
|
|
1036
1101
|
}
|