UNPKG

litejs

Version:

Single-page application framework

156 lines (139 loc) 3.48 kB
#!/usr/bin/env node //- //- Usage //- litejs [init|bench|build|help|test] //- //- build options //- --banner, -b Add commented banner to output //- --input, -i Input file //- --output, -o Output file //- --readme, -r Replase readme tags in file //- //- Examples //- litejs build -r README.md -i ui/dev.html -o ui/index.html //- var fs = require("fs") , child = require("child_process") , path = require("../path") , opts = {} global.Fn = require("../fn").Fn exports.command = command exports.cp = cp exports.mkdirp = mkdirp exports.readFile = readFile exports.rmrf = rmrf exports.writeFile = writeFile function getopts(args, i, opts) { for (var arg; arg = args[i++]; ) { switch (arg) { case "-b": case "--banner": opts.banner = args[i++] break; default: if (arg.charAt(0) == "-") { args.splice.apply( args, [i, 0].concat(arg.replace(/\w(?!$)/g,"$& " + args[i] + " -").split(" ")) ) } else if (!opts.cmd) { opts.cmd = arg } else { opts.file = arg } } } } if (!module.parent) { var helpFile = __filename , shortcut = { b: "build", t: "test" } , cmd = shortcut[process.argv[2]] || process.argv[2] , subHelp = [ "bench", "build" ] switch (cmd) { case "bench": case "build": require("./" + cmd).execute(process.argv, 3) break; case "init": getopts(process.argv.slice(0), 2, opts) require("./" + process.argv[2])(opts) break; case "init-app": case "init-ui": child.spawnSync("cp", ["-rv", process.argv[2].replace("init-", "./node_modules/litejs/lib/template/default/"), process.cwd() + (opts.file ? "/" + opts.file : "") ], {stdio: "inherit"}) break; case "test": var arr = process.argv.slice(process.argv.length > 3 ? 4 : 3) arr.unshift("-r", "litejs", "test") child.spawn(process.argv[0], arr, { env: { NODE_PATH: process.argv[1].replace(/bin\/\w+$/, "lib/node_modules/") }, stdio: 'inherit' }) break; case "help": if (subHelp.indexOf(process.argv[3]) > -1) { helpFile = path.join(path.dirname(__filename), process.argv[3] + ".js") } default: console.log(readFile(helpFile).match(/^\/\/-.*/gm).join("\n").replace(/^.../gm, "")) } } function command(name) { var cmd = process.platform === "win32" ? "where " : "command -v " try { return !!child.execSync(cmd + name) } catch (e) { return false } } function cp(src, dest) { if (fs.copyFileSync) { fs.copyFileSync(src, dest) } else { fs.writeFileSync(dest, fs.readFileSync(src)) } } function mkdirp(dir) { try { fs.statSync(dir) } catch (e) { mkdirp(path.dirname(dir)) console.error("mkdir", dir) fs.mkdirSync(dir) } } function readFile(fileName) { return fs.readFileSync(path.resolve(fileName.split("?")[0]), "utf8") } // On windows unlinking an opened file will mark it for deletion and the file is still there until it is closed. // With anti-virus software, renaming immediately after creation fails with EPERM error, as A/V locking up files for scanning time. function rmrf(dir) { try { if (fs.lstatSync(dir).isDirectory()) { for (var arr = fs.readdirSync(dir), i = arr.length; i--; ) { rmrf(path.join(dir, arr[i])) } console.error("rmdir", dir) fs.rmdirSync(dir) } else { console.error("rm", dir) fs.unlinkSync(dir) } } catch (e) { if (e.code !== "ENOENT") throw e } } function writeFile(fileName, content) { fs.writeFileSync(path.resolve(fileName.split("?")[0]), content, "utf8") }