typia
Version:
Superfast runtime validators with only one line
60 lines (56 loc) • 1.75 kB
JavaScript
import path from "node:path";
import { createRequire } from "node:module";
//#region src/executable/typia.ts
const USAGE = `Wrong command has been detected. Use like below:
npx typia generate [options] [files...]
npx typia generate
--input src/templates \\
--output src/generated
npx typia generate
--output src/generated \\
"src/**/*.typia.ts"
`;
const halt = (desc) => {
console.error(desc);
process.exit(-1);
};
const loadTypeScript = () => {
loadPackage("typescript/package.json", `typescript has not been installed. Run "npm i -D ttsc typescript" before.`);
};
const loadTtsc = () => {
loadPackage("ttsc/package.json", `ttsc has not been installed. Run "npm i -D ttsc typescript" before.`);
};
const loadPackage = (request, desc) => {
const resolvers = [() => createRequire(path.join(process.cwd(), "package.json")).resolve(request), () => createRequire(path.resolve(process.argv[1] ?? "")).resolve(request)];
for (const resolve of resolvers) try {
resolve();
return;
} catch {}
halt(desc);
};
const isHelp = (args) => {
return args.some((arg) => arg === "--help" || arg === "-h");
};
const main = async () => {
try {
await import("inquirer");
await import("commander");
} catch {
halt(`typia has not been installed. Run "npm i typia" before.`);
}
if (process.argv[2] === "generate") {
if (isHelp(process.argv.slice(3)) === false) {
loadTtsc();
loadTypeScript();
}
const { TypiaGenerateWizard } = await import("./TypiaGenerateWizard.mjs");
await TypiaGenerateWizard.generate();
} else halt(USAGE);
};
main().catch((exp) => {
console.error(exp instanceof URIError ? exp.message : exp);
process.exit(-1);
});
//#endregion
//# sourceMappingURL=typia.mjs.map