Index: node_modules/vulcanize/lib/optparser.js |
diff --git a/node_modules/vulcanize/lib/optparser.js b/node_modules/vulcanize/lib/optparser.js |
new file mode 100644 |
index 0000000000000000000000000000000000000000..99502d555354144ecaad0b4a02f08c0e0a2c47d3 |
--- /dev/null |
+++ b/node_modules/vulcanize/lib/optparser.js |
@@ -0,0 +1,104 @@ |
+/** |
+ * @license |
+ * Copyright (c) 2014 The Polymer Project Authors. All rights reserved. |
+ * This code may only be used under the BSD style license found at http://polymer.github.io/LICENSE.txt |
+ * The complete set of authors may be found at http://polymer.github.io/AUTHORS.txt |
+ * The complete set of contributors may be found at http://polymer.github.io/CONTRIBUTORS.txt |
+ * Code distributed by Google as part of the polymer project is also |
+ * subject to an additional IP rights grant found at http://polymer.github.io/PATENTS.txt |
+ */ |
+ |
+var fs = require('fs'); |
+var path = require('path'); |
+ |
+var CONSTANTS = require('./constants.js'); |
+var ABS_URL = CONSTANTS.ABS_URL; |
+var REMOTE_ABS_URL = CONSTANTS.REMOTE_ABS_URL; |
+var DEFAULT = 'vulcanized.html'; |
+ |
+// validate options with boolean return |
+function processOptions(options, callback) { |
+ var config = {}; |
+ var excludes = { |
+ imports: [], |
+ scripts: [], |
+ styles: [] |
+ }; |
+ |
+ options = options || Object.create(null); |
+ |
+ if (options.config) { |
+ var configBlob; |
+ try { |
+ // TODO(dfreedm): Make this async |
+ configBlob = fs.readFileSync(options.config, 'utf8'); |
+ } catch(e) { |
+ return callback('Config file not found!'); |
+ } |
+ try { |
+ config = JSON.parse(configBlob); |
+ } catch(e) { |
+ return callback('Malformed config JSON!'); |
+ } |
+ } |
+ |
+ options.input = options.input || config.input; |
+ if (!options.input && !options.inputSrc) { |
+ return callback('No input file or source string given!'); |
+ } |
+ |
+ options.excludes = options.excludes || config.excludes; |
+ if (options.excludes) { |
+ var e = options.excludes; |
+ try { |
+ if (e.imports) { |
+ e.imports.forEach(function(r) { |
+ excludes.imports.push(new RegExp(r)); |
+ }); |
+ } |
+ if (e.scripts) { |
+ e.scripts.forEach(function(r) { |
+ excludes.scripts.push(new RegExp(r)); |
+ }); |
+ } |
+ if (e.styles) { |
+ e.styles.forEach(function(r) { |
+ excludes.styles.push(new RegExp(r)); |
+ }); |
+ } |
+ } catch(_) { |
+ return callback('Malformed import exclude config'); |
+ } |
+ } |
+ |
+ options.output = options.output || config.output; |
+ if (!options.output) { |
+ options.output = path.resolve(path.dirname(options.input), DEFAULT); |
+ } |
+ options.outputDir = path.dirname(options.output); |
+ |
+ options.csp = options.csp || config.csp; |
+ if (options.csp) { |
+ options.csp = options.output.replace(/\.html$/, '.js'); |
+ } |
+ |
+ options.abspath = options.abspath || config.abspath; |
+ if (options.abspath) { |
+ options.abspath = path.resolve(options.abspath); |
+ excludes.imports.push(REMOTE_ABS_URL); |
+ excludes.scripts.push(REMOTE_ABS_URL); |
+ excludes.styles.push(REMOTE_ABS_URL); |
+ } else { |
+ excludes.imports.push(ABS_URL); |
+ excludes.scripts.push(ABS_URL); |
+ excludes.styles.push(ABS_URL); |
+ } |
+ |
+ options.excludes = excludes; |
+ |
+ options.keepExcludes = options['strip-excludes'] === false || config['strip-excludes'] === false; |
+ |
+ callback(null, options); |
+} |
+ |
+exports.processOptions = processOptions; |