typescript-assistant
Version:
Combines and integrates professional Typescript tools into your project
116 lines • 4.12 kB
JavaScript
;
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const util_1 = require("../util");
const typescript_formatter_1 = require("typescript-formatter");
let replaceOptions = {
replace: true,
verbose: false,
baseDir: process.cwd(),
editorconfig: true,
tslint: true,
tsfmt: true,
verify: false,
tsconfig: false,
tsconfigFile: null,
tslintFile: null,
tsfmtFile: null,
vscode: false,
vscodeFile: null
};
let verifyOptions = {
replace: false,
verbose: false,
baseDir: process.cwd(),
editorconfig: true,
tslint: true,
tsfmt: true,
verify: true,
tsconfig: false,
tsconfigFile: null,
tslintFile: null,
tsfmtFile: null,
vscode: false,
vscodeFile: null
};
exports.createFormatter = (dependencies) => {
let { logger, bus, git } = dependencies;
let runningFormatter;
let rescheduled = false;
let logError = (err) => logger.error('formatter', `error: ${err}`);
let runFormatterOn = (files, options) => {
logger.log('formatter', `checking ${files.length} files...`);
return typescript_formatter_1.processFiles(files, options).then((resultMap) => {
let success = true;
Object.keys(resultMap).forEach((fileName) => {
let result = resultMap[fileName];
if (result.error) {
success = false;
}
if (result.message) {
logger.log('formatter', `${options.replace ? 'Fixed ' : ''}${util_1.absolutePath(fileName)}: ${result.message}`);
}
});
return success;
});
};
let runFormatter = (options) => {
return git.findChangedFiles().then((files) => {
files = files.filter(util_1.isTypescriptFile);
return runFormatterOn(files, options);
});
};
let verifyFormat = () => {
if (runningFormatter) {
rescheduled = true;
}
else {
bus.report({
tool: 'format',
status: 'busy'
});
runningFormatter = runFormatter(verifyOptions).then((success) => {
logger.log('formatter', success ? 'all files formatted' : 'unformatted files found');
bus.signal(success ? 'format-verified' : 'format-errored');
bus.report({
tool: 'format',
status: 'ready',
errors: success ? 0 : 1,
fixable: success ? 0 : 1
});
}).catch(logError).then(() => {
runningFormatter = undefined;
if (rescheduled) {
rescheduled = false;
verifyFormat();
}
}).catch(logError);
}
};
return {
verifyFiles: (files) => {
return runFormatterOn(files, verifyOptions);
},
formatFiles: (files) => __awaiter(this, void 0, void 0, function* () {
if (!files) {
files = (yield git.findChangedFiles()).filter(util_1.isTypescriptFile);
}
return runFormatterOn(files, replaceOptions);
}),
startVerifying: (triggers) => {
bus.registerAll(triggers, verifyFormat);
verifyFormat();
},
stopVerifying: () => {
bus.unregister(verifyFormat);
}
};
};
//# sourceMappingURL=formatter.js.map