import { Command } from "@cliffy/command"; import { build } from "../build/mod.ts"; const command = new Command() .description( "Generate TypeScript lexicon schema files from JSON lexicon definitions", ) .option( "-i, --lexicons ", "directory containing lexicon JSON files", { default: "./lexicons" }, ) .option( "-o, --out ", "output directory for generated TS files", { required: true, default: "./lex" }, ) .option("--clear", "clear output directory before generating files", { default: false, }) .option( "--override [override:boolean]", "override existing files (no effect when --clear is set)", { default: true }, ) .option("--js", "use .js extension for imports and generated files", { default: false, }) .option( "--import-ext ", "file extension for import statements in generated files (overrides --js)", ) .option( "--file-ext ", "file extension for generated files (overrides --js)", ) .option( "--lib ", 'package name to import the "l" schema utility from', { default: "@atp/lex" }, ) .option( "--allow-legacy-blobs", "generate schemas that accept legacy blob references", { default: false }, ) .option( "--pure-annotations", "add /*#__PURE__*/ annotations for tree-shaking tools", { default: false }, ) .option( "--skip-fmt", "write generated files without running dprint formatting", { default: false }, ) .option( "--ignore-invalid-lexicons", "skip invalid lexicon files instead of exiting with an error", { default: false }, ) .option( "--include ", "NSID patterns to include (supports * wildcards)", ) .option( "--exclude ", "NSID patterns to exclude (supports * wildcards)", ) .action(async (opts) => { const useJs = opts.js ?? false; const importExt = opts.importExt ?? (useJs ? ".js" : ".ts"); const fileExt = opts.fileExt ?? (useJs ? ".js" : ".ts"); await build({ lexicons: opts.lexicons, out: opts.out, clear: opts.clear, override: opts.override, importExt, fileExt, lib: opts.lib, allowLegacyBlobs: opts.allowLegacyBlobs, pureAnnotations: opts.pureAnnotations, format: !opts.skipFmt, ignoreInvalidLexicons: opts.ignoreInvalidLexicons, include: opts.include, exclude: opts.exclude, }); console.log("Done."); }); export default command;