1 | #!/usr/bin/env node
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 |
|
16 | var fs = require("fs")
|
17 | , child = require("child_process")
|
18 | , path = require("path")
|
19 | , conf = {}
|
20 | , opts = {}
|
21 |
|
22 | try {
|
23 | conf = require(path.resolve("package.json")).litejs || {}
|
24 | } catch(e) {}
|
25 |
|
26 | global.Fn = require("../fn").Fn
|
27 |
|
28 | exports.command = command
|
29 | exports.cp = cp
|
30 | exports.mkdirp = mkdirp
|
31 | exports.readFile = readFile
|
32 | exports.rmrf = rmrf
|
33 | exports.writeFile = writeFile
|
34 |
|
35 | function 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 |
|
58 | if (!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 |
|
109 | function 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 |
|
118 | function cp(src, dest) {
|
119 | if (fs.copyFileSync) {
|
120 | fs.copyFileSync(src, dest)
|
121 | } else {
|
122 | fs.writeFileSync(dest, fs.readFileSync(src))
|
123 | }
|
124 | }
|
125 |
|
126 | function 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 |
|
136 | function readFile(fileName) {
|
137 | return fs.readFileSync(path.resolve(fileName.split("?")[0]), "utf8")
|
138 | }
|
139 |
|
140 |
|
141 |
|
142 |
|
143 | function 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 |
|
160 | function writeFile(fileName, content) {
|
161 | fs.writeFileSync(path.resolve(fileName.split("?")[0]), content, "utf8")
|
162 | }
|
163 |
|
164 |
|
165 |
|