zenstack/tests/e2e/orm/scripts/generate.ts
Yiming Cao 170535a6f9
feat(schema): add option for generating lite schema (#357)
* feat(schema): add option for generating lite schema

* fix --lite-only option and add CLI test
2025-11-03 09:25:23 -08:00

35 lines
1.2 KiB
TypeScript

import { loadDocument } from '@zenstackhq/language';
import type { Model } from '@zenstackhq/language/ast';
import { TsSchemaGenerator } from '@zenstackhq/sdk';
import { glob } from 'glob';
import path from 'node:path';
import { fileURLToPath } from 'node:url';
const dir = path.dirname(fileURLToPath(import.meta.url));
async function main() {
const zmodelFiles = glob.sync(path.resolve(dir, '../schemas/**/*.zmodel'));
for (const file of zmodelFiles) {
console.log(`Generating TS schema for: ${file}`);
await generate(file);
}
}
async function generate(schemaPath: string) {
const generator = new TsSchemaGenerator();
const outDir = path.dirname(schemaPath);
// isomorphic __dirname
const _dirname = typeof __dirname !== 'undefined' ? __dirname : path.dirname(fileURLToPath(import.meta.url));
// plugin models
const pluginDocs = [path.resolve(_dirname, '../../node_modules/@zenstackhq/plugin-policy/plugin.zmodel')];
const result = await loadDocument(schemaPath, pluginDocs);
if (!result.success) {
throw new Error(`Failed to load schema from ${schemaPath}: ${result.errors}`);
}
await generator.generate(result.model as Model, { outDir });
}
main();