@zenstackhq/cli 3.0.0 → 3.1.1

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 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
2
+ > @zenstackhq/cli@3.1.1 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"}
@@ -12,11 +12,11 @@
12
12
  CJS Build start
13
13
  ESM dist/index.js 39.82 KB
14
14
  ESM dist/index.js.map 83.71 KB
15
- ESM ⚡️ Build success in 158ms
15
+ ESM ⚡️ Build success in 148ms
16
16
  CJS dist/index.cjs 44.11 KB
17
17
  CJS dist/index.cjs.map 84.33 KB
18
- CJS ⚡️ Build success in 158ms
18
+ CJS ⚡️ Build success in 150ms
19
19
  DTS Build start
20
- DTS ⚡️ Build success in 2548ms
20
+ DTS ⚡️ Build success in 2511ms
21
21
  DTS dist/index.d.ts 13.00 B
22
22
  DTS dist/index.d.cts 13.00 B
package/dist/index.cjs CHANGED
@@ -382,7 +382,7 @@ const client = new ZenStackClient(schema, {
382
382
  });
383
383
  \`\`\`
384
384
 
385
- Check documentation: https://zenstack.dev/docs/3.x`);
385
+ Check documentation: https://zenstack.dev/docs/`);
386
386
  }
387
387
  }
388
388
  __name(run4, "run");
