UNPKG

ut-tools

Version:

Build and Release management automation package.

118 lines (109 loc) 3.32 kB
'use strict'; const { VMError } = require('./bridge'); /** * Returns the cached coffee script compiler or loads it * if it is not found in the cache. * * @private * @param {Object} [options] - Optional compiler options. * @return {compileCallback} The coffee script compiler. * @throws {VMError} If the coffee-script module can't be found. */ function getCoffeeScriptCompiler(options) { try { // The warning generated by webpack can be disabled by setting: // ignoreWarnings[].message = /Can't resolve 'coffee-script'/ /* eslint-disable-next-line global-require */ const coffeeScript = require('coffee-script'); return (code, filename) => { return coffeeScript.compile(code, Object.assign({header: false, bare: true}, options)); }; } catch (e) { throw new VMError('Coffee-Script compiler is not installed.'); } } /** * Returns the cached TypeScript compiler or loads it * if it is not found in the cache. * * @private * @param {Object} [options] - Optional compiler options. * @return {compileCallback} The TypeScript compiler. * @throws {VMError} If the TypeScript module can't be found. */ function getTypeScriptCompiler(options) { try { // The warning generated by webpack can be disabled by setting: // ignoreWarnings[].message = /Can't resolve 'typescript'/ /* eslint-disable-next-line global-require */ const typescript = require('typescript'); return (code, filename) => { return typescript.transpileModule(code, { fileName: filename, compilerOptions: Object.assign({ module: typescript.ModuleKind.CommonJS, }, options) }).outputText; }; } catch (e) { throw new VMError('TypeScript compiler is not installed.'); } } /** * Remove the shebang from source code. * * @private * @param {string} code - Code from which to remove the shebang. * @return {string} code without the shebang. */ function removeShebang(code) { if (!code.startsWith('#!')) return code; return '//' + code.substring(2); } /** * The JavaScript compiler, just a identity function. * * @private * @type {compileCallback} * @param {string} code - The JavaScript code. * @param {string} filename - Filename of this script. * @return {string} The code. */ function jsCompiler(code, filename) { return removeShebang(code); } /** * Look up the compiler for a specific name. * * @private * @param {(string|compileCallback)} compiler - A compile callback or the name of the compiler. * @param {Object} [options] - Optional compiler options. * @return {compileCallback} The resolved compiler. * @throws {VMError} If the compiler is unknown or the coffee script module was needed and couldn't be found. */ function lookupCompiler(compiler, options) { if ('function' === typeof compiler) return compiler; switch (compiler) { case 'coffeescript': case 'coffee-script': case 'cs': case 'text/coffeescript': return getCoffeeScriptCompiler(options); case 'javascript': case 'java-script': case 'js': case 'text/javascript': return jsCompiler; case 'typescript': case 'type-script': case 'ts': case 'text/typescript': return getTypeScriptCompiler(options); default: throw new VMError(`Unsupported compiler '${compiler}'.`); } } exports.removeShebang = removeShebang; exports.lookupCompiler = lookupCompiler;