@zenstackhq/cli 3.0.0-alpha.29 → 3.0.0-alpha.30

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,5 +1,5 @@
1
1
 
2
- > @zenstackhq/cli@3.0.0-alpha.29 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
2
+ > @zenstackhq/cli@3.0.0-alpha.30 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
3
3
  > tsc --noEmit && tsup-node
4
4
 
5
5
  CLI Building entry: {"index":"src/index.ts"}
@@ -10,13 +10,13 @@
10
10
  CLI Cleaning output folder
11
11
  ESM Build start
12
12
  CJS Build start
13
- CJS dist/index.cjs 26.78 KB
14
- CJS dist/index.cjs.map 48.65 KB
15
- CJS ⚡️ Build success in 166ms
16
- ESM dist/index.js 23.19 KB
17
- ESM dist/index.js.map 48.28 KB
18
- ESM ⚡️ Build success in 170ms
13
+ ESM dist/index.js 23.25 KB
14
+ ESM dist/index.js.map 48.41 KB
15
+ ESM ⚡️ Build success in 117ms
16
+ CJS dist/index.cjs 26.89 KB
17
+ CJS dist/index.cjs.map 48.80 KB
18
+ CJS ⚡️ Build success in 118ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 3255ms
20
+ DTS ⚡️ Build success in 3472ms
21
21
  DTS dist/index.d.ts 108.00 B
22
22
  DTS dist/index.d.cts 108.00 B
