UNPKG

3.12 kBJavaScriptView Raw
1#!/usr/bin/env node
2//-
3//- Usage
4//- litejs [init|bench|build|help]
5//-
6//- build options
7//- --banner, -b Add commented banner to output
8//- --input, -i Input file
9//- --output, -o Output file
10//- --readme, -r Replase readme tags in file
11//-
12//- Examples
13//- litejs build -r README.md -i ui/dev.html -o ui/index.html
14//-
15
16var fs = require("fs")
17, child = require("child_process")
18, path = require("../path")
19, opts = {}
20
21global.Fn = require("../fn").Fn
22
23exports.command = command
24exports.cp = cp
25exports.mkdirp = mkdirp
26exports.readFile = readFile
27exports.rmrf = rmrf
28exports.writeFile = writeFile
29
30function getopts(args, i, opts) {
31 for (var arg; arg = args[i++]; ) {
32 switch (arg) {
33 case "-b":
34 case "--banner":
35 opts.banner = args[i++]
36 break;
37 default:
38 if (arg.charAt(0) == "-") {
39 args.splice.apply(
40 args,
41 [i, 0].concat(arg.replace(/\w(?!$)/g,"$& " + args[i] + " -").split(" "))
42 )
43 } else if (!opts.cmd) {
44 opts.cmd = arg
45 } else {
46 opts.file = arg
47 }
48 }
49 }
50}
51
52
53if (!module.parent) {
54 var helpFile = __filename
55 , cmd = process.argv[2]
56 , subHelp = [
57 "bench",
58 "build"
59 ]
60 switch (cmd) {
61 case "bench":
62 case "build":
63 require("./" + cmd).execute(process.argv, 3)
64 break;
65 case "init":
66 getopts(process.argv.slice(0), 2, opts)
67 require("./" + process.argv[2])(opts)
68 break;
69 case "init-app":
70 case "init-ui":
71 child.spawnSync("cp", ["-rv",
72 process.argv[2].replace("init-", "./node_modules/litejs/lib/template/default/"),
73 process.cwd() + (opts.file ? "/" + opts.file : "")
74 ], {stdio: "inherit"})
75 break;
76 case "help":
77 if (subHelp.indexOf(process.argv[3]) > -1) {
78 helpFile = path.join(path.dirname(__filename), process.argv[3] + ".js")
79 }
80 default:
81 console.log(readFile(helpFile).match(/^\/\/-.*/gm).join("\n").replace(/^.../gm, ""))
82 }
83}
84
85function command(name) {
86 var cmd = process.platform === "win32" ? "where " : "command -v "
87 try {
88 return !!child.execSync(cmd + name)
89 } catch (e) {
90 return false
91 }
92}
93
94function cp(src, dest) {
95 if (fs.copyFileSync) {
96 fs.copyFileSync(src, dest)
97 } else {
98 fs.writeFileSync(dest, fs.readFileSync(src))
99 }
100}
101
102function mkdirp(dir) {
103 try {
104 fs.statSync(dir)
105 } catch (e) {
106 mkdirp(path.dirname(dir))
107 console.error("mkdir", dir)
108 fs.mkdirSync(dir)
109 }
110}
111
112function readFile(fileName) {
113 return fs.readFileSync(path.resolve(fileName.split("?")[0]), "utf8")
114}
115
116// On windows unlinking an opened file will mark it for deletion and the file is still there until it is closed.
117// With anti-virus software, renaming immediately after creation fails with EPERM error, as A/V locking up files for scanning time.
118
119function rmrf(dir) {
120 try {
121 if (fs.lstatSync(dir).isDirectory()) {
122 for (var arr = fs.readdirSync(dir), i = arr.length; i--; ) {
123 rmrf(path.join(dir, arr[i]))
124 }
125 console.error("rmdir", dir)
126 fs.rmdirSync(dir)
127 } else {
128 console.error("rm", dir)
129 fs.unlinkSync(dir)
130 }
131 } catch (e) {
132 if (e.code !== "ENOENT") throw e
133 }
134}
135
136function writeFile(fileName, content) {
137 fs.writeFileSync(path.resolve(fileName.split("?")[0]), content, "utf8")
138}
139
140
141