| 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;
|
|
|