@zenstackhq/cli 3.0.0-alpha.3 → 3.0.0-alpha.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,23 +1,22 @@
1
-
2
- 
3
- > @zenstackhq/cli@3.0.0-alpha.1 build /Users/yiming/git/zenstack/zenstack-v3/packages/cli
4
- > tsup-node
5
-
6
- CLI Building entry: {"index":"src/index.ts"}
7
- CLI Using tsconfig: tsconfig.json
8
- CLI tsup v8.3.5
9
- CLI Using tsup config: /Users/yiming/git/zenstack/zenstack-v3/packages/cli/tsup.config.ts
10
- CLI Target: esnext
11
- CLI Cleaning output folder
12
- ESM Build start
13
- CJS Build start
14
- ESM dist/index.js 14.02 KB
15
- ESM dist/index.js.map 27.76 KB
16
- ESM ⚡️ Build success in 51ms
17
- CJS dist/index.cjs 15.95 KB
18
- CJS dist/index.cjs.map 27.84 KB
19
- CJS ⚡️ Build success in 51ms
20
- DTS Build start
21
- DTS ⚡️ Build success in 1226ms
22
- DTS dist/index.d.ts 108.00 B
23
- DTS dist/index.d.cts 108.00 B
1
+
2
+ > @zenstackhq/cli@3.0.0-alpha.6 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
3
+ > tsup-node
4
+
5
+ CLI Building entry: {"index":"src/index.ts"}
6
+ CLI Using tsconfig: tsconfig.json
7
+ CLI tsup v8.5.0
8
+ CLI Using tsup config: /home/runner/work/zenstack-v3/zenstack-v3/packages/cli/tsup.config.ts
9
+ CLI Target: esnext
10
+ CLI Cleaning output folder
11
+ ESM Build start
12
+ CJS Build start
13
+ ESM dist/index.js 14.85 KB
14
+ ESM dist/index.js.map 30.66 KB
15
+ ESM ⚡️ Build success in 109ms
16
+ CJS dist/index.cjs 17.78 KB
17
+ CJS dist/index.cjs.map 30.80 KB
18
+ CJS ⚡️ Build success in 119ms
19
+ DTS Build start
20
+ DTS ⚡️ Build success in 3381ms
21
+ DTS dist/index.d.ts 108.00 B
22
+ DTS dist/index.d.cts 108.00 B
package/dist/index.cjs CHANGED
@@ -6,9 +6,6 @@ var __getOwnPropNames = Object.getOwnPropertyNames;
6
6
  var __getProtoOf = Object.getPrototypeOf;
7
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
8
8
  var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
9
- var __commonJS = (cb, mod) => function __require() {
10
- return mod || (0, cb[__getOwnPropNames(cb)[0]])((mod = { exports: {} }).exports, mod), mod.exports;
11
- };
12
9
  var __export = (target, all) => {
13
10
  for (var name in all)
14
11
  __defProp(target, name, { get: all[name], enumerable: true });
@@ -31,69 +28,6 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
31
28
  ));
32
29
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
33
30
 
34
- // package.json
35
- var require_package = __commonJS({
36
- "package.json"(exports2, module2) {
37
- module2.exports = {
38
- name: "@zenstackhq/cli",
39
- publisher: "zenstack",
40
- displayName: "ZenStack CLI",
41
- description: "FullStack database toolkit with built-in access control and automatic API generation.",
42
- version: "3.0.0-alpha.3",
43
- type: "module",
44
- author: {
45
- name: "ZenStack Team"
46
- },
47
- homepage: "https://zenstack.dev",
48
- license: "MIT",
49
- keywords: [
50
- "orm",
51
- "fullstack",
52
- "react",
53
- "typescript",
54
- "data modeling"
55
- ],
56
- bin: {
57
- zenstack: "bin/cli"
58
- },
59
- scripts: {
60
- build: "tsup-node",
61
- watch: "tsup-node --watch",
62
- lint: "eslint src --ext ts",
63
- test: "vitest",
64
- pack: "pnpm pack"
65
- },
66
- dependencies: {
67
- "@types/node": "^20.0.0",
68
- "@zenstackhq/language": "workspace:*",
69
- "@zenstackhq/sdk": "workspace:*",
70
- "async-exit-hook": "^2.0.1",
71
- colors: "1.4.0",
72
- commander: "^8.3.0",
73
- langium: "~3.3.0",
74
- ora: "^5.4.1",
75
- "package-manager-detector": "^1.3.0",
76
- "tiny-invariant": "^1.3.3",
77
- "ts-pattern": "^4.3.0"
78
- },
79
- peerDependencies: {
80
- prisma: "^6.0.0",
81
- typescript: "^5.0.0"
82
- },
83
- devDependencies: {
84
- "@types/async-exit-hook": "^2.0.0",
85
- "@types/better-sqlite3": "^7.6.13",
86
- "@types/semver": "^7.3.13",
87
- "@types/tmp": "^0.2.6",
88
- "@zenstackhq/runtime": "workspace:*",
89
- "@zenstackhq/testtools": "workspace:*",
90
- "better-sqlite3": "^11.8.1",
91
- tmp: "^0.2.3"
92
- }
93
- };
94
- }
95
- });
96
-
97
31
  // src/index.ts
98
32
  var src_exports = {};
