UNPKG

dts-gen

Version:
200 lines 8.13 kB
#!/usr/bin/env node "use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const fs = __importStar(require("fs")); const path = __importStar(require("path")); const yargs = __importStar(require("yargs")); const guess = __importStar(require("./")); const definitely_typed_1 = __importDefault(require("./definitely-typed")); const templatesDirectory = path.join(__dirname, "..", "templates"); const args = yargs .alias("m", "module") .alias("i", "identifier") .alias("e", "expression") .alias("n", "name") .alias("f", "file") .alias("d", "dt") .alias("s", "stdout") .alias("o", "overwrite") .alias("t", "template") .alias("v", "version") .parseSync(); class ArgsError extends Error { argsError; constructor(argsError) { super(); this.argsError = argsError; this.name = "ArgsError"; this.message = argsError; Object.setPrototypeOf(this, ArgsError.prototype); } } let result; try { if (args.version) { console.log(require("../package.json").version); process.exit(0); } if (+!!args.dt + +!!args.file + +!!args.stdout > 1) { throw new ArgsError("Cannot specify more than one output mode"); } if (+!!args.identifier + +!!args.expression + +!!args.module + +!!args["expression-file"] + +!!args.template !== 1) { throw new ArgsError("Must specify exactly one input"); } if (typeof args.name === "boolean") throw new ArgsError('Must specify a value for "--name"'); if (typeof args.identifier === "boolean") throw new ArgsError('Must specify a value for "--identifier"'); if (typeof args.module === "boolean") throw new ArgsError('Must specify a value for "--module"'); if (args.overwrite !== undefined && args.overwrite !== true) throw new ArgsError("--overwrite does not accept an argument"); let name; if (args.module) { if (args.name) throw new ArgsError("Cannot use --name with --module"); name = args.module; module.paths.unshift(process.cwd() + "/node_modules"); result = guess.generateModuleDeclarationFile(args.module, require(args.module)); } else if (args.expression) { name = args.name || "dts_gen_expr"; // eslint-disable-next-line no-eval result = guess.generateIdentifierDeclarationFile(name, eval(args.expression)); } else if (args["expression-file"]) { if (args.name) throw new ArgsError("Cannot use --name with --expression-file"); const filename = args["expression-file"]; name = path.basename(filename, path.extname(filename)).replace(/[^A-Za-z0-9]/g, "_"); module.paths.unshift(process.cwd() + "/node_modules"); const fileContent = fs.readFileSync(filename, "utf-8"); // eslint-disable-next-line no-eval result = guess.generateIdentifierDeclarationFile(name, eval(fileContent)); } else if (args.identifier) { if (args.name) throw new ArgsError("Cannot use --name with --identifier"); if (args.module || args.expression) throw new ArgsError("Cannot specify more than one input"); name = args.identifier; // eslint-disable-next-line no-eval result = guess.generateIdentifierDeclarationFile(args.identifier, eval(args.identifier)); } else if (args.template) { if (!args.name) throw new ArgsError("Needs a name"); name = args.name; if (args.module || args.expression) throw new ArgsError("Cannot mix --template with --module or --expression"); result = getTemplate(args.template); } else { throw new Error("Internal error, please log a bug with the commandline you specified"); } if (args.dt) { (0, definitely_typed_1.default)(result, name, !!args.overwrite); } else if (args.stdout) { console.log(result); } else { let filename = typeof args.file === "boolean" || args.file === undefined ? name + ".d.ts" : args.file; if (!filename.endsWith(".d.ts")) { filename = filename + ".d.ts"; } if (!args.overwrite && fs.existsSync(filename)) { console.error(`File ${filename} already exists and --overwrite was not specified; exiting.`); process.exit(2); } fs.writeFileSync(filename, prependOurHeader(result), "utf-8"); console.log(`Wrote ${result.split(/\r\n|\r|\n/).length} lines to ${filename}.`); } } catch (e) { if (e instanceof ArgsError) { console.error("Invalid arguments: " + e.argsError); console.log(""); printHelp(); process.exit(1); } else if (e.code === "MODULE_NOT_FOUND") { console.error(`Error loading module "${args.module}".\n` + getErrorMessageFirstLine(e).replace(/'/g, '"') + ".\n" + `Please install missing module and try again.`); process.exit(1); } else { console.log("Unexpected crash! Please log a bug with the commandline you specified."); throw e; } } function printHelp() { console.log("Usage: dts-gen input [settings] [output]"); console.log(""); console.log("Input Options:"); console.log(' -m[odule] fs The "fs" node module (must be installed)'); console.log(' -i[dentifier] Math The global variable "Math"'); console.log(' -e[xpression] "new C()" The expression "new C()"'); console.log(" -t[emplate] module Name of a template. Templates are:"); console.log(` ${allTemplateNames()}`); console.log(""); console.log("Settings:"); console.log(" -n[ame] n The name to emit when generating for an expression"); console.log(""); console.log("Output Options:"); console.log(" -f[ile] [filename.d.ts] Write to a file (default)"); console.log(" -d[t] [dirName] Create a folder suitable for DefinitelyTyped"); console.log(" -s[tdout] Write to stdout"); console.log(" -o[verwrite] Allow overwriting files"); console.log(""); console.log("Example: dts-gen -m fs --stdout"); } function prependOurHeader(result) { return `/** Declaration file generated by dts-gen */\r\n\r\n` + result; } function getTemplate(templateName) { try { return fs.readFileSync(path.join(templatesDirectory, templateName + ".d.ts"), "utf-8"); } catch (e) { throw new ArgsError(`Could not read template '${templateName}'. Expected one of:\n${allTemplateNames()}`); } } function allTemplateNames() { return fs .readdirSync(templatesDirectory) .map((t) => t.slice(0, t.length - ".d.ts".length)) .join(", "); } function getErrorMessageFirstLine(error) { return error.message.split("\n", 1)[0]; } //# sourceMappingURL=run.js.map