UNPKG

google-closure-compiler

Version:

Check, compile, optimize and compress Javascript with Closure-Compiler

85 lines (76 loc) 2.81 kB
#!/usr/bin/env node /* * Copyright 2018 The Closure Compiler Authors. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ import Compiler from './lib/node/index.js'; import {getNativeImagePath, getFirstSupportedPlatform} from './lib/utils.js'; import parseArgs from 'minimist'; const compilerFlags = parseArgs(process.argv.slice(2)); // The platform flag is only used by this cli script - it is not natively supported by any compiler version. // If it exists, use the value, but then delete it so that it's not actually passed to the compiler. let platform; if (compilerFlags.hasOwnProperty('platform')) { platform = getFirstSupportedPlatform(compilerFlags.platform.split(',')); delete compilerFlags.platform; } else { platform = getFirstSupportedPlatform(['native', 'java']); } // The compiler treats default arguments as if they were --js args. // Minimist parses default arguments and puts them under the '_' key. // Move the '_' key to the 'js' key. if (compilerFlags.hasOwnProperty('_') && compilerFlags['_'].length > 0) { let existingJsFlags = []; if (compilerFlags.js) { if (Array.isArray(compilerFlags.js)) { existingJsFlags = compilerFlags.js; } else { existingJsFlags = [compilerFlags.js]; } } compilerFlags.js = existingJsFlags.concat(compilerFlags['_']); delete compilerFlags['_']; } else { delete compilerFlags['_']; } // Boolean arguments can in some cases be parsed as strings. // Since its highly unlikely that an argument actually needs to be the strings 'true' or 'false', // convert them to true booleans. Object.keys(compilerFlags).forEach((flag) => { if (compilerFlags[flag] === 'true') { compilerFlags[flag] = true; } else if (compilerFlags[flag] === 'false') { compilerFlags[flag] = false; } }); let args = process.argv.slice(2); for (let i = 0; i < args.length; i++) { if (/^--platform/.test(args[i])) { let delCount = 1; if (args[i].indexOf('=') < 0 && args.length > i + 1) { delCount++; } args.splice(i, delCount); break; } } const compiler = new Compiler(args); compiler.spawnOptions = {stdio: 'inherit'}; if (platform === 'native') { compiler.JAR_PATH = null; compiler.javaPath = getNativeImagePath(); } compiler.run((exitCode) => { process.exitCode = exitCode; });