UNPKG

@theintern/dev

Version:

Development support scripts for Intern projects.

217 lines 7.3 kB
"use strict"; 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