@@ -652,11 +652,11 @@ model Post {
652
652
  async function run6(projectPath) {
653
653
  const packages = [
654
654
  {
655
- name: "@zenstackhq/cli@next",
655
+ name: "@zenstackhq/cli@latest",
656
656
  dev: true
657
657
  },
658
658
  {
659
- name: "@zenstackhq/orm@next",
659
+ name: "@zenstackhq/orm@latest",
660
660
  dev: false
661
661
  }
662
662
  ];
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/check.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/format.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/seed.ts","../src/telemetry.ts","../src/constants.ts","../src/utils/is-ci.ts","../src/utils/is-container.ts","../src/utils/is-docker.ts","../src/utils/is-wsl.ts","../src/utils/machine-id-utils.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 { telemetry } from './telemetry';\nimport { checkNewVersion, getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await telemetry.trackCommand('generate', () => actions.generate(options));\n};\n\nconst migrateAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`migrate ${subCommand}`, () => actions.migrate(subCommand, options));\n};\n\nconst dbAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`db ${subCommand}`, () => actions.db(subCommand, options));\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('info', () => actions.info(projectPath));\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('init', () => actions.init(projectPath));\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await telemetry.trackCommand('check', () => actions.check(options));\n};\n\nconst formatAction = async (options: Parameters<typeof actions.format>[0]): Promise<void> => {\n await telemetry.trackCommand('format', () => actions.format(options));\n};\n\nconst seedAction = async (options: Parameters<typeof actions.seed>[0], args: string[]): Promise<void> => {\n await telemetry.trackCommand('db seed', () => actions.seed(options, args));\n};\n\nfunction createProgram() {\n const program = new Command('zen')\n .alias('zenstack')\n .helpOption('-h, --help', 'Show this help message')\n .version(getVersion()!, '-v --version', 'Show CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the modern data layer for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev/docs`,\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 const noVersionCheckOption = new Option('--no-version-check', 'do not check for new version');\n\n program\n .command('generate')\n .description('Run code generation plugins')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .addOption(new Option('--lite', 'also generate a lite version of schema without attributes').default(false))\n .addOption(new Option('--lite-only', 'only generate lite version of schema without attributes').default(false))\n .addOption(new Option('--silent', 'suppress all output except errors').default(false))\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(noVersionCheckOption)\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 .addOption(new Option('--skip-seed', 'skip seeding the database after reset'))\n .addOption(noVersionCheckOption)\n .description('Reset your database and apply all migrations, all data will be lost')\n .addHelpText(\n 'after',\n '\\nIf there is a seed script defined in package.json, it will be run after the reset. Use --skip-seed to skip it.',\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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 dbCommand\n .command('seed')\n .description('Seed the database')\n .allowExcessArguments(true)\n .addHelpText(\n 'after',\n `\nSeed script is configured under the \"zenstack.seed\" field in package.json.\nE.g.:\n{\n \"zenstack\": {\n \"seed\": \"ts-node ./zenstack/seed.ts\"\n }\n}\n\nArguments following -- are passed to the seed script. E.g.: \"zen db seed -- --users 10\"`,\n )\n .addOption(noVersionCheckOption)\n .action((options, command) => seedAction(options, command.args));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(checkAction);\n\n program\n .command('format')\n .description('Format a ZModel schema file')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(formatAction);\n\n program.addHelpCommand('help [command]', 'Display help for a command');\n\n program.hook('preAction', async (_thisCommand, actionCommand) => {\n if (actionCommand.getOptionValue('versionCheck') !== false) {\n await checkNewVersion();\n }\n });\n\n return program;\n}\n\nasync function main() {\n let exitCode = 0;\n\n const program = createProgram();\n program.exitOverride();\n\n try {\n await telemetry.trackCli(async () => {\n await program.parseAsync();\n });\n } catch (e) {\n if (e instanceof CommanderError) {\n // ignore\n exitCode = e.exitCode;\n } else if (e instanceof CliError) {\n // log\n console.error(colors.red(e.message));\n exitCode = 1;\n } else {\n console.error(colors.red(`Unhandled error: ${e}`));\n exitCode = 1;\n }\n }\n\n if (telemetry.isTracking) {\n // give telemetry a chance to send events before exit\n setTimeout(() => {\n process.exit(exitCode);\n }, 200);\n } else {\n process.exit(exitCode);\n }\n}\n\nmain();\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 { 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 if (fs.statSync(pkgJsonConfig.schema).isDirectory()) {\n const schemaPath = path.join(pkgJsonConfig.schema, 'schema.zmodel');\n if (!fs.existsSync(schemaPath)) {\n throw new CliError(`Schema file not found: ${schemaPath}`);\n }\n return schemaPath;\n } else {\n return pkgJsonConfig.schema;\n }\n }\n\n if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./schema.zmodel\" or \"./zenstack/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; seed: string | undefined } = {\n schema: undefined,\n output: undefined,\n seed: undefined,\n };\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 =\n pkgJson.zenstack.schema && typeof pkgJson.zenstack.schema === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema)\n : undefined;\n result.output =\n pkgJson.zenstack.output && typeof pkgJson.zenstack.output === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output)\n : undefined;\n result.seed =\n typeof pkgJson.zenstack.seed === 'string' && pkgJson.zenstack.seed ? pkgJson.zenstack.seed : undefined;\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\nexport async function requireDataSourceUrl(schemaFile: string) {\n const zmodel = await loadSchemaDocument(schemaFile);\n const dataSource = zmodel.declarations.find(isDataSource);\n if (!dataSource?.fields.some((f) => f.name === 'url')) {\n throw new CliError('The schema\\'s \"datasource\" must have a \"url\" field to use this command.');\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import fs from 'node:fs';\nimport { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } 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 const schemaFile = getSchemaFile(options.schema);\n\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\n // generate a temp prisma schema file\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n '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 execPrisma(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';\nimport { fileURLToPath } from 'url';\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\n/**\n * Utility for running prisma commands\n */\nexport function execPrisma(args: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }) {\n let prismaPath: string | undefined;\n try {\n if (typeof import.meta.resolve === 'function') {\n // esm\n prismaPath = fileURLToPath(import.meta.resolve('prisma/build/index.js'));\n } else {\n // cjs\n prismaPath = require.resolve('prisma/build/index.js');\n }\n } catch {\n // ignore and fallback\n }\n\n const _options = {\n ...options,\n env: {\n ...options?.env,\n PRISMA_HIDE_UPDATE_MESSAGE: '1',\n },\n };\n\n if (!prismaPath) {\n // fallback to npx/bunx execute\n execPackage(`prisma ${args}`, _options);\n return;\n }\n\n execSync(`node ${prismaPath} ${args}`, _options);\n}\n","import { formatDocument } from '@zenstackhq/language';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport { getSchemaFile } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for formatting a ZModel schema file.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n let formattedContent: string;\n\n try {\n formattedContent = await formatDocument(fs.readFileSync(schemaFile, 'utf-8'));\n } catch (error) {\n console.error(colors.red('✗ Schema formatting failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n\n fs.writeFileSync(schemaFile, formattedContent, 'utf-8');\n console.log(colors.green('✓ Schema formatting completed successfully.'));\n}\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 { createJiti } from 'jiti';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport ora, { type 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 silent: boolean;\n lite: boolean;\n liteOnly: boolean;\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, options);\n\n if (!options.silent) {\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/orm';\nimport { schema } from '${path.relative('.', outputPath)}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\`\n\nCheck documentation: https://zenstack.dev/docs/3.x`);\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, options: Options) {\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 | undefined;\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 cliPlugin = await loadPluginModule(provider, path.dirname(schemaFile));\n }\n\n if (cliPlugin) {\n const pluginOptions = getPluginOptions(plugin);\n\n // merge CLI options\n if (provider === '@core/typescript') {\n if (pluginOptions['lite'] === undefined) {\n pluginOptions['lite'] = options.lite;\n }\n if (pluginOptions['liteOnly'] === undefined) {\n pluginOptions['liteOnly'] = options.liteOnly;\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions });\n }\n }\n\n const defaultPlugins = [\n {\n plugin: corePlugins['typescript'],\n options: { lite: options.lite, liteOnly: options.liteOnly },\n },\n ];\n defaultPlugins.forEach(({ plugin, options }) => {\n if (!processedPlugins.some((p) => p.cliPlugin === plugin)) {\n // default plugins are run before user plugins\n processedPlugins.unshift({ cliPlugin: plugin, pluginOptions: options });\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 let spinner: Ora | undefined;\n\n if (!options.silent) {\n spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n }\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\nasync function loadPluginModule(provider: string, basePath: string) {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(basePath, moduleSpec);\n }\n\n const importAsEsm = async (spec: string) => {\n try {\n const result = (await import(spec)).default as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const jiti = createJiti(pathToFileURL(basePath).toString());\n const importAsTs = async (spec: string) => {\n try {\n const result = (await jiti.import(spec, { default: true })) as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const esmSuffixes = ['.js', '.mjs'];\n const tsSuffixes = ['.ts', '.mts'];\n\n if (fs.existsSync(moduleSpec) && fs.statSync(moduleSpec).isFile()) {\n // try provider as ESM file\n if (esmSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsEsm(pathToFileURL(moduleSpec).toString());\n }\n\n // try provider as TS file\n if (tsSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsTs(moduleSpec);\n }\n }\n\n // try ESM index files in provider directory\n for (const suffix of esmSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsEsm(pathToFileURL(indexPath).toString());\n }\n }\n\n // try TS index files in provider directory\n for (const suffix of tsSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsTs(indexPath);\n }\n }\n\n // last resort, try to import as esm directly\n try {\n return (await import(moduleSpec)).default as CliPlugin;\n } catch {\n // plugin may not export a generator so we simply ignore the error here\n return undefined;\n }\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 outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(defaultOutputPath, 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 // output path\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\n // lite mode\n const lite = pluginOptions['lite'] === true;\n\n // liteOnly mode\n const liteOnly = pluginOptions['liteOnly'] === true;\n\n // add .js extension when importing\n const importWithFileExtension = pluginOptions['importWithFileExtension'];\n if (importWithFileExtension && typeof importWithFileExtension !== 'string') {\n throw new Error('The \"importWithFileExtension\" option must be a string if specified.');\n }\n\n await new TsSchemaGenerator().generate(model, {\n outDir,\n lite,\n liteOnly,\n importWithFileExtension: importWithFileExtension as string | undefined,\n });\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 if (depPkgJson.private) {\n return undefined;\n }\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result.filter((p) => !!p);\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/orm@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, 'add', [\n pkg.name,\n ...(pkg.dev ? [pm.agent.startsWith('yarn') || pm.agent === 'bun' ? '--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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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 { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils';\nimport { run as runSeed } from './seed';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n skipSeed?: boolean;\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\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\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\nfunction runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.name ? ` --name \"${options.name}\"` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = [\n 'migrate reset',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.force ? ' --force' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n\n if (!options.skipSeed) {\n await runSeed({ noWarnings: true, printStatus: true }, []);\n }\n}\n\nfunction runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n execPrisma(`migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction 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 'migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied \"${options.applied}\"` : '',\n options.rolledBack ? ` --rolled-back \"${options.rolledBack}\"` : '',\n ].join('');\n execPrisma(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 { execaCommand } from 'execa';\nimport { CliError } from '../cli-error';\nimport { getPkgJsonConfig } from './action-utils';\n\ntype Options = {\n noWarnings?: boolean;\n printStatus?: boolean;\n};\n\n/**\n * CLI action for seeding the database.\n */\nexport async function run(options: Options, args: string[]) {\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (!pkgJsonConfig.seed) {\n if (!options.noWarnings) {\n console.warn(colors.yellow('No seed script defined in package.json. Skipping seeding.'));\n }\n return;\n }\n\n const command = `${pkgJsonConfig.seed}${args.length > 0 ? ' ' + args.join(' ') : ''}`;\n\n if (options.printStatus) {\n console.log(colors.gray(`Running seed script \"${command}\"...`));\n }\n\n try {\n await execaCommand(command, {\n stdout: 'inherit',\n stderr: 'inherit',\n });\n } catch (err) {\n console.error(colors.red(err instanceof Error ? err.message : String(err)));\n throw new CliError('Failed to seed the database. Please check the error message above for details.');\n }\n}\n","import { init, type Mixpanel } from 'mixpanel';\nimport { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport * as os from 'os';\nimport { TELEMETRY_TRACKING_TOKEN } from './constants';\nimport { isInCi } from './utils/is-ci';\nimport { isInContainer } from './utils/is-container';\nimport isDocker from './utils/is-docker';\nimport { isWsl } from './utils/is-wsl';\nimport { getMachineId } from './utils/machine-id-utils';\nimport { getVersion } from './utils/version-utils';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = getMachineId();\n private readonly sessionid = randomUUID();\n private readonly _os_type = os.type();\n private readonly _os_release = os.release();\n private readonly _os_arch = os.arch();\n private readonly _os_version = os.version();\n private readonly _os_platform = os.platform();\n private readonly version = getVersion();\n private readonly prismaVersion = this.getPrismaVersion();\n private readonly isDocker = isDocker();\n private readonly isWsl = isWsl();\n private readonly isContainer = isInContainer();\n private readonly isCi = isInCi;\n\n constructor() {\n if (process.env['DO_NOT_TRACK'] !== '1' && TELEMETRY_TRACKING_TOKEN) {\n this.mixpanel = init(TELEMETRY_TRACKING_TOKEN, {\n geolocate: true,\n });\n }\n }\n\n get isTracking() {\n return !!this.mixpanel;\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os_type,\n osType: this._os_type,\n osRelease: this._os_release,\n osPlatform: this._os_platform,\n osArch: this._os_arch,\n osVersion: this._os_version,\n nodeVersion: process.version,\n version: this.version,\n prismaVersion: this.prismaVersion,\n isDocker: this.isDocker,\n isWsl: this.isWsl,\n isContainer: this.isContainer,\n isCi: this.isCi,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n trackError(err: Error) {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n }\n\n async trackSpan<T>(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<T> | T,\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n return await action();\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n\n async trackCommand(command: string, action: () => Promise<void> | void) {\n await this.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command }, action);\n }\n\n async trackCli(action: () => Promise<void> | void) {\n await this.trackSpan('cli:start', 'cli:complete', 'cli:error', {}, action);\n }\n\n getPrismaVersion() {\n try {\n const packageJsonPath = import.meta.resolve('prisma/package.json');\n const packageJsonUrl = new URL(packageJsonPath);\n const packageJson = JSON.parse(fs.readFileSync(packageJsonUrl, 'utf8'));\n return packageJson.version;\n } catch {\n return undefined;\n }\n }\n}\n\nexport const telemetry = new Telemetry();\n","// replaced at build time\nexport const TELEMETRY_TRACKING_TOKEN = '<TELEMETRY_TRACKING_TOKEN>';\n\n// plugin-contributed model file name\nexport const PLUGIN_MODULE_NAME = 'plugin.zmodel';\n","import { env } from 'node:process';\nexport const isInCi =\n env['CI'] !== '0' &&\n env['CI'] !== 'false' &&\n ('CI' in env || 'CONTINUOUS_INTEGRATION' in env || Object.keys(env).some((key) => key.startsWith('CI_')));\n","import fs from 'node:fs';\nimport isDocker from './is-docker';\n\nlet cachedResult: boolean | undefined;\n\n// Podman detection\nconst hasContainerEnv = () => {\n try {\n fs.statSync('/run/.containerenv');\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isInContainer() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (cachedResult === undefined) {\n cachedResult = hasContainerEnv() || isDocker();\n }\n\n return cachedResult;\n}\n","// Copied over from https://github.com/sindresorhus/is-docker for CJS compatibility\n\nimport fs from 'node:fs';\n\nlet isDockerCached: boolean | undefined;\n\nfunction hasDockerEnv() {\n try {\n fs.statSync('/.dockerenv');\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasDockerCGroup() {\n try {\n return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n } catch {\n return false;\n }\n}\n\nexport default function isDocker() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (isDockerCached === undefined) {\n isDockerCached = hasDockerEnv() || hasDockerCGroup();\n }\n\n return isDockerCached;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nexport const isWsl = () => {\n if (process.platform !== 'linux') {\n return false;\n }\n\n if (os.release().toLowerCase().includes('microsoft')) {\n return true;\n }\n\n try {\n return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft');\n } catch {\n return false;\n }\n};\n","// modified from https://github.com/automation-stack/node-machine-id\n\nimport { execSync } from 'child_process';\nimport { createHash, randomUUID } from 'node:crypto';\n\nconst { platform } = process;\nconst win32RegBinPath = {\n native: '%windir%\\\\System32',\n mixed: '%windir%\\\\sysnative\\\\cmd.exe /c %windir%\\\\System32',\n};\nconst guid = {\n darwin: 'ioreg -rd1 -c IOPlatformExpertDevice',\n win32:\n `${win32RegBinPath[isWindowsProcessMixedOrNativeArchitecture()]}\\\\REG.exe ` +\n 'QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography ' +\n '/v MachineGuid',\n linux: '( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname 2> /dev/null) | head -n 1 || :',\n freebsd: 'kenv -q smbios.system.uuid || sysctl -n kern.hostuuid',\n};\n\nfunction isWindowsProcessMixedOrNativeArchitecture() {\n // eslint-disable-next-line no-prototype-builtins\n if (process.arch === 'ia32' && process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) {\n return 'mixed';\n }\n return 'native';\n}\n\nfunction hash(guid: string): string {\n return createHash('sha256').update(guid).digest('hex');\n}\n\nfunction expose(result: string): string | undefined {\n switch (platform) {\n case 'darwin':\n return result\n .split('IOPlatformUUID')[1]\n ?.split('\\n')[0]\n ?.replace(/=|\\s+|\"/gi, '')\n .toLowerCase();\n case 'win32':\n return result\n .toString()\n .split('REG_SZ')[1]\n ?.replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'linux':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'freebsd':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n default:\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n}\n\nexport function getMachineId() {\n if (!(platform in guid)) {\n return randomUUID();\n }\n try {\n const value = execSync(guid[platform as keyof typeof guid]);\n const id = expose(value.toString());\n if (!id) {\n return randomUUID();\n }\n return hash(id);\n } catch {\n return randomUUID();\n }\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport semver from 'semver';\n\nconst CHECK_VERSION_TIMEOUT = 2000;\nconst VERSION_CHECK_TAG = 'next';\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\nexport async function checkNewVersion() {\n const currVersion = getVersion();\n let latestVersion: string;\n try {\n latestVersion = await getLatestVersion();\n } catch {\n // noop\n return;\n }\n\n if (latestVersion && currVersion && semver.gt(latestVersion, currVersion)) {\n console.log(`A newer version ${colors.cyan(latestVersion)} is available.`);\n }\n}\n\nexport async function getLatestVersion() {\n const fetchResult = await fetch(`https://registry.npmjs.org/@zenstackhq/cli/${VERSION_CHECK_TAG}`, {\n headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' },\n signal: AbortSignal.timeout(CHECK_VERSION_TIMEOUT),\n });\n\n if (fetchResult.ok) {\n const data: any = await fetchResult.json();\n const latestVersion = data?.version;\n if (typeof latestVersion === 'string' && semver.valid(latestVersion)) {\n return latestVersion;\n }\n }\n\n throw new Error('invalid npm registry response');\n}\n"],"mappings":"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","names":["import_language","import_colors","import_colors","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","statSync","isDirectory","schemaPath","path","join","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","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","seed","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","push","up","length","requireDataSourceUrl","zmodel","dataSource","fields","f","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","execPrisma","args","prismaPath","resolve","fileURLToPath","require","_options","PRISMA_HIDE_UPDATE_MESSAGE","run","command","options","runPush","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPrisma","err","handleSubProcessError","fs","existsSync","unlinkSync","import_language","import_colors","import_node_fs","run","options","schemaFile","getSchemaFile","schema","formattedContent","formatDocument","fs","readFileSync","error","console","colors","red","writeFileSync","log","green","import_ast","import_colors","import_node_fs","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outFile","path","join","resolve","fs","existsSync","dirname","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","lite","liteOnly","importWithFileExtension","Error","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","path","relative","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","loadPluginModule","pluginOptions","getPluginOptions","undefined","lite","liteOnly","push","defaultPlugins","forEach","some","p","unshift","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","error","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","warn","basePath","moduleSpec","resolve","importAsEsm","spec","default","message","jiti","createJiti","pathToFileURL","toString","importAsTs","import","esmSuffixes","tsSuffixes","fs","existsSync","statSync","isFile","suffix","endsWith","indexPath","join","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","private","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","startsWith","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","import_colors","run","options","args","pkgJsonConfig","getPkgJsonConfig","process","cwd","seed","noWarnings","console","warn","colors","yellow","command","length","join","printStatus","log","gray","execaCommand","stdout","stderr","err","error","red","Error","message","String","CliError","run","command","options","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPrisma","err","handleSubProcessError","force","skipSeed","runSeed","noWarnings","printStatus","_options","applied","rolledBack","CliError","Error","status","process","exit","import_node_crypto","import_node_fs","os","TELEMETRY_TRACKING_TOKEN","isInCi","env","Object","keys","some","key","startsWith","import_node_fs","import_node_fs","isDockerCached","hasDockerEnv","fs","statSync","hasDockerCGroup","readFileSync","includes","isDocker","undefined","cachedResult","hasContainerEnv","fs","statSync","isInContainer","undefined","isDocker","import_node_process","import_node_fs","isWsl","process","platform","os","release","toLowerCase","includes","fs","readFileSync","import_child_process","platform","process","win32RegBinPath","native","mixed","guid","darwin","win32","isWindowsProcessMixedOrNativeArchitecture","linux","freebsd","arch","env","hasOwnProperty","hash","createHash","update","digest","expose","result","split","replace","toLowerCase","toString","Error","getMachineId","randomUUID","value","execSync","id","import_colors","import_node_fs","import_node_path","import_node_url","import_meta","CHECK_VERSION_TIMEOUT","VERSION_CHECK_TAG","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","import_meta","url","JSON","parse","fs","readFileSync","join","version","undefined","checkNewVersion","currVersion","latestVersion","getLatestVersion","semver","gt","console","log","colors","cyan","fetchResult","fetch","headers","accept","signal","AbortSignal","timeout","ok","data","json","valid","Error","import_meta","Telemetry","mixpanel","hostId","getMachineId","sessionid","randomUUID","_os_type","type","_os_release","release","_os_arch","arch","_os_version","version","_os_platform","platform","getVersion","prismaVersion","getPrismaVersion","isDocker","isWsl","isContainer","isInContainer","isCi","isInCi","process","env","TELEMETRY_TRACKING_TOKEN","init","geolocate","isTracking","track","event","properties","payload","distinct_id","session","time","Date","$os","osType","osRelease","osPlatform","osArch","osVersion","nodeVersion","trackError","err","message","stack","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","duration","trackCommand","command","trackCli","packageJsonPath","import_meta","resolve","packageJsonUrl","URL","packageJson","JSON","parse","fs","readFileSync","undefined","telemetry","generateAction","options","telemetry","trackCommand","generate","migrateAction","subCommand","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","formatAction","format","seedAction","args","seed","createProgram","program","Command","alias","helpOption","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","noVersionCheckOption","command","addOption","default","action","migrateCommand","migrationsOption","addHelpText","dbCommand","allowExcessArguments","argument","addHelpCommand","hook","_thisCommand","actionCommand","getOptionValue","checkNewVersion","main","exitCode","exitOverride","trackCli","parseAsync","e","CommanderError","CliError","console","error","red","message","isTracking","setTimeout","process","exit"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/check.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/format.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/seed.ts","../src/telemetry.ts","../src/constants.ts","../src/utils/is-ci.ts","../src/utils/is-container.ts","../src/utils/is-docker.ts","../src/utils/is-wsl.ts","../src/utils/machine-id-utils.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 { telemetry } from './telemetry';\nimport { checkNewVersion, getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await telemetry.trackCommand('generate', () => actions.generate(options));\n};\n\nconst migrateAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`migrate ${subCommand}`, () => actions.migrate(subCommand, options));\n};\n\nconst dbAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`db ${subCommand}`, () => actions.db(subCommand, options));\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('info', () => actions.info(projectPath));\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('init', () => actions.init(projectPath));\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await telemetry.trackCommand('check', () => actions.check(options));\n};\n\nconst formatAction = async (options: Parameters<typeof actions.format>[0]): Promise<void> => {\n await telemetry.trackCommand('format', () => actions.format(options));\n};\n\nconst seedAction = async (options: Parameters<typeof actions.seed>[0], args: string[]): Promise<void> => {\n await telemetry.trackCommand('db seed', () => actions.seed(options, args));\n};\n\nfunction createProgram() {\n const program = new Command('zen')\n .alias('zenstack')\n .helpOption('-h, --help', 'Show this help message')\n .version(getVersion()!, '-v --version', 'Show CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the modern data layer for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev/docs`,\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 const noVersionCheckOption = new Option('--no-version-check', 'do not check for new version');\n\n program\n .command('generate')\n .description('Run code generation plugins')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .addOption(new Option('--lite', 'also generate a lite version of schema without attributes').default(false))\n .addOption(new Option('--lite-only', 'only generate lite version of schema without attributes').default(false))\n .addOption(new Option('--silent', 'suppress all output except errors').default(false))\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(noVersionCheckOption)\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 .addOption(new Option('--skip-seed', 'skip seeding the database after reset'))\n .addOption(noVersionCheckOption)\n .description('Reset your database and apply all migrations, all data will be lost')\n .addHelpText(\n 'after',\n '\\nIf there is a seed script defined in package.json, it will be run after the reset. Use --skip-seed to skip it.',\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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 dbCommand\n .command('seed')\n .description('Seed the database')\n .allowExcessArguments(true)\n .addHelpText(\n 'after',\n `\nSeed script is configured under the \"zenstack.seed\" field in package.json.\nE.g.:\n{\n \"zenstack\": {\n \"seed\": \"ts-node ./zenstack/seed.ts\"\n }\n}\n\nArguments following -- are passed to the seed script. E.g.: \"zen db seed -- --users 10\"`,\n )\n .addOption(noVersionCheckOption)\n .action((options, command) => seedAction(options, command.args));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(checkAction);\n\n program\n .command('format')\n .description('Format a ZModel schema file')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(formatAction);\n\n program.addHelpCommand('help [command]', 'Display help for a command');\n\n program.hook('preAction', async (_thisCommand, actionCommand) => {\n if (actionCommand.getOptionValue('versionCheck') !== false) {\n await checkNewVersion();\n }\n });\n\n return program;\n}\n\nasync function main() {\n let exitCode = 0;\n\n const program = createProgram();\n program.exitOverride();\n\n try {\n await telemetry.trackCli(async () => {\n await program.parseAsync();\n });\n } catch (e) {\n if (e instanceof CommanderError) {\n // ignore\n exitCode = e.exitCode;\n } else if (e instanceof CliError) {\n // log\n console.error(colors.red(e.message));\n exitCode = 1;\n } else {\n console.error(colors.red(`Unhandled error: ${e}`));\n exitCode = 1;\n }\n }\n\n if (telemetry.isTracking) {\n // give telemetry a chance to send events before exit\n setTimeout(() => {\n process.exit(exitCode);\n }, 200);\n } else {\n process.exit(exitCode);\n }\n}\n\nmain();\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 { 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 if (fs.statSync(pkgJsonConfig.schema).isDirectory()) {\n const schemaPath = path.join(pkgJsonConfig.schema, 'schema.zmodel');\n if (!fs.existsSync(schemaPath)) {\n throw new CliError(`Schema file not found: ${schemaPath}`);\n }\n return schemaPath;\n } else {\n return pkgJsonConfig.schema;\n }\n }\n\n if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./schema.zmodel\" or \"./zenstack/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; seed: string | undefined } = {\n schema: undefined,\n output: undefined,\n seed: undefined,\n };\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 =\n pkgJson.zenstack.schema && typeof pkgJson.zenstack.schema === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema)\n : undefined;\n result.output =\n pkgJson.zenstack.output && typeof pkgJson.zenstack.output === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output)\n : undefined;\n result.seed =\n typeof pkgJson.zenstack.seed === 'string' && pkgJson.zenstack.seed ? pkgJson.zenstack.seed : undefined;\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\nexport async function requireDataSourceUrl(schemaFile: string) {\n const zmodel = await loadSchemaDocument(schemaFile);\n const dataSource = zmodel.declarations.find(isDataSource);\n if (!dataSource?.fields.some((f) => f.name === 'url')) {\n throw new CliError('The schema\\'s \"datasource\" must have a \"url\" field to use this command.');\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import fs from 'node:fs';\nimport { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } 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 const schemaFile = getSchemaFile(options.schema);\n\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\n // generate a temp prisma schema file\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n '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 execPrisma(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';\nimport { fileURLToPath } from 'url';\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\n/**\n * Utility for running prisma commands\n */\nexport function execPrisma(args: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }) {\n let prismaPath: string | undefined;\n try {\n if (typeof import.meta.resolve === 'function') {\n // esm\n prismaPath = fileURLToPath(import.meta.resolve('prisma/build/index.js'));\n } else {\n // cjs\n prismaPath = require.resolve('prisma/build/index.js');\n }\n } catch {\n // ignore and fallback\n }\n\n const _options = {\n ...options,\n env: {\n ...options?.env,\n PRISMA_HIDE_UPDATE_MESSAGE: '1',\n },\n };\n\n if (!prismaPath) {\n // fallback to npx/bunx execute\n execPackage(`prisma ${args}`, _options);\n return;\n }\n\n execSync(`node ${prismaPath} ${args}`, _options);\n}\n","import { formatDocument } from '@zenstackhq/language';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport { getSchemaFile } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for formatting a ZModel schema file.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n let formattedContent: string;\n\n try {\n formattedContent = await formatDocument(fs.readFileSync(schemaFile, 'utf-8'));\n } catch (error) {\n console.error(colors.red('✗ Schema formatting failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n\n fs.writeFileSync(schemaFile, formattedContent, 'utf-8');\n console.log(colors.green('✓ Schema formatting completed successfully.'));\n}\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 { createJiti } from 'jiti';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport ora, { type 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 silent: boolean;\n lite: boolean;\n liteOnly: boolean;\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, options);\n\n if (!options.silent) {\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/orm';\nimport { schema } from '${path.relative('.', outputPath)}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\`\n\nCheck documentation: https://zenstack.dev/docs/`);\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, options: Options) {\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 | undefined;\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 cliPlugin = await loadPluginModule(provider, path.dirname(schemaFile));\n }\n\n if (cliPlugin) {\n const pluginOptions = getPluginOptions(plugin);\n\n // merge CLI options\n if (provider === '@core/typescript') {\n if (pluginOptions['lite'] === undefined) {\n pluginOptions['lite'] = options.lite;\n }\n if (pluginOptions['liteOnly'] === undefined) {\n pluginOptions['liteOnly'] = options.liteOnly;\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions });\n }\n }\n\n const defaultPlugins = [\n {\n plugin: corePlugins['typescript'],\n options: { lite: options.lite, liteOnly: options.liteOnly },\n },\n ];\n defaultPlugins.forEach(({ plugin, options }) => {\n if (!processedPlugins.some((p) => p.cliPlugin === plugin)) {\n // default plugins are run before user plugins\n processedPlugins.unshift({ cliPlugin: plugin, pluginOptions: options });\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 let spinner: Ora | undefined;\n\n if (!options.silent) {\n spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n }\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\nasync function loadPluginModule(provider: string, basePath: string) {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(basePath, moduleSpec);\n }\n\n const importAsEsm = async (spec: string) => {\n try {\n const result = (await import(spec)).default as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const jiti = createJiti(pathToFileURL(basePath).toString());\n const importAsTs = async (spec: string) => {\n try {\n const result = (await jiti.import(spec, { default: true })) as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const esmSuffixes = ['.js', '.mjs'];\n const tsSuffixes = ['.ts', '.mts'];\n\n if (fs.existsSync(moduleSpec) && fs.statSync(moduleSpec).isFile()) {\n // try provider as ESM file\n if (esmSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsEsm(pathToFileURL(moduleSpec).toString());\n }\n\n // try provider as TS file\n if (tsSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsTs(moduleSpec);\n }\n }\n\n // try ESM index files in provider directory\n for (const suffix of esmSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsEsm(pathToFileURL(indexPath).toString());\n }\n }\n\n // try TS index files in provider directory\n for (const suffix of tsSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsTs(indexPath);\n }\n }\n\n // last resort, try to import as esm directly\n try {\n return (await import(moduleSpec)).default as CliPlugin;\n } catch {\n // plugin may not export a generator so we simply ignore the error here\n return undefined;\n }\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 outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(defaultOutputPath, 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 // output path\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\n // lite mode\n const lite = pluginOptions['lite'] === true;\n\n // liteOnly mode\n const liteOnly = pluginOptions['liteOnly'] === true;\n\n // add .js extension when importing\n const importWithFileExtension = pluginOptions['importWithFileExtension'];\n if (importWithFileExtension && typeof importWithFileExtension !== 'string') {\n throw new Error('The \"importWithFileExtension\" option must be a string if specified.');\n }\n\n await new TsSchemaGenerator().generate(model, {\n outDir,\n lite,\n liteOnly,\n importWithFileExtension: importWithFileExtension as string | undefined,\n });\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 if (depPkgJson.private) {\n return undefined;\n }\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result.filter((p) => !!p);\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@latest', dev: true },\n { name: '@zenstackhq/orm@latest', 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, 'add', [\n pkg.name,\n ...(pkg.dev ? [pm.agent.startsWith('yarn') || pm.agent === 'bun' ? '--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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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 { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils';\nimport { run as runSeed } from './seed';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n skipSeed?: boolean;\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\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\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\nfunction runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.name ? ` --name \"${options.name}\"` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = [\n 'migrate reset',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.force ? ' --force' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n\n if (!options.skipSeed) {\n await runSeed({ noWarnings: true, printStatus: true }, []);\n }\n}\n\nfunction runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n execPrisma(`migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction 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 'migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied \"${options.applied}\"` : '',\n options.rolledBack ? ` --rolled-back \"${options.rolledBack}\"` : '',\n ].join('');\n execPrisma(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 { execaCommand } from 'execa';\nimport { CliError } from '../cli-error';\nimport { getPkgJsonConfig } from './action-utils';\n\ntype Options = {\n noWarnings?: boolean;\n printStatus?: boolean;\n};\n\n/**\n * CLI action for seeding the database.\n */\nexport async function run(options: Options, args: string[]) {\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (!pkgJsonConfig.seed) {\n if (!options.noWarnings) {\n console.warn(colors.yellow('No seed script defined in package.json. Skipping seeding.'));\n }\n return;\n }\n\n const command = `${pkgJsonConfig.seed}${args.length > 0 ? ' ' + args.join(' ') : ''}`;\n\n if (options.printStatus) {\n console.log(colors.gray(`Running seed script \"${command}\"...`));\n }\n\n try {\n await execaCommand(command, {\n stdout: 'inherit',\n stderr: 'inherit',\n });\n } catch (err) {\n console.error(colors.red(err instanceof Error ? err.message : String(err)));\n throw new CliError('Failed to seed the database. Please check the error message above for details.');\n }\n}\n","import { init, type Mixpanel } from 'mixpanel';\nimport { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport * as os from 'os';\nimport { TELEMETRY_TRACKING_TOKEN } from './constants';\nimport { isInCi } from './utils/is-ci';\nimport { isInContainer } from './utils/is-container';\nimport isDocker from './utils/is-docker';\nimport { isWsl } from './utils/is-wsl';\nimport { getMachineId } from './utils/machine-id-utils';\nimport { getVersion } from './utils/version-utils';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = getMachineId();\n private readonly sessionid = randomUUID();\n private readonly _os_type = os.type();\n private readonly _os_release = os.release();\n private readonly _os_arch = os.arch();\n private readonly _os_version = os.version();\n private readonly _os_platform = os.platform();\n private readonly version = getVersion();\n private readonly prismaVersion = this.getPrismaVersion();\n private readonly isDocker = isDocker();\n private readonly isWsl = isWsl();\n private readonly isContainer = isInContainer();\n private readonly isCi = isInCi;\n\n constructor() {\n if (process.env['DO_NOT_TRACK'] !== '1' && TELEMETRY_TRACKING_TOKEN) {\n this.mixpanel = init(TELEMETRY_TRACKING_TOKEN, {\n geolocate: true,\n });\n }\n }\n\n get isTracking() {\n return !!this.mixpanel;\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os_type,\n osType: this._os_type,\n osRelease: this._os_release,\n osPlatform: this._os_platform,\n osArch: this._os_arch,\n osVersion: this._os_version,\n nodeVersion: process.version,\n version: this.version,\n prismaVersion: this.prismaVersion,\n isDocker: this.isDocker,\n isWsl: this.isWsl,\n isContainer: this.isContainer,\n isCi: this.isCi,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n trackError(err: Error) {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n }\n\n async trackSpan<T>(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<T> | T,\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n return await action();\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n\n async trackCommand(command: string, action: () => Promise<void> | void) {\n await this.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command }, action);\n }\n\n async trackCli(action: () => Promise<void> | void) {\n await this.trackSpan('cli:start', 'cli:complete', 'cli:error', {}, action);\n }\n\n getPrismaVersion() {\n try {\n const packageJsonPath = import.meta.resolve('prisma/package.json');\n const packageJsonUrl = new URL(packageJsonPath);\n const packageJson = JSON.parse(fs.readFileSync(packageJsonUrl, 'utf8'));\n return packageJson.version;\n } catch {\n return undefined;\n }\n }\n}\n\nexport const telemetry = new Telemetry();\n","// replaced at build time\nexport const TELEMETRY_TRACKING_TOKEN = '<TELEMETRY_TRACKING_TOKEN>';\n\n// plugin-contributed model file name\nexport const PLUGIN_MODULE_NAME = 'plugin.zmodel';\n","import { env } from 'node:process';\nexport const isInCi =\n env['CI'] !== '0' &&\n env['CI'] !== 'false' &&\n ('CI' in env || 'CONTINUOUS_INTEGRATION' in env || Object.keys(env).some((key) => key.startsWith('CI_')));\n","import fs from 'node:fs';\nimport isDocker from './is-docker';\n\nlet cachedResult: boolean | undefined;\n\n// Podman detection\nconst hasContainerEnv = () => {\n try {\n fs.statSync('/run/.containerenv');\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isInContainer() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (cachedResult === undefined) {\n cachedResult = hasContainerEnv() || isDocker();\n }\n\n return cachedResult;\n}\n","// Copied over from https://github.com/sindresorhus/is-docker for CJS compatibility\n\nimport fs from 'node:fs';\n\nlet isDockerCached: boolean | undefined;\n\nfunction hasDockerEnv() {\n try {\n fs.statSync('/.dockerenv');\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasDockerCGroup() {\n try {\n return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n } catch {\n return false;\n }\n}\n\nexport default function isDocker() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (isDockerCached === undefined) {\n isDockerCached = hasDockerEnv() || hasDockerCGroup();\n }\n\n return isDockerCached;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nexport const isWsl = () => {\n if (process.platform !== 'linux') {\n return false;\n }\n\n if (os.release().toLowerCase().includes('microsoft')) {\n return true;\n }\n\n try {\n return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft');\n } catch {\n return false;\n }\n};\n","// modified from https://github.com/automation-stack/node-machine-id\n\nimport { execSync } from 'child_process';\nimport { createHash, randomUUID } from 'node:crypto';\n\nconst { platform } = process;\nconst win32RegBinPath = {\n native: '%windir%\\\\System32',\n mixed: '%windir%\\\\sysnative\\\\cmd.exe /c %windir%\\\\System32',\n};\nconst guid = {\n darwin: 'ioreg -rd1 -c IOPlatformExpertDevice',\n win32:\n `${win32RegBinPath[isWindowsProcessMixedOrNativeArchitecture()]}\\\\REG.exe ` +\n 'QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography ' +\n '/v MachineGuid',\n linux: '( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname 2> /dev/null) | head -n 1 || :',\n freebsd: 'kenv -q smbios.system.uuid || sysctl -n kern.hostuuid',\n};\n\nfunction isWindowsProcessMixedOrNativeArchitecture() {\n // eslint-disable-next-line no-prototype-builtins\n if (process.arch === 'ia32' && process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) {\n return 'mixed';\n }\n return 'native';\n}\n\nfunction hash(guid: string): string {\n return createHash('sha256').update(guid).digest('hex');\n}\n\nfunction expose(result: string): string | undefined {\n switch (platform) {\n case 'darwin':\n return result\n .split('IOPlatformUUID')[1]\n ?.split('\\n')[0]\n ?.replace(/=|\\s+|\"/gi, '')\n .toLowerCase();\n case 'win32':\n return result\n .toString()\n .split('REG_SZ')[1]\n ?.replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'linux':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'freebsd':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n default:\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n}\n\nexport function getMachineId() {\n if (!(platform in guid)) {\n return randomUUID();\n }\n try {\n const value = execSync(guid[platform as keyof typeof guid]);\n const id = expose(value.toString());\n if (!id) {\n return randomUUID();\n }\n return hash(id);\n } catch {\n return randomUUID();\n }\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport semver from 'semver';\n\nconst CHECK_VERSION_TIMEOUT = 2000;\nconst VERSION_CHECK_TAG = 'next';\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\nexport async function checkNewVersion() {\n const currVersion = getVersion();\n let latestVersion: string;\n try {\n latestVersion = await getLatestVersion();\n } catch {\n // noop\n return;\n }\n\n if (latestVersion && currVersion && semver.gt(latestVersion, currVersion)) {\n console.log(`A newer version ${colors.cyan(latestVersion)} is available.`);\n }\n}\n\nexport async function getLatestVersion() {\n const fetchResult = await fetch(`https://registry.npmjs.org/@zenstackhq/cli/${VERSION_CHECK_TAG}`, {\n headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' },\n signal: AbortSignal.timeout(CHECK_VERSION_TIMEOUT),\n });\n\n if (fetchResult.ok) {\n const data: any = await fetchResult.json();\n const latestVersion = data?.version;\n if (typeof latestVersion === 'string' && semver.valid(latestVersion)) {\n return latestVersion;\n }\n }\n\n throw new Error('invalid npm registry response');\n}\n"],"mappings":"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","names":["import_language","import_colors","import_colors","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","statSync","isDirectory","schemaPath","path","join","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","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","seed","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","push","up","length","requireDataSourceUrl","zmodel","dataSource","fields","f","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","execPrisma","args","prismaPath","resolve","fileURLToPath","require","_options","PRISMA_HIDE_UPDATE_MESSAGE","run","command","options","runPush","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPrisma","err","handleSubProcessError","fs","existsSync","unlinkSync","import_language","import_colors","import_node_fs","run","options","schemaFile","getSchemaFile","schema","formattedContent","formatDocument","fs","readFileSync","error","console","colors","red","writeFileSync","log","green","import_ast","import_colors","import_node_fs","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outFile","path","join","resolve","fs","existsSync","dirname","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","lite","liteOnly","importWithFileExtension","Error","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","path","relative","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","loadPluginModule","pluginOptions","getPluginOptions","undefined","lite","liteOnly","push","defaultPlugins","forEach","some","p","unshift","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","error","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","warn","basePath","moduleSpec","resolve","importAsEsm","spec","default","message","jiti","createJiti","pathToFileURL","toString","importAsTs","import","esmSuffixes","tsSuffixes","fs","existsSync","statSync","isFile","suffix","endsWith","indexPath","join","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","private","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","startsWith","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","import_colors","run","options","args","pkgJsonConfig","getPkgJsonConfig","process","cwd","seed","noWarnings","console","warn","colors","yellow","command","length","join","printStatus","log","gray","execaCommand","stdout","stderr","err","error","red","Error","message","String","CliError","run","command","options","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPrisma","err","handleSubProcessError","force","skipSeed","runSeed","noWarnings","printStatus","_options","applied","rolledBack","CliError","Error","status","process","exit","import_node_crypto","import_node_fs","os","TELEMETRY_TRACKING_TOKEN","isInCi","env","Object","keys","some","key","startsWith","import_node_fs","import_node_fs","isDockerCached","hasDockerEnv","fs","statSync","hasDockerCGroup","readFileSync","includes","isDocker","undefined","cachedResult","hasContainerEnv","fs","statSync","isInContainer","undefined","isDocker","import_node_process","import_node_fs","isWsl","process","platform","os","release","toLowerCase","includes","fs","readFileSync","import_child_process","platform","process","win32RegBinPath","native","mixed","guid","darwin","win32","isWindowsProcessMixedOrNativeArchitecture","linux","freebsd","arch","env","hasOwnProperty","hash","createHash","update","digest","expose","result","split","replace","toLowerCase","toString","Error","getMachineId","randomUUID","value","execSync","id","import_colors","import_node_fs","import_node_path","import_node_url","import_meta","CHECK_VERSION_TIMEOUT","VERSION_CHECK_TAG","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","import_meta","url","JSON","parse","fs","readFileSync","join","version","undefined","checkNewVersion","currVersion","latestVersion","getLatestVersion","semver","gt","console","log","colors","cyan","fetchResult","fetch","headers","accept","signal","AbortSignal","timeout","ok","data","json","valid","Error","import_meta","Telemetry","mixpanel","hostId","getMachineId","sessionid","randomUUID","_os_type","type","_os_release","release","_os_arch","arch","_os_version","version","_os_platform","platform","getVersion","prismaVersion","getPrismaVersion","isDocker","isWsl","isContainer","isInContainer","isCi","isInCi","process","env","TELEMETRY_TRACKING_TOKEN","init","geolocate","isTracking","track","event","properties","payload","distinct_id","session","time","Date","$os","osType","osRelease","osPlatform","osArch","osVersion","nodeVersion","trackError","err","message","stack","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","duration","trackCommand","command","trackCli","packageJsonPath","import_meta","resolve","packageJsonUrl","URL","packageJson","JSON","parse","fs","readFileSync","undefined","telemetry","generateAction","options","telemetry","trackCommand","generate","migrateAction","subCommand","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","formatAction","format","seedAction","args","seed","createProgram","program","Command","alias","helpOption","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","noVersionCheckOption","command","addOption","default","action","migrateCommand","migrationsOption","addHelpText","dbCommand","allowExcessArguments","argument","addHelpCommand","hook","_thisCommand","actionCommand","getOptionValue","checkNewVersion","main","exitCode","exitOverride","trackCli","parseAsync","e","CommanderError","CliError","console","error","red","message","isTracking","setTimeout","process","exit"]}
package/dist/index.js CHANGED
@@ -365,7 +365,7 @@ const client = new ZenStackClient(schema, {
365
365
  });
366
366
  \`\`\`
367
367
 
368
- Check documentation: https://zenstack.dev/docs/3.x`);
368
+ Check documentation: https://zenstack.dev/docs/`);
369
369
  }
