@theintern/dev
Version:
Development support scripts for Intern projects.
217 lines • 7.3 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.ExecError = exports.readTsconfigFile = exports.readJsonFile = exports.parseJson = exports.log = exports.lint = exports.glob = exports.getResources = exports.getConfigs = exports.fixSourceMaps = exports.exec = exports.copyFile = exports.copyAll = exports.tsconfig = exports.buildDir = exports.internDev = void 0;
var tslib_1 = require("tslib");
var fs_1 = require("fs");
var shelljs_1 = require("shelljs");
var glob_1 = require("glob");
var path_1 = require("path");
var child_process_1 = require("child_process");
var typescript_1 = require("typescript");
var packageJson = readJsonFile('package.json');
var internDev = packageJson.internDev || {};
exports.internDev = internDev;
var tsconfig = readTsconfigFile('tsconfig.json');
exports.tsconfig = tsconfig;
var buildDir = path_1.relative(process.cwd(), path_1.normalize(tsconfig.options.outDir));
exports.buildDir = buildDir;
function copyAll(patterns, outDir) {
patterns.forEach(function (pattern) {
var filePattern;
var options = {};
if (typeof pattern !== 'string') {
options.cwd = pattern.base;
filePattern = pattern.pattern;
}
else {
options.cwd = '.';
filePattern = pattern;
}
glob(filePattern, options).forEach(function (filename) {
log("Copying " + filename + " to " + outDir);
copyFile(path_1.join(options.cwd, filename), outDir);
});
});
}
exports.copyAll = copyAll;
function copyFile(filename, outDir) {
var dst = path_1.join(outDir, filename);
var dstDir = path_1.dirname(dst);
if (!shelljs_1.test('-d', dstDir)) {
shelljs_1.mkdir('-p', dstDir);
}
shelljs_1.cp(filename, dst);
}
exports.copyFile = copyFile;
function exec(command, options) {
if (!options) {
options = {};
}
if (options.silent == null) {
options.silent = true;
}
var result = shelljs_1.exec(command, options);
if (result.code) {
throw new ExecError(command, result.code, result.stdout, result.stderr);
}
return result;
}
exports.exec = exec;
function fixSourceMaps() {
glob_1.sync(path_1.join(buildDir, '**', '*.js.map'), {
nodir: true,
}).forEach(function (filename) {
shelljs_1.sed('-i', /("sources":\[")(.*?)("\])/, "$1" + path_1.basename(filename, '.js.map') + ".ts$3", filename);
});
}
exports.fixSourceMaps = fixSourceMaps;
function getConfigs() {
if (internDev && internDev.configs) {
return internDev.configs;
}
return ['tsconfig.json'].concat(glob('*/**/tsconfig.json'));
}
exports.getConfigs = getConfigs;
function getResources() {
return (internDev && internDev.resources) || {};
}
exports.getResources = getResources;
function glob(pattern, options) {
options = options || {};
if (!('nodir' in options)) {
options.nodir = true;
}
if (!('ignore' in options)) {
var globIgnore = ['node_modules/**', buildDir + "/**"];
if (internDev && internDev.ignore) {
globIgnore = globIgnore.concat(internDev.ignore);
}
options.ignore = globIgnore;
}
return glob_1.sync(pattern, options);
}
exports.glob = glob;
function lint() {
var eslint = require.resolve('eslint/bin/eslint');
child_process_1.spawnSync('node', [eslint, '--ext', '.ts', 'src'], { stdio: 'inherit' });
}
exports.lint = lint;
function log() {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
shelljs_1.echo.apply(void 0, tslib_1.__spreadArrays([new Date().toLocaleTimeString() + " -"], args));
}
exports.log = log;
function parseJson(text) {
var textToParse = removeComments(text);
return JSON.parse(textToParse);
}
exports.parseJson = parseJson;
function readJsonFile(filename) {
return parseJson(fs_1.readFileSync(filename, { encoding: 'utf8' }));
}
exports.readJsonFile = readJsonFile;
function readTsconfigFile(filename) {
var data = typescript_1.readConfigFile(filename, function (name) {
return fs_1.readFileSync(name, { encoding: 'utf8' });
});
if (data.error) {
throw data.error;
}
typescript_1.sys.useCaseSensitiveFileNames = true;
var config = typescript_1.parseJsonConfigFileContent(data.config, typescript_1.sys, path_1.dirname(path_1.resolve(filename)));
if (config.errors.length > 0) {
throw new Error(config.errors[0].messageText);
}
return config;
}
exports.readTsconfigFile = readTsconfigFile;
var ExecError = (function (_super) {
tslib_1.__extends(ExecError, _super);
function ExecError(command, code, stdout, stderr) {
var _this = _super.call(this, "Command \"" + command + "\" failed (" + code + ")") || this;
_this.name = 'ExecError';
_this.code = code;
_this.stdout = getText(stdout);
_this.stderr = getText(stderr);
return _this;
}
return ExecError;
}(Error));
exports.ExecError = ExecError;
function getText(text) {
text = text || '';
return text.replace(/^\s+/, '').replace(/\s+$/, '');
}
function removeComments(text) {
var state = 'default';
var i = 0;
var chars = text.split('');
while (i < chars.length) {
switch (state) {
case 'block-comment':
if (chars[i] === '*' && chars[i + 1] === '/') {
chars[i] = ' ';
chars[i + 1] = ' ';
state = 'default';
i += 2;
}
else if (chars[i] !== '\n') {
chars[i] = ' ';
i += 1;
}
else {
i += 1;
}
break;
case 'line-comment':
if (chars[i] === '\n') {
state = 'default';
}
else {
chars[i] = ' ';
}
i += 1;
break;
case 'string':
if (chars[i] === '"') {
state = 'default';
i += 1;
}
else if (chars[i] === '\\' && chars[i + 1] === '\\') {
i += 2;
}
else if (chars[i] === '\\' && chars[i + 1] === '"') {
i += 2;
}
else {
i += 1;
}
break;
default:
if (chars[i] === '"') {
state = 'string';
i += 1;
}
else if (chars[i] === '/' && chars[i + 1] === '*') {
chars[i] = ' ';
chars[i + 1] = ' ';
state = 'block-comment';
i += 2;
}
else if (chars[i] === '/' && chars[i + 1] === '/') {
chars[i] = ' ';
chars[i + 1] = ' ';
state = 'line-comment';
i += 2;
}
else {
i += 1;
}
}
}
return chars.join('');
}
//# sourceMappingURL=common.js.map