UNPKG

7.43 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3try {
4 require("typescript");
5}
6catch (e) {
7 console.error("typescript is required. please try 'npm install -g typescript'\n");
8}
9var ts = require("typescript");
10var fs = require("fs");
11var path = require("path");
12var commandpost = require("commandpost");
13var lib = require("./");
14var utils_1 = require("./utils");
15var packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, "../package.json")).toString());
16var root = commandpost
17 .create("tsfmt [files...]")
18 .option("-r, --replace", "replace .ts file")
19 .option("--verify", "checking file format")
20 .option("--baseDir <path>", "config file lookup from <path>")
21 .option("--stdin", "get formatting content from stdin")
22 .option("--no-tsconfig", "don't read a tsconfig.json")
23 .option("--no-tslint", "don't read a tslint.json")
24 .option("--no-editorconfig", "don't read a .editorconfig")
25 .option("--no-vscode", "don't read a .vscode/settings.json")
26 .option("--no-tsfmt", "don't read a tsfmt.json")
27 .option("--useTsconfig <path>", "using specified config file instead of tsconfig.json")
28 .option("--useTslint <path>", "using specified config file instead of tslint.json")
29 .option("--useTsfmt <path>", "using specified config file instead of tsfmt.json")
30 .option("--useVscode <path>", "using specified config file instead of .vscode/settings.json")
31 .option("--verbose", "makes output more verbose")
32 .option("-v, --version", "output the version number")
33 .action(function (opts, args) {
34 var replace = !!opts.replace;
35 var verify = !!opts.verify;
36 var baseDir = opts.baseDir ? opts.baseDir[0] : void 0;
37 var stdin = !!opts.stdin;
38 var tsconfig = !!opts.tsconfig;
39 var tslint = !!opts.tslint;
40 var editorconfig = !!opts.editorconfig;
41 var vscode = !!opts.vscode;
42 var tsfmt = !!opts.tsfmt;
43 var tsconfigFile = opts.useTsconfig[0] ? path.join(process.cwd(), opts.useTsconfig[0]) : null;
44 var tslintFile = opts.useTslint[0] ? path.join(process.cwd(), opts.useTslint[0]) : null;
45 var vscodeFile = opts.useVscode[0] ? path.join(process.cwd(), opts.useVscode[0]) : null;
46 var tsfmtFile = opts.useTsfmt[0] ? path.join(process.cwd(), opts.useTsfmt[0]) : null;
47 var verbose = !!opts.verbose;
48 var version = !!opts.version;
49 if (version) {
50 console.log("tsfmt : " + packageJson.version);
51 console.log("tsc : " + ts.version);
52 return;
53 }
54 var files = args.files;
55 var useTsconfig = false;
56 if (files.length === 0) {
57 var configFileName = tsconfigFile || utils_1.getConfigFileName(baseDir || process.cwd(), "tsconfig.json");
58 if (configFileName) {
59 files = utils_1.readFilesFromTsconfig(configFileName);
60 if (verbose) {
61 console.log("read: " + configFileName);
62 }
63 useTsconfig = true;
64 }
65 }
66 if (files.length === 0 && !opts.stdin) {
67 process.stdout.write(root.helpText() + "\n");
68 return;
69 }
70 if (verbose) {
71 var printPool_1 = {};
72 var printSetting = function (name, value) {
73 if (typeof value === "boolean") {
74 printPool_1[name] = value ? "ON" : "OFF";
75 }
76 else {
77 printPool_1[name] = value;
78 }
79 };
80 var doPrint = function () {
81 var maxLength = Object.keys(printPool_1).reduce(function (p, c) { return Math.max(p, c.length); }, 0);
82 Object.keys(printPool_1).forEach(function (key) {
83 var value = printPool_1[key];
84 console.log(padSpaces(key, maxLength + 1) + ": " + value);
85 });
86 function padSpaces(str, len) {
87 var result = str;
88 while (result.length < len) {
89 result += " ";
90 }
91 return result;
92 }
93 };
94 printSetting("replace", replace);
95 printSetting("verify", verify);
96 printSetting("baseDir", baseDir ? baseDir : process.cwd());
97 printSetting("stdin", stdin);
98 printSetting("files from tsconfig", useTsconfig);
99 printSetting("tsconfig", tsconfig);
100 if (tsconfigFile) {
101 printSetting("specified tsconfig.json", tsconfigFile);
102 }
103 printSetting("tslint", tslint);
104 if (tslintFile) {
105 printSetting("specified tslint.json", tslintFile);
106 }
107 printSetting("editorconfig", editorconfig);
108 printSetting("vscode", vscode);
109 if (vscodeFile) {
110 printSetting("specified vscode settings.json", vscodeFile);
111 }
112 printSetting("tsfmt", tsfmt);
113 if (tsfmtFile) {
114 printSetting("specified tsfmt.json", tsfmtFile);
115 }
116 doPrint();
117 }
118 if (stdin) {
119 if (replace) {
120 errorHandler("--stdin option can not use with --replace option");
121 return;
122 }
123 lib
124 .processStream(files[0] || "temp.ts", process.stdin, {
125 replace: replace,
126 verify: verify,
127 baseDir: baseDir,
128 tsconfig: tsconfig,
129 tsconfigFile: tsconfigFile,
130 tslint: tslint,
131 tslintFile: tslintFile,
132 editorconfig: editorconfig,
133 vscode: vscode,
134 vscodeFile: vscodeFile,
135 tsfmt: tsfmt,
136 tsfmtFile: tsfmtFile,
137 verbose: verbose,
138 })
139 .then(function (result) {
140 var resultMap = {};
141 resultMap[result.fileName] = result;
142 return resultMap;
143 })
144 .then(showResultHandler)
145 .catch(errorHandler);
146 }
147 else {
148 lib
149 .processFiles(files, {
150 replace: replace,
151 verify: verify,
152 baseDir: baseDir,
153 tsconfig: tsconfig,
154 tsconfigFile: tsconfigFile,
155 tslint: tslint,
156 tslintFile: tslintFile,
157 editorconfig: editorconfig,
158 vscode: vscode,
159 vscodeFile: vscodeFile,
160 tsfmt: tsfmt,
161 tsfmtFile: tsfmtFile,
162 verbose: verbose,
163 })
164 .then(showResultHandler)
165 .catch(errorHandler);
166 }
167});
168commandpost
169 .exec(root, process.argv)
170 .catch(errorHandler);
171function showResultHandler(resultMap) {
172 var hasError = Object.keys(resultMap).filter(function (fileName) { return resultMap[fileName].error; }).length !== 0;
173 if (hasError) {
174 Object.keys(resultMap)
175 .map(function (fileName) { return resultMap[fileName]; })
176 .filter(function (result) { return result.error; })
177 .forEach(function (result) { return process.stderr.write(result.message); });
178 process.exit(1);
179 }
180 else {
181 Object.keys(resultMap)
182 .map(function (fileName) { return resultMap[fileName]; })
183 .forEach(function (result) {
184 if (result.message) {
185 process.stdout.write(result.message);
186 }
187 });
188 }
189 return Promise.resolve(null);
190}
191function errorHandler(err) {
192 if (err instanceof Error) {
193 console.error(err.stack);
194 }
195 else {
196 console.error(err);
197 }
198 return Promise.resolve(null).then(function () {
199 process.exit(1);
200 return null;
201 });
202}
203//# sourceMappingURL=cli.js.map
\No newline at end of file