489 lines
12 KiB
JavaScript
489 lines
12 KiB
JavaScript
/*!
|
|
* @nuxt/cli v2.13.3 (c) 2016-2020
|
|
|
|
* - All the amazing contributors
|
|
* Released under the MIT License.
|
|
* Website: https://nuxtjs.org
|
|
*/
|
|
'use strict';
|
|
|
|
function _interopDefault (ex) { return (ex && (typeof ex === 'object') && 'default' in ex) ? ex['default'] : ex; }
|
|
|
|
const index = require('./cli-index.js');
|
|
require('path');
|
|
require('@nuxt/config');
|
|
require('exit');
|
|
require('@nuxt/utils');
|
|
require('chalk');
|
|
require('std-env');
|
|
require('wrap-ansi');
|
|
require('boxen');
|
|
const consola = _interopDefault(require('consola'));
|
|
require('minimist');
|
|
require('hable');
|
|
require('fs');
|
|
require('execa');
|
|
const util = _interopDefault(require('util'));
|
|
|
|
/** `Object#toString` result references. */
|
|
var symbolTag = '[object Symbol]';
|
|
|
|
/**
|
|
* Checks if `value` is classified as a `Symbol` primitive or object.
|
|
*
|
|
* @static
|
|
* @memberOf _
|
|
* @since 4.0.0
|
|
* @category Lang
|
|
* @param {*} value The value to check.
|
|
* @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
|
|
* @example
|
|
*
|
|
* _.isSymbol(Symbol.iterator);
|
|
* // => true
|
|
*
|
|
* _.isSymbol('abc');
|
|
* // => false
|
|
*/
|
|
function isSymbol(value) {
|
|
return typeof value == 'symbol' ||
|
|
(index.isObjectLike_1(value) && index._baseGetTag(value) == symbolTag);
|
|
}
|
|
|
|
var isSymbol_1 = isSymbol;
|
|
|
|
/** Used to match property names within property paths. */
|
|
var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
|
|
reIsPlainProp = /^\w*$/;
|
|
|
|
/**
|
|
* Checks if `value` is a property name and not a property path.
|
|
*
|
|
* @private
|
|
* @param {*} value The value to check.
|
|
* @param {Object} [object] The object to query keys on.
|
|
* @returns {boolean} Returns `true` if `value` is a property name, else `false`.
|
|
*/
|
|
function isKey(value, object) {
|
|
if (index.isArray_1(value)) {
|
|
return false;
|
|
}
|
|
var type = typeof value;
|
|
if (type == 'number' || type == 'symbol' || type == 'boolean' ||
|
|
value == null || isSymbol_1(value)) {
|
|
return true;
|
|
}
|
|
return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
|
|
(object != null && value in Object(object));
|
|
}
|
|
|
|
var _isKey = isKey;
|
|
|
|
/** Error message constants. */
|
|
var FUNC_ERROR_TEXT = 'Expected a function';
|
|
|
|
/**
|
|
* Creates a function that memoizes the result of `func`. If `resolver` is
|
|
* provided, it determines the cache key for storing the result based on the
|
|
* arguments provided to the memoized function. By default, the first argument
|
|
* provided to the memoized function is used as the map cache key. The `func`
|
|
* is invoked with the `this` binding of the memoized function.
|
|
*
|
|
* **Note:** The cache is exposed as the `cache` property on the memoized
|
|
* function. Its creation may be customized by replacing the `_.memoize.Cache`
|
|
* constructor with one whose instances implement the
|
|
* [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
|
|
* method interface of `clear`, `delete`, `get`, `has`, and `set`.
|
|
*
|
|
* @static
|
|
* @memberOf _
|
|
* @since 0.1.0
|
|
* @category Function
|
|
* @param {Function} func The function to have its output memoized.
|
|
* @param {Function} [resolver] The function to resolve the cache key.
|
|
* @returns {Function} Returns the new memoized function.
|
|
* @example
|
|
*
|
|
* var object = { 'a': 1, 'b': 2 };
|
|
* var other = { 'c': 3, 'd': 4 };
|
|
*
|
|
* var values = _.memoize(_.values);
|
|
* values(object);
|
|
* // => [1, 2]
|
|
*
|
|
* values(other);
|
|
* // => [3, 4]
|
|
*
|
|
* object.a = 2;
|
|
* values(object);
|
|
* // => [1, 2]
|
|
*
|
|
* // Modify the result cache.
|
|
* values.cache.set(object, ['a', 'b']);
|
|
* values(object);
|
|
* // => ['a', 'b']
|
|
*
|
|
* // Replace `_.memoize.Cache`.
|
|
* _.memoize.Cache = WeakMap;
|
|
*/
|
|
function memoize(func, resolver) {
|
|
if (typeof func != 'function' || (resolver != null && typeof resolver != 'function')) {
|
|
throw new TypeError(FUNC_ERROR_TEXT);
|
|
}
|
|
var memoized = function() {
|
|
var args = arguments,
|
|
key = resolver ? resolver.apply(this, args) : args[0],
|
|
cache = memoized.cache;
|
|
|
|
if (cache.has(key)) {
|
|
return cache.get(key);
|
|
}
|
|
var result = func.apply(this, args);
|
|
memoized.cache = cache.set(key, result) || cache;
|
|
return result;
|
|
};
|
|
memoized.cache = new (memoize.Cache || index._MapCache);
|
|
return memoized;
|
|
}
|
|
|
|
// Expose `MapCache`.
|
|
memoize.Cache = index._MapCache;
|
|
|
|
var memoize_1 = memoize;
|
|
|
|
/** Used as the maximum memoize cache size. */
|
|
var MAX_MEMOIZE_SIZE = 500;
|
|
|
|
/**
|
|
* A specialized version of `_.memoize` which clears the memoized function's
|
|
* cache when it exceeds `MAX_MEMOIZE_SIZE`.
|
|
*
|
|
* @private
|
|
* @param {Function} func The function to have its output memoized.
|
|
* @returns {Function} Returns the new memoized function.
|
|
*/
|
|
function memoizeCapped(func) {
|
|
var result = memoize_1(func, function(key) {
|
|
if (cache.size === MAX_MEMOIZE_SIZE) {
|
|
cache.clear();
|
|
}
|
|
return key;
|
|
});
|
|
|
|
var cache = result.cache;
|
|
return result;
|
|
}
|
|
|
|
var _memoizeCapped = memoizeCapped;
|
|
|
|
/** Used to match property names within property paths. */
|
|
var rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
|
|
|
|
/** Used to match backslashes in property paths. */
|
|
var reEscapeChar = /\\(\\)?/g;
|
|
|
|
/**
|
|
* Converts `string` to a property path array.
|
|
*
|
|
* @private
|
|
* @param {string} string The string to convert.
|
|
* @returns {Array} Returns the property path array.
|
|
*/
|
|
var stringToPath = _memoizeCapped(function(string) {
|
|
var result = [];
|
|
if (string.charCodeAt(0) === 46 /* . */) {
|
|
result.push('');
|
|
}
|
|
string.replace(rePropName, function(match, number, quote, subString) {
|
|
result.push(quote ? subString.replace(reEscapeChar, '$1') : (number || match));
|
|
});
|
|
return result;
|
|
});
|
|
|
|
var _stringToPath = stringToPath;
|
|
|
|
/**
|
|
* A specialized version of `_.map` for arrays without support for iteratee
|
|
* shorthands.
|
|
*
|
|
* @private
|
|
* @param {Array} [array] The array to iterate over.
|
|
* @param {Function} iteratee The function invoked per iteration.
|
|
* @returns {Array} Returns the new mapped array.
|
|
*/
|
|
function arrayMap(array, iteratee) {
|
|
var index = -1,
|
|
length = array == null ? 0 : array.length,
|
|
result = Array(length);
|
|
|
|
while (++index < length) {
|
|
result[index] = iteratee(array[index], index, array);
|
|
}
|
|
return result;
|
|
}
|
|
|
|
var _arrayMap = arrayMap;
|
|
|
|
/** Used as references for various `Number` constants. */
|
|
var INFINITY = 1 / 0;
|
|
|
|
/** Used to convert symbols to primitives and strings. */
|
|
var symbolProto = index._Symbol ? index._Symbol.prototype : undefined,
|
|
symbolToString = symbolProto ? symbolProto.toString : undefined;
|
|
|
|
/**
|
|
* The base implementation of `_.toString` which doesn't convert nullish
|
|
* values to empty strings.
|
|
*
|
|
* @private
|
|
* @param {*} value The value to process.
|
|
* @returns {string} Returns the string.
|
|
*/
|
|
function baseToString(value) {
|
|
// Exit early for strings to avoid a performance hit in some environments.
|
|
if (typeof value == 'string') {
|
|
return value;
|
|
}
|
|
if (index.isArray_1(value)) {
|
|
// Recursively convert values (susceptible to call stack limits).
|
|
return _arrayMap(value, baseToString) + '';
|
|
}
|
|
if (isSymbol_1(value)) {
|
|
return symbolToString ? symbolToString.call(value) : '';
|
|
}
|
|
var result = (value + '');
|
|
return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
|
|
}
|
|
|
|
var _baseToString = baseToString;
|
|
|
|
/**
|
|
* Converts `value` to a string. An empty string is returned for `null`
|
|
* and `undefined` values. The sign of `-0` is preserved.
|
|
*
|
|
* @static
|
|
* @memberOf _
|
|
* @since 4.0.0
|
|
* @category Lang
|
|
* @param {*} value The value to convert.
|
|
* @returns {string} Returns the converted string.
|
|
* @example
|
|
*
|
|
* _.toString(null);
|
|
* // => ''
|
|
*
|
|
* _.toString(-0);
|
|
* // => '-0'
|
|
*
|
|
* _.toString([1, 2, 3]);
|
|
* // => '1,2,3'
|
|
*/
|
|
function toString(value) {
|
|
return value == null ? '' : _baseToString(value);
|
|
}
|
|
|
|
var toString_1 = toString;
|
|
|
|
/**
|
|
* Casts `value` to a path array if it's not one.
|
|
*
|
|
* @private
|
|
* @param {*} value The value to inspect.
|
|
* @param {Object} [object] The object to query keys on.
|
|
* @returns {Array} Returns the cast property path array.
|
|
*/
|
|
function castPath(value, object) {
|
|
if (index.isArray_1(value)) {
|
|
return value;
|
|
}
|
|
return _isKey(value, object) ? [value] : _stringToPath(toString_1(value));
|
|
}
|
|
|
|
var _castPath = castPath;
|
|
|
|
/** Used as references for various `Number` constants. */
|
|
var INFINITY$1 = 1 / 0;
|
|
|
|
/**
|
|
* Converts `value` to a string key if it's not a string or symbol.
|
|
*
|
|
* @private
|
|
* @param {*} value The value to inspect.
|
|
* @returns {string|symbol} Returns the key.
|
|
*/
|
|
function toKey(value) {
|
|
if (typeof value == 'string' || isSymbol_1(value)) {
|
|
return value;
|
|
}
|
|
var result = (value + '');
|
|
return (result == '0' && (1 / value) == -INFINITY$1) ? '-0' : result;
|
|
}
|
|
|
|
var _toKey = toKey;
|
|
|
|
/**
|
|
* The base implementation of `_.get` without support for default values.
|
|
*
|
|
* @private
|
|
* @param {Object} object The object to query.
|
|
* @param {Array|string} path The path of the property to get.
|
|
* @returns {*} Returns the resolved value.
|
|
*/
|
|
function baseGet(object, path) {
|
|
path = _castPath(path, object);
|
|
|
|
var index = 0,
|
|
length = path.length;
|
|
|
|
while (object != null && index < length) {
|
|
object = object[_toKey(path[index++])];
|
|
}
|
|
return (index && index == length) ? object : undefined;
|
|
}
|
|
|
|
var _baseGet = baseGet;
|
|
|
|
/**
|
|
* Gets the value at `path` of `object`. If the resolved value is
|
|
* `undefined`, the `defaultValue` is returned in its place.
|
|
*
|
|
* @static
|
|
* @memberOf _
|
|
* @since 3.7.0
|
|
* @category Object
|
|
* @param {Object} object The object to query.
|
|
* @param {Array|string} path The path of the property to get.
|
|
* @param {*} [defaultValue] The value returned for `undefined` resolved values.
|
|
* @returns {*} Returns the resolved value.
|
|
* @example
|
|
*
|
|
* var object = { 'a': [{ 'b': { 'c': 3 } }] };
|
|
*
|
|
* _.get(object, 'a[0].b.c');
|
|
* // => 3
|
|
*
|
|
* _.get(object, ['a', '0', 'b', 'c']);
|
|
* // => 3
|
|
*
|
|
* _.get(object, 'a.b.c', 'default');
|
|
* // => 'default'
|
|
*/
|
|
function get(object, path, defaultValue) {
|
|
var result = object == null ? undefined : _baseGet(object, path);
|
|
return result === undefined ? defaultValue : result;
|
|
}
|
|
|
|
var get_1 = get;
|
|
|
|
const webpack = {
|
|
name: 'webpack',
|
|
description: 'Inspect Nuxt webpack config',
|
|
usage: 'webpack [query...]',
|
|
options: {
|
|
...index.common,
|
|
name: {
|
|
alias: 'n',
|
|
type: 'string',
|
|
default: 'client',
|
|
description: 'Webpack bundle name: server, client, modern'
|
|
},
|
|
depth: {
|
|
alias: 'd',
|
|
type: 'string',
|
|
default: 2,
|
|
description: 'Inspection depth'
|
|
},
|
|
colors: {
|
|
type: 'boolean',
|
|
default: process.stdout.isTTY,
|
|
description: 'Output with ANSI colors'
|
|
},
|
|
dev: {
|
|
type: 'boolean',
|
|
default: false,
|
|
description: 'Inspect development mode webpack config'
|
|
}
|
|
},
|
|
async run (cmd) {
|
|
const { name } = cmd.argv;
|
|
const queries = [...cmd.argv._];
|
|
|
|
const config = await cmd.getNuxtConfig({ dev: cmd.argv.dev, server: false });
|
|
const nuxt = await cmd.getNuxt(config);
|
|
const builder = await cmd.getBuilder(nuxt);
|
|
const { bundleBuilder } = builder;
|
|
const webpackConfig = bundleBuilder.getWebpackConfig(name);
|
|
|
|
let queryError;
|
|
const match = queries.reduce((result, query) => {
|
|
const m = advancedGet(result, query);
|
|
if (m === undefined) {
|
|
queryError = query;
|
|
return result
|
|
}
|
|
return m
|
|
}, webpackConfig);
|
|
|
|
const serialized = formatObj(match, {
|
|
depth: parseInt(cmd.argv.depth),
|
|
colors: cmd.argv.colors
|
|
});
|
|
|
|
consola.log(serialized + '\n');
|
|
|
|
if (serialized.includes('[Object]' )) {
|
|
consola.info('You can use `--depth` or add more queries to inspect `[Object]` and `[Array]` fields.');
|
|
}
|
|
|
|
if (queryError) {
|
|
consola.warn(`No match in webpack config for \`${queryError}\``);
|
|
}
|
|
}
|
|
};
|
|
|
|
function advancedGet (obj = {}, query = '') {
|
|
let result = obj;
|
|
|
|
if (!query || !result) {
|
|
return result
|
|
}
|
|
|
|
const [l, r] = query.split('=');
|
|
|
|
if (!Array.isArray(result)) {
|
|
return typeof result === 'object' ? get_1(result, l) : result
|
|
}
|
|
|
|
result = result.filter((i) => {
|
|
const v = get_1(i, l);
|
|
|
|
if (!v) {
|
|
return
|
|
}
|
|
|
|
if (
|
|
(v === r) ||
|
|
(typeof v.test === 'function' && v.test(r)) ||
|
|
(typeof v.match === 'function' && v.match(r)) ||
|
|
(r && r.match(v))
|
|
) {
|
|
return true
|
|
}
|
|
});
|
|
|
|
if (result.length === 1) {
|
|
return result[0]
|
|
}
|
|
|
|
return result.length ? result : undefined
|
|
}
|
|
|
|
function formatObj (obj, formatOptions) {
|
|
if (!util.formatWithOptions) {
|
|
return util.format(obj)
|
|
}
|
|
return util.formatWithOptions(formatOptions, obj)
|
|
}
|
|
|
|
exports.default = webpack;
|