optc
Version:
An easy way to write TypeScript cli script application.
121 lines (116 loc) • 3.87 kB
JavaScript
;
const fs = require('fs-extra');
const path = require('node:path');
const createDebug = require('debug');
const kolorist = require('kolorist');
const index = require('./shared/optc.81056db6.cjs');
require('node:fs');
require('node:child_process');
require('node:crypto');
require('node:url');
require('@babel/plugin-transform-typescript');
require('breadc');
require('path');
require('axios');
require('globby');
require('node:os');
require('find-up');
require('scule');
function _interopDefaultCompat (e) { return e && typeof e === 'object' && 'default' in e ? e.default : e; }
const fs__default = /*#__PURE__*/_interopDefaultCompat(fs);
const path__default = /*#__PURE__*/_interopDefaultCompat(path);
const createDebug__default = /*#__PURE__*/_interopDefaultCompat(createDebug);
const name = "optc";
const platformInfo = `${process.platform}-${process.arch} node-${process.version}`;
const debug = createDebug__default(name + ":cli");
async function main(args) {
if (args.length === 0) {
console.error(kolorist.lightRed("Error ") + "You must provide <script>");
process.exit(1);
}
const first = args[0];
if (first === "-v" || first === "--version") {
console.log(`${name}/${index.version} ${platformInfo}`);
return;
} else if (first === "-h" || first === "--help") {
printHelp();
return;
} else if (first === "new") {
const filename = args[1];
if (filename) {
await index.ensureSpace();
createNewScript(filename);
} else {
console.error(kolorist.lightRed("Error ") + "You must provide <script>");
}
return;
} else if (first === "space") {
await index.ensureSpace();
console.log(index.OPTC_ROOT);
return;
} else {
await index.ensureSpace();
}
const handle = (error) => {
if (error instanceof Error) {
console.error(kolorist.lightRed("Error ") + error.message);
} else {
console.error(error);
}
debug(error);
};
process.on("unhandledRejection", (error) => {
handle(error);
});
try {
await index.bootstrap(args[0], ...args.slice(1));
} catch (error) {
handle(error);
process.exit(1);
}
}
function printHelp() {
console.log(`${name}/${index.version}`);
console.log();
console.log("Usage:");
console.log(" $ optc <script> [...args]");
console.log();
console.log("Commands:");
console.log(" new <script> Create a new empty script");
console.log(" space Print Optc space directory");
console.log();
console.log("Options:");
console.log(" -v, --version Display version number");
console.log(" -h, --help Display this message");
}
async function createNewScript(_filename) {
const filename = _filename.endsWith(".ts") ? _filename : _filename + ".ts";
if (!fs__default.existsSync(filename)) {
const globalsDts = path__default.join(index.OPTC_ROOT, "globals.d.ts");
const pkg = fs__default.existsSync("package.json") ? fs__default.readJSONSync("package.json") : void 0;
const isLocal = !!pkg?.dependencies?.optc || !!pkg?.devDependencies?.optc;
const template = [
"#!/usr/bin/env optc",
"",
isLocal ? `/// <reference types="optc/globals" />` : `/// <reference path="${globalsDts}" />`,
"",
"export default async function () {",
" ",
"}",
""
];
fs__default.writeFileSync(filename, template.join("\n"), "utf-8");
fs__default.chmodSync(filename, 493);
} else {
console.error(kolorist.lightRed("Error ") + `${filename} exists`);
}
const editor = process.env.EDITOR;
if (editor === "code") {
const cmd = `${editor} --goto ${filename}:6:3`;
await index.Process([cmd], [], { verbose: false });
} else if (editor) {
const cmd = `${editor} ${filename}`;
await index.Process([cmd], [], { verbose: false });
}
}
main(process.argv.slice(2));