package/dist/index.cjs CHANGED
@@ -236,18 +236,18 @@ var import_node_path2 = __toESM(require("path"), 1);
236
236
  var plugin = {
237
237
  name: "Prisma Schema Generator",
238
238
  statusText: "Generating Prisma schema",
239
- async generate({ model, defaultOutputPath, pluginOptions }) {
240
- let outDir = defaultOutputPath;
239
+ async generate({ model, schemaFile, defaultOutputPath, pluginOptions }) {
240
+ let outFile = import_node_path2.default.join(defaultOutputPath, "schema.prisma");
241
241
  if (typeof pluginOptions["output"] === "string") {
242
- outDir = import_node_path2.default.resolve(defaultOutputPath, pluginOptions["output"]);
243
- if (!import_node_fs3.default.existsSync(outDir)) {
244
- import_node_fs3.default.mkdirSync(outDir, {
242
+ outFile = import_node_path2.default.resolve(import_node_path2.default.dirname(schemaFile), pluginOptions["output"]);
243
+ if (!import_node_fs3.default.existsSync(import_node_path2.default.dirname(outFile))) {
244
+ import_node_fs3.default.mkdirSync(import_node_path2.default.dirname(outFile), {
245
245
  recursive: true
246
246
  });
247
247
  }
248
248
  }
249
249
  const prismaSchema = await new import_sdk2.PrismaSchemaGenerator(model).generate();
250
- import_node_fs3.default.writeFileSync(import_node_path2.default.join(outDir, "schema.prisma"), prismaSchema);
250
+ import_node_fs3.default.writeFileSync(outFile, prismaSchema);
251
251
  }
252
252
  };
253
253
  var prisma_default = plugin;
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\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\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\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 the data layer for modern TypeScript 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 \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', 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 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 program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\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 loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\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, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\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 dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\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 return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\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 SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: 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 const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\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 colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","import_ast","import_colors","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","prismaSchema","PrismaSchemaGenerator","writeFileSync","join","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","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","import_ora","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_fs","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","import_colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","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","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
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/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\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\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\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 the data layer for modern TypeScript 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 \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', 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 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 program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\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 loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\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, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\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 dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\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 return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, schemaFile, defaultOutputPath, pluginOptions }) {\n let outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(path.dirname(schemaFile), pluginOptions['output']);\n if (!fs.existsSync(path.dirname(outFile))) {\n fs.mkdirSync(path.dirname(outFile), { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(outFile, prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\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 SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: 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 const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\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 colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","import_ast","import_colors","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","schemaFile","defaultOutputPath","pluginOptions","outFile","path","join","resolve","dirname","fs","existsSync","mkdirSync","recursive","prismaSchema","PrismaSchemaGenerator","writeFileSync","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","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","import_ora","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_fs","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","import_colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","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","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
package/dist/index.js CHANGED
@@ -208,18 +208,18 @@ import path2 from "path";
208
208
  var plugin = {
209
209
  name: "Prisma Schema Generator",
210
210
  statusText: "Generating Prisma schema",
211
- async generate({ model, defaultOutputPath, pluginOptions }) {
212
- let outDir = defaultOutputPath;
211
+ async generate({ model, schemaFile, defaultOutputPath, pluginOptions }) {
212
+ let outFile = path2.join(defaultOutputPath, "schema.prisma");
213
213
  if (typeof pluginOptions["output"] === "string") {
214
- outDir = path2.resolve(defaultOutputPath, pluginOptions["output"]);
215
- if (!fs3.existsSync(outDir)) {
216
- fs3.mkdirSync(outDir, {
214
+ outFile = path2.resolve(path2.dirname(schemaFile), pluginOptions["output"]);
215
+ if (!fs3.existsSync(path2.dirname(outFile))) {
216
+ fs3.mkdirSync(path2.dirname(outFile), {
217
217
  recursive: true
218
218
  });
219
219
  }
220
220
  }
221
221
  const prismaSchema = await new PrismaSchemaGenerator2(model).generate();
222
- fs3.writeFileSync(path2.join(outDir, "schema.prisma"), prismaSchema);
222
+ fs3.writeFileSync(outFile, prismaSchema);
223
223
  }
224
224
  };
225
225
  var prisma_default = plugin;
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\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\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\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 the data layer for modern TypeScript 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 \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', 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 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 program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\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 loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\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, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\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 dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\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 return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\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 SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: 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 const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\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 colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","fs","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","invariant","isPlugin","getLiteral","getLiteralArray","colors","path","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","prismaSchema","writeFileSync","join","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","colors","path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","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","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
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/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\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\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\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 the data layer for modern TypeScript 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 \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\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 .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', 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 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 program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\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 loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\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, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\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 dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\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 return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, schemaFile, defaultOutputPath, pluginOptions }) {\n let outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(path.dirname(schemaFile), pluginOptions['output']);\n if (!fs.existsSync(path.dirname(outFile))) {\n fs.mkdirSync(path.dirname(outFile), { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(outFile, prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\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 SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: 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 const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\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 colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","fs","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","invariant","isPlugin","getLiteral","getLiteralArray","colors","path","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","schemaFile","defaultOutputPath","pluginOptions","outFile","join","resolve","dirname","existsSync","mkdirSync","recursive","prismaSchema","writeFileSync","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","colors","path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","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","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
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.29",
6
+ "version": "3.0.0-alpha.30",
7
7
  "type": "module",
8
8
  "author": {
9
9
  "name": "ZenStack Team"
@@ -28,23 +28,23 @@
28
28
  "ora": "^5.4.1",
29
29
  "package-manager-detector": "^1.3.0",
30
30
  "ts-pattern": "^5.7.1",
31
- "@zenstackhq/common-helpers": "3.0.0-alpha.29",
32
- "@zenstackhq/language": "3.0.0-alpha.29",
33
- "@zenstackhq/sdk": "3.0.0-alpha.29"
31
+ "@zenstackhq/common-helpers": "3.0.0-alpha.30",
32
+ "@zenstackhq/language": "3.0.0-alpha.30",
33
+ "@zenstackhq/sdk": "3.0.0-alpha.30"
34
34
  },
35
35
  "peerDependencies": {
36
- "prisma": "^6.14.0"
36
+ "prisma": "^6.10.0"
37
37
  },
38
38
  "devDependencies": {
39
39
  "@types/better-sqlite3": "^7.6.13",
40
40
  "@types/tmp": "^0.2.6",
41
41
  "better-sqlite3": "^12.2.0",
42
42
  "tmp": "^0.2.3",
43
- "@zenstackhq/runtime": "3.0.0-alpha.29",
44
- "@zenstackhq/eslint-config": "3.0.0-alpha.29",
45
- "@zenstackhq/testtools": "3.0.0-alpha.29",
46
- "@zenstackhq/vitest-config": "3.0.0-alpha.29",
47
- "@zenstackhq/typescript-config": "3.0.0-alpha.29"
43
+ "@zenstackhq/eslint-config": "3.0.0-alpha.30",
44
+ "@zenstackhq/runtime": "3.0.0-alpha.30",
45
+ "@zenstackhq/testtools": "3.0.0-alpha.30",
46
+ "@zenstackhq/typescript-config": "3.0.0-alpha.30",
47
+ "@zenstackhq/vitest-config": "3.0.0-alpha.30"
48
48
  },
49
49
  "scripts": {
50
50
  "build": "tsc --noEmit && tsup-node",
@@ -5,16 +5,16 @@ import path from 'node:path';
5
5
  const plugin: CliPlugin = {
6
6
  name: 'Prisma Schema Generator',
7
7
  statusText: 'Generating Prisma schema',
8
- async generate({ model, defaultOutputPath, pluginOptions }) {
9
- let outDir = defaultOutputPath;
8
+ async generate({ model, schemaFile, defaultOutputPath, pluginOptions }) {
9
+ let outFile = path.join(defaultOutputPath, 'schema.prisma');
10
10
  if (typeof pluginOptions['output'] === 'string') {
11
- outDir = path.resolve(defaultOutputPath, pluginOptions['output']);
12
- if (!fs.existsSync(outDir)) {
13
- fs.mkdirSync(outDir, { recursive: true });
11
+ outFile = path.resolve(path.dirname(schemaFile), pluginOptions['output']);
12
+ if (!fs.existsSync(path.dirname(outFile))) {
13
+ fs.mkdirSync(path.dirname(outFile), { recursive: true });
14
14
  }
15
15
  }
16
16
  const prismaSchema = await new PrismaSchemaGenerator(model).generate();
17
- fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);
17
+ fs.writeFileSync(outFile, prismaSchema);
18
18
  },
19
19
  };
20
20
 
@@ -47,7 +47,7 @@ model User {
47
47
  const workDir = createProject(`
48
48
  plugin prisma {
49
49
  provider = '@core/prisma'
50
- output = './prisma'
50
+ output = '../prisma/schema.prisma'
51
51
  }
52
52
 
53
53
  model User {
@@ -55,6 +55,6 @@ model User {
55
55
  }
56
56
  `);
57
57
  runCli('generate', workDir);
58
- expect(fs.existsSync(path.join(workDir, 'zenstack/prisma/schema.prisma'))).toBe(true);
58
+ expect(fs.existsSync(path.join(workDir, 'prisma/schema.prisma'))).toBe(true);
59
59
  });
60
60
  });