99
33
  __export(src_exports, {
@@ -180,12 +114,12 @@ function handleSubProcessError(err) {
180
114
  __name(handleSubProcessError, "handleSubProcessError");
181
115
 
182
116
  // src/actions/generate.ts
117
+ var import_common_helpers = require("@zenstackhq/common-helpers");
183
118
  var import_ast = require("@zenstackhq/language/ast");
184
119
  var import_sdk = require("@zenstackhq/sdk");
185
120
  var import_colors2 = __toESM(require("colors"), 1);
186
121
  var import_node_fs2 = __toESM(require("fs"), 1);
187
122
  var import_node_path = __toESM(require("path"), 1);
188
- var import_tiny_invariant = __toESM(require("tiny-invariant"), 1);
189
123
  async function run(options) {
190
124
  const schemaFile = getSchemaFile(options.schema);
191
125
  const model = await loadSchemaDocument(schemaFile);
@@ -204,7 +138,7 @@ import { ZenStackClient } from '@zenstackhq/runtime';
204
138
  import { schema } from '${outputPath}/schema';
205
139
 
206
140
  const client = new ZenStackClient(schema, {
207
- dialectConfig: { ... }
141
+ dialectConfig: { ... }
208
142
  });
209
143
  \`\`\`
210
144
  `);
@@ -215,7 +149,7 @@ async function runPlugins(model, outputPath, tsSchemaFile) {
215
149
  const plugins = model.declarations.filter(import_ast.isPlugin);
216
150
  for (const plugin of plugins) {
217
151
  const providerField = plugin.fields.find((f) => f.name === "provider");
218
- (0, import_tiny_invariant.default)(providerField, `Plugin ${plugin.name} does not have a provider field`);
152
+ (0, import_common_helpers.invariant)(providerField, `Plugin ${plugin.name} does not have a provider field`);
219
153
  const provider = providerField.value.value;
220
154
  let useProvider = provider;
221
155
  if (useProvider.startsWith("@core/")) {
@@ -290,7 +224,7 @@ async function getZenStackPackages(projectPath) {
290
224
  type: "json"
291
225
  }
292
226
  })).default;
293
- } catch (err) {
227
+ } catch {
294
228
  return [];
295
229
  }
296
230
  const packages = Array.from(new Set([
@@ -486,15 +420,16 @@ function handleSubProcessError2(err) {
486
420
  __name(handleSubProcessError2, "handleSubProcessError");
487
421
 
488
422
  // src/utils/version-utils.ts
423
+ var import_node_fs4 = __toESM(require("fs"), 1);
424
+ var import_node_path6 = __toESM(require("path"), 1);
425
+ var import_node_url = require("url");
426
+ var import_meta = {};
489
427
  function getVersion() {
490
428
  try {
491
- return require("../package.json").version;
429
+ const _dirname = typeof __dirname !== "undefined" ? __dirname : import_node_path6.default.dirname((0, import_node_url.fileURLToPath)(import_meta.url));
430
+ return JSON.parse(import_node_fs4.default.readFileSync(import_node_path6.default.join(_dirname, "../package.json"), "utf8")).version;
492
431
  } catch {
493
- try {
494
- return require_package().version;
495
- } catch {
496
- return void 0;
497
- }
432
+ return void 0;
498
433
  }
499
434
  }
500
435
  __name(getVersion, "getVersion");
@@ -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.3\",\n \"type\": \"module\",\n \"author\": {\n \"name\": \"ZenStack Team\"\n },\n \"homepage\": \"https://zenstack.dev\",\n \"license\": \"MIT\",\n \"keywords\": [\n \"orm\",\n \"fullstack\",\n \"react\",\n \"typescript\",\n \"data modeling\"\n ],\n \"bin\": {\n \"zenstack\": \"bin/cli\"\n },\n \"scripts\": {\n \"build\": \"tsup-node\",\n \"watch\": \"tsup-node --watch\",\n \"lint\": \"eslint src --ext ts\",\n \"test\": \"vitest\",\n \"pack\": \"pnpm pack\"\n },\n \"dependencies\": {\n \"@types/node\": \"^20.0.0\",\n \"@zenstackhq/language\": \"workspace:*\",\n \"@zenstackhq/sdk\": \"workspace:*\",\n \"async-exit-hook\": \"^2.0.1\",\n \"colors\": \"1.4.0\",\n \"commander\": \"^8.3.0\",\n \"langium\": \"~3.3.0\",\n \"ora\": \"^5.4.1\",\n \"package-manager-detector\": \"^1.3.0\",\n \"tiny-invariant\": \"^1.3.3\",\n \"ts-pattern\": \"^4.3.0\"\n },\n \"peerDependencies\": {\n \"prisma\": \"^6.0.0\",\n \"typescript\": \"^5.0.0\"\n },\n \"devDependencies\": {\n \"@types/async-exit-hook\": \"^2.0.0\",\n \"@types/better-sqlite3\": \"^7.6.13\",\n \"@types/semver\": \"^7.3.13\",\n \"@types/tmp\": \"^0.2.6\",\n \"@zenstackhq/runtime\": \"workspace:*\",\n \"@zenstackhq/testtools\": \"workspace:*\",\n \"better-sqlite3\": \"^11.8.1\",\n \"tmp\": \"^0.2.3\"\n }\n}\n","import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport * as actions from './actions';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (\n options: Parameters<typeof actions.generate>[0]\n): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ'\n )} ZenStack is a Prisma power pack for building full-stack apps.\\n\\nDocumentation: https://zenstack.dev.`\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(\n new Option(\n '-o, --output <path>',\n 'default output directory for core plugins'\n )\n )\n .action(generateAction);\n\n const migrateCommand = program\n .command('migrate')\n .description('Update the database schema with migrations.');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(\n new Option('--create-only', 'only create migration, do not apply')\n )\n .description(\n 'Create a migration from changes in schema and apply it to the database.'\n )\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .description(\n 'Reset your database and apply all migrations, all data will be lost.'\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description(\n 'Deploy your pending migrations to your production/staging database.'\n )\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .description('check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n const dbCommand = program\n .command('db')\n .description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(\n new Option('--accept-data-loss', 'ignore data loss warnings')\n )\n .addOption(\n new Option(\n '--force-reset',\n 'force a reset of the database before push'\n )\n )\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description(\n 'Get information of installed ZenStack and related packages.'\n )\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n return program;\n}\n\nconst program = createProgram();\nprogram.parse(process.argv);\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile, handleSubProcessError } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(\n path.dirname(schemaFile),\n 'schema.prisma'\n );\n\n switch (command) {\n case 'push':\n await runPush(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runPush(prismaSchemaFile: string, options: any) {\n const cmd = `prisma db push --schema \"${prismaSchemaFile}\"${\n options.acceptDataLoss ? ' --accept-data-loss' : ''\n }${options.forceReset ? ' --force-reset' : ''} --skip-generate`;\n try {\n await execPackage(cmd, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }\n): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import fs from 'node:fs';\nimport { CliError } from '../cli-error';\nimport { loadDocument } from '@zenstackhq/language';\nimport colors from 'colors';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").'\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n console.error(colors.red('Error loading schema:'));\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Failed to load schema');\n }\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (\n err instanceof Error &&\n 'status' in err &&\n typeof err.status === 'number'\n ) {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport type { CliGenerator } from '@zenstackhq/runtime/client';\nimport { PrismaSchemaGenerator, TsSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport invariant from 'tiny-invariant';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: boolean;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = options.output ?? path.dirname(schemaFile);\n\n // generate TS schema\n const tsSchemaFile = path.join(outputPath, 'schema.ts');\n await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);\n\n await runPlugins(model, outputPath, tsSchemaFile);\n\n // generate Prisma schema\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outputPath, 'schema.prisma'), prismaSchema);\n\n if (!options.silent) {\n console.log(colors.green('Generation completed successfully.'));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialectConfig: { ... } \n});\n\\`\\`\\`\n`);\n }\n}\n\nasync function runPlugins(\n model: Model,\n outputPath: string,\n tsSchemaFile: string\n) {\n const plugins = model.declarations.filter(isPlugin);\n for (const plugin of plugins) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(\n providerField,\n `Plugin ${plugin.name} does not have a provider field`\n );\n const provider = (providerField.value as LiteralExpr).value as string;\n let useProvider = provider;\n if (useProvider.startsWith('@core/')) {\n useProvider = `@zenstackhq/runtime/plugins/${useProvider.slice(6)}`;\n }\n const generator = (await import(useProvider)).default as CliGenerator;\n console.log('Running generator:', provider);\n await generator({ model, outputPath, tsSchemaFile });\n }\n}\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error(\n 'Unable to locate package.json. Are you in a valid project directory?'\n );\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(\n colors.yellow(\n 'WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'\n )\n );\n }\n}\n\nasync function getZenStackPackages(\n projectPath: string\n): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch (err) {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [\n ...Object.keys(pkgJson.dependencies ?? {}),\n ...Object.keys(pkgJson.devDependencies ?? {}),\n ].filter((p) => p.startsWith('@zenstackhq/') || p === 'zenstack')\n )\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n })\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(\n `Unable to determine how to install package \"${pkg.name}\". Please install it manually.`\n );\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (\n !fs.existsSync(\n path.join(projectPath, generationFolder, 'schema.zmodel')\n )\n ) {\n fs.writeFileSync(\n path.join(projectPath, generationFolder, 'schema.zmodel'),\n STARTER_ZMODEL\n );\n } else {\n console.log(\n colors.yellow(\n 'Schema file already exists. Skipping generation of sample.'\n )\n );\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(\n colors.gray(\n `See \"${generationFolder}/schema.zmodel\" for your database schema.`\n )\n );\n console.log(\n colors.gray(\n 'Run `zenstack generate` to compile the the schema into a TypeScript file.'\n )\n );\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from './zenstack/schema';\nimport SQLite from 'better-sqlite3';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialectConfig: {\n database: new SQLite('./zenstack/dev.db'),\n },\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(\n path.dirname(schemaFile),\n 'schema.prisma'\n );\n\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as any);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runDev(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(\n `prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: { force: boolean }) {\n try {\n await execPackage(\n `prisma migrate reset --schema \"${prismaSchemaFile}\"${\n options.force ? ' --force' : ''\n }`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(\n `prisma migrate deploy --schema \"${prismaSchemaFile}\"`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(\n `prisma migrate status --schema \"${prismaSchemaFile}\"`,\n {\n stdio: 'inherit',\n }\n );\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (\n err instanceof Error &&\n 'status' in err &&\n typeof err.status === 'number'\n ) {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/* eslint-disable @typescript-eslint/no-var-requires */\nexport function getVersion(): string | undefined {\n try {\n return require('../package.json').version;\n } catch {\n try {\n // dev environment\n return require('../../package.json').version;\n } catch {\n return undefined;\n }\n }\n}\n"],"mappings":"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","names":["exports","module","import_language","import_colors","import_node_path","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","console","error","colors","red","errors","forEach","err","model","handleSubProcessError","Error","status","process","exit","import_colors","import_node_fs","run","options","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","output","path","dirname","tsSchemaFile","join","TsSchemaGenerator","generate","runPlugins","prismaSchema","PrismaSchemaGenerator","fs","writeFileSync","silent","console","log","colors","green","plugins","declarations","filter","isPlugin","plugin","providerField","fields","find","f","name","invariant","provider","value","useProvider","startsWith","slice","generator","default","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runPush","cmd","acceptDataLoss","forceReset","execPackage","stdio","err","handleSubProcessError","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","err","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runDev","runReset","runDeploy","runStatus","_options","execPackage","stdio","err","handleSubProcessError","force","Error","status","process","exit","getVersion","require","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","dbCommand","argument","parse","process","argv"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, Option } from 'commander';\nimport * as actions from './actions';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is a Prisma power pack for building full-stack apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .description('check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n return program;\n}\n\nconst program = createProgram();\nprogram.parse(process.argv);\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile, handleSubProcessError } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'push':\n await runPush(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runPush(prismaSchemaFile: string, options: any) {\n const cmd = `prisma db push --schema \"${prismaSchemaFile}\"${\n options.acceptDataLoss ? ' --accept-data-loss' : ''\n }${options.forceReset ? ' --force-reset' : ''} --skip-generate`;\n try {\n await execPackage(cmd, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import fs from 'node:fs';\nimport { CliError } from '../cli-error';\nimport { loadDocument } from '@zenstackhq/language';\nimport colors from 'colors';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n console.error(colors.red('Error loading schema:'));\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Failed to load schema');\n }\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator, TsSchemaGenerator, type CliGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: boolean;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = options.output ?? path.dirname(schemaFile);\n\n // generate TS schema\n const tsSchemaFile = path.join(outputPath, 'schema.ts');\n await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);\n\n await runPlugins(model, outputPath, tsSchemaFile);\n\n // generate Prisma schema\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outputPath, 'schema.prisma'), prismaSchema);\n\n if (!options.silent) {\n console.log(colors.green('Generation completed successfully.'));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialectConfig: { ... }\n});\n\\`\\`\\`\n`);\n }\n}\n\nasync function runPlugins(model: Model, outputPath: string, tsSchemaFile: string) {\n const plugins = model.declarations.filter(isPlugin);\n for (const plugin of plugins) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n let useProvider = provider;\n if (useProvider.startsWith('@core/')) {\n useProvider = `@zenstackhq/runtime/plugins/${useProvider.slice(6)}`;\n }\n const generator = (await import(useProvider)).default as CliGenerator;\n console.log('Running generator:', provider);\n await generator({ model, outputPath, tsSchemaFile });\n }\n}\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from './zenstack/schema';\nimport SQLite from 'better-sqlite3';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialectConfig: {\n database: new SQLite('./zenstack/dev.db'),\n },\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as any);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runDev(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: { force: boolean }) {\n try {\n await execPackage(`prisma migrate reset --schema \"${prismaSchemaFile}\"${options.force ? ' --force' : ''}`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate deploy --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_path","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","console","error","colors","red","errors","forEach","err","model","handleSubProcessError","Error","status","process","exit","import_colors","import_node_fs","run","options","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","output","path","dirname","tsSchemaFile","join","TsSchemaGenerator","generate","runPlugins","prismaSchema","PrismaSchemaGenerator","fs","writeFileSync","silent","console","log","colors","green","plugins","declarations","filter","isPlugin","plugin","providerField","fields","find","f","name","invariant","provider","value","useProvider","startsWith","slice","generator","default","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runPush","cmd","acceptDataLoss","forceReset","execPackage","stdio","err","handleSubProcessError","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","runGenerate","silent","prismaSchemaFile","path","join","dirname","runDev","runReset","runDeploy","runStatus","_options","execPackage","stdio","err","handleSubProcessError","force","Error","status","process","exit","import_node_fs","import_node_path","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","dbCommand","argument","parse","process","argv"]}
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.3",
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 path2 from "node:path";
10
+ import path2 from "path";
84
11
 
85
12
  // src/utils/exec-utils.ts
86
13
  import { execSync as _exec } from "child_process";
@@ -105,7 +32,7 @@ function execPackage(cmd, options) {
105
32
  __name(execPackage, "execPackage");
106
33
 
107
34
  // src/actions/action-utils.ts
108
- import fs from "node:fs";
35
+ import fs from "fs";
109
36
 
110
37
  // src/cli-error.ts
111
38
  var CliError = class extends Error {
@@ -155,12 +82,12 @@ function handleSubProcessError(err) {
155
82
  __name(handleSubProcessError, "handleSubProcessError");
156
83
 
157
84
  // src/actions/generate.ts
85
+ import { invariant } from "@zenstackhq/common-helpers";
158
86
  import { isPlugin } from "@zenstackhq/language/ast";
159
87
  import { PrismaSchemaGenerator, TsSchemaGenerator } from "@zenstackhq/sdk";
160
88
  import colors2 from "colors";
161
- import fs2 from "node:fs";
162
- import path from "node:path";
163
- import invariant from "tiny-invariant";
89
+ import fs2 from "fs";
90
+ import path from "path";
164
91
  async function run(options) {
165
92
  const schemaFile = getSchemaFile(options.schema);
166
93
  const model = await loadSchemaDocument(schemaFile);
@@ -179,7 +106,7 @@ import { ZenStackClient } from '@zenstackhq/runtime';
179
106
  import { schema } from '${outputPath}/schema';
180
107
 
181
108
  const client = new ZenStackClient(schema, {
182
- dialectConfig: { ... }
109
+ dialectConfig: { ... }
183
110
  });
184
111
  \`\`\`
185
112
  `);
@@ -236,7 +163,7 @@ __name(runPush, "runPush");
236
163
 
237
164
  // src/actions/info.ts
238
165
  import colors3 from "colors";
239
- import path3 from "node:path";
166
+ import path3 from "path";
240
167
  async function run3(projectPath) {
241
168
  const packages = await getZenStackPackages(projectPath);
242
169
  if (!packages) {
@@ -265,7 +192,7 @@ async function getZenStackPackages(projectPath) {
265
192
  type: "json"
266
193
  }
267
194
  })).default;
268
- } catch (err) {
195
+ } catch {
269
196
  return [];
270
197
  }
271
198
  const packages = Array.from(new Set([
@@ -296,8 +223,8 @@ __name(getZenStackPackages, "getZenStackPackages");
296
223
 
297
224
  // src/actions/init.ts
298
225
  import colors4 from "colors";
299
- import fs3 from "node:fs";
300
- import path4 from "node:path";
226
+ import fs3 from "fs";
227
+ import path4 from "path";
301
228
  import ora from "ora";
302
229
  import { detect, resolveCommand } from "package-manager-detector";
303
230
 
@@ -387,7 +314,7 @@ async function run4(projectPath) {
387
314
  __name(run4, "run");
388
315
 
389
316
  // src/actions/migrate.ts
390
- import path5 from "node:path";
317
+ import path5 from "path";
391
318
  async function run5(command, options) {
392
319
  const schemaFile = getSchemaFile(options.schema);
393
320
  await run({
@@ -461,15 +388,15 @@ function handleSubProcessError2(err) {
461
388
  __name(handleSubProcessError2, "handleSubProcessError");
462
389
 
463
390
  // src/utils/version-utils.ts
391
+ import fs4 from "fs";
392
+ import path6 from "path";
393
+ import { fileURLToPath } from "url";
464
394
  function getVersion() {
465
395
  try {
466
- return __require("../package.json").version;
396
+ const _dirname = typeof __dirname !== "undefined" ? __dirname : path6.dirname(fileURLToPath(import.meta.url));
397
+ return JSON.parse(fs4.readFileSync(path6.join(_dirname, "../package.json"), "utf8")).version;
467
398
  } catch {
468
- try {
469
- return require_package().version;
470
- } catch {
471
- return void 0;
472
- }
399
+ return void 0;
473
400
  }
474
401
  }
475
402
  __name(getVersion, "getVersion");
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.3\",\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('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .description('check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n return program;\n}\n\nconst program = createProgram();\nprogram.parse(process.argv);\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile, handleSubProcessError } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'push':\n await runPush(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runPush(prismaSchemaFile: string, options: any) {\n const cmd = `prisma db push --schema \"${prismaSchemaFile}\"${\n options.acceptDataLoss ? ' --accept-data-loss' : ''\n }${options.forceReset ? ' --force-reset' : ''} --skip-generate`;\n try {\n await execPackage(cmd, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import fs from 'node:fs';\nimport { CliError } from '../cli-error';\nimport { loadDocument } from '@zenstackhq/language';\nimport colors from 'colors';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n console.error(colors.red('Error loading schema:'));\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Failed to load schema');\n }\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator, TsSchemaGenerator, type CliGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: boolean;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = options.output ?? path.dirname(schemaFile);\n\n // generate TS schema\n const tsSchemaFile = path.join(outputPath, 'schema.ts');\n await new TsSchemaGenerator().generate(schemaFile, [], tsSchemaFile);\n\n await runPlugins(model, outputPath, tsSchemaFile);\n\n // generate Prisma schema\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outputPath, 'schema.prisma'), prismaSchema);\n\n if (!options.silent) {\n console.log(colors.green('Generation completed successfully.'));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialectConfig: { ... }\n});\n\\`\\`\\`\n`);\n }\n}\n\nasync function runPlugins(model: Model, outputPath: string, tsSchemaFile: string) {\n const plugins = model.declarations.filter(isPlugin);\n for (const plugin of plugins) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n let useProvider = provider;\n if (useProvider.startsWith('@core/')) {\n useProvider = `@zenstackhq/runtime/plugins/${useProvider.slice(6)}`;\n }\n const generator = (await import(useProvider)).default as CliGenerator;\n console.log('Running generator:', provider);\n await generator({ model, outputPath, tsSchemaFile });\n }\n}\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from './zenstack/schema';\nimport SQLite from 'better-sqlite3';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialectConfig: {\n database: new SQLite('./zenstack/dev.db'),\n },\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import path from 'node:path';\nimport { execPackage } from '../utils/exec-utils';\nimport { getSchemaFile } from './action-utils';\nimport { run as runGenerate } from './generate';\n\ntype CommonOptions = {\n schema?: string;\n name?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n\n // run generate first\n await runGenerate({\n schema: schemaFile,\n silent: true,\n });\n\n const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');\n\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as any);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options);\n break;\n }\n}\n\nasync function runDev(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate dev --schema \"${prismaSchemaFile}\" --skip-generate`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: { force: boolean }) {\n try {\n await execPackage(`prisma migrate reset --schema \"${prismaSchemaFile}\"${options.force ? ' --force' : ''}`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate deploy --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: unknown) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`, {\n stdio: 'inherit',\n });\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":";;;;AAAA,SAASA,8BAA8B;AACvC,OAAOC,aAAY;AACnB,SAASC,SAASC,cAAc;;;ACFhC,OAAOC,WAAU;;;ACAjB,SAASC,YAAYC,aAAmC;AAKjD,SAASC,SAASC,KAAaC,SAAyE;AAC3G,QAAM,EAAEC,KAAK,GAAGC,YAAAA,IAAgBF,WAAW,CAAC;AAC5C,QAAMG,YAAYF,MAAM;IAAE,GAAGG,QAAQH;IAAK,GAAGA;EAAI,IAAII;AACrDC,QAAMP,KAAK;IACPQ,UAAU;IACVC,OAAOR,SAASQ,SAAS;IACzBP,KAAKE;IACL,GAAGD;EACP,CAAA;AACJ;AATgBJ;AAcT,SAASW,YACZV,KACAC,SAAyE;AAEzE,QAAMU,iBAAiBN,SAASO,WAAW,KAAA,IAAS,SAAS;AAC7Db,WAAS,GAAGY,cAAAA,IAAkBX,GAAAA,IAAOC,OAAAA;AACzC;AANgBS;;;ACnBhB,OAAOG,QAAQ;;;ACGR,IAAMC,WAAN,cAAuBC,MAAAA;EAH9B,OAG8BA;;;AAAO;;;ADDrC,SAASC,oBAAoB;AAC7B,OAAOC,YAAY;AAEZ,SAASC,cAAcC,MAAa;AACvC,MAAIA,MAAM;AACN,QAAI,CAACC,GAAGC,WAAWF,IAAAA,GAAO;AACtB,YAAM,IAAIG,SAAS,0BAA0BH,IAAAA,EAAM;IACvD;AACA,WAAOA;EACX;AAEA,MAAIC,GAAGC,WAAW,0BAAA,GAA6B;AAC3C,WAAO;EACX,WAAWD,GAAGC,WAAW,iBAAA,GAAoB;AACzC,WAAO;EACX,OAAO;AACH,UAAM,IAAIC,SACN,+FAAA;EAER;AACJ;AAjBgBJ;AAmBhB,eAAsBK,mBAAmBC,YAAkB;AACvD,QAAMC,aAAa,MAAMC,aAAaF,UAAAA;AACtC,MAAI,CAACC,WAAWE,SAAS;AACrBC,YAAQC,MAAMC,OAAOC,IAAI,uBAAA,CAAA;AACzBN,eAAWO,OAAOC,QAAQ,CAACC,QAAAA;AACvBN,cAAQC,MAAMC,OAAOC,IAAIG,GAAAA,CAAAA;IAC7B,CAAA;AACA,UAAM,IAAIZ,SAAS,uBAAA;EACvB;AACA,SAAOG,WAAWU;AACtB;AAVsBZ;AAYf,SAASa,sBAAsBF,KAAY;AAC9C,MAAIA,eAAeG,SAAS,YAAYH,OAAO,OAAOA,IAAII,WAAW,UAAU;AAC3EC,YAAQC,KAAKN,IAAII,MAAM;EAC3B,OAAO;AACHC,YAAQC,KAAK,CAAA;EACjB;AACJ;AANgBJ;;;AEpChB,SAASK,iBAAiB;AAC1B,SAASC,gBAAyC;AAClD,SAASC,uBAAuBC,yBAA4C;AAC5E,OAAOC,aAAY;AACnB,OAAOC,SAAQ;AACf,OAAOC,UAAU;AAYjB,eAAsBC,IAAIC,SAAgB;AACtC,QAAMC,aAAaC,cAAcF,QAAQG,MAAM;AAE/C,QAAMC,QAAQ,MAAMC,mBAAmBJ,UAAAA;AACvC,QAAMK,aAAaN,QAAQO,UAAUC,KAAKC,QAAQR,UAAAA;AAGlD,QAAMS,eAAeF,KAAKG,KAAKL,YAAY,WAAA;AAC3C,QAAM,IAAIM,kBAAAA,EAAoBC,SAASZ,YAAY,CAAA,GAAIS,YAAAA;AAEvD,QAAMI,WAAWV,OAAOE,YAAYI,YAAAA;AAGpC,QAAMK,eAAe,MAAM,IAAIC,sBAAsBZ,KAAAA,EAAOS,SAAQ;AACpEI,EAAAA,IAAGC,cAAcV,KAAKG,KAAKL,YAAY,eAAA,GAAkBS,YAAAA;AAEzD,MAAI,CAACf,QAAQmB,QAAQ;AACjBC,YAAQC,IAAIC,QAAOC,MAAM,oCAAA,CAAA;AACzBH,YAAQC,IAAI;;;;0BAIMf,UAAAA;;;;;;CAMzB;EACG;AACJ;AA9BsBP;AAgCtB,eAAee,WAAWV,OAAcE,YAAoBI,cAAoB;AAC5E,QAAMc,UAAUpB,MAAMqB,aAAaC,OAAOC,QAAAA;AAC1C,aAAWC,UAAUJ,SAAS;AAC1B,UAAMK,gBAAgBD,OAAOE,OAAOC,KAAK,CAACC,MAAMA,EAAEC,SAAS,UAAA;AAC3DC,cAAUL,eAAe,UAAUD,OAAOK,IAAI,iCAAiC;AAC/E,UAAME,WAAYN,cAAcO,MAAsBA;AACtD,QAAIC,cAAcF;AAClB,QAAIE,YAAYC,WAAW,QAAA,GAAW;AAClCD,oBAAc,+BAA+BA,YAAYE,MAAM,CAAA,CAAA;IACnE;AACA,UAAMC,aAAa,MAAM,OAAOH,cAAcI;AAC9CrB,YAAQC,IAAI,sBAAsBc,QAAAA;AAClC,UAAMK,UAAU;MAAEpC;MAAOE;MAAYI;IAAa,CAAA;EACtD;AACJ;AAdeI;;;AJpCf,eAAsB4B,KAAIC,SAAiBC,SAAsB;AAC7D,QAAMC,aAAaC,cAAcF,QAAQG,MAAM;AAG/C,QAAMC,IAAY;IACdD,QAAQF;IACRI,QAAQ;EACZ,CAAA;AAEA,QAAMC,mBAAmBC,MAAKC,KAAKD,MAAKE,QAAQR,UAAAA,GAAa,eAAA;AAE7D,UAAQF,SAAAA;IACJ,KAAK;AACD,YAAMW,QAAQJ,kBAAkBN,OAAAA;AAChC;EACR;AACJ;AAhBsBF,OAAAA,MAAAA;AAkBtB,eAAeY,QAAQJ,kBAA0BN,SAAY;AACzD,QAAMW,MAAM,4BAA4BL,gBAAAA,IACpCN,QAAQY,iBAAiB,wBAAwB,EAAA,GAClDZ,QAAQa,aAAa,mBAAmB,EAAA;AAC3C,MAAI;AACA,UAAMC,YAAYH,KAAK;MACnBI,OAAO;IACX,CAAA;EACJ,SAASC,KAAK;AACVC,0BAAsBD,GAAAA;EAC1B;AACJ;AAXeN;;;AK/Bf,OAAOQ,aAAY;AACnB,OAAOC,WAAU;AAKjB,eAAsBC,KAAIC,aAAmB;AACzC,QAAMC,WAAW,MAAMC,oBAAoBF,WAAAA;AAC3C,MAAI,CAACC,UAAU;AACXE,YAAQC,MAAM,sEAAA;AACd;EACJ;AAEAD,UAAQE,IAAI,8BAAA;AACZ,QAAMC,WAAW,oBAAIC,IAAAA;AACrB,aAAW,EAAEC,KAAKC,QAAO,KAAMR,UAAU;AACrC,QAAIQ,SAAS;AACTH,eAASI,IAAID,OAAAA;IACjB;AACAN,YAAQE,IAAI,OAAOM,QAAOC,MAAMJ,IAAIK,OAAO,EAAA,CAAA,CAAA,IAASJ,OAAAA,EAAS;EACjE;AAEA,MAAIH,SAASQ,OAAO,GAAG;AACnBX,YAAQY,KAAKJ,QAAOK,OAAO,kFAAA,CAAA;EAC/B;AACJ;AAnBsBjB,OAAAA,MAAAA;AAqBtB,eAAeG,oBAAoBF,aAAmB;AAClD,MAAIiB;AAIJ,QAAMC,eAAeC,MAAKC,QAAQpB,WAAAA;AAClC,MAAI;AACAiB,eACI,MAAM,OAAOE,MAAKE,KAAKH,cAAc,cAAA,GAAiB;MAClDI,MAAM;QAAEC,MAAM;MAAO;IACzB,IACFC;EACN,QAAQ;AACJ,WAAO,CAAA;EACX;AAEA,QAAMvB,WAAWwB,MAAMC,KACnB,IAAInB,IACA;OAAIoB,OAAOC,KAAKX,QAAQY,gBAAgB,CAAC,CAAA;OAAOF,OAAOC,KAAKX,QAAQa,mBAAmB,CAAC,CAAA;IAAIC,OACxF,CAACC,MAAMA,EAAEC,WAAW,cAAA,KAAmBD,MAAM,UAAA,CAAA,CAAA,EAGvDE,KAAI;AAEN,QAAMC,SAAS,MAAMC,QAAQC,IACzBpC,SAASqC,IAAI,OAAO9B,QAAAA;AAChB,QAAI;AACA,YAAM+B,cACF,MAAM,OAAO,GAAG/B,GAAAA,iBAAoB;QAChCc,MAAM;UAAEC,MAAM;QAAO;MACzB,IACFC;AACF,aAAO;QAAEhB;QAAKC,SAAS8B,WAAW9B;MAAkB;IACxD,QAAQ;AACJ,aAAO;QAAED;QAAKC,SAAS+B;MAAU;IACrC;EACJ,CAAA,CAAA;AAGJ,SAAOL;AACX;AAxCejC;;;AC3Bf,OAAOuC,aAAY;AACnB,OAAOC,SAAQ;AACf,OAAOC,WAAU;AACjB,OAAOC,SAAS;AAChB,SAASC,QAAQC,sBAAsB;;;ACJhC,IAAMC,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ADY9B,eAAsBC,KAAIC,aAAmB;AACzC,QAAMC,WAAW;IACb;MAAEC,MAAM;MAAwBC,KAAK;IAAK;IAC1C;MAAED,MAAM;MAA4BC,KAAK;IAAM;;AAEnD,MAAIC,KAAK,MAAMC,OAAAA;AACf,MAAI,CAACD,IAAI;AACLA,SAAK;MAAEE,OAAO;MAAOJ,MAAM;IAAM;EACrC;AAEAK,UAAQC,IAAIC,QAAOC,KAAK,0BAA0BN,GAAGE,KAAK,EAAE,CAAA;AAE5D,aAAWK,OAAOV,UAAU;AACxB,UAAMW,WAAWC,eAAeT,GAAGE,OAAO,WAAW;MACjDK,IAAIT;SACAS,IAAIR,MAAM;QAACC,GAAGE,UAAU,SAAS,UAAU;UAAgB,CAAA;KAClE;AACD,QAAI,CAACM,UAAU;AACX,YAAM,IAAIE,SAAS,+CAA+CH,IAAIT,IAAI,gCAAgC;IAC9G;AAEA,UAAMa,UAAUC,IAAI,eAAeL,IAAIT,IAAI,GAAG,EAAEe,MAAK;AACrD,QAAI;AACAC,eAAS,GAAGN,SAASO,OAAO,IAAIP,SAASQ,KAAKC,KAAK,GAAA,CAAA,IAAQ;QACvDC,KAAKtB;MACT,CAAA;AACAe,cAAQQ,QAAO;IACnB,SAASC,GAAG;AACRT,cAAQU,KAAI;AACZ,YAAMD;IACV;EACJ;AAEA,QAAME,mBAAmB;AAEzB,MAAI,CAACC,IAAGC,WAAWC,MAAKR,KAAKrB,aAAa0B,gBAAAA,CAAAA,GAAoB;AAC1DC,IAAAA,IAAGG,UAAUD,MAAKR,KAAKrB,aAAa0B,gBAAAA,CAAAA;EACxC;AAEA,MAAI,CAACC,IAAGC,WAAWC,MAAKR,KAAKrB,aAAa0B,kBAAkB,eAAA,CAAA,GAAmB;AAC3EC,IAAAA,IAAGI,cAAcF,MAAKR,KAAKrB,aAAa0B,kBAAkB,eAAA,GAAkBM,cAAAA;EAChF,OAAO;AACHzB,YAAQC,IAAIC,QAAOwB,OAAO,4DAAA,CAAA;EAC9B;AAEA1B,UAAQC,IAAIC,QAAOyB,MAAM,4CAAA,CAAA;AACzB3B,UAAQC,IAAIC,QAAOC,KAAK,QAAQgB,gBAAAA,2CAA2D,CAAA;AAC3FnB,UAAQC,IAAIC,QAAOC,KAAK,2EAAA,CAAA;AAC5B;AAhDsBX,OAAAA,MAAAA;;;AEZtB,OAAOoC,WAAU;AAajB,eAAsBC,KAAIC,SAAiBC,SAAsB;AAC7D,QAAMC,aAAaC,cAAcF,QAAQG,MAAM;AAG/C,QAAMC,IAAY;IACdD,QAAQF;IACRI,QAAQ;EACZ,CAAA;AAEA,QAAMC,mBAAmBC,MAAKC,KAAKD,MAAKE,QAAQR,UAAAA,GAAa,eAAA;AAE7D,UAAQF,SAAAA;IACJ,KAAK;AACD,YAAMW,OAAOJ,kBAAkBN,OAAAA;AAC/B;IAEJ,KAAK;AACD,YAAMW,SAASL,kBAAkBN,OAAAA;AACjC;IAEJ,KAAK;AACD,YAAMY,UAAUN,kBAAkBN,OAAAA;AAClC;IAEJ,KAAK;AACD,YAAMa,UAAUP,kBAAkBN,OAAAA;AAClC;EACR;AACJ;AA5BsBF,OAAAA,MAAAA;AA8BtB,eAAeY,OAAOJ,kBAA0BQ,UAAiB;AAC7D,MAAI;AACA,UAAMC,YAAY,gCAAgCT,gBAAAA,qBAAqC;MACnFU,OAAO;IACX,CAAA;EACJ,SAASC,KAAK;AACVC,IAAAA,uBAAsBD,GAAAA;EAC1B;AACJ;AAReP;AAUf,eAAeC,SAASL,kBAA0BN,SAA2B;AACzE,MAAI;AACA,UAAMe,YAAY,kCAAkCT,gBAAAA,IAAoBN,QAAQmB,QAAQ,aAAa,EAAA,IAAM;MACvGH,OAAO;IACX,CAAA;EACJ,SAASC,KAAK;AACVC,IAAAA,uBAAsBD,GAAAA;EAC1B;AACJ;AAReN;AAUf,eAAeC,UAAUN,kBAA0BQ,UAAiB;AAChE,MAAI;AACA,UAAMC,YAAY,mCAAmCT,gBAAAA,KAAqB;MACtEU,OAAO;IACX,CAAA;EACJ,SAASC,KAAK;AACVC,IAAAA,uBAAsBD,GAAAA;EAC1B;AACJ;AAReL;AAUf,eAAeC,UAAUP,kBAA0BQ,UAAiB;AAChE,MAAI;AACA,UAAMC,YAAY,mCAAmCT,gBAAAA,KAAqB;MACtEU,OAAO;IACX,CAAA;EACJ,SAASC,KAAK;AACVC,IAAAA,uBAAsBD,GAAAA;EAC1B;AACJ;AAReJ;AAUf,SAASK,uBAAsBD,KAAY;AACvC,MAAIA,eAAeG,SAAS,YAAYH,OAAO,OAAOA,IAAII,WAAW,UAAU;AAC3EC,YAAQC,KAAKN,IAAII,MAAM;EAC3B,OAAO;AACHC,YAAQC,KAAK,CAAA;EACjB;AACJ;AANSL,OAAAA,wBAAAA;;;ACnFT,OAAOM,SAAQ;AACf,OAAOC,WAAU;AACjB,SAASC,qBAAqB;AAEvB,SAASC,aAAAA;AACZ,MAAI;AAEA,UAAMC,WAAW,OAAOC,cAAc,cAAcA,YAAYC,MAAKC,QAAQC,cAAc,YAAYC,GAAG,CAAA;AAC1G,WAAOC,KAAKC,MAAMC,IAAGC,aAAaP,MAAKQ,KAAKV,UAAU,iBAAA,GAAoB,MAAA,CAAA,EAASW;EACvF,QAAQ;AACJ,WAAOC;EACX;AACJ;AARgBb;;;AVEhB,IAAMc,iBAAiB,8BAAOC,YAAAA;AAC1B,QAAcC,IAASD,OAAAA;AAC3B,GAFuB;AAIvB,IAAME,gBAAgB,8BAAOC,SAAiBH,YAAAA;AAC1C,QAAcI,KAAQD,SAASH,OAAAA;AACnC,GAFsB;AAItB,IAAMK,WAAW,8BAAOF,SAAiBH,YAAAA;AACrC,QAAcM,KAAGH,SAASH,OAAAA;AAC9B,GAFiB;AAIjB,IAAMO,aAAa,8BAAOC,gBAAAA;AACtB,QAAcC,KAAKD,WAAAA;AACvB,GAFmB;AAInB,IAAME,aAAa,8BAAOF,gBAAAA;AACtB,QAAcG,KAAKH,WAAAA;AACvB,GAFmB;AAIZ,SAASI,gBAAAA;AACZ,QAAMC,WAAU,IAAIC,QAAQ,UAAA;AAE5BD,EAAAA,SAAQE,QAAQC,WAAAA,GAAe,gBAAgB,qBAAA;AAE/C,QAAMC,mBAAmBC,uBAAuBC,eAAeC,KAAK,IAAA;AAEpEP,EAAAA,SACKQ,YACG,GAAGC,QAAOC,KAAKC,KACX,QAAA,CAAA;;qCACqG,EAE5GC,mBAAkB,EAClBC,yBAAwB;AAE7B,QAAMC,eAAe,IAAIC,OACrB,mBACA,+BAA+BX,gBAAAA,kEAAkF;AAGrHJ,EAAAA,SACKV,QAAQ,UAAA,EACRkB,YAAY,sBAAA,EACZQ,UAAUF,YAAAA,EACVE,UAAU,IAAID,OAAO,uBAAuB,2CAAA,CAAA,EAC5CE,OAAO/B,cAAAA;AAEZ,QAAMgC,iBAAiBlB,SAAQV,QAAQ,SAAA,EAAWkB,YAAY,6CAAA;AAE9DU,iBACK5B,QAAQ,KAAA,EACR0B,UAAUF,YAAAA,EACVE,UAAU,IAAID,OAAO,qBAAqB,gBAAA,CAAA,EAC1CC,UAAU,IAAID,OAAO,iBAAiB,qCAAA,CAAA,EACtCP,YAAY,yEAAA,EACZS,OAAO,CAAC9B,YAAYE,cAAc,OAAOF,OAAAA,CAAAA;AAE9C+B,iBACK5B,QAAQ,OAAA,EACR0B,UAAUF,YAAAA,EACVE,UAAU,IAAID,OAAO,WAAW,8BAAA,CAAA,EAChCP,YAAY,sEAAA,EACZS,OAAO,CAAC9B,YAAYE,cAAc,SAASF,OAAAA,CAAAA;AAEhD+B,iBACK5B,QAAQ,QAAA,EACR0B,UAAUF,YAAAA,EACVN,YAAY,qEAAA,EACZS,OAAO,CAAC9B,YAAYE,cAAc,UAAUF,OAAAA,CAAAA;AAEjD+B,iBACK5B,QAAQ,QAAA,EACR0B,UAAUF,YAAAA,EACVN,YAAY,+CAAA,EACZS,OAAO,CAAC9B,YAAYE,cAAc,UAAUF,OAAAA,CAAAA;AAEjD,QAAMgC,YAAYnB,SAAQV,QAAQ,IAAA,EAAMkB,YAAY,iDAAA;AAEpDW,YACK7B,QAAQ,MAAA,EACRkB,YAAY,kDAAA,EACZQ,UAAUF,YAAAA,EACVE,UAAU,IAAID,OAAO,sBAAsB,2BAAA,CAAA,EAC3CC,UAAU,IAAID,OAAO,iBAAiB,2CAAA,CAAA,EACtCE,OAAO,CAAC9B,YAAYK,SAAS,QAAQL,OAAAA,CAAAA;AAE1Ca,EAAAA,SACKV,QAAQ,MAAA,EACRkB,YAAY,6DAAA,EACZY,SAAS,UAAU,gBAAgB,GAAA,EACnCH,OAAOvB,UAAAA;AAEZM,EAAAA,SACKV,QAAQ,MAAA,EACRkB,YAAY,8CAAA,EACZY,SAAS,UAAU,gBAAgB,GAAA,EACnCH,OAAOpB,UAAAA;AAEZ,SAAOG;AACX;AAhFgBD;AAkFhB,IAAMC,UAAUD,cAAAA;AAChBC,QAAQqB,MAAMC,QAAQC,IAAI;","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","invariant","isPlugin","PrismaSchemaGenerator","TsSchemaGenerator","colors","fs","path","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","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","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"]}
@@ -0,0 +1,4 @@
1
+ import config from '@zenstackhq/eslint-config/base.js';
2
+
3
+ /** @type {import("eslint").Linter.Config} */
4
+ export default config;
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.3",
6
+ "version": "3.0.0-alpha.6",
7
7
  "type": "module",
8
8
  "author": {
9
9
  "name": "ZenStack Team"
@@ -21,37 +21,32 @@
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": "~3.3.0",
26
+ "langium": "3.5.0",
29
27
  "ora": "^5.4.1",
30
28
  "package-manager-detector": "^1.3.0",
31
- "tiny-invariant": "^1.3.3",
32
- "ts-pattern": "^4.3.0",
33
- "@zenstackhq/language": "3.0.0-alpha.3",
34
- "@zenstackhq/sdk": "3.0.0-alpha.3"
29
+ "ts-pattern": "^5.7.1",
30
+ "@zenstackhq/sdk": "3.0.0-alpha.6",
31
+ "@zenstackhq/language": "3.0.0-alpha.6",
32
+ "@zenstackhq/common-helpers": "3.0.0-alpha.6"
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
- "@types/tmp": "^0.2.6",
45
39
  "better-sqlite3": "^11.8.1",
46
- "tmp": "^0.2.3",
47
- "@zenstackhq/testtools": "3.0.0-alpha.3",
48
- "@zenstackhq/runtime": "3.0.0-alpha.3"
40
+ "@zenstackhq/eslint-config": "3.0.0-alpha.6",
41
+ "@zenstackhq/runtime": "3.0.0-alpha.6",
42
+ "@zenstackhq/testtools": "3.0.0-alpha.6",
43
+ "@zenstackhq/typescript-config": "3.0.0-alpha.6"
49
44
  },
50
45
  "scripts": {
51
46
  "build": "tsup-node",
52
47
  "watch": "tsup-node --watch",
53
48
  "lint": "eslint src --ext ts",
54
- "test": "vitest",
49
+ "test": "vitest run",
55
50
  "pack": "pnpm pack"
56
51
  }
57
52
  }
@@ -17,7 +17,7 @@ export function getSchemaFile(file?: string) {
17
17
  return './schema.zmodel';
18
18
  } else {
19
19
  throw new CliError(
20
- 'Schema file not found in default locations ("./zenstack/schema.zmodel" or "./schema.zmodel").'
20
+ 'Schema file not found in default locations ("./zenstack/schema.zmodel" or "./schema.zmodel").',
21
21
  );
22
22
  }
23
23
  }
@@ -35,11 +35,7 @@ export async function loadSchemaDocument(schemaFile: string) {
35
35
  }
36
36
 
37
37
  export function handleSubProcessError(err: unknown) {
38
- if (
39
- err instanceof Error &&
40
- 'status' in err &&
41
- typeof err.status === 'number'
42
- ) {
38
+ if (err instanceof Error && 'status' in err && typeof err.status === 'number') {
43
39
  process.exit(err.status);
44
40
  } else {
45
41
  process.exit(1);
package/src/actions/db.ts CHANGED
@@ -20,10 +20,7 @@ export async function run(command: string, options: CommonOptions) {
20
20
  silent: true,
21
21
  });
22
22
 
23
- const prismaSchemaFile = path.join(
24
- path.dirname(schemaFile),
25
- 'schema.prisma'
26
- );
23
+ const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');
27
24
 
28
25
  switch (command) {
29
26
  case 'push':
@@ -1,10 +1,9 @@
1
+ import { invariant } from '@zenstackhq/common-helpers';
1
2
  import { isPlugin, LiteralExpr, type Model } from '@zenstackhq/language/ast';
2
- import type { CliGenerator } from '@zenstackhq/runtime/client';
3
- import { PrismaSchemaGenerator, TsSchemaGenerator } from '@zenstackhq/sdk';
3
+ import { PrismaSchemaGenerator, TsSchemaGenerator, type CliGenerator } from '@zenstackhq/sdk';
4
4
  import colors from 'colors';
5
5
  import fs from 'node:fs';
6
6
  import path from 'node:path';
7
- import invariant from 'tiny-invariant';
8
7
  import { getSchemaFile, loadSchemaDocument } from './action-utils';
9
8
 
10
9
  type Options = {
@@ -41,25 +40,18 @@ import { ZenStackClient } from '@zenstackhq/runtime';
41
40
  import { schema } from '${outputPath}/schema';
42
41
 
43
42
  const client = new ZenStackClient(schema, {
44
- dialectConfig: { ... }
43
+ dialectConfig: { ... }
45
44
  });
46
45
  \`\`\`
47
46
  `);
48
47
  }
49
48
  }
50
49
 
51
- async function runPlugins(
52
- model: Model,
53
- outputPath: string,
54
- tsSchemaFile: string
55
- ) {
50
+ async function runPlugins(model: Model, outputPath: string, tsSchemaFile: string) {
56
51
  const plugins = model.declarations.filter(isPlugin);
57
52
  for (const plugin of plugins) {
58
53
  const providerField = plugin.fields.find((f) => f.name === 'provider');
59
- invariant(
60
- providerField,
61
- `Plugin ${plugin.name} does not have a provider field`
62
- );
54
+ invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);
63
55
  const provider = (providerField.value as LiteralExpr).value as string;
64
56
  let useProvider = provider;
65
57
  if (useProvider.startsWith('@core/')) {
@@ -7,9 +7,7 @@ import path from 'node:path';
7
7
  export async function run(projectPath: string) {
8
8
  const packages = await getZenStackPackages(projectPath);
9
9
  if (!packages) {
10
- console.error(
11
- 'Unable to locate package.json. Are you in a valid project directory?'
12
- );
10
+ console.error('Unable to locate package.json. Are you in a valid project directory?');
13
11
  return;
14
12
  }
15
13
 
@@ -23,17 +21,11 @@ export async function run(projectPath: string) {
23
21
  }
24
22
 
25
23
  if (versions.size > 1) {
26
- console.warn(
27
- colors.yellow(
28
- 'WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'
29
- )
30
- );
24
+ console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));
31
25
  }
32
26
  }
33
27
 
34
- async function getZenStackPackages(
35
- projectPath: string
36
- ): Promise<Array<{ pkg: string; version: string | undefined }>> {
28
+ async function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {
37
29
  let pkgJson: {
38
30
  dependencies: Record<string, unknown>;
39
31
  devDependencies: Record<string, unknown>;
@@ -45,17 +37,16 @@ async function getZenStackPackages(
45
37
  with: { type: 'json' },
46
38
  })
47
39
  ).default;
48
- } catch (err) {
40
+ } catch {
49
41
  return [];
50
42
  }
51
43
 
52
44
  const packages = Array.from(
53
45
  new Set(
54
- [
55
- ...Object.keys(pkgJson.dependencies ?? {}),
56
- ...Object.keys(pkgJson.devDependencies ?? {}),
57
- ].filter((p) => p.startsWith('@zenstackhq/') || p === 'zenstack')
58
- )
46
+ [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(
47
+ (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',
48
+ ),
49
+ ),
59
50
  ).sort();
60
51
 
61
52
  const result = await Promise.all(
@@ -70,7 +61,7 @@ async function getZenStackPackages(
70
61
  } catch {
71
62
  return { pkg, version: undefined };
72
63
  }
73
- })
64
+ }),
74
65
  );
75
66
 
76
67
  return result;
@@ -28,9 +28,7 @@ export async function run(projectPath: string) {
28
28
  ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),
29
29
  ]);
30
30
  if (!resolved) {
31
- throw new CliError(
32
- `Unable to determine how to install package "${pkg.name}". Please install it manually.`
33
- );
31
+ throw new CliError(`Unable to determine how to install package "${pkg.name}". Please install it manually.`);
34
32
  }
35
33
 
36
34
  const spinner = ora(`Installing "${pkg.name}"`).start();
@@ -51,32 +49,13 @@ export async function run(projectPath: string) {
51
49
  fs.mkdirSync(path.join(projectPath, generationFolder));
52
50
  }
53
51
 
54
- if (
55
- !fs.existsSync(
56
- path.join(projectPath, generationFolder, 'schema.zmodel')
57
- )
58
- ) {
59
- fs.writeFileSync(
60
- path.join(projectPath, generationFolder, 'schema.zmodel'),
61
- STARTER_ZMODEL
62
- );
52
+ if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {
53
+ fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);
63
54
  } else {
64
- console.log(
65
- colors.yellow(
66
- 'Schema file already exists. Skipping generation of sample.'
67
- )
68
- );
55
+ console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));
69
56
  }
70
57
 
71
58
  console.log(colors.green('ZenStack project initialized successfully!'));
72
- console.log(
73
- colors.gray(
74
- `See "${generationFolder}/schema.zmodel" for your database schema.`
75
- )
76
- );
77
- console.log(
78
- colors.gray(
79
- 'Run `zenstack generate` to compile the the schema into a TypeScript file.'
80
- )
81
- );
59
+ console.log(colors.gray(`See "${generationFolder}/schema.zmodel" for your database schema.`));
60
+ console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));
82
61
  }
@@ -20,10 +20,7 @@ export async function run(command: string, options: CommonOptions) {
20
20
  silent: true,
21
21
  });
22
22
 
23
- const prismaSchemaFile = path.join(
24
- path.dirname(schemaFile),
25
- 'schema.prisma'
26
- );
23
+ const prismaSchemaFile = path.join(path.dirname(schemaFile), 'schema.prisma');
27
24
 
28
25
  switch (command) {
29
26
  case 'dev':
@@ -46,12 +43,9 @@ export async function run(command: string, options: CommonOptions) {
46
43
 
47
44
  async function runDev(prismaSchemaFile: string, _options: unknown) {
48
45
  try {
49
- await execPackage(
50
- `prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate`,
51
- {
52
- stdio: 'inherit',
53
- }
54
- );
46
+ await execPackage(`prisma migrate dev --schema "${prismaSchemaFile}" --skip-generate`, {
47
+ stdio: 'inherit',
48
+ });
55
49
  } catch (err) {
56
50
  handleSubProcessError(err);
57
51
  }
@@ -59,14 +53,9 @@ async function runDev(prismaSchemaFile: string, _options: unknown) {
59
53
 
60
54
  async function runReset(prismaSchemaFile: string, options: { force: boolean }) {
61
55
  try {
62
- await execPackage(
63
- `prisma migrate reset --schema "${prismaSchemaFile}"${
64
- options.force ? ' --force' : ''
65
- }`,
66
- {
67
- stdio: 'inherit',
68
- }
69
- );
56
+ await execPackage(`prisma migrate reset --schema "${prismaSchemaFile}"${options.force ? ' --force' : ''}`, {
57
+ stdio: 'inherit',
58
+ });
70
59
  } catch (err) {
71
60
  handleSubProcessError(err);
72
61
  }
@@ -74,12 +63,9 @@ async function runReset(prismaSchemaFile: string, options: { force: boolean }) {
74
63
 
75
64
  async function runDeploy(prismaSchemaFile: string, _options: unknown) {
76
65
  try {
77
- await execPackage(
78
- `prisma migrate deploy --schema "${prismaSchemaFile}"`,
79
- {
80
- stdio: 'inherit',
81
- }
82
- );
66
+ await execPackage(`prisma migrate deploy --schema "${prismaSchemaFile}"`, {
67
+ stdio: 'inherit',
68
+ });
83
69
  } catch (err) {
84
70
  handleSubProcessError(err);
85
71
  }
@@ -87,23 +73,16 @@ async function runDeploy(prismaSchemaFile: string, _options: unknown) {
87
73
 
88
74
  async function runStatus(prismaSchemaFile: string, _options: unknown) {
89
75
  try {
90
- await execPackage(
91
- `prisma migrate status --schema "${prismaSchemaFile}"`,
92
- {
93
- stdio: 'inherit',
94
- }
95
- );
76
+ await execPackage(`prisma migrate status --schema "${prismaSchemaFile}"`, {
77
+ stdio: 'inherit',
78
+ });
96
79
  } catch (err) {
97
80
  handleSubProcessError(err);
98
81
  }
99
82
  }
100
83
 
101
84
  function handleSubProcessError(err: unknown) {
102
- if (
103
- err instanceof Error &&
104
- 'status' in err &&
105
- typeof err.status === 'number'
106
- ) {
85
+ if (err instanceof Error && 'status' in err && typeof err.status === 'number') {
107
86
  process.exit(err.status);
108
87
  } else {
109
88
  process.exit(1);
package/src/index.ts CHANGED
@@ -4,9 +4,7 @@ import { Command, Option } from 'commander';
4
4
  import * as actions from './actions';
5
5
  import { getVersion } from './utils/version-utils';
6
6
 
7
- const generateAction = async (
8
- options: Parameters<typeof actions.generate>[0]
9
- ): Promise<void> => {
7
+ const generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {
10
8
  await actions.generate(options);
11
9
  };
12
10
 
@@ -36,60 +34,45 @@ export function createProgram() {
36
34
  program
37
35
  .description(
38
36
  `${colors.bold.blue(
39
- 'ζ'
40
- )} ZenStack is a Prisma power pack for building full-stack apps.\n\nDocumentation: https://zenstack.dev.`
37
+ 'ζ',
38
+ )} ZenStack is a Prisma power pack for building full-stack apps.\n\nDocumentation: https://zenstack.dev.`,
41
39
  )
42
40
  .showHelpAfterError()
43
41
  .showSuggestionAfterError();
44
42
 
45
43
  const schemaOption = new Option(
46
44
  '--schema <file>',
47
- `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`
45
+ `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`,
48
46
  );
49
47
 
50
48
  program
51
49
  .command('generate')
52
50
  .description('Run code generation.')
53
51
  .addOption(schemaOption)
54
- .addOption(
55
- new Option(
56
- '-o, --output <path>',
57
- 'default output directory for core plugins'
58
- )
59
- )
52
+ .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))
60
53
  .action(generateAction);
61
54
 
62
- const migrateCommand = program
63
- .command('migrate')
64
- .description('Update the database schema with migrations.');
55
+ const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');
65
56
 
66
57
  migrateCommand
67
58
  .command('dev')
68
59
  .addOption(schemaOption)
69
60
  .addOption(new Option('-n, --name <name>', 'migration name'))
70
- .addOption(
71
- new Option('--create-only', 'only create migration, do not apply')
72
- )
73
- .description(
74
- 'Create a migration from changes in schema and apply it to the database.'
75
- )
61
+ .addOption(new Option('--create-only', 'only create migration, do not apply'))
62
+ .description('Create a migration from changes in schema and apply it to the database.')
76
63
  .action((options) => migrateAction('dev', options));
77
64
 
78
65
  migrateCommand
79
66
  .command('reset')
80
67
  .addOption(schemaOption)
81
68
  .addOption(new Option('--force', 'skip the confirmation prompt'))
82
- .description(
83
- 'Reset your database and apply all migrations, all data will be lost.'
84
- )
69
+ .description('Reset your database and apply all migrations, all data will be lost.')
85
70
  .action((options) => migrateAction('reset', options));
86
71
 
87
72
  migrateCommand
88
73
  .command('deploy')
89
74
  .addOption(schemaOption)
90
- .description(
91
- 'Deploy your pending migrations to your production/staging database.'
92
- )
75
+ .description('Deploy your pending migrations to your production/staging database.')
93
76
  .action((options) => migrateAction('deploy', options));
94
77
 
95
78
  migrateCommand
@@ -98,30 +81,19 @@ export function createProgram() {
98
81
  .description('check the status of your database migrations.')
99
82
  .action((options) => migrateAction('status', options));
100
83
 
101
- const dbCommand = program
102
- .command('db')
103
- .description('Manage your database schema during development.');
84
+ const dbCommand = program.command('db').description('Manage your database schema during development.');
104
85
 
105
86
  dbCommand
106
87
  .command('push')
107
88
  .description('Push the state from your schema to your database')
108
89
  .addOption(schemaOption)
109
- .addOption(
110
- new Option('--accept-data-loss', 'ignore data loss warnings')
111
- )
112
- .addOption(
113
- new Option(
114
- '--force-reset',
115
- 'force a reset of the database before push'
116
- )
117
- )
90
+ .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))
91
+ .addOption(new Option('--force-reset', 'force a reset of the database before push'))
118
92
  .action((options) => dbAction('push', options));
119
93
 
120
94
  program
121
95
  .command('info')
122
- .description(
123
- 'Get information of installed ZenStack and related packages.'
124
- )
96
+ .description('Get information of installed ZenStack and related packages.')
125
97
  .argument('[path]', 'project path', '.')
126
98
  .action(infoAction);
127
99
 
@@ -3,10 +3,7 @@ import { execSync as _exec, type ExecSyncOptions } from 'child_process';
3
3
  /**
4
4
  * Utility for executing command synchronously and prints outputs on current console
5
5
  */
6
- export function execSync(
7
- cmd: string,
8
- options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }
9
- ): void {
6
+ export function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {
10
7
  const { env, ...restOptions } = options ?? {};
11
8
  const mergedEnv = env ? { ...process.env, ...env } : undefined;
12
9
  _exec(cmd, {
@@ -22,7 +19,7 @@ export function execSync(
22
19
  */
23
20
  export function execPackage(
24
21
  cmd: string,
25
- options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }
22
+ options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },
26
23
  ): void {
27
24
  const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';
28
25
  execSync(`${packageManager} ${cmd}`, options);
@@ -1,13 +1,13 @@
1
- /* eslint-disable @typescript-eslint/no-var-requires */
2
- export function getVersion(): string | undefined {
1
+ import fs from 'node:fs';
2
+ import path from 'node:path';
3
+ import { fileURLToPath } from 'node:url';
4
+
5
+ export function getVersion() {
3
6
  try {
4
- return require('../package.json').version;
7
+ // isomorphic __dirname
8
+ const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
9
+ return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;
5
10
  } catch {
6
- try {
7
- // dev environment
8
- return require('../../package.json').version;
9
- } catch {
10
- return undefined;
11
- }
11
+ return undefined;
12
12
  }
13
13
  }
package/tsconfig.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
- "extends": "../../tsconfig.json",
2
+ "extends": "@zenstackhq/typescript-config/base.json",
3
3
  "compilerOptions": {
4
4
  "outDir": "dist"
5
5
  },
@@ -1,18 +0,0 @@
1
-
2
- 
3
- > zenstack@3.0.0-alpha.1 lint /Users/yiming/git/zenstack/zenstack-v3/packages/cli
4
- > eslint src --ext ts
5
-
6
- =============
7
-
8
- WARNING: You are currently running a version of TypeScript which is not officially supported by @typescript-eslint/typescript-estree.
9
-
10
- You may find that it works just fine, or you may not.
11
-
12
- SUPPORTED TYPESCRIPT VERSIONS: >=4.7.4 <5.5.0
13
-
14
- YOUR TYPESCRIPT VERSION: 5.7.3
15
-
16
- Please only submit bug reports when using the officially supported version.
17
-
18
- =============