370
370
  }
371
371
  __name(run4, "run");
@@ -635,11 +635,11 @@ model Post {
635
635
  async function run6(projectPath) {
636
636
  const packages = [
637
637
  {
638
- name: "@zenstackhq/cli@next",
638
+ name: "@zenstackhq/cli@latest",
639
639
  dev: true
640
640
  },
641
641
  {
642
- name: "@zenstackhq/orm@next",
642
+ name: "@zenstackhq/orm@latest",
643
643
  dev: false
644
644
  }
645
645
  ];
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/actions/check.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/format.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/seed.ts","../src/telemetry.ts","../src/constants.ts","../src/utils/is-ci.ts","../src/utils/is-container.ts","../src/utils/is-docker.ts","../src/utils/is-wsl.ts","../src/utils/machine-id-utils.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 { telemetry } from './telemetry';\nimport { checkNewVersion, getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await telemetry.trackCommand('generate', () => actions.generate(options));\n};\n\nconst migrateAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`migrate ${subCommand}`, () => actions.migrate(subCommand, options));\n};\n\nconst dbAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`db ${subCommand}`, () => actions.db(subCommand, options));\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('info', () => actions.info(projectPath));\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('init', () => actions.init(projectPath));\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await telemetry.trackCommand('check', () => actions.check(options));\n};\n\nconst formatAction = async (options: Parameters<typeof actions.format>[0]): Promise<void> => {\n await telemetry.trackCommand('format', () => actions.format(options));\n};\n\nconst seedAction = async (options: Parameters<typeof actions.seed>[0], args: string[]): Promise<void> => {\n await telemetry.trackCommand('db seed', () => actions.seed(options, args));\n};\n\nfunction createProgram() {\n const program = new Command('zen')\n .alias('zenstack')\n .helpOption('-h, --help', 'Show this help message')\n .version(getVersion()!, '-v --version', 'Show CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the modern data layer for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev/docs`,\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 const noVersionCheckOption = new Option('--no-version-check', 'do not check for new version');\n\n program\n .command('generate')\n .description('Run code generation plugins')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .addOption(new Option('--lite', 'also generate a lite version of schema without attributes').default(false))\n .addOption(new Option('--lite-only', 'only generate lite version of schema without attributes').default(false))\n .addOption(new Option('--silent', 'suppress all output except errors').default(false))\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(noVersionCheckOption)\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 .addOption(new Option('--skip-seed', 'skip seeding the database after reset'))\n .addOption(noVersionCheckOption)\n .description('Reset your database and apply all migrations, all data will be lost')\n .addHelpText(\n 'after',\n '\\nIf there is a seed script defined in package.json, it will be run after the reset. Use --skip-seed to skip it.',\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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 dbCommand\n .command('seed')\n .description('Seed the database')\n .allowExcessArguments(true)\n .addHelpText(\n 'after',\n `\nSeed script is configured under the \"zenstack.seed\" field in package.json.\nE.g.:\n{\n \"zenstack\": {\n \"seed\": \"ts-node ./zenstack/seed.ts\"\n }\n}\n\nArguments following -- are passed to the seed script. E.g.: \"zen db seed -- --users 10\"`,\n )\n .addOption(noVersionCheckOption)\n .action((options, command) => seedAction(options, command.args));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(checkAction);\n\n program\n .command('format')\n .description('Format a ZModel schema file')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(formatAction);\n\n program.addHelpCommand('help [command]', 'Display help for a command');\n\n program.hook('preAction', async (_thisCommand, actionCommand) => {\n if (actionCommand.getOptionValue('versionCheck') !== false) {\n await checkNewVersion();\n }\n });\n\n return program;\n}\n\nasync function main() {\n let exitCode = 0;\n\n const program = createProgram();\n program.exitOverride();\n\n try {\n await telemetry.trackCli(async () => {\n await program.parseAsync();\n });\n } catch (e) {\n if (e instanceof CommanderError) {\n // ignore\n exitCode = e.exitCode;\n } else if (e instanceof CliError) {\n // log\n console.error(colors.red(e.message));\n exitCode = 1;\n } else {\n console.error(colors.red(`Unhandled error: ${e}`));\n exitCode = 1;\n }\n }\n\n if (telemetry.isTracking) {\n // give telemetry a chance to send events before exit\n setTimeout(() => {\n process.exit(exitCode);\n }, 200);\n } else {\n process.exit(exitCode);\n }\n}\n\nmain();\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 { 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 if (fs.statSync(pkgJsonConfig.schema).isDirectory()) {\n const schemaPath = path.join(pkgJsonConfig.schema, 'schema.zmodel');\n if (!fs.existsSync(schemaPath)) {\n throw new CliError(`Schema file not found: ${schemaPath}`);\n }\n return schemaPath;\n } else {\n return pkgJsonConfig.schema;\n }\n }\n\n if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./schema.zmodel\" or \"./zenstack/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; seed: string | undefined } = {\n schema: undefined,\n output: undefined,\n seed: undefined,\n };\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 =\n pkgJson.zenstack.schema && typeof pkgJson.zenstack.schema === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema)\n : undefined;\n result.output =\n pkgJson.zenstack.output && typeof pkgJson.zenstack.output === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output)\n : undefined;\n result.seed =\n typeof pkgJson.zenstack.seed === 'string' && pkgJson.zenstack.seed ? pkgJson.zenstack.seed : undefined;\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\nexport async function requireDataSourceUrl(schemaFile: string) {\n const zmodel = await loadSchemaDocument(schemaFile);\n const dataSource = zmodel.declarations.find(isDataSource);\n if (!dataSource?.fields.some((f) => f.name === 'url')) {\n throw new CliError('The schema\\'s \"datasource\" must have a \"url\" field to use this command.');\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import fs from 'node:fs';\nimport { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } 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 const schemaFile = getSchemaFile(options.schema);\n\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\n // generate a temp prisma schema file\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n '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 execPrisma(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';\nimport { fileURLToPath } from 'url';\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\n/**\n * Utility for running prisma commands\n */\nexport function execPrisma(args: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }) {\n let prismaPath: string | undefined;\n try {\n if (typeof import.meta.resolve === 'function') {\n // esm\n prismaPath = fileURLToPath(import.meta.resolve('prisma/build/index.js'));\n } else {\n // cjs\n prismaPath = require.resolve('prisma/build/index.js');\n }\n } catch {\n // ignore and fallback\n }\n\n const _options = {\n ...options,\n env: {\n ...options?.env,\n PRISMA_HIDE_UPDATE_MESSAGE: '1',\n },\n };\n\n if (!prismaPath) {\n // fallback to npx/bunx execute\n execPackage(`prisma ${args}`, _options);\n return;\n }\n\n execSync(`node ${prismaPath} ${args}`, _options);\n}\n","import { formatDocument } from '@zenstackhq/language';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport { getSchemaFile } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for formatting a ZModel schema file.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n let formattedContent: string;\n\n try {\n formattedContent = await formatDocument(fs.readFileSync(schemaFile, 'utf-8'));\n } catch (error) {\n console.error(colors.red('✗ Schema formatting failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n\n fs.writeFileSync(schemaFile, formattedContent, 'utf-8');\n console.log(colors.green('✓ Schema formatting completed successfully.'));\n}\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 { createJiti } from 'jiti';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport ora, { type 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 silent: boolean;\n lite: boolean;\n liteOnly: boolean;\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, options);\n\n if (!options.silent) {\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/orm';\nimport { schema } from '${path.relative('.', outputPath)}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\`\n\nCheck documentation: https://zenstack.dev/docs/3.x`);\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, options: Options) {\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 | undefined;\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 cliPlugin = await loadPluginModule(provider, path.dirname(schemaFile));\n }\n\n if (cliPlugin) {\n const pluginOptions = getPluginOptions(plugin);\n\n // merge CLI options\n if (provider === '@core/typescript') {\n if (pluginOptions['lite'] === undefined) {\n pluginOptions['lite'] = options.lite;\n }\n if (pluginOptions['liteOnly'] === undefined) {\n pluginOptions['liteOnly'] = options.liteOnly;\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions });\n }\n }\n\n const defaultPlugins = [\n {\n plugin: corePlugins['typescript'],\n options: { lite: options.lite, liteOnly: options.liteOnly },\n },\n ];\n defaultPlugins.forEach(({ plugin, options }) => {\n if (!processedPlugins.some((p) => p.cliPlugin === plugin)) {\n // default plugins are run before user plugins\n processedPlugins.unshift({ cliPlugin: plugin, pluginOptions: options });\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 let spinner: Ora | undefined;\n\n if (!options.silent) {\n spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n }\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\nasync function loadPluginModule(provider: string, basePath: string) {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(basePath, moduleSpec);\n }\n\n const importAsEsm = async (spec: string) => {\n try {\n const result = (await import(spec)).default as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const jiti = createJiti(pathToFileURL(basePath).toString());\n const importAsTs = async (spec: string) => {\n try {\n const result = (await jiti.import(spec, { default: true })) as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const esmSuffixes = ['.js', '.mjs'];\n const tsSuffixes = ['.ts', '.mts'];\n\n if (fs.existsSync(moduleSpec) && fs.statSync(moduleSpec).isFile()) {\n // try provider as ESM file\n if (esmSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsEsm(pathToFileURL(moduleSpec).toString());\n }\n\n // try provider as TS file\n if (tsSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsTs(moduleSpec);\n }\n }\n\n // try ESM index files in provider directory\n for (const suffix of esmSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsEsm(pathToFileURL(indexPath).toString());\n }\n }\n\n // try TS index files in provider directory\n for (const suffix of tsSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsTs(indexPath);\n }\n }\n\n // last resort, try to import as esm directly\n try {\n return (await import(moduleSpec)).default as CliPlugin;\n } catch {\n // plugin may not export a generator so we simply ignore the error here\n return undefined;\n }\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 outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(defaultOutputPath, 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 // output path\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\n // lite mode\n const lite = pluginOptions['lite'] === true;\n\n // liteOnly mode\n const liteOnly = pluginOptions['liteOnly'] === true;\n\n // add .js extension when importing\n const importWithFileExtension = pluginOptions['importWithFileExtension'];\n if (importWithFileExtension && typeof importWithFileExtension !== 'string') {\n throw new Error('The \"importWithFileExtension\" option must be a string if specified.');\n }\n\n await new TsSchemaGenerator().generate(model, {\n outDir,\n lite,\n liteOnly,\n importWithFileExtension: importWithFileExtension as string | undefined,\n });\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 if (depPkgJson.private) {\n return undefined;\n }\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result.filter((p) => !!p);\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/orm@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, 'add', [\n pkg.name,\n ...(pkg.dev ? [pm.agent.startsWith('yarn') || pm.agent === 'bun' ? '--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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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 { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils';\nimport { run as runSeed } from './seed';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n skipSeed?: boolean;\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\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\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\nfunction runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.name ? ` --name \"${options.name}\"` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = [\n 'migrate reset',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.force ? ' --force' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n\n if (!options.skipSeed) {\n await runSeed({ noWarnings: true, printStatus: true }, []);\n }\n}\n\nfunction runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n execPrisma(`migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction 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 'migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied \"${options.applied}\"` : '',\n options.rolledBack ? ` --rolled-back \"${options.rolledBack}\"` : '',\n ].join('');\n execPrisma(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 { execaCommand } from 'execa';\nimport { CliError } from '../cli-error';\nimport { getPkgJsonConfig } from './action-utils';\n\ntype Options = {\n noWarnings?: boolean;\n printStatus?: boolean;\n};\n\n/**\n * CLI action for seeding the database.\n */\nexport async function run(options: Options, args: string[]) {\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (!pkgJsonConfig.seed) {\n if (!options.noWarnings) {\n console.warn(colors.yellow('No seed script defined in package.json. Skipping seeding.'));\n }\n return;\n }\n\n const command = `${pkgJsonConfig.seed}${args.length > 0 ? ' ' + args.join(' ') : ''}`;\n\n if (options.printStatus) {\n console.log(colors.gray(`Running seed script \"${command}\"...`));\n }\n\n try {\n await execaCommand(command, {\n stdout: 'inherit',\n stderr: 'inherit',\n });\n } catch (err) {\n console.error(colors.red(err instanceof Error ? err.message : String(err)));\n throw new CliError('Failed to seed the database. Please check the error message above for details.');\n }\n}\n","import { init, type Mixpanel } from 'mixpanel';\nimport { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport * as os from 'os';\nimport { TELEMETRY_TRACKING_TOKEN } from './constants';\nimport { isInCi } from './utils/is-ci';\nimport { isInContainer } from './utils/is-container';\nimport isDocker from './utils/is-docker';\nimport { isWsl } from './utils/is-wsl';\nimport { getMachineId } from './utils/machine-id-utils';\nimport { getVersion } from './utils/version-utils';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = getMachineId();\n private readonly sessionid = randomUUID();\n private readonly _os_type = os.type();\n private readonly _os_release = os.release();\n private readonly _os_arch = os.arch();\n private readonly _os_version = os.version();\n private readonly _os_platform = os.platform();\n private readonly version = getVersion();\n private readonly prismaVersion = this.getPrismaVersion();\n private readonly isDocker = isDocker();\n private readonly isWsl = isWsl();\n private readonly isContainer = isInContainer();\n private readonly isCi = isInCi;\n\n constructor() {\n if (process.env['DO_NOT_TRACK'] !== '1' && TELEMETRY_TRACKING_TOKEN) {\n this.mixpanel = init(TELEMETRY_TRACKING_TOKEN, {\n geolocate: true,\n });\n }\n }\n\n get isTracking() {\n return !!this.mixpanel;\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os_type,\n osType: this._os_type,\n osRelease: this._os_release,\n osPlatform: this._os_platform,\n osArch: this._os_arch,\n osVersion: this._os_version,\n nodeVersion: process.version,\n version: this.version,\n prismaVersion: this.prismaVersion,\n isDocker: this.isDocker,\n isWsl: this.isWsl,\n isContainer: this.isContainer,\n isCi: this.isCi,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n trackError(err: Error) {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n }\n\n async trackSpan<T>(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<T> | T,\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n return await action();\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n\n async trackCommand(command: string, action: () => Promise<void> | void) {\n await this.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command }, action);\n }\n\n async trackCli(action: () => Promise<void> | void) {\n await this.trackSpan('cli:start', 'cli:complete', 'cli:error', {}, action);\n }\n\n getPrismaVersion() {\n try {\n const packageJsonPath = import.meta.resolve('prisma/package.json');\n const packageJsonUrl = new URL(packageJsonPath);\n const packageJson = JSON.parse(fs.readFileSync(packageJsonUrl, 'utf8'));\n return packageJson.version;\n } catch {\n return undefined;\n }\n }\n}\n\nexport const telemetry = new Telemetry();\n","// replaced at build time\nexport const TELEMETRY_TRACKING_TOKEN = '<TELEMETRY_TRACKING_TOKEN>';\n\n// plugin-contributed model file name\nexport const PLUGIN_MODULE_NAME = 'plugin.zmodel';\n","import { env } from 'node:process';\nexport const isInCi =\n env['CI'] !== '0' &&\n env['CI'] !== 'false' &&\n ('CI' in env || 'CONTINUOUS_INTEGRATION' in env || Object.keys(env).some((key) => key.startsWith('CI_')));\n","import fs from 'node:fs';\nimport isDocker from './is-docker';\n\nlet cachedResult: boolean | undefined;\n\n// Podman detection\nconst hasContainerEnv = () => {\n try {\n fs.statSync('/run/.containerenv');\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isInContainer() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (cachedResult === undefined) {\n cachedResult = hasContainerEnv() || isDocker();\n }\n\n return cachedResult;\n}\n","// Copied over from https://github.com/sindresorhus/is-docker for CJS compatibility\n\nimport fs from 'node:fs';\n\nlet isDockerCached: boolean | undefined;\n\nfunction hasDockerEnv() {\n try {\n fs.statSync('/.dockerenv');\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasDockerCGroup() {\n try {\n return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n } catch {\n return false;\n }\n}\n\nexport default function isDocker() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (isDockerCached === undefined) {\n isDockerCached = hasDockerEnv() || hasDockerCGroup();\n }\n\n return isDockerCached;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nexport const isWsl = () => {\n if (process.platform !== 'linux') {\n return false;\n }\n\n if (os.release().toLowerCase().includes('microsoft')) {\n return true;\n }\n\n try {\n return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft');\n } catch {\n return false;\n }\n};\n","// modified from https://github.com/automation-stack/node-machine-id\n\nimport { execSync } from 'child_process';\nimport { createHash, randomUUID } from 'node:crypto';\n\nconst { platform } = process;\nconst win32RegBinPath = {\n native: '%windir%\\\\System32',\n mixed: '%windir%\\\\sysnative\\\\cmd.exe /c %windir%\\\\System32',\n};\nconst guid = {\n darwin: 'ioreg -rd1 -c IOPlatformExpertDevice',\n win32:\n `${win32RegBinPath[isWindowsProcessMixedOrNativeArchitecture()]}\\\\REG.exe ` +\n 'QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography ' +\n '/v MachineGuid',\n linux: '( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname 2> /dev/null) | head -n 1 || :',\n freebsd: 'kenv -q smbios.system.uuid || sysctl -n kern.hostuuid',\n};\n\nfunction isWindowsProcessMixedOrNativeArchitecture() {\n // eslint-disable-next-line no-prototype-builtins\n if (process.arch === 'ia32' && process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) {\n return 'mixed';\n }\n return 'native';\n}\n\nfunction hash(guid: string): string {\n return createHash('sha256').update(guid).digest('hex');\n}\n\nfunction expose(result: string): string | undefined {\n switch (platform) {\n case 'darwin':\n return result\n .split('IOPlatformUUID')[1]\n ?.split('\\n')[0]\n ?.replace(/=|\\s+|\"/gi, '')\n .toLowerCase();\n case 'win32':\n return result\n .toString()\n .split('REG_SZ')[1]\n ?.replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'linux':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'freebsd':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n default:\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n}\n\nexport function getMachineId() {\n if (!(platform in guid)) {\n return randomUUID();\n }\n try {\n const value = execSync(guid[platform as keyof typeof guid]);\n const id = expose(value.toString());\n if (!id) {\n return randomUUID();\n }\n return hash(id);\n } catch {\n return randomUUID();\n }\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport semver from 'semver';\n\nconst CHECK_VERSION_TIMEOUT = 2000;\nconst VERSION_CHECK_TAG = 'next';\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\nexport async function checkNewVersion() {\n const currVersion = getVersion();\n let latestVersion: string;\n try {\n latestVersion = await getLatestVersion();\n } catch {\n // noop\n return;\n }\n\n if (latestVersion && currVersion && semver.gt(latestVersion, currVersion)) {\n console.log(`A newer version ${colors.cyan(latestVersion)} is available.`);\n }\n}\n\nexport async function getLatestVersion() {\n const fetchResult = await fetch(`https://registry.npmjs.org/@zenstackhq/cli/${VERSION_CHECK_TAG}`, {\n headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' },\n signal: AbortSignal.timeout(CHECK_VERSION_TIMEOUT),\n });\n\n if (fetchResult.ok) {\n const data: any = await fetchResult.json();\n const latestVersion = data?.version;\n if (typeof latestVersion === 'string' && semver.valid(latestVersion)) {\n return latestVersion;\n }\n }\n\n throw new Error('invalid npm registry response');\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","colors","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","statSync","isDirectory","schemaPath","path","join","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","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","seed","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","push","up","length","requireDataSourceUrl","zmodel","dataSource","fields","f","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","fs","execSync","_exec","fileURLToPath","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","execPrisma","args","prismaPath","resolve","fileURLToPath","require","_options","PRISMA_HIDE_UPDATE_MESSAGE","run","command","options","runPush","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPrisma","err","handleSubProcessError","fs","existsSync","unlinkSync","formatDocument","colors","fs","run","options","schemaFile","getSchemaFile","schema","formattedContent","formatDocument","fs","readFileSync","error","console","colors","red","writeFileSync","log","green","invariant","isPlugin","getLiteral","getLiteralArray","colors","createJiti","fs","path","pathToFileURL","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outFile","join","resolve","existsSync","dirname","mkdirSync","recursive","prismaSchema","writeFileSync","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","lite","liteOnly","importWithFileExtension","Error","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","path","relative","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","loadPluginModule","pluginOptions","getPluginOptions","undefined","lite","liteOnly","push","defaultPlugins","forEach","some","p","unshift","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","error","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","warn","basePath","moduleSpec","resolve","importAsEsm","spec","default","message","jiti","createJiti","pathToFileURL","toString","importAsTs","import","esmSuffixes","tsSuffixes","fs","existsSync","statSync","isFile","suffix","endsWith","indexPath","join","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","private","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","startsWith","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","colors","execaCommand","run","options","args","pkgJsonConfig","getPkgJsonConfig","process","cwd","seed","noWarnings","console","warn","colors","yellow","command","length","join","printStatus","log","gray","execaCommand","stdout","stderr","err","error","red","Error","message","String","CliError","run","command","options","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPrisma","err","handleSubProcessError","force","skipSeed","runSeed","noWarnings","printStatus","_options","applied","rolledBack","CliError","Error","status","process","exit","init","randomUUID","fs","os","TELEMETRY_TRACKING_TOKEN","env","isInCi","Object","keys","some","key","startsWith","fs","fs","isDockerCached","hasDockerEnv","fs","statSync","hasDockerCGroup","readFileSync","includes","isDocker","undefined","cachedResult","hasContainerEnv","fs","statSync","isInContainer","undefined","isDocker","process","os","fs","isWsl","process","platform","os","release","toLowerCase","includes","fs","readFileSync","execSync","createHash","randomUUID","platform","process","win32RegBinPath","native","mixed","guid","darwin","win32","isWindowsProcessMixedOrNativeArchitecture","linux","freebsd","arch","env","hasOwnProperty","hash","createHash","update","digest","expose","result","split","replace","toLowerCase","toString","Error","getMachineId","randomUUID","value","execSync","id","colors","fs","path","fileURLToPath","semver","CHECK_VERSION_TIMEOUT","VERSION_CHECK_TAG","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","checkNewVersion","currVersion","latestVersion","getLatestVersion","semver","gt","console","log","colors","cyan","fetchResult","fetch","headers","accept","signal","AbortSignal","timeout","ok","data","json","valid","Error","Telemetry","mixpanel","hostId","getMachineId","sessionid","randomUUID","_os_type","type","_os_release","release","_os_arch","arch","_os_version","version","_os_platform","platform","getVersion","prismaVersion","getPrismaVersion","isDocker","isWsl","isContainer","isInContainer","isCi","isInCi","process","env","TELEMETRY_TRACKING_TOKEN","init","geolocate","isTracking","track","event","properties","payload","distinct_id","session","time","Date","$os","osType","osRelease","osPlatform","osArch","osVersion","nodeVersion","trackError","err","message","stack","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","duration","trackCommand","command","trackCli","packageJsonPath","resolve","packageJsonUrl","URL","packageJson","JSON","parse","fs","readFileSync","undefined","telemetry","generateAction","options","telemetry","trackCommand","generate","migrateAction","subCommand","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","formatAction","format","seedAction","args","seed","createProgram","program","Command","alias","helpOption","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","noVersionCheckOption","command","addOption","default","action","migrateCommand","migrationsOption","addHelpText","dbCommand","allowExcessArguments","argument","addHelpCommand","hook","_thisCommand","actionCommand","getOptionValue","checkNewVersion","main","exitCode","exitOverride","trackCli","parseAsync","e","CommanderError","CliError","console","error","red","message","isTracking","setTimeout","process","exit"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/actions/check.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/format.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/seed.ts","../src/telemetry.ts","../src/constants.ts","../src/utils/is-ci.ts","../src/utils/is-container.ts","../src/utils/is-docker.ts","../src/utils/is-wsl.ts","../src/utils/machine-id-utils.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 { telemetry } from './telemetry';\nimport { checkNewVersion, getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await telemetry.trackCommand('generate', () => actions.generate(options));\n};\n\nconst migrateAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`migrate ${subCommand}`, () => actions.migrate(subCommand, options));\n};\n\nconst dbAction = async (subCommand: string, options: any): Promise<void> => {\n await telemetry.trackCommand(`db ${subCommand}`, () => actions.db(subCommand, options));\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('info', () => actions.info(projectPath));\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await telemetry.trackCommand('init', () => actions.init(projectPath));\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await telemetry.trackCommand('check', () => actions.check(options));\n};\n\nconst formatAction = async (options: Parameters<typeof actions.format>[0]): Promise<void> => {\n await telemetry.trackCommand('format', () => actions.format(options));\n};\n\nconst seedAction = async (options: Parameters<typeof actions.seed>[0], args: string[]): Promise<void> => {\n await telemetry.trackCommand('db seed', () => actions.seed(options, args));\n};\n\nfunction createProgram() {\n const program = new Command('zen')\n .alias('zenstack')\n .helpOption('-h, --help', 'Show this help message')\n .version(getVersion()!, '-v --version', 'Show CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the modern data layer for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev/docs`,\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 const noVersionCheckOption = new Option('--no-version-check', 'do not check for new version');\n\n program\n .command('generate')\n .description('Run code generation plugins')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .addOption(new Option('--lite', 'also generate a lite version of schema without attributes').default(false))\n .addOption(new Option('--lite-only', 'only generate lite version of schema without attributes').default(false))\n .addOption(new Option('--silent', 'suppress all output except errors').default(false))\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(noVersionCheckOption)\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 .addOption(new Option('--skip-seed', 'skip seeding the database after reset'))\n .addOption(noVersionCheckOption)\n .description('Reset your database and apply all migrations, all data will be lost')\n .addHelpText(\n 'after',\n '\\nIf there is a seed script defined in package.json, it will be run after the reset. Use --skip-seed to skip it.',\n )\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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(noVersionCheckOption)\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 dbCommand\n .command('seed')\n .description('Seed the database')\n .allowExcessArguments(true)\n .addHelpText(\n 'after',\n `\nSeed script is configured under the \"zenstack.seed\" field in package.json.\nE.g.:\n{\n \"zenstack\": {\n \"seed\": \"ts-node ./zenstack/seed.ts\"\n }\n}\n\nArguments following -- are passed to the seed script. E.g.: \"zen db seed -- --users 10\"`,\n )\n .addOption(noVersionCheckOption)\n .action((options, command) => seedAction(options, command.args));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack')\n .argument('[path]', 'project path', '.')\n .addOption(noVersionCheckOption)\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(checkAction);\n\n program\n .command('format')\n .description('Format a ZModel schema file')\n .addOption(schemaOption)\n .addOption(noVersionCheckOption)\n .action(formatAction);\n\n program.addHelpCommand('help [command]', 'Display help for a command');\n\n program.hook('preAction', async (_thisCommand, actionCommand) => {\n if (actionCommand.getOptionValue('versionCheck') !== false) {\n await checkNewVersion();\n }\n });\n\n return program;\n}\n\nasync function main() {\n let exitCode = 0;\n\n const program = createProgram();\n program.exitOverride();\n\n try {\n await telemetry.trackCli(async () => {\n await program.parseAsync();\n });\n } catch (e) {\n if (e instanceof CommanderError) {\n // ignore\n exitCode = e.exitCode;\n } else if (e instanceof CliError) {\n // log\n console.error(colors.red(e.message));\n exitCode = 1;\n } else {\n console.error(colors.red(`Unhandled error: ${e}`));\n exitCode = 1;\n }\n }\n\n if (telemetry.isTracking) {\n // give telemetry a chance to send events before exit\n setTimeout(() => {\n process.exit(exitCode);\n }, 200);\n } else {\n process.exit(exitCode);\n }\n}\n\nmain();\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 { 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 if (fs.statSync(pkgJsonConfig.schema).isDirectory()) {\n const schemaPath = path.join(pkgJsonConfig.schema, 'schema.zmodel');\n if (!fs.existsSync(schemaPath)) {\n throw new CliError(`Schema file not found: ${schemaPath}`);\n }\n return schemaPath;\n } else {\n return pkgJsonConfig.schema;\n }\n }\n\n if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./schema.zmodel\" or \"./zenstack/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; seed: string | undefined } = {\n schema: undefined,\n output: undefined,\n seed: undefined,\n };\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 =\n pkgJson.zenstack.schema && typeof pkgJson.zenstack.schema === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema)\n : undefined;\n result.output =\n pkgJson.zenstack.output && typeof pkgJson.zenstack.output === 'string'\n ? path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output)\n : undefined;\n result.seed =\n typeof pkgJson.zenstack.seed === 'string' && pkgJson.zenstack.seed ? pkgJson.zenstack.seed : undefined;\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\nexport async function requireDataSourceUrl(schemaFile: string) {\n const zmodel = await loadSchemaDocument(schemaFile);\n const dataSource = zmodel.declarations.find(isDataSource);\n if (!dataSource?.fields.some((f) => f.name === 'url')) {\n throw new CliError('The schema\\'s \"datasource\" must have a \"url\" field to use this command.');\n }\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import fs from 'node:fs';\nimport { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError, requireDataSourceUrl } 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 const schemaFile = getSchemaFile(options.schema);\n\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\n // generate a temp prisma schema file\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n '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 execPrisma(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';\nimport { fileURLToPath } from 'url';\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\n/**\n * Utility for running prisma commands\n */\nexport function execPrisma(args: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }) {\n let prismaPath: string | undefined;\n try {\n if (typeof import.meta.resolve === 'function') {\n // esm\n prismaPath = fileURLToPath(import.meta.resolve('prisma/build/index.js'));\n } else {\n // cjs\n prismaPath = require.resolve('prisma/build/index.js');\n }\n } catch {\n // ignore and fallback\n }\n\n const _options = {\n ...options,\n env: {\n ...options?.env,\n PRISMA_HIDE_UPDATE_MESSAGE: '1',\n },\n };\n\n if (!prismaPath) {\n // fallback to npx/bunx execute\n execPackage(`prisma ${args}`, _options);\n return;\n }\n\n execSync(`node ${prismaPath} ${args}`, _options);\n}\n","import { formatDocument } from '@zenstackhq/language';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport { getSchemaFile } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for formatting a ZModel schema file.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n let formattedContent: string;\n\n try {\n formattedContent = await formatDocument(fs.readFileSync(schemaFile, 'utf-8'));\n } catch (error) {\n console.error(colors.red('✗ Schema formatting failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n\n fs.writeFileSync(schemaFile, formattedContent, 'utf-8');\n console.log(colors.green('✓ Schema formatting completed successfully.'));\n}\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 { createJiti } from 'jiti';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { pathToFileURL } from 'node:url';\nimport ora, { type 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 silent: boolean;\n lite: boolean;\n liteOnly: boolean;\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, options);\n\n if (!options.silent) {\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/orm';\nimport { schema } from '${path.relative('.', outputPath)}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\`\n\nCheck documentation: https://zenstack.dev/docs/`);\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, options: Options) {\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 | undefined;\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 cliPlugin = await loadPluginModule(provider, path.dirname(schemaFile));\n }\n\n if (cliPlugin) {\n const pluginOptions = getPluginOptions(plugin);\n\n // merge CLI options\n if (provider === '@core/typescript') {\n if (pluginOptions['lite'] === undefined) {\n pluginOptions['lite'] = options.lite;\n }\n if (pluginOptions['liteOnly'] === undefined) {\n pluginOptions['liteOnly'] = options.liteOnly;\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions });\n }\n }\n\n const defaultPlugins = [\n {\n plugin: corePlugins['typescript'],\n options: { lite: options.lite, liteOnly: options.liteOnly },\n },\n ];\n defaultPlugins.forEach(({ plugin, options }) => {\n if (!processedPlugins.some((p) => p.cliPlugin === plugin)) {\n // default plugins are run before user plugins\n processedPlugins.unshift({ cliPlugin: plugin, pluginOptions: options });\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 let spinner: Ora | undefined;\n\n if (!options.silent) {\n spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n }\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\nasync function loadPluginModule(provider: string, basePath: string) {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(basePath, moduleSpec);\n }\n\n const importAsEsm = async (spec: string) => {\n try {\n const result = (await import(spec)).default as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const jiti = createJiti(pathToFileURL(basePath).toString());\n const importAsTs = async (spec: string) => {\n try {\n const result = (await jiti.import(spec, { default: true })) as CliPlugin;\n return result;\n } catch (err) {\n throw new CliError(`Failed to load plugin module from ${spec}: ${(err as Error).message}`);\n }\n };\n\n const esmSuffixes = ['.js', '.mjs'];\n const tsSuffixes = ['.ts', '.mts'];\n\n if (fs.existsSync(moduleSpec) && fs.statSync(moduleSpec).isFile()) {\n // try provider as ESM file\n if (esmSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsEsm(pathToFileURL(moduleSpec).toString());\n }\n\n // try provider as TS file\n if (tsSuffixes.some((suffix) => moduleSpec.endsWith(suffix))) {\n return await importAsTs(moduleSpec);\n }\n }\n\n // try ESM index files in provider directory\n for (const suffix of esmSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsEsm(pathToFileURL(indexPath).toString());\n }\n }\n\n // try TS index files in provider directory\n for (const suffix of tsSuffixes) {\n const indexPath = path.join(moduleSpec, `index${suffix}`);\n if (fs.existsSync(indexPath)) {\n return await importAsTs(indexPath);\n }\n }\n\n // last resort, try to import as esm directly\n try {\n return (await import(moduleSpec)).default as CliPlugin;\n } catch {\n // plugin may not export a generator so we simply ignore the error here\n return undefined;\n }\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 outFile = path.join(defaultOutputPath, 'schema.prisma');\n if (typeof pluginOptions['output'] === 'string') {\n outFile = path.resolve(defaultOutputPath, 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 // output path\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\n // lite mode\n const lite = pluginOptions['lite'] === true;\n\n // liteOnly mode\n const liteOnly = pluginOptions['liteOnly'] === true;\n\n // add .js extension when importing\n const importWithFileExtension = pluginOptions['importWithFileExtension'];\n if (importWithFileExtension && typeof importWithFileExtension !== 'string') {\n throw new Error('The \"importWithFileExtension\" option must be a string if specified.');\n }\n\n await new TsSchemaGenerator().generate(model, {\n outDir,\n lite,\n liteOnly,\n importWithFileExtension: importWithFileExtension as string | undefined,\n });\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 if (depPkgJson.private) {\n return undefined;\n }\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result.filter((p) => !!p);\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@latest', dev: true },\n { name: '@zenstackhq/orm@latest', 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, 'add', [\n pkg.name,\n ...(pkg.dev ? [pm.agent.startsWith('yarn') || pm.agent === 'bun' ? '--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], onDelete: Cascade)\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/orm';\nimport { SqliteDialect } from '@zenstackhq/orm/dialects/sqlite';\nimport SQLite from 'better-sqlite3';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const db = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await db.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 { execPrisma } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, requireDataSourceUrl } from './action-utils';\nimport { run as runSeed } from './seed';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n skipSeed?: boolean;\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\n // validate datasource url exists\n await requireDataSourceUrl(schemaFile);\n\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\nfunction runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.name ? ` --name \"${options.name}\"` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = [\n 'migrate reset',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n ' --skip-seed',\n options.force ? ' --force' : '',\n ].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n\n if (!options.skipSeed) {\n await runSeed({ noWarnings: true, printStatus: true }, []);\n }\n}\n\nfunction runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n execPrisma(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n execPrisma(`migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction 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 'migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied \"${options.applied}\"` : '',\n options.rolledBack ? ` --rolled-back \"${options.rolledBack}\"` : '',\n ].join('');\n execPrisma(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 { execaCommand } from 'execa';\nimport { CliError } from '../cli-error';\nimport { getPkgJsonConfig } from './action-utils';\n\ntype Options = {\n noWarnings?: boolean;\n printStatus?: boolean;\n};\n\n/**\n * CLI action for seeding the database.\n */\nexport async function run(options: Options, args: string[]) {\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (!pkgJsonConfig.seed) {\n if (!options.noWarnings) {\n console.warn(colors.yellow('No seed script defined in package.json. Skipping seeding.'));\n }\n return;\n }\n\n const command = `${pkgJsonConfig.seed}${args.length > 0 ? ' ' + args.join(' ') : ''}`;\n\n if (options.printStatus) {\n console.log(colors.gray(`Running seed script \"${command}\"...`));\n }\n\n try {\n await execaCommand(command, {\n stdout: 'inherit',\n stderr: 'inherit',\n });\n } catch (err) {\n console.error(colors.red(err instanceof Error ? err.message : String(err)));\n throw new CliError('Failed to seed the database. Please check the error message above for details.');\n }\n}\n","import { init, type Mixpanel } from 'mixpanel';\nimport { randomUUID } from 'node:crypto';\nimport fs from 'node:fs';\nimport * as os from 'os';\nimport { TELEMETRY_TRACKING_TOKEN } from './constants';\nimport { isInCi } from './utils/is-ci';\nimport { isInContainer } from './utils/is-container';\nimport isDocker from './utils/is-docker';\nimport { isWsl } from './utils/is-wsl';\nimport { getMachineId } from './utils/machine-id-utils';\nimport { getVersion } from './utils/version-utils';\n\n/**\n * Telemetry events\n */\nexport type TelemetryEvents =\n | 'cli:start'\n | 'cli:complete'\n | 'cli:error'\n | 'cli:command:start'\n | 'cli:command:complete'\n | 'cli:command:error'\n | 'cli:plugin:start'\n | 'cli:plugin:complete'\n | 'cli:plugin:error';\n\n/**\n * Utility class for sending telemetry\n */\nexport class Telemetry {\n private readonly mixpanel: Mixpanel | undefined;\n private readonly hostId = getMachineId();\n private readonly sessionid = randomUUID();\n private readonly _os_type = os.type();\n private readonly _os_release = os.release();\n private readonly _os_arch = os.arch();\n private readonly _os_version = os.version();\n private readonly _os_platform = os.platform();\n private readonly version = getVersion();\n private readonly prismaVersion = this.getPrismaVersion();\n private readonly isDocker = isDocker();\n private readonly isWsl = isWsl();\n private readonly isContainer = isInContainer();\n private readonly isCi = isInCi;\n\n constructor() {\n if (process.env['DO_NOT_TRACK'] !== '1' && TELEMETRY_TRACKING_TOKEN) {\n this.mixpanel = init(TELEMETRY_TRACKING_TOKEN, {\n geolocate: true,\n });\n }\n }\n\n get isTracking() {\n return !!this.mixpanel;\n }\n\n track(event: TelemetryEvents, properties: Record<string, unknown> = {}) {\n if (this.mixpanel) {\n const payload = {\n distinct_id: this.hostId,\n session: this.sessionid,\n time: new Date(),\n $os: this._os_type,\n osType: this._os_type,\n osRelease: this._os_release,\n osPlatform: this._os_platform,\n osArch: this._os_arch,\n osVersion: this._os_version,\n nodeVersion: process.version,\n version: this.version,\n prismaVersion: this.prismaVersion,\n isDocker: this.isDocker,\n isWsl: this.isWsl,\n isContainer: this.isContainer,\n isCi: this.isCi,\n ...properties,\n };\n this.mixpanel.track(event, payload);\n }\n }\n\n trackError(err: Error) {\n this.track('cli:error', {\n message: err.message,\n stack: err.stack,\n });\n }\n\n async trackSpan<T>(\n startEvent: TelemetryEvents,\n completeEvent: TelemetryEvents,\n errorEvent: TelemetryEvents,\n properties: Record<string, unknown>,\n action: () => Promise<T> | T,\n ) {\n this.track(startEvent, properties);\n const start = Date.now();\n let success = true;\n try {\n return await action();\n } catch (err: any) {\n this.track(errorEvent, {\n message: err.message,\n stack: err.stack,\n ...properties,\n });\n success = false;\n throw err;\n } finally {\n this.track(completeEvent, {\n duration: Date.now() - start,\n success,\n ...properties,\n });\n }\n }\n\n async trackCommand(command: string, action: () => Promise<void> | void) {\n await this.trackSpan('cli:command:start', 'cli:command:complete', 'cli:command:error', { command }, action);\n }\n\n async trackCli(action: () => Promise<void> | void) {\n await this.trackSpan('cli:start', 'cli:complete', 'cli:error', {}, action);\n }\n\n getPrismaVersion() {\n try {\n const packageJsonPath = import.meta.resolve('prisma/package.json');\n const packageJsonUrl = new URL(packageJsonPath);\n const packageJson = JSON.parse(fs.readFileSync(packageJsonUrl, 'utf8'));\n return packageJson.version;\n } catch {\n return undefined;\n }\n }\n}\n\nexport const telemetry = new Telemetry();\n","// replaced at build time\nexport const TELEMETRY_TRACKING_TOKEN = '<TELEMETRY_TRACKING_TOKEN>';\n\n// plugin-contributed model file name\nexport const PLUGIN_MODULE_NAME = 'plugin.zmodel';\n","import { env } from 'node:process';\nexport const isInCi =\n env['CI'] !== '0' &&\n env['CI'] !== 'false' &&\n ('CI' in env || 'CONTINUOUS_INTEGRATION' in env || Object.keys(env).some((key) => key.startsWith('CI_')));\n","import fs from 'node:fs';\nimport isDocker from './is-docker';\n\nlet cachedResult: boolean | undefined;\n\n// Podman detection\nconst hasContainerEnv = () => {\n try {\n fs.statSync('/run/.containerenv');\n return true;\n } catch {\n return false;\n }\n};\n\nexport function isInContainer() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (cachedResult === undefined) {\n cachedResult = hasContainerEnv() || isDocker();\n }\n\n return cachedResult;\n}\n","// Copied over from https://github.com/sindresorhus/is-docker for CJS compatibility\n\nimport fs from 'node:fs';\n\nlet isDockerCached: boolean | undefined;\n\nfunction hasDockerEnv() {\n try {\n fs.statSync('/.dockerenv');\n return true;\n } catch {\n return false;\n }\n}\n\nfunction hasDockerCGroup() {\n try {\n return fs.readFileSync('/proc/self/cgroup', 'utf8').includes('docker');\n } catch {\n return false;\n }\n}\n\nexport default function isDocker() {\n // TODO: Use `??=` when targeting Node.js 16.\n if (isDockerCached === undefined) {\n isDockerCached = hasDockerEnv() || hasDockerCGroup();\n }\n\n return isDockerCached;\n}\n","import process from 'node:process';\nimport os from 'node:os';\nimport fs from 'node:fs';\nexport const isWsl = () => {\n if (process.platform !== 'linux') {\n return false;\n }\n\n if (os.release().toLowerCase().includes('microsoft')) {\n return true;\n }\n\n try {\n return fs.readFileSync('/proc/version', 'utf8').toLowerCase().includes('microsoft');\n } catch {\n return false;\n }\n};\n","// modified from https://github.com/automation-stack/node-machine-id\n\nimport { execSync } from 'child_process';\nimport { createHash, randomUUID } from 'node:crypto';\n\nconst { platform } = process;\nconst win32RegBinPath = {\n native: '%windir%\\\\System32',\n mixed: '%windir%\\\\sysnative\\\\cmd.exe /c %windir%\\\\System32',\n};\nconst guid = {\n darwin: 'ioreg -rd1 -c IOPlatformExpertDevice',\n win32:\n `${win32RegBinPath[isWindowsProcessMixedOrNativeArchitecture()]}\\\\REG.exe ` +\n 'QUERY HKEY_LOCAL_MACHINE\\\\SOFTWARE\\\\Microsoft\\\\Cryptography ' +\n '/v MachineGuid',\n linux: '( cat /var/lib/dbus/machine-id /etc/machine-id 2> /dev/null || hostname 2> /dev/null) | head -n 1 || :',\n freebsd: 'kenv -q smbios.system.uuid || sysctl -n kern.hostuuid',\n};\n\nfunction isWindowsProcessMixedOrNativeArchitecture() {\n // eslint-disable-next-line no-prototype-builtins\n if (process.arch === 'ia32' && process.env.hasOwnProperty('PROCESSOR_ARCHITEW6432')) {\n return 'mixed';\n }\n return 'native';\n}\n\nfunction hash(guid: string): string {\n return createHash('sha256').update(guid).digest('hex');\n}\n\nfunction expose(result: string): string | undefined {\n switch (platform) {\n case 'darwin':\n return result\n .split('IOPlatformUUID')[1]\n ?.split('\\n')[0]\n ?.replace(/=|\\s+|\"/gi, '')\n .toLowerCase();\n case 'win32':\n return result\n .toString()\n .split('REG_SZ')[1]\n ?.replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'linux':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n case 'freebsd':\n return result\n .toString()\n .replace(/\\r+|\\n+|\\s+/gi, '')\n .toLowerCase();\n default:\n throw new Error(`Unsupported platform: ${process.platform}`);\n }\n}\n\nexport function getMachineId() {\n if (!(platform in guid)) {\n return randomUUID();\n }\n try {\n const value = execSync(guid[platform as keyof typeof guid]);\n const id = expose(value.toString());\n if (!id) {\n return randomUUID();\n }\n return hash(id);\n } catch {\n return randomUUID();\n }\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\nimport semver from 'semver';\n\nconst CHECK_VERSION_TIMEOUT = 2000;\nconst VERSION_CHECK_TAG = 'next';\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\nexport async function checkNewVersion() {\n const currVersion = getVersion();\n let latestVersion: string;\n try {\n latestVersion = await getLatestVersion();\n } catch {\n // noop\n return;\n }\n\n if (latestVersion && currVersion && semver.gt(latestVersion, currVersion)) {\n console.log(`A newer version ${colors.cyan(latestVersion)} is available.`);\n }\n}\n\nexport async function getLatestVersion() {\n const fetchResult = await fetch(`https://registry.npmjs.org/@zenstackhq/cli/${VERSION_CHECK_TAG}`, {\n headers: { accept: 'application/vnd.npm.install-v1+json; q=1.0, application/json; q=0.8, */*' },\n signal: AbortSignal.timeout(CHECK_VERSION_TIMEOUT),\n });\n\n if (fetchResult.ok) {\n const data: any = await fetchResult.json();\n const latestVersion = data?.version;\n if (typeof latestVersion === 'string' && semver.valid(latestVersion)) {\n return latestVersion;\n }\n }\n\n throw new Error('invalid npm registry response');\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","colors","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","statSync","isDirectory","schemaPath","path","join","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","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","seed","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","push","up","length","requireDataSourceUrl","zmodel","dataSource","fields","f","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","fs","execSync","_exec","fileURLToPath","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","execPrisma","args","prismaPath","resolve","fileURLToPath","require","_options","PRISMA_HIDE_UPDATE_MESSAGE","run","command","options","runPush","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPrisma","err","handleSubProcessError","fs","existsSync","unlinkSync","formatDocument","colors","fs","run","options","schemaFile","getSchemaFile","schema","formattedContent","formatDocument","fs","readFileSync","error","console","colors","red","writeFileSync","log","green","invariant","isPlugin","getLiteral","getLiteralArray","colors","createJiti","fs","path","pathToFileURL","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outFile","join","resolve","existsSync","dirname","mkdirSync","recursive","prismaSchema","writeFileSync","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","lite","liteOnly","importWithFileExtension","Error","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","path","relative","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","loadPluginModule","pluginOptions","getPluginOptions","undefined","lite","liteOnly","push","defaultPlugins","forEach","some","p","unshift","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","error","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","warn","basePath","moduleSpec","resolve","importAsEsm","spec","default","message","jiti","createJiti","pathToFileURL","toString","importAsTs","import","esmSuffixes","tsSuffixes","fs","existsSync","statSync","isFile","suffix","endsWith","indexPath","join","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","private","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","startsWith","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","colors","execaCommand","run","options","args","pkgJsonConfig","getPkgJsonConfig","process","cwd","seed","noWarnings","console","warn","colors","yellow","command","length","join","printStatus","log","gray","execaCommand","stdout","stderr","err","error","red","Error","message","String","CliError","run","command","options","schemaFile","getSchemaFile","schema","requireDataSourceUrl","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPrisma","err","handleSubProcessError","force","skipSeed","runSeed","noWarnings","printStatus","_options","applied","rolledBack","CliError","Error","status","process","exit","init","randomUUID","fs","os","TELEMETRY_TRACKING_TOKEN","env","isInCi","Object","keys","some","key","startsWith","fs","fs","isDockerCached","hasDockerEnv","fs","statSync","hasDockerCGroup","readFileSync","includes","isDocker","undefined","cachedResult","hasContainerEnv","fs","statSync","isInContainer","undefined","isDocker","process","os","fs","isWsl","process","platform","os","release","toLowerCase","includes","fs","readFileSync","execSync","createHash","randomUUID","platform","process","win32RegBinPath","native","mixed","guid","darwin","win32","isWindowsProcessMixedOrNativeArchitecture","linux","freebsd","arch","env","hasOwnProperty","hash","createHash","update","digest","expose","result","split","replace","toLowerCase","toString","Error","getMachineId","randomUUID","value","execSync","id","colors","fs","path","fileURLToPath","semver","CHECK_VERSION_TIMEOUT","VERSION_CHECK_TAG","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","checkNewVersion","currVersion","latestVersion","getLatestVersion","semver","gt","console","log","colors","cyan","fetchResult","fetch","headers","accept","signal","AbortSignal","timeout","ok","data","json","valid","Error","Telemetry","mixpanel","hostId","getMachineId","sessionid","randomUUID","_os_type","type","_os_release","release","_os_arch","arch","_os_version","version","_os_platform","platform","getVersion","prismaVersion","getPrismaVersion","isDocker","isWsl","isContainer","isInContainer","isCi","isInCi","process","env","TELEMETRY_TRACKING_TOKEN","init","geolocate","isTracking","track","event","properties","payload","distinct_id","session","time","Date","$os","osType","osRelease","osPlatform","osArch","osVersion","nodeVersion","trackError","err","message","stack","trackSpan","startEvent","completeEvent","errorEvent","action","start","now","success","duration","trackCommand","command","trackCli","packageJsonPath","resolve","packageJsonUrl","URL","packageJson","JSON","parse","fs","readFileSync","undefined","telemetry","generateAction","options","telemetry","trackCommand","generate","migrateAction","subCommand","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","formatAction","format","seedAction","args","seed","createProgram","program","Command","alias","helpOption","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","noVersionCheckOption","command","addOption","default","action","migrateCommand","migrationsOption","addHelpText","dbCommand","allowExcessArguments","argument","addHelpCommand","hook","_thisCommand","actionCommand","getOptionValue","checkNewVersion","main","exitCode","exitOverride","trackCli","parseAsync","e","CommanderError","CliError","console","error","red","message","isTracking","setTimeout","process","exit"]}
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",
6
+ "version": "3.1.1",
7
7
  "type": "module",
8
8
  "author": {
9
9
  "name": "ZenStack Team"
@@ -21,6 +21,9 @@
21
21
  "zen": "bin/cli",
22
22
  "zenstack": "bin/cli"
23
23
  },
24
+ "exports": {
25
+ "./package.json": "./package.json"
26
+ },
24
27
  "dependencies": {
25
28
  "colors": "1.4.0",
26
29
  "commander": "^8.3.0",
@@ -33,9 +36,9 @@
33
36
  "prisma": "^6.19.0",
34
37
  "semver": "^7.7.2",
35
38
  "ts-pattern": "^5.7.1",
36
- "@zenstackhq/common-helpers": "3.0.0",
37
- "@zenstackhq/language": "3.0.0",
38
- "@zenstackhq/sdk": "3.0.0"
39
+ "@zenstackhq/common-helpers": "3.1.1",
40
+ "@zenstackhq/sdk": "3.1.1",
41
+ "@zenstackhq/language": "3.1.1"
39
42
  },
40
43
  "devDependencies": {
41
44
  "@types/better-sqlite3": "^7.6.13",
@@ -43,11 +46,11 @@
43
46
  "@types/tmp": "^0.2.6",
44
47
  "better-sqlite3": "^12.5.0",
45
48
  "tmp": "^0.2.3",
46
- "@zenstackhq/eslint-config": "3.0.0",
47
- "@zenstackhq/orm": "3.0.0",
48
- "@zenstackhq/testtools": "3.0.0",
49
- "@zenstackhq/typescript-config": "3.0.0",
50
- "@zenstackhq/vitest-config": "3.0.0"
49
+ "@zenstackhq/eslint-config": "3.1.1",
50
+ "@zenstackhq/testtools": "3.1.1",
51
+ "@zenstackhq/vitest-config": "3.1.1",
52
+ "@zenstackhq/orm": "3.1.1",
53
+ "@zenstackhq/typescript-config": "3.1.1"
51
54
  },
52
55
  "scripts": {
53
56
  "build": "tsc --noEmit && tsup-node",
@@ -46,7 +46,7 @@ const client = new ZenStackClient(schema, {
46
46
  });
47
47
  \`\`\`
48
48
 
49
- Check documentation: https://zenstack.dev/docs/3.x`);
49
+ Check documentation: https://zenstack.dev/docs/`);
50
50
  }
51
51
  }
52
52
 
@@ -12,8 +12,8 @@ import { STARTER_ZMODEL } from './templates';
12
12
  */
13
13
  export async function run(projectPath: string) {
14
14
  const packages = [
15
- { name: '@zenstackhq/cli@next', dev: true },
16
- { name: '@zenstackhq/orm@next', dev: false },
15
+ { name: '@zenstackhq/cli@latest', dev: true },
16
+ { name: '@zenstackhq/orm@latest', dev: false },
17
17
  ];
18
18
  let pm = await detect();
19
19
  if (!pm) {