@zenstackhq/cli 3.0.0-alpha.27 → 3.0.0-alpha.29
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/dist/index.cjs +14 -16
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +14 -16
- package/dist/index.js.map +1 -1
- package/package.json +9 -9
- package/src/actions/{validate.ts → check.ts} +1 -1
- package/src/actions/generate.ts +2 -5
- package/src/actions/index.ts +2 -2
- package/src/index.ts +16 -13
- package/test/{validate.test.ts → check.test.ts} +6 -6
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
|
|
2
|
-
> @zenstackhq/cli@3.0.0-alpha.
|
|
2
|
+
> @zenstackhq/cli@3.0.0-alpha.29 build /home/runner/work/zenstack-v3/zenstack-v3/packages/cli
|
|
3
3
|
> tsc --noEmit && tsup-node
|
|
4
4
|
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts"}
|
|
@@ -10,13 +10,13 @@
|
|
|
10
10
|
[34mCLI[39m Cleaning output folder
|
|
11
11
|
[34mESM[39m Build start
|
|
12
12
|
[34mCJS[39m Build start
|
|
13
|
-
[
|
|
14
|
-
[
|
|
15
|
-
[
|
|
16
|
-
[
|
|
17
|
-
[
|
|
18
|
-
[
|
|
13
|
+
[32mCJS[39m [1mdist/index.cjs [22m[32m26.78 KB[39m
|
|
14
|
+
[32mCJS[39m [1mdist/index.cjs.map [22m[32m48.65 KB[39m
|
|
15
|
+
[32mCJS[39m ⚡️ Build success in 166ms
|
|
16
|
+
[32mESM[39m [1mdist/index.js [22m[32m23.19 KB[39m
|
|
17
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m48.28 KB[39m
|
|
18
|
+
[32mESM[39m ⚡️ Build success in 170ms
|
|
19
19
|
[34mDTS[39m Build start
|
|
20
|
-
[32mDTS[39m ⚡️ Build success in
|
|
20
|
+
[32mDTS[39m ⚡️ Build success in 3255ms
|
|
21
21
|
[32mDTS[39m [1mdist/index.d.ts [22m[32m108.00 B[39m
|
|
22
22
|
[32mDTS[39m [1mdist/index.d.cts [22m[32m108.00 B[39m
|
package/dist/index.cjs
CHANGED
|
@@ -281,10 +281,9 @@ async function run2(options) {
|
|
|
281
281
|
const model = await loadSchemaDocument(schemaFile);
|
|
282
282
|
const outputPath = getOutputPath(options, schemaFile);
|
|
283
283
|
await runPlugins(schemaFile, model, outputPath);
|
|
284
|
-
|
|
285
|
-
console.log(import_colors2.default.green(`Generation completed successfully in ${Date.now() - start}ms.
|
|
284
|
+
console.log(import_colors2.default.green(`Generation completed successfully in ${Date.now() - start}ms.
|
|
286
285
|
`));
|
|
287
|
-
|
|
286
|
+
console.log(`You can now create a ZenStack client with it.
|
|
288
287
|
|
|
289
288
|
\`\`\`ts
|
|
290
289
|
import { ZenStackClient } from '@zenstackhq/runtime';
|
|
@@ -294,7 +293,6 @@ const client = new ZenStackClient(schema, {
|
|
|
294
293
|
dialect: { ... }
|
|
295
294
|
});
|
|
296
295
|
\`\`\``);
|
|
297
|
-
}
|
|
298
296
|
}
|
|
299
297
|
__name(run2, "run");
|
|
300
298
|
function getOutputPath(options, schemaFile) {
|
|
@@ -647,7 +645,7 @@ function handleSubProcessError2(err) {
|
|
|
647
645
|
}
|
|
648
646
|
__name(handleSubProcessError2, "handleSubProcessError");
|
|
649
647
|
|
|
650
|
-
// src/actions/
|
|
648
|
+
// src/actions/check.ts
|
|
651
649
|
var import_colors5 = __toESM(require("colors"), 1);
|
|
652
650
|
async function run6(options) {
|
|
653
651
|
const schemaFile = getSchemaFile(options.schema);
|
|
@@ -692,30 +690,30 @@ var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
|
692
690
|
var initAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
693
691
|
await run4(projectPath);
|
|
694
692
|
}, "initAction");
|
|
695
|
-
var
|
|
693
|
+
var checkAction = /* @__PURE__ */ __name(async (options) => {
|
|
696
694
|
await run6(options);
|
|
697
|
-
}, "
|
|
695
|
+
}, "checkAction");
|
|
698
696
|
function createProgram() {
|
|
699
697
|
const program2 = new import_commander.Command("zenstack");
|
|
700
698
|
program2.version(getVersion(), "-v --version", "display CLI version");
|
|
701
699
|
const schemaExtensions = import_language2.ZModelLanguageMetaData.fileExtensions.join(", ");
|
|
702
|
-
program2.description(`${import_colors6.default.bold.blue("\u03B6")} ZenStack is
|
|
700
|
+
program2.description(`${import_colors6.default.bold.blue("\u03B6")} ZenStack is the data layer for modern TypeScript apps.
|
|
703
701
|
|
|
704
702
|
Documentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
|
|
705
|
-
const schemaOption = new import_commander.Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`);
|
|
706
|
-
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new import_commander.Option("
|
|
707
|
-
const migrateCommand = program2.command("migrate").description("
|
|
708
|
-
const migrationsOption = new import_commander.Option("--migrations <path>",
|
|
703
|
+
const schemaOption = new import_commander.Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "zenstack/schema.zmodel" unless specified in package.json.`);
|
|
704
|
+
program2.command("generate").description("Run code generation plugins.").addOption(schemaOption).addOption(new import_commander.Option("-o, --output <path>", "default output directory for code generation")).action(generateAction);
|
|
705
|
+
const migrateCommand = program2.command("migrate").description("Run database schema migration related tasks.");
|
|
706
|
+
const migrationsOption = new import_commander.Option("--migrations <path>", 'path that contains the "migrations" directory');
|
|
709
707
|
migrateCommand.command("dev").addOption(schemaOption).addOption(new import_commander.Option("-n, --name <name>", "migration name")).addOption(new import_commander.Option("--create-only", "only create migration, do not apply")).addOption(migrationsOption).description("Create a migration from changes in schema and apply it to the database.").action((options) => migrateAction("dev", options));
|
|
710
708
|
migrateCommand.command("reset").addOption(schemaOption).addOption(new import_commander.Option("--force", "skip the confirmation prompt")).addOption(migrationsOption).description("Reset your database and apply all migrations, all data will be lost.").action((options) => migrateAction("reset", options));
|
|
711
709
|
migrateCommand.command("deploy").addOption(schemaOption).addOption(migrationsOption).description("Deploy your pending migrations to your production/staging database.").action((options) => migrateAction("deploy", options));
|
|
712
710
|
migrateCommand.command("status").addOption(schemaOption).addOption(migrationsOption).description("Check the status of your database migrations.").action((options) => migrateAction("status", options));
|
|
713
|
-
migrateCommand.command("resolve").addOption(schemaOption).addOption(migrationsOption).addOption(new import_commander.Option("--applied <migration>", "record a specific migration as applied")).addOption(new import_commander.Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases").action((options) => migrateAction("resolve", options));
|
|
711
|
+
migrateCommand.command("resolve").addOption(schemaOption).addOption(migrationsOption).addOption(new import_commander.Option("--applied <migration>", "record a specific migration as applied")).addOption(new import_commander.Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases.").action((options) => migrateAction("resolve", options));
|
|
714
712
|
const dbCommand = program2.command("db").description("Manage your database schema during development.");
|
|
715
|
-
dbCommand.command("push").description("Push the state from your schema to your database").addOption(schemaOption).addOption(new import_commander.Option("--accept-data-loss", "ignore data loss warnings")).addOption(new import_commander.Option("--force-reset", "force a reset of the database before push")).action((options) => dbAction("push", options));
|
|
716
|
-
program2.command("info").description("Get information of installed ZenStack
|
|
713
|
+
dbCommand.command("push").description("Push the state from your schema to your database.").addOption(schemaOption).addOption(new import_commander.Option("--accept-data-loss", "ignore data loss warnings")).addOption(new import_commander.Option("--force-reset", "force a reset of the database before push")).action((options) => dbAction("push", options));
|
|
714
|
+
program2.command("info").description("Get information of installed ZenStack packages.").argument("[path]", "project path", ".").action(infoAction);
|
|
717
715
|
program2.command("init").description("Initialize an existing project for ZenStack.").argument("[path]", "project path", ".").action(initAction);
|
|
718
|
-
program2.command("
|
|
716
|
+
program2.command("check").description("Check a ZModel schema for syntax or semantic errors.").addOption(schemaOption).action(checkAction);
|
|
719
717
|
return program2;
|
|
720
718
|
}
|
|
721
719
|
__name(createProgram, "createProgram");
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/validate.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nconst validateAction = async (options: Parameters<typeof actions.validate>[0]): Promise<void> => {\n await actions.validate(options);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is a database access toolkit for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(new Option('--silent', 'do not print any output'))\n .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n const migrationsOption = new Option('--migrations <path>', 'path for migrations');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .addOption(migrationsOption)\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .addOption(migrationsOption)\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases')\n .action((options) => migrateAction('resolve', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program.command('validate').description('Validate a ZModel schema.').addOption(schemaOption).action(validateAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: 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);\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/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\``);\n }\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for validating schema without generation\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","import_ast","import_colors","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","prismaSchema","PrismaSchemaGenerator","writeFileSync","join","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","import_ora","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_fs","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","import_colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","import_node_fs","import_node_path","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","validateAction","validate","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the data layer for modern TypeScript apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .addOption(migrationsOption)\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .addOption(migrationsOption)\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database.')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["import_language","import_colors","import_node_fs","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","import_ast","import_colors","import_node_path","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","prismaSchema","PrismaSchemaGenerator","writeFileSync","join","import_sdk","import_node_fs","import_node_path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","path","resolve","fs","existsSync","mkdirSync","recursive","TsSchemaGenerator","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","import_colors","import_node_path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","import_colors","import_node_fs","import_node_path","import_ora","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","import_node_fs","import_node_path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","import_colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","import_node_fs","import_node_path","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
|
package/dist/index.js
CHANGED
|
@@ -253,10 +253,9 @@ async function run2(options) {
|
|
|
253
253
|
const model = await loadSchemaDocument(schemaFile);
|
|
254
254
|
const outputPath = getOutputPath(options, schemaFile);
|
|
255
255
|
await runPlugins(schemaFile, model, outputPath);
|
|
256
|
-
|
|
257
|
-
console.log(colors2.green(`Generation completed successfully in ${Date.now() - start}ms.
|
|
256
|
+
console.log(colors2.green(`Generation completed successfully in ${Date.now() - start}ms.
|
|
258
257
|
`));
|
|
259
|
-
|
|
258
|
+
console.log(`You can now create a ZenStack client with it.
|
|
260
259
|
|
|
261
260
|
\`\`\`ts
|
|
262
261
|
import { ZenStackClient } from '@zenstackhq/runtime';
|
|
@@ -266,7 +265,6 @@ const client = new ZenStackClient(schema, {
|
|
|
266
265
|
dialect: { ... }
|
|
267
266
|
});
|
|
268
267
|
\`\`\``);
|
|
269
|
-
}
|
|
270
268
|
}
|
|
271
269
|
__name(run2, "run");
|
|
272
270
|
function getOutputPath(options, schemaFile) {
|
|
@@ -619,7 +617,7 @@ function handleSubProcessError2(err) {
|
|
|
619
617
|
}
|
|
620
618
|
__name(handleSubProcessError2, "handleSubProcessError");
|
|
621
619
|
|
|
622
|
-
// src/actions/
|
|
620
|
+
// src/actions/check.ts
|
|
623
621
|
import colors5 from "colors";
|
|
624
622
|
async function run6(options) {
|
|
625
623
|
const schemaFile = getSchemaFile(options.schema);
|
|
@@ -663,30 +661,30 @@ var infoAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
|
663
661
|
var initAction = /* @__PURE__ */ __name(async (projectPath) => {
|
|
664
662
|
await run4(projectPath);
|
|
665
663
|
}, "initAction");
|
|
666
|
-
var
|
|
664
|
+
var checkAction = /* @__PURE__ */ __name(async (options) => {
|
|
667
665
|
await run6(options);
|
|
668
|
-
}, "
|
|
666
|
+
}, "checkAction");
|
|
669
667
|
function createProgram() {
|
|
670
668
|
const program2 = new Command("zenstack");
|
|
671
669
|
program2.version(getVersion(), "-v --version", "display CLI version");
|
|
672
670
|
const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(", ");
|
|
673
|
-
program2.description(`${colors6.bold.blue("\u03B6")} ZenStack is
|
|
671
|
+
program2.description(`${colors6.bold.blue("\u03B6")} ZenStack is the data layer for modern TypeScript apps.
|
|
674
672
|
|
|
675
673
|
Documentation: https://zenstack.dev.`).showHelpAfterError().showSuggestionAfterError();
|
|
676
|
-
const schemaOption = new Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`);
|
|
677
|
-
program2.command("generate").description("Run code generation.").addOption(schemaOption).addOption(new Option("
|
|
678
|
-
const migrateCommand = program2.command("migrate").description("
|
|
679
|
-
const migrationsOption = new Option("--migrations <path>",
|
|
674
|
+
const schemaOption = new Option("--schema <file>", `schema file (with extension ${schemaExtensions}). Defaults to "zenstack/schema.zmodel" unless specified in package.json.`);
|
|
675
|
+
program2.command("generate").description("Run code generation plugins.").addOption(schemaOption).addOption(new Option("-o, --output <path>", "default output directory for code generation")).action(generateAction);
|
|
676
|
+
const migrateCommand = program2.command("migrate").description("Run database schema migration related tasks.");
|
|
677
|
+
const migrationsOption = new Option("--migrations <path>", 'path that contains the "migrations" directory');
|
|
680
678
|
migrateCommand.command("dev").addOption(schemaOption).addOption(new Option("-n, --name <name>", "migration name")).addOption(new Option("--create-only", "only create migration, do not apply")).addOption(migrationsOption).description("Create a migration from changes in schema and apply it to the database.").action((options) => migrateAction("dev", options));
|
|
681
679
|
migrateCommand.command("reset").addOption(schemaOption).addOption(new Option("--force", "skip the confirmation prompt")).addOption(migrationsOption).description("Reset your database and apply all migrations, all data will be lost.").action((options) => migrateAction("reset", options));
|
|
682
680
|
migrateCommand.command("deploy").addOption(schemaOption).addOption(migrationsOption).description("Deploy your pending migrations to your production/staging database.").action((options) => migrateAction("deploy", options));
|
|
683
681
|
migrateCommand.command("status").addOption(schemaOption).addOption(migrationsOption).description("Check the status of your database migrations.").action((options) => migrateAction("status", options));
|
|
684
|
-
migrateCommand.command("resolve").addOption(schemaOption).addOption(migrationsOption).addOption(new Option("--applied <migration>", "record a specific migration as applied")).addOption(new Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases").action((options) => migrateAction("resolve", options));
|
|
682
|
+
migrateCommand.command("resolve").addOption(schemaOption).addOption(migrationsOption).addOption(new Option("--applied <migration>", "record a specific migration as applied")).addOption(new Option("--rolled-back <migration>", "record a specific migration as rolled back")).description("Resolve issues with database migrations in deployment databases.").action((options) => migrateAction("resolve", options));
|
|
685
683
|
const dbCommand = program2.command("db").description("Manage your database schema during development.");
|
|
686
|
-
dbCommand.command("push").description("Push the state from your schema to your database").addOption(schemaOption).addOption(new Option("--accept-data-loss", "ignore data loss warnings")).addOption(new Option("--force-reset", "force a reset of the database before push")).action((options) => dbAction("push", options));
|
|
687
|
-
program2.command("info").description("Get information of installed ZenStack
|
|
684
|
+
dbCommand.command("push").description("Push the state from your schema to your database.").addOption(schemaOption).addOption(new Option("--accept-data-loss", "ignore data loss warnings")).addOption(new Option("--force-reset", "force a reset of the database before push")).action((options) => dbAction("push", options));
|
|
685
|
+
program2.command("info").description("Get information of installed ZenStack packages.").argument("[path]", "project path", ".").action(infoAction);
|
|
688
686
|
program2.command("init").description("Initialize an existing project for ZenStack.").argument("[path]", "project path", ".").action(initAction);
|
|
689
|
-
program2.command("
|
|
687
|
+
program2.command("check").description("Check a ZModel schema for syntax or semantic errors.").addOption(schemaOption).action(checkAction);
|
|
690
688
|
return program2;
|
|
691
689
|
}
|
|
692
690
|
__name(createProgram, "createProgram");
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/validate.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nconst validateAction = async (options: Parameters<typeof actions.validate>[0]): Promise<void> => {\n await actions.validate(options);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is a database access toolkit for TypeScript apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation.')\n .addOption(schemaOption)\n .addOption(new Option('--silent', 'do not print any output'))\n .addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Update the database schema with migrations.');\n const migrationsOption = new Option('--migrations <path>', 'path for migrations');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .addOption(migrationsOption)\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .addOption(migrationsOption)\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases')\n .action((options) => migrateAction('resolve', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack and related packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program.command('validate').description('Validate a ZModel schema.').addOption(schemaOption).action(validateAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n silent?: 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);\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/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\``);\n }\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for validating schema without generation\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","fs","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","invariant","isPlugin","getLiteral","getLiteralArray","colors","path","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","prismaSchema","writeFileSync","join","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","silent","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","colors","path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","fs","path","fileURLToPath","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","validateAction","validate","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/actions/db.ts","../src/utils/exec-utils.ts","../src/actions/action-utils.ts","../src/cli-error.ts","../src/actions/generate.ts","../src/plugins/index.ts","../src/plugins/prisma.ts","../src/plugins/typescript.ts","../src/actions/info.ts","../src/actions/init.ts","../src/actions/templates.ts","../src/actions/migrate.ts","../src/actions/check.ts","../src/utils/version-utils.ts"],"sourcesContent":["import { ZModelLanguageMetaData } from '@zenstackhq/language';\nimport colors from 'colors';\nimport { Command, CommanderError, Option } from 'commander';\nimport * as actions from './actions';\nimport { CliError } from './cli-error';\nimport { getVersion } from './utils/version-utils';\n\nconst generateAction = async (options: Parameters<typeof actions.generate>[0]): Promise<void> => {\n await actions.generate(options);\n};\n\nconst migrateAction = async (command: string, options: any): Promise<void> => {\n await actions.migrate(command, options);\n};\n\nconst dbAction = async (command: string, options: any): Promise<void> => {\n await actions.db(command, options);\n};\n\nconst infoAction = async (projectPath: string): Promise<void> => {\n await actions.info(projectPath);\n};\n\nconst initAction = async (projectPath: string): Promise<void> => {\n await actions.init(projectPath);\n};\n\nconst checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {\n await actions.check(options);\n};\n\nexport function createProgram() {\n const program = new Command('zenstack');\n\n program.version(getVersion()!, '-v --version', 'display CLI version');\n\n const schemaExtensions = ZModelLanguageMetaData.fileExtensions.join(', ');\n\n program\n .description(\n `${colors.bold.blue(\n 'ζ',\n )} ZenStack is the data layer for modern TypeScript apps.\\n\\nDocumentation: https://zenstack.dev.`,\n )\n .showHelpAfterError()\n .showSuggestionAfterError();\n\n const schemaOption = new Option(\n '--schema <file>',\n `schema file (with extension ${schemaExtensions}). Defaults to \"zenstack/schema.zmodel\" unless specified in package.json.`,\n );\n\n program\n .command('generate')\n .description('Run code generation plugins.')\n .addOption(schemaOption)\n .addOption(new Option('-o, --output <path>', 'default output directory for code generation'))\n .action(generateAction);\n\n const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');\n const migrationsOption = new Option('--migrations <path>', 'path that contains the \"migrations\" directory');\n\n migrateCommand\n .command('dev')\n .addOption(schemaOption)\n .addOption(new Option('-n, --name <name>', 'migration name'))\n .addOption(new Option('--create-only', 'only create migration, do not apply'))\n .addOption(migrationsOption)\n .description('Create a migration from changes in schema and apply it to the database.')\n .action((options) => migrateAction('dev', options));\n\n migrateCommand\n .command('reset')\n .addOption(schemaOption)\n .addOption(new Option('--force', 'skip the confirmation prompt'))\n .addOption(migrationsOption)\n .description('Reset your database and apply all migrations, all data will be lost.')\n .action((options) => migrateAction('reset', options));\n\n migrateCommand\n .command('deploy')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Deploy your pending migrations to your production/staging database.')\n .action((options) => migrateAction('deploy', options));\n\n migrateCommand\n .command('status')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .description('Check the status of your database migrations.')\n .action((options) => migrateAction('status', options));\n\n migrateCommand\n .command('resolve')\n .addOption(schemaOption)\n .addOption(migrationsOption)\n .addOption(new Option('--applied <migration>', 'record a specific migration as applied'))\n .addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))\n .description('Resolve issues with database migrations in deployment databases.')\n .action((options) => migrateAction('resolve', options));\n\n const dbCommand = program.command('db').description('Manage your database schema during development.');\n\n dbCommand\n .command('push')\n .description('Push the state from your schema to your database.')\n .addOption(schemaOption)\n .addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))\n .addOption(new Option('--force-reset', 'force a reset of the database before push'))\n .action((options) => dbAction('push', options));\n\n program\n .command('info')\n .description('Get information of installed ZenStack packages.')\n .argument('[path]', 'project path', '.')\n .action(infoAction);\n\n program\n .command('init')\n .description('Initialize an existing project for ZenStack.')\n .argument('[path]', 'project path', '.')\n .action(initAction);\n\n program\n .command('check')\n .description('Check a ZModel schema for syntax or semantic errors.')\n .addOption(schemaOption)\n .action(checkAction);\n\n return program;\n}\n\nconst program = createProgram();\n\nprogram.parseAsync().catch((err) => {\n if (err instanceof CliError) {\n console.error(colors.red(err.message));\n process.exit(1);\n } else if (err instanceof CommanderError) {\n // errors are already reported, just exit\n process.exit(err.exitCode);\n } else {\n console.error(colors.red('An unexpected error occurred:'));\n console.error(err);\n process.exit(1);\n }\n});\n","import fs from 'node:fs';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile, handleSubProcessError } from './action-utils';\n\ntype Options = {\n schema?: string;\n acceptDataLoss?: boolean;\n forceReset?: boolean;\n};\n\n/**\n * CLI action for db related commands\n */\nexport async function run(command: string, options: Options) {\n switch (command) {\n case 'push':\n await runPush(options);\n break;\n }\n}\n\nasync function runPush(options: Options) {\n // generate a temp prisma schema file\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile);\n\n try {\n // run prisma db push\n const cmd = [\n 'prisma db push',\n ` --schema \"${prismaSchemaFile}\"`,\n options.acceptDataLoss ? ' --accept-data-loss' : '',\n options.forceReset ? ' --force-reset' : '',\n ' --skip-generate',\n ].join('');\n\n try {\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n","import { execSync as _exec, type ExecSyncOptions } from 'child_process';\n\n/**\n * Utility for executing command synchronously and prints outputs on current console\n */\nexport function execSync(cmd: string, options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> }): void {\n const { env, ...restOptions } = options ?? {};\n const mergedEnv = env ? { ...process.env, ...env } : undefined;\n _exec(cmd, {\n encoding: 'utf-8',\n stdio: options?.stdio ?? 'inherit',\n env: mergedEnv,\n ...restOptions,\n });\n}\n\n/**\n * Utility for running package commands through npx/bunx\n */\nexport function execPackage(\n cmd: string,\n options?: Omit<ExecSyncOptions, 'env'> & { env?: Record<string, string> },\n): void {\n const packageManager = process?.versions?.['bun'] ? 'bunx' : 'npx';\n execSync(`${packageManager} ${cmd}`, options);\n}\n","import { loadDocument } from '@zenstackhq/language';\nimport { isDataSource } from '@zenstackhq/language/ast';\nimport { PrismaSchemaGenerator } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\n\nexport function getSchemaFile(file?: string) {\n if (file) {\n if (!fs.existsSync(file)) {\n throw new CliError(`Schema file not found: ${file}`);\n }\n return file;\n }\n\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.schema) {\n if (!fs.existsSync(pkgJsonConfig.schema)) {\n throw new CliError(`Schema file not found: ${pkgJsonConfig.schema}`);\n }\n return pkgJsonConfig.schema;\n }\n\n if (fs.existsSync('./zenstack/schema.zmodel')) {\n return './zenstack/schema.zmodel';\n } else if (fs.existsSync('./schema.zmodel')) {\n return './schema.zmodel';\n } else {\n throw new CliError(\n 'Schema file not found in default locations (\"./zenstack/schema.zmodel\" or \"./schema.zmodel\").',\n );\n }\n}\n\nexport async function loadSchemaDocument(schemaFile: string) {\n const loadResult = await loadDocument(schemaFile);\n if (!loadResult.success) {\n loadResult.errors.forEach((err) => {\n console.error(colors.red(err));\n });\n throw new CliError('Schema contains errors. See above for details.');\n }\n loadResult.warnings.forEach((warn) => {\n console.warn(colors.yellow(warn));\n });\n return loadResult.model;\n}\n\nexport function handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n\nexport async function generateTempPrismaSchema(zmodelPath: string, folder?: string) {\n const model = await loadSchemaDocument(zmodelPath);\n if (!model.declarations.some(isDataSource)) {\n throw new CliError('Schema must define a datasource');\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n if (!folder) {\n folder = path.dirname(zmodelPath);\n }\n const prismaSchemaFile = path.resolve(folder, '~schema.prisma');\n fs.writeFileSync(prismaSchemaFile, prismaSchema);\n return prismaSchemaFile;\n}\n\nexport function getPkgJsonConfig(startPath: string) {\n const result: { schema: string | undefined; output: string | undefined } = { schema: undefined, output: undefined };\n const pkgJsonFile = findUp(['package.json'], startPath, false);\n\n if (!pkgJsonFile) {\n return result;\n }\n\n let pkgJson: any = undefined;\n try {\n pkgJson = JSON.parse(fs.readFileSync(pkgJsonFile, 'utf8'));\n } catch {\n return result;\n }\n\n if (pkgJson.zenstack && typeof pkgJson.zenstack === 'object') {\n result.schema = pkgJson.zenstack.schema && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.schema);\n result.output = pkgJson.zenstack.output && path.resolve(path.dirname(pkgJsonFile), pkgJson.zenstack.output);\n }\n\n return result;\n}\n\ntype FindUpResult<Multiple extends boolean> = Multiple extends true ? string[] | undefined : string | undefined;\n\nfunction findUp<Multiple extends boolean = false>(\n names: string[],\n cwd: string = process.cwd(),\n multiple: Multiple = false as Multiple,\n result: string[] = [],\n): FindUpResult<Multiple> {\n if (!names.some((name) => !!name)) {\n return undefined;\n }\n const target = names.find((name) => fs.existsSync(path.join(cwd, name)));\n if (multiple === false && target) {\n return path.join(cwd, target) as FindUpResult<Multiple>;\n }\n if (target) {\n result.push(path.join(cwd, target));\n }\n const up = path.resolve(cwd, '..');\n if (up === cwd) {\n return (multiple && result.length > 0 ? result : undefined) as FindUpResult<Multiple>;\n }\n return findUp(names, up, multiple, result);\n}\n","/**\n * Indicating an error during CLI execution\n */\nexport class CliError extends Error {}\n","import { invariant } from '@zenstackhq/common-helpers';\nimport { isPlugin, LiteralExpr, Plugin, type Model } from '@zenstackhq/language/ast';\nimport { getLiteral, getLiteralArray } from '@zenstackhq/language/utils';\nimport { type CliPlugin } from '@zenstackhq/sdk';\nimport colors from 'colors';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { CliError } from '../cli-error';\nimport * as corePlugins from '../plugins';\nimport { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n output?: string;\n};\n\n/**\n * CLI action for generating code from schema\n */\nexport async function run(options: Options) {\n const start = Date.now();\n\n const schemaFile = getSchemaFile(options.schema);\n\n const model = await loadSchemaDocument(schemaFile);\n const outputPath = getOutputPath(options, schemaFile);\n\n await runPlugins(schemaFile, model, outputPath);\n\n console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\\n`));\n console.log(`You can now create a ZenStack client with it.\n\n\\`\\`\\`ts\nimport { ZenStackClient } from '@zenstackhq/runtime';\nimport { schema } from '${outputPath}/schema';\n\nconst client = new ZenStackClient(schema, {\n dialect: { ... }\n});\n\\`\\`\\``);\n}\n\nfunction getOutputPath(options: Options, schemaFile: string) {\n if (options.output) {\n return options.output;\n }\n const pkgJsonConfig = getPkgJsonConfig(process.cwd());\n if (pkgJsonConfig.output) {\n return pkgJsonConfig.output;\n } else {\n return path.dirname(schemaFile);\n }\n}\n\nasync function runPlugins(schemaFile: string, model: Model, outputPath: string) {\n const plugins = model.declarations.filter(isPlugin);\n const processedPlugins: { cliPlugin: CliPlugin; pluginOptions: Record<string, unknown> }[] = [];\n\n for (const plugin of plugins) {\n const provider = getPluginProvider(plugin);\n\n let cliPlugin: CliPlugin;\n if (provider.startsWith('@core/')) {\n cliPlugin = (corePlugins as any)[provider.slice('@core/'.length)];\n if (!cliPlugin) {\n throw new CliError(`Unknown core plugin: ${provider}`);\n }\n } else {\n let moduleSpec = provider;\n if (moduleSpec.startsWith('.')) {\n // relative to schema's path\n moduleSpec = path.resolve(path.dirname(schemaFile), moduleSpec);\n }\n try {\n cliPlugin = (await import(moduleSpec)).default as CliPlugin;\n } catch (error) {\n throw new CliError(`Failed to load plugin ${provider}: ${error}`);\n }\n }\n\n processedPlugins.push({ cliPlugin, pluginOptions: getPluginOptions(plugin) });\n }\n\n const defaultPlugins = [corePlugins['typescript']].reverse();\n defaultPlugins.forEach((d) => {\n if (!processedPlugins.some((p) => p.cliPlugin === d)) {\n processedPlugins.push({ cliPlugin: d, pluginOptions: {} });\n }\n });\n\n for (const { cliPlugin, pluginOptions } of processedPlugins) {\n invariant(\n typeof cliPlugin.generate === 'function',\n `Plugin ${cliPlugin.name} does not have a generate function`,\n );\n\n // run plugin generator\n const spinner = ora(cliPlugin.statusText ?? `Running plugin ${cliPlugin.name}`).start();\n try {\n await cliPlugin.generate({\n schemaFile,\n model,\n defaultOutputPath: outputPath,\n pluginOptions,\n });\n spinner.succeed();\n } catch (err) {\n spinner.fail();\n console.error(err);\n }\n }\n}\n\nfunction getPluginProvider(plugin: Plugin) {\n const providerField = plugin.fields.find((f) => f.name === 'provider');\n invariant(providerField, `Plugin ${plugin.name} does not have a provider field`);\n const provider = (providerField.value as LiteralExpr).value as string;\n return provider;\n}\n\nfunction getPluginOptions(plugin: Plugin): Record<string, unknown> {\n const result: Record<string, unknown> = {};\n for (const field of plugin.fields) {\n if (field.name === 'provider') {\n continue; // skip provider\n }\n const value = getLiteral(field.value) ?? getLiteralArray(field.value);\n if (value === undefined) {\n console.warn(`Plugin \"${plugin.name}\" option \"${field.name}\" has unsupported value, skipping`);\n continue;\n }\n result[field.name] = value;\n }\n return result;\n}\n","export { default as prisma } from './prisma';\nexport { default as typescript } from './typescript';\n","import { PrismaSchemaGenerator, type CliPlugin } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'Prisma Schema Generator',\n statusText: 'Generating Prisma schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n const prismaSchema = await new PrismaSchemaGenerator(model).generate();\n fs.writeFileSync(path.join(outDir, 'schema.prisma'), prismaSchema);\n },\n};\n\nexport default plugin;\n","import type { CliPlugin } from '@zenstackhq/sdk';\nimport { TsSchemaGenerator } from '@zenstackhq/sdk';\nimport fs from 'node:fs';\nimport path from 'node:path';\n\nconst plugin: CliPlugin = {\n name: 'TypeScript Schema Generator',\n statusText: 'Generating TypeScript schema',\n async generate({ model, defaultOutputPath, pluginOptions }) {\n let outDir = defaultOutputPath;\n if (typeof pluginOptions['output'] === 'string') {\n outDir = path.resolve(defaultOutputPath, pluginOptions['output']);\n if (!fs.existsSync(outDir)) {\n fs.mkdirSync(outDir, { recursive: true });\n }\n }\n await new TsSchemaGenerator().generate(model, outDir);\n },\n};\n\nexport default plugin;\n","import colors from 'colors';\nimport path from 'node:path';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = await getZenStackPackages(projectPath);\n if (!packages) {\n console.error('Unable to locate package.json. Are you in a valid project directory?');\n return;\n }\n\n console.log('Installed ZenStack Packages:');\n const versions = new Set<string>();\n for (const { pkg, version } of packages) {\n if (version) {\n versions.add(version);\n }\n console.log(` ${colors.green(pkg.padEnd(20))}\\t${version}`);\n }\n\n if (versions.size > 1) {\n console.warn(colors.yellow('WARNING: Multiple versions of Zenstack packages detected. This may cause issues.'));\n }\n}\n\nasync function getZenStackPackages(projectPath: string): Promise<Array<{ pkg: string; version: string | undefined }>> {\n let pkgJson: {\n dependencies: Record<string, unknown>;\n devDependencies: Record<string, unknown>;\n };\n const resolvedPath = path.resolve(projectPath);\n try {\n pkgJson = (\n await import(path.join(resolvedPath, 'package.json'), {\n with: { type: 'json' },\n })\n ).default;\n } catch {\n return [];\n }\n\n const packages = Array.from(\n new Set(\n [...Object.keys(pkgJson.dependencies ?? {}), ...Object.keys(pkgJson.devDependencies ?? {})].filter(\n (p) => p.startsWith('@zenstackhq/') || p === 'zenstack',\n ),\n ),\n ).sort();\n\n const result = await Promise.all(\n packages.map(async (pkg) => {\n try {\n const depPkgJson = (\n await import(`${pkg}/package.json`, {\n with: { type: 'json' },\n })\n ).default;\n return { pkg, version: depPkgJson.version as string };\n } catch {\n return { pkg, version: undefined };\n }\n }),\n );\n\n return result;\n}\n","import colors from 'colors';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport ora from 'ora';\nimport { detect, resolveCommand } from 'package-manager-detector';\nimport { CliError } from '../cli-error';\nimport { execSync } from '../utils/exec-utils';\nimport { STARTER_ZMODEL } from './templates';\n\n/**\n * CLI action for getting information about installed ZenStack packages\n */\nexport async function run(projectPath: string) {\n const packages = [\n { name: '@zenstackhq/cli@next', dev: true },\n { name: '@zenstackhq/runtime@next', dev: false },\n ];\n let pm = await detect();\n if (!pm) {\n pm = { agent: 'npm', name: 'npm' };\n }\n\n console.log(colors.gray(`Using package manager: ${pm.agent}`));\n\n for (const pkg of packages) {\n const resolved = resolveCommand(pm.agent, 'install', [\n pkg.name,\n ...(pkg.dev ? [pm.agent === 'yarn' ? '--dev' : '--save-dev'] : []),\n ]);\n if (!resolved) {\n throw new CliError(`Unable to determine how to install package \"${pkg.name}\". Please install it manually.`);\n }\n\n const spinner = ora(`Installing \"${pkg.name}\"`).start();\n try {\n execSync(`${resolved.command} ${resolved.args.join(' ')}`, {\n cwd: projectPath,\n });\n spinner.succeed();\n } catch (e) {\n spinner.fail();\n throw e;\n }\n }\n\n const generationFolder = 'zenstack';\n\n if (!fs.existsSync(path.join(projectPath, generationFolder))) {\n fs.mkdirSync(path.join(projectPath, generationFolder));\n }\n\n if (!fs.existsSync(path.join(projectPath, generationFolder, 'schema.zmodel'))) {\n fs.writeFileSync(path.join(projectPath, generationFolder, 'schema.zmodel'), STARTER_ZMODEL);\n } else {\n console.log(colors.yellow('Schema file already exists. Skipping generation of sample.'));\n }\n\n console.log(colors.green('ZenStack project initialized successfully!'));\n console.log(colors.gray(`See \"${generationFolder}/schema.zmodel\" for your database schema.`));\n console.log(colors.gray('Run `zenstack generate` to compile the the schema into a TypeScript file.'));\n}\n","export const STARTER_ZMODEL = `// This is a sample model to get you started.\n\n/// A sample data source using local sqlite db.\ndatasource db {\n provider = 'sqlite'\n url = 'file:./dev.db'\n}\n\n/// User model\nmodel User {\n id String @id @default(cuid())\n email String @unique @email @length(6, 32)\n posts Post[]\n}\n\n/// Post model\nmodel Post {\n id String @id @default(cuid())\n createdAt DateTime @default(now())\n updatedAt DateTime @updatedAt\n title String @length(1, 256)\n content String\n published Boolean @default(false)\n author User @relation(fields: [authorId], references: [id])\n authorId String\n}\n`;\n\nexport const STARTER_MAIN_TS = `import { ZenStackClient } from '@zenstackhq/runtime';\nimport SQLite from 'better-sqlite3';\nimport { SqliteDialect } from 'kysely';\nimport { schema } from './zenstack/schema';\n\nasync function main() {\n const client = new ZenStackClient(schema, {\n dialect: new SqliteDialect({\n database: new SQLite('./zenstack/dev.db'),\n }),\n });\n const user = await client.user.create({\n data: {\n email: 'test@zenstack.dev',\n posts: {\n create: [\n {\n title: 'Hello World',\n content: 'This is a test post',\n },\n ],\n },\n },\n include: { posts: true }\n });\n console.log('User created:', user);\n}\n\nmain();\n`;\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { CliError } from '../cli-error';\nimport { execPackage } from '../utils/exec-utils';\nimport { generateTempPrismaSchema, getSchemaFile } from './action-utils';\n\ntype CommonOptions = {\n schema?: string;\n migrations?: string;\n};\n\ntype DevOptions = CommonOptions & {\n name?: string;\n createOnly?: boolean;\n};\n\ntype ResetOptions = CommonOptions & {\n force?: boolean;\n};\n\ntype DeployOptions = CommonOptions;\n\ntype StatusOptions = CommonOptions;\n\ntype ResolveOptions = CommonOptions & {\n applied?: string;\n rolledBack?: string;\n};\n\n/**\n * CLI action for migration-related commands\n */\nexport async function run(command: string, options: CommonOptions) {\n const schemaFile = getSchemaFile(options.schema);\n const prismaSchemaDir = options.migrations ? path.dirname(options.migrations) : undefined;\n const prismaSchemaFile = await generateTempPrismaSchema(schemaFile, prismaSchemaDir);\n\n try {\n switch (command) {\n case 'dev':\n await runDev(prismaSchemaFile, options as DevOptions);\n break;\n\n case 'reset':\n await runReset(prismaSchemaFile, options as ResetOptions);\n break;\n\n case 'deploy':\n await runDeploy(prismaSchemaFile, options as DeployOptions);\n break;\n\n case 'status':\n await runStatus(prismaSchemaFile, options as StatusOptions);\n break;\n\n case 'resolve':\n await runResolve(prismaSchemaFile, options as ResolveOptions);\n break;\n }\n } finally {\n if (fs.existsSync(prismaSchemaFile)) {\n fs.unlinkSync(prismaSchemaFile);\n }\n }\n}\n\nasync function runDev(prismaSchemaFile: string, options: DevOptions) {\n try {\n const cmd = [\n 'prisma migrate dev',\n ` --schema \"${prismaSchemaFile}\"`,\n ' --skip-generate',\n options.name ? ` --name ${options.name}` : '',\n options.createOnly ? ' --create-only' : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runReset(prismaSchemaFile: string, options: ResetOptions) {\n try {\n const cmd = ['prisma migrate reset', ` --schema \"${prismaSchemaFile}\"`, options.force ? ' --force' : ''].join(\n '',\n );\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runDeploy(prismaSchemaFile: string, _options: DeployOptions) {\n try {\n const cmd = ['prisma migrate deploy', ` --schema \"${prismaSchemaFile}\"`].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runStatus(prismaSchemaFile: string, _options: StatusOptions) {\n try {\n await execPackage(`prisma migrate status --schema \"${prismaSchemaFile}\"`);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nasync function runResolve(prismaSchemaFile: string, options: ResolveOptions) {\n if (!options.applied && !options.rolledBack) {\n throw new CliError('Either --applied or --rolled-back option must be provided');\n }\n\n try {\n const cmd = [\n 'prisma migrate resolve',\n ` --schema \"${prismaSchemaFile}\"`,\n options.applied ? ` --applied ${options.applied}` : '',\n options.rolledBack ? ` --rolled-back ${options.rolledBack}` : '',\n ].join('');\n\n await execPackage(cmd);\n } catch (err) {\n handleSubProcessError(err);\n }\n}\n\nfunction handleSubProcessError(err: unknown) {\n if (err instanceof Error && 'status' in err && typeof err.status === 'number') {\n process.exit(err.status);\n } else {\n process.exit(1);\n }\n}\n","import colors from 'colors';\nimport { getSchemaFile, loadSchemaDocument } from './action-utils';\n\ntype Options = {\n schema?: string;\n};\n\n/**\n * CLI action for checking a schema's validity.\n */\nexport async function run(options: Options) {\n const schemaFile = getSchemaFile(options.schema);\n\n try {\n await loadSchemaDocument(schemaFile);\n console.log(colors.green('✓ Schema validation completed successfully.'));\n } catch (error) {\n console.error(colors.red('✗ Schema validation failed.'));\n // Re-throw to maintain CLI exit code behavior\n throw error;\n }\n}\n","import fs from 'node:fs';\nimport path from 'node:path';\nimport { fileURLToPath } from 'node:url';\n\nexport function getVersion() {\n try {\n // isomorphic __dirname\n const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));\n return JSON.parse(fs.readFileSync(path.join(_dirname, '../package.json'), 'utf8')).version;\n } catch {\n return undefined;\n }\n}\n"],"mappings":"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","names":["ZModelLanguageMetaData","colors","Command","CommanderError","Option","fs","execSync","_exec","execSync","cmd","options","env","restOptions","mergedEnv","process","undefined","_exec","encoding","stdio","execPackage","packageManager","versions","loadDocument","isDataSource","PrismaSchemaGenerator","colors","fs","path","CliError","Error","getSchemaFile","file","fs","existsSync","CliError","pkgJsonConfig","getPkgJsonConfig","process","cwd","schema","loadSchemaDocument","schemaFile","loadResult","loadDocument","success","errors","forEach","err","console","error","colors","red","warnings","warn","yellow","model","handleSubProcessError","Error","status","exit","generateTempPrismaSchema","zmodelPath","folder","declarations","some","isDataSource","prismaSchema","PrismaSchemaGenerator","generate","path","dirname","prismaSchemaFile","resolve","writeFileSync","startPath","result","undefined","output","pkgJsonFile","findUp","pkgJson","JSON","parse","readFileSync","zenstack","names","multiple","name","target","find","join","push","up","length","run","command","options","runPush","schemaFile","getSchemaFile","schema","prismaSchemaFile","generateTempPrismaSchema","cmd","acceptDataLoss","forceReset","join","execPackage","err","handleSubProcessError","fs","existsSync","unlinkSync","invariant","isPlugin","getLiteral","getLiteralArray","colors","path","ora","PrismaSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","prismaSchema","writeFileSync","join","TsSchemaGenerator","fs","path","plugin","name","statusText","generate","model","defaultOutputPath","pluginOptions","outDir","resolve","existsSync","mkdirSync","recursive","run","options","start","Date","now","schemaFile","getSchemaFile","schema","model","loadSchemaDocument","outputPath","getOutputPath","runPlugins","console","log","colors","green","output","pkgJsonConfig","getPkgJsonConfig","process","cwd","path","dirname","plugins","declarations","filter","isPlugin","processedPlugins","plugin","provider","getPluginProvider","cliPlugin","startsWith","corePlugins","slice","length","CliError","moduleSpec","resolve","default","error","push","pluginOptions","getPluginOptions","defaultPlugins","reverse","forEach","d","some","p","invariant","generate","name","spinner","ora","statusText","defaultOutputPath","succeed","err","fail","providerField","fields","find","f","value","result","field","getLiteral","getLiteralArray","undefined","warn","colors","path","run","projectPath","packages","getZenStackPackages","console","error","log","versions","Set","pkg","version","add","colors","green","padEnd","size","warn","yellow","pkgJson","resolvedPath","path","resolve","join","with","type","default","Array","from","Object","keys","dependencies","devDependencies","filter","p","startsWith","sort","result","Promise","all","map","depPkgJson","undefined","colors","fs","path","ora","detect","resolveCommand","STARTER_ZMODEL","run","projectPath","packages","name","dev","pm","detect","agent","console","log","colors","gray","pkg","resolved","resolveCommand","CliError","spinner","ora","start","execSync","command","args","join","cwd","succeed","e","fail","generationFolder","fs","existsSync","path","mkdirSync","writeFileSync","STARTER_ZMODEL","yellow","green","fs","path","run","command","options","schemaFile","getSchemaFile","schema","prismaSchemaDir","migrations","path","dirname","undefined","prismaSchemaFile","generateTempPrismaSchema","runDev","runReset","runDeploy","runStatus","runResolve","fs","existsSync","unlinkSync","cmd","name","createOnly","join","execPackage","err","handleSubProcessError","force","_options","applied","rolledBack","CliError","Error","status","process","exit","colors","run","options","schemaFile","getSchemaFile","schema","loadSchemaDocument","console","log","colors","green","error","red","fs","path","fileURLToPath","getVersion","_dirname","__dirname","path","dirname","fileURLToPath","url","JSON","parse","fs","readFileSync","join","version","undefined","generateAction","options","generate","migrateAction","command","migrate","dbAction","db","infoAction","projectPath","info","initAction","init","checkAction","check","createProgram","program","Command","version","getVersion","schemaExtensions","ZModelLanguageMetaData","fileExtensions","join","description","colors","bold","blue","showHelpAfterError","showSuggestionAfterError","schemaOption","Option","addOption","action","migrateCommand","migrationsOption","dbCommand","argument","parseAsync","catch","err","CliError","console","error","red","message","process","exit","CommanderError","exitCode"]}
|
package/package.json
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
"publisher": "zenstack",
|
|
4
4
|
"displayName": "ZenStack CLI",
|
|
5
5
|
"description": "FullStack database toolkit with built-in access control and automatic API generation.",
|
|
6
|
-
"version": "3.0.0-alpha.
|
|
6
|
+
"version": "3.0.0-alpha.29",
|
|
7
7
|
"type": "module",
|
|
8
8
|
"author": {
|
|
9
9
|
"name": "ZenStack Team"
|
|
@@ -28,9 +28,9 @@
|
|
|
28
28
|
"ora": "^5.4.1",
|
|
29
29
|
"package-manager-detector": "^1.3.0",
|
|
30
30
|
"ts-pattern": "^5.7.1",
|
|
31
|
-
"@zenstackhq/
|
|
32
|
-
"@zenstackhq/
|
|
33
|
-
"@zenstackhq/sdk": "3.0.0-alpha.
|
|
31
|
+
"@zenstackhq/common-helpers": "3.0.0-alpha.29",
|
|
32
|
+
"@zenstackhq/language": "3.0.0-alpha.29",
|
|
33
|
+
"@zenstackhq/sdk": "3.0.0-alpha.29"
|
|
34
34
|
},
|
|
35
35
|
"peerDependencies": {
|
|
36
36
|
"prisma": "^6.14.0"
|
|
@@ -40,11 +40,11 @@
|
|
|
40
40
|
"@types/tmp": "^0.2.6",
|
|
41
41
|
"better-sqlite3": "^12.2.0",
|
|
42
42
|
"tmp": "^0.2.3",
|
|
43
|
-
"@zenstackhq/
|
|
44
|
-
"@zenstackhq/
|
|
45
|
-
"@zenstackhq/testtools": "3.0.0-alpha.
|
|
46
|
-
"@zenstackhq/
|
|
47
|
-
"@zenstackhq/
|
|
43
|
+
"@zenstackhq/runtime": "3.0.0-alpha.29",
|
|
44
|
+
"@zenstackhq/eslint-config": "3.0.0-alpha.29",
|
|
45
|
+
"@zenstackhq/testtools": "3.0.0-alpha.29",
|
|
46
|
+
"@zenstackhq/vitest-config": "3.0.0-alpha.29",
|
|
47
|
+
"@zenstackhq/typescript-config": "3.0.0-alpha.29"
|
|
48
48
|
},
|
|
49
49
|
"scripts": {
|
|
50
50
|
"build": "tsc --noEmit && tsup-node",
|
package/src/actions/generate.ts
CHANGED
|
@@ -12,7 +12,6 @@ import { getPkgJsonConfig, getSchemaFile, loadSchemaDocument } from './action-ut
|
|
|
12
12
|
type Options = {
|
|
13
13
|
schema?: string;
|
|
14
14
|
output?: string;
|
|
15
|
-
silent?: boolean;
|
|
16
15
|
};
|
|
17
16
|
|
|
18
17
|
/**
|
|
@@ -28,9 +27,8 @@ export async function run(options: Options) {
|
|
|
28
27
|
|
|
29
28
|
await runPlugins(schemaFile, model, outputPath);
|
|
30
29
|
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
console.log(`You can now create a ZenStack client with it.
|
|
30
|
+
console.log(colors.green(`Generation completed successfully in ${Date.now() - start}ms.\n`));
|
|
31
|
+
console.log(`You can now create a ZenStack client with it.
|
|
34
32
|
|
|
35
33
|
\`\`\`ts
|
|
36
34
|
import { ZenStackClient } from '@zenstackhq/runtime';
|
|
@@ -40,7 +38,6 @@ const client = new ZenStackClient(schema, {
|
|
|
40
38
|
dialect: { ... }
|
|
41
39
|
});
|
|
42
40
|
\`\`\``);
|
|
43
|
-
}
|
|
44
41
|
}
|
|
45
42
|
|
|
46
43
|
function getOutputPath(options: Options, schemaFile: string) {
|
package/src/actions/index.ts
CHANGED
|
@@ -3,6 +3,6 @@ import { run as generate } from './generate';
|
|
|
3
3
|
import { run as info } from './info';
|
|
4
4
|
import { run as init } from './init';
|
|
5
5
|
import { run as migrate } from './migrate';
|
|
6
|
-
import { run as
|
|
6
|
+
import { run as check } from './check';
|
|
7
7
|
|
|
8
|
-
export { db, generate, info, init, migrate,
|
|
8
|
+
export { db, generate, info, init, migrate, check };
|
package/src/index.ts
CHANGED
|
@@ -25,8 +25,8 @@ const initAction = async (projectPath: string): Promise<void> => {
|
|
|
25
25
|
await actions.init(projectPath);
|
|
26
26
|
};
|
|
27
27
|
|
|
28
|
-
const
|
|
29
|
-
await actions.
|
|
28
|
+
const checkAction = async (options: Parameters<typeof actions.check>[0]): Promise<void> => {
|
|
29
|
+
await actions.check(options);
|
|
30
30
|
};
|
|
31
31
|
|
|
32
32
|
export function createProgram() {
|
|
@@ -40,26 +40,25 @@ export function createProgram() {
|
|
|
40
40
|
.description(
|
|
41
41
|
`${colors.bold.blue(
|
|
42
42
|
'ζ',
|
|
43
|
-
)} ZenStack is
|
|
43
|
+
)} ZenStack is the data layer for modern TypeScript apps.\n\nDocumentation: https://zenstack.dev.`,
|
|
44
44
|
)
|
|
45
45
|
.showHelpAfterError()
|
|
46
46
|
.showSuggestionAfterError();
|
|
47
47
|
|
|
48
48
|
const schemaOption = new Option(
|
|
49
49
|
'--schema <file>',
|
|
50
|
-
`schema file (with extension ${schemaExtensions}). Defaults to "schema.zmodel" unless specified in package.json.`,
|
|
50
|
+
`schema file (with extension ${schemaExtensions}). Defaults to "zenstack/schema.zmodel" unless specified in package.json.`,
|
|
51
51
|
);
|
|
52
52
|
|
|
53
53
|
program
|
|
54
54
|
.command('generate')
|
|
55
|
-
.description('Run code generation.')
|
|
55
|
+
.description('Run code generation plugins.')
|
|
56
56
|
.addOption(schemaOption)
|
|
57
|
-
.addOption(new Option('--
|
|
58
|
-
.addOption(new Option('-o, --output <path>', 'default output directory for core plugins'))
|
|
57
|
+
.addOption(new Option('-o, --output <path>', 'default output directory for code generation'))
|
|
59
58
|
.action(generateAction);
|
|
60
59
|
|
|
61
|
-
const migrateCommand = program.command('migrate').description('
|
|
62
|
-
const migrationsOption = new Option('--migrations <path>', 'path
|
|
60
|
+
const migrateCommand = program.command('migrate').description('Run database schema migration related tasks.');
|
|
61
|
+
const migrationsOption = new Option('--migrations <path>', 'path that contains the "migrations" directory');
|
|
63
62
|
|
|
64
63
|
migrateCommand
|
|
65
64
|
.command('dev')
|
|
@@ -98,14 +97,14 @@ export function createProgram() {
|
|
|
98
97
|
.addOption(migrationsOption)
|
|
99
98
|
.addOption(new Option('--applied <migration>', 'record a specific migration as applied'))
|
|
100
99
|
.addOption(new Option('--rolled-back <migration>', 'record a specific migration as rolled back'))
|
|
101
|
-
.description('Resolve issues with database migrations in deployment databases')
|
|
100
|
+
.description('Resolve issues with database migrations in deployment databases.')
|
|
102
101
|
.action((options) => migrateAction('resolve', options));
|
|
103
102
|
|
|
104
103
|
const dbCommand = program.command('db').description('Manage your database schema during development.');
|
|
105
104
|
|
|
106
105
|
dbCommand
|
|
107
106
|
.command('push')
|
|
108
|
-
.description('Push the state from your schema to your database')
|
|
107
|
+
.description('Push the state from your schema to your database.')
|
|
109
108
|
.addOption(schemaOption)
|
|
110
109
|
.addOption(new Option('--accept-data-loss', 'ignore data loss warnings'))
|
|
111
110
|
.addOption(new Option('--force-reset', 'force a reset of the database before push'))
|
|
@@ -113,7 +112,7 @@ export function createProgram() {
|
|
|
113
112
|
|
|
114
113
|
program
|
|
115
114
|
.command('info')
|
|
116
|
-
.description('Get information of installed ZenStack
|
|
115
|
+
.description('Get information of installed ZenStack packages.')
|
|
117
116
|
.argument('[path]', 'project path', '.')
|
|
118
117
|
.action(infoAction);
|
|
119
118
|
|
|
@@ -123,7 +122,11 @@ export function createProgram() {
|
|
|
123
122
|
.argument('[path]', 'project path', '.')
|
|
124
123
|
.action(initAction);
|
|
125
124
|
|
|
126
|
-
program
|
|
125
|
+
program
|
|
126
|
+
.command('check')
|
|
127
|
+
.description('Check a ZModel schema for syntax or semantic errors.')
|
|
128
|
+
.addOption(schemaOption)
|
|
129
|
+
.action(checkAction);
|
|
127
130
|
|
|
128
131
|
return program;
|
|
129
132
|
}
|
|
@@ -40,14 +40,14 @@ describe('CLI validate command test', () => {
|
|
|
40
40
|
const workDir = createProject(validModel);
|
|
41
41
|
|
|
42
42
|
// Should not throw an error
|
|
43
|
-
expect(() => runCli('
|
|
43
|
+
expect(() => runCli('check', workDir)).not.toThrow();
|
|
44
44
|
});
|
|
45
45
|
|
|
46
46
|
it('should fail validation for invalid schema', () => {
|
|
47
47
|
const workDir = createProject(invalidModel);
|
|
48
48
|
|
|
49
49
|
// Should throw an error due to validation failure
|
|
50
|
-
expect(() => runCli('
|
|
50
|
+
expect(() => runCli('check', workDir)).toThrow();
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
it('should respect custom schema location', () => {
|
|
@@ -55,14 +55,14 @@ describe('CLI validate command test', () => {
|
|
|
55
55
|
fs.renameSync(path.join(workDir, 'zenstack/schema.zmodel'), path.join(workDir, 'zenstack/custom.zmodel'));
|
|
56
56
|
|
|
57
57
|
// Should not throw an error when using custom schema path
|
|
58
|
-
expect(() => runCli('
|
|
58
|
+
expect(() => runCli('check --schema ./zenstack/custom.zmodel', workDir)).not.toThrow();
|
|
59
59
|
});
|
|
60
60
|
|
|
61
61
|
it('should fail when schema file does not exist', () => {
|
|
62
62
|
const workDir = createProject(validModel);
|
|
63
63
|
|
|
64
64
|
// Should throw an error when schema file doesn't exist
|
|
65
|
-
expect(() => runCli('
|
|
65
|
+
expect(() => runCli('check --schema ./nonexistent.zmodel', workDir)).toThrow();
|
|
66
66
|
});
|
|
67
67
|
|
|
68
68
|
it('should respect package.json config', () => {
|
|
@@ -78,7 +78,7 @@ describe('CLI validate command test', () => {
|
|
|
78
78
|
fs.writeFileSync(path.join(workDir, 'package.json'), JSON.stringify(pkgJson, null, 2));
|
|
79
79
|
|
|
80
80
|
// Should not throw an error when using package.json config
|
|
81
|
-
expect(() => runCli('
|
|
81
|
+
expect(() => runCli('check', workDir)).not.toThrow();
|
|
82
82
|
});
|
|
83
83
|
|
|
84
84
|
it('should validate schema with syntax errors', () => {
|
|
@@ -96,6 +96,6 @@ model User {
|
|
|
96
96
|
const workDir = createProject(modelWithSyntaxError, false);
|
|
97
97
|
|
|
98
98
|
// Should throw an error due to syntax error
|
|
99
|
-
expect(() => runCli('
|
|
99
|
+
expect(() => runCli('check', workDir)).toThrow();
|
|
100
100
|
});
|
|
101
101
|
});
|