UNPKG

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