' + func(text) + '
'; - * }); - * - * p('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles
' - */ - function wrap(value, wrapper) { - return partial(castFunction(wrapper), value); - } - - /*------------------------------------------------------------------------*/ - - /** - * Casts `value` as an array if it's not one. - * - * @static - * @memberOf _ - * @since 4.4.0 - * @category Lang - * @param {*} value The value to inspect. - * @returns {Array} Returns the cast array. - * @example - * - * _.castArray(1); - * // => [1] - * - * _.castArray({ 'a': 1 }); - * // => [{ 'a': 1 }] - * - * _.castArray('abc'); - * // => ['abc'] - * - * _.castArray(null); - * // => [null] - * - * _.castArray(undefined); - * // => [undefined] - * - * _.castArray(); - * // => [] - * - * var array = [1, 2, 3]; - * console.log(_.castArray(array) === array); - * // => true - */ - function castArray() { - if (!arguments.length) { - return []; - } - var value = arguments[0]; - return isArray(value) ? value : [value]; - } - - /** - * Creates a shallow clone of `value`. - * - * **Note:** This method is loosely based on the - * [structured clone algorithm](https://mdn.io/Structured_clone_algorithm) - * and supports cloning arrays, array buffers, booleans, date objects, maps, - * numbers, `Object` objects, regexes, sets, strings, symbols, and typed - * arrays. The own enumerable properties of `arguments` objects are cloned - * as plain objects. An empty object is returned for uncloneable values such - * as error objects, functions, DOM nodes, and WeakMaps. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to clone. - * @returns {*} Returns the cloned value. - * @see _.cloneDeep - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var shallow = _.clone(objects); - * console.log(shallow[0] === objects[0]); - * // => true - */ - function clone(value) { - return baseClone(value, CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.clone` except that it accepts `customizer` which - * is invoked to produce the cloned value. If `customizer` returns `undefined`, - * cloning is handled by the method instead. The `customizer` is invoked with - * up to four arguments; (value [, index|key, object, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the cloned value. - * @see _.cloneDeepWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(false); - * } - * } - * - * var el = _.cloneWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 0 - */ - function cloneWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * This method is like `_.clone` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @returns {*} Returns the deep cloned value. - * @see _.clone - * @example - * - * var objects = [{ 'a': 1 }, { 'b': 2 }]; - * - * var deep = _.cloneDeep(objects); - * console.log(deep[0] === objects[0]); - * // => false - */ - function cloneDeep(value) { - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG); - } - - /** - * This method is like `_.cloneWith` except that it recursively clones `value`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to recursively clone. - * @param {Function} [customizer] The function to customize cloning. - * @returns {*} Returns the deep cloned value. - * @see _.cloneWith - * @example - * - * function customizer(value) { - * if (_.isElement(value)) { - * return value.cloneNode(true); - * } - * } - * - * var el = _.cloneDeepWith(document.body, customizer); - * - * console.log(el === document.body); - * // => false - * console.log(el.nodeName); - * // => 'BODY' - * console.log(el.childNodes.length); - * // => 20 - */ - function cloneDeepWith(value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG, customizer); - } - - /** - * Checks if `object` conforms to `source` by invoking the predicate - * properties of `source` with the corresponding property values of `object`. - * - * **Note:** This method is equivalent to `_.conforms` when `source` is - * partially applied. - * - * @static - * @memberOf _ - * @since 4.14.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property predicates to conform to. - * @returns {boolean} Returns `true` if `object` conforms, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.conformsTo(object, { 'b': function(n) { return n > 1; } }); - * // => true - * - * _.conformsTo(object, { 'b': function(n) { return n > 2; } }); - * // => false - */ - function conformsTo(object, source) { - return source == null || baseConformsTo(object, source, keys(source)); - } - - /** - * Performs a - * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero) - * comparison between two values to determine if they are equivalent. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.eq(object, object); - * // => true - * - * _.eq(object, other); - * // => false - * - * _.eq('a', 'a'); - * // => true - * - * _.eq('a', Object('a')); - * // => false - * - * _.eq(NaN, NaN); - * // => true - */ - function eq(value, other) { - return value === other || (value !== value && other !== other); - } - - /** - * Checks if `value` is greater than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than `other`, - * else `false`. - * @see _.lt - * @example - * - * _.gt(3, 1); - * // => true - * - * _.gt(3, 3); - * // => false - * - * _.gt(1, 3); - * // => false - */ - var gt = createRelationalOperation(baseGt); - - /** - * Checks if `value` is greater than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is greater than or equal to - * `other`, else `false`. - * @see _.lte - * @example - * - * _.gte(3, 1); - * // => true - * - * _.gte(3, 3); - * // => true - * - * _.gte(1, 3); - * // => false - */ - var gte = createRelationalOperation(function(value, other) { - return value >= other; - }); - - /** - * Checks if `value` is likely an `arguments` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an `arguments` object, - * else `false`. - * @example - * - * _.isArguments(function() { return arguments; }()); - * // => true - * - * _.isArguments([1, 2, 3]); - * // => false - */ - var isArguments = baseIsArguments(function() { return arguments; }()) ? baseIsArguments : function(value) { - return isObjectLike(value) && hasOwnProperty.call(value, 'callee') && - !propertyIsEnumerable.call(value, 'callee'); - }; - - /** - * Checks if `value` is classified as an `Array` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array, else `false`. - * @example - * - * _.isArray([1, 2, 3]); - * // => true - * - * _.isArray(document.body.children); - * // => false - * - * _.isArray('abc'); - * // => false - * - * _.isArray(_.noop); - * // => false - */ - var isArray = Array.isArray; - - /** - * Checks if `value` is classified as an `ArrayBuffer` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array buffer, else `false`. - * @example - * - * _.isArrayBuffer(new ArrayBuffer(2)); - * // => true - * - * _.isArrayBuffer(new Array(2)); - * // => false - */ - var isArrayBuffer = nodeIsArrayBuffer ? baseUnary(nodeIsArrayBuffer) : baseIsArrayBuffer; - - /** - * Checks if `value` is array-like. A value is considered array-like if it's - * not a function and has a `value.length` that's an integer greater than or - * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is array-like, else `false`. - * @example - * - * _.isArrayLike([1, 2, 3]); - * // => true - * - * _.isArrayLike(document.body.children); - * // => true - * - * _.isArrayLike('abc'); - * // => true - * - * _.isArrayLike(_.noop); - * // => false - */ - function isArrayLike(value) { - return value != null && isLength(value.length) && !isFunction(value); - } - - /** - * This method is like `_.isArrayLike` except that it also checks if `value` - * is an object. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an array-like object, - * else `false`. - * @example - * - * _.isArrayLikeObject([1, 2, 3]); - * // => true - * - * _.isArrayLikeObject(document.body.children); - * // => true - * - * _.isArrayLikeObject('abc'); - * // => false - * - * _.isArrayLikeObject(_.noop); - * // => false - */ - function isArrayLikeObject(value) { - return isObjectLike(value) && isArrayLike(value); - } - - /** - * Checks if `value` is classified as a boolean primitive or object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a boolean, else `false`. - * @example - * - * _.isBoolean(false); - * // => true - * - * _.isBoolean(null); - * // => false - */ - function isBoolean(value) { - return value === true || value === false || - (isObjectLike(value) && baseGetTag(value) == boolTag); - } - - /** - * Checks if `value` is a buffer. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a buffer, else `false`. - * @example - * - * _.isBuffer(new Buffer(2)); - * // => true - * - * _.isBuffer(new Uint8Array(2)); - * // => false - */ - var isBuffer = nativeIsBuffer || stubFalse; - - /** - * Checks if `value` is classified as a `Date` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a date object, else `false`. - * @example - * - * _.isDate(new Date); - * // => true - * - * _.isDate('Mon April 23 2012'); - * // => false - */ - var isDate = nodeIsDate ? baseUnary(nodeIsDate) : baseIsDate; - - /** - * Checks if `value` is likely a DOM element. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a DOM element, else `false`. - * @example - * - * _.isElement(document.body); - * // => true - * - * _.isElement(''); - * // => false - */ - function isElement(value) { - return isObjectLike(value) && value.nodeType === 1 && !isPlainObject(value); - } - - /** - * Checks if `value` is an empty object, collection, map, or set. - * - * Objects are considered empty if they have no own enumerable string keyed - * properties. - * - * Array-like values such as `arguments` objects, arrays, buffers, strings, or - * jQuery-like collections are considered empty if they have a `length` of `0`. - * Similarly, maps and sets are considered empty if they have a `size` of `0`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is empty, else `false`. - * @example - * - * _.isEmpty(null); - * // => true - * - * _.isEmpty(true); - * // => true - * - * _.isEmpty(1); - * // => true - * - * _.isEmpty([1, 2, 3]); - * // => false - * - * _.isEmpty({ 'a': 1 }); - * // => false - */ - function isEmpty(value) { - if (value == null) { - return true; - } - if (isArrayLike(value) && - (isArray(value) || typeof value == 'string' || typeof value.splice == 'function' || - isBuffer(value) || isTypedArray(value) || isArguments(value))) { - return !value.length; - } - var tag = getTag(value); - if (tag == mapTag || tag == setTag) { - return !value.size; - } - if (isPrototype(value)) { - return !baseKeys(value).length; - } - for (var key in value) { - if (hasOwnProperty.call(value, key)) { - return false; - } - } - return true; - } - - /** - * Performs a deep comparison between two values to determine if they are - * equivalent. - * - * **Note:** This method supports comparing arrays, array buffers, booleans, - * date objects, error objects, maps, numbers, `Object` objects, regexes, - * sets, strings, symbols, and typed arrays. `Object` objects are compared - * by their own, not inherited, enumerable properties. Functions and DOM - * nodes are compared by strict equality, i.e. `===`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * var object = { 'a': 1 }; - * var other = { 'a': 1 }; - * - * _.isEqual(object, other); - * // => true - * - * object === other; - * // => false - */ - function isEqual(value, other) { - return baseIsEqual(value, other); - } - - /** - * This method is like `_.isEqual` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with up to - * six arguments: (objValue, othValue [, index|key, object, other, stack]). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if the values are equivalent, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, othValue) { - * if (isGreeting(objValue) && isGreeting(othValue)) { - * return true; - * } - * } - * - * var array = ['hello', 'goodbye']; - * var other = ['hi', 'goodbye']; - * - * _.isEqualWith(array, other, customizer); - * // => true - */ - function isEqualWith(value, other, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - var result = customizer ? customizer(value, other) : undefined; - return result === undefined ? baseIsEqual(value, other, undefined, customizer) : !!result; - } - - /** - * Checks if `value` is an `Error`, `EvalError`, `RangeError`, `ReferenceError`, - * `SyntaxError`, `TypeError`, or `URIError` object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an error object, else `false`. - * @example - * - * _.isError(new Error); - * // => true - * - * _.isError(Error); - * // => false - */ - function isError(value) { - if (!isObjectLike(value)) { - return false; - } - var tag = baseGetTag(value); - return tag == errorTag || tag == domExcTag || - (typeof value.message == 'string' && typeof value.name == 'string' && !isPlainObject(value)); - } - - /** - * Checks if `value` is a finite primitive number. - * - * **Note:** This method is based on - * [`Number.isFinite`](https://mdn.io/Number/isFinite). - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a finite number, else `false`. - * @example - * - * _.isFinite(3); - * // => true - * - * _.isFinite(Number.MIN_VALUE); - * // => true - * - * _.isFinite(Infinity); - * // => false - * - * _.isFinite('3'); - * // => false - */ - function isFinite(value) { - return typeof value == 'number' && nativeIsFinite(value); - } - - /** - * Checks if `value` is classified as a `Function` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a function, else `false`. - * @example - * - * _.isFunction(_); - * // => true - * - * _.isFunction(/abc/); - * // => false - */ - function isFunction(value) { - if (!isObject(value)) { - return false; - } - // The use of `Object#toString` avoids issues with the `typeof` operator - // in Safari 9 which returns 'object' for typed arrays and other constructors. - var tag = baseGetTag(value); - return tag == funcTag || tag == genTag || tag == asyncTag || tag == proxyTag; - } - - /** - * Checks if `value` is an integer. - * - * **Note:** This method is based on - * [`Number.isInteger`](https://mdn.io/Number/isInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an integer, else `false`. - * @example - * - * _.isInteger(3); - * // => true - * - * _.isInteger(Number.MIN_VALUE); - * // => false - * - * _.isInteger(Infinity); - * // => false - * - * _.isInteger('3'); - * // => false - */ - function isInteger(value) { - return typeof value == 'number' && value == toInteger(value); - } - - /** - * Checks if `value` is a valid array-like length. - * - * **Note:** This method is loosely based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a valid length, else `false`. - * @example - * - * _.isLength(3); - * // => true - * - * _.isLength(Number.MIN_VALUE); - * // => false - * - * _.isLength(Infinity); - * // => false - * - * _.isLength('3'); - * // => false - */ - function isLength(value) { - return typeof value == 'number' && - value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is the - * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types) - * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`) - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is an object, else `false`. - * @example - * - * _.isObject({}); - * // => true - * - * _.isObject([1, 2, 3]); - * // => true - * - * _.isObject(_.noop); - * // => true - * - * _.isObject(null); - * // => false - */ - function isObject(value) { - var type = typeof value; - return value != null && (type == 'object' || type == 'function'); - } - - /** - * Checks if `value` is object-like. A value is object-like if it's not `null` - * and has a `typeof` result of "object". - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is object-like, else `false`. - * @example - * - * _.isObjectLike({}); - * // => true - * - * _.isObjectLike([1, 2, 3]); - * // => true - * - * _.isObjectLike(_.noop); - * // => false - * - * _.isObjectLike(null); - * // => false - */ - function isObjectLike(value) { - return value != null && typeof value == 'object'; - } - - /** - * Checks if `value` is classified as a `Map` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a map, else `false`. - * @example - * - * _.isMap(new Map); - * // => true - * - * _.isMap(new WeakMap); - * // => false - */ - var isMap = nodeIsMap ? baseUnary(nodeIsMap) : baseIsMap; - - /** - * Performs a partial deep comparison between `object` and `source` to - * determine if `object` contains equivalent property values. - * - * **Note:** This method is equivalent to `_.matches` when `source` is - * partially applied. - * - * Partial comparisons will match empty array and empty object `source` - * values against any array or object value, respectively. See `_.isEqual` - * for a list of supported value comparisons. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * var object = { 'a': 1, 'b': 2 }; - * - * _.isMatch(object, { 'b': 2 }); - * // => true - * - * _.isMatch(object, { 'b': 1 }); - * // => false - */ - function isMatch(object, source) { - return object === source || baseIsMatch(object, source, getMatchData(source)); - } - - /** - * This method is like `_.isMatch` except that it accepts `customizer` which - * is invoked to compare values. If `customizer` returns `undefined`, comparisons - * are handled by the method instead. The `customizer` is invoked with five - * arguments: (objValue, srcValue, index|key, object, source). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {Object} object The object to inspect. - * @param {Object} source The object of property values to match. - * @param {Function} [customizer] The function to customize comparisons. - * @returns {boolean} Returns `true` if `object` is a match, else `false`. - * @example - * - * function isGreeting(value) { - * return /^h(?:i|ello)$/.test(value); - * } - * - * function customizer(objValue, srcValue) { - * if (isGreeting(objValue) && isGreeting(srcValue)) { - * return true; - * } - * } - * - * var object = { 'greeting': 'hello' }; - * var source = { 'greeting': 'hi' }; - * - * _.isMatchWith(object, source, customizer); - * // => true - */ - function isMatchWith(object, source, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return baseIsMatch(object, source, getMatchData(source), customizer); - } - - /** - * Checks if `value` is `NaN`. - * - * **Note:** This method is based on - * [`Number.isNaN`](https://mdn.io/Number/isNaN) and is not the same as - * global [`isNaN`](https://mdn.io/isNaN) which returns `true` for - * `undefined` and other non-number values. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`. - * @example - * - * _.isNaN(NaN); - * // => true - * - * _.isNaN(new Number(NaN)); - * // => true - * - * isNaN(undefined); - * // => true - * - * _.isNaN(undefined); - * // => false - */ - function isNaN(value) { - // An `NaN` primitive is the only value that is not equal to itself. - // Perform the `toStringTag` check first to avoid errors with some - // ActiveX objects in IE. - return isNumber(value) && value != +value; - } - - /** - * Checks if `value` is a pristine native function. - * - * **Note:** This method can't reliably detect native functions in the presence - * of the core-js package because core-js circumvents this kind of detection. - * Despite multiple requests, the core-js maintainer has made it clear: any - * attempt to fix the detection will be obstructed. As a result, we're left - * with little choice but to throw an error. Unfortunately, this also affects - * packages, like [babel-polyfill](https://www.npmjs.com/package/babel-polyfill), - * which rely on core-js. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a native function, - * else `false`. - * @example - * - * _.isNative(Array.prototype.push); - * // => true - * - * _.isNative(_); - * // => false - */ - function isNative(value) { - if (isMaskable(value)) { - throw new Error(CORE_ERROR_TEXT); - } - return baseIsNative(value); - } - - /** - * Checks if `value` is `null`. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `null`, else `false`. - * @example - * - * _.isNull(null); - * // => true - * - * _.isNull(void 0); - * // => false - */ - function isNull(value) { - return value === null; - } - - /** - * Checks if `value` is `null` or `undefined`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is nullish, else `false`. - * @example - * - * _.isNil(null); - * // => true - * - * _.isNil(void 0); - * // => true - * - * _.isNil(NaN); - * // => false - */ - function isNil(value) { - return value == null; - } - - /** - * Checks if `value` is classified as a `Number` primitive or object. - * - * **Note:** To exclude `Infinity`, `-Infinity`, and `NaN`, which are - * classified as numbers, use the `_.isFinite` method. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a number, else `false`. - * @example - * - * _.isNumber(3); - * // => true - * - * _.isNumber(Number.MIN_VALUE); - * // => true - * - * _.isNumber(Infinity); - * // => true - * - * _.isNumber('3'); - * // => false - */ - function isNumber(value) { - return typeof value == 'number' || - (isObjectLike(value) && baseGetTag(value) == numberTag); - } - - /** - * Checks if `value` is a plain object, that is, an object created by the - * `Object` constructor or one with a `[[Prototype]]` of `null`. - * - * @static - * @memberOf _ - * @since 0.8.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a plain object, else `false`. - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * _.isPlainObject(new Foo); - * // => false - * - * _.isPlainObject([1, 2, 3]); - * // => false - * - * _.isPlainObject({ 'x': 0, 'y': 0 }); - * // => true - * - * _.isPlainObject(Object.create(null)); - * // => true - */ - function isPlainObject(value) { - if (!isObjectLike(value) || baseGetTag(value) != objectTag) { - return false; - } - var proto = getPrototype(value); - if (proto === null) { - return true; - } - var Ctor = hasOwnProperty.call(proto, 'constructor') && proto.constructor; - return typeof Ctor == 'function' && Ctor instanceof Ctor && - funcToString.call(Ctor) == objectCtorString; - } - - /** - * Checks if `value` is classified as a `RegExp` object. - * - * @static - * @memberOf _ - * @since 0.1.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a regexp, else `false`. - * @example - * - * _.isRegExp(/abc/); - * // => true - * - * _.isRegExp('/abc/'); - * // => false - */ - var isRegExp = nodeIsRegExp ? baseUnary(nodeIsRegExp) : baseIsRegExp; - - /** - * Checks if `value` is a safe integer. An integer is safe if it's an IEEE-754 - * double precision number which isn't the result of a rounded unsafe integer. - * - * **Note:** This method is based on - * [`Number.isSafeInteger`](https://mdn.io/Number/isSafeInteger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a safe integer, else `false`. - * @example - * - * _.isSafeInteger(3); - * // => true - * - * _.isSafeInteger(Number.MIN_VALUE); - * // => false - * - * _.isSafeInteger(Infinity); - * // => false - * - * _.isSafeInteger('3'); - * // => false - */ - function isSafeInteger(value) { - return isInteger(value) && value >= -MAX_SAFE_INTEGER && value <= MAX_SAFE_INTEGER; - } - - /** - * Checks if `value` is classified as a `Set` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a set, else `false`. - * @example - * - * _.isSet(new Set); - * // => true - * - * _.isSet(new WeakSet); - * // => false - */ - var isSet = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet; - - /** - * Checks if `value` is classified as a `String` primitive or object. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a string, else `false`. - * @example - * - * _.isString('abc'); - * // => true - * - * _.isString(1); - * // => false - */ - function isString(value) { - return typeof value == 'string' || - (!isArray(value) && isObjectLike(value) && baseGetTag(value) == stringTag); - } - - /** - * 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' || - (isObjectLike(value) && baseGetTag(value) == symbolTag); - } - - /** - * Checks if `value` is classified as a typed array. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a typed array, else `false`. - * @example - * - * _.isTypedArray(new Uint8Array); - * // => true - * - * _.isTypedArray([]); - * // => false - */ - var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray; - - /** - * Checks if `value` is `undefined`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is `undefined`, else `false`. - * @example - * - * _.isUndefined(void 0); - * // => true - * - * _.isUndefined(null); - * // => false - */ - function isUndefined(value) { - return value === undefined; - } - - /** - * Checks if `value` is classified as a `WeakMap` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak map, else `false`. - * @example - * - * _.isWeakMap(new WeakMap); - * // => true - * - * _.isWeakMap(new Map); - * // => false - */ - function isWeakMap(value) { - return isObjectLike(value) && getTag(value) == weakMapTag; - } - - /** - * Checks if `value` is classified as a `WeakSet` object. - * - * @static - * @memberOf _ - * @since 4.3.0 - * @category Lang - * @param {*} value The value to check. - * @returns {boolean} Returns `true` if `value` is a weak set, else `false`. - * @example - * - * _.isWeakSet(new WeakSet); - * // => true - * - * _.isWeakSet(new Set); - * // => false - */ - function isWeakSet(value) { - return isObjectLike(value) && baseGetTag(value) == weakSetTag; - } - - /** - * Checks if `value` is less than `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than `other`, - * else `false`. - * @see _.gt - * @example - * - * _.lt(1, 3); - * // => true - * - * _.lt(3, 3); - * // => false - * - * _.lt(3, 1); - * // => false - */ - var lt = createRelationalOperation(baseLt); - - /** - * Checks if `value` is less than or equal to `other`. - * - * @static - * @memberOf _ - * @since 3.9.0 - * @category Lang - * @param {*} value The value to compare. - * @param {*} other The other value to compare. - * @returns {boolean} Returns `true` if `value` is less than or equal to - * `other`, else `false`. - * @see _.gte - * @example - * - * _.lte(1, 3); - * // => true - * - * _.lte(3, 3); - * // => true - * - * _.lte(3, 1); - * // => false - */ - var lte = createRelationalOperation(function(value, other) { - return value <= other; - }); - - /** - * Converts `value` to an array. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Lang - * @param {*} value The value to convert. - * @returns {Array} Returns the converted array. - * @example - * - * _.toArray({ 'a': 1, 'b': 2 }); - * // => [1, 2] - * - * _.toArray('abc'); - * // => ['a', 'b', 'c'] - * - * _.toArray(1); - * // => [] - * - * _.toArray(null); - * // => [] - */ - function toArray(value) { - if (!value) { - return []; - } - if (isArrayLike(value)) { - return isString(value) ? stringToArray(value) : copyArray(value); - } - if (symIterator && value[symIterator]) { - return iteratorToArray(value[symIterator]()); - } - var tag = getTag(value), - func = tag == mapTag ? mapToArray : (tag == setTag ? setToArray : values); - - return func(value); - } - - /** - * Converts `value` to a finite number. - * - * @static - * @memberOf _ - * @since 4.12.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted number. - * @example - * - * _.toFinite(3.2); - * // => 3.2 - * - * _.toFinite(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toFinite(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toFinite('3.2'); - * // => 3.2 - */ - function toFinite(value) { - if (!value) { - return value === 0 ? value : 0; - } - value = toNumber(value); - if (value === INFINITY || value === -INFINITY) { - var sign = (value < 0 ? -1 : 1); - return sign * MAX_INTEGER; - } - return value === value ? value : 0; - } - - /** - * Converts `value` to an integer. - * - * **Note:** This method is loosely based on - * [`ToInteger`](http://www.ecma-international.org/ecma-262/7.0/#sec-tointeger). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toInteger(3.2); - * // => 3 - * - * _.toInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toInteger(Infinity); - * // => 1.7976931348623157e+308 - * - * _.toInteger('3.2'); - * // => 3 - */ - function toInteger(value) { - var result = toFinite(value), - remainder = result % 1; - - return result === result ? (remainder ? result - remainder : result) : 0; - } - - /** - * Converts `value` to an integer suitable for use as the length of an - * array-like object. - * - * **Note:** This method is based on - * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toLength(3.2); - * // => 3 - * - * _.toLength(Number.MIN_VALUE); - * // => 0 - * - * _.toLength(Infinity); - * // => 4294967295 - * - * _.toLength('3.2'); - * // => 3 - */ - function toLength(value) { - return value ? baseClamp(toInteger(value), 0, MAX_ARRAY_LENGTH) : 0; - } - - /** - * Converts `value` to a number. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to process. - * @returns {number} Returns the number. - * @example - * - * _.toNumber(3.2); - * // => 3.2 - * - * _.toNumber(Number.MIN_VALUE); - * // => 5e-324 - * - * _.toNumber(Infinity); - * // => Infinity - * - * _.toNumber('3.2'); - * // => 3.2 - */ - function toNumber(value) { - if (typeof value == 'number') { - return value; - } - if (isSymbol(value)) { - return NAN; - } - if (isObject(value)) { - var other = typeof value.valueOf == 'function' ? value.valueOf() : value; - value = isObject(other) ? (other + '') : other; - } - if (typeof value != 'string') { - return value === 0 ? value : +value; - } - value = value.replace(reTrim, ''); - var isBinary = reIsBinary.test(value); - return (isBinary || reIsOctal.test(value)) - ? freeParseInt(value.slice(2), isBinary ? 2 : 8) - : (reIsBadHex.test(value) ? NAN : +value); - } - - /** - * Converts `value` to a plain object flattening inherited enumerable string - * keyed properties of `value` to own properties of the plain object. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {Object} Returns the converted plain object. - * @example - * - * function Foo() { - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.assign({ 'a': 1 }, new Foo); - * // => { 'a': 1, 'b': 2 } - * - * _.assign({ 'a': 1 }, _.toPlainObject(new Foo)); - * // => { 'a': 1, 'b': 2, 'c': 3 } - */ - function toPlainObject(value) { - return copyObject(value, keysIn(value)); - } - - /** - * Converts `value` to a safe integer. A safe integer can be compared and - * represented correctly. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Lang - * @param {*} value The value to convert. - * @returns {number} Returns the converted integer. - * @example - * - * _.toSafeInteger(3.2); - * // => 3 - * - * _.toSafeInteger(Number.MIN_VALUE); - * // => 0 - * - * _.toSafeInteger(Infinity); - * // => 9007199254740991 - * - * _.toSafeInteger('3.2'); - * // => 3 - */ - function toSafeInteger(value) { - return value - ? baseClamp(toInteger(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) - : (value === 0 ? value : 0); - } - - /** - * 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); - } - - /*------------------------------------------------------------------------*/ - - /** - * Assigns own enumerable string keyed properties of source objects to the - * destination object. Source objects are applied from left to right. - * Subsequent sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object` and is loosely based on - * [`Object.assign`](https://mdn.io/Object/assign). - * - * @static - * @memberOf _ - * @since 0.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assignIn - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assign({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'c': 3 } - */ - var assign = createAssigner(function(object, source) { - if (isPrototype(source) || isArrayLike(source)) { - copyObject(source, keys(source), object); - return; - } - for (var key in source) { - if (hasOwnProperty.call(source, key)) { - assignValue(object, key, source[key]); - } - } - }); - - /** - * This method is like `_.assign` except that it iterates over own and - * inherited source properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extend - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.assign - * @example - * - * function Foo() { - * this.a = 1; - * } - * - * function Bar() { - * this.c = 3; - * } - * - * Foo.prototype.b = 2; - * Bar.prototype.d = 4; - * - * _.assignIn({ 'a': 0 }, new Foo, new Bar); - * // => { 'a': 1, 'b': 2, 'c': 3, 'd': 4 } - */ - var assignIn = createAssigner(function(object, source) { - copyObject(source, keysIn(source), object); - }); - - /** - * This method is like `_.assignIn` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias extendWith - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignInWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignInWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keysIn(source), object, customizer); - }); - - /** - * This method is like `_.assign` except that it accepts `customizer` - * which is invoked to produce the assigned values. If `customizer` returns - * `undefined`, assignment is handled by the method instead. The `customizer` - * is invoked with five arguments: (objValue, srcValue, key, object, source). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @see _.assignInWith - * @example - * - * function customizer(objValue, srcValue) { - * return _.isUndefined(objValue) ? srcValue : objValue; - * } - * - * var defaults = _.partialRight(_.assignWith, customizer); - * - * defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var assignWith = createAssigner(function(object, source, srcIndex, customizer) { - copyObject(source, keys(source), object, customizer); - }); - - /** - * Creates an array of values corresponding to `paths` of `object`. - * - * @static - * @memberOf _ - * @since 1.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Array} Returns the picked values. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }, 4] }; - * - * _.at(object, ['a[0].b.c', 'a[1]']); - * // => [3, 4] - */ - var at = flatRest(baseAt); - - /** - * Creates an object that inherits from the `prototype` object. If a - * `properties` object is given, its own enumerable string keyed properties - * are assigned to the created object. - * - * @static - * @memberOf _ - * @since 2.3.0 - * @category Object - * @param {Object} prototype The object to inherit from. - * @param {Object} [properties] The properties to assign to the object. - * @returns {Object} Returns the new object. - * @example - * - * function Shape() { - * this.x = 0; - * this.y = 0; - * } - * - * function Circle() { - * Shape.call(this); - * } - * - * Circle.prototype = _.create(Shape.prototype, { - * 'constructor': Circle - * }); - * - * var circle = new Circle; - * circle instanceof Circle; - * // => true - * - * circle instanceof Shape; - * // => true - */ - function create(prototype, properties) { - var result = baseCreate(prototype); - return properties == null ? result : baseAssign(result, properties); - } - - /** - * Assigns own and inherited enumerable string keyed properties of source - * objects to the destination object for all destination properties that - * resolve to `undefined`. Source objects are applied from left to right. - * Once a property is set, additional values of the same property are ignored. - * - * **Note:** This method mutates `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaultsDeep - * @example - * - * _.defaults({ 'a': 1 }, { 'b': 2 }, { 'a': 3 }); - * // => { 'a': 1, 'b': 2 } - */ - var defaults = baseRest(function(object, sources) { - object = Object(object); - - var index = -1; - var length = sources.length; - var guard = length > 2 ? sources[2] : undefined; - - if (guard && isIterateeCall(sources[0], sources[1], guard)) { - length = 1; - } - - while (++index < length) { - var source = sources[index]; - var props = keysIn(source); - var propsIndex = -1; - var propsLength = props.length; - - while (++propsIndex < propsLength) { - var key = props[propsIndex]; - var value = object[key]; - - if (value === undefined || - (eq(value, objectProto[key]) && !hasOwnProperty.call(object, key))) { - object[key] = source[key]; - } - } - } - - return object; - }); - - /** - * This method is like `_.defaults` except that it recursively assigns - * default properties. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.10.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @see _.defaults - * @example - * - * _.defaultsDeep({ 'a': { 'b': 2 } }, { 'a': { 'b': 1, 'c': 3 } }); - * // => { 'a': { 'b': 2, 'c': 3 } } - */ - var defaultsDeep = baseRest(function(args) { - args.push(undefined, customDefaultsMerge); - return apply(mergeWith, undefined, args); - }); - - /** - * This method is like `_.find` except that it returns the key of the first - * element `predicate` returns truthy for instead of the element itself. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findKey(users, function(o) { return o.age < 40; }); - * // => 'barney' (iteration order is not guaranteed) - * - * // The `_.matches` iteratee shorthand. - * _.findKey(users, { 'age': 1, 'active': true }); - * // => 'pebbles' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findKey(users, 'active'); - * // => 'barney' - */ - function findKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwn); - } - - /** - * This method is like `_.findKey` except that it iterates over elements of - * a collection in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @param {Function} [predicate=_.identity] The function invoked per iteration. - * @returns {string|undefined} Returns the key of the matched element, - * else `undefined`. - * @example - * - * var users = { - * 'barney': { 'age': 36, 'active': true }, - * 'fred': { 'age': 40, 'active': false }, - * 'pebbles': { 'age': 1, 'active': true } - * }; - * - * _.findLastKey(users, function(o) { return o.age < 40; }); - * // => returns 'pebbles' assuming `_.findKey` returns 'barney' - * - * // The `_.matches` iteratee shorthand. - * _.findLastKey(users, { 'age': 36, 'active': true }); - * // => 'barney' - * - * // The `_.matchesProperty` iteratee shorthand. - * _.findLastKey(users, ['active', false]); - * // => 'fred' - * - * // The `_.property` iteratee shorthand. - * _.findLastKey(users, 'active'); - * // => 'pebbles' - */ - function findLastKey(object, predicate) { - return baseFindKey(object, getIteratee(predicate, 3), baseForOwnRight); - } - - /** - * Iterates over own and inherited enumerable string keyed properties of an - * object and invokes `iteratee` for each property. The iteratee is invoked - * with three arguments: (value, key, object). Iteratee functions may exit - * iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forInRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forIn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a', 'b', then 'c' (iteration order is not guaranteed). - */ - function forIn(object, iteratee) { - return object == null - ? object - : baseFor(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * This method is like `_.forIn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forIn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forInRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'c', 'b', then 'a' assuming `_.forIn` logs 'a', 'b', then 'c'. - */ - function forInRight(object, iteratee) { - return object == null - ? object - : baseForRight(object, getIteratee(iteratee, 3), keysIn); - } - - /** - * Iterates over own enumerable string keyed properties of an object and - * invokes `iteratee` for each property. The iteratee is invoked with three - * arguments: (value, key, object). Iteratee functions may exit iteration - * early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 0.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwnRight - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwn(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'a' then 'b' (iteration order is not guaranteed). - */ - function forOwn(object, iteratee) { - return object && baseForOwn(object, getIteratee(iteratee, 3)); - } - - /** - * This method is like `_.forOwn` except that it iterates over properties of - * `object` in the opposite order. - * - * @static - * @memberOf _ - * @since 2.0.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns `object`. - * @see _.forOwn - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.forOwnRight(new Foo, function(value, key) { - * console.log(key); - * }); - * // => Logs 'b' then 'a' assuming `_.forOwn` logs 'a' then 'b'. - */ - function forOwnRight(object, iteratee) { - return object && baseForOwnRight(object, getIteratee(iteratee, 3)); - } - - /** - * Creates an array of function property names from own enumerable properties - * of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functionsIn - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functions(new Foo); - * // => ['a', 'b'] - */ - function functions(object) { - return object == null ? [] : baseFunctions(object, keys(object)); - } - - /** - * Creates an array of function property names from own and inherited - * enumerable properties of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to inspect. - * @returns {Array} Returns the function names. - * @see _.functions - * @example - * - * function Foo() { - * this.a = _.constant('a'); - * this.b = _.constant('b'); - * } - * - * Foo.prototype.c = _.constant('c'); - * - * _.functionsIn(new Foo); - * // => ['a', 'b', 'c'] - */ - function functionsIn(object) { - return object == null ? [] : baseFunctions(object, keysIn(object)); - } - - /** - * 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; - } - - /** - * Checks if `path` is a direct property of `object`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = { 'a': { 'b': 2 } }; - * var other = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.has(object, 'a'); - * // => true - * - * _.has(object, 'a.b'); - * // => true - * - * _.has(object, ['a', 'b']); - * // => true - * - * _.has(other, 'a'); - * // => false - */ - function has(object, path) { - return object != null && hasPath(object, path, baseHas); - } - - /** - * Checks if `path` is a direct or inherited property of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path to check. - * @returns {boolean} Returns `true` if `path` exists, else `false`. - * @example - * - * var object = _.create({ 'a': _.create({ 'b': 2 }) }); - * - * _.hasIn(object, 'a'); - * // => true - * - * _.hasIn(object, 'a.b'); - * // => true - * - * _.hasIn(object, ['a', 'b']); - * // => true - * - * _.hasIn(object, 'b'); - * // => false - */ - function hasIn(object, path) { - return object != null && hasPath(object, path, baseHasIn); - } - - /** - * Creates an object composed of the inverted keys and values of `object`. - * If `object` contains duplicate values, subsequent values overwrite - * property assignments of previous values. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Object - * @param {Object} object The object to invert. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invert(object); - * // => { '1': 'c', '2': 'b' } - */ - var invert = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - result[value] = key; - }, constant(identity)); - - /** - * This method is like `_.invert` except that the inverted object is generated - * from the results of running each element of `object` thru `iteratee`. The - * corresponding inverted value of each inverted key is an array of keys - * responsible for generating the inverted value. The iteratee is invoked - * with one argument: (value). - * - * @static - * @memberOf _ - * @since 4.1.0 - * @category Object - * @param {Object} object The object to invert. - * @param {Function} [iteratee=_.identity] The iteratee invoked per element. - * @returns {Object} Returns the new inverted object. - * @example - * - * var object = { 'a': 1, 'b': 2, 'c': 1 }; - * - * _.invertBy(object); - * // => { '1': ['a', 'c'], '2': ['b'] } - * - * _.invertBy(object, function(value) { - * return 'group' + value; - * }); - * // => { 'group1': ['a', 'c'], 'group2': ['b'] } - */ - var invertBy = createInverter(function(result, value, key) { - if (value != null && - typeof value.toString != 'function') { - value = nativeObjectToString.call(value); - } - - if (hasOwnProperty.call(result, value)) { - result[value].push(key); - } else { - result[value] = [key]; - } - }, getIteratee); - - /** - * Invokes the method at `path` of `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the method to invoke. - * @param {...*} [args] The arguments to invoke the method with. - * @returns {*} Returns the result of the invoked method. - * @example - * - * var object = { 'a': [{ 'b': { 'c': [1, 2, 3, 4] } }] }; - * - * _.invoke(object, 'a[0].b.c.slice', 1, 3); - * // => [2, 3] - */ - var invoke = baseRest(baseInvoke); - - /** - * Creates an array of the own enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. See the - * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys) - * for more details. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keys(new Foo); - * // => ['a', 'b'] (iteration order is not guaranteed) - * - * _.keys('hi'); - * // => ['0', '1'] - */ - function keys(object) { - return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object); - } - - /** - * Creates an array of the own and inherited enumerable property names of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property names. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.keysIn(new Foo); - * // => ['a', 'b', 'c'] (iteration order is not guaranteed) - */ - function keysIn(object) { - return isArrayLike(object) ? arrayLikeKeys(object, true) : baseKeysIn(object); - } - - /** - * The opposite of `_.mapValues`; this method creates an object with the - * same values as `object` and keys generated by running each own enumerable - * string keyed property of `object` thru `iteratee`. The iteratee is invoked - * with three arguments: (value, key, object). - * - * @static - * @memberOf _ - * @since 3.8.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapValues - * @example - * - * _.mapKeys({ 'a': 1, 'b': 2 }, function(value, key) { - * return key + value; - * }); - * // => { 'a1': 1, 'b2': 2 } - */ - function mapKeys(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, iteratee(value, key, object), value); - }); - return result; - } - - /** - * Creates an object with the same keys as `object` and values generated - * by running each own enumerable string keyed property of `object` thru - * `iteratee`. The iteratee is invoked with three arguments: - * (value, key, object). - * - * @static - * @memberOf _ - * @since 2.4.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @returns {Object} Returns the new mapped object. - * @see _.mapKeys - * @example - * - * var users = { - * 'fred': { 'user': 'fred', 'age': 40 }, - * 'pebbles': { 'user': 'pebbles', 'age': 1 } - * }; - * - * _.mapValues(users, function(o) { return o.age; }); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - * - * // The `_.property` iteratee shorthand. - * _.mapValues(users, 'age'); - * // => { 'fred': 40, 'pebbles': 1 } (iteration order is not guaranteed) - */ - function mapValues(object, iteratee) { - var result = {}; - iteratee = getIteratee(iteratee, 3); - - baseForOwn(object, function(value, key, object) { - baseAssignValue(result, key, iteratee(value, key, object)); - }); - return result; - } - - /** - * This method is like `_.assign` except that it recursively merges own and - * inherited enumerable string keyed properties of source objects into the - * destination object. Source properties that resolve to `undefined` are - * skipped if a destination value exists. Array and plain object properties - * are merged recursively. Other objects and value types are overridden by - * assignment. Source objects are applied from left to right. Subsequent - * sources overwrite property assignments of previous sources. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 0.5.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} [sources] The source objects. - * @returns {Object} Returns `object`. - * @example - * - * var object = { - * 'a': [{ 'b': 2 }, { 'd': 4 }] - * }; - * - * var other = { - * 'a': [{ 'c': 3 }, { 'e': 5 }] - * }; - * - * _.merge(object, other); - * // => { 'a': [{ 'b': 2, 'c': 3 }, { 'd': 4, 'e': 5 }] } - */ - var merge = createAssigner(function(object, source, srcIndex) { - baseMerge(object, source, srcIndex); - }); - - /** - * This method is like `_.merge` except that it accepts `customizer` which - * is invoked to produce the merged values of the destination and source - * properties. If `customizer` returns `undefined`, merging is handled by the - * method instead. The `customizer` is invoked with six arguments: - * (objValue, srcValue, key, object, source, stack). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The destination object. - * @param {...Object} sources The source objects. - * @param {Function} customizer The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * function customizer(objValue, srcValue) { - * if (_.isArray(objValue)) { - * return objValue.concat(srcValue); - * } - * } - * - * var object = { 'a': [1], 'b': [2] }; - * var other = { 'a': [3], 'b': [4] }; - * - * _.mergeWith(object, other, customizer); - * // => { 'a': [1, 3], 'b': [2, 4] } - */ - var mergeWith = createAssigner(function(object, source, srcIndex, customizer) { - baseMerge(object, source, srcIndex, customizer); - }); - - /** - * The opposite of `_.pick`; this method creates an object composed of the - * own and inherited enumerable property paths of `object` that are not omitted. - * - * **Note:** This method is considerably slower than `_.pick`. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to omit. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omit(object, ['a', 'c']); - * // => { 'b': '2' } - */ - var omit = flatRest(function(object, paths) { - var result = {}; - if (object == null) { - return result; - } - var isDeep = false; - paths = arrayMap(paths, function(path) { - path = castPath(path, object); - isDeep || (isDeep = path.length > 1); - return path; - }); - copyObject(object, getAllKeysIn(object), result); - if (isDeep) { - result = baseClone(result, CLONE_DEEP_FLAG | CLONE_FLAT_FLAG | CLONE_SYMBOLS_FLAG, customOmitClone); - } - var length = paths.length; - while (length--) { - baseUnset(result, paths[length]); - } - return result; - }); - - /** - * The opposite of `_.pickBy`; this method creates an object composed of - * the own and inherited enumerable string keyed properties of `object` that - * `predicate` doesn't return truthy for. The predicate is invoked with two - * arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.omitBy(object, _.isNumber); - * // => { 'b': '2' } - */ - function omitBy(object, predicate) { - return pickBy(object, negate(getIteratee(predicate))); - } - - /** - * Creates an object composed of the picked `object` properties. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The source object. - * @param {...(string|string[])} [paths] The property paths to pick. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pick(object, ['a', 'c']); - * // => { 'a': 1, 'c': 3 } - */ - var pick = flatRest(function(object, paths) { - return object == null ? {} : basePick(object, paths); - }); - - /** - * Creates an object composed of the `object` properties `predicate` returns - * truthy for. The predicate is invoked with two arguments: (value, key). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The source object. - * @param {Function} [predicate=_.identity] The function invoked per property. - * @returns {Object} Returns the new object. - * @example - * - * var object = { 'a': 1, 'b': '2', 'c': 3 }; - * - * _.pickBy(object, _.isNumber); - * // => { 'a': 1, 'c': 3 } - */ - function pickBy(object, predicate) { - if (object == null) { - return {}; - } - var props = arrayMap(getAllKeysIn(object), function(prop) { - return [prop]; - }); - predicate = getIteratee(predicate); - return basePickBy(object, props, function(value, path) { - return predicate(value, path[0]); - }); - } - - /** - * This method is like `_.get` except that if the resolved value is a - * function it's invoked with the `this` binding of its parent object and - * its result is returned. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @param {Array|string} path The path of the property to resolve. - * @param {*} [defaultValue] The value returned for `undefined` resolved values. - * @returns {*} Returns the resolved value. - * @example - * - * var object = { 'a': [{ 'b': { 'c1': 3, 'c2': _.constant(4) } }] }; - * - * _.result(object, 'a[0].b.c1'); - * // => 3 - * - * _.result(object, 'a[0].b.c2'); - * // => 4 - * - * _.result(object, 'a[0].b.c3', 'default'); - * // => 'default' - * - * _.result(object, 'a[0].b.c3', _.constant('default')); - * // => 'default' - */ - function result(object, path, defaultValue) { - path = castPath(path, object); - - var index = -1, - length = path.length; - - // Ensure the loop is entered when path is empty. - if (!length) { - length = 1; - object = undefined; - } - while (++index < length) { - var value = object == null ? undefined : object[toKey(path[index])]; - if (value === undefined) { - index = length; - value = defaultValue; - } - object = isFunction(value) ? value.call(object) : value; - } - return object; - } - - /** - * Sets the value at `path` of `object`. If a portion of `path` doesn't exist, - * it's created. Arrays are created for missing index properties while objects - * are created for all other missing properties. Use `_.setWith` to customize - * `path` creation. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 3.7.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.set(object, 'a[0].b.c', 4); - * console.log(object.a[0].b.c); - * // => 4 - * - * _.set(object, ['x', '0', 'y', 'z'], 5); - * console.log(object.x[0].y.z); - * // => 5 - */ - function set(object, path, value) { - return object == null ? object : baseSet(object, path, value); - } - - /** - * This method is like `_.set` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {*} value The value to set. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.setWith(object, '[0][1]', 'a', Object); - * // => { '0': { '1': 'a' } } - */ - function setWith(object, path, value, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseSet(object, path, value, customizer); - } - - /** - * Creates an array of own enumerable string keyed-value pairs for `object` - * which can be consumed by `_.fromPairs`. If `object` is a map or set, its - * entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entries - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairs(new Foo); - * // => [['a', 1], ['b', 2]] (iteration order is not guaranteed) - */ - var toPairs = createToPairs(keys); - - /** - * Creates an array of own and inherited enumerable string keyed-value pairs - * for `object` which can be consumed by `_.fromPairs`. If `object` is a map - * or set, its entries are returned. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @alias entriesIn - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the key-value pairs. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.toPairsIn(new Foo); - * // => [['a', 1], ['b', 2], ['c', 3]] (iteration order is not guaranteed) - */ - var toPairsIn = createToPairs(keysIn); - - /** - * An alternative to `_.reduce`; this method transforms `object` to a new - * `accumulator` object which is the result of running each of its own - * enumerable string keyed properties thru `iteratee`, with each invocation - * potentially mutating the `accumulator` object. If `accumulator` is not - * provided, a new object with the same `[[Prototype]]` will be used. The - * iteratee is invoked with four arguments: (accumulator, value, key, object). - * Iteratee functions may exit iteration early by explicitly returning `false`. - * - * @static - * @memberOf _ - * @since 1.3.0 - * @category Object - * @param {Object} object The object to iterate over. - * @param {Function} [iteratee=_.identity] The function invoked per iteration. - * @param {*} [accumulator] The custom accumulator value. - * @returns {*} Returns the accumulated value. - * @example - * - * _.transform([2, 3, 4], function(result, n) { - * result.push(n *= n); - * return n % 2 == 0; - * }, []); - * // => [4, 9] - * - * _.transform({ 'a': 1, 'b': 2, 'c': 1 }, function(result, value, key) { - * (result[value] || (result[value] = [])).push(key); - * }, {}); - * // => { '1': ['a', 'c'], '2': ['b'] } - */ - function transform(object, iteratee, accumulator) { - var isArr = isArray(object), - isArrLike = isArr || isBuffer(object) || isTypedArray(object); - - iteratee = getIteratee(iteratee, 4); - if (accumulator == null) { - var Ctor = object && object.constructor; - if (isArrLike) { - accumulator = isArr ? new Ctor : []; - } - else if (isObject(object)) { - accumulator = isFunction(Ctor) ? baseCreate(getPrototype(object)) : {}; - } - else { - accumulator = {}; - } - } - (isArrLike ? arrayEach : baseForOwn)(object, function(value, index, object) { - return iteratee(accumulator, value, index, object); - }); - return accumulator; - } - - /** - * Removes the property at `path` of `object`. - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to unset. - * @returns {boolean} Returns `true` if the property is deleted, else `false`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 7 } }] }; - * _.unset(object, 'a[0].b.c'); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - * - * _.unset(object, ['a', '0', 'b', 'c']); - * // => true - * - * console.log(object); - * // => { 'a': [{ 'b': {} }] }; - */ - function unset(object, path) { - return object == null ? true : baseUnset(object, path); - } - - /** - * This method is like `_.set` except that accepts `updater` to produce the - * value to set. Use `_.updateWith` to customize `path` creation. The `updater` - * is invoked with one argument: (value). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @returns {Object} Returns `object`. - * @example - * - * var object = { 'a': [{ 'b': { 'c': 3 } }] }; - * - * _.update(object, 'a[0].b.c', function(n) { return n * n; }); - * console.log(object.a[0].b.c); - * // => 9 - * - * _.update(object, 'x[0].y.z', function(n) { return n ? n + 1 : 0; }); - * console.log(object.x[0].y.z); - * // => 0 - */ - function update(object, path, updater) { - return object == null ? object : baseUpdate(object, path, castFunction(updater)); - } - - /** - * This method is like `_.update` except that it accepts `customizer` which is - * invoked to produce the objects of `path`. If `customizer` returns `undefined` - * path creation is handled by the method instead. The `customizer` is invoked - * with three arguments: (nsValue, key, nsObject). - * - * **Note:** This method mutates `object`. - * - * @static - * @memberOf _ - * @since 4.6.0 - * @category Object - * @param {Object} object The object to modify. - * @param {Array|string} path The path of the property to set. - * @param {Function} updater The function to produce the updated value. - * @param {Function} [customizer] The function to customize assigned values. - * @returns {Object} Returns `object`. - * @example - * - * var object = {}; - * - * _.updateWith(object, '[0][1]', _.constant('a'), Object); - * // => { '0': { '1': 'a' } } - */ - function updateWith(object, path, updater, customizer) { - customizer = typeof customizer == 'function' ? customizer : undefined; - return object == null ? object : baseUpdate(object, path, castFunction(updater), customizer); - } - - /** - * Creates an array of the own enumerable string keyed property values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.values(new Foo); - * // => [1, 2] (iteration order is not guaranteed) - * - * _.values('hi'); - * // => ['h', 'i'] - */ - function values(object) { - return object == null ? [] : baseValues(object, keys(object)); - } - - /** - * Creates an array of the own and inherited enumerable string keyed property - * values of `object`. - * - * **Note:** Non-object values are coerced to objects. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category Object - * @param {Object} object The object to query. - * @returns {Array} Returns the array of property values. - * @example - * - * function Foo() { - * this.a = 1; - * this.b = 2; - * } - * - * Foo.prototype.c = 3; - * - * _.valuesIn(new Foo); - * // => [1, 2, 3] (iteration order is not guaranteed) - */ - function valuesIn(object) { - return object == null ? [] : baseValues(object, keysIn(object)); - } - - /*------------------------------------------------------------------------*/ - - /** - * Clamps `number` within the inclusive `lower` and `upper` bounds. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category Number - * @param {number} number The number to clamp. - * @param {number} [lower] The lower bound. - * @param {number} upper The upper bound. - * @returns {number} Returns the clamped number. - * @example - * - * _.clamp(-10, -5, 5); - * // => -5 - * - * _.clamp(10, -5, 5); - * // => 5 - */ - function clamp(number, lower, upper) { - if (upper === undefined) { - upper = lower; - lower = undefined; - } - if (upper !== undefined) { - upper = toNumber(upper); - upper = upper === upper ? upper : 0; - } - if (lower !== undefined) { - lower = toNumber(lower); - lower = lower === lower ? lower : 0; - } - return baseClamp(toNumber(number), lower, upper); - } - - /** - * Checks if `n` is between `start` and up to, but not including, `end`. If - * `end` is not specified, it's set to `start` with `start` then set to `0`. - * If `start` is greater than `end` the params are swapped to support - * negative ranges. - * - * @static - * @memberOf _ - * @since 3.3.0 - * @category Number - * @param {number} number The number to check. - * @param {number} [start=0] The start of the range. - * @param {number} end The end of the range. - * @returns {boolean} Returns `true` if `number` is in the range, else `false`. - * @see _.range, _.rangeRight - * @example - * - * _.inRange(3, 2, 4); - * // => true - * - * _.inRange(4, 8); - * // => true - * - * _.inRange(4, 2); - * // => false - * - * _.inRange(2, 2); - * // => false - * - * _.inRange(1.2, 2); - * // => true - * - * _.inRange(5.2, 4); - * // => false - * - * _.inRange(-3, -2, -6); - * // => true - */ - function inRange(number, start, end) { - start = toFinite(start); - if (end === undefined) { - end = start; - start = 0; - } else { - end = toFinite(end); - } - number = toNumber(number); - return baseInRange(number, start, end); - } - - /** - * Produces a random number between the inclusive `lower` and `upper` bounds. - * If only one argument is provided a number between `0` and the given number - * is returned. If `floating` is `true`, or either `lower` or `upper` are - * floats, a floating-point number is returned instead of an integer. - * - * **Note:** JavaScript follows the IEEE-754 standard for resolving - * floating-point values which can produce unexpected results. - * - * @static - * @memberOf _ - * @since 0.7.0 - * @category Number - * @param {number} [lower=0] The lower bound. - * @param {number} [upper=1] The upper bound. - * @param {boolean} [floating] Specify returning a floating-point number. - * @returns {number} Returns the random number. - * @example - * - * _.random(0, 5); - * // => an integer between 0 and 5 - * - * _.random(5); - * // => also an integer between 0 and 5 - * - * _.random(5, true); - * // => a floating-point number between 0 and 5 - * - * _.random(1.2, 5.2); - * // => a floating-point number between 1.2 and 5.2 - */ - function random(lower, upper, floating) { - if (floating && typeof floating != 'boolean' && isIterateeCall(lower, upper, floating)) { - upper = floating = undefined; - } - if (floating === undefined) { - if (typeof upper == 'boolean') { - floating = upper; - upper = undefined; - } - else if (typeof lower == 'boolean') { - floating = lower; - lower = undefined; - } - } - if (lower === undefined && upper === undefined) { - lower = 0; - upper = 1; - } - else { - lower = toFinite(lower); - if (upper === undefined) { - upper = lower; - lower = 0; - } else { - upper = toFinite(upper); - } - } - if (lower > upper) { - var temp = lower; - lower = upper; - upper = temp; - } - if (floating || lower % 1 || upper % 1) { - var rand = nativeRandom(); - return nativeMin(lower + (rand * (upper - lower + freeParseFloat('1e-' + ((rand + '').length - 1)))), upper); - } - return baseRandom(lower, upper); - } - - /*------------------------------------------------------------------------*/ - - /** - * Converts `string` to [camel case](https://en.wikipedia.org/wiki/CamelCase). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the camel cased string. - * @example - * - * _.camelCase('Foo Bar'); - * // => 'fooBar' - * - * _.camelCase('--foo-bar--'); - * // => 'fooBar' - * - * _.camelCase('__FOO_BAR__'); - * // => 'fooBar' - */ - var camelCase = createCompounder(function(result, word, index) { - word = word.toLowerCase(); - return result + (index ? capitalize(word) : word); - }); - - /** - * Converts the first character of `string` to upper case and the remaining - * to lower case. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to capitalize. - * @returns {string} Returns the capitalized string. - * @example - * - * _.capitalize('FRED'); - * // => 'Fred' - */ - function capitalize(string) { - return upperFirst(toString(string).toLowerCase()); - } - - /** - * Deburrs `string` by converting - * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table) - * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A) - * letters to basic Latin letters and removing - * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to deburr. - * @returns {string} Returns the deburred string. - * @example - * - * _.deburr('déjà vu'); - * // => 'deja vu' - */ - function deburr(string) { - string = toString(string); - return string && string.replace(reLatin, deburrLetter).replace(reComboMark, ''); - } - - /** - * Checks if `string` ends with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=string.length] The position to search up to. - * @returns {boolean} Returns `true` if `string` ends with `target`, - * else `false`. - * @example - * - * _.endsWith('abc', 'c'); - * // => true - * - * _.endsWith('abc', 'b'); - * // => false - * - * _.endsWith('abc', 'b', 2); - * // => true - */ - function endsWith(string, target, position) { - string = toString(string); - target = baseToString(target); - - var length = string.length; - position = position === undefined - ? length - : baseClamp(toInteger(position), 0, length); - - var end = position; - position -= target.length; - return position >= 0 && string.slice(position, end) == target; - } - - /** - * Converts the characters "&", "<", ">", '"', and "'" in `string` to their - * corresponding HTML entities. - * - * **Note:** No other characters are escaped. To escape additional - * characters use a third-party library like [_he_](https://mths.be/he). - * - * Though the ">" character is escaped for symmetry, characters like - * ">" and "/" don't need escaping in HTML and have no special meaning - * unless they're part of a tag or unquoted attribute value. See - * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands) - * (under "semi-related fun fact") for more details. - * - * When working with HTML you should always - * [quote attribute values](http://wonko.com/post/html-escaping) to reduce - * XSS vectors. - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escape('fred, barney, & pebbles'); - * // => 'fred, barney, & pebbles' - */ - function escape(string) { - string = toString(string); - return (string && reHasUnescapedHtml.test(string)) - ? string.replace(reUnescapedHtml, escapeHtmlChar) - : string; - } - - /** - * Escapes the `RegExp` special characters "^", "$", "\", ".", "*", "+", - * "?", "(", ")", "[", "]", "{", "}", and "|" in `string`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to escape. - * @returns {string} Returns the escaped string. - * @example - * - * _.escapeRegExp('[lodash](https://lodash.com/)'); - * // => '\[lodash\]\(https://lodash\.com/\)' - */ - function escapeRegExp(string) { - string = toString(string); - return (string && reHasRegExpChar.test(string)) - ? string.replace(reRegExpChar, '\\$&') - : string; - } - - /** - * Converts `string` to - * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the kebab cased string. - * @example - * - * _.kebabCase('Foo Bar'); - * // => 'foo-bar' - * - * _.kebabCase('fooBar'); - * // => 'foo-bar' - * - * _.kebabCase('__FOO_BAR__'); - * // => 'foo-bar' - */ - var kebabCase = createCompounder(function(result, word, index) { - return result + (index ? '-' : '') + word.toLowerCase(); - }); - - /** - * Converts `string`, as space separated words, to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the lower cased string. - * @example - * - * _.lowerCase('--Foo-Bar--'); - * // => 'foo bar' - * - * _.lowerCase('fooBar'); - * // => 'foo bar' - * - * _.lowerCase('__FOO_BAR__'); - * // => 'foo bar' - */ - var lowerCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + word.toLowerCase(); - }); - - /** - * Converts the first character of `string` to lower case. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the converted string. - * @example - * - * _.lowerFirst('Fred'); - * // => 'fred' - * - * _.lowerFirst('FRED'); - * // => 'fRED' - */ - var lowerFirst = createCaseFirst('toLowerCase'); - - /** - * Pads `string` on the left and right sides if it's shorter than `length`. - * Padding characters are truncated if they can't be evenly divided by `length`. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.pad('abc', 8); - * // => ' abc ' - * - * _.pad('abc', 8, '_-'); - * // => '_-abc_-_' - * - * _.pad('abc', 3); - * // => 'abc' - */ - function pad(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - if (!length || strLength >= length) { - return string; - } - var mid = (length - strLength) / 2; - return ( - createPadding(nativeFloor(mid), chars) + - string + - createPadding(nativeCeil(mid), chars) - ); - } - - /** - * Pads `string` on the right side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padEnd('abc', 6); - * // => 'abc ' - * - * _.padEnd('abc', 6, '_-'); - * // => 'abc_-_' - * - * _.padEnd('abc', 3); - * // => 'abc' - */ - function padEnd(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (string + createPadding(length - strLength, chars)) - : string; - } - - /** - * Pads `string` on the left side if it's shorter than `length`. Padding - * characters are truncated if they exceed `length`. - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to pad. - * @param {number} [length=0] The padding length. - * @param {string} [chars=' '] The string used as padding. - * @returns {string} Returns the padded string. - * @example - * - * _.padStart('abc', 6); - * // => ' abc' - * - * _.padStart('abc', 6, '_-'); - * // => '_-_abc' - * - * _.padStart('abc', 3); - * // => 'abc' - */ - function padStart(string, length, chars) { - string = toString(string); - length = toInteger(length); - - var strLength = length ? stringSize(string) : 0; - return (length && strLength < length) - ? (createPadding(length - strLength, chars) + string) - : string; - } - - /** - * Converts `string` to an integer of the specified radix. If `radix` is - * `undefined` or `0`, a `radix` of `10` is used unless `value` is a - * hexadecimal, in which case a `radix` of `16` is used. - * - * **Note:** This method aligns with the - * [ES5 implementation](https://es5.github.io/#x15.1.2.2) of `parseInt`. - * - * @static - * @memberOf _ - * @since 1.1.0 - * @category String - * @param {string} string The string to convert. - * @param {number} [radix=10] The radix to interpret `value` by. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {number} Returns the converted integer. - * @example - * - * _.parseInt('08'); - * // => 8 - * - * _.map(['6', '08', '10'], _.parseInt); - * // => [6, 8, 10] - */ - function parseInt(string, radix, guard) { - if (guard || radix == null) { - radix = 0; - } else if (radix) { - radix = +radix; - } - return nativeParseInt(toString(string).replace(reTrimStart, ''), radix || 0); - } - - /** - * Repeats the given string `n` times. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to repeat. - * @param {number} [n=1] The number of times to repeat the string. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {string} Returns the repeated string. - * @example - * - * _.repeat('*', 3); - * // => '***' - * - * _.repeat('abc', 2); - * // => 'abcabc' - * - * _.repeat('abc', 0); - * // => '' - */ - function repeat(string, n, guard) { - if ((guard ? isIterateeCall(string, n, guard) : n === undefined)) { - n = 1; - } else { - n = toInteger(n); - } - return baseRepeat(toString(string), n); - } - - /** - * Replaces matches for `pattern` in `string` with `replacement`. - * - * **Note:** This method is based on - * [`String#replace`](https://mdn.io/String/replace). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to modify. - * @param {RegExp|string} pattern The pattern to replace. - * @param {Function|string} replacement The match replacement. - * @returns {string} Returns the modified string. - * @example - * - * _.replace('Hi Fred', 'Fred', 'Barney'); - * // => 'Hi Barney' - */ - function replace() { - var args = arguments, - string = toString(args[0]); - - return args.length < 3 ? string : string.replace(args[1], args[2]); - } - - /** - * Converts `string` to - * [snake case](https://en.wikipedia.org/wiki/Snake_case). - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the snake cased string. - * @example - * - * _.snakeCase('Foo Bar'); - * // => 'foo_bar' - * - * _.snakeCase('fooBar'); - * // => 'foo_bar' - * - * _.snakeCase('--FOO-BAR--'); - * // => 'foo_bar' - */ - var snakeCase = createCompounder(function(result, word, index) { - return result + (index ? '_' : '') + word.toLowerCase(); - }); - - /** - * Splits `string` by `separator`. - * - * **Note:** This method is based on - * [`String#split`](https://mdn.io/String/split). - * - * @static - * @memberOf _ - * @since 4.0.0 - * @category String - * @param {string} [string=''] The string to split. - * @param {RegExp|string} separator The separator pattern to split by. - * @param {number} [limit] The length to truncate results to. - * @returns {Array} Returns the string segments. - * @example - * - * _.split('a-b-c', '-', 2); - * // => ['a', 'b'] - */ - function split(string, separator, limit) { - if (limit && typeof limit != 'number' && isIterateeCall(string, separator, limit)) { - separator = limit = undefined; - } - limit = limit === undefined ? MAX_ARRAY_LENGTH : limit >>> 0; - if (!limit) { - return []; - } - string = toString(string); - if (string && ( - typeof separator == 'string' || - (separator != null && !isRegExp(separator)) - )) { - separator = baseToString(separator); - if (!separator && hasUnicode(string)) { - return castSlice(stringToArray(string), 0, limit); - } - } - return string.split(separator, limit); - } - - /** - * Converts `string` to - * [start case](https://en.wikipedia.org/wiki/Letter_case#Stylistic_or_specialised_usage). - * - * @static - * @memberOf _ - * @since 3.1.0 - * @category String - * @param {string} [string=''] The string to convert. - * @returns {string} Returns the start cased string. - * @example - * - * _.startCase('--foo-bar--'); - * // => 'Foo Bar' - * - * _.startCase('fooBar'); - * // => 'Foo Bar' - * - * _.startCase('__FOO_BAR__'); - * // => 'FOO BAR' - */ - var startCase = createCompounder(function(result, word, index) { - return result + (index ? ' ' : '') + upperFirst(word); - }); - - /** - * Checks if `string` starts with the given target string. - * - * @static - * @memberOf _ - * @since 3.0.0 - * @category String - * @param {string} [string=''] The string to inspect. - * @param {string} [target] The string to search for. - * @param {number} [position=0] The position to search from. - * @returns {boolean} Returns `true` if `string` starts with `target`, - * else `false`. - * @example - * - * _.startsWith('abc', 'a'); - * // => true - * - * _.startsWith('abc', 'b'); - * // => false - * - * _.startsWith('abc', 'b', 1); - * // => true - */ - function startsWith(string, target, position) { - string = toString(string); - position = position == null - ? 0 - : baseClamp(toInteger(position), 0, string.length); - - target = baseToString(target); - return string.slice(position, position + target.length) == target; - } - - /** - * Creates a compiled template function that can interpolate data properties - * in "interpolate" delimiters, HTML-escape interpolated data properties in - * "escape" delimiters, and execute JavaScript in "evaluate" delimiters. Data - * properties may be accessed as free variables in the template. If a setting - * object is given, it takes precedence over `_.templateSettings` values. - * - * **Note:** In the development build `_.template` utilizes - * [sourceURLs](http://www.html5rocks.com/en/tutorials/developertools/sourcemaps/#toc-sourceurl) - * for easier debugging. - * - * For more information on precompiling templates see - * [lodash's custom builds documentation](https://lodash.com/custom-builds). - * - * For more information on Chrome extension sandboxes see - * [Chrome's extensions documentation](https://developer.chrome.com/extensions/sandboxingEval). - * - * @static - * @since 0.1.0 - * @memberOf _ - * @category String - * @param {string} [string=''] The template string. - * @param {Object} [options={}] The options object. - * @param {RegExp} [options.escape=_.templateSettings.escape] - * The HTML "escape" delimiter. - * @param {RegExp} [options.evaluate=_.templateSettings.evaluate] - * The "evaluate" delimiter. - * @param {Object} [options.imports=_.templateSettings.imports] - * An object to import into the template as free variables. - * @param {RegExp} [options.interpolate=_.templateSettings.interpolate] - * The "interpolate" delimiter. - * @param {string} [options.sourceURL='lodash.templateSources[n]'] - * The sourceURL of the compiled template. - * @param {string} [options.variable='obj'] - * The data object variable name. - * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`. - * @returns {Function} Returns the compiled template function. - * @example - * - * // Use the "interpolate" delimiter to create a compiled template. - * var compiled = _.template('hello <%= user %>!'); - * compiled({ 'user': 'fred' }); - * // => 'hello fred!' - * - * // Use the HTML "escape" delimiter to escape data property values. - * var compiled = _.template('<%- value %>'); - * compiled({ 'value': ' + + + +`,u=` + +`,g=` + +`,f=` + +`;return a+l+c+u+g+f}Ey.createSyntaxDiagramsCode=Lwe});var yY=w(Ve=>{"use strict";Object.defineProperty(Ve,"__esModule",{value:!0});Ve.Parser=Ve.createSyntaxDiagramsCode=Ve.clearCache=Ve.GAstVisitor=Ve.serializeProduction=Ve.serializeGrammar=Ve.Terminal=Ve.Rule=Ve.RepetitionWithSeparator=Ve.RepetitionMandatoryWithSeparator=Ve.RepetitionMandatory=Ve.Repetition=Ve.Option=Ve.NonTerminal=Ve.Alternative=Ve.Alternation=Ve.defaultLexerErrorProvider=Ve.NoViableAltException=Ve.NotAllInputParsedException=Ve.MismatchedTokenException=Ve.isRecognitionException=Ve.EarlyExitException=Ve.defaultParserErrorProvider=Ve.tokenName=Ve.tokenMatcher=Ve.tokenLabel=Ve.EOF=Ve.createTokenInstance=Ve.createToken=Ve.LexerDefinitionErrorType=Ve.Lexer=Ve.EMPTY_ALT=Ve.ParserDefinitionErrorType=Ve.EmbeddedActionsParser=Ve.CstParser=Ve.VERSION=void 0;var Twe=Rv();Object.defineProperty(Ve,"VERSION",{enumerable:!0,get:function(){return Twe.VERSION}});var Iy=Zn();Object.defineProperty(Ve,"CstParser",{enumerable:!0,get:function(){return Iy.CstParser}});Object.defineProperty(Ve,"EmbeddedActionsParser",{enumerable:!0,get:function(){return Iy.EmbeddedActionsParser}});Object.defineProperty(Ve,"ParserDefinitionErrorType",{enumerable:!0,get:function(){return Iy.ParserDefinitionErrorType}});Object.defineProperty(Ve,"EMPTY_ALT",{enumerable:!0,get:function(){return Iy.EMPTY_ALT}});var EY=Rp();Object.defineProperty(Ve,"Lexer",{enumerable:!0,get:function(){return EY.Lexer}});Object.defineProperty(Ve,"LexerDefinitionErrorType",{enumerable:!0,get:function(){return EY.LexerDefinitionErrorType}});var Bg=WA();Object.defineProperty(Ve,"createToken",{enumerable:!0,get:function(){return Bg.createToken}});Object.defineProperty(Ve,"createTokenInstance",{enumerable:!0,get:function(){return Bg.createTokenInstance}});Object.defineProperty(Ve,"EOF",{enumerable:!0,get:function(){return Bg.EOF}});Object.defineProperty(Ve,"tokenLabel",{enumerable:!0,get:function(){return Bg.tokenLabel}});Object.defineProperty(Ve,"tokenMatcher",{enumerable:!0,get:function(){return Bg.tokenMatcher}});Object.defineProperty(Ve,"tokenName",{enumerable:!0,get:function(){return Bg.tokenName}});var Owe=Op();Object.defineProperty(Ve,"defaultParserErrorProvider",{enumerable:!0,get:function(){return Owe.defaultParserErrorProvider}});var Jp=Ig();Object.defineProperty(Ve,"EarlyExitException",{enumerable:!0,get:function(){return Jp.EarlyExitException}});Object.defineProperty(Ve,"isRecognitionException",{enumerable:!0,get:function(){return Jp.isRecognitionException}});Object.defineProperty(Ve,"MismatchedTokenException",{enumerable:!0,get:function(){return Jp.MismatchedTokenException}});Object.defineProperty(Ve,"NotAllInputParsedException",{enumerable:!0,get:function(){return Jp.NotAllInputParsedException}});Object.defineProperty(Ve,"NoViableAltException",{enumerable:!0,get:function(){return Jp.NoViableAltException}});var Mwe=Gv();Object.defineProperty(Ve,"defaultLexerErrorProvider",{enumerable:!0,get:function(){return Mwe.defaultLexerErrorProvider}});var Go=bn();Object.defineProperty(Ve,"Alternation",{enumerable:!0,get:function(){return Go.Alternation}});Object.defineProperty(Ve,"Alternative",{enumerable:!0,get:function(){return Go.Alternative}});Object.defineProperty(Ve,"NonTerminal",{enumerable:!0,get:function(){return Go.NonTerminal}});Object.defineProperty(Ve,"Option",{enumerable:!0,get:function(){return Go.Option}});Object.defineProperty(Ve,"Repetition",{enumerable:!0,get:function(){return Go.Repetition}});Object.defineProperty(Ve,"RepetitionMandatory",{enumerable:!0,get:function(){return Go.RepetitionMandatory}});Object.defineProperty(Ve,"RepetitionMandatoryWithSeparator",{enumerable:!0,get:function(){return Go.RepetitionMandatoryWithSeparator}});Object.defineProperty(Ve,"RepetitionWithSeparator",{enumerable:!0,get:function(){return Go.RepetitionWithSeparator}});Object.defineProperty(Ve,"Rule",{enumerable:!0,get:function(){return Go.Rule}});Object.defineProperty(Ve,"Terminal",{enumerable:!0,get:function(){return Go.Terminal}});var IY=bn();Object.defineProperty(Ve,"serializeGrammar",{enumerable:!0,get:function(){return IY.serializeGrammar}});Object.defineProperty(Ve,"serializeProduction",{enumerable:!0,get:function(){return IY.serializeProduction}});var Kwe=dg();Object.defineProperty(Ve,"GAstVisitor",{enumerable:!0,get:function(){return Kwe.GAstVisitor}});function Uwe(){console.warn(`The clearCache function was 'soft' removed from the Chevrotain API. + It performs no action other than printing this message. + Please avoid using it as it will be completely removed in the future`)}Ve.clearCache=Uwe;var Hwe=mY();Object.defineProperty(Ve,"createSyntaxDiagramsCode",{enumerable:!0,get:function(){return Hwe.createSyntaxDiagramsCode}});var Gwe=function(){function t(){throw new Error(`The Parser class has been deprecated, use CstParser or EmbeddedActionsParser instead. +See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_7-0-0`)}return t}();Ve.Parser=Gwe});var bY=w((_tt,wY)=>{var yy=yY(),Ya=yy.createToken,BY=yy.tokenMatcher,fS=yy.Lexer,jwe=yy.EmbeddedActionsParser;wY.exports=t=>{let e=Ya({name:"LogicalOperator",pattern:fS.NA}),r=Ya({name:"Or",pattern:/\|/,categories:e}),i=Ya({name:"Xor",pattern:/\^/,categories:e}),n=Ya({name:"And",pattern:/&/,categories:e}),s=Ya({name:"Not",pattern:/!/}),o=Ya({name:"LParen",pattern:/\(/}),a=Ya({name:"RParen",pattern:/\)/}),l=Ya({name:"Query",pattern:t}),u=[Ya({name:"WhiteSpace",pattern:/\s+/,group:fS.SKIPPED}),r,i,n,o,a,s,e,l],g=new fS(u);class f extends jwe{constructor(p){super(u);this.RULE("expression",()=>this.SUBRULE(this.logicalExpression)),this.RULE("logicalExpression",()=>{let y=this.SUBRULE(this.atomicExpression);return this.MANY(()=>{let b=y,S=this.CONSUME(e),k=this.SUBRULE2(this.atomicExpression);BY(S,r)?y=T=>b(T)||k(T):BY(S,i)?y=T=>!!(b(T)^k(T)):y=T=>b(T)&&k(T)}),y}),this.RULE("atomicExpression",()=>this.OR([{ALT:()=>this.SUBRULE(this.parenthesisExpression)},{ALT:()=>{let{image:m}=this.CONSUME(l);return y=>y(m)}},{ALT:()=>{this.CONSUME(s);let m=this.SUBRULE(this.atomicExpression);return y=>!m(y)}}])),this.RULE("parenthesisExpression",()=>{let m;return this.CONSUME(o),m=this.SUBRULE(this.expression),this.CONSUME(a),m}),this.performSelfAnalysis()}}return{TinylogicLexer:g,TinylogicParser:f}}});var QY=w(wy=>{var Ywe=bY();wy.makeParser=(t=/[a-z]+/)=>{let{TinylogicLexer:e,TinylogicParser:r}=Ywe(t),i=new r;return(n,s)=>{let o=e.tokenize(n);return i.input=o.tokens,i.expression()(s)}};wy.parse=wy.makeParser()});var SY=w((Xtt,vY)=>{"use strict";vY.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}});var hS=w((Ztt,kY)=>{var Wp=SY(),xY={};for(let t of Object.keys(Wp))xY[Wp[t]]=t;var at={rgb:{channels:3,labels:"rgb"},hsl:{channels:3,labels:"hsl"},hsv:{channels:3,labels:"hsv"},hwb:{channels:3,labels:"hwb"},cmyk:{channels:4,labels:"cmyk"},xyz:{channels:3,labels:"xyz"},lab:{channels:3,labels:"lab"},lch:{channels:3,labels:"lch"},hex:{channels:1,labels:["hex"]},keyword:{channels:1,labels:["keyword"]},ansi16:{channels:1,labels:["ansi16"]},ansi256:{channels:1,labels:["ansi256"]},hcg:{channels:3,labels:["h","c","g"]},apple:{channels:3,labels:["r16","g16","b16"]},gray:{channels:1,labels:["gray"]}};kY.exports=at;for(let t of Object.keys(at)){if(!("channels"in at[t]))throw new Error("missing channels property: "+t);if(!("labels"in at[t]))throw new Error("missing channel labels property: "+t);if(at[t].labels.length!==at[t].channels)throw new Error("channel and label counts mismatch: "+t);let{channels:e,labels:r}=at[t];delete at[t].channels,delete at[t].labels,Object.defineProperty(at[t],"channels",{value:e}),Object.defineProperty(at[t],"labels",{value:r})}at.rgb.hsl=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,n=Math.min(e,r,i),s=Math.max(e,r,i),o=s-n,a,l;s===n?a=0:e===s?a=(r-i)/o:r===s?a=2+(i-e)/o:i===s&&(a=4+(e-r)/o),a=Math.min(a*60,360),a<0&&(a+=360);let c=(n+s)/2;return s===n?l=0:c<=.5?l=o/(s+n):l=o/(2-s-n),[a,l*100,c*100]};at.rgb.hsv=function(t){let e,r,i,n,s,o=t[0]/255,a=t[1]/255,l=t[2]/255,c=Math.max(o,a,l),u=c-Math.min(o,a,l),g=function(f){return(c-f)/6/u+1/2};return u===0?(n=0,s=0):(s=u/c,e=g(o),r=g(a),i=g(l),o===c?n=i-r:a===c?n=1/3+e-i:l===c&&(n=2/3+r-e),n<0?n+=1:n>1&&(n-=1)),[n*360,s*100,c*100]};at.rgb.hwb=function(t){let e=t[0],r=t[1],i=t[2],n=at.rgb.hsl(t)[0],s=1/255*Math.min(e,Math.min(r,i));return i=1-1/255*Math.max(e,Math.max(r,i)),[n,s*100,i*100]};at.rgb.cmyk=function(t){let e=t[0]/255,r=t[1]/255,i=t[2]/255,n=Math.min(1-e,1-r,1-i),s=(1-e-n)/(1-n)||0,o=(1-r-n)/(1-n)||0,a=(1-i-n)/(1-n)||0;return[s*100,o*100,a*100,n*100]};function qwe(t,e){return(t[0]-e[0])**2+(t[1]-e[1])**2+(t[2]-e[2])**2}at.rgb.keyword=function(t){let e=xY[t];if(e)return e;let r=Infinity,i;for(let n of Object.keys(Wp)){let s=Wp[n],o=qwe(t,s);oYN[0-9]{4}) - `(?[A-Z_]+)`\n\n(?(?:.(?!##))+)/gs;async function T8e(t){let r=`https://repo.yarnpkg.com/${ve.isTaggedYarnVersion(Kr)?Kr:await pm(t,"canary")}/packages/gatsby/content/advanced/error-codes.md`,i=await ir.get(r,{configuration:t});return new Map(Array.from(i.toString().matchAll(L8e),({groups:n})=>{if(!n)throw new Error("Assertion failed: Expected the match to have been successful");let s=vae(n.code);if(n.name!==s)throw new Error(`Assertion failed: Invalid error code data: Expected "${n.name}" to be named "${s}"`);return[n.code,n.details]}))}var dm=class extends Le{constructor(){super(...arguments);this.code=W.String({required:!1,validator:hp(fp(),[pp(/^YN[0-9]{4}$/)])});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins);if(typeof this.code!="undefined"){let r=vae(this.code),i=Ae.pretty(e,r,Ae.Type.CODE),n=this.cli.format().header(`${this.code} - ${i}`),o=(await T8e(e)).get(this.code),a=typeof o!="undefined"?Ae.jsonOrPretty(this.json,e,Ae.tuple(Ae.Type.MARKDOWN,{text:o,format:this.cli.format(),paragraphs:!0})):`This error code does not have a description.
+
+You can help us by editing this page on GitHub \u{1F642}:
+${Ae.jsonOrPretty(this.json,e,Ae.tuple(Ae.Type.URL,"https://github.com/yarnpkg/berry/blob/master/packages/gatsby/content/advanced/error-codes.md"))}
+`;this.json?this.context.stdout.write(`${JSON.stringify({code:this.code,name:r,details:a})}
+`):this.context.stdout.write(`${n}
+
+${a}
+`)}else{let r={children:ve.mapAndFilter(Object.entries($),([i,n])=>Number.isNaN(Number(i))?ve.mapAndFilter.skip:{label:qA(Number(i)),value:Ae.tuple(Ae.Type.CODE,n)})};As.emitTree(r,{configuration:e,stdout:this.context.stdout,json:this.json})}}};dm.paths=[["explain"]],dm.usage=Re.Usage({description:"explain an error code",details:`
+ When the code argument is specified, this command prints its name and its details.
+
+ When used without arguments, this command lists all error codes and their names.
+ `,examples:[["Explain an error code","$0 explain YN0006"],["List all error codes","$0 explain"]]});var Sae=dm;var kae=ge(rs()),Cm=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Print versions of a package from the whole project"});this.recursive=W.Boolean("-R,--recursive",!1,{description:"Print information for all packages, including transitive dependencies"});this.extra=W.Array("-X,--extra",[],{description:"An array of requests of extra data provided by plugins"});this.cache=W.Boolean("--cache",!1,{description:"Print information about the cache entry of a package (path, size, checksum)"});this.dependents=W.Boolean("--dependents",!1,{description:"Print all dependents for each matching package"});this.manifest=W.Boolean("--manifest",!1,{description:"Print data obtained by looking at the package archive (license, homepage, ...)"});this.nameOnly=W.Boolean("--name-only",!1,{description:"Only print the name for the matching packages"});this.virtuals=W.Boolean("--virtuals",!1,{description:"Print each instance of the virtual packages"});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i&&!this.all)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState();let s=new Set(this.extra);this.cache&&s.add("cache"),this.dependents&&s.add("dependents"),this.manifest&&s.add("manifest");let o=(k,{recursive:T})=>{let Y=k.anchoredLocator.locatorHash,j=new Map,Z=[Y];for(;Z.length>0;){let J=Z.shift();if(j.has(J))continue;let re=r.storedPackages.get(J);if(typeof re=="undefined")throw new Error("Assertion failed: Expected the package to be registered");if(j.set(J,re),P.isVirtualLocator(re)&&Z.push(P.devirtualizeLocator(re).locatorHash),!(!T&&J!==Y))for(let ee of re.dependencies.values()){let A=r.storedResolutions.get(ee.descriptorHash);if(typeof A=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");Z.push(A)}}return j.values()},a=({recursive:k})=>{let T=new Map;for(let Y of r.workspaces)for(let j of o(Y,{recursive:k}))T.set(j.locatorHash,j);return T.values()},l=({all:k,recursive:T})=>k&&T?r.storedPackages.values():k?a({recursive:T}):o(i,{recursive:T}),c=({all:k,recursive:T})=>{let Y=l({all:k,recursive:T}),j=this.patterns.map(re=>{let ee=P.parseLocator(re),A=kae.default.makeRe(P.stringifyIdent(ee)),oe=P.isVirtualLocator(ee),le=oe?P.devirtualizeLocator(ee):ee;return X=>{let O=P.stringifyIdent(X);if(!A.test(O))return!1;if(ee.reference==="unknown")return!0;let L=P.isVirtualLocator(X),pe=L?P.devirtualizeLocator(X):X;return!(oe&&L&&ee.reference!==X.reference||le.reference!==pe.reference)}}),Z=ve.sortMap([...Y],re=>P.stringifyLocator(re));return{selection:Z.filter(re=>j.length===0||j.some(ee=>ee(re))),sortedLookup:Z}},{selection:u,sortedLookup:g}=c({all:this.all,recursive:this.recursive});if(u.length===0)throw new Pe("No package matched your request");let f=new Map;if(this.dependents)for(let k of g)for(let T of k.dependencies.values()){let Y=r.storedResolutions.get(T.descriptorHash);if(typeof Y=="undefined")throw new Error("Assertion failed: Expected the resolution to be registered");ve.getArrayWithDefault(f,Y).push(k)}let h=new Map;for(let k of g){if(!P.isVirtualLocator(k))continue;let T=P.devirtualizeLocator(k);ve.getArrayWithDefault(h,T.locatorHash).push(k)}let p={},m={children:p},y=e.makeFetcher(),b={project:r,fetcher:y,cache:n,checksums:r.storedChecksums,report:new pi,cacheOptions:{skipIntegrityCheck:!0},skipIntegrityCheck:!0},S=[async(k,T,Y)=>{var J,re;if(!T.has("manifest"))return;let j=await y.fetch(k,b),Z;try{Z=await At.find(j.prefixPath,{baseFs:j.packageFs})}finally{(J=j.releaseFs)==null||J.call(j)}Y("Manifest",{License:Ae.tuple(Ae.Type.NO_HINT,Z.license),Homepage:Ae.tuple(Ae.Type.URL,(re=Z.raw.homepage)!=null?re:null)})},async(k,T,Y)=>{var A;if(!T.has("cache"))return;let j={mockedPackages:r.disabledLocators,unstablePackages:r.conditionalLocators},Z=(A=r.storedChecksums.get(k.locatorHash))!=null?A:null,J=n.getLocatorPath(k,Z,j),re;if(J!==null)try{re=K.statSync(J)}catch{}let ee=typeof re!="undefined"?[re.size,Ae.Type.SIZE]:void 0;Y("Cache",{Checksum:Ae.tuple(Ae.Type.NO_HINT,Z),Path:Ae.tuple(Ae.Type.PATH,J),Size:ee})}];for(let k of u){let T=P.isVirtualLocator(k);if(!this.virtuals&&T)continue;let Y={},j={value:[k,Ae.Type.LOCATOR],children:Y};if(p[P.stringifyLocator(k)]=j,this.nameOnly){delete j.children;continue}let Z=h.get(k.locatorHash);typeof Z!="undefined"&&(Y.Instances={label:"Instances",value:Ae.tuple(Ae.Type.NUMBER,Z.length)}),Y.Version={label:"Version",value:Ae.tuple(Ae.Type.NO_HINT,k.version)};let J=(ee,A)=>{let oe={};if(Y[ee]=oe,Array.isArray(A))oe.children=A.map(le=>({value:le}));else{let le={};oe.children=le;for(let[X,O]of Object.entries(A))typeof O!="undefined"&&(le[X]={label:X,value:O})}};if(!T){for(let ee of S)await ee(k,s,J);await e.triggerHook(ee=>ee.fetchPackageInfo,k,s,J)}k.bin.size>0&&!T&&J("Exported Binaries",[...k.bin.keys()].map(ee=>Ae.tuple(Ae.Type.PATH,ee)));let re=f.get(k.locatorHash);typeof re!="undefined"&&re.length>0&&J("Dependents",re.map(ee=>Ae.tuple(Ae.Type.LOCATOR,ee))),k.dependencies.size>0&&!T&&J("Dependencies",[...k.dependencies.values()].map(ee=>{var le;let A=r.storedResolutions.get(ee.descriptorHash),oe=typeof A!="undefined"&&(le=r.storedPackages.get(A))!=null?le:null;return Ae.tuple(Ae.Type.RESOLUTION,{descriptor:ee,locator:oe})})),k.peerDependencies.size>0&&T&&J("Peer dependencies",[...k.peerDependencies.values()].map(ee=>{var X,O;let A=k.dependencies.get(ee.identHash),oe=typeof A!="undefined"&&(X=r.storedResolutions.get(A.descriptorHash))!=null?X:null,le=oe!==null&&(O=r.storedPackages.get(oe))!=null?O:null;return Ae.tuple(Ae.Type.RESOLUTION,{descriptor:ee,locator:le})}))}As.emitTree(m,{configuration:e,json:this.json,stdout:this.context.stdout,separators:this.nameOnly?0:2})}};Cm.paths=[["info"]],Cm.usage=Re.Usage({description:"see information related to packages",details:"\n This command prints various information related to the specified packages, accepting glob patterns.\n\n By default, if the locator reference is missing, Yarn will default to print the information about all the matching direct dependencies of the package for the active workspace. To instead print all versions of the package that are direct dependencies of any of your workspaces, use the `-A,--all` flag. Adding the `-R,--recursive` flag will also report transitive dependencies.\n\n Some fields will be hidden by default in order to keep the output readable, but can be selectively displayed by using additional options (`--dependents`, `--manifest`, `--virtuals`, ...) described in the option descriptions.\n\n Note that this command will only print the information directly related to the selected packages - if you wish to know why the package is there in the first place, use `yarn why` which will do just that (it also provides a `-R,--recursive` flag that may be of some help).\n ",examples:[["Show information about Lodash","$0 info lodash"]]});var xae=Cm;var ab=ge(pc());Is();var mm=class extends Le{constructor(){super(...arguments);this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.immutable=W.Boolean("--immutable",{description:"Abort with an error exit code if the lockfile was to be modified"});this.immutableCache=W.Boolean("--immutable-cache",{description:"Abort with an error exit code if the cache folder was to be modified"});this.checkCache=W.Boolean("--check-cache",!1,{description:"Always refetch the packages and ensure that their checksums are consistent"});this.inlineBuilds=W.Boolean("--inline-builds",{description:"Verbosely print the output of the build steps of dependencies"});this.mode=W.String("--mode",{description:"Change what artifacts installs generate",validator:nn(di)});this.cacheFolder=W.String("--cache-folder",{hidden:!0});this.frozenLockfile=W.Boolean("--frozen-lockfile",{hidden:!0});this.ignoreEngines=W.Boolean("--ignore-engines",{hidden:!0});this.nonInteractive=W.Boolean("--non-interactive",{hidden:!0});this.preferOffline=W.Boolean("--prefer-offline",{hidden:!0});this.production=W.Boolean("--production",{hidden:!0});this.registry=W.String("--registry",{hidden:!0});this.silent=W.Boolean("--silent",{hidden:!0});this.networkTimeout=W.String("--network-timeout",{hidden:!0})}async execute(){var g;let e=await we.find(this.context.cwd,this.context.plugins);typeof this.inlineBuilds!="undefined"&&e.useWithSource("",{enableInlineBuilds:this.inlineBuilds},e.startingCwd,{overwrite:!0});let r=!!process.env.FUNCTION_TARGET||!!process.env.GOOGLE_RUNTIME,i=async(f,{error:h})=>{let p=await Je.start({configuration:e,stdout:this.context.stdout,includeFooter:!1},async m=>{h?m.reportError($.DEPRECATED_CLI_SETTINGS,f):m.reportWarning($.DEPRECATED_CLI_SETTINGS,f)});return p.hasErrors()?p.exitCode():null};if(typeof this.ignoreEngines!="undefined"){let f=await i("The --ignore-engines option is deprecated; engine checking isn't a core feature anymore",{error:!ab.default.VERCEL});if(f!==null)return f}if(typeof this.registry!="undefined"){let f=await i("The --registry option is deprecated; prefer setting npmRegistryServer in your .yarnrc.yml file",{error:!1});if(f!==null)return f}if(typeof this.preferOffline!="undefined"){let f=await i("The --prefer-offline flag is deprecated; use the --cached flag with 'yarn add' instead",{error:!ab.default.VERCEL});if(f!==null)return f}if(typeof this.production!="undefined"){let f=await i("The --production option is deprecated on 'install'; use 'yarn workspaces focus' instead",{error:!0});if(f!==null)return f}if(typeof this.nonInteractive!="undefined"){let f=await i("The --non-interactive option is deprecated",{error:!r});if(f!==null)return f}if(typeof this.frozenLockfile!="undefined"&&(await i("The --frozen-lockfile option is deprecated; use --immutable and/or --immutable-cache instead",{error:!1}),this.immutable=this.frozenLockfile),typeof this.cacheFolder!="undefined"){let f=await i("The cache-folder option has been deprecated; use rc settings instead",{error:!ab.default.NETLIFY});if(f!==null)return f}let n=this.mode===di.UpdateLockfile;if(n&&(this.immutable||this.immutableCache))throw new Pe(`${Ae.pretty(e,"--immutable",Ae.Type.CODE)} and ${Ae.pretty(e,"--immutable-cache",Ae.Type.CODE)} cannot be used with ${Ae.pretty(e,"--mode=update-lockfile",Ae.Type.CODE)}`);let s=((g=this.immutable)!=null?g:e.get("enableImmutableInstalls"))&&!n,o=this.immutableCache&&!n;if(e.projectCwd!==null){let f=await Je.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async h=>{await O8e(e,s)&&(h.reportInfo($.AUTOMERGE_SUCCESS,"Automatically fixed merge conflicts \u{1F44D}"),h.reportSeparator())});if(f.hasErrors())return f.exitCode()}if(e.projectCwd!==null&&typeof e.sources.get("nodeLinker")=="undefined"){let f=e.projectCwd,h;try{h=await K.readFilePromise(x.join(f,Pt.lockfile),"utf8")}catch{}if(h==null?void 0:h.includes("yarn lockfile v1")){let p=await Je.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async m=>{m.reportInfo($.AUTO_NM_SUCCESS,"Migrating from Yarn 1; automatically enabling the compatibility node-modules linker \u{1F44D}"),m.reportSeparator(),e.use("",{nodeLinker:"node-modules"},f,{overwrite:!0}),await we.updateConfiguration(f,{nodeLinker:"node-modules"})});if(p.hasErrors())return p.exitCode()}}if(e.projectCwd!==null){let f=await Je.start({configuration:e,json:this.json,stdout:this.context.stdout,includeFooter:!1},async h=>{var p;((p=we.telemetry)==null?void 0:p.isNew)&&(h.reportInfo($.TELEMETRY_NOTICE,"Yarn will periodically gather anonymous telemetry: https://yarnpkg.com/advanced/telemetry"),h.reportInfo($.TELEMETRY_NOTICE,`Run ${Ae.pretty(e,"yarn config set --home enableTelemetry 0",Ae.Type.CODE)} to disable`),h.reportSeparator())});if(f.hasErrors())return f.exitCode()}let{project:a,workspace:l}=await ze.find(e,this.context.cwd),c=await Nt.find(e,{immutable:o,check:this.checkCache});if(!l)throw new ht(a.cwd,this.context.cwd);return await a.restoreInstallState({restoreResolutions:!1}),(await Je.start({configuration:e,json:this.json,stdout:this.context.stdout,includeLogs:!0},async f=>{await a.install({cache:c,report:f,immutable:s,mode:this.mode})})).exitCode()}};mm.paths=[["install"],Re.Default],mm.usage=Re.Usage({description:"install the project dependencies",details:`
+ This command sets up your project if needed. The installation is split into four different steps that each have their own characteristics:
+
+ - **Resolution:** First the package manager will resolve your dependencies. The exact way a dependency version is privileged over another isn't standardized outside of the regular semver guarantees. If a package doesn't resolve to what you would expect, check that all dependencies are correctly declared (also check our website for more information: ).
+
+ - **Fetch:** Then we download all the dependencies if needed, and make sure that they're all stored within our cache (check the value of \`cacheFolder\` in \`yarn config\` to see where the cache files are stored).
+
+ - **Link:** Then we send the dependency tree information to internal plugins tasked with writing them on the disk in some form (for example by generating the .pnp.cjs file you might know).
+
+ - **Build:** Once the dependency tree has been written on the disk, the package manager will now be free to run the build scripts for all packages that might need it, in a topological order compatible with the way they depend on one another. See https://yarnpkg.com/advanced/lifecycle-scripts for detail.
+
+ Note that running this command is not part of the recommended workflow. Yarn supports zero-installs, which means that as long as you store your cache and your .pnp.cjs file inside your repository, everything will work without requiring any install right after cloning your repository or switching branches.
+
+ If the \`--immutable\` option is set (defaults to true on CI), Yarn will abort with an error exit code if the lockfile was to be modified (other paths can be added using the \`immutablePatterns\` configuration setting). For backward compatibility we offer an alias under the name of \`--frozen-lockfile\`, but it will be removed in a later release.
+
+ If the \`--immutable-cache\` option is set, Yarn will abort with an error exit code if the cache folder was to be modified (either because files would be added, or because they'd be removed).
+
+ If the \`--check-cache\` option is set, Yarn will always refetch the packages and will ensure that their checksum matches what's 1/ described in the lockfile 2/ inside the existing cache files (if present). This is recommended as part of your CI workflow if you're both following the Zero-Installs model and accepting PRs from third-parties, as they'd otherwise have the ability to alter the checked-in packages before submitting them.
+
+ If the \`--inline-builds\` option is set, Yarn will verbosely print the output of the build steps of your dependencies (instead of writing them into individual files). This is likely useful mostly for debug purposes only when using Docker-like environments.
+
+ If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:
+
+ - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.
+
+ - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.
+ `,examples:[["Install the project","$0 install"],["Validate a project when using Zero-Installs","$0 install --immutable --immutable-cache"],["Validate a project when using Zero-Installs (slightly safer if you accept external PRs)","$0 install --immutable --immutable-cache --check-cache"]]});var Pae=mm,M8e="|||||||",K8e=">>>>>>>",U8e="=======",Dae="<<<<<<<";async function O8e(t,e){if(!t.projectCwd)return!1;let r=x.join(t.projectCwd,t.get("lockfileFilename"));if(!await K.existsPromise(r))return!1;let i=await K.readFilePromise(r,"utf8");if(!i.includes(Dae))return!1;if(e)throw new ct($.AUTOMERGE_IMMUTABLE,"Cannot autofix a lockfile when running an immutable install");let[n,s]=H8e(i),o,a;try{o=Qi(n),a=Qi(s)}catch(c){throw new ct($.AUTOMERGE_FAILED_TO_PARSE,"The individual variants of the lockfile failed to parse")}let l=N(N({},o),a);for(let[c,u]of Object.entries(l))typeof u=="string"&&delete l[c];return await K.changeFilePromise(r,La(l),{automaticNewlines:!0}),!0}function H8e(t){let e=[[],[]],r=t.split(/\r?\n/g),i=!1;for(;r.length>0;){let n=r.shift();if(typeof n=="undefined")throw new Error("Assertion failed: Some lines should remain");if(n.startsWith(Dae)){for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s===U8e){i=!1;break}else if(i||s.startsWith(M8e)){i=!0;continue}else e[0].push(s)}for(;r.length>0;){let s=r.shift();if(typeof s=="undefined")throw new Error("Assertion failed: Some lines should remain");if(s.startsWith(K8e))break;e[1].push(s)}}else e[0].push(n),e[1].push(n)}return[e[0].join(`
+`),e[1].join(`
+`)]}var Em=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Link all workspaces belonging to the target project to the current one"});this.private=W.Boolean("-p,--private",!1,{description:"Also link private workspaces belonging to the target project to the current one"});this.relative=W.Boolean("-r,--relative",!1,{description:"Link workspaces using relative paths instead of absolute paths"});this.destination=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=x.resolve(this.context.cwd,H.toPortablePath(this.destination)),o=await we.find(s,this.context.plugins,{useRc:!1,strict:!1}),{project:a,workspace:l}=await ze.find(o,s);if(r.cwd===a.cwd)throw new Pe("Invalid destination; Can't link the project to itself");if(!l)throw new ht(a.cwd,s);let c=r.topLevelWorkspace,u=[];if(this.all){for(let f of a.workspaces)f.manifest.name&&(!f.manifest.private||this.private)&&u.push(f);if(u.length===0)throw new Pe("No workspace found to be linked in the target project")}else{if(!l.manifest.name)throw new Pe("The target workspace doesn't have a name and thus cannot be linked");if(l.manifest.private&&!this.private)throw new Pe("The target workspace is marked private - use the --private flag to link it anyway");u.push(l)}for(let f of u){let h=P.stringifyIdent(f.locator),p=this.relative?x.relative(r.cwd,f.cwd):f.cwd;c.manifest.resolutions.push({pattern:{descriptor:{fullName:h}},reference:`portal:${p}`})}return(await Je.start({configuration:e,stdout:this.context.stdout},async f=>{await r.install({cache:n,report:f})})).exitCode()}};Em.paths=[["link"]],Em.usage=Re.Usage({description:"connect the local project to another one",details:"\n This command will set a new `resolutions` field in the project-level manifest and point it to the workspace at the specified location (even if part of another project).\n ",examples:[["Register a remote workspace for use in the current project","$0 link ~/ts-loader"],["Register all workspaces from a remote project for use in the current project","$0 link ~/jest --all"]]});var Rae=Em;var Im=class extends Le{constructor(){super(...arguments);this.args=W.Proxy()}async execute(){return this.cli.run(["exec","node",...this.args])}};Im.paths=[["node"]],Im.usage=Re.Usage({description:"run node with the hook already setup",details:`
+ This command simply runs Node. It also makes sure to call it in a way that's compatible with the current project (for example, on PnP projects the environment will be setup in such a way that PnP will be correctly injected into the environment).
+
+ The Node process will use the exact same version of Node as the one used to run Yarn itself, which might be a good way to ensure that your commands always use a consistent Node version.
+ `,examples:[["Run a Node script","$0 node ./my-script.js"]]});var Fae=Im;var Gae=ge(require("os"));var Lae=ge(require("os"));var G8e="https://raw.githubusercontent.com/yarnpkg/berry/master/plugins.yml";async function wu(t){let e=await ir.get(G8e,{configuration:t});return Qi(e.toString())}var ym=class extends Le{constructor(){super(...arguments);this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins);return(await Je.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{let n=await wu(e);for(let s of Object.entries(n)){let[l,o]=s,a=o,{experimental:c}=a,u=Tr(a,["experimental"]);let g=l;c&&(g+=" [experimental]"),i.reportJson(N({name:l,experimental:c},u)),i.reportInfo(null,g)}})).exitCode()}};ym.paths=[["plugin","list"]],ym.usage=Re.Usage({category:"Plugin-related commands",description:"list the available official plugins",details:"\n This command prints the plugins available directly from the Yarn repository. Only those plugins can be referenced by name in `yarn plugin import`.\n ",examples:[["List the official plugins","$0 plugin list"]]});var Nae=ym;var j8e=/^[0-9]+$/;function Tae(t){return j8e.test(t)?`pull/${t}/head`:t}var Y8e=({repository:t,branch:e},r)=>[["git","init",H.fromPortablePath(r)],["git","remote","add","origin",t],["git","fetch","origin","--depth=1",Tae(e)],["git","reset","--hard","FETCH_HEAD"]],q8e=({branch:t})=>[["git","fetch","origin","--depth=1",Tae(t),"--force"],["git","reset","--hard","FETCH_HEAD"],["git","clean","-dfx"]],J8e=({plugins:t,noMinify:e},r)=>[["yarn","build:cli",...new Array().concat(...t.map(i=>["--plugin",x.resolve(r,i)])),...e?["--no-minify"]:[],"|"]],wm=class extends Le{constructor(){super(...arguments);this.installPath=W.String("--path",{description:"The path where the repository should be cloned to"});this.repository=W.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=W.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.plugins=W.Array("--plugin",[],{description:"An array of additional plugins that should be included in the bundle"});this.noMinify=W.Boolean("--no-minify",!1,{description:"Build a bundle for development (debugging) - non-minified and non-mangled"});this.force=W.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.skipPlugins=W.Boolean("--skip-plugins",!1,{description:"Skip updating the contrib plugins"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r}=await ze.find(e,this.context.cwd),i=typeof this.installPath!="undefined"?x.resolve(this.context.cwd,H.toPortablePath(this.installPath)):x.resolve(H.toPortablePath((0,Lae.tmpdir)()),"yarnpkg-sources",Dn.makeHash(this.repository).slice(0,6));return(await Je.start({configuration:e,stdout:this.context.stdout},async s=>{await _N(this,{configuration:e,report:s,target:i}),s.reportSeparator(),s.reportInfo($.UNNAMED,"Building a fresh bundle"),s.reportSeparator(),await Bm(J8e(this,i),{configuration:e,context:this.context,target:i}),s.reportSeparator();let o=x.resolve(i,"packages/yarnpkg-cli/bundles/yarn.js"),a=await K.readFilePromise(o);await WN(e,"sources",a,{report:s}),this.skipPlugins||await W8e(this,{project:r,report:s,target:i})})).exitCode()}};wm.paths=[["set","version","from","sources"]],wm.usage=Re.Usage({description:"build Yarn from master",details:`
+ This command will clone the Yarn repository into a temporary folder, then build it. The resulting bundle will then be copied into the local project.
+
+ By default, it also updates all contrib plugins to the same commit the bundle is built from. This behavior can be disabled by using the \`--skip-plugins\` flag.
+ `,examples:[["Build Yarn from master","$0 set version from sources"]]});var Oae=wm;async function Bm(t,{configuration:e,context:r,target:i}){for(let[n,...s]of t){let o=s[s.length-1]==="|";if(o&&s.pop(),o)await Fr.pipevp(n,s,{cwd:i,stdin:r.stdin,stdout:r.stdout,stderr:r.stderr,strict:!0});else{r.stdout.write(`${Ae.pretty(e,` $ ${[n,...s].join(" ")}`,"grey")}
+`);try{await Fr.execvp(n,s,{cwd:i,strict:!0})}catch(a){throw r.stdout.write(a.stdout||a.stack),a}}}}async function _N(t,{configuration:e,report:r,target:i}){let n=!1;if(!t.force&&K.existsSync(x.join(i,".git"))){r.reportInfo($.UNNAMED,"Fetching the latest commits"),r.reportSeparator();try{await Bm(q8e(t),{configuration:e,context:t.context,target:i}),n=!0}catch(s){r.reportSeparator(),r.reportWarning($.UNNAMED,"Repository update failed; we'll try to regenerate it")}}n||(r.reportInfo($.UNNAMED,"Cloning the remote repository"),r.reportSeparator(),await K.removePromise(i),await K.mkdirPromise(i,{recursive:!0}),await Bm(Y8e(t,i),{configuration:e,context:t.context,target:i}))}async function W8e(t,{project:e,report:r,target:i}){let n=await wu(e.configuration),s=new Set(Object.keys(n));for(let o of e.configuration.plugins.keys())!s.has(o)||await zN(o,t,{project:e,report:r,target:i})}var Mae=ge(ri()),Kae=ge(require("url")),Uae=ge(require("vm"));var bm=class extends Le{constructor(){super(...arguments);this.name=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins);return(await Je.start({configuration:e,stdout:this.context.stdout},async i=>{let{project:n}=await ze.find(e,this.context.cwd),s,o;if(this.name.match(/^\.{0,2}[\\/]/)||H.isAbsolute(this.name)){let a=x.resolve(this.context.cwd,H.toPortablePath(this.name));i.reportInfo($.UNNAMED,`Reading ${Ae.pretty(e,a,Ae.Type.PATH)}`),s=x.relative(n.cwd,a),o=await K.readFilePromise(a)}else{let a;if(this.name.match(/^https?:/)){try{new Kae.URL(this.name)}catch{throw new ct($.INVALID_PLUGIN_REFERENCE,`Plugin specifier "${this.name}" is neither a plugin name nor a valid url`)}s=this.name,a=this.name}else{let l=P.parseLocator(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-"));if(l.reference!=="unknown"&&!Mae.default.valid(l.reference))throw new ct($.UNNAMED,"Official plugins only accept strict version references. Use an explicit URL if you wish to download them from another location.");let c=P.stringifyIdent(l),u=await wu(e);if(!Object.prototype.hasOwnProperty.call(u,c))throw new ct($.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${c}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be referenced by their name; any other plugin will have to be referenced through its public url (for example https://github.com/yarnpkg/berry/raw/master/packages/plugin-typescript/bin/%40yarnpkg/plugin-typescript.js).`);s=c,a=u[c].url,l.reference!=="unknown"?a=a.replace(/\/master\//,`/${c}/${l.reference}/`):Kr!==null&&(a=a.replace(/\/master\//,`/@yarnpkg/cli/${Kr}/`))}i.reportInfo($.UNNAMED,`Downloading ${Ae.pretty(e,a,"green")}`),o=await ir.get(a,{configuration:e})}await VN(s,o,{project:n,report:i})})).exitCode()}};bm.paths=[["plugin","import"]],bm.usage=Re.Usage({category:"Plugin-related commands",description:"download a plugin",details:`
+ This command downloads the specified plugin from its remote location and updates the configuration to reference it in further CLI invocations.
+
+ Three types of plugin references are accepted:
+
+ - If the plugin is stored within the Yarn repository, it can be referenced by name.
+ - Third-party plugins can be referenced directly through their public urls.
+ - Local plugins can be referenced by their path on the disk.
+
+ Plugins cannot be downloaded from the npm registry, and aren't allowed to have dependencies (they need to be bundled into a single file, possibly thanks to the \`@yarnpkg/builder\` package).
+ `,examples:[['Download and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import @yarnpkg/plugin-exec"],['Download and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import exec"],["Download and activate a community plugin","$0 plugin import https://example.org/path/to/plugin.js"],["Activate a local plugin","$0 plugin import ./path/to/plugin.js"]]});var Hae=bm;async function VN(t,e,{project:r,report:i}){let{configuration:n}=r,s={},o={exports:s};(0,Uae.runInNewContext)(e.toString(),{module:o,exports:s});let a=o.exports.name,l=`.yarn/plugins/${a}.cjs`,c=x.resolve(r.cwd,l);i.reportInfo($.UNNAMED,`Saving the new plugin in ${Ae.pretty(n,l,"magenta")}`),await K.mkdirPromise(x.dirname(c),{recursive:!0}),await K.writeFilePromise(c,e);let u={path:l,spec:t};await we.updateConfiguration(r.cwd,g=>{let f=[],h=!1;for(let p of g.plugins||[]){let m=typeof p!="string"?p.path:p,y=x.resolve(r.cwd,H.toPortablePath(m)),{name:b}=ve.dynamicRequire(y);b!==a?f.push(p):(f.push(u),h=!0)}return h||f.push(u),ie(N({},g),{plugins:f})})}var z8e=({pluginName:t,noMinify:e},r)=>[["yarn",`build:${t}`,...e?["--no-minify"]:[],"|"]],Qm=class extends Le{constructor(){super(...arguments);this.installPath=W.String("--path",{description:"The path where the repository should be cloned to"});this.repository=W.String("--repository","https://github.com/yarnpkg/berry.git",{description:"The repository that should be cloned"});this.branch=W.String("--branch","master",{description:"The branch of the repository that should be cloned"});this.noMinify=W.Boolean("--no-minify",!1,{description:"Build a plugin for development (debugging) - non-minified and non-mangled"});this.force=W.Boolean("-f,--force",!1,{description:"Always clone the repository instead of trying to fetch the latest commits"});this.name=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),r=typeof this.installPath!="undefined"?x.resolve(this.context.cwd,H.toPortablePath(this.installPath)):x.resolve(H.toPortablePath((0,Gae.tmpdir)()),"yarnpkg-sources",Dn.makeHash(this.repository).slice(0,6));return(await Je.start({configuration:e,stdout:this.context.stdout},async n=>{let{project:s}=await ze.find(e,this.context.cwd),o=P.parseIdent(this.name.replace(/^((@yarnpkg\/)?plugin-)?/,"@yarnpkg/plugin-")),a=P.stringifyIdent(o),l=await wu(e);if(!Object.prototype.hasOwnProperty.call(l,a))throw new ct($.PLUGIN_NAME_NOT_FOUND,`Couldn't find a plugin named "${a}" on the remote registry. Note that only the plugins referenced on our website (https://github.com/yarnpkg/berry/blob/master/plugins.yml) can be built and imported from sources.`);let c=a;await _N(this,{configuration:e,report:n,target:r}),await zN(c,this,{project:s,report:n,target:r})})).exitCode()}};Qm.paths=[["plugin","import","from","sources"]],Qm.usage=Re.Usage({category:"Plugin-related commands",description:"build a plugin from sources",details:`
+ This command clones the Yarn repository into a temporary folder, builds the specified contrib plugin and updates the configuration to reference it in further CLI invocations.
+
+ The plugins can be referenced by their short name if sourced from the official Yarn repository.
+ `,examples:[['Build and activate the "@yarnpkg/plugin-exec" plugin',"$0 plugin import from sources @yarnpkg/plugin-exec"],['Build and activate the "@yarnpkg/plugin-exec" plugin (shorthand)',"$0 plugin import from sources exec"]]});var jae=Qm;async function zN(t,{context:e,noMinify:r},{project:i,report:n,target:s}){let o=t.replace(/@yarnpkg\//,""),{configuration:a}=i;n.reportSeparator(),n.reportInfo($.UNNAMED,`Building a fresh ${o}`),n.reportSeparator(),await Bm(z8e({pluginName:o,noMinify:r},s),{configuration:a,context:e,target:s}),n.reportSeparator();let l=x.resolve(s,`packages/${o}/bundles/${t}.js`),c=await K.readFilePromise(l);await VN(t,c,{project:i,report:n})}var vm=class extends Le{constructor(){super(...arguments);this.name=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r}=await ze.find(e,this.context.cwd);return(await Je.start({configuration:e,stdout:this.context.stdout},async n=>{let s=this.name,o=P.parseIdent(s);if(!e.plugins.has(s))throw new Pe(`${P.prettyIdent(e,o)} isn't referenced by the current configuration`);let a=`.yarn/plugins/${s}.cjs`,l=x.resolve(r.cwd,a);K.existsSync(l)&&(n.reportInfo($.UNNAMED,`Removing ${Ae.pretty(e,a,Ae.Type.PATH)}...`),await K.removePromise(l)),n.reportInfo($.UNNAMED,"Updating the configuration..."),await we.updateConfiguration(r.cwd,c=>{if(!Array.isArray(c.plugins))return c;let u=c.plugins.filter(g=>g.path!==a);return c.plugins.length===u.length?c:ie(N({},c),{plugins:u})})})).exitCode()}};vm.paths=[["plugin","remove"]],vm.usage=Re.Usage({category:"Plugin-related commands",description:"remove a plugin",details:`
+ This command deletes the specified plugin from the .yarn/plugins folder and removes it from the configuration.
+
+ **Note:** The plugins have to be referenced by their name property, which can be obtained using the \`yarn plugin runtime\` command. Shorthands are not allowed.
+ `,examples:[["Remove a plugin imported from the Yarn repository","$0 plugin remove @yarnpkg/plugin-typescript"],["Remove a plugin imported from a local file","$0 plugin remove my-local-plugin"]]});var Yae=vm;var Sm=class extends Le{constructor(){super(...arguments);this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins);return(await Je.start({configuration:e,json:this.json,stdout:this.context.stdout},async i=>{for(let n of e.plugins.keys()){let s=this.context.plugins.plugins.has(n),o=n;s&&(o+=" [builtin]"),i.reportJson({name:n,builtin:s}),i.reportInfo(null,`${o}`)}})).exitCode()}};Sm.paths=[["plugin","runtime"]],Sm.usage=Re.Usage({category:"Plugin-related commands",description:"list the active plugins",details:`
+ This command prints the currently active plugins. Will be displayed both builtin plugins and external plugins.
+ `,examples:[["List the currently active plugins","$0 plugin runtime"]]});var qae=Sm;var km=class extends Le{constructor(){super(...arguments);this.idents=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);let s=new Set;for(let a of this.idents)s.add(P.parseIdent(a).identHash);if(await r.restoreInstallState({restoreResolutions:!1}),await r.resolveEverything({cache:n,report:new pi}),s.size>0)for(let a of r.storedPackages.values())s.has(a.identHash)&&r.storedBuildState.delete(a.locatorHash);else r.storedBuildState.clear();return(await Je.start({configuration:e,stdout:this.context.stdout,includeLogs:!this.context.quiet},async a=>{await r.install({cache:n,report:a})})).exitCode()}};km.paths=[["rebuild"]],km.usage=Re.Usage({description:"rebuild the project's native packages",details:`
+ This command will automatically cause Yarn to forget about previous compilations of the given packages and to run them again.
+
+ Note that while Yarn forgets the compilation, the previous artifacts aren't erased from the filesystem and may affect the next builds (in good or bad). To avoid this, you may remove the .yarn/unplugged folder, or any other relevant location where packages might have been stored (Yarn may offer a way to do that automatically in the future).
+
+ By default all packages will be rebuilt, but you can filter the list by specifying the names of the packages you want to clear from memory.
+ `,examples:[["Rebuild all packages","$0 rebuild"],["Rebuild fsevents only","$0 rebuild fsevents"]]});var Jae=km;var XN=ge(rs());Is();var xm=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Apply the operation to all workspaces from the current project"});this.mode=W.String("--mode",{description:"Change what artifacts installs generate",validator:nn(di)});this.patterns=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=this.all?r.workspaces:[i],o=[Hr.REGULAR,Hr.DEVELOPMENT,Hr.PEER],a=[],l=!1,c=[];for(let h of this.patterns){let p=!1,m=P.parseIdent(h);for(let y of s){let b=[...y.manifest.peerDependenciesMeta.keys()];for(let S of(0,XN.default)(b,h))y.manifest.peerDependenciesMeta.delete(S),l=!0,p=!0;for(let S of o){let k=y.manifest.getForScope(S),T=[...k.values()].map(Y=>P.stringifyIdent(Y));for(let Y of(0,XN.default)(T,P.stringifyIdent(m))){let{identHash:j}=P.parseIdent(Y),Z=k.get(j);if(typeof Z=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");y.manifest[S].delete(j),c.push([y,S,Z]),l=!0,p=!0}}}p||a.push(h)}let u=a.length>1?"Patterns":"Pattern",g=a.length>1?"don't":"doesn't",f=this.all?"any":"this";if(a.length>0)throw new Pe(`${u} ${Ae.prettyList(e,a,Di.CODE)} ${g} match any packages referenced by ${f} workspace`);return l?(await e.triggerMultipleHooks(p=>p.afterWorkspaceDependencyRemoval,c),(await Je.start({configuration:e,stdout:this.context.stdout},async p=>{await r.install({cache:n,report:p,mode:this.mode})})).exitCode()):0}};xm.paths=[["remove"]],xm.usage=Re.Usage({description:"remove dependencies from the project",details:`
+ This command will remove the packages matching the specified patterns from the current workspace.
+
+ If the \`--mode=\` option is set, Yarn will change which artifacts are generated. The modes currently supported are:
+
+ - \`skip-build\` will not run the build scripts at all. Note that this is different from setting \`enableScripts\` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.
+
+ - \`update-lockfile\` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.
+
+ This command accepts glob patterns as arguments (if valid Idents and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.
+ `,examples:[["Remove a dependency from the current project","$0 remove lodash"],["Remove a dependency from all workspaces at once","$0 remove lodash --all"],["Remove all dependencies starting with `eslint-`","$0 remove 'eslint-*'"],["Remove all dependencies with the `@babel` scope","$0 remove '@babel/*'"],["Remove all dependencies matching `react-dom` or `react-helmet`","$0 remove 'react-{dom,helmet}'"]]});var Wae=xm;var zae=ge(require("util")),Ab=class extends Le{async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);return(await Je.start({configuration:e,stdout:this.context.stdout},async s=>{let o=i.manifest.scripts,a=ve.sortMap(o.keys(),u=>u),l={breakLength:Infinity,colors:e.get("enableColors"),maxArrayLength:2},c=a.reduce((u,g)=>Math.max(u,g.length),0);for(let[u,g]of o.entries())s.reportInfo(null,`${u.padEnd(c," ")} ${(0,zae.inspect)(g,l)}`)})).exitCode()}};Ab.paths=[["run"]];var _ae=Ab;var Pm=class extends Le{constructor(){super(...arguments);this.inspect=W.String("--inspect",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.inspectBrk=W.String("--inspect-brk",!1,{tolerateBoolean:!0,description:"Forwarded to the underlying Node process when executing a binary"});this.topLevel=W.Boolean("-T,--top-level",!1,{description:"Check the root workspace for scripts and/or binaries instead of the current one"});this.binariesOnly=W.Boolean("-B,--binaries-only",!1,{description:"Ignore any user defined scripts and only check for binaries"});this.silent=W.Boolean("--silent",{hidden:!0});this.scriptName=W.String();this.args=W.Proxy()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i,locator:n}=await ze.find(e,this.context.cwd);await r.restoreInstallState();let s=this.topLevel?r.topLevelWorkspace.anchoredLocator:n;if(!this.binariesOnly&&await Zt.hasPackageScript(s,this.scriptName,{project:r}))return await Zt.executePackageScript(s,this.scriptName,this.args,{project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr});let o=await Zt.getPackageAccessibleBinaries(s,{project:r});if(o.get(this.scriptName)){let l=[];return this.inspect&&(typeof this.inspect=="string"?l.push(`--inspect=${this.inspect}`):l.push("--inspect")),this.inspectBrk&&(typeof this.inspectBrk=="string"?l.push(`--inspect-brk=${this.inspectBrk}`):l.push("--inspect-brk")),await Zt.executePackageAccessibleBinary(s,this.scriptName,this.args,{cwd:this.context.cwd,project:r,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,nodeArgs:l,packageAccessibleBinaries:o})}if(!this.topLevel&&!this.binariesOnly&&i&&this.scriptName.includes(":")){let c=(await Promise.all(r.workspaces.map(async u=>u.manifest.scripts.has(this.scriptName)?u:null))).filter(u=>u!==null);if(c.length===1)return await Zt.executeWorkspaceScript(c[0],this.scriptName,this.args,{stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})}if(this.topLevel)throw this.scriptName==="node-gyp"?new Pe(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${P.prettyLocator(e,n)}). This typically happens because some package depends on "node-gyp" to build itself, but didn't list it in their dependencies. To fix that, please run "yarn add node-gyp" into your top-level workspace. You also can open an issue on the repository of the specified package to suggest them to use an optional peer dependency.`):new Pe(`Couldn't find a script name "${this.scriptName}" in the top-level (used by ${P.prettyLocator(e,n)}).`);{if(this.scriptName==="global")throw new Pe("The 'yarn global' commands have been removed in 2.x - consider using 'yarn dlx' or a third-party plugin instead");let l=[this.scriptName].concat(this.args);for(let[c,u]of Tf)for(let g of u)if(l.length>=g.length&&JSON.stringify(l.slice(0,g.length))===JSON.stringify(g))throw new Pe(`Couldn't find a script named "${this.scriptName}", but a matching command can be found in the ${c} plugin. You can install it with "yarn plugin import ${c}".`);throw new Pe(`Couldn't find a script named "${this.scriptName}".`)}}};Pm.paths=[["run"]],Pm.usage=Re.Usage({description:"run a script defined in the package.json",details:`
+ This command will run a tool. The exact tool that will be executed will depend on the current state of your workspace:
+
+ - If the \`scripts\` field from your local package.json contains a matching script name, its definition will get executed.
+
+ - Otherwise, if one of the local workspace's dependencies exposes a binary with a matching name, this binary will get executed.
+
+ - Otherwise, if the specified name contains a colon character and if one of the workspaces in the project contains exactly one script with a matching name, then this script will get executed.
+
+ Whatever happens, the cwd of the spawned process will be the workspace that declares the script (which makes it possible to call commands cross-workspaces using the third syntax).
+ `,examples:[["Run the tests from the local workspace","$0 run test"],['Same thing, but without the "run" keyword',"$0 test"],["Inspect Webpack while running","$0 run --inspect-brk webpack"]]});var Vae=Pm;var Dm=class extends Le{constructor(){super(...arguments);this.save=W.Boolean("-s,--save",!1,{description:"Persist the resolution inside the top-level manifest"});this.descriptor=W.String();this.resolution=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(await r.restoreInstallState({restoreResolutions:!1}),!i)throw new ht(r.cwd,this.context.cwd);let s=P.parseDescriptor(this.descriptor,!0),o=P.makeDescriptor(s,this.resolution);return r.storedDescriptors.set(s.descriptorHash,s),r.storedDescriptors.set(o.descriptorHash,o),r.resolutionAliases.set(s.descriptorHash,o.descriptorHash),(await Je.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};Dm.paths=[["set","resolution"]],Dm.usage=Re.Usage({description:"enforce a package resolution",details:'\n This command updates the resolution table so that `descriptor` is resolved by `resolution`.\n\n Note that by default this command only affect the current resolution table - meaning that this "manual override" will disappear if you remove the lockfile, or if the package disappear from the table. If you wish to make the enforced resolution persist whatever happens, add the `-s,--save` flag which will also edit the `resolutions` field from your top-level manifest.\n\n Note that no attempt is made at validating that `resolution` is a valid resolution entry for `descriptor`.\n ',examples:[["Force all instances of lodash@npm:^1.2.3 to resolve to 1.5.0","$0 set resolution lodash@npm:^1.2.3 1.5.0"]]});var Xae=Dm;var Zae=ge(rs()),Rm=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Unlink all workspaces belonging to the target project from the current one"});this.leadingArguments=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);let s=r.topLevelWorkspace,o=new Set;if(this.leadingArguments.length===0&&this.all)for(let{pattern:l,reference:c}of s.manifest.resolutions)c.startsWith("portal:")&&o.add(l.descriptor.fullName);if(this.leadingArguments.length>0)for(let l of this.leadingArguments){let c=x.resolve(this.context.cwd,H.toPortablePath(l));if(ve.isPathLike(l)){let u=await we.find(c,this.context.plugins,{useRc:!1,strict:!1}),{project:g,workspace:f}=await ze.find(u,c);if(!f)throw new ht(g.cwd,c);if(this.all){for(let h of g.workspaces)h.manifest.name&&o.add(P.stringifyIdent(h.locator));if(o.size===0)throw new Pe("No workspace found to be unlinked in the target project")}else{if(!f.manifest.name)throw new Pe("The target workspace doesn't have a name and thus cannot be unlinked");o.add(P.stringifyIdent(f.locator))}}else{let u=[...s.manifest.resolutions.map(({pattern:g})=>g.descriptor.fullName)];for(let g of(0,Zae.default)(u,l))o.add(g)}}return s.manifest.resolutions=s.manifest.resolutions.filter(({pattern:l})=>!o.has(l.descriptor.fullName)),(await Je.start({configuration:e,stdout:this.context.stdout},async l=>{await r.install({cache:n,report:l})})).exitCode()}};Rm.paths=[["unlink"]],Rm.usage=Re.Usage({description:"disconnect the local project from another one",details:`
+ This command will remove any resolutions in the project-level manifest that would have been added via a yarn link with similar arguments.
+ `,examples:[["Unregister a remote workspace in the current project","$0 unlink ~/ts-loader"],["Unregister all workspaces from a remote project in the current project","$0 unlink ~/jest --all"],["Unregister all previously linked workspaces","$0 unlink --all"],["Unregister all workspaces matching a glob","$0 unlink '@babel/*' 'pkg-{a,b}'"]]});var $ae=Rm;var eAe=ge(em()),ZN=ge(rs());Is();var rh=class extends Le{constructor(){super(...arguments);this.interactive=W.Boolean("-i,--interactive",{description:"Offer various choices, depending on the detected upgrade paths"});this.exact=W.Boolean("-E,--exact",!1,{description:"Don't use any semver modifier on the resolved range"});this.tilde=W.Boolean("-T,--tilde",!1,{description:"Use the `~` semver modifier on the resolved range"});this.caret=W.Boolean("-C,--caret",!1,{description:"Use the `^` semver modifier on the resolved range"});this.recursive=W.Boolean("-R,--recursive",!1,{description:"Resolve again ALL resolutions for those packages"});this.mode=W.String("--mode",{description:"Change what artifacts installs generate",validator:nn(di)});this.patterns=W.Rest()}async execute(){return this.recursive?await this.executeUpRecursive():await this.executeUpClassic()}async executeUpRecursive(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=[...r.storedDescriptors.values()],o=s.map(u=>P.stringifyIdent(u)),a=new Set;for(let u of this.patterns){if(P.parseDescriptor(u).range!=="unknown")throw new Pe("Ranges aren't allowed when using --recursive");for(let g of(0,ZN.default)(o,u)){let f=P.parseIdent(g);a.add(f.identHash)}}let l=s.filter(u=>a.has(u.identHash));for(let u of l)r.storedDescriptors.delete(u.descriptorHash),r.storedResolutions.delete(u.descriptorHash);return(await Je.start({configuration:e,stdout:this.context.stdout},async u=>{await r.install({cache:n,report:u})})).exitCode()}async executeUpClassic(){var m;let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState({restoreResolutions:!1});let s=(m=this.interactive)!=null?m:e.get("preferInteractive"),o=tm(this,r),a=s?[Vr.KEEP,Vr.REUSE,Vr.PROJECT,Vr.LATEST]:[Vr.PROJECT,Vr.LATEST],l=[],c=[];for(let y of this.patterns){let b=!1,S=P.parseDescriptor(y);for(let k of r.workspaces)for(let T of[Hr.REGULAR,Hr.DEVELOPMENT]){let j=[...k.manifest.getForScope(T).values()].map(Z=>P.stringifyIdent(Z));for(let Z of(0,ZN.default)(j,P.stringifyIdent(S))){let J=P.parseIdent(Z),re=k.manifest[T].get(J.identHash);if(typeof re=="undefined")throw new Error("Assertion failed: Expected the descriptor to be registered");let ee=P.makeDescriptor(J,S.range);l.push(Promise.resolve().then(async()=>[k,T,re,await rm(ee,{project:r,workspace:k,cache:n,target:T,modifier:o,strategies:a})])),b=!0}}b||c.push(y)}if(c.length>1)throw new Pe(`Patterns ${Ae.prettyList(e,c,Di.CODE)} don't match any packages referenced by any workspace`);if(c.length>0)throw new Pe(`Pattern ${Ae.prettyList(e,c,Di.CODE)} doesn't match any packages referenced by any workspace`);let u=await Promise.all(l),g=await gA.start({configuration:e,stdout:this.context.stdout,suggestInstall:!1},async y=>{for(let[,,b,{suggestions:S,rejections:k}]of u){let T=S.filter(Y=>Y.descriptor!==null);if(T.length===0){let[Y]=k;if(typeof Y=="undefined")throw new Error("Assertion failed: Expected an error to have been set");let j=this.cli.error(Y);r.configuration.get("enableNetwork")?y.reportError($.CANT_SUGGEST_RESOLUTIONS,`${P.prettyDescriptor(e,b)} can't be resolved to a satisfying range
+
+${j}`):y.reportError($.CANT_SUGGEST_RESOLUTIONS,`${P.prettyDescriptor(e,b)} can't be resolved to a satisfying range (note: network resolution has been disabled)
+
+${j}`)}else T.length>1&&!s&&y.reportError($.CANT_SUGGEST_RESOLUTIONS,`${P.prettyDescriptor(e,b)} has multiple possible upgrade strategies; use -i to disambiguate manually`)}});if(g.hasErrors())return g.exitCode();let f=!1,h=[];for(let[y,b,,{suggestions:S}]of u){let k,T=S.filter(J=>J.descriptor!==null),Y=T[0].descriptor,j=T.every(J=>P.areDescriptorsEqual(J.descriptor,Y));T.length===1||j?k=Y:(f=!0,{answer:k}=await(0,eAe.prompt)({type:"select",name:"answer",message:`Which range to you want to use in ${P.prettyWorkspace(e,y)} \u276F ${b}?`,choices:S.map(({descriptor:J,name:re,reason:ee})=>J?{name:re,hint:ee,descriptor:J}:{name:re,hint:ee,disabled:!0}),onCancel:()=>process.exit(130),result(J){return this.find(J,"descriptor")},stdin:this.context.stdin,stdout:this.context.stdout}));let Z=y.manifest[b].get(k.identHash);if(typeof Z=="undefined")throw new Error("Assertion failed: This descriptor should have a matching entry");if(Z.descriptorHash!==k.descriptorHash)y.manifest[b].set(k.identHash,k),h.push([y,b,Z,k]);else{let J=e.makeResolver(),re={project:r,resolver:J},ee=J.bindDescriptor(Z,y.anchoredLocator,re);r.forgetResolution(ee)}}return await e.triggerMultipleHooks(y=>y.afterWorkspaceDependencyReplacement,h),f&&this.context.stdout.write(`
+`),(await Je.start({configuration:e,stdout:this.context.stdout},async y=>{await r.install({cache:n,report:y,mode:this.mode})})).exitCode()}};rh.paths=[["up"]],rh.usage=Re.Usage({description:"upgrade dependencies across the project",details:"\n This command upgrades the packages matching the list of specified patterns to their latest available version across the whole project (regardless of whether they're part of `dependencies` or `devDependencies` - `peerDependencies` won't be affected). This is a project-wide command: all workspaces will be upgraded in the process.\n\n If `-R,--recursive` is set the command will change behavior and no other switch will be allowed. When operating under this mode `yarn up` will force all ranges matching the selected packages to be resolved again (often to the highest available versions) before being stored in the lockfile. It however won't touch your manifests anymore, so depending on your needs you might want to run both `yarn up` and `yarn up -R` to cover all bases.\n\n If `-i,--interactive` is set (or if the `preferInteractive` settings is toggled on) the command will offer various choices, depending on the detected upgrade paths. Some upgrades require this flag in order to resolve ambiguities.\n\n The, `-C,--caret`, `-E,--exact` and `-T,--tilde` options have the same meaning as in the `add` command (they change the modifier used when the range is missing or a tag, and are ignored when the range is explicitly set).\n\n If the `--mode=` option is set, Yarn will change which artifacts are generated. The modes currently supported are:\n\n - `skip-build` will not run the build scripts at all. Note that this is different from setting `enableScripts` to false because the later will disable build scripts, and thus affect the content of the artifacts generated on disk, whereas the former will just disable the build step - but not the scripts themselves, which just won't run.\n\n - `update-lockfile` will skip the link step altogether, and only fetch packages that are missing from the lockfile (or that have no associated checksums). This mode is typically used by tools like Renovate or Dependabot to keep a lockfile up-to-date without incurring the full install cost.\n\n Generally you can see `yarn up` as a counterpart to what was `yarn upgrade --latest` in Yarn 1 (ie it ignores the ranges previously listed in your manifests), but unlike `yarn upgrade` which only upgraded dependencies in the current workspace, `yarn up` will upgrade all workspaces at the same time.\n\n This command accepts glob patterns as arguments (if valid Descriptors and supported by [micromatch](https://github.com/micromatch/micromatch)). Make sure to escape the patterns, to prevent your own shell from trying to expand them.\n\n **Note:** The ranges have to be static, only the package scopes and names can contain glob patterns.\n ",examples:[["Upgrade all instances of lodash to the latest release","$0 up lodash"],["Upgrade all instances of lodash to the latest release, but ask confirmation for each","$0 up lodash -i"],["Upgrade all instances of lodash to 1.2.3","$0 up lodash@1.2.3"],["Upgrade all instances of packages with the `@babel` scope to the latest release","$0 up '@babel/*'"],["Upgrade all instances of packages containing the word `jest` to the latest release","$0 up '*jest*'"],["Upgrade all instances of packages with the `@babel` scope to 7.0.0","$0 up '@babel/*@7.0.0'"]]}),rh.schema=[gv("recursive",mc.Forbids,["interactive","exact","tilde","caret"],{ignore:[void 0,!1]})];var tAe=rh;var Fm=class extends Le{constructor(){super(...arguments);this.recursive=W.Boolean("-R,--recursive",!1,{description:"List, for each workspace, what are all the paths that lead to the dependency"});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.peers=W.Boolean("--peers",!1,{description:"Also print the peer dependencies that match the specified name"});this.package=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState();let n=P.parseIdent(this.package).identHash,s=this.recursive?V8e(r,n,{configuration:e,peers:this.peers}):_8e(r,n,{configuration:e,peers:this.peers});As.emitTree(s,{configuration:e,stdout:this.context.stdout,json:this.json,separators:1})}};Fm.paths=[["why"]],Fm.usage=Re.Usage({description:"display the reason why a package is needed",details:`
+ This command prints the exact reasons why a package appears in the dependency tree.
+
+ If \`-R,--recursive\` is set, the listing will go in depth and will list, for each workspaces, what are all the paths that lead to the dependency. Note that the display is somewhat optimized in that it will not print the package listing twice for a single package, so if you see a leaf named "Foo" when looking for "Bar", it means that "Foo" already got printed higher in the tree.
+ `,examples:[["Explain why lodash is used in your project","$0 why lodash"]]});var rAe=Fm;function _8e(t,e,{configuration:r,peers:i}){let n=ve.sortMap(t.storedPackages.values(),a=>P.stringifyLocator(a)),s={},o={children:s};for(let a of n){let l={},c=null;for(let u of a.dependencies.values()){if(!i&&a.peerDependencies.has(u.identHash))continue;let g=t.storedResolutions.get(u.descriptorHash);if(!g)throw new Error("Assertion failed: The resolution should have been registered");let f=t.storedPackages.get(g);if(!f)throw new Error("Assertion failed: The package should have been registered");if(f.identHash!==e)continue;if(c===null){let p=P.stringifyLocator(a);s[p]={value:[a,Ae.Type.LOCATOR],children:l}}let h=P.stringifyLocator(f);l[h]={value:[{descriptor:u,locator:f},Ae.Type.DEPENDENT]}}}return o}function V8e(t,e,{configuration:r,peers:i}){let n=ve.sortMap(t.workspaces,f=>P.stringifyLocator(f.anchoredLocator)),s=new Set,o=new Set,a=f=>{if(s.has(f.locatorHash))return o.has(f.locatorHash);if(s.add(f.locatorHash),f.identHash===e)return o.add(f.locatorHash),!0;let h=!1;f.identHash===e&&(h=!0);for(let p of f.dependencies.values()){if(!i&&f.peerDependencies.has(p.identHash))continue;let m=t.storedResolutions.get(p.descriptorHash);if(!m)throw new Error("Assertion failed: The resolution should have been registered");let y=t.storedPackages.get(m);if(!y)throw new Error("Assertion failed: The package should have been registered");a(y)&&(h=!0)}return h&&o.add(f.locatorHash),h};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");a(h)}let l=new Set,c={},u={children:c},g=(f,h,p)=>{if(!o.has(f.locatorHash))return;let m=p!==null?Ae.tuple(Ae.Type.DEPENDENT,{locator:f,descriptor:p}):Ae.tuple(Ae.Type.LOCATOR,f),y={},b={value:m,children:y},S=P.stringifyLocator(f);if(h[S]=b,!l.has(f.locatorHash)&&(l.add(f.locatorHash),!(p!==null&&t.tryWorkspaceByLocator(f))))for(let k of f.dependencies.values()){if(!i&&f.peerDependencies.has(k.identHash))continue;let T=t.storedResolutions.get(k.descriptorHash);if(!T)throw new Error("Assertion failed: The resolution should have been registered");let Y=t.storedPackages.get(T);if(!Y)throw new Error("Assertion failed: The package should have been registered");g(Y,y,k)}};for(let f of n){let h=t.storedPackages.get(f.anchoredLocator.locatorHash);if(!h)throw new Error("Assertion failed: The package should have been registered");g(h,c,null)}return u}var cL={};ft(cL,{default:()=>C4e,gitUtils:()=>Bu});var Bu={};ft(Bu,{TreeishProtocols:()=>On,clone:()=>aL,fetchBase:()=>BAe,fetchChangedFiles:()=>bAe,fetchChangedWorkspaces:()=>p4e,fetchRoot:()=>wAe,isGitUrl:()=>nh,lsRemote:()=>yAe,normalizeLocator:()=>nL,normalizeRepoUrl:()=>Nm,resolveUrl:()=>oL,splitRepoUrl:()=>Lm});var rL=ge(CAe()),mAe=ge(rB()),ih=ge(require("querystring")),iL=ge(ri()),EAe=ge(require("url"));function IAe(){return ie(N({},process.env),{GIT_SSH_COMMAND:process.env.GIT_SSH_COMMAND||`${process.env.GIT_SSH||"ssh"} -o BatchMode=yes`})}var h4e=[/^ssh:/,/^git(?:\+[^:]+)?:/,/^(?:git\+)?https?:[^#]+\/[^#]+(?:\.git)(?:#.*)?$/,/^git@[^#]+\/[^#]+\.git(?:#.*)?$/,/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z._0-9-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z._0-9-]+?)(?:\.git)?(?:#.*)?$/,/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/],On;(function(n){n.Commit="commit",n.Head="head",n.Tag="tag",n.Semver="semver"})(On||(On={}));function nh(t){return t?h4e.some(e=>!!t.match(e)):!1}function Lm(t){t=Nm(t);let e=t.indexOf("#");if(e===-1)return{repo:t,treeish:{protocol:On.Head,request:"HEAD"},extra:{}};let r=t.slice(0,e),i=t.slice(e+1);if(i.match(/^[a-z]+=/)){let n=ih.default.parse(i);for(let[l,c]of Object.entries(n))if(typeof c!="string")throw new Error(`Assertion failed: The ${l} parameter must be a literal string`);let s=Object.values(On).find(l=>Object.prototype.hasOwnProperty.call(n,l)),o,a;typeof s!="undefined"?(o=s,a=n[s]):(o=On.Head,a="HEAD");for(let l of Object.values(On))delete n[l];return{repo:r,treeish:{protocol:o,request:a},extra:n}}else{let n=i.indexOf(":"),s,o;return n===-1?(s=null,o=i):(s=i.slice(0,n),o=i.slice(n+1)),{repo:r,treeish:{protocol:s,request:o},extra:{}}}}function Nm(t,{git:e=!1}={}){var r;if(t=t.replace(/^git\+https:/,"https:"),t=t.replace(/^(?:github:|https:\/\/github\.com\/)?(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)(?:\.git)?(#.*)?$/,"https://github.com/$1/$2.git$3"),t=t.replace(/^https:\/\/github\.com\/(?!\.{1,2}\/)([a-zA-Z0-9._-]+)\/(?!\.{1,2}(?:#|$))([a-zA-Z0-9._-]+?)\/tarball\/(.+)?$/,"https://github.com/$1/$2.git#$3"),e){t=t.replace(/^git\+([^:]+):/,"$1:");let i;try{i=EAe.default.parse(t)}catch{i=null}i&&i.protocol==="ssh:"&&((r=i.path)==null?void 0:r.startsWith("/:"))&&(t=t.replace(/^ssh:\/\//,""))}return t}function nL(t){return P.makeLocator(t,Nm(t.reference))}async function yAe(t,e){let r=Nm(t,{git:!0});if(!ir.getNetworkSettings(`https://${(0,rL.default)(r).resource}`,{configuration:e}).enableNetwork)throw new Error(`Request to '${r}' has been blocked because of your configuration settings`);let n=await sL("listing refs",["ls-remote",r],{cwd:e.startingCwd,env:IAe()},{configuration:e,normalizedRepoUrl:r}),s=new Map,o=/^([a-f0-9]{40})\t([^\n]+)/gm,a;for(;(a=o.exec(n.stdout))!==null;)s.set(a[2],a[1]);return s}async function oL(t,e){let{repo:r,treeish:{protocol:i,request:n},extra:s}=Lm(t),o=await yAe(r,e),a=(c,u)=>{switch(c){case On.Commit:{if(!u.match(/^[a-f0-9]{40}$/))throw new Error("Invalid commit hash");return ih.default.stringify(ie(N({},s),{commit:u}))}case On.Head:{let g=o.get(u==="HEAD"?u:`refs/heads/${u}`);if(typeof g=="undefined")throw new Error(`Unknown head ("${u}")`);return ih.default.stringify(ie(N({},s),{commit:g}))}case On.Tag:{let g=o.get(`refs/tags/${u}`);if(typeof g=="undefined")throw new Error(`Unknown tag ("${u}")`);return ih.default.stringify(ie(N({},s),{commit:g}))}case On.Semver:{let g=Wt.validRange(u);if(!g)throw new Error(`Invalid range ("${u}")`);let f=new Map([...o.entries()].filter(([p])=>p.startsWith("refs/tags/")).map(([p,m])=>[iL.default.parse(p.slice(10)),m]).filter(p=>p[0]!==null)),h=iL.default.maxSatisfying([...f.keys()],g);if(h===null)throw new Error(`No matching range ("${u}")`);return ih.default.stringify(ie(N({},s),{commit:f.get(h)}))}case null:{let g;if((g=l(On.Commit,u))!==null||(g=l(On.Tag,u))!==null||(g=l(On.Head,u))!==null)return g;throw u.match(/^[a-f0-9]+$/)?new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head - if a commit, use the 40-characters commit hash`):new Error(`Couldn't resolve "${u}" as either a commit, a tag, or a head`)}default:throw new Error(`Invalid Git resolution protocol ("${c}")`)}},l=(c,u)=>{try{return a(c,u)}catch(g){return null}};return`${r}#${a(i,n)}`}async function aL(t,e){return await e.getLimit("cloneConcurrency")(async()=>{let{repo:r,treeish:{protocol:i,request:n}}=Lm(t);if(i!=="commit")throw new Error("Invalid treeish protocol when cloning");let s=Nm(r,{git:!0});if(ir.getNetworkSettings(`https://${(0,rL.default)(s).resource}`,{configuration:e}).enableNetwork===!1)throw new Error(`Request to '${s}' has been blocked because of your configuration settings`);let o=await K.mktempPromise(),a={cwd:o,env:IAe()};return await sL("cloning the repository",["clone","-c core.autocrlf=false",s,H.fromPortablePath(o)],a,{configuration:e,normalizedRepoUrl:s}),await sL("switching branch",["checkout",`${n}`],a,{configuration:e,normalizedRepoUrl:s}),o})}async function wAe(t){let e=null,r,i=t;do r=i,await K.existsPromise(x.join(r,".git"))&&(e=r),i=x.dirname(r);while(e===null&&i!==r);return e}async function BAe(t,{baseRefs:e}){if(e.length===0)throw new Pe("Can't run this command with zero base refs specified.");let r=[];for(let a of e){let{code:l}=await Fr.execvp("git",["merge-base",a,"HEAD"],{cwd:t});l===0&&r.push(a)}if(r.length===0)throw new Pe(`No ancestor could be found between any of HEAD and ${e.join(", ")}`);let{stdout:i}=await Fr.execvp("git",["merge-base","HEAD",...r],{cwd:t,strict:!0}),n=i.trim(),{stdout:s}=await Fr.execvp("git",["show","--quiet","--pretty=format:%s",n],{cwd:t,strict:!0}),o=s.trim();return{hash:n,title:o}}async function bAe(t,{base:e,project:r}){let i=ve.buildIgnorePattern(r.configuration.get("changesetIgnorePatterns")),{stdout:n}=await Fr.execvp("git",["diff","--name-only",`${e}`],{cwd:t,strict:!0}),s=n.split(/\r\n|\r|\n/).filter(c=>c.length>0).map(c=>x.resolve(t,H.toPortablePath(c))),{stdout:o}=await Fr.execvp("git",["ls-files","--others","--exclude-standard"],{cwd:t,strict:!0}),a=o.split(/\r\n|\r|\n/).filter(c=>c.length>0).map(c=>x.resolve(t,H.toPortablePath(c))),l=[...new Set([...s,...a].sort())];return i?l.filter(c=>!x.relative(r.cwd,c).match(i)):l}async function p4e({ref:t,project:e}){if(e.configuration.projectCwd===null)throw new Pe("This command can only be run from within a Yarn project");let r=[x.resolve(e.cwd,e.configuration.get("cacheFolder")),x.resolve(e.cwd,e.configuration.get("installStatePath")),x.resolve(e.cwd,e.configuration.get("lockfileFilename")),x.resolve(e.cwd,e.configuration.get("virtualFolder"))];await e.configuration.triggerHook(o=>o.populateYarnPaths,e,o=>{o!=null&&r.push(o)});let i=await wAe(e.configuration.projectCwd);if(i==null)throw new Pe("This command can only be run on Git repositories");let n=await BAe(i,{baseRefs:typeof t=="string"?[t]:e.configuration.get("changesetBaseRefs")}),s=await bAe(i,{base:n.hash,project:e});return new Set(ve.mapAndFilter(s,o=>{let a=e.tryWorkspaceByFilePath(o);return a===null?ve.mapAndFilter.skip:r.some(l=>o.startsWith(l))?ve.mapAndFilter.skip:a}))}async function sL(t,e,r,{configuration:i,normalizedRepoUrl:n}){try{return await Fr.execvp("git",e,ie(N({},r),{strict:!0}))}catch(s){if(!(s instanceof Fr.ExecError))throw s;let o=s.reportExtra,a=s.stderr.toString();throw new ct($.EXCEPTION,`Failed ${t}`,l=>{l.reportError($.EXCEPTION,` ${Ae.prettyField(i,{label:"Repository URL",value:Ae.tuple(Ae.Type.URL,n)})}`);for(let c of a.matchAll(/^(.+?): (.*)$/gm)){let[,u,g]=c;u=u.toLowerCase();let f=u==="error"?"Error":`${(0,mAe.default)(u)} Error`;l.reportError($.EXCEPTION,` ${Ae.prettyField(i,{label:f,value:Ae.tuple(Ae.Type.NO_HINT,g)})}`)}o==null||o(l)})}}var AL=class{supports(e,r){return nh(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,n=nL(e),s=new Map(r.checksums);s.set(n.locatorHash,i);let o=ie(N({},r),{checksums:s}),a=await this.downloadHosted(n,o);if(a!==null)return a;let[l,c,u]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote repository`),loader:()=>this.cloneFromRemote(n,o),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:l,releaseFs:c,prefixPath:P.getIdentVendorPath(e),checksum:u}}async downloadHosted(e,r){return r.project.configuration.reduceHook(i=>i.fetchHostedRepository,null,e,r)}async cloneFromRemote(e,r){let i=await aL(e.reference,r.project.configuration),n=Lm(e.reference),s=x.join(i,"package.tgz");await Zt.prepareExternalProject(i,s,{configuration:r.project.configuration,report:r.report,workspace:n.extra.workspace,locator:e});let o=await K.readFilePromise(s);return await ve.releaseAfterUseAsync(async()=>await wi.convertToZip(o,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}))}};var lL=class{supportsDescriptor(e,r){return nh(e.range)}supportsLocator(e,r){return nh(e.reference)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=await oL(e.range,i.project.configuration);return[P.makeLocator(e,n)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await ve.releaseAfterUseAsync(async()=>await At.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return ie(N({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:Qt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var d4e={configuration:{changesetBaseRefs:{description:"The base git refs that the current HEAD is compared against when detecting changes. Supports git branches, tags, and commits.",type:ye.STRING,isArray:!0,isNullable:!1,default:["master","origin/master","upstream/master","main","origin/main","upstream/main"]},changesetIgnorePatterns:{description:"Array of glob patterns; files matching them will be ignored when fetching the changed files",type:ye.STRING,default:[],isArray:!0},cloneConcurrency:{description:"Maximal number of concurrent clones",type:ye.NUMBER,default:2}},fetchers:[AL],resolvers:[lL]};var C4e=d4e;var Tm=class extends Le{constructor(){super(...arguments);this.since=W.String("--since",{description:"Only include workspaces that have been changed since the specified ref.",tolerateBoolean:!0});this.recursive=W.Boolean("-R,--recursive",!1,{description:"Find packages via dependencies/devDependencies instead of using the workspaces field"});this.verbose=W.Boolean("-v,--verbose",!1,{description:"Also return the cross-dependencies between workspaces"});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r}=await ze.find(e,this.context.cwd);return(await Je.start({configuration:e,json:this.json,stdout:this.context.stdout},async n=>{let s=this.since?await Bu.fetchChangedWorkspaces({ref:this.since,project:r}):r.workspaces,o=new Set(s);if(this.recursive)for(let a of[...s].map(l=>l.getRecursiveWorkspaceDependents()))for(let l of a)o.add(l);for(let a of o){let{manifest:l}=a,c;if(this.verbose){let u=new Set,g=new Set;for(let f of At.hardDependencies)for(let[h,p]of l.getForScope(f)){let m=r.tryWorkspaceByDescriptor(p);m===null?r.workspacesByIdent.has(h)&&g.add(p):u.add(m)}c={workspaceDependencies:Array.from(u).map(f=>f.relativeCwd),mismatchedWorkspaceDependencies:Array.from(g).map(f=>P.stringifyDescriptor(f))}}n.reportInfo(null,`${a.relativeCwd}`),n.reportJson(N({location:a.relativeCwd,name:l.name?P.stringifyIdent(l.name):null},c))}})).exitCode()}};Tm.paths=[["workspaces","list"]],Tm.usage=Re.Usage({category:"Workspace-related commands",description:"list all available workspaces",details:"\n This command will print the list of all workspaces in the project.\n\n - If `--since` is set, Yarn will only list workspaces that have been modified since the specified ref. By default Yarn will use the refs specified by the `changesetBaseRefs` configuration option.\n\n - If `-R,--recursive` is set, Yarn will find workspaces to run the command on by recursively evaluating `dependencies` and `devDependencies` fields, instead of looking at the `workspaces` fields.\n\n - If both the `-v,--verbose` and `--json` options are set, Yarn will also return the cross-dependencies between each workspaces (useful when you wish to automatically generate Buck / Bazel rules).\n "});var QAe=Tm;var Om=class extends Le{constructor(){super(...arguments);this.workspaceName=W.String();this.commandName=W.String();this.args=W.Proxy()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);let n=r.workspaces,s=new Map(n.map(a=>{let l=P.convertToIdent(a.locator);return[P.stringifyIdent(l),a]})),o=s.get(this.workspaceName);if(o===void 0){let a=Array.from(s.keys()).sort();throw new Pe(`Workspace '${this.workspaceName}' not found. Did you mean any of the following:
+ - ${a.join(`
+ - `)}?`)}return this.cli.run([this.commandName,...this.args],{cwd:o.cwd})}};Om.paths=[["workspace"]],Om.usage=Re.Usage({category:"Workspace-related commands",description:"run a command within the specified workspace",details:`
+ This command will run a given sub-command on a single workspace.
+ `,examples:[["Add a package to a single workspace","yarn workspace components add -D react"],["Run build script on a single workspace","yarn workspace components run build"]]});var vAe=Om;var m4e={configuration:{enableImmutableInstalls:{description:"If true (the default on CI), prevents the install command from modifying the lockfile",type:ye.BOOLEAN,default:SAe.isCI},defaultSemverRangePrefix:{description:"The default save prefix: '^', '~' or ''",type:ye.STRING,values:["^","~",""],default:ga.CARET}},commands:[Ose,Kse,eae,gae,Xae,Oae,Qae,QAe,mae,Eae,Iae,yae,Lse,Tse,fae,pae,wae,Bae,Sae,xae,Pae,Rae,$ae,Fae,jae,Hae,Yae,Nae,qae,Jae,Wae,_ae,Vae,tAe,rAe,vAe]},E4e=m4e;var pL={};ft(pL,{default:()=>y4e});var qe={optional:!0},kAe=[["@tailwindcss/aspect-ratio@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@tailwindcss/line-clamp@<0.2.1",{peerDependencies:{tailwindcss:"^2.0.2"}}],["@fullhuman/postcss-purgecss@3.1.3 || 3.1.3-alpha.0",{peerDependencies:{postcss:"^8.0.0"}}],["@samverschueren/stream-to-observable@<0.3.1",{peerDependenciesMeta:{rxjs:qe,zenObservable:qe}}],["any-observable@<0.5.1",{peerDependenciesMeta:{rxjs:qe,zenObservable:qe}}],["@pm2/agent@<1.0.4",{dependencies:{debug:"*"}}],["debug@<4.2.0",{peerDependenciesMeta:{["supports-color"]:qe}}],["got@<11",{dependencies:{["@types/responselike"]:"^1.0.0",["@types/keyv"]:"^3.1.1"}}],["cacheable-lookup@<4.1.2",{dependencies:{["@types/keyv"]:"^3.1.1"}}],["http-link-dataloader@*",{peerDependencies:{graphql:"^0.13.1 || ^14.0.0"}}],["typescript-language-server@*",{dependencies:{["vscode-jsonrpc"]:"^5.0.1",["vscode-languageserver-protocol"]:"^3.15.0"}}],["postcss-syntax@*",{peerDependenciesMeta:{["postcss-html"]:qe,["postcss-jsx"]:qe,["postcss-less"]:qe,["postcss-markdown"]:qe,["postcss-scss"]:qe}}],["jss-plugin-rule-value-function@<=10.1.1",{dependencies:{["tiny-warning"]:"^1.0.2"}}],["ink-select-input@<4.1.0",{peerDependencies:{react:"^16.8.2"}}],["license-webpack-plugin@<2.3.18",{peerDependenciesMeta:{webpack:qe}}],["snowpack@>=3.3.0",{dependencies:{["node-gyp"]:"^7.1.0"}}],["promise-inflight@*",{peerDependenciesMeta:{bluebird:qe}}],["reactcss@*",{peerDependencies:{react:"*"}}],["react-color@<=2.19.0",{peerDependencies:{react:"*"}}],["gatsby-plugin-i18n@*",{dependencies:{ramda:"^0.24.1"}}],["useragent@^2.0.0",{dependencies:{request:"^2.88.0",yamlparser:"0.0.x",semver:"5.5.x"}}],["@apollographql/apollo-tools@*",{peerDependencies:{graphql:"^14.2.1 || ^15.0.0"}}],["material-table@^2.0.0",{dependencies:{"@babel/runtime":"^7.11.2"}}],["@babel/parser@*",{dependencies:{"@babel/types":"^7.8.3"}}],["fork-ts-checker-webpack-plugin@<=6.3.4",{peerDependencies:{eslint:">= 6",typescript:">= 2.7",webpack:">= 4","vue-template-compiler":"*"},peerDependenciesMeta:{eslint:qe,"vue-template-compiler":qe}}],["rc-animate@<=3.1.1",{peerDependencies:{react:">=16.9.0","react-dom":">=16.9.0"}}],["react-bootstrap-table2-paginator@*",{dependencies:{classnames:"^2.2.6"}}],["react-draggable@<=4.4.3",{peerDependencies:{react:">= 16.3.0","react-dom":">= 16.3.0"}}],["apollo-upload-client@<14",{peerDependencies:{graphql:"14 - 15"}}],["react-instantsearch-core@<=6.7.0",{peerDependencies:{algoliasearch:">= 3.1 < 5"}}],["react-instantsearch-dom@<=6.7.0",{dependencies:{"react-fast-compare":"^3.0.0"}}],["ws@<7.2.1",{peerDependencies:{bufferutil:"^4.0.1","utf-8-validate":"^5.0.2"},peerDependenciesMeta:{bufferutil:qe,"utf-8-validate":qe}}],["react-portal@*",{peerDependencies:{"react-dom":"^15.0.0-0 || ^16.0.0-0 || ^17.0.0-0"}}],["react-scripts@<=4.0.1",{peerDependencies:{react:"*"}}],["testcafe@<=1.10.1",{dependencies:{"@babel/plugin-transform-for-of":"^7.12.1","@babel/runtime":"^7.12.5"}}],["testcafe-legacy-api@<=4.2.0",{dependencies:{"testcafe-hammerhead":"^17.0.1","read-file-relative":"^1.2.0"}}],["@google-cloud/firestore@<=4.9.3",{dependencies:{protobufjs:"^6.8.6"}}],["gatsby-source-apiserver@*",{dependencies:{["babel-polyfill"]:"^6.26.0"}}],["@webpack-cli/package-utils@<=1.0.1-alpha.4",{dependencies:{["cross-spawn"]:"^7.0.3"}}],["gatsby-remark-prismjs@<3.3.28",{dependencies:{lodash:"^4"}}],["gatsby-plugin-favicon@*",{peerDependencies:{webpack:"*"}}],["gatsby-plugin-sharp@<=4.6.0-next.3",{dependencies:{debug:"^4.3.1"}}],["gatsby-react-router-scroll@<=5.6.0-next.0",{dependencies:{["prop-types"]:"^15.7.2"}}],["@rebass/forms@*",{dependencies:{["@styled-system/should-forward-prop"]:"^5.0.0"},peerDependencies:{react:"^16.8.6"}}],["rebass@*",{peerDependencies:{react:"^16.8.6"}}],["@ant-design/react-slick@<=0.28.3",{peerDependencies:{react:">=16.0.0"}}],["mqtt@<4.2.7",{dependencies:{duplexify:"^4.1.1"}}],["vue-cli-plugin-vuetify@<=2.0.3",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":qe,"vuetify-loader":qe}}],["vue-cli-plugin-vuetify@<=2.0.4",{dependencies:{"null-loader":"^3.0.0"}}],["@vuetify/cli-plugin-utils@<=0.0.4",{dependencies:{semver:"^6.3.0"},peerDependenciesMeta:{"sass-loader":qe}}],["@vue/cli-plugin-typescript@<=5.0.0-alpha.0",{dependencies:{"babel-loader":"^8.1.0"}}],["@vue/cli-plugin-typescript@<=5.0.0-beta.0",{dependencies:{"@babel/core":"^7.12.16"},peerDependencies:{"vue-template-compiler":"^2.0.0"},peerDependenciesMeta:{"vue-template-compiler":qe}}],["cordova-ios@<=6.3.0",{dependencies:{underscore:"^1.9.2"}}],["cordova-lib@<=10.0.1",{dependencies:{underscore:"^1.9.2"}}],["git-node-fs@*",{peerDependencies:{"js-git":"^0.7.8"},peerDependenciesMeta:{"js-git":qe}}],["consolidate@*",{peerDependencies:{velocityjs:"^2.0.1",tinyliquid:"^0.2.34","liquid-node":"^3.0.1",jade:"^1.11.0","then-jade":"*",dust:"^0.3.0","dustjs-helpers":"^1.7.4","dustjs-linkedin":"^2.7.5",swig:"^1.4.2","swig-templates":"^2.0.3","razor-tmpl":"^1.3.1",atpl:">=0.7.6",liquor:"^0.0.5",twig:"^1.15.2",ejs:"^3.1.5",eco:"^1.1.0-rc-3",jazz:"^0.0.18",jqtpl:"~1.1.0",hamljs:"^0.6.2",hamlet:"^0.3.3",whiskers:"^0.4.0","haml-coffee":"^1.14.1","hogan.js":"^3.0.2",templayed:">=0.2.3",handlebars:"^4.7.6",underscore:"^1.11.0",lodash:"^4.17.20",pug:"^3.0.0","then-pug":"*",qejs:"^3.0.5",walrus:"^0.10.1",mustache:"^4.0.1",just:"^0.1.8",ect:"^0.5.9",mote:"^0.2.0",toffee:"^0.3.6",dot:"^1.1.3","bracket-template":"^1.1.5",ractive:"^1.3.12",nunjucks:"^3.2.2",htmling:"^0.0.8","babel-core":"^6.26.3",plates:"~0.4.11","react-dom":"^16.13.1",react:"^16.13.1","arc-templates":"^0.5.3",vash:"^0.13.0",slm:"^2.0.0",marko:"^3.14.4",teacup:"^2.0.0","coffee-script":"^1.12.7",squirrelly:"^5.1.0",twing:"^5.0.2"},peerDependenciesMeta:{velocityjs:qe,tinyliquid:qe,"liquid-node":qe,jade:qe,"then-jade":qe,dust:qe,"dustjs-helpers":qe,"dustjs-linkedin":qe,swig:qe,"swig-templates":qe,"razor-tmpl":qe,atpl:qe,liquor:qe,twig:qe,ejs:qe,eco:qe,jazz:qe,jqtpl:qe,hamljs:qe,hamlet:qe,whiskers:qe,"haml-coffee":qe,"hogan.js":qe,templayed:qe,handlebars:qe,underscore:qe,lodash:qe,pug:qe,"then-pug":qe,qejs:qe,walrus:qe,mustache:qe,just:qe,ect:qe,mote:qe,toffee:qe,dot:qe,"bracket-template":qe,ractive:qe,nunjucks:qe,htmling:qe,"babel-core":qe,plates:qe,"react-dom":qe,react:qe,"arc-templates":qe,vash:qe,slm:qe,marko:qe,teacup:qe,"coffee-script":qe,squirrelly:qe,twing:qe}}],["vue-loader@<=16.3.1",{peerDependencies:{"@vue/compiler-sfc":"^3.0.8",webpack:"^4.1.0 || ^5.0.0-0"}}],["scss-parser@*",{dependencies:{lodash:"^4.17.21"}}],["query-ast@*",{dependencies:{lodash:"^4.17.21"}}],["redux-thunk@<=2.3.0",{peerDependencies:{redux:"^4.0.0"}}],["skypack@<=0.3.2",{dependencies:{tar:"^6.1.0"}}],["@npmcli/metavuln-calculator@<2.0.0",{dependencies:{"json-parse-even-better-errors":"^2.3.1"}}],["bin-links@<2.3.0",{dependencies:{"mkdirp-infer-owner":"^1.0.2"}}],["rollup-plugin-polyfill-node@<=0.8.0",{peerDependencies:{rollup:"^1.20.0 || ^2.0.0"}}],["snowpack@<3.8.6",{dependencies:{"magic-string":"^0.25.7"}}],["elm-webpack-loader@*",{dependencies:{temp:"^0.9.4"}}],["winston-transport@<=4.4.0",{dependencies:{logform:"^2.2.0"}}],["jest-vue-preprocessor@*",{dependencies:{"@babel/core":"7.8.7","@babel/template":"7.8.6"},peerDependencies:{pug:"^2.0.4"},peerDependenciesMeta:{pug:qe}}],["redux-persist@*",{peerDependencies:{react:">=16"},peerDependenciesMeta:{react:qe}}],["sodium@>=3",{dependencies:{"node-gyp":"^3.8.0"}}],["babel-plugin-graphql-tag@<=3.1.0",{peerDependencies:{graphql:"^14.0.0 || ^15.0.0"}}],["@playwright/test@<=1.14.1",{dependencies:{"jest-matcher-utils":"^26.4.2"}}],...["babel-plugin-remove-graphql-queries@<3.14.0-next.1","babel-preset-gatsby-package@<1.14.0-next.1","create-gatsby@<1.14.0-next.1","gatsby-admin@<0.24.0-next.1","gatsby-cli@<3.14.0-next.1","gatsby-core-utils@<2.14.0-next.1","gatsby-design-tokens@<3.14.0-next.1","gatsby-legacy-polyfills@<1.14.0-next.1","gatsby-plugin-benchmark-reporting@<1.14.0-next.1","gatsby-plugin-graphql-config@<0.23.0-next.1","gatsby-plugin-image@<1.14.0-next.1","gatsby-plugin-mdx@<2.14.0-next.1","gatsby-plugin-netlify-cms@<5.14.0-next.1","gatsby-plugin-no-sourcemaps@<3.14.0-next.1","gatsby-plugin-page-creator@<3.14.0-next.1","gatsby-plugin-preact@<5.14.0-next.1","gatsby-plugin-preload-fonts@<2.14.0-next.1","gatsby-plugin-schema-snapshot@<2.14.0-next.1","gatsby-plugin-styletron@<6.14.0-next.1","gatsby-plugin-subfont@<3.14.0-next.1","gatsby-plugin-utils@<1.14.0-next.1","gatsby-recipes@<0.25.0-next.1","gatsby-source-shopify@<5.6.0-next.1","gatsby-source-wikipedia@<3.14.0-next.1","gatsby-transformer-screenshot@<3.14.0-next.1","gatsby-worker@<0.5.0-next.1"].map(t=>[t,{dependencies:{"@babel/runtime":"^7.14.8"}}]),["gatsby-core-utils@<2.14.0-next.1",{dependencies:{got:"8.3.2"}}],["gatsby-plugin-gatsby-cloud@<=3.1.0-next.0",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["gatsby-plugin-gatsby-cloud@<=3.2.0-next.1",{peerDependencies:{webpack:"*"}}],["babel-plugin-remove-graphql-queries@<=3.14.0-next.1",{dependencies:{"gatsby-core-utils":"^2.8.0-next.1"}}],["gatsby-plugin-netlify@3.13.0-next.1",{dependencies:{"gatsby-core-utils":"^2.13.0-next.0"}}],["clipanion-v3-codemod@<=0.2.0",{peerDependencies:{jscodeshift:"^0.11.0"}}],["react-live@*",{peerDependencies:{"react-dom":"*",react:"*"}}],["webpack@<4.44.1",{peerDependenciesMeta:{"webpack-cli":qe,"webpack-command":qe}}],["webpack@<5.0.0-beta.23",{peerDependenciesMeta:{"webpack-cli":qe}}],["webpack-dev-server@<3.10.2",{peerDependenciesMeta:{"webpack-cli":qe}}],["@docusaurus/responsive-loader@<1.5.0",{peerDependenciesMeta:{sharp:qe,jimp:qe}}],["eslint-module-utils@*",{peerDependenciesMeta:{"eslint-import-resolver-node":qe,"eslint-import-resolver-typescript":qe,"eslint-import-resolver-webpack":qe,"@typescript-eslint/parser":qe}}],["eslint-plugin-import@*",{peerDependenciesMeta:{"@typescript-eslint/parser":qe}}],["critters-webpack-plugin@<3.0.2",{peerDependenciesMeta:{"html-webpack-plugin":qe}}],["terser@<=5.10.0",{dependencies:{acorn:"^8.5.0"}}],["babel-preset-react-app@10.0.x",{dependencies:{"@babel/plugin-proposal-private-property-in-object":"^7.16.0"}}],["eslint-config-react-app@*",{peerDependenciesMeta:{typescript:qe}}],["@vue/eslint-config-typescript@*",{peerDependenciesMeta:{typescript:qe}}],["unplugin-vue2-script-setup@<0.9.1",{peerDependencies:{"@vue/composition-api":"^1.4.3","@vue/runtime-dom":"^3.2.26"}}]];var gL;function xAe(){return typeof gL=="undefined"&&(gL=require("zlib").brotliDecompressSync(Buffer.from("G7weAByFTVk3Vs7UfHhq4yykgEM7pbW7TI43SG2S5tvGrwHBAzdz+s/npQ6tgEvobvxisrPIadkXeUAJotBn5bDZ5kAhcRqsIHe3F75Walet5hNalwgFDtxb0BiDUjiUQkjG0yW2hto9HPgiCkm316d6bC0kST72YN7D7rfkhCE9x4J0XwB0yavalxpUu2t9xszHrmtwalOxT7VslsxWcB1qpqZwERUra4psWhTV8BgwWeizurec82Caf1ABL11YMfbf8FJ9JBceZOkgmvrQPbC9DUldX/yMbmX06UQluCEjSwUoyO+EZPIjofr+/oAZUck2enraRD+oWLlnlYnj8xB+gwSo9lmmks4fXv574qSqcWA6z21uYkzMu3EWj+K23RxeQlLqiE35/rC8GcS4CGkKHKKq+zAIQwD9iRDNfiAqueLLpicFFrNsAI4zeTD/eO9MHcnRa5m8UT+M2+V+AkFST4BlKneiAQRSdST8KEAIyFlULt6wa9EBd0Ds28VmpaxquJdVt+nwdEs5xUskI13OVtFyY0UrQIRAlCuvvWivvlSKQfTO+2Q8OyUR1W5RvetaPz4jD27hdtwHFFA1Ptx6Ee/t2cY2rg2G46M1pNDRf2pWhvpy8pqMnuI3++4OF3+7OFIWXGjh+o7Nr2jNvbiYcQdQS1h903/jVFgOpA0yJ78z+x759bFA0rq+6aY5qPB4FzS3oYoLupDUhD9nDz6F6H7hpnlMf18KNKDu4IKjTWwrAnY6MFQw1W6ymOALHlFyCZmQhldg1MQHaMVVQTVgDC60TfaBqG++Y8PEoFhN/PBTZT175KNP/BlHDYGOOBmnBdzqJKplZ/ljiVG0ZBzfqeBRrrUkn6rA54462SgiliKoYVnbeptMdXNfAuaupIEi0bApF10TlgHfmEJAPUVidRVFyDupSem5po5vErPqWKhKbUIp0LozpYsIKK57dM/HKr+nguF+7924IIWMICkQ8JUigs9D+W+c4LnNoRtPPKNRUiCYmP+Jfo2lfKCKw8qpraEeWU3uiNRO6zcyKQoXPR5htmzzLznke7b4YbXW3I1lIRzmgG02Udb58U+7TpwyN7XymCgH+wuPDthZVQvRZuEP+SnLtMicz9m5zASWOBiAcLmkuFlTKuHspSIhCBD0yUPKcxu81A+4YD78rA2vtwsUEday9WNyrShyrl60rWmA+SmbYZkQOwFJWArxRYYc5jGhA5ikxYw1rx3ei4NmeX/lKiwpZ9Ln1tV2Ae7sArvxuVLbJjqJRjW1vFXAyHpvLG+8MJ6T2Ubx5M2KDa2SN6vuIGxJ9WQM9Mk3Q7aCNiZONXllhqq24DmoLbQfW2rYWsOgHWjtOmIQMyMKdiHZDjoyIq5+U700nZ6odJAoYXPQBvFNiQ78d5jaXliBqLTJEqUCwi+LiH2mx92EmNKDsJL74Z613+3lf20pxkV1+erOrjj8pW00vsPaahKUM+05ssd5uwM7K482KWEf3TCwlg/o3e5ngto7qSMz7YteIgCsF1UOcsLk7F7MxWbvrPMY473ew0G+noVL8EPbkmEMftMSeL6HFub/zy+2JQ==","base64")).toString()),gL}var fL;function PAe(){return typeof fL=="undefined"&&(fL=require("zlib").brotliDecompressSync(Buffer.from("G8MSIIzURnVBnObTcvb3XE6v2S9Qgc2K801Oa5otNKEtK8BINZNcaQHy+9/vf/WXBimwutXC33P2DPc64pps5rz7NGGWaOKNSPL4Y2KRE8twut2lFOIN+OXPtRmPMRhMTILib2bEQx43az2I5d3YS8Roa5UZpF/ujHb3Djd3GDvYUfvFYSUQ39vb2cmifp/rgB4J/65JK3wRBTvMBoNBmn3mbXC63/gbBkW/2IRPri0O8bcsRBsmarF328pAln04nyJFkwUAvNu934supAqLtyerZZpJ8I8suJHhf/ocMV+scKwa8NOiDKIPXw6Ex/EEZD6TEGaW8N5zvNHYF10l6Lfooj7D5W2k3dgvQSbp2Wv8TGOayS978gxlOLVjTGXs66ozewbrjwElLtyrYNnWTfzzdEutgROUFPVMhnMoy8EjJLLlWwIEoySxliim9kYW30JUHiPVyjt0iAw/ZpPmCbUCltYPnq6ZNblIKhTNhqS/oqC9iya5sGKZTOVsTEg34n92uZTf2iPpcZih8rPW8CzA+adIGmyCPcKdLMsBLShd+zuEbTrqpwuh+DLmracZcjPC5Sdf5odDAhKpFuOsQS67RT+1VgWWygSv3YwxDnylc04/PYuaMeIzhBkLrvs7e/OUzRTF56MmfY6rI63QtEjEQzq637zQqJ39nNhu3NmoRRhW/086bHGBUtx0PE0j3aEGvkdh9WJC8y8j8mqqke9/dQ5la+Q3ba4RlhvTbnfQhPDDab3tUifkjKuOsp13mXEmO00Mu88F/M67R7LXfoFDFLNtgCSWjWX+3Jn1371pJTK9xPBiMJafvDjtFyAzu8rxeQ0TKMQXNPs5xxiBOd+BRJP8KP88XPtJIbZKh/cdW8KvBUkpqKpGoiIaA32c3/JnQr4efXt85mXvidOvn/eU3Pase1typLYBalJ14mCso9h79nuMOuCa/kZAOkJHmTjP5RM2WNoPasZUAnT1TAE/NH25hUxcQv6hQWR/m1PKk4ooXMcM4SR1iYU3fUohvqk4RY2hbmTVVIXv6TvqO+0doOjgeVFAcom+RlwJQmOVH7pr1Q9LoJT6n1DeQEB+NHygsATbIwTcOKZlJsY8G4+suX1uQLjUWwLjjs0mvSvZcLTpIGAekeR7GCgl8eo3ndAqEe2XCav4huliHjdbIPBsGJuPX7lrO9HX1UbXRH5opOe1x6JsOSgHZR+EaxuXVhpLLxm6jk1LJtZfHSc6BKPun3CpYYVMJGwEUyk8MTGG0XL5MfEwaXpnc9TKnBmlGn6nHiGREc3ysn47XIBDzA+YvFdjZzVIEDcKGpS6PbUJehFRjEne8D0lVU1XuRtlgszq6pTNlQ/3MzNOEgCWPyTct22V2mEi2krizn5VDo9B19/X2DB3hCGRMM7ONbtnAcIx/OWB1u5uPbW1gsH8irXxT/IzG0PoXWYjhbMsH3KTuoOl5o17PulcgvsfTSnKFM354GWI8luqZnrswWjiXy3G+Vbyo1KMopFmmvBwNELgaS8z8dNZchx/Cl/xjddxhMcyqtzFyONb2Zdu90NkI8pAeufe7YlXrp53v8Dj/l8vWeVspRKBGXScBBPI/HinSTGmLDOGGOCIyH0JFdOZx0gWsacNlQLJMIrBhqRxXxHF/5pseWwejlAAvZ3klZSDSYY8mkToaWejXhgNomeGtx1DTLEUFMRkgF5yFB22WYdJnaWN14r1YJj81hGi45+jrADS5nYRhCiSlCJJ1nL8pYX+HDSMhdTEWyRcgHVp/IsUIZYMfT+YYncUQPgcxNGCHfZ88vDdrcUuaGIl6zhAsiaq7R5dfqrqXH/JcBhfjT8D0azayIyEz75Nxp6YkcyDxlJq3EXnJUpqDohJJOysL1t1uNiHESlvsxPb5cpbW0+ICZqJmUZus1BMW0F5IVBODLIo2zHHjA0=","base64")).toString()),fL}var hL;function DAe(){return typeof hL=="undefined"&&(hL=require("zlib").brotliDecompressSync(Buffer.from("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","base64")).toString()),hL}var RAe=new Map([[P.makeIdent(null,"fsevents").identHash,xAe],[P.makeIdent(null,"resolve").identHash,PAe],[P.makeIdent(null,"typescript").identHash,DAe]]),I4e={hooks:{registerPackageExtensions:async(t,e)=>{for(let[r,i]of kAe)e(P.parseDescriptor(r,!0),i)},getBuiltinPatch:async(t,e)=>{var s;let r="compat/";if(!e.startsWith(r))return;let i=P.parseIdent(e.slice(r.length)),n=(s=RAe.get(i.identHash))==null?void 0:s();return typeof n!="undefined"?n:null},reduceDependency:async(t,e,r,i)=>typeof RAe.get(t.identHash)=="undefined"?t:P.makeDescriptor(t,P.makeRange({protocol:"patch:",source:P.stringifyDescriptor(t),selector:`~builtin`,params:null}))}},y4e=I4e;var dL={};ft(dL,{default:()=>B4e});var lb=class extends Le{constructor(){super(...arguments);this.pkg=W.String("-p,--package",{description:"The package to run the provided command from"});this.quiet=W.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=W.String();this.args=W.Proxy()}async execute(){let e=[];this.pkg&&e.push("--package",this.pkg),this.quiet&&e.push("--quiet");let r=P.parseIdent(this.command),i=P.makeIdent(r.scope,`create-${r.name}`);return this.cli.run(["dlx",...e,P.stringifyIdent(i),...this.args])}};lb.paths=[["create"]];var FAe=lb;var Mm=class extends Le{constructor(){super(...arguments);this.packages=W.Array("-p,--package",{description:"The package(s) to install before running the command"});this.quiet=W.Boolean("-q,--quiet",!1,{description:"Only report critical errors instead of printing the full install logs"});this.command=W.String();this.args=W.Proxy()}async execute(){return we.telemetry=null,await K.mktempPromise(async e=>{var p;let r=x.join(e,`dlx-${process.pid}`);await K.mkdirPromise(r),await K.writeFilePromise(x.join(r,"package.json"),`{}
+`),await K.writeFilePromise(x.join(r,"yarn.lock"),"");let i=x.join(r,".yarnrc.yml"),n=await we.findProjectCwd(this.context.cwd,Pt.lockfile),s=!(await we.find(this.context.cwd,null,{strict:!1})).get("enableGlobalCache"),o=n!==null?x.join(n,".yarnrc.yml"):null;o!==null&&K.existsSync(o)?(await K.copyFilePromise(o,i),await we.updateConfiguration(r,m=>{let y=ie(N({},m),{enableGlobalCache:s,enableTelemetry:!1});return Array.isArray(m.plugins)&&(y.plugins=m.plugins.map(b=>{let S=typeof b=="string"?b:b.path,k=H.isAbsolute(S)?S:H.resolve(H.fromPortablePath(n),S);return typeof b=="string"?k:{path:k,spec:b.spec}})),y})):await K.writeFilePromise(i,`enableGlobalCache: ${s}
+enableTelemetry: false
+`);let a=(p=this.packages)!=null?p:[this.command],l=P.parseDescriptor(this.command).name,c=await this.cli.run(["add","--",...a],{cwd:r,quiet:this.quiet});if(c!==0)return c;this.quiet||this.context.stdout.write(`
+`);let u=await we.find(r,this.context.plugins),{project:g,workspace:f}=await ze.find(u,r);if(f===null)throw new ht(g.cwd,r);await g.restoreInstallState();let h=await Zt.getWorkspaceAccessibleBinaries(f);return h.has(l)===!1&&h.size===1&&typeof this.packages=="undefined"&&(l=Array.from(h)[0][0]),await Zt.executeWorkspaceAccessibleBinary(f,l,this.args,{packageAccessibleBinaries:h,cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr})})}};Mm.paths=[["dlx"]],Mm.usage=Re.Usage({description:"run a package in a temporary environment",details:"\n This command will install a package within a temporary environment, and run its binary script if it contains any. The binary will run within the current cwd.\n\n By default Yarn will download the package named `command`, but this can be changed through the use of the `-p,--package` flag which will instruct Yarn to still run the same command but from a different package.\n\n Using `yarn dlx` as a replacement of `yarn add` isn't recommended, as it makes your project non-deterministic (Yarn doesn't keep track of the packages installed through `dlx` - neither their name, nor their version).\n ",examples:[["Use create-react-app to create a new React app","yarn dlx create-react-app ./my-app"],["Install multiple packages for a single command",`yarn dlx -p typescript -p ts-node ts-node --transpile-only -e "console.log('hello!')"`]]});var NAe=Mm;var w4e={commands:[FAe,NAe]},B4e=w4e;var QL={};ft(QL,{default:()=>v4e,fileUtils:()=>CL});var sh=/^(?:[a-zA-Z]:[\\/]|\.{0,2}\/)/,Km=/^[^?]*\.(?:tar\.gz|tgz)(?:::.*)?$/,Xr="file:";var CL={};ft(CL,{makeArchiveFromLocator:()=>cb,makeBufferFromLocator:()=>IL,makeLocator:()=>EL,makeSpec:()=>LAe,parseSpec:()=>mL});function mL(t){let{params:e,selector:r}=P.parseRange(t),i=H.toPortablePath(r);return{parentLocator:e&&typeof e.locator=="string"?P.parseLocator(e.locator):null,path:i}}function LAe({parentLocator:t,path:e,folderHash:r,protocol:i}){let n=t!==null?{locator:P.stringifyLocator(t)}:{},s=typeof r!="undefined"?{hash:r}:{};return P.makeRange({protocol:i,source:e,selector:e,params:N(N({},s),n)})}function EL(t,{parentLocator:e,path:r,folderHash:i,protocol:n}){return P.makeLocator(t,LAe({parentLocator:e,path:r,folderHash:i,protocol:n}))}async function cb(t,{protocol:e,fetchOptions:r,inMemory:i=!1}){let{parentLocator:n,path:s}=P.parseFileStyleRange(t.reference,{protocol:e}),o=x.isAbsolute(s)?{packageFs:new _t(Ke.root),prefixPath:Ke.dot,localPath:Ke.root}:await r.fetcher.fetch(n,r),a=o.localPath?{packageFs:new _t(Ke.root),prefixPath:x.relative(Ke.root,o.localPath)}:o;o!==a&&o.releaseFs&&o.releaseFs();let l=a.packageFs,c=x.join(a.prefixPath,s);return await ve.releaseAfterUseAsync(async()=>await wi.makeArchiveFromDirectory(c,{baseFs:l,prefixPath:P.getIdentVendorPath(t),compressionLevel:r.project.configuration.get("compressionLevel"),inMemory:i}),a.releaseFs)}async function IL(t,{protocol:e,fetchOptions:r}){return(await cb(t,{protocol:e,fetchOptions:r,inMemory:!0})).getBufferAndClose()}var yL=class{supports(e,r){return!!e.reference.startsWith(Xr)}getLocalPath(e,r){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:Xr});if(x.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:x.resolve(s,n)}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async fetchFromDisk(e,r){return cb(e,{protocol:Xr,fetchOptions:r})}};var b4e=2,wL=class{supportsDescriptor(e,r){return e.range.match(sh)?!0:!!e.range.startsWith(Xr)}supportsLocator(e,r){return!!e.reference.startsWith(Xr)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return sh.test(e.range)&&(e=P.makeDescriptor(e,`${Xr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{path:n,parentLocator:s}=mL(e.range);if(s===null)throw new Error("Assertion failed: The descriptor should have been bound");let o=await IL(P.makeLocator(e,P.makeRange({protocol:Xr,source:n,selector:n,params:{locator:P.stringifyLocator(s)}})),{protocol:Xr,fetchOptions:i.fetchOptions}),a=Dn.makeHash(`${b4e}`,o).slice(0,6);return[EL(e,{parentLocator:s,path:n,folderHash:a,protocol:Xr})]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await ve.releaseAfterUseAsync(async()=>await At.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return ie(N({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:Qt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var BL=class{supports(e,r){return Km.test(e.reference)?!!e.reference.startsWith(Xr):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.fetchFromDisk(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromDisk(e,r){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:Xr}),s=x.isAbsolute(n)?{packageFs:new _t(Ke.root),prefixPath:Ke.dot,localPath:Ke.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new _t(Ke.root),prefixPath:x.relative(Ke.root,s.localPath)}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.join(o.prefixPath,n),c=await a.readFilePromise(l);return await ve.releaseAfterUseAsync(async()=>await wi.convertToZip(c,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1}),o.releaseFs)}};var bL=class{supportsDescriptor(e,r){return Km.test(e.range)?!!(e.range.startsWith(Xr)||sh.test(e.range)):!1}supportsLocator(e,r){return Km.test(e.reference)?!!e.reference.startsWith(Xr):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return sh.test(e.range)&&(e=P.makeDescriptor(e,`${Xr}${e.range}`)),P.bindDescriptor(e,{locator:P.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range;return n.startsWith(Xr)&&(n=n.slice(Xr.length)),[P.makeLocator(e,`${Xr}${H.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await ve.releaseAfterUseAsync(async()=>await At.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return ie(N({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:Qt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var Q4e={fetchers:[BL,yL],resolvers:[bL,wL]},v4e=Q4e;var SL={};ft(SL,{default:()=>x4e});var TAe=ge(require("querystring")),OAe=[/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+)\/tarball\/([^/#]+)(?:#(.*))?$/,/^https?:\/\/(?:([^/]+?)@)?github.com\/([^/#]+)\/([^/#]+?)(?:\.git)?(?:#(.*))?$/];function MAe(t){return t?OAe.some(e=>!!t.match(e)):!1}function KAe(t){let e;for(let a of OAe)if(e=t.match(a),e)break;if(!e)throw new Error(S4e(t));let[,r,i,n,s="master"]=e,{commit:o}=TAe.default.parse(s);return s=o||s.replace(/[^:]*:/,""),{auth:r,username:i,reponame:n,treeish:s}}function S4e(t){return`Input cannot be parsed as a valid GitHub URL ('${t}').`}var vL=class{supports(e,r){return!!MAe(e.reference)}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from GitHub`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await ir.get(this.getLocatorUrl(e,r),{configuration:r.project.configuration});return await K.mktempPromise(async n=>{let s=new _t(n);await wi.extractArchiveTo(i,s,{stripComponents:1});let o=Bu.splitRepoUrl(e.reference),a=x.join(n,"package.tgz");await Zt.prepareExternalProject(n,a,{configuration:r.project.configuration,report:r.report,workspace:o.extra.workspace,locator:e});let l=await K.readFilePromise(a);return await wi.convertToZip(l,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})})}getLocatorUrl(e,r){let{auth:i,username:n,reponame:s,treeish:o}=KAe(e.reference);return`https://${i?`${i}@`:""}github.com/${n}/${s}/archive/${o}.tar.gz`}};var k4e={hooks:{async fetchHostedRepository(t,e,r){if(t!==null)return t;let i=new vL;if(!i.supports(e,r))return null;try{return await i.fetch(e,r)}catch(n){return null}}}},x4e=k4e;var PL={};ft(PL,{default:()=>D4e});var Um=/^[^?]*\.(?:tar\.gz|tgz)(?:\?.*)?$/,Hm=/^https?:/;var kL=class{supports(e,r){return Um.test(e.reference)?!!Hm.test(e.reference):!1}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i=await ir.get(e.reference,{configuration:r.project.configuration});return await wi.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var xL=class{supportsDescriptor(e,r){return Um.test(e.range)?!!Hm.test(e.range):!1}supportsLocator(e,r){return Um.test(e.reference)?!!Hm.test(e.reference):!1}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){return[P.convertDescriptorToLocator(e)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await ve.releaseAfterUseAsync(async()=>await At.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return ie(N({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:Qt.HARD,conditions:n.getConditions(),dependencies:n.dependencies,peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var P4e={fetchers:[kL],resolvers:[xL]},D4e=P4e;var NL={};ft(NL,{default:()=>Rze});var gle=ge(ule()),FL=ge(require("util")),Gm=class extends Le{constructor(){super(...arguments);this.private=W.Boolean("-p,--private",!1,{description:"Initialize a private package"});this.workspace=W.Boolean("-w,--workspace",!1,{description:"Initialize a workspace root with a `packages/` directory"});this.install=W.String("-i,--install",!1,{tolerateBoolean:!0,description:"Initialize a package with a specific bundle that will be locked in the project"});this.usev2=W.Boolean("-2",!1,{hidden:!0});this.yes=W.Boolean("-y,--yes",{hidden:!0});this.assumeFreshProject=W.Boolean("--assume-fresh-project",!1,{hidden:!0})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),r=typeof this.install=="string"?this.install:this.usev2||this.install===!0?"latest":null;return r!==null?await this.executeProxy(e,r):await this.executeRegular(e)}async executeProxy(e,r){if(e.projectCwd!==null&&e.projectCwd!==this.context.cwd)throw new Pe("Cannot use the --install flag from within a project subdirectory");K.existsSync(this.context.cwd)||await K.mkdirPromise(this.context.cwd,{recursive:!0});let i=x.join(this.context.cwd,e.get("lockfileFilename"));K.existsSync(i)||await K.writeFilePromise(i,"");let n=await this.cli.run(["set","version",r],{quiet:!0});if(n!==0)return n;let s=[];return this.private&&s.push("-p"),this.workspace&&s.push("-w"),this.yes&&s.push("-y"),await K.mktempPromise(async o=>{let{code:a}=await Fr.pipevp("yarn",["init",...s],{cwd:this.context.cwd,stdin:this.context.stdin,stdout:this.context.stdout,stderr:this.context.stderr,env:await Zt.makeScriptEnv({binFolder:o})});return a})}async executeRegular(e){var l;let r=null;try{r=(await ze.find(e,this.context.cwd)).project}catch{r=null}K.existsSync(this.context.cwd)||await K.mkdirPromise(this.context.cwd,{recursive:!0});let i=await At.tryFind(this.context.cwd)||new At,n=Object.fromEntries(e.get("initFields").entries());i.load(n),i.name=(l=i.name)!=null?l:P.makeIdent(e.get("initScope"),x.basename(this.context.cwd)),i.packageManager=Kr&&ve.isTaggedYarnVersion(Kr)?`yarn@${Kr}`:null,typeof i.raw.private=="undefined"&&(this.private||this.workspace&&i.workspaceDefinitions.length===0)&&(i.private=!0),this.workspace&&i.workspaceDefinitions.length===0&&(await K.mkdirPromise(x.join(this.context.cwd,"packages"),{recursive:!0}),i.workspaceDefinitions=[{pattern:"packages/*"}]);let s={};i.exportTo(s),FL.inspect.styles.name="cyan",this.context.stdout.write(`${(0,FL.inspect)(s,{depth:Infinity,colors:!0,compact:!1})}
+`);let o=x.join(this.context.cwd,At.fileName);await K.changeFilePromise(o,`${JSON.stringify(s,null,2)}
+`,{automaticNewlines:!0});let a=x.join(this.context.cwd,"README.md");if(K.existsSync(a)||await K.writeFilePromise(a,`# ${P.stringifyIdent(i.name)}
+`),!r||r.cwd===this.context.cwd){let c=x.join(this.context.cwd,Pt.lockfile);K.existsSync(c)||await K.writeFilePromise(c,"");let g=[".yarn/*","!.yarn/patches","!.yarn/plugins","!.yarn/releases","!.yarn/sdks","!.yarn/versions","","# Swap the comments on the following lines if you don't wish to use zero-installs","# Documentation here: https://yarnpkg.com/features/zero-installs","!.yarn/cache","#.pnp.*"].map(y=>`${y}
+`).join(""),f=x.join(this.context.cwd,".gitignore");K.existsSync(f)||await K.writeFilePromise(f,g);let h={["*"]:{endOfLine:"lf",insertFinalNewline:!0},["*.{js,json,yml}"]:{charset:"utf-8",indentStyle:"space",indentSize:2}};(0,gle.default)(h,e.get("initEditorConfig"));let p=`root = true
+`;for(let[y,b]of Object.entries(h)){p+=`
+[${y}]
+`;for(let[S,k]of Object.entries(b))p+=`${S.replace(/[A-Z]/g,Y=>`_${Y.toLowerCase()}`)} = ${k}
+`}let m=x.join(this.context.cwd,".editorconfig");K.existsSync(m)||await K.writeFilePromise(m,p),K.existsSync(x.join(this.context.cwd,".git"))||await Fr.execvp("git",["init"],{cwd:this.context.cwd})}}};Gm.paths=[["init"]],Gm.usage=Re.Usage({description:"create a new package",details:"\n This command will setup a new package in your local directory.\n\n If the `-p,--private` or `-w,--workspace` options are set, the package will be private by default.\n\n If the `-w,--workspace` option is set, the package will be configured to accept a set of workspaces in the `packages/` directory.\n\n If the `-i,--install` option is given a value, Yarn will first download it using `yarn set version` and only then forward the init call to the newly downloaded bundle. Without arguments, the downloaded bundle will be `latest`.\n\n The initial settings of the manifest can be changed by using the `initScope` and `initFields` configuration values. Additionally, Yarn will generate an EditorConfig file whose rules can be altered via `initEditorConfig`, and will initialize a Git repository in the current directory.\n ",examples:[["Create a new package in the local directory","yarn init"],["Create a new private package in the local directory","yarn init -p"],["Create a new package and store the Yarn release inside","yarn init -i=latest"],["Create a new private package and defines it as a workspace root","yarn init -w"]]});var fle=Gm;var Dze={configuration:{initScope:{description:"Scope used when creating packages via the init command",type:ye.STRING,default:null},initFields:{description:"Additional fields to set when creating packages via the init command",type:ye.MAP,valueDefinition:{description:"",type:ye.ANY}},initEditorConfig:{description:"Extra rules to define in the generator editorconfig",type:ye.MAP,valueDefinition:{description:"",type:ye.ANY}}},commands:[fle]},Rze=Dze;var KL={};ft(KL,{default:()=>Nze});var EA="portal:",IA="link:";var LL=class{supports(e,r){return!!e.reference.startsWith(EA)}getLocalPath(e,r){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:EA});if(x.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:x.resolve(s,n)}async fetch(e,r){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:EA}),s=x.isAbsolute(n)?{packageFs:new _t(Ke.root),prefixPath:Ke.dot,localPath:Ke.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new _t(Ke.root),prefixPath:x.relative(Ke.root,s.localPath),localPath:Ke.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new _t(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Ke.dot,localPath:l}:{packageFs:new Ra(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Ke.dot}}};var TL=class{supportsDescriptor(e,r){return!!e.range.startsWith(EA)}supportsLocator(e,r){return!!e.reference.startsWith(EA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(EA.length);return[P.makeLocator(e,`${EA}${H.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){if(!r.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let i=await r.fetchOptions.fetcher.fetch(e,r.fetchOptions),n=await ve.releaseAfterUseAsync(async()=>await At.find(i.prefixPath,{baseFs:i.packageFs}),i.releaseFs);return ie(N({},e),{version:n.version||"0.0.0",languageName:n.languageName||r.project.configuration.get("defaultLanguageName"),linkType:Qt.SOFT,conditions:n.getConditions(),dependencies:new Map([...n.dependencies]),peerDependencies:n.peerDependencies,dependenciesMeta:n.dependenciesMeta,peerDependenciesMeta:n.peerDependenciesMeta,bin:n.bin})}};var OL=class{supports(e,r){return!!e.reference.startsWith(IA)}getLocalPath(e,r){let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:IA});if(x.isAbsolute(n))return n;let s=r.fetcher.getLocalPath(i,r);return s===null?null:x.resolve(s,n)}async fetch(e,r){var c;let{parentLocator:i,path:n}=P.parseFileStyleRange(e.reference,{protocol:IA}),s=x.isAbsolute(n)?{packageFs:new _t(Ke.root),prefixPath:Ke.dot,localPath:Ke.root}:await r.fetcher.fetch(i,r),o=s.localPath?{packageFs:new _t(Ke.root),prefixPath:x.relative(Ke.root,s.localPath),localPath:Ke.root}:s;s!==o&&s.releaseFs&&s.releaseFs();let a=o.packageFs,l=x.resolve((c=o.localPath)!=null?c:o.packageFs.getRealPath(),o.prefixPath,n);return s.localPath?{packageFs:new _t(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Ke.dot,discardFromLookup:!0,localPath:l}:{packageFs:new Ra(l,{baseFs:a}),releaseFs:o.releaseFs,prefixPath:Ke.dot,discardFromLookup:!0}}};var ML=class{supportsDescriptor(e,r){return!!e.range.startsWith(IA)}supportsLocator(e,r){return!!e.reference.startsWith(IA)}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){return P.bindDescriptor(e,{locator:P.stringifyLocator(r)})}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(IA.length);return[P.makeLocator(e,`${IA}${H.toPortablePath(n)}`)]}async getSatisfying(e,r,i){return null}async resolve(e,r){return ie(N({},e),{version:"0.0.0",languageName:r.project.configuration.get("defaultLanguageName"),linkType:Qt.SOFT,conditions:null,dependencies:new Map,peerDependencies:new Map,dependenciesMeta:new Map,peerDependenciesMeta:new Map,bin:new Map})}};var Fze={fetchers:[OL,LL],resolvers:[ML,TL]},Nze=Fze;var fT={};ft(fT,{default:()=>j5e});var Mn;(function(i){i[i.REGULAR=0]="REGULAR",i[i.WORKSPACE=1]="WORKSPACE",i[i.EXTERNAL_SOFT_LINK=2]="EXTERNAL_SOFT_LINK"})(Mn||(Mn={}));var yA;(function(i){i[i.YES=0]="YES",i[i.NO=1]="NO",i[i.DEPENDS=2]="DEPENDS"})(yA||(yA={}));var UL=(t,e)=>`${t}@${e}`,hle=(t,e)=>{let r=e.indexOf("#"),i=r>=0?e.substring(r+1):e;return UL(t,i)},Io;(function(s){s[s.NONE=-1]="NONE",s[s.PERF=0]="PERF",s[s.CHECK=1]="CHECK",s[s.REASONS=2]="REASONS",s[s.INTENSIVE_CHECK=9]="INTENSIVE_CHECK"})(Io||(Io={}));var dle=(t,e={})=>{let r=e.debugLevel||Number(process.env.NM_DEBUG_LEVEL||-1),i=e.check||r>=9,n=e.hoistingLimits||new Map,s={check:i,debugLevel:r,hoistingLimits:n,fastLookupPossible:!0},o;s.debugLevel>=0&&(o=Date.now());let a=Lze(t,s),l=!1,c=0;do l=HL(a,[a],new Set([a.locator]),new Map,s).anotherRoundNeeded,s.fastLookupPossible=!1,c++;while(l);if(s.debugLevel>=0&&console.log(`hoist time: ${Date.now()-o}ms, rounds: ${c}`),s.debugLevel>=1){let u=jm(a);if(HL(a,[a],new Set([a.locator]),new Map,s).isGraphChanged)throw new Error(`The hoisting result is not terminal, prev tree:
+${u}, next tree:
+${jm(a)}`);let f=ple(a);if(f)throw new Error(`${f}, after hoisting finished:
+${jm(a)}`)}return s.debugLevel>=2&&console.log(jm(a)),Tze(a)},Oze=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=s=>{if(!i.has(s)){i.add(s);for(let o of s.hoistedDependencies.values())r.set(o.name,o);for(let o of s.dependencies.values())s.peerNames.has(o.name)||n(o)}};return n(e),r},Mze=t=>{let e=t[t.length-1],r=new Map,i=new Set,n=new Set,s=(o,a)=>{if(i.has(o))return;i.add(o);for(let c of o.hoistedDependencies.values())if(!a.has(c.name)){let u;for(let g of t)u=g.dependencies.get(c.name),u&&r.set(u.name,u)}let l=new Set;for(let c of o.dependencies.values())l.add(c.name);for(let c of o.dependencies.values())o.peerNames.has(c.name)||s(c,l)};return s(e,n),r},Cle=(t,e)=>{if(e.decoupled)return e;let{name:r,references:i,ident:n,locator:s,dependencies:o,originalDependencies:a,hoistedDependencies:l,peerNames:c,reasons:u,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:p,hoistedTo:m}=e,y={name:r,references:new Set(i),ident:n,locator:s,dependencies:new Map(o),originalDependencies:new Map(a),hoistedDependencies:new Map(l),peerNames:new Set(c),reasons:new Map(u),decoupled:!0,isHoistBorder:g,hoistPriority:f,dependencyKind:h,hoistedFrom:new Map(p),hoistedTo:new Map(m)},b=y.dependencies.get(r);return b&&b.ident==y.ident&&y.dependencies.set(r,y),t.dependencies.set(y.name,y),y},Kze=(t,e)=>{let r=new Map([[t.name,[t.ident]]]);for(let n of t.dependencies.values())t.peerNames.has(n.name)||r.set(n.name,[n.ident]);let i=Array.from(e.keys());i.sort((n,s)=>{let o=e.get(n),a=e.get(s);return a.hoistPriority!==o.hoistPriority?a.hoistPriority-o.hoistPriority:a.peerDependents.size!==o.peerDependents.size?a.peerDependents.size-o.peerDependents.size:a.dependents.size-o.dependents.size});for(let n of i){let s=n.substring(0,n.indexOf("@",1)),o=n.substring(s.length+1);if(!t.peerNames.has(s)){let a=r.get(s);a||(a=[],r.set(s,a)),a.indexOf(o)<0&&a.push(o)}}return r},GL=t=>{let e=new Set,r=(i,n=new Set)=>{if(!n.has(i)){n.add(i);for(let s of i.peerNames)if(!t.peerNames.has(s)){let o=t.dependencies.get(s);o&&!e.has(o)&&r(o,n)}e.add(i)}};for(let i of t.dependencies.values())t.peerNames.has(i.name)||r(i);return e},HL=(t,e,r,i,n,s=new Set)=>{let o=e[e.length-1];if(s.has(o))return{anotherRoundNeeded:!1,isGraphChanged:!1};s.add(o);let a=Hze(o),l=Kze(o,a),c=t==o?new Map:n.fastLookupPossible?Oze(e):Mze(e),u,g=!1,f=!1,h=new Map(Array.from(l.entries()).map(([m,y])=>[m,y[0]])),p=new Map;do{let m=Uze(t,e,r,c,h,l,i,p,n);m.isGraphChanged&&(f=!0),m.anotherRoundNeeded&&(g=!0),u=!1;for(let[y,b]of l)b.length>1&&!o.dependencies.has(y)&&(h.delete(y),b.shift(),h.set(y,b[0]),u=!0)}while(u);for(let m of o.dependencies.values())if(!o.peerNames.has(m.name)&&!r.has(m.locator)){r.add(m.locator);let y=HL(t,[...e,m],r,p,n);y.isGraphChanged&&(f=!0),y.anotherRoundNeeded&&(g=!0),r.delete(m.locator)}return{anotherRoundNeeded:g,isGraphChanged:f}},Gze=t=>{for(let[e,r]of t.dependencies)if(!t.peerNames.has(e)&&r.ident!==t.ident)return!0;return!1},jze=(t,e,r,i,n,s,o,a,{outputReason:l,fastLookupPossible:c})=>{let u,g=null,f=new Set;l&&(u=`${Array.from(e).map(y=>Ni(y)).join("\u2192")}`);let h=r[r.length-1],m=!(i.ident===h.ident);if(l&&!m&&(g="- self-reference"),m&&(m=i.dependencyKind!==1,l&&!m&&(g="- workspace")),m&&i.dependencyKind===2&&(m=!Gze(i),l&&!m&&(g="- external soft link with unhoisted dependencies")),m&&(m=h.dependencyKind!==1||h.hoistedFrom.has(i.name)||e.size===1,l&&!m&&(g=h.reasons.get(i.name))),m&&(m=!t.peerNames.has(i.name),l&&!m&&(g=`- cannot shadow peer: ${Ni(t.originalDependencies.get(i.name).locator)} at ${u}`)),m){let y=!1,b=n.get(i.name);if(y=!b||b.ident===i.ident,l&&!y&&(g=`- filled by: ${Ni(b.locator)} at ${u}`),y)for(let S=r.length-1;S>=1;S--){let T=r[S].dependencies.get(i.name);if(T&&T.ident!==i.ident){y=!1;let Y=a.get(h);Y||(Y=new Set,a.set(h,Y)),Y.add(i.name),l&&(g=`- filled by ${Ni(T.locator)} at ${r.slice(0,S).map(j=>Ni(j.locator)).join("\u2192")}`);break}}m=y}if(m&&(m=s.get(i.name)===i.ident,l&&!m&&(g=`- filled by: ${Ni(o.get(i.name)[0])} at ${u}`)),m){let y=!0,b=new Set(i.peerNames);for(let S=r.length-1;S>=1;S--){let k=r[S];for(let T of b){if(k.peerNames.has(T)&&k.originalDependencies.has(T))continue;let Y=k.dependencies.get(T);Y&&t.dependencies.get(T)!==Y&&(S===r.length-1?f.add(Y):(f=null,y=!1,l&&(g=`- peer dependency ${Ni(Y.locator)} from parent ${Ni(k.locator)} was not hoisted to ${u}`))),b.delete(T)}if(!y)break}m=y}if(m&&!c)for(let y of i.hoistedDependencies.values()){let b=n.get(y.name)||t.dependencies.get(y.name);if(!b||y.ident!==b.ident){m=!1,l&&(g=`- previously hoisted dependency mismatch, needed: ${Ni(y.locator)}, available: ${Ni(b==null?void 0:b.locator)}`);break}}return f!==null&&f.size>0?{isHoistable:2,dependsOn:f,reason:g}:{isHoistable:m?0:1,reason:g}},ub=t=>`${t.name}@${t.locator}`,Uze=(t,e,r,i,n,s,o,a,l)=>{let c=e[e.length-1],u=new Set,g=!1,f=!1,h=(b,S,k,T,Y)=>{if(u.has(T))return;let j=[...S,ub(T)],Z=[...k,ub(T)],J=new Map,re=new Map;for(let X of GL(T)){let O=jze(c,r,[c,...b,T],X,i,n,s,a,{outputReason:l.debugLevel>=2,fastLookupPossible:l.fastLookupPossible});if(re.set(X,O),O.isHoistable===2)for(let L of O.dependsOn){let pe=J.get(L.name)||new Set;pe.add(X.name),J.set(L.name,pe)}}let ee=new Set,A=(X,O,L)=>{if(!ee.has(X)){ee.add(X),re.set(X,{isHoistable:1,reason:L});for(let pe of J.get(X.name)||[])A(T.dependencies.get(pe),O,l.debugLevel>=2?`- peer dependency ${Ni(X.locator)} from parent ${Ni(T.locator)} was not hoisted`:"")}};for(let[X,O]of re)O.isHoistable===1&&A(X,O,O.reason);let oe=!1;for(let X of re.keys())if(!ee.has(X)){f=!0;let O=o.get(T);O&&O.has(X.name)&&(g=!0),oe=!0,T.dependencies.delete(X.name),T.hoistedDependencies.set(X.name,X),T.reasons.delete(X.name);let L=c.dependencies.get(X.name);if(l.debugLevel>=2){let pe=Array.from(S).concat([T.locator]).map(Oe=>Ni(Oe)).join("\u2192"),Ce=c.hoistedFrom.get(X.name);Ce||(Ce=[],c.hoistedFrom.set(X.name,Ce)),Ce.push(pe),T.hoistedTo.set(X.name,Array.from(e).map(Oe=>Ni(Oe.locator)).join("\u2192"))}if(!L)c.ident!==X.ident&&(c.dependencies.set(X.name,X),Y.add(X));else for(let pe of X.references)L.references.add(pe)}if(T.dependencyKind===2&&oe&&(g=!0),l.check){let X=ple(t);if(X)throw new Error(`${X}, after hoisting dependencies of ${[c,...b,T].map(O=>Ni(O.locator)).join("\u2192")}:
+${jm(t)}`)}let le=GL(T);for(let X of le)if(ee.has(X)){let O=re.get(X);if((n.get(X.name)===X.ident||!T.reasons.has(X.name))&&O.isHoistable!==0&&T.reasons.set(X.name,O.reason),!X.isHoistBorder&&Z.indexOf(ub(X))<0){u.add(T);let pe=Cle(T,X);h([...b,T],j,Z,pe,m),u.delete(T)}}},p,m=new Set(GL(c)),y=Array.from(e).map(b=>ub(b));do{p=m,m=new Set;for(let b of p){if(b.locator===c.locator||b.isHoistBorder)continue;let S=Cle(c,b);h([],Array.from(r),y,S,m)}}while(m.size>0);return{anotherRoundNeeded:g,isGraphChanged:f}},ple=t=>{let e=[],r=new Set,i=new Set,n=(s,o,a)=>{if(r.has(s)||(r.add(s),i.has(s)))return;let l=new Map(o);for(let c of s.dependencies.values())s.peerNames.has(c.name)||l.set(c.name,c);for(let c of s.originalDependencies.values()){let u=l.get(c.name),g=()=>`${Array.from(i).concat([s]).map(f=>Ni(f.locator)).join("\u2192")}`;if(s.peerNames.has(c.name)){let f=o.get(c.name);(f!==u||!f||f.ident!==c.ident)&&e.push(`${g()} - broken peer promise: expected ${c.ident} but found ${f&&f.ident}`)}else{let f=a.hoistedFrom.get(s.name),h=s.hoistedTo.get(c.name),p=`${f?` hoisted from ${f.join(", ")}`:""}`,m=`${h?` hoisted to ${h}`:""}`,y=`${g()}${p}`;u?u.ident!==c.ident&&e.push(`${y} - broken require promise for ${c.name}${m}: expected ${c.ident}, but found: ${u.ident}`):e.push(`${y} - broken require promise: no required dependency ${c.name}${m} found`)}}i.add(s);for(let c of s.dependencies.values())s.peerNames.has(c.name)||n(c,l,s);i.delete(s)};return n(t,t.dependencies,t),e.join(`
+`)},Lze=(t,e)=>{let{identName:r,name:i,reference:n,peerNames:s}=t,o={name:i,references:new Set([n]),locator:UL(r,n),ident:hle(r,n),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(s),reasons:new Map,decoupled:!0,isHoistBorder:!0,hoistPriority:0,dependencyKind:1,hoistedFrom:new Map,hoistedTo:new Map},a=new Map([[t,o]]),l=(c,u)=>{let g=a.get(c),f=!!g;if(!g){let{name:h,identName:p,reference:m,peerNames:y,hoistPriority:b,dependencyKind:S}=c,k=e.hoistingLimits.get(u.locator);g={name:h,references:new Set([m]),locator:UL(p,m),ident:hle(p,m),dependencies:new Map,originalDependencies:new Map,hoistedDependencies:new Map,peerNames:new Set(y),reasons:new Map,decoupled:!0,isHoistBorder:k?k.has(h):!1,hoistPriority:b||0,dependencyKind:S||0,hoistedFrom:new Map,hoistedTo:new Map},a.set(c,g)}if(u.dependencies.set(c.name,g),u.originalDependencies.set(c.name,g),f){let h=new Set,p=m=>{if(!h.has(m)){h.add(m),m.decoupled=!1;for(let y of m.dependencies.values())m.peerNames.has(y.name)||p(y)}};p(g)}else for(let h of c.dependencies)l(h,g)};for(let c of t.dependencies)l(c,o);return o},jL=t=>t.substring(0,t.indexOf("@",1)),Tze=t=>{let e={name:t.name,identName:jL(t.locator),references:new Set(t.references),dependencies:new Set},r=new Set([t]),i=(n,s,o)=>{let a=r.has(n),l;if(s===n)l=o;else{let{name:c,references:u,locator:g}=n;l={name:c,identName:jL(g),references:u,dependencies:new Set}}if(o.dependencies.add(l),!a){r.add(n);for(let c of n.dependencies.values())n.peerNames.has(c.name)||i(c,n,l);r.delete(n)}};for(let n of t.dependencies.values())i(n,t,e);return e},Hze=t=>{let e=new Map,r=new Set([t]),i=o=>`${o.name}@${o.ident}`,n=o=>{let a=i(o),l=e.get(a);return l||(l={dependents:new Set,peerDependents:new Set,hoistPriority:0},e.set(a,l)),l},s=(o,a)=>{let l=!!r.has(a);if(n(a).dependents.add(o.ident),!l){r.add(a);for(let u of a.dependencies.values()){let g=n(u);g.hoistPriority=Math.max(g.hoistPriority,u.hoistPriority),a.peerNames.has(u.name)?g.peerDependents.add(a.ident):s(a,u)}}};for(let o of t.dependencies.values())t.peerNames.has(o.name)||s(t,o);return e},Ni=t=>{if(!t)return"none";let e=t.indexOf("@",1),r=t.substring(0,e);r.endsWith("$wsroot$")&&(r=`wh:${r.replace("$wsroot$","")}`);let i=t.substring(e+1);if(i==="workspace:.")return".";if(i){let n=(i.indexOf("#")>0?i.split("#")[1]:i).replace("npm:","");return i.startsWith("virtual")&&(r=`v:${r}`),n.startsWith("workspace")&&(r=`w:${r}`,n=""),`${r}${n?`@${n}`:""}`}else return`${r}`},mle=5e4,jm=t=>{let e=0,r=(n,s,o="")=>{if(e>mle||s.has(n))return"";e++;let a=Array.from(n.dependencies.values()).sort((c,u)=>c.name===u.name?0:c.name>u.name?1:-1),l="";s.add(n);for(let c=0;c":"")+(f!==u.name?`a:${u.name}:`:"")+Ni(u.locator)+(g?` ${g}`:"")}
+`,l+=r(u,s,`${o}${cmle?`
+Tree is too large, part of the tree has been dunped
+`:"")};var yo;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(yo||(yo={}));var Kn;(function(i){i.WORKSPACES="workspaces",i.DEPENDENCIES="dependencies",i.NONE="none"})(Kn||(Kn={}));var Ele="node_modules",bu="$wsroot$";var Ym=(t,e)=>{let{packageTree:r,hoistingLimits:i,errors:n,preserveSymlinksRequired:s}=Yze(t,e),o=null;if(n.length===0){let a=dle(r,{hoistingLimits:i});o=qze(t,a,e)}return{tree:o,errors:n,preserveSymlinksRequired:s}},fa=t=>`${t.name}@${t.reference}`,YL=t=>{let e=new Map;for(let[r,i]of t.entries())if(!i.dirList){let n=e.get(i.locator);n||(n={target:i.target,linkType:i.linkType,locations:[],aliases:i.aliases},e.set(i.locator,n)),n.locations.push(r)}for(let r of e.values())r.locations=r.locations.sort((i,n)=>{let s=i.split(x.delimiter).length,o=n.split(x.delimiter).length;return n===i?0:s!==o?o-s:n>i?1:-1});return e},Ile=(t,e)=>{let r=P.isVirtualLocator(t)?P.devirtualizeLocator(t):t,i=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e;return P.areLocatorsEqual(r,i)},qL=(t,e,r,i)=>{if(t.linkType!==yo.SOFT)return!1;let n=H.toPortablePath(r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation);return x.contains(i,n)===null},Jze=t=>{let e=t.getPackageInformation(t.topLevel);if(e===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");if(t.findPackageLocator(e.packageLocation)===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let i=H.toPortablePath(e.packageLocation.slice(0,-1)),n=new Map,s={children:new Map},o=t.getDependencyTreeRoots(),a=new Map,l=new Set,c=(f,h)=>{let p=fa(f);if(l.has(p))return;l.add(p);let m=t.getPackageInformation(f);if(m){let y=h?fa(h):"";if(fa(f)!==y&&m.linkType===yo.SOFT&&!qL(m,f,t,i)){let b=yle(m,f,t);(!a.get(b)||f.reference.startsWith("workspace:"))&&a.set(b,f)}for(let[b,S]of m.packageDependencies)S!==null&&(m.packagePeers.has(b)||c(t.getLocator(b,S),f))}};for(let f of o)c(f,null);let u=i.split(x.sep);for(let f of a.values()){let h=t.getPackageInformation(f),m=H.toPortablePath(h.packageLocation.slice(0,-1)).split(x.sep).slice(u.length),y=s;for(let b of m){let S=y.children.get(b);S||(S={children:new Map},y.children.set(b,S)),y=S}y.workspaceLocator=f}let g=(f,h)=>{if(f.workspaceLocator){let p=fa(h),m=n.get(p);m||(m=new Set,n.set(p,m)),m.add(f.workspaceLocator)}for(let p of f.children.values())g(p,f.workspaceLocator||h)};for(let f of s.children.values())g(f,s.workspaceLocator);return n},Yze=(t,e)=>{let r=[],i=!1,n=new Map,s=Jze(t),o=t.getPackageInformation(t.topLevel);if(o===null)throw new Error("Assertion failed: Expected the top-level package to have been registered");let a=t.findPackageLocator(o.packageLocation);if(a===null)throw new Error("Assertion failed: Expected the top-level package to have a physical locator");let l=H.toPortablePath(o.packageLocation.slice(0,-1)),c={name:a.name,identName:a.name,reference:a.reference,peerNames:o.packagePeers,dependencies:new Set,dependencyKind:Mn.WORKSPACE},u=new Map,g=(h,p)=>`${fa(p)}:${h}`,f=(h,p,m,y,b,S,k,T)=>{var X,O;let Y=g(h,m),j=u.get(Y),Z=!!j;!Z&&m.name===a.name&&m.reference===a.reference&&(j=c,u.set(Y,c));let J=qL(p,m,t,l);if(!j){let L=Mn.REGULAR;J?L=Mn.EXTERNAL_SOFT_LINK:p.linkType===yo.SOFT&&m.name.endsWith(bu)&&(L=Mn.WORKSPACE),j={name:h,identName:m.name,reference:m.reference,dependencies:new Set,peerNames:L===Mn.WORKSPACE?new Set:p.packagePeers,dependencyKind:L},u.set(Y,j)}let re;if(J?re=2:b.linkType===yo.SOFT?re=1:re=0,j.hoistPriority=Math.max(j.hoistPriority||0,re),T&&!J){let L=fa({name:y.identName,reference:y.reference}),pe=n.get(L)||new Set;n.set(L,pe),pe.add(j.name)}let ee=new Map(p.packageDependencies);if(e.project){let L=e.project.workspacesByCwd.get(H.toPortablePath(p.packageLocation.slice(0,-1)));if(L){let pe=new Set([...Array.from(L.manifest.peerDependencies.values(),Ce=>P.stringifyIdent(Ce)),...Array.from(L.manifest.peerDependenciesMeta.keys())]);for(let Ce of pe)ee.has(Ce)||(ee.set(Ce,S.get(Ce)||null),j.peerNames.add(Ce))}}let A=fa({name:m.name.replace(bu,""),reference:m.reference}),oe=s.get(A);if(oe)for(let L of oe)ee.set(`${L.name}${bu}`,L.reference);(p!==b||p.linkType!==yo.SOFT||!J&&(!e.selfReferencesByCwd||e.selfReferencesByCwd.get(k)))&&y.dependencies.add(j);let le=m!==a&&p.linkType===yo.SOFT&&!m.name.endsWith(bu)&&!J;if(!Z&&!le){let L=new Map;for(let[pe,Ce]of ee)if(Ce!==null){let Oe=t.getLocator(pe,Ce),te=t.getLocator(pe.replace(bu,""),Ce),se=t.getPackageInformation(te);if(se===null)throw new Error("Assertion failed: Expected the package to have been registered");let be=qL(se,Oe,t,l);if(e.validateExternalSoftLinks&&e.project&&be){se.packageDependencies.size>0&&(i=!0);for(let[Se,de]of se.packageDependencies)if(de!==null){let V=P.parseLocator(Array.isArray(de)?`${de[0]}@${de[1]}`:`${Se}@${de}`);if(fa(V)!==fa(Oe)){let Qe=ee.get(Se);if(Qe){let ce=P.parseLocator(Array.isArray(Qe)?`${Qe[0]}@${Qe[1]}`:`${Se}@${Qe}`);Ile(ce,V)||r.push({messageName:$.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(Oe.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${m.name}@${m.reference}`))} dependency ${P.prettyLocator(e.project.configuration,V)} conflicts with parent dependency ${P.prettyLocator(e.project.configuration,ce)}`})}else{let ce=L.get(Se);if(ce){let fe=ce.target,gt=P.parseLocator(Array.isArray(fe)?`${fe[0]}@${fe[1]}`:`${Se}@${fe}`);Ile(gt,V)||r.push({messageName:$.NM_CANT_INSTALL_EXTERNAL_SOFT_LINK,text:`Cannot link ${P.prettyIdent(e.project.configuration,P.parseIdent(Oe.name))} into ${P.prettyLocator(e.project.configuration,P.parseLocator(`${m.name}@${m.reference}`))} dependency ${P.prettyLocator(e.project.configuration,V)} conflicts with dependency ${P.prettyLocator(e.project.configuration,gt)} from sibling portal ${P.prettyIdent(e.project.configuration,P.parseIdent(ce.portal.name))}`})}else L.set(Se,{target:V.reference,portal:Oe})}}}}let he=(X=e.hoistingLimitsByCwd)==null?void 0:X.get(k),Fe=be?k:x.relative(l,H.toPortablePath(se.packageLocation))||Ke.dot,Ue=(O=e.hoistingLimitsByCwd)==null?void 0:O.get(Fe),xe=he===Kn.DEPENDENCIES||Ue===Kn.DEPENDENCIES||Ue===Kn.WORKSPACES;f(pe,se,Oe,j,p,ee,Fe,xe)}}};return f(a.name,o,a,c,o,o.packageDependencies,Ke.dot,!1),{packageTree:c,hoistingLimits:n,errors:r,preserveSymlinksRequired:i}};function yle(t,e,r){let i=r.resolveVirtual&&e.reference&&e.reference.startsWith("virtual:")?r.resolveVirtual(t.packageLocation):t.packageLocation;return H.toPortablePath(i||t.packageLocation)}function Wze(t,e,r){let i=e.getLocator(t.name.replace(bu,""),t.reference),n=e.getPackageInformation(i);if(n===null)throw new Error("Assertion failed: Expected the package to be registered");let s,o;return r.pnpifyFs?(o=H.toPortablePath(n.packageLocation),s=yo.SOFT):(o=yle(n,t,e),s=n.linkType),{linkType:s,target:o}}var qze=(t,e,r)=>{let i=new Map,n=(u,g,f)=>{let{linkType:h,target:p}=Wze(u,t,r);return{locator:fa(u),nodePath:g,target:p,linkType:h,aliases:f}},s=u=>{let[g,f]=u.split("/");return f?{scope:Jr(g),name:Jr(f)}:{scope:null,name:Jr(g)}},o=new Set,a=(u,g,f)=>{if(!o.has(u)){o.add(u);for(let h of u.dependencies){if(h===u)continue;let p=Array.from(h.references).sort(),m={name:h.identName,reference:p[0]},{name:y,scope:b}=s(h.name),S=b?[b,y]:[y],k=x.join(g,Ele),T=x.join(k,...S),Y=`${f}/${m.name}`,j=n(m,f,p.slice(1)),Z=!1;if(j.linkType===yo.SOFT&&r.project){let J=r.project.workspacesByCwd.get(j.target.slice(0,-1));Z=!!(J&&!J.manifest.name)}if(!h.name.endsWith(bu)&&!Z){let J=i.get(T);if(J){if(J.dirList)throw new Error(`Assertion failed: ${T} cannot merge dir node with leaf node`);{let oe=P.parseLocator(J.locator),le=P.parseLocator(j.locator);if(J.linkType!==j.linkType)throw new Error(`Assertion failed: ${T} cannot merge nodes with different link types ${J.nodePath}/${P.stringifyLocator(oe)} and ${f}/${P.stringifyLocator(le)}`);if(oe.identHash!==le.identHash)throw new Error(`Assertion failed: ${T} cannot merge nodes with different idents ${J.nodePath}/${P.stringifyLocator(oe)} and ${f}/s${P.stringifyLocator(le)}`);j.aliases=[...j.aliases,...J.aliases,P.parseLocator(J.locator).reference]}}i.set(T,j);let re=T.split("/"),ee=re.indexOf(Ele),A=re.length-1;for(;ee>=0&&A>ee;){let oe=H.toPortablePath(re.slice(0,A).join(x.sep)),le=Jr(re[A]),X=i.get(oe);if(!X)i.set(oe,{dirList:new Set([le])});else if(X.dirList){if(X.dirList.has(le))break;X.dirList.add(le)}A--}}a(h,j.linkType===yo.SOFT?j.target:T,Y)}}},l=n({name:e.name,reference:Array.from(e.references)[0]},"",[]),c=l.target;return i.set(c,l),a(e,c,""),i};var rT={};ft(rT,{PnpInstaller:()=>ah,PnpLinker:()=>vu,default:()=>C5e,getPnpPath:()=>Dl,jsInstallUtils:()=>ha,pnpUtils:()=>eT,quotePathIfNeeded:()=>qle});var jle=ge(ri()),Yle=ge(require("url"));var wle;(function(r){r.HARD="HARD",r.SOFT="SOFT"})(wle||(wle={}));var er;(function(f){f.DEFAULT="DEFAULT",f.TOP_LEVEL="TOP_LEVEL",f.FALLBACK_EXCLUSION_LIST="FALLBACK_EXCLUSION_LIST",f.FALLBACK_EXCLUSION_ENTRIES="FALLBACK_EXCLUSION_ENTRIES",f.FALLBACK_EXCLUSION_DATA="FALLBACK_EXCLUSION_DATA",f.PACKAGE_REGISTRY_DATA="PACKAGE_REGISTRY_DATA",f.PACKAGE_REGISTRY_ENTRIES="PACKAGE_REGISTRY_ENTRIES",f.PACKAGE_STORE_DATA="PACKAGE_STORE_DATA",f.PACKAGE_STORE_ENTRIES="PACKAGE_STORE_ENTRIES",f.PACKAGE_INFORMATION_DATA="PACKAGE_INFORMATION_DATA",f.PACKAGE_DEPENDENCIES="PACKAGE_DEPENDENCIES",f.PACKAGE_DEPENDENCY="PACKAGE_DEPENDENCY"})(er||(er={}));var Ble={[er.DEFAULT]:{collapsed:!1,next:{["*"]:er.DEFAULT}},[er.TOP_LEVEL]:{collapsed:!1,next:{fallbackExclusionList:er.FALLBACK_EXCLUSION_LIST,packageRegistryData:er.PACKAGE_REGISTRY_DATA,["*"]:er.DEFAULT}},[er.FALLBACK_EXCLUSION_LIST]:{collapsed:!1,next:{["*"]:er.FALLBACK_EXCLUSION_ENTRIES}},[er.FALLBACK_EXCLUSION_ENTRIES]:{collapsed:!0,next:{["*"]:er.FALLBACK_EXCLUSION_DATA}},[er.FALLBACK_EXCLUSION_DATA]:{collapsed:!0,next:{["*"]:er.DEFAULT}},[er.PACKAGE_REGISTRY_DATA]:{collapsed:!1,next:{["*"]:er.PACKAGE_REGISTRY_ENTRIES}},[er.PACKAGE_REGISTRY_ENTRIES]:{collapsed:!0,next:{["*"]:er.PACKAGE_STORE_DATA}},[er.PACKAGE_STORE_DATA]:{collapsed:!1,next:{["*"]:er.PACKAGE_STORE_ENTRIES}},[er.PACKAGE_STORE_ENTRIES]:{collapsed:!0,next:{["*"]:er.PACKAGE_INFORMATION_DATA}},[er.PACKAGE_INFORMATION_DATA]:{collapsed:!1,next:{packageDependencies:er.PACKAGE_DEPENDENCIES,["*"]:er.DEFAULT}},[er.PACKAGE_DEPENDENCIES]:{collapsed:!1,next:{["*"]:er.PACKAGE_DEPENDENCY}},[er.PACKAGE_DEPENDENCY]:{collapsed:!0,next:{["*"]:er.DEFAULT}}};function zze(t,e,r){let i="";i+="[";for(let n=0,s=t.length;ns(o)));let n=r.map((s,o)=>o);return n.sort((s,o)=>{for(let a of i){let l=a[s]a[o]?1:0;if(l!==0)return l}return 0}),n.map(s=>r[s])}function Zze(t){let e=new Map,r=qm(t.fallbackExclusionList||[],[({name:i,reference:n})=>i,({name:i,reference:n})=>n]);for(let{name:i,reference:n}of r){let s=e.get(i);typeof s=="undefined"&&e.set(i,s=new Set),s.add(n)}return Array.from(e).map(([i,n])=>[i,Array.from(n)])}function $ze(t){return qm(t.fallbackPool||[],([e])=>e)}function e5e(t){let e=[];for(let[r,i]of qm(t.packageRegistry,([n])=>n===null?"0":`1${n}`)){let n=[];e.push([r,n]);for(let[s,{packageLocation:o,packageDependencies:a,packagePeers:l,linkType:c,discardFromLookup:u}]of qm(i,([g])=>g===null?"0":`1${g}`)){let g=[];r!==null&&s!==null&&!a.has(r)&&g.push([r,s]);for(let[p,m]of qm(a.entries(),([y])=>y))g.push([p,m]);let f=l&&l.size>0?Array.from(l):void 0,h=u||void 0;n.push([s,{packageLocation:o,packageDependencies:g,packagePeers:f,linkType:c,discardFromLookup:h}])}}return e}function Jm(t){return{__info:["This file is automatically generated. Do not touch it, or risk","your modifications being lost. We also recommend you not to read","it either without using the @yarnpkg/pnp package, as the data layout","is entirely unspecified and WILL change from a version to another."],dependencyTreeRoots:t.dependencyTreeRoots,enableTopLevelFallback:t.enableTopLevelFallback||!1,ignorePatternData:t.ignorePattern||null,fallbackExclusionList:Zze(t),fallbackPool:$ze(t),packageRegistryData:e5e(t)}}var kle=ge(Sle());function xle(t,e){return[t?`${t}
+`:"",`/* eslint-disable */
+
+`,`try {
+`,` Object.freeze({}).detectStrictMode = true;
+`,`} catch (error) {
+`," throw new Error(`The whole PnP file got strict-mode-ified, which is known to break (Emscripten libraries aren't strict mode). This usually happens when the file goes through Babel.`);\n",`}
+`,`
+`,`function $$SETUP_STATE(hydrateRuntimeState, basePath) {
+`,e.replace(/^/gm," "),`}
+`,`
+`,(0,kle.default)()].join("")}function t5e(t){return JSON.stringify(t,null,2)}function r5e(t){return`'${t.replace(/\\/g,"\\\\").replace(/'/g,"\\'").replace(/\n/g,`\\
+`)}'`}function i5e(t){return[`return hydrateRuntimeState(JSON.parse(${r5e(Qle(t))}), {basePath: basePath || __dirname});
+`].join("")}function n5e(t){return[`var path = require('path');
+`,`var dataLocation = path.resolve(__dirname, ${JSON.stringify(t)});
+`,`return hydrateRuntimeState(require(dataLocation), {basePath: basePath || path.dirname(dataLocation)});
+`].join("")}function Ple(t){let e=Jm(t),r=i5e(e);return xle(t.shebang,r)}function Dle(t){let e=Jm(t),r=n5e(t.dataLocation),i=xle(t.shebang,r);return{dataFile:t5e(e),loaderFile:i}}var Nle=ge(require("fs")),c5e=ge(require("path")),Lle=ge(require("util"));function WL(t,{basePath:e}){let r=H.toPortablePath(e),i=x.resolve(r),n=t.ignorePatternData!==null?new RegExp(t.ignorePatternData):null,s=new Map,o=new Map(t.packageRegistryData.map(([g,f])=>[g,new Map(f.map(([h,p])=>{var k;if(g===null!=(h===null))throw new Error("Assertion failed: The name and reference should be null, or neither should");let m=(k=p.discardFromLookup)!=null?k:!1,y={name:g,reference:h},b=s.get(p.packageLocation);b?(b.discardFromLookup=b.discardFromLookup&&m,m||(b.locator=y)):s.set(p.packageLocation,{locator:y,discardFromLookup:m});let S=null;return[h,{packageDependencies:new Map(p.packageDependencies),packagePeers:new Set(p.packagePeers),linkType:p.linkType,discardFromLookup:m,get packageLocation(){return S||(S=x.join(i,p.packageLocation))}}]}))])),a=new Map(t.fallbackExclusionList.map(([g,f])=>[g,new Set(f)])),l=new Map(t.fallbackPool),c=t.dependencyTreeRoots,u=t.enableTopLevelFallback;return{basePath:r,dependencyTreeRoots:c,enableTopLevelFallback:u,fallbackExclusionList:a,fallbackPool:l,ignorePattern:n,packageLocatorsByLocations:s,packageRegistry:o}}var Wm=ge(require("module"));function oh(t,e){if(typeof t=="string")return t;if(t){let r,i;if(Array.isArray(t)){for(r=0;r0)return(f=oh(n[g],u))?f.replace("*",c.substring(g.length-1)):Qu(i,c,1)}return Qu(i,c)}}var zL=ge(require("util"));var ur;(function(c){c.API_ERROR="API_ERROR",c.BUILTIN_NODE_RESOLUTION_FAILED="BUILTIN_NODE_RESOLUTION_FAILED",c.EXPORTS_RESOLUTION_FAILED="EXPORTS_RESOLUTION_FAILED",c.MISSING_DEPENDENCY="MISSING_DEPENDENCY",c.MISSING_PEER_DEPENDENCY="MISSING_PEER_DEPENDENCY",c.QUALIFIED_PATH_RESOLUTION_FAILED="QUALIFIED_PATH_RESOLUTION_FAILED",c.INTERNAL="INTERNAL",c.UNDECLARED_DEPENDENCY="UNDECLARED_DEPENDENCY",c.UNSUPPORTED="UNSUPPORTED"})(ur||(ur={}));var o5e=new Set([ur.BUILTIN_NODE_RESOLUTION_FAILED,ur.MISSING_DEPENDENCY,ur.MISSING_PEER_DEPENDENCY,ur.QUALIFIED_PATH_RESOLUTION_FAILED,ur.UNDECLARED_DEPENDENCY]);function ai(t,e,r={},i){i!=null||(i=o5e.has(t)?"MODULE_NOT_FOUND":t);let n={configurable:!0,writable:!0,enumerable:!1};return Object.defineProperties(new Error(e),{code:ie(N({},n),{value:i}),pnpCode:ie(N({},n),{value:t}),data:ie(N({},n),{value:r})})}function wo(t){return H.normalize(H.fromPortablePath(t))}var a5e=ge(require("fs")),Fle=ge(require("module")),A5e=ge(require("path")),l5e=new Set(Fle.Module.builtinModules||Object.keys(process.binding("natives"))),fb=t=>t.startsWith("node:")||l5e.has(t);function _L(t,e){let r=Number(process.env.PNP_ALWAYS_WARN_ON_FALLBACK)>0,i=Number(process.env.PNP_DEBUG_LEVEL),n=/^(?![a-zA-Z]:[\\/]|\\\\|\.{0,2}(?:\/|$))((?:node:)?(?:@[^/]+\/)?[^/]+)\/*(.*|)$/,s=/^(\/|\.{1,2}(\/|$))/,o=/\/$/,a=/^\.{0,2}\//,l={name:null,reference:null},c=[],u=new Set;if(t.enableTopLevelFallback===!0&&c.push(l),e.compatibilityMode!==!1)for(let te of["react-scripts","gatsby"]){let se=t.packageRegistry.get(te);if(se)for(let be of se.keys()){if(be===null)throw new Error("Assertion failed: This reference shouldn't be null");c.push({name:te,reference:be})}}let{ignorePattern:g,packageRegistry:f,packageLocatorsByLocations:h}=t;function p(te,se){return{fn:te,args:se,error:null,result:null}}function m(te){var Ue,xe,Se,de,V,Qe;let se=(Se=(xe=(Ue=process.stderr)==null?void 0:Ue.hasColors)==null?void 0:xe.call(Ue))!=null?Se:process.stdout.isTTY,be=(ce,fe)=>`[${ce}m${fe}[0m`,he=te.error;console.error(he?be("31;1",`\u2716 ${(de=te.error)==null?void 0:de.message.replace(/\n.*/s,"")}`):be("33;1","\u203C Resolution")),te.args.length>0&&console.error();for(let ce of te.args)console.error(` ${be("37;1","In \u2190")} ${(0,zL.inspect)(ce,{colors:se,compact:!0})}`);te.result&&(console.error(),console.error(` ${be("37;1","Out \u2192")} ${(0,zL.inspect)(te.result,{colors:se,compact:!0})}`));let Fe=(Qe=(V=new Error().stack.match(/(?<=^ +)at.*/gm))==null?void 0:V.slice(2))!=null?Qe:[];if(Fe.length>0){console.error();for(let ce of Fe)console.error(` ${be("38;5;244",ce)}`)}console.error()}function y(te,se){if(e.allowDebug===!1)return se;if(Number.isFinite(i)){if(i>=2)return(...be)=>{let he=p(te,be);try{return he.result=se(...be)}catch(Fe){throw he.error=Fe}finally{m(he)}};if(i>=1)return(...be)=>{try{return se(...be)}catch(he){let Fe=p(te,be);throw Fe.error=he,m(Fe),he}}}return se}function b(te){let se=A(te);if(!se)throw ai(ur.INTERNAL,"Couldn't find a matching entry in the dependency tree for the specified parent (this is probably an internal error)");return se}function S(te){if(te.name===null)return!0;for(let se of t.dependencyTreeRoots)if(se.name===te.name&&se.reference===te.reference)return!0;return!1}let k=new Set(["default","node","require"]);function T(te,se=k){let be=X(x.join(te,"internal.js"),{resolveIgnored:!0,includeDiscardFromLookup:!0});if(be===null)throw ai(ur.INTERNAL,`The locator that owns the "${te}" path can't be found inside the dependency tree (this is probably an internal error)`);let{packageLocation:he}=b(be),Fe=x.join(he,Pt.manifest);if(!e.fakeFs.existsSync(Fe))return null;let Ue=JSON.parse(e.fakeFs.readFileSync(Fe,"utf8")),xe=x.contains(he,te);if(xe===null)throw ai(ur.INTERNAL,"unqualifiedPath doesn't contain the packageLocation (this is probably an internal error)");a.test(xe)||(xe=`./${xe}`);let Se;try{Se=Rle(Ue,x.normalize(xe),{conditions:se,unsafe:!0})}catch(de){throw ai(ur.EXPORTS_RESOLUTION_FAILED,de.message,{unqualifiedPath:wo(te),locator:be,pkgJson:Ue,subpath:wo(xe),conditions:se},"ERR_PACKAGE_PATH_NOT_EXPORTED")}return typeof Se=="string"?x.join(he,Se):null}function Y(te,se,{extensions:be}){let he;try{se.push(te),he=e.fakeFs.statSync(te)}catch(Fe){}if(he&&!he.isDirectory())return e.fakeFs.realpathSync(te);if(he&&he.isDirectory()){let Fe;try{Fe=JSON.parse(e.fakeFs.readFileSync(x.join(te,Pt.manifest),"utf8"))}catch(xe){}let Ue;if(Fe&&Fe.main&&(Ue=x.resolve(te,Fe.main)),Ue&&Ue!==te){let xe=Y(Ue,se,{extensions:be});if(xe!==null)return xe}}for(let Fe=0,Ue=be.length;Fe{let Se=JSON.stringify(xe.name);if(he.has(Se))return;he.add(Se);let de=oe(xe);for(let V of de)if(b(V).packagePeers.has(te))Fe(V);else{let ce=be.get(V.name);typeof ce=="undefined"&&be.set(V.name,ce=new Set),ce.add(V.reference)}};Fe(se);let Ue=[];for(let xe of[...be.keys()].sort())for(let Se of[...be.get(xe)].sort())Ue.push({name:xe,reference:Se});return Ue}function X(te,{resolveIgnored:se=!1,includeDiscardFromLookup:be=!1}={}){if(J(te)&&!se)return null;let he=x.relative(t.basePath,te);he.match(s)||(he=`./${he}`),he.endsWith("/")||(he=`${he}/`);do{let Fe=h.get(he);if(typeof Fe=="undefined"||Fe.discardFromLookup&&!be){he=he.substring(0,he.lastIndexOf("/",he.length-2)+1);continue}return Fe.locator}while(he!=="");return null}function O(te,se,{considerBuiltins:be=!0}={}){if(te==="pnpapi")return H.toPortablePath(e.pnpapiResolution);if(be&&fb(te))return null;let he=wo(te),Fe=se&&wo(se);if(se&&J(se)&&(!x.isAbsolute(te)||X(te)===null)){let Se=Z(te,se);if(Se===!1)throw ai(ur.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer was explicitely ignored by the regexp)
+
+Require request: "${he}"
+Required by: ${Fe}
+`,{request:he,issuer:Fe});return H.toPortablePath(Se)}let Ue,xe=te.match(n);if(xe){if(!se)throw ai(ur.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:he,issuer:Fe});let[,Se,de]=xe,V=X(se);if(!V){let Gt=Z(te,se);if(Gt===!1)throw ai(ur.BUILTIN_NODE_RESOLUTION_FAILED,`The builtin node resolution algorithm was unable to resolve the requested module (it didn't go through the pnp resolver because the issuer doesn't seem to be part of the Yarn-managed dependency tree).
+
+Require path: "${he}"
+Required by: ${Fe}
+`,{request:he,issuer:Fe});return H.toPortablePath(Gt)}let ce=b(V).packageDependencies.get(Se),fe=null;if(ce==null&&V.name!==null){let Gt=t.fallbackExclusionList.get(V.name);if(!Gt||!Gt.has(V.reference)){for(let Ti=0,Vs=c.length;TiS(Qr))?gt=ai(ur.MISSING_PEER_DEPENDENCY,`${V.name} tried to access ${Se} (a peer dependency) but it isn't provided by your application; this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${V.name}@${V.reference} (via ${Fe})
+${Gt.map(Qr=>`Ancestor breaking the chain: ${Qr.name}@${Qr.reference}
+`).join("")}
+`,{request:he,issuer:Fe,issuerLocator:Object.assign({},V),dependencyName:Se,brokenAncestors:Gt}):gt=ai(ur.MISSING_PEER_DEPENDENCY,`${V.name} tried to access ${Se} (a peer dependency) but it isn't provided by its ancestors; this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${V.name}@${V.reference} (via ${Fe})
+
+${Gt.map(Qr=>`Ancestor breaking the chain: ${Qr.name}@${Qr.reference}
+`).join("")}
+`,{request:he,issuer:Fe,issuerLocator:Object.assign({},V),dependencyName:Se,brokenAncestors:Gt})}else ce===void 0&&(!be&&fb(te)?S(V)?gt=ai(ur.UNDECLARED_DEPENDENCY,`Your application tried to access ${Se}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Se} isn't otherwise declared in your dependencies, this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${Fe}
+`,{request:he,issuer:Fe,dependencyName:Se}):gt=ai(ur.UNDECLARED_DEPENDENCY,`${V.name} tried to access ${Se}. While this module is usually interpreted as a Node builtin, your resolver is running inside a non-Node resolution context where such builtins are ignored. Since ${Se} isn't otherwise declared in ${V.name}'s dependencies, this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${Fe}
+`,{request:he,issuer:Fe,issuerLocator:Object.assign({},V),dependencyName:Se}):S(V)?gt=ai(ur.UNDECLARED_DEPENDENCY,`Your application tried to access ${Se}, but it isn't declared in your dependencies; this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${Fe}
+`,{request:he,issuer:Fe,dependencyName:Se}):gt=ai(ur.UNDECLARED_DEPENDENCY,`${V.name} tried to access ${Se}, but it isn't declared in its dependencies; this makes the require call ambiguous and unsound.
+
+Required package: ${Se}${Se!==he?` (via "${he}")`:""}
+Required by: ${V.name}@${V.reference} (via ${Fe})
+`,{request:he,issuer:Fe,issuerLocator:Object.assign({},V),dependencyName:Se}));if(ce==null){if(fe===null||gt===null)throw gt||new Error("Assertion failed: Expected an error to have been set");ce=fe;let Gt=gt.message.replace(/\n.*/g,"");gt.message=Gt,!u.has(Gt)&&i!==0&&(u.add(Gt),process.emitWarning(gt))}let Ht=Array.isArray(ce)?{name:ce[0],reference:ce[1]}:{name:Se,reference:ce},Mt=b(Ht);if(!Mt.packageLocation)throw ai(ur.MISSING_DEPENDENCY,`A dependency seems valid but didn't get installed for some reason. This might be caused by a partial install, such as dev vs prod.
+
+Required package: ${Ht.name}@${Ht.reference}${Ht.name!==he?` (via "${he}")`:""}
+Required by: ${V.name}@${V.reference} (via ${Fe})
+`,{request:he,issuer:Fe,dependencyLocator:Object.assign({},Ht)});let mi=Mt.packageLocation;de?Ue=x.join(mi,de):Ue=mi}else if(x.isAbsolute(te))Ue=x.normalize(te);else{if(!se)throw ai(ur.API_ERROR,"The resolveToUnqualified function must be called with a valid issuer when the path isn't a builtin nor absolute",{request:he,issuer:Fe});let Se=x.resolve(se);se.match(o)?Ue=x.normalize(x.join(Se,te)):Ue=x.normalize(x.join(x.dirname(Se),te))}return x.normalize(Ue)}function L(te,se,be=k){if(s.test(te))return se;let he=T(se,be);return he?x.normalize(he):se}function pe(te,{extensions:se=Object.keys(Wm.Module._extensions)}={}){var Fe,Ue;let be=[],he=Y(te,be,{extensions:se});if(he)return x.normalize(he);{let xe=wo(te),Se=X(te);if(Se){let{packageLocation:de}=b(Se),V=!0;try{e.fakeFs.accessSync(de)}catch(Qe){if((Qe==null?void 0:Qe.code)==="ENOENT")V=!1;else{let ce=((Ue=(Fe=Qe==null?void 0:Qe.message)!=null?Fe:Qe)!=null?Ue:"empty exception thrown").replace(/^[A-Z]/,fe=>fe.toLowerCase());throw ai(ur.QUALIFIED_PATH_RESOLUTION_FAILED,`Required package exists but could not be accessed (${ce}).
+
+Missing package: ${Se.name}@${Se.reference}
+Expected package location: ${wo(de)}
+`,{unqualifiedPath:xe,extensions:se})}}if(!V){let Qe=de.includes("/unplugged/")?"Required unplugged package missing from disk. This may happen when switching branches without running installs (unplugged packages must be fully materialized on disk to work).":"Required package missing from disk. If you keep your packages inside your repository then restarting the Node process may be enough. Otherwise, try to run an install first.";throw ai(ur.QUALIFIED_PATH_RESOLUTION_FAILED,`${Qe}
+
+Missing package: ${Se.name}@${Se.reference}
+Expected package location: ${wo(de)}
+`,{unqualifiedPath:xe,extensions:se})}}throw ai(ur.QUALIFIED_PATH_RESOLUTION_FAILED,`Qualified path resolution failed: we looked for the following paths, but none could be accessed.
+
+Source path: ${xe}
+${be.map(de=>`Not found: ${wo(de)}
+`).join("")}`,{unqualifiedPath:xe,extensions:se})}}function Ce(te,se,{considerBuiltins:be,extensions:he,conditions:Fe}={}){try{let Ue=O(te,se,{considerBuiltins:be});if(te==="pnpapi")return Ue;if(Ue===null)return null;let xe=()=>se!==null?J(se):!1,Se=(!be||!fb(te))&&!xe()?L(te,Ue,Fe):Ue;return pe(Se,{extensions:he})}catch(Ue){throw Object.prototype.hasOwnProperty.call(Ue,"pnpCode")&&Object.assign(Ue.data,{request:wo(te),issuer:se&&wo(se)}),Ue}}function Oe(te){let se=x.normalize(te),be=Wr.resolveVirtual(se);return be!==se?be:null}return{VERSIONS:re,topLevel:ee,getLocator:(te,se)=>Array.isArray(se)?{name:se[0],reference:se[1]}:{name:te,reference:se},getDependencyTreeRoots:()=>[...t.dependencyTreeRoots],getAllLocators(){let te=[];for(let[se,be]of f)for(let he of be.keys())se!==null&&he!==null&&te.push({name:se,reference:he});return te},getPackageInformation:te=>{let se=A(te);if(se===null)return null;let be=H.fromPortablePath(se.packageLocation);return ie(N({},se),{packageLocation:be})},findPackageLocator:te=>X(H.toPortablePath(te)),resolveToUnqualified:y("resolveToUnqualified",(te,se,be)=>{let he=se!==null?H.toPortablePath(se):null,Fe=O(H.toPortablePath(te),he,be);return Fe===null?null:H.fromPortablePath(Fe)}),resolveUnqualified:y("resolveUnqualified",(te,se)=>H.fromPortablePath(pe(H.toPortablePath(te),se))),resolveRequest:y("resolveRequest",(te,se,be)=>{let he=se!==null?H.toPortablePath(se):null,Fe=Ce(H.toPortablePath(te),he,be);return Fe===null?null:H.fromPortablePath(Fe)}),resolveVirtual:y("resolveVirtual",te=>{let se=Oe(H.toPortablePath(te));return se!==null?H.fromPortablePath(se):null})}}var YQt=(0,Lle.promisify)(Nle.readFile);var Tle=(t,e,r)=>{let i=Jm(t),n=WL(i,{basePath:e}),s=H.join(e,Pt.pnpCjs);return _L(n,{fakeFs:r,pnpapiResolution:s})};var XL=ge(Mle());var ha={};ft(ha,{checkAndReportManifestCompatibility:()=>Ule,checkManifestCompatibility:()=>Kle,extractBuildScripts:()=>hb,getExtractHint:()=>ZL,hasBindingGyp:()=>$L});function Kle(t){return P.isPackageCompatible(t,Wg.getArchitectureSet())}function Ule(t,e,{configuration:r,report:i}){return Kle(t)?!0:(i==null||i.reportWarningOnce($.INCOMPATIBLE_ARCHITECTURE,`${P.prettyLocator(r,t)} The ${Wg.getArchitectureName()} architecture is incompatible with this package, ${e} skipped.`),!1)}function hb(t,e,r,{configuration:i,report:n}){let s=[];for(let a of["preinstall","install","postinstall"])e.manifest.scripts.has(a)&&s.push([ls.SCRIPT,a]);return!e.manifest.scripts.has("install")&&e.misc.hasBindingGyp&&s.push([ls.SHELLCODE,"node-gyp rebuild"]),s.length===0?[]:t.linkType!==Qt.HARD?(n==null||n.reportWarningOnce($.SOFT_LINK_BUILD,`${P.prettyLocator(i,t)} lists build scripts, but is referenced through a soft link. Soft links don't support build scripts, so they'll be ignored.`),[]):r&&r.built===!1?(n==null||n.reportInfoOnce($.BUILD_DISABLED,`${P.prettyLocator(i,t)} lists build scripts, but its build has been explicitly disabled through configuration.`),[]):!i.get("enableScripts")&&!r.built?(n==null||n.reportWarningOnce($.DISABLED_BUILD_SCRIPTS,`${P.prettyLocator(i,t)} lists build scripts, but all build scripts have been disabled.`),[]):Ule(t,"build",{configuration:i,report:n})?s:[]}var u5e=new Set([".exe",".h",".hh",".hpp",".c",".cc",".cpp",".java",".jar",".node"]);function ZL(t){return t.packageFs.getExtractHint({relevantExtensions:u5e})}function $L(t){let e=x.join(t.prefixPath,"binding.gyp");return t.packageFs.existsSync(e)}var eT={};ft(eT,{getUnpluggedPath:()=>zm});function zm(t,{configuration:e}){return x.resolve(e.get("pnpUnpluggedFolder"),P.slugifyLocator(t))}var g5e=new Set([P.makeIdent(null,"nan").identHash,P.makeIdent(null,"node-gyp").identHash,P.makeIdent(null,"node-pre-gyp").identHash,P.makeIdent(null,"node-addon-api").identHash,P.makeIdent(null,"fsevents").identHash]),vu=class{constructor(){this.mode="strict";this.pnpCache=new Map}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the PnP linker to be enabled");let i=Dl(r.project).cjs;if(!K.existsSync(i))throw new Pe(`The project in ${Ae.pretty(r.project.configuration,`${r.project.cwd}/package.json`,Ae.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let n=ve.getFactoryWithDefault(this.pnpCache,i,()=>ve.dynamicRequire(i,{cachingStrategy:ve.CachingStrategy.FsTime})),s={name:P.stringifyIdent(e),reference:e.reference},o=n.getPackageInformation(s);if(!o)throw new Pe(`Couldn't find ${P.prettyLocator(r.project.configuration,e)} in the currently installed PnP map - running an install might help`);return H.toPortablePath(o.packageLocation)}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let i=Dl(r.project).cjs;if(!K.existsSync(i))return null;let s=ve.getFactoryWithDefault(this.pnpCache,i,()=>ve.dynamicRequire(i,{cachingStrategy:ve.CachingStrategy.FsTime})).findPackageLocator(H.fromPortablePath(e));return s?P.makeLocator(P.parseIdent(s.name),s.reference):null}makeInstaller(e){return new ah(e)}isEnabled(e){return!(e.project.configuration.get("nodeLinker")!=="pnp"||e.project.configuration.get("pnpMode")!==this.mode)}},ah=class{constructor(e){this.opts=e;this.mode="strict";this.asyncActions=new ve.AsyncActions(10);this.packageRegistry=new Map;this.virtualTemplates=new Map;this.isESMLoaderRequired=!1;this.customData={store:new Map};this.unpluggedPaths=new Set;this.opts=e}getCustomDataKey(){return JSON.stringify({name:"PnpInstaller",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,r,i){let n=P.stringifyIdent(e),s=e.reference,o=!!this.opts.project.tryWorkspaceByLocator(e),a=P.isVirtualLocator(e),l=e.peerDependencies.size>0&&!a,c=!l&&!o,u=!l&&e.linkType!==Qt.SOFT,g,f;if(c||u){let k=a?P.devirtualizeLocator(e):e;g=this.customData.store.get(k.locatorHash),typeof g=="undefined"&&(g=await f5e(r),e.linkType===Qt.HARD&&this.customData.store.set(k.locatorHash,g)),g.manifest.type==="module"&&(this.isESMLoaderRequired=!0),f=this.opts.project.getDependencyMeta(k,e.version)}let h=c?hb(e,g,f,{configuration:this.opts.project.configuration,report:this.opts.report}):[],p=u?await this.unplugPackageIfNeeded(e,g,r,f,i):r.packageFs;if(x.isAbsolute(r.prefixPath))throw new Error(`Assertion failed: Expected the prefix path (${r.prefixPath}) to be relative to the parent`);let m=x.resolve(p.getRealPath(),r.prefixPath),y=tT(this.opts.project.cwd,m),b=new Map,S=new Set;if(a){for(let k of e.peerDependencies.values())b.set(P.stringifyIdent(k),null),S.add(P.stringifyIdent(k));if(!o){let k=P.devirtualizeLocator(e);this.virtualTemplates.set(k.locatorHash,{location:tT(this.opts.project.cwd,Wr.resolveVirtual(m)),locator:k})}}return ve.getMapWithDefault(this.packageRegistry,n).set(s,{packageLocation:y,packageDependencies:b,packagePeers:S,linkType:e.linkType,discardFromLookup:r.discardFromLookup||!1}),{packageLocation:m,buildDirective:h.length>0?h:null}}async attachInternalDependencies(e,r){let i=this.getPackageInformation(e);for(let[n,s]of r){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,r){for(let i of r)this.getDiskInformation(i).packageDependencies.set(P.stringifyIdent(e),e.reference)}async finalizeInstall(){if(this.opts.project.configuration.get("pnpMode")!==this.mode)return;let e=Dl(this.opts.project);if(K.existsSync(e.cjsLegacy)&&(this.opts.report.reportWarning($.UNNAMED,`Removing the old ${Ae.pretty(this.opts.project.configuration,Pt.pnpJs,Ae.Type.PATH)} file. You might need to manually update existing references to reference the new ${Ae.pretty(this.opts.project.configuration,Pt.pnpCjs,Ae.Type.PATH)} file. If you use Editor SDKs, you'll have to rerun ${Ae.pretty(this.opts.project.configuration,"yarn sdks",Ae.Type.CODE)}.`),await K.removePromise(e.cjsLegacy)),this.isEsmEnabled()||await K.removePromise(e.esmLoader),this.opts.project.configuration.get("nodeLinker")!=="pnp"){await K.removePromise(e.cjs),await K.removePromise(this.opts.project.configuration.get("pnpDataPath")),await K.removePromise(e.esmLoader);return}for(let{locator:u,location:g}of this.virtualTemplates.values())ve.getMapWithDefault(this.packageRegistry,P.stringifyIdent(u)).set(u.reference,{packageLocation:g,packageDependencies:new Map,packagePeers:new Set,linkType:Qt.SOFT,discardFromLookup:!1});this.packageRegistry.set(null,new Map([[null,this.getPackageInformation(this.opts.project.topLevelWorkspace.anchoredLocator)]]));let r=this.opts.project.configuration.get("pnpFallbackMode"),i=this.opts.project.workspaces.map(({anchoredLocator:u})=>({name:P.stringifyIdent(u),reference:u.reference})),n=r!=="none",s=[],o=new Map,a=ve.buildIgnorePattern([".yarn/sdks/**",...this.opts.project.configuration.get("pnpIgnorePatterns")]),l=this.packageRegistry,c=this.opts.project.configuration.get("pnpShebang");if(r==="dependencies-only")for(let u of this.opts.project.storedPackages.values())this.opts.project.tryWorkspaceByLocator(u)&&s.push({name:P.stringifyIdent(u),reference:u.reference});return await this.asyncActions.wait(),await this.finalizeInstallWithPnp({dependencyTreeRoots:i,enableTopLevelFallback:n,fallbackExclusionList:s,fallbackPool:o,ignorePattern:a,packageRegistry:l,shebang:c}),{customData:this.customData}}async transformPnpSettings(e){}isEsmEnabled(){if(this.opts.project.configuration.sources.has("pnpEnableEsmLoader"))return this.opts.project.configuration.get("pnpEnableEsmLoader");if(this.isESMLoaderRequired)return!0;for(let e of this.opts.project.workspaces)if(e.manifest.type==="module")return!0;return!1}async finalizeInstallWithPnp(e){let r=Dl(this.opts.project),i=this.opts.project.configuration.get("pnpDataPath"),n=await this.locateNodeModules(e.ignorePattern);if(n.length>0){this.opts.report.reportWarning($.DANGEROUS_NODE_MODULES,"One or more node_modules have been detected and will be removed. This operation may take some time.");for(let o of n)await K.removePromise(o)}if(await this.transformPnpSettings(e),this.opts.project.configuration.get("pnpEnableInlining")){let o=Ple(e);await K.changeFilePromise(r.cjs,o,{automaticNewlines:!0,mode:493}),await K.removePromise(i)}else{let o=x.relative(x.dirname(r.cjs),i),{dataFile:a,loaderFile:l}=Dle(ie(N({},e),{dataLocation:o}));await K.changeFilePromise(r.cjs,l,{automaticNewlines:!0,mode:493}),await K.changeFilePromise(i,a,{automaticNewlines:!0,mode:420})}this.isEsmEnabled()&&(this.opts.report.reportWarning($.UNNAMED,"ESM support for PnP uses the experimental loader API and is therefore experimental"),await K.changeFilePromise(r.esmLoader,(0,XL.default)(),{automaticNewlines:!0,mode:420}));let s=this.opts.project.configuration.get("pnpUnpluggedFolder");if(this.unpluggedPaths.size===0)await K.removePromise(s);else for(let o of await K.readdirPromise(s)){let a=x.resolve(s,o);this.unpluggedPaths.has(a)||await K.removePromise(a)}}async locateNodeModules(e){let r=[],i=e?new RegExp(e):null;for(let n of this.opts.project.workspaces){let s=x.join(n.cwd,"node_modules");if(i&&i.test(x.relative(this.opts.project.cwd,n.cwd))||!K.existsSync(s))continue;let o=await K.readdirPromise(s,{withFileTypes:!0}),a=o.filter(l=>!l.isDirectory()||l.name===".bin"||!l.name.startsWith("."));if(a.length===o.length)r.push(s);else for(let l of a)r.push(x.join(s,l.name))}return r}async unplugPackageIfNeeded(e,r,i,n,s){return this.shouldBeUnplugged(e,r,n)?this.unplugPackage(e,i,s):i.packageFs}shouldBeUnplugged(e,r,i){return typeof i.unplugged!="undefined"?i.unplugged:g5e.has(e.identHash)||e.conditions!=null?!0:r.manifest.preferUnplugged!==null?r.manifest.preferUnplugged:!!(hb(e,r,i,{configuration:this.opts.project.configuration}).length>0||r.misc.extractHint)}async unplugPackage(e,r,i){let n=zm(e,{configuration:this.opts.project.configuration});return this.opts.project.disabledLocators.has(e.locatorHash)?new Da(n,{baseFs:r.packageFs,pathUtils:x}):(this.unpluggedPaths.add(n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{let s=x.join(n,r.prefixPath,".ready");await K.existsPromise(s)||(this.opts.project.storedBuildState.delete(e.locatorHash),await K.mkdirPromise(n,{recursive:!0}),await K.copyPromise(n,Ke.dot,{baseFs:r.packageFs,overwrite:!1}),await K.writeFilePromise(s,""))})),new _t(n))}getPackageInformation(e){let r=P.stringifyIdent(e),i=e.reference,n=this.packageRegistry.get(r);if(!n)throw new Error(`Assertion failed: The package information store should have been available (for ${P.prettyIdent(this.opts.project.configuration,e)})`);let s=n.get(i);if(!s)throw new Error(`Assertion failed: The package information should have been available (for ${P.prettyLocator(this.opts.project.configuration,e)})`);return s}getDiskInformation(e){let r=ve.getMapWithDefault(this.packageRegistry,"@@disk"),i=tT(this.opts.project.cwd,e);return ve.getFactoryWithDefault(r,i,()=>({packageLocation:i,packageDependencies:new Map,packagePeers:new Set,linkType:Qt.SOFT,discardFromLookup:!1}))}};function tT(t,e){let r=x.relative(t,e);return r.match(/^\.{0,2}\//)||(r=`./${r}`),r.replace(/\/?$/,"/")}async function f5e(t){var i;let e=(i=await At.tryFind(t.prefixPath,{baseFs:t.packageFs}))!=null?i:new At,r=new Set(["preinstall","install","postinstall"]);for(let n of e.scripts.keys())r.has(n)||e.scripts.delete(n);return{manifest:{scripts:e.scripts,preferUnplugged:e.preferUnplugged,type:e.type},misc:{extractHint:ZL(t),hasBindingGyp:$L(t)}}}var Hle=ge(rs());var _m=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Unplug direct dependencies from the entire project"});this.recursive=W.Boolean("-R,--recursive",!1,{description:"Unplug both direct and transitive dependencies"});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.patterns=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);if(e.get("nodeLinker")!=="pnp")throw new Pe("This command can only be used if the `nodeLinker` option is set to `pnp`");await r.restoreInstallState();let s=new Set(this.patterns),o=this.patterns.map(f=>{let h=P.parseDescriptor(f),p=h.range!=="unknown"?h:P.makeDescriptor(h,"*");if(!Wt.validRange(p.range))throw new Pe(`The range of the descriptor patterns must be a valid semver range (${P.prettyDescriptor(e,p)})`);return m=>{let y=P.stringifyIdent(m);return!Hle.default.isMatch(y,P.stringifyIdent(p))||m.version&&!Wt.satisfiesWithPrereleases(m.version,p.range)?!1:(s.delete(f),!0)}}),a=()=>{let f=[];for(let h of r.storedPackages.values())!r.tryWorkspaceByLocator(h)&&!P.isVirtualLocator(h)&&o.some(p=>p(h))&&f.push(h);return f},l=f=>{let h=new Set,p=[],m=(y,b)=>{if(!h.has(y.locatorHash)&&(h.add(y.locatorHash),!r.tryWorkspaceByLocator(y)&&o.some(S=>S(y))&&p.push(y),!(b>0&&!this.recursive)))for(let S of y.dependencies.values()){let k=r.storedResolutions.get(S.descriptorHash);if(!k)throw new Error("Assertion failed: The resolution should have been registered");let T=r.storedPackages.get(k);if(!T)throw new Error("Assertion failed: The package should have been registered");m(T,b+1)}};for(let y of f){let b=r.storedPackages.get(y.anchoredLocator.locatorHash);if(!b)throw new Error("Assertion failed: The package should have been registered");m(b,0)}return p},c,u;if(this.all&&this.recursive?(c=a(),u="the project"):this.all?(c=l(r.workspaces),u="any workspace"):(c=l([i]),u="this workspace"),s.size>1)throw new Pe(`Patterns ${Ae.prettyList(e,s,Ae.Type.CODE)} don't match any packages referenced by ${u}`);if(s.size>0)throw new Pe(`Pattern ${Ae.prettyList(e,s,Ae.Type.CODE)} doesn't match any packages referenced by ${u}`);return c=ve.sortMap(c,f=>P.stringifyLocator(f)),(await Je.start({configuration:e,stdout:this.context.stdout,json:this.json},async f=>{var h;for(let p of c){let m=(h=p.version)!=null?h:"unknown",y=r.topLevelWorkspace.manifest.ensureDependencyMeta(P.makeDescriptor(p,m));y.unplugged=!0,f.reportInfo($.UNNAMED,`Will unpack ${P.prettyLocator(e,p)} to ${Ae.pretty(e,zm(p,{configuration:e}),Ae.Type.PATH)}`),f.reportJson({locator:P.stringifyLocator(p),version:m})}await r.topLevelWorkspace.persistManifest(),f.reportSeparator(),await r.install({cache:n,report:f})})).exitCode()}};_m.paths=[["unplug"]],_m.usage=Re.Usage({description:"force the unpacking of a list of packages",details:"\n This command will add the selectors matching the specified patterns to the list of packages that must be unplugged when installed.\n\n A package being unplugged means that instead of being referenced directly through its archive, it will be unpacked at install time in the directory configured via `pnpUnpluggedFolder`. Note that unpacking packages this way is generally not recommended because it'll make it harder to store your packages within the repository. However, it's a good approach to quickly and safely debug some packages, and can even sometimes be required depending on the context (for example when the package contains shellscripts).\n\n Running the command will set a persistent flag inside your top-level `package.json`, in the `dependenciesMeta` field. As such, to undo its effects, you'll need to revert the changes made to the manifest and run `yarn install` to apply the modification.\n\n By default, only direct dependencies from the current workspace are affected. If `-A,--all` is set, direct dependencies from the entire project are affected. Using the `-R,--recursive` flag will affect transitive dependencies as well as direct ones.\n\n This command accepts glob patterns inside the scope and name components (not the range). Make sure to escape the patterns to prevent your own shell from trying to expand them.\n ",examples:[["Unplug the lodash dependency from the active workspace","yarn unplug lodash"],["Unplug all instances of lodash referenced by any workspace","yarn unplug lodash -A"],["Unplug all instances of lodash referenced by the active workspace and its dependencies","yarn unplug lodash -R"],["Unplug all instances of lodash, anywhere","yarn unplug lodash -AR"],["Unplug one specific version of lodash","yarn unplug lodash@1.2.3"],["Unplug all packages with the `@babel` scope","yarn unplug '@babel/*'"],["Unplug all packages (only for testing, not recommended)","yarn unplug -R '*'"]]});var Gle=_m;var Dl=t=>({cjs:x.join(t.cwd,Pt.pnpCjs),cjsLegacy:x.join(t.cwd,Pt.pnpJs),esmLoader:x.join(t.cwd,".pnp.loader.mjs")}),qle=t=>/\s/.test(t)?JSON.stringify(t):t;async function h5e(t,e,r){let i=Dl(t),n=`--require ${qle(H.fromPortablePath(i.cjs))}`;if(K.existsSync(i.esmLoader)&&(n=`${n} --experimental-loader ${(0,Yle.pathToFileURL)(H.fromPortablePath(i.esmLoader)).href}`),i.cjs.includes(" ")&&jle.default.lt(process.versions.node,"12.0.0"))throw new Error(`Expected the build location to not include spaces when using Node < 12.0.0 (${process.versions.node})`);if(K.existsSync(i.cjs)){let s=e.NODE_OPTIONS||"",o=/\s*--require\s+\S*\.pnp\.c?js\s*/g,a=/\s*--experimental-loader\s+\S*\.pnp\.loader\.mjs\s*/;s=s.replace(o," ").replace(a," ").trim(),s=s?`${n} ${s}`:n,e.NODE_OPTIONS=s}}async function p5e(t,e){let r=Dl(t);e(r.cjs),e(r.esmLoader),e(t.configuration.get("pnpDataPath")),e(t.configuration.get("pnpUnpluggedFolder"))}var d5e={hooks:{populateYarnPaths:p5e,setupScriptEnvironment:h5e},configuration:{nodeLinker:{description:'The linker used for installing Node packages, one of: "pnp", "node-modules"',type:ye.STRING,default:"pnp"},pnpMode:{description:"If 'strict', generates standard PnP maps. If 'loose', merges them with the n_m resolution.",type:ye.STRING,default:"strict"},pnpShebang:{description:"String to prepend to the generated PnP script",type:ye.STRING,default:"#!/usr/bin/env node"},pnpIgnorePatterns:{description:"Array of glob patterns; files matching them will use the classic resolution",type:ye.STRING,default:[],isArray:!0},pnpEnableEsmLoader:{description:"If true, Yarn will generate an ESM loader (`.pnp.loader.mjs`). If this is not explicitly set Yarn tries to automatically detect whether ESM support is required.",type:ye.BOOLEAN,default:!1},pnpEnableInlining:{description:"If true, the PnP data will be inlined along with the generated loader",type:ye.BOOLEAN,default:!0},pnpFallbackMode:{description:"If true, the generated PnP loader will follow the top-level fallback rule",type:ye.STRING,default:"dependencies-only"},pnpUnpluggedFolder:{description:"Folder where the unplugged packages must be stored",type:ye.ABSOLUTE_PATH,default:"./.yarn/unplugged"},pnpDataPath:{description:"Path of the file where the PnP data (used by the loader) must be written",type:ye.ABSOLUTE_PATH,default:"./.pnp.data.json"}},linkers:[vu],commands:[Gle]},C5e=d5e;var Xle=ge(Vle());var aT=ge(require("crypto")),Zle=ge(require("fs")),$le=1,Gr="node_modules",pb=".bin",ece=".yarn-state.yml",Li;(function(i){i.CLASSIC="classic",i.HARDLINKS_LOCAL="hardlinks-local",i.HARDLINKS_GLOBAL="hardlinks-global"})(Li||(Li={}));var AT=class{constructor(){this.installStateCache=new Map}supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the node-modules linker to be enabled");let i=r.project.tryWorkspaceByLocator(e);if(i)return i.cwd;let n=await ve.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await lT(r.project,{unrollAliases:!0}));if(n===null)throw new Pe("Couldn't find the node_modules state file - running an install might help (findPackageLocation)");let s=n.locatorMap.get(P.stringifyLocator(e));if(!s){let a=new Pe(`Couldn't find ${P.prettyLocator(r.project.configuration,e)} in the currently installed node_modules map - running an install might help`);throw a.code="LOCATOR_NOT_INSTALLED",a}let o=r.project.configuration.startingCwd;return s.locations.find(a=>x.contains(o,a))||s.locations[0]}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let i=await ve.getFactoryWithDefault(this.installStateCache,r.project.cwd,async()=>await lT(r.project,{unrollAliases:!0}));if(i===null)return null;let{locationRoot:n,segments:s}=db(x.resolve(e),{skipPrefix:r.project.cwd}),o=i.locationTree.get(n);if(!o)return null;let a=o.locator;for(let l of s){if(o=o.children.get(l),!o)break;a=o.locator||a}return P.parseLocator(a)}makeInstaller(e){return new tce(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="node-modules"}},tce=class{constructor(e){this.opts=e;this.localStore=new Map;this.realLocatorChecksums=new Map;this.customData={store:new Map}}getCustomDataKey(){return JSON.stringify({name:"NodeModulesInstaller",version:2})}attachCustomData(e){this.customData=e}async installPackage(e,r){var u;let i=x.resolve(r.packageFs.getRealPath(),r.prefixPath),n=this.customData.store.get(e.locatorHash);if(typeof n=="undefined"&&(n=await N5e(e,r),e.linkType===Qt.HARD&&this.customData.store.set(e.locatorHash,n)),!P.isPackageCompatible(e,this.opts.project.configuration.getSupportedArchitectures()))return{packageLocation:null,buildDirective:null};let s=new Map,o=new Set;s.has(P.stringifyIdent(e))||s.set(P.stringifyIdent(e),e.reference);let a=e;if(P.isVirtualLocator(e)){a=P.devirtualizeLocator(e);for(let g of e.peerDependencies.values())s.set(P.stringifyIdent(g),null),o.add(P.stringifyIdent(g))}let l={packageLocation:`${H.fromPortablePath(i)}/`,packageDependencies:s,packagePeers:o,linkType:e.linkType,discardFromLookup:(u=r.discardFromLookup)!=null?u:!1};this.localStore.set(e.locatorHash,{pkg:e,customPackageData:n,dependencyMeta:this.opts.project.getDependencyMeta(e,e.version),pnpNode:l});let c=r.checksum?r.checksum.substring(r.checksum.indexOf("/")+1):null;return this.realLocatorChecksums.set(a.locatorHash,c),{packageLocation:i,buildDirective:null}}async attachInternalDependencies(e,r){let i=this.localStore.get(e.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected information object to have been registered");for(let[n,s]of r){let o=P.areIdentsEqual(n,s)?s.reference:[P.stringifyIdent(s),s.reference];i.pnpNode.packageDependencies.set(P.stringifyIdent(n),o)}}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the node-modules linker")}async finalizeInstall(){if(this.opts.project.configuration.get("nodeLinker")!=="node-modules")return;let e=new Wr({baseFs:new Es({libzip:await fn(),maxOpenFiles:80,readOnlyArchives:!0})}),r=await lT(this.opts.project),i=this.opts.project.configuration.get("nmMode");(r===null||i!==r.nmMode)&&(this.opts.project.storedBuildState.clear(),r={locatorMap:new Map,binSymlinks:new Map,locationTree:new Map,nmMode:i,mtimeMs:0});let n=new Map(this.opts.project.workspaces.map(f=>{var p,m;let h=this.opts.project.configuration.get("nmHoistingLimits");try{h=ve.validateEnum(Kn,(m=(p=f.manifest.installConfig)==null?void 0:p.hoistingLimits)!=null?m:h)}catch(y){let b=P.prettyWorkspace(this.opts.project.configuration,f);this.opts.report.reportWarning($.INVALID_MANIFEST,`${b}: Invalid 'installConfig.hoistingLimits' value. Expected one of ${Object.values(Kn).join(", ")}, using default: "${h}"`)}return[f.relativeCwd,h]})),s=new Map(this.opts.project.workspaces.map(f=>{var p,m;let h=this.opts.project.configuration.get("nmSelfReferences");return h=(m=(p=f.manifest.installConfig)==null?void 0:p.selfReferences)!=null?m:h,[f.relativeCwd,h]})),o={VERSIONS:{std:1},topLevel:{name:null,reference:null},getLocator:(f,h)=>Array.isArray(h)?{name:h[0],reference:h[1]}:{name:f,reference:h},getDependencyTreeRoots:()=>this.opts.project.workspaces.map(f=>{let h=f.anchoredLocator;return{name:P.stringifyIdent(f.locator),reference:h.reference}}),getPackageInformation:f=>{let h=f.reference===null?this.opts.project.topLevelWorkspace.anchoredLocator:P.makeLocator(P.parseIdent(f.name),f.reference),p=this.localStore.get(h.locatorHash);if(typeof p=="undefined")throw new Error("Assertion failed: Expected the package reference to have been registered");return p.pnpNode},findPackageLocator:f=>{let h=this.opts.project.tryWorkspaceByCwd(H.toPortablePath(f));if(h!==null){let p=h.anchoredLocator;return{name:P.stringifyIdent(p),reference:p.reference}}throw new Error("Assertion failed: Unimplemented")},resolveToUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveUnqualified:()=>{throw new Error("Assertion failed: Unimplemented")},resolveRequest:()=>{throw new Error("Assertion failed: Unimplemented")},resolveVirtual:f=>H.fromPortablePath(Wr.resolveVirtual(H.toPortablePath(f)))},{tree:a,errors:l,preserveSymlinksRequired:c}=Ym(o,{pnpifyFs:!1,validateExternalSoftLinks:!0,hoistingLimitsByCwd:n,project:this.opts.project,selfReferencesByCwd:s});if(!a){for(let{messageName:f,text:h}of l)this.opts.report.reportError(f,h);return}let u=YL(a);await L5e(r,u,{baseFs:e,project:this.opts.project,report:this.opts.report,realLocatorChecksums:this.realLocatorChecksums,loadManifest:async f=>{let h=P.parseLocator(f),p=this.localStore.get(h.locatorHash);if(typeof p=="undefined")throw new Error("Assertion failed: Expected the slot to exist");return p.customPackageData.manifest}});let g=[];for(let[f,h]of u.entries()){if(rce(f))continue;let p=P.parseLocator(f),m=this.localStore.get(p.locatorHash);if(typeof m=="undefined")throw new Error("Assertion failed: Expected the slot to exist");if(this.opts.project.tryWorkspaceByLocator(m.pkg))continue;let y=ha.extractBuildScripts(m.pkg,m.customPackageData,m.dependencyMeta,{configuration:this.opts.project.configuration,report:this.opts.report});y.length!==0&&g.push({buildLocations:h.locations,locatorHash:p.locatorHash,buildDirective:y})}return c&&this.opts.report.reportWarning($.NM_PRESERVE_SYMLINKS_REQUIRED,`The application uses portals and that's why ${Ae.pretty(this.opts.project.configuration,"--preserve-symlinks",Ae.Type.CODE)} Node option is required for launching it`),{customData:this.customData,records:g}}};async function N5e(t,e){var n;let r=(n=await At.tryFind(e.prefixPath,{baseFs:e.packageFs}))!=null?n:new At,i=new Set(["preinstall","install","postinstall"]);for(let s of r.scripts.keys())i.has(s)||r.scripts.delete(s);return{manifest:{bin:r.bin,scripts:r.scripts},misc:{extractHint:ha.getExtractHint(e),hasBindingGyp:ha.hasBindingGyp(e)}}}async function T5e(t,e,r,i,{installChangedByUser:n}){let s="";s+=`# Warning: This file is automatically generated. Removing it is fine, but will
+`,s+=`# cause your node_modules installation to become invalidated.
+`,s+=`
+`,s+=`__metadata:
+`,s+=` version: ${$le}
+`,s+=` nmMode: ${i.value}
+`;let o=Array.from(e.keys()).sort(),a=P.stringifyLocator(t.topLevelWorkspace.anchoredLocator);for(let u of o){let g=e.get(u);s+=`
+`,s+=`${JSON.stringify(u)}:
+`,s+=` locations:
+`;for(let f of g.locations){let h=x.contains(t.cwd,f);if(h===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=` - ${JSON.stringify(h)}
+`}if(g.aliases.length>0){s+=` aliases:
+`;for(let f of g.aliases)s+=` - ${JSON.stringify(f)}
+`}if(u===a&&r.size>0){s+=` bin:
+`;for(let[f,h]of r){let p=x.contains(t.cwd,f);if(p===null)throw new Error(`Assertion failed: Expected the path to be within the project (${f})`);s+=` ${JSON.stringify(p)}:
+`;for(let[m,y]of h){let b=x.relative(x.join(f,Gr),y);s+=` ${JSON.stringify(m)}: ${JSON.stringify(b)}
+`}}}}let l=t.cwd,c=x.join(l,Gr,ece);n&&await K.removePromise(c),await K.changeFilePromise(c,s,{automaticNewlines:!0})}async function lT(t,{unrollAliases:e=!1}={}){let r=t.cwd,i=x.join(r,Gr,ece),n;try{n=await K.statPromise(i)}catch(c){}if(!n)return null;let s=Qi(await K.readFilePromise(i,"utf8"));if(s.__metadata.version>$le)return null;let o=s.__metadata.nmMode||Li.CLASSIC,a=new Map,l=new Map;delete s.__metadata;for(let[c,u]of Object.entries(s)){let g=u.locations.map(h=>x.join(r,h)),f=u.bin;if(f)for(let[h,p]of Object.entries(f)){let m=x.join(r,H.toPortablePath(h)),y=ve.getMapWithDefault(l,m);for(let[b,S]of Object.entries(p))y.set(Jr(b),H.toPortablePath([m,Gr,S].join(x.sep)))}if(a.set(c,{target:Ke.dot,linkType:Qt.HARD,locations:g,aliases:u.aliases||[]}),e&&u.aliases)for(let h of u.aliases){let{scope:p,name:m}=P.parseLocator(c),y=P.makeLocator(P.makeIdent(p,m),h),b=P.stringifyLocator(y);a.set(b,{target:Ke.dot,linkType:Qt.HARD,locations:g,aliases:[]})}}return{locatorMap:a,binSymlinks:l,locationTree:ice(a,{skipPrefix:t.cwd}),nmMode:o,mtimeMs:n.mtimeMs}}var lh=async(t,e)=>{if(t.split(x.sep).indexOf(Gr)<0)throw new Error(`Assertion failed: trying to remove dir that doesn't contain node_modules: ${t}`);try{if(!e.innerLoop){let i=e.allowSymlink?await K.statPromise(t):await K.lstatPromise(t);if(e.allowSymlink&&!i.isDirectory()||!e.allowSymlink&&i.isSymbolicLink()){await K.unlinkPromise(t);return}}let r=await K.readdirPromise(t,{withFileTypes:!0});for(let i of r){let n=x.join(t,Jr(i.name));i.isDirectory()?(i.name!==Gr||e&&e.innerLoop)&&await lh(n,{innerLoop:!0,contentsOnly:!1}):await K.unlinkPromise(n)}e.contentsOnly||await K.rmdirPromise(t)}catch(r){if(r.code!=="ENOENT"&&r.code!=="ENOTEMPTY")throw r}},nce=4,db=(t,{skipPrefix:e})=>{let r=x.contains(e,t);if(r===null)throw new Error(`Assertion failed: Writing attempt prevented to ${t} which is outside project root: ${e}`);let i=r.split(x.sep).filter(l=>l!==""),n=i.indexOf(Gr),s=i.slice(0,n).join(x.sep),o=x.join(e,s),a=i.slice(n);return{locationRoot:o,segments:a}},ice=(t,{skipPrefix:e})=>{let r=new Map;if(t===null)return r;let i=()=>({children:new Map,linkType:Qt.HARD});for(let[n,s]of t.entries()){if(s.linkType===Qt.SOFT&&x.contains(e,s.target)!==null){let a=ve.getFactoryWithDefault(r,s.target,i);a.locator=n,a.linkType=s.linkType}for(let o of s.locations){let{locationRoot:a,segments:l}=db(o,{skipPrefix:e}),c=ve.getFactoryWithDefault(r,a,i);for(let u=0;u{let r;try{process.platform==="win32"&&(r=await K.lstatPromise(t))}catch(i){}process.platform=="win32"&&(!r||r.isDirectory())?await K.symlinkPromise(t,e,"junction"):await K.symlinkPromise(x.relative(x.dirname(e),t),e)};async function sce(t,e,r){let i=x.join(t,Jr(`${aT.default.randomBytes(16).toString("hex")}.tmp`));try{await K.writeFilePromise(i,r);try{await K.linkPromise(i,e)}catch(n){}}finally{await K.unlinkPromise(i)}}async function O5e({srcPath:t,dstPath:e,srcMode:r,globalHardlinksStore:i,baseFs:n,nmMode:s,digest:o}){if(s.value===Li.HARDLINKS_GLOBAL&&i&&o){let l=x.join(i,o.substring(0,2),`${o.substring(2)}.dat`),c;try{if(await Dn.checksumFile(l,{baseFs:K,algorithm:"sha1"})!==o){let g=x.join(i,Jr(`${aT.default.randomBytes(16).toString("hex")}.tmp`));await K.renamePromise(l,g);let f=await n.readFilePromise(t);await K.writeFilePromise(g,f);try{await K.linkPromise(g,l),await K.unlinkPromise(g)}catch(h){}}await K.linkPromise(l,e),c=!0}catch(u){c=!1}if(!c){let u=await n.readFilePromise(t);await sce(i,l,u);try{await K.linkPromise(l,e)}catch(g){g&&g.code&&g.code=="EXDEV"&&(s.value=Li.HARDLINKS_LOCAL,await n.copyFilePromise(t,e))}}}else await n.copyFilePromise(t,e);let a=r&511;a!==420&&await K.chmodPromise(e,a)}var Rl;(function(i){i.FILE="file",i.DIRECTORY="directory",i.SYMLINK="symlink"})(Rl||(Rl={}));var M5e=async(t,e,{baseFs:r,globalHardlinksStore:i,nmMode:n,packageChecksum:s})=>{await K.mkdirPromise(t,{recursive:!0});let o=async(l=Ke.dot)=>{let c=x.join(e,l),u=await r.readdirPromise(c,{withFileTypes:!0}),g=new Map;for(let f of u){let h=x.join(l,f.name),p,m=x.join(c,f.name);if(f.isFile()){if(p={kind:Rl.FILE,mode:(await r.lstatPromise(m)).mode},n.value===Li.HARDLINKS_GLOBAL){let y=await Dn.checksumFile(m,{baseFs:r,algorithm:"sha1"});p.digest=y}}else if(f.isDirectory())p={kind:Rl.DIRECTORY};else if(f.isSymbolicLink())p={kind:Rl.SYMLINK,symlinkTo:await r.readlinkPromise(m)};else throw new Error(`Unsupported file type (file: ${m}, mode: 0o${await r.statSync(m).mode.toString(8).padStart(6,"0")})`);if(g.set(h,p),f.isDirectory()&&h!==Gr){let y=await o(h);for(let[b,S]of y)g.set(b,S)}}return g},a;if(n.value===Li.HARDLINKS_GLOBAL&&i&&s){let l=x.join(i,s.substring(0,2),`${s.substring(2)}.json`);try{a=new Map(Object.entries(JSON.parse(await K.readFilePromise(l,"utf8"))))}catch(c){a=await o(),await sce(i,l,Buffer.from(JSON.stringify(Object.fromEntries(a))))}}else a=await o();for(let[l,c]of a){let u=x.join(e,l),g=x.join(t,l);c.kind===Rl.DIRECTORY?await K.mkdirPromise(g,{recursive:!0}):c.kind===Rl.FILE?await O5e({srcPath:u,dstPath:g,srcMode:c.mode,digest:c.digest,nmMode:n,baseFs:r,globalHardlinksStore:i}):c.kind===Rl.SYMLINK&&await cT(x.resolve(x.dirname(g),c.symlinkTo),g)}};function K5e(t,e,r,i){let n=new Map,s=new Map,o=new Map,a=!1,l=(c,u,g,f,h)=>{let p=!0,m=x.join(c,u),y=new Set;if(u===Gr||u.startsWith("@")){let S;try{S=K.statSync(m)}catch(T){}p=!!S,S?S.mtimeMs>r?(a=!0,y=new Set(K.readdirSync(m))):y=new Set(g.children.get(u).children.keys()):a=!0;let k=e.get(c);if(k){let T=x.join(c,Gr,pb),Y;try{Y=K.statSync(T)}catch(j){}if(!Y)a=!0;else if(Y.mtimeMs>r){a=!0;let j=new Set(K.readdirSync(T)),Z=new Map;s.set(c,Z);for(let[J,re]of k)j.has(J)&&Z.set(J,re)}else s.set(c,k)}}else p=h.has(u);let b=g.children.get(u);if(p){let{linkType:S,locator:k}=b,T={children:new Map,linkType:S,locator:k};if(f.children.set(u,T),k){let Y=ve.getSetWithDefault(o,k);Y.add(m),o.set(k,Y)}for(let Y of b.children.keys())l(m,Y,b,T,y)}else b.locator&&i.storedBuildState.delete(P.parseLocator(b.locator).locatorHash)};for(let[c,u]of t){let{linkType:g,locator:f}=u,h={children:new Map,linkType:g,locator:f};if(n.set(c,h),f){let p=ve.getSetWithDefault(o,u.locator);p.add(c),o.set(u.locator,p)}u.children.has(Gr)&&l(c,Gr,u,h,new Set)}return{locationTree:n,binSymlinks:s,locatorLocations:o,installChangedByUser:a}}function rce(t){let e=P.parseDescriptor(t);return P.isVirtualDescriptor(e)&&(e=P.devirtualizeDescriptor(e)),e.range.startsWith("link:")}async function U5e(t,e,r,{loadManifest:i}){let n=new Map;for(let[a,{locations:l}]of t){let c=rce(a)?null:await i(a,l[0]),u=new Map;if(c)for(let[g,f]of c.bin){let h=x.join(l[0],f);f!==""&&K.existsSync(h)&&u.set(g,f)}n.set(a,u)}let s=new Map,o=(a,l,c)=>{let u=new Map,g=x.contains(r,a);if(c.locator&&g!==null){let f=n.get(c.locator);for(let[h,p]of f){let m=x.join(a,H.toPortablePath(p));u.set(Jr(h),m)}for(let[h,p]of c.children){let m=x.join(a,h),y=o(m,m,p);y.size>0&&s.set(a,new Map([...s.get(a)||new Map,...y]))}}else for(let[f,h]of c.children){let p=o(x.join(a,f),l,h);for(let[m,y]of p)u.set(m,y)}return u};for(let[a,l]of e){let c=o(a,a,l);c.size>0&&s.set(a,new Map([...s.get(a)||new Map,...c]))}return s}var oce=(t,e)=>{if(!t||!e)return t===e;let r=P.parseLocator(t);P.isVirtualLocator(r)&&(r=P.devirtualizeLocator(r));let i=P.parseLocator(e);return P.isVirtualLocator(i)&&(i=P.devirtualizeLocator(i)),P.areLocatorsEqual(r,i)};function uT(t){return x.join(t.get("globalFolder"),"store")}async function L5e(t,e,{baseFs:r,project:i,report:n,loadManifest:s,realLocatorChecksums:o}){let a=x.join(i.cwd,Gr),{locationTree:l,binSymlinks:c,locatorLocations:u,installChangedByUser:g}=K5e(t.locationTree,t.binSymlinks,t.mtimeMs,i),f=ice(e,{skipPrefix:i.cwd}),h=[],p=async({srcDir:J,dstDir:re,linkType:ee,globalHardlinksStore:A,nmMode:oe,packageChecksum:le})=>{let X=(async()=>{try{ee===Qt.SOFT?(await K.mkdirPromise(x.dirname(re),{recursive:!0}),await cT(x.resolve(J),re)):await M5e(re,J,{baseFs:r,globalHardlinksStore:A,nmMode:oe,packageChecksum:le})}catch(O){throw O.message=`While persisting ${J} -> ${re} ${O.message}`,O}finally{T.tick()}})().then(()=>h.splice(h.indexOf(X),1));h.push(X),h.length>nce&&await Promise.race(h)},m=async(J,re,ee)=>{let A=(async()=>{let oe=async(le,X,O)=>{try{O.innerLoop||await K.mkdirPromise(X,{recursive:!0});let L=await K.readdirPromise(le,{withFileTypes:!0});for(let pe of L){if(!O.innerLoop&&pe.name===pb)continue;let Ce=x.join(le,pe.name),Oe=x.join(X,pe.name);pe.isDirectory()?(pe.name!==Gr||O&&O.innerLoop)&&(await K.mkdirPromise(Oe,{recursive:!0}),await oe(Ce,Oe,ie(N({},O),{innerLoop:!0}))):Z.value===Li.HARDLINKS_LOCAL||Z.value===Li.HARDLINKS_GLOBAL?await K.linkPromise(Ce,Oe):await K.copyFilePromise(Ce,Oe,Zle.default.constants.COPYFILE_FICLONE)}}catch(L){throw O.innerLoop||(L.message=`While cloning ${le} -> ${X} ${L.message}`),L}finally{O.innerLoop||T.tick()}};await oe(J,re,ee)})().then(()=>h.splice(h.indexOf(A),1));h.push(A),h.length>nce&&await Promise.race(h)},y=async(J,re,ee)=>{if(ee)for(let[A,oe]of re.children){let le=ee.children.get(A);await y(x.join(J,A),oe,le)}else{re.children.has(Gr)&&await lh(x.join(J,Gr),{contentsOnly:!1});let A=x.basename(J)===Gr&&f.has(x.join(x.dirname(J),x.sep));await lh(J,{contentsOnly:J===a,allowSymlink:A})}};for(let[J,re]of l){let ee=f.get(J);for(let[A,oe]of re.children){if(A===".")continue;let le=ee&&ee.children.get(A),X=x.join(J,A);await y(X,oe,le)}}let b=async(J,re,ee)=>{if(ee){oce(re.locator,ee.locator)||await lh(J,{contentsOnly:re.linkType===Qt.HARD});for(let[A,oe]of re.children){let le=ee.children.get(A);await b(x.join(J,A),oe,le)}}else{re.children.has(Gr)&&await lh(x.join(J,Gr),{contentsOnly:!0});let A=x.basename(J)===Gr&&f.has(x.join(x.dirname(J),x.sep));await lh(J,{contentsOnly:re.linkType===Qt.HARD,allowSymlink:A})}};for(let[J,re]of f){let ee=l.get(J);for(let[A,oe]of re.children){if(A===".")continue;let le=ee&&ee.children.get(A);await b(x.join(J,A),oe,le)}}let S=new Map,k=[];for(let[J,re]of u)for(let ee of re){let{locationRoot:A,segments:oe}=db(ee,{skipPrefix:i.cwd}),le=f.get(A),X=A;if(le){for(let O of oe)if(X=x.join(X,O),le=le.children.get(O),!le)break;if(le){let O=oce(le.locator,J),L=e.get(le.locator),pe=L.target,Ce=X,Oe=L.linkType;if(O)S.has(pe)||S.set(pe,Ce);else if(pe!==Ce){let te=P.parseLocator(le.locator);P.isVirtualLocator(te)&&(te=P.devirtualizeLocator(te)),k.push({srcDir:pe,dstDir:Ce,linkType:Oe,realLocatorHash:te.locatorHash})}}}}for(let[J,{locations:re}]of e.entries())for(let ee of re){let{locationRoot:A,segments:oe}=db(ee,{skipPrefix:i.cwd}),le=l.get(A),X=f.get(A),O=A,L=e.get(J),pe=P.parseLocator(J);P.isVirtualLocator(pe)&&(pe=P.devirtualizeLocator(pe));let Ce=pe.locatorHash,Oe=L.target,te=ee;if(Oe===te)continue;let se=L.linkType;for(let be of oe)X=X.children.get(be);if(!le)k.push({srcDir:Oe,dstDir:te,linkType:se,realLocatorHash:Ce});else for(let be of oe)if(O=x.join(O,be),le=le.children.get(be),!le){k.push({srcDir:Oe,dstDir:te,linkType:se,realLocatorHash:Ce});break}}let T=Ji.progressViaCounter(k.length),Y=n.reportProgress(T),j=i.configuration.get("nmMode"),Z={value:j};try{let J=Z.value===Li.HARDLINKS_GLOBAL?`${uT(i.configuration)}/v1`:null;if(J&&!await K.existsPromise(J)){await K.mkdirpPromise(J);for(let ee=0;ee<256;ee++)await K.mkdirPromise(x.join(J,ee.toString(16).padStart(2,"0")))}for(let ee of k)(ee.linkType===Qt.SOFT||!S.has(ee.srcDir))&&(S.set(ee.srcDir,ee.dstDir),await p(ie(N({},ee),{globalHardlinksStore:J,nmMode:Z,packageChecksum:o.get(ee.realLocatorHash)||null})));await Promise.all(h),h.length=0;for(let ee of k){let A=S.get(ee.srcDir);ee.linkType!==Qt.SOFT&&ee.dstDir!==A&&await m(A,ee.dstDir,{nmMode:Z})}await Promise.all(h),await K.mkdirPromise(a,{recursive:!0});let re=await U5e(e,f,i.cwd,{loadManifest:s});await H5e(c,re,i.cwd),await T5e(i,e,re,Z,{installChangedByUser:g}),j==Li.HARDLINKS_GLOBAL&&Z.value==Li.HARDLINKS_LOCAL&&n.reportWarningOnce($.NM_HARDLINKS_MODE_DOWNGRADED,"'nmMode' has been downgraded to 'hardlinks-local' due to global cache and install folder being on different devices")}finally{Y.stop()}}async function H5e(t,e,r){for(let i of t.keys()){if(x.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);if(!e.has(i)){let n=x.join(i,Gr,pb);await K.removePromise(n)}}for(let[i,n]of e){if(x.contains(r,i)===null)throw new Error(`Assertion failed. Excepted bin symlink location to be inside project dir, instead it was at ${i}`);let s=x.join(i,Gr,pb),o=t.get(i)||new Map;await K.mkdirPromise(s,{recursive:!0});for(let a of o.keys())n.has(a)||(await K.removePromise(x.join(s,a)),process.platform==="win32"&&await K.removePromise(x.join(s,Jr(`${a}.cmd`))));for(let[a,l]of n){let c=o.get(a),u=x.join(s,a);c!==l&&(process.platform==="win32"?await(0,Xle.default)(H.fromPortablePath(l),H.fromPortablePath(u),{createPwshFile:!1}):(await K.removePromise(u),await cT(l,u),x.contains(r,await K.realpathPromise(l))!==null&&await K.chmodPromise(l,493)))}}}var gT=class extends vu{constructor(){super(...arguments);this.mode="loose"}makeInstaller(e){return new ace(e)}},ace=class extends ah{constructor(){super(...arguments);this.mode="loose"}async transformPnpSettings(e){let r=new Wr({baseFs:new Es({libzip:await fn(),maxOpenFiles:80,readOnlyArchives:!0})}),i=Tle(e,this.opts.project.cwd,r),{tree:n,errors:s}=Ym(i,{pnpifyFs:!1,project:this.opts.project});if(!n){for(let{messageName:u,text:g}of s)this.opts.report.reportError(u,g);return}let o=new Map;e.fallbackPool=o;let a=(u,g)=>{let f=P.parseLocator(g.locator),h=P.stringifyIdent(f);h===u?o.set(u,f.reference):o.set(u,[h,f.reference])},l=x.join(this.opts.project.cwd,Pt.nodeModules),c=n.get(l);if(typeof c!="undefined"){if("target"in c)throw new Error("Assertion failed: Expected the root junction point to be a directory");for(let u of c.dirList){let g=x.join(l,u),f=n.get(g);if(typeof f=="undefined")throw new Error("Assertion failed: Expected the child to have been registered");if("target"in f)a(u,f);else for(let h of f.dirList){let p=x.join(g,h),m=n.get(p);if(typeof m=="undefined")throw new Error("Assertion failed: Expected the subchild to have been registered");if("target"in m)a(`${u}/${h}`,m);else throw new Error("Assertion failed: Expected the leaf junction to be a package")}}}}};var G5e={hooks:{cleanGlobalArtifacts:async t=>{let e=uT(t);await K.removePromise(e)}},configuration:{nmHoistingLimits:{description:"Prevent packages to be hoisted past specific levels",type:ye.STRING,values:[Kn.WORKSPACES,Kn.DEPENDENCIES,Kn.NONE],default:Kn.NONE},nmMode:{description:'If set to "hardlinks-local" Yarn will utilize hardlinks to reduce disk space consumption inside "node_modules" directories. With "hardlinks-global" Yarn will use global content addressable storage to reduce "node_modules" size across all the projects using this option.',type:ye.STRING,values:[Li.CLASSIC,Li.HARDLINKS_LOCAL,Li.HARDLINKS_GLOBAL],default:Li.CLASSIC},nmSelfReferences:{description:"If set to 'false' the workspace will not be allowed to require itself and corresponding self-referencing symlink will not be created",type:ye.BOOLEAN,default:!0}},linkers:[AT,gT]},j5e=G5e;var gO={};ft(gO,{default:()=>XVe,npmConfigUtils:()=>br,npmHttpUtils:()=>zt,npmPublishUtils:()=>Bh});var gce=ge(ri());var Cr="npm:";var zt={};ft(zt,{AuthType:()=>cs,customPackageError:()=>J5e,del:()=>_5e,get:()=>Bo,getIdentUrl:()=>Nl,handleInvalidAuthenticationError:()=>Fl,post:()=>W5e,put:()=>z5e});var cce=ge(em()),uce=ge(require("url"));var br={};ft(br,{RegistryType:()=>wA,getAuditRegistry:()=>Y5e,getAuthConfiguration:()=>pT,getDefaultRegistry:()=>Cb,getPublishRegistry:()=>Ace,getRegistryConfiguration:()=>lce,getScopeConfiguration:()=>hT,getScopeRegistry:()=>BA,normalizeRegistry:()=>pa});var wA;(function(i){i.AUDIT_REGISTRY="npmAuditRegistry",i.FETCH_REGISTRY="npmRegistryServer",i.PUBLISH_REGISTRY="npmPublishRegistry"})(wA||(wA={}));function pa(t){return t.replace(/\/$/,"")}function Y5e(t,{configuration:e}){let r=e.get(wA.AUDIT_REGISTRY);return r!==null?pa(r):Ace(t,{configuration:e})}function Ace(t,{configuration:e}){var r;return((r=t.publishConfig)==null?void 0:r.registry)?pa(t.publishConfig.registry):t.name?BA(t.name.scope,{configuration:e,type:wA.PUBLISH_REGISTRY}):Cb({configuration:e,type:wA.PUBLISH_REGISTRY})}function BA(t,{configuration:e,type:r=wA.FETCH_REGISTRY}){let i=hT(t,{configuration:e});if(i===null)return Cb({configuration:e,type:r});let n=i.get(r);return n===null?Cb({configuration:e,type:r}):pa(n)}function Cb({configuration:t,type:e=wA.FETCH_REGISTRY}){let r=t.get(e);return pa(r!==null?r:t.get(wA.FETCH_REGISTRY))}function lce(t,{configuration:e}){let r=e.get("npmRegistries"),i=pa(t),n=r.get(i);if(typeof n!="undefined")return n;let s=r.get(i.replace(/^[a-z]+:/,""));return typeof s!="undefined"?s:null}function hT(t,{configuration:e}){if(t===null)return null;let i=e.get("npmScopes").get(t);return i||null}function pT(t,{configuration:e,ident:r}){let i=r&&hT(r.scope,{configuration:e});return(i==null?void 0:i.get("npmAuthIdent"))||(i==null?void 0:i.get("npmAuthToken"))?i:lce(t,{configuration:e})||e}var cs;(function(n){n[n.NO_AUTH=0]="NO_AUTH",n[n.BEST_EFFORT=1]="BEST_EFFORT",n[n.CONFIGURATION=2]="CONFIGURATION",n[n.ALWAYS_AUTH=3]="ALWAYS_AUTH"})(cs||(cs={}));async function Fl(t,{attemptedAs:e,registry:r,headers:i,configuration:n}){var s,o;if(mb(t))throw new ct($.AUTHENTICATION_INVALID,"Invalid OTP token");if(((s=t.originalError)==null?void 0:s.name)==="HTTPError"&&((o=t.originalError)==null?void 0:o.response.statusCode)===401)throw new ct($.AUTHENTICATION_INVALID,`Invalid authentication (${typeof e!="string"?`as ${await q5e(r,i,{configuration:n})}`:`attempted as ${e}`})`)}function J5e(t){var e;return((e=t.response)==null?void 0:e.statusCode)===404?"Package not found":null}function Nl(t){return t.scope?`/@${t.scope}%2f${t.name}`:`/${t.name}`}async function Bo(t,a){var l=a,{configuration:e,headers:r,ident:i,authType:n,registry:s}=l,o=Tr(l,["configuration","headers","ident","authType","registry"]);if(i&&typeof s=="undefined"&&(s=BA(i.scope,{configuration:e})),i&&i.scope&&typeof n=="undefined"&&(n=1),typeof s!="string")throw new Error("Assertion failed: The registry should be a string");let c=await Eb(s,{authType:n,configuration:e,ident:i});c&&(r=ie(N({},r),{authorization:c}));try{return await ir.get(t.charAt(0)==="/"?`${s}${t}`:t,N({configuration:e,headers:r},o))}catch(u){throw await Fl(u,{registry:s,configuration:e,headers:r}),u}}async function W5e(t,e,u){var g=u,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l}=g,c=Tr(g,["attemptedAs","configuration","headers","ident","authType","registry","otp"]);if(s&&typeof a=="undefined"&&(a=BA(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let f=await Eb(a,{authType:o,configuration:i,ident:s});f&&(n=ie(N({},n),{authorization:f})),l&&(n=N(N({},n),ch(l)));try{return await ir.post(a+t,e,N({configuration:i,headers:n},c))}catch(h){if(!mb(h)||l)throw await Fl(h,{attemptedAs:r,registry:a,configuration:i,headers:n}),h;l=await dT();let p=N(N({},n),ch(l));try{return await ir.post(`${a}${t}`,e,N({configuration:i,headers:p},c))}catch(m){throw await Fl(m,{attemptedAs:r,registry:a,configuration:i,headers:n}),m}}}async function z5e(t,e,u){var g=u,{attemptedAs:r,configuration:i,headers:n,ident:s,authType:o=3,registry:a,otp:l}=g,c=Tr(g,["attemptedAs","configuration","headers","ident","authType","registry","otp"]);if(s&&typeof a=="undefined"&&(a=BA(s.scope,{configuration:i})),typeof a!="string")throw new Error("Assertion failed: The registry should be a string");let f=await Eb(a,{authType:o,configuration:i,ident:s});f&&(n=ie(N({},n),{authorization:f})),l&&(n=N(N({},n),ch(l)));try{return await ir.put(a+t,e,N({configuration:i,headers:n},c))}catch(h){if(!mb(h))throw await Fl(h,{attemptedAs:r,registry:a,configuration:i,headers:n}),h;l=await dT();let p=N(N({},n),ch(l));try{return await ir.put(`${a}${t}`,e,N({configuration:i,headers:p},c))}catch(m){throw await Fl(m,{attemptedAs:r,registry:a,configuration:i,headers:n}),m}}}async function _5e(t,c){var u=c,{attemptedAs:e,configuration:r,headers:i,ident:n,authType:s=3,registry:o,otp:a}=u,l=Tr(u,["attemptedAs","configuration","headers","ident","authType","registry","otp"]);if(n&&typeof o=="undefined"&&(o=BA(n.scope,{configuration:r})),typeof o!="string")throw new Error("Assertion failed: The registry should be a string");let g=await Eb(o,{authType:s,configuration:r,ident:n});g&&(i=ie(N({},i),{authorization:g})),a&&(i=N(N({},i),ch(a)));try{return await ir.del(o+t,N({configuration:r,headers:i},l))}catch(f){if(!mb(f)||a)throw await Fl(f,{attemptedAs:e,registry:o,configuration:r,headers:i}),f;a=await dT();let h=N(N({},i),ch(a));try{return await ir.del(`${o}${t}`,N({configuration:r,headers:h},l))}catch(p){throw await Fl(p,{attemptedAs:e,registry:o,configuration:r,headers:i}),p}}}async function Eb(t,{authType:e=2,configuration:r,ident:i}){let n=pT(t,{configuration:r,ident:i}),s=V5e(n,e);if(!s)return null;let o=await r.reduceHook(a=>a.getNpmAuthenticationHeader,void 0,t,{configuration:r,ident:i});if(o)return o;if(n.get("npmAuthToken"))return`Bearer ${n.get("npmAuthToken")}`;if(n.get("npmAuthIdent")){let a=n.get("npmAuthIdent");return a.includes(":")?`Basic ${Buffer.from(a).toString("base64")}`:`Basic ${a}`}if(s&&e!==1)throw new ct($.AUTHENTICATION_NOT_FOUND,"No authentication configured for request");return null}function V5e(t,e){switch(e){case 2:return t.get("npmAlwaysAuth");case 1:case 3:return!0;case 0:return!1;default:throw new Error("Unreachable")}}async function q5e(t,e,{configuration:r}){var i;if(typeof e=="undefined"||typeof e.authorization=="undefined")return"an anonymous user";try{return(i=(await ir.get(new uce.URL(`${t}/-/whoami`).href,{configuration:r,headers:e,jsonResponse:!0})).username)!=null?i:"an unknown user"}catch{return"an unknown user"}}async function dT(){if(process.env.TEST_ENV)return process.env.TEST_NPM_2FA_TOKEN||"";let{otp:t}=await(0,cce.prompt)({type:"password",name:"otp",message:"One-time password:",required:!0,onCancel:()=>process.exit(130)});return t}function mb(t){var e,r;if(((e=t.originalError)==null?void 0:e.name)!=="HTTPError")return!1;try{return((r=t.originalError)==null?void 0:r.response.headers["www-authenticate"].split(/,\s*/).map(n=>n.toLowerCase())).includes("otp")}catch(i){return!1}}function ch(t){return{["npm-otp"]:t}}var CT=class{supports(e,r){if(!e.reference.startsWith(Cr))return!1;let{selector:i,params:n}=P.parseRange(e.reference);return!(!gce.default.valid(i)||n===null||typeof n.__archiveUrl!="string")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote server`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let{params:i}=P.parseRange(e.reference);if(i===null||typeof i.__archiveUrl!="string")throw new Error("Assertion failed: The archiveUrl querystring parameter should have been available");let n=await Bo(i.__archiveUrl,{configuration:r.project.configuration,ident:e});return await wi.convertToZip(n,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}};var mT=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Cr)||!P.tryParseDescriptor(e.range.slice(Cr.length),!0))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){let i=P.parseDescriptor(e.range.slice(Cr.length),!0);return r.resolver.getResolutionDependencies(i,r)}async getCandidates(e,r,i){let n=P.parseDescriptor(e.range.slice(Cr.length),!0);return await i.resolver.getCandidates(n,r,i)}async getSatisfying(e,r,i){let n=P.parseDescriptor(e.range.slice(Cr.length),!0);return i.resolver.getSatisfying(n,r,i)}resolve(e,r){throw new Error("Unreachable")}};var fce=ge(ri()),hce=ge(require("url"));var bo=class{supports(e,r){if(!e.reference.startsWith(Cr))return!1;let i=new hce.URL(e.reference);return!(!fce.default.valid(i.pathname)||i.searchParams.has("__archiveUrl"))}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the remote registry`),loader:()=>this.fetchFromNetwork(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),checksum:o}}async fetchFromNetwork(e,r){let i;try{i=await Bo(bo.getLocatorUrl(e),{configuration:r.project.configuration,ident:e})}catch(n){i=await Bo(bo.getLocatorUrl(e).replace(/%2f/g,"/"),{configuration:r.project.configuration,ident:e})}return await wi.convertToZip(i,{compressionLevel:r.project.configuration.get("compressionLevel"),prefixPath:P.getIdentVendorPath(e),stripComponents:1})}static isConventionalTarballUrl(e,r,{configuration:i}){let n=BA(e.scope,{configuration:i}),s=bo.getLocatorUrl(e);return r=r.replace(/^https?:(\/\/(?:[^/]+\.)?npmjs.org(?:$|\/))/,"https:$1"),n=n.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r=r.replace(/^https:\/\/registry\.npmjs\.org($|\/)/,"https://registry.yarnpkg.com$1"),r===n+s||r===n+s.replace(/%2f/g,"/")}static getLocatorUrl(e){let r=Wt.clean(e.reference.slice(Cr.length));if(r===null)throw new ct($.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");return`${Nl(e)}/-/${e.name}-${r}.tgz`}};var pce=ge(ri());var Ib=P.makeIdent(null,"node-gyp"),X5e=/\b(node-gyp|prebuild-install)\b/,ET=class{supportsDescriptor(e,r){return e.range.startsWith(Cr)?!!Wt.validRange(e.range.slice(Cr.length)):!1}supportsLocator(e,r){if(!e.reference.startsWith(Cr))return!1;let{selector:i}=P.parseRange(e.reference);return!!pce.default.valid(i)}shouldPersistResolution(e,r){return!0}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=Wt.validRange(e.range.slice(Cr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Cr.length)}`);let s=await Bo(Nl(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0}),o=ve.mapAndFilter(Object.keys(s.versions),c=>{try{let u=new Wt.SemVer(c);if(n.test(u))return u}catch{}return ve.mapAndFilter.skip}),a=o.filter(c=>!s.versions[c.raw].deprecated),l=a.length>0?a:o;return l.sort((c,u)=>-c.compare(u)),l.map(c=>{let u=P.makeLocator(e,`${Cr}${c.raw}`),g=s.versions[c.raw].dist.tarball;return bo.isConventionalTarballUrl(u,g,{configuration:i.project.configuration})?u:P.bindLocator(u,{__archiveUrl:g})})}async getSatisfying(e,r,i){let n=Wt.validRange(e.range.slice(Cr.length));if(n===null)throw new Error(`Expected a valid range, got ${e.range.slice(Cr.length)}`);return ve.mapAndFilter(r,s=>{try{let{selector:o}=P.parseRange(s,{requireProtocol:Cr}),a=new Wt.SemVer(o);if(n.test(a))return{reference:s,version:a}}catch{}return ve.mapAndFilter.skip}).sort((s,o)=>-s.version.compare(o.version)).map(({reference:s})=>P.makeLocator(e,s))}async resolve(e,r){let{selector:i}=P.parseRange(e.reference),n=Wt.clean(i);if(n===null)throw new ct($.RESOLVER_NOT_FOUND,"The npm semver resolver got selected, but the version isn't semver");let s=await Bo(Nl(e),{configuration:r.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"versions"))throw new ct($.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(!Object.prototype.hasOwnProperty.call(s.versions,n))throw new ct($.REMOTE_NOT_FOUND,`Registry failed to return reference "${n}"`);let o=new At;if(o.load(s.versions[n]),!o.dependencies.has(Ib.identHash)&&!o.peerDependencies.has(Ib.identHash)){for(let a of o.scripts.values())if(a.match(X5e)){o.dependencies.set(Ib.identHash,P.makeDescriptor(Ib,"latest")),r.report.reportWarningOnce($.NODE_GYP_INJECTED,`${P.prettyLocator(r.project.configuration,e)}: Implicit dependencies on node-gyp are discouraged`);break}}if(typeof o.raw.deprecated=="string"&&o.raw.deprecated!==""){let a=P.prettyLocator(r.project.configuration,e),l=o.raw.deprecated.match(/\S/)?`${a} is deprecated: ${o.raw.deprecated}`:`${a} is deprecated`;r.report.reportWarningOnce($.DEPRECATED_PACKAGE,l)}return ie(N({},e),{version:n,languageName:"node",linkType:Qt.HARD,conditions:o.getConditions(),dependencies:o.dependencies,peerDependencies:o.peerDependencies,dependenciesMeta:o.dependenciesMeta,peerDependenciesMeta:o.peerDependenciesMeta,bin:o.bin})}};var IT=class{supportsDescriptor(e,r){return!(!e.range.startsWith(Cr)||!qg.test(e.range.slice(Cr.length)))}supportsLocator(e,r){return!1}shouldPersistResolution(e,r){throw new Error("Unreachable")}bindDescriptor(e,r,i){return e}getResolutionDependencies(e,r){return[]}async getCandidates(e,r,i){let n=e.range.slice(Cr.length),s=await Bo(Nl(e),{configuration:i.project.configuration,ident:e,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(s,"dist-tags"))throw new ct($.REMOTE_INVALID,'Registry returned invalid data - missing "dist-tags" field');let o=s["dist-tags"];if(!Object.prototype.hasOwnProperty.call(o,n))throw new ct($.REMOTE_NOT_FOUND,`Registry failed to return tag "${n}"`);let a=o[n],l=P.makeLocator(e,`${Cr}${a}`),c=s.versions[a].dist.tarball;return bo.isConventionalTarballUrl(l,c,{configuration:i.project.configuration})?[l]:[P.bindLocator(l,{__archiveUrl:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){throw new Error("Unreachable")}};var Bh={};ft(Bh,{getGitHead:()=>_Ve,makePublishBody:()=>zVe});var AO={};ft(AO,{default:()=>PVe,packUtils:()=>SA});var SA={};ft(SA,{genPackList:()=>Gb,genPackStream:()=>aO,genPackageManifest:()=>jue,hasPackScripts:()=>sO,prepareForPack:()=>oO});var nO=ge(rs()),Hue=ge(Uue()),Gue=ge(require("zlib")),EVe=["/package.json","/readme","/readme.*","/license","/license.*","/licence","/licence.*","/changelog","/changelog.*"],IVe=["/package.tgz",".github",".git",".hg","node_modules",".npmignore",".gitignore",".#*",".DS_Store"];async function sO(t){return!!(Zt.hasWorkspaceScript(t,"prepack")||Zt.hasWorkspaceScript(t,"postpack"))}async function oO(t,{report:e},r){await Zt.maybeExecuteWorkspaceLifecycleScript(t,"prepack",{report:e});try{let i=x.join(t.cwd,At.fileName);await K.existsPromise(i)&&await t.manifest.loadFile(i,{baseFs:K}),await r()}finally{await Zt.maybeExecuteWorkspaceLifecycleScript(t,"postpack",{report:e})}}async function aO(t,e){var s,o;typeof e=="undefined"&&(e=await Gb(t));let r=new Set;for(let a of(o=(s=t.manifest.publishConfig)==null?void 0:s.executableFiles)!=null?o:new Set)r.add(x.normalize(a));for(let a of t.manifest.bin.values())r.add(x.normalize(a));let i=Hue.default.pack();process.nextTick(async()=>{for(let a of e){let l=x.normalize(a),c=x.resolve(t.cwd,l),u=x.join("package",l),g=await K.lstatPromise(c),f={name:u,mtime:new Date(Dr.SAFE_TIME*1e3)},h=r.has(l)?493:420,p,m,y=new Promise((S,k)=>{p=S,m=k}),b=S=>{S?m(S):p()};if(g.isFile()){let S;l==="package.json"?S=Buffer.from(JSON.stringify(await jue(t),null,2)):S=await K.readFilePromise(c),i.entry(ie(N({},f),{mode:h,type:"file"}),S,b)}else g.isSymbolicLink()?i.entry(ie(N({},f),{mode:h,type:"symlink",linkname:await K.readlinkPromise(c)}),b):b(new Error(`Unsupported file type ${g.mode} for ${H.fromPortablePath(l)}`));await y}i.finalize()});let n=(0,Gue.createGzip)();return i.pipe(n),n}async function jue(t){let e=JSON.parse(JSON.stringify(t.manifest.raw));return await t.project.configuration.triggerHook(r=>r.beforeWorkspacePacking,t,e),e}async function Gb(t){var g,f,h,p,m,y,b,S;let e=t.project,r=e.configuration,i={accept:[],reject:[]};for(let k of IVe)i.reject.push(k);for(let k of EVe)i.accept.push(k);i.reject.push(r.get("rcFilename"));let n=k=>{if(k===null||!k.startsWith(`${t.cwd}/`))return;let T=x.relative(t.cwd,k),Y=x.resolve(Ke.root,T);i.reject.push(Y)};n(x.resolve(e.cwd,r.get("lockfileFilename"))),n(r.get("cacheFolder")),n(r.get("globalFolder")),n(r.get("installStatePath")),n(r.get("virtualFolder")),n(r.get("yarnPath")),await r.triggerHook(k=>k.populateYarnPaths,e,k=>{n(k)});for(let k of e.workspaces){let T=x.relative(t.cwd,k.cwd);T!==""&&!T.match(/^(\.\.)?\//)&&i.reject.push(`/${T}`)}let s={accept:[],reject:[]},o=(f=(g=t.manifest.publishConfig)==null?void 0:g.main)!=null?f:t.manifest.main,a=(p=(h=t.manifest.publishConfig)==null?void 0:h.module)!=null?p:t.manifest.module,l=(y=(m=t.manifest.publishConfig)==null?void 0:m.browser)!=null?y:t.manifest.browser,c=(S=(b=t.manifest.publishConfig)==null?void 0:b.bin)!=null?S:t.manifest.bin;o!=null&&s.accept.push(x.resolve(Ke.root,o)),a!=null&&s.accept.push(x.resolve(Ke.root,a)),typeof l=="string"&&s.accept.push(x.resolve(Ke.root,l));for(let k of c.values())s.accept.push(x.resolve(Ke.root,k));if(l instanceof Map)for(let[k,T]of l.entries())s.accept.push(x.resolve(Ke.root,k)),typeof T=="string"&&s.accept.push(x.resolve(Ke.root,T));let u=t.manifest.files!==null;if(u){s.reject.push("/*");for(let k of t.manifest.files)Yue(s.accept,k,{cwd:Ke.root})}return await yVe(t.cwd,{hasExplicitFileList:u,globalList:i,ignoreList:s})}async function yVe(t,{hasExplicitFileList:e,globalList:r,ignoreList:i}){let n=[],s=new Ra(t),o=[[Ke.root,[i]]];for(;o.length>0;){let[a,l]=o.pop(),c=await s.lstatPromise(a);if(!Jue(a,{globalList:r,ignoreLists:c.isDirectory()?null:l}))if(c.isDirectory()){let u=await s.readdirPromise(a),g=!1,f=!1;if(!e||a!==Ke.root)for(let m of u)g=g||m===".gitignore",f=f||m===".npmignore";let h=f?await que(s,a,".npmignore"):g?await que(s,a,".gitignore"):null,p=h!==null?[h].concat(l):l;Jue(a,{globalList:r,ignoreLists:l})&&(p=[...l,{accept:[],reject:["**/*"]}]);for(let m of u)o.push([x.resolve(a,m),p])}else(c.isFile()||c.isSymbolicLink())&&n.push(x.relative(Ke.root,a))}return n.sort()}async function que(t,e,r){let i={accept:[],reject:[]},n=await t.readFilePromise(x.join(e,r),"utf8");for(let s of n.split(/\n/g))Yue(i.reject,s,{cwd:e});return i}function wVe(t,{cwd:e}){let r=t[0]==="!";return r&&(t=t.slice(1)),t.match(/\.{0,1}\//)&&(t=x.resolve(e,t)),r&&(t=`!${t}`),t}function Yue(t,e,{cwd:r}){let i=e.trim();i===""||i[0]==="#"||t.push(wVe(i,{cwd:r}))}var us;(function(i){i[i.None=0]="None",i[i.Match=1]="Match",i[i.NegatedMatch=2]="NegatedMatch"})(us||(us={}));function Jue(t,{globalList:e,ignoreLists:r}){let i=jb(t,e.accept);if(i!==0)return i===2;let n=jb(t,e.reject);if(n!==0)return n===1;if(r!==null)for(let s of r){let o=jb(t,s.accept);if(o!==0)return o===2;let a=jb(t,s.reject);if(a!==0)return a===1}return!1}function jb(t,e){let r=e,i=[];for(let n=0;n{await oO(i,{report:l},async()=>{l.reportJson({base:H.fromPortablePath(i.cwd)});let c=await Gb(i);for(let u of c)l.reportInfo(null,H.fromPortablePath(u)),l.reportJson({location:H.fromPortablePath(u)});if(!this.dryRun){let u=await aO(i,c),g=K.createWriteStream(s);u.pipe(g),await new Promise(f=>{g.on("finish",f)})}}),this.dryRun||(l.reportInfo($.UNNAMED,`Package archive generated in ${Ae.pretty(e,s,Ae.Type.PATH)}`),l.reportJson({output:H.fromPortablePath(s)}))})).exitCode()}};lE.paths=[["pack"]],lE.usage=Re.Usage({description:"generate a tarball from the active workspace",details:"\n This command will turn the active workspace into a compressed archive suitable for publishing. The archive will by default be stored at the root of the workspace (`package.tgz`).\n\n If the `-o,---out` is set the archive will be created at the specified path. The `%s` and `%v` variables can be used within the path and will be respectively replaced by the package name and version.\n ",examples:[["Create an archive from the active workspace","yarn pack"],["List the files that would be made part of the workspace's archive","yarn pack --dry-run"],["Name and output the archive in a dedicated folder","yarn pack --out /artifacts/%s-%v.tgz"]]});var zue=lE;function BVe(t,{workspace:e}){let r=t.replace("%s",bVe(e)).replace("%v",QVe(e));return H.toPortablePath(r)}function bVe(t){return t.manifest.name!==null?P.slugifyIdent(t.manifest.name):"package"}function QVe(t){return t.manifest.version!==null?t.manifest.version:"unknown"}var vVe=["dependencies","devDependencies","peerDependencies"],SVe="workspace:",kVe=(t,e)=>{var i,n;e.publishConfig&&(e.publishConfig.main&&(e.main=e.publishConfig.main),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.module&&(e.module=e.publishConfig.module),e.publishConfig.browser&&(e.browser=e.publishConfig.browser),e.publishConfig.exports&&(e.exports=e.publishConfig.exports),e.publishConfig.bin&&(e.bin=e.publishConfig.bin));let r=t.project;for(let s of vVe)for(let o of t.manifest.getForScope(s).values()){let a=r.tryWorkspaceByDescriptor(o),l=P.parseRange(o.range);if(l.protocol===SVe)if(a===null){if(r.tryWorkspaceByIdent(o)===null)throw new ct($.WORKSPACE_NOT_FOUND,`${P.prettyDescriptor(r.configuration,o)}: No local workspace found for this range`)}else{let c;P.areDescriptorsEqual(o,a.anchoredDescriptor)||l.selector==="*"?c=(i=a.manifest.version)!=null?i:"0.0.0":l.selector==="~"||l.selector==="^"?c=`${l.selector}${(n=a.manifest.version)!=null?n:"0.0.0"}`:c=l.selector;let u=s==="dependencies"?P.makeDescriptor(o,"unknown"):null,g=u!==null&&t.manifest.ensureDependencyMeta(u).optional?"optionalDependencies":s;e[g][P.stringifyIdent(o)]=c}}},xVe={hooks:{beforeWorkspacePacking:kVe},commands:[zue]},PVe=xVe;var ige=ge(require("crypto")),nge=ge(rge()),sge=ge(require("url"));async function zVe(t,e,{access:r,tag:i,registry:n,gitHead:s}){let o=t.project.configuration,a=t.manifest.name,l=t.manifest.version,c=P.stringifyIdent(a),u=(0,ige.createHash)("sha1").update(e).digest("hex"),g=nge.default.fromData(e).toString();typeof r=="undefined"&&(t.manifest.publishConfig&&typeof t.manifest.publishConfig.access=="string"?r=t.manifest.publishConfig.access:o.get("npmPublishAccess")!==null?r=o.get("npmPublishAccess"):a.scope?r="restricted":r="public");let f=await SA.genPackageManifest(t),h=`${c}-${l}.tgz`,p=new sge.URL(`${pa(n)}/${c}/-/${h}`);return{_id:c,_attachments:{[h]:{content_type:"application/octet-stream",data:e.toString("base64"),length:e.length}},name:c,access:r,["dist-tags"]:{[i]:l},versions:{[l]:ie(N({},f),{_id:`${c}@${l}`,name:c,version:l,gitHead:s,dist:{shasum:u,integrity:g,tarball:p.toString()}})}}}async function _Ve(t){try{let{stdout:e}=await Fr.execvp("git",["rev-parse","--revs-only","HEAD"],{cwd:t});return e.trim()===""?void 0:e.trim()}catch{return}}var fO={npmAlwaysAuth:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ye.BOOLEAN,default:!1},npmAuthIdent:{description:"Authentication identity for the npm registry (_auth in npm and yarn v1)",type:ye.SECRET,default:null},npmAuthToken:{description:"Authentication token for the npm registry (_authToken in npm and yarn v1)",type:ye.SECRET,default:null}},oge={npmAuditRegistry:{description:"Registry to query for audit reports",type:ye.STRING,default:null},npmPublishRegistry:{description:"Registry to push packages to",type:ye.STRING,default:null},npmRegistryServer:{description:"URL of the selected npm registry (note: npm enterprise isn't supported)",type:ye.STRING,default:"https://registry.yarnpkg.com"}},VVe={configuration:ie(N(N({},fO),oge),{npmScopes:{description:"Settings per package scope",type:ye.MAP,valueDefinition:{description:"",type:ye.SHAPE,properties:N(N({},fO),oge)}},npmRegistries:{description:"Settings per registry",type:ye.MAP,normalizeKeys:pa,valueDefinition:{description:"",type:ye.SHAPE,properties:N({},fO)}}}),fetchers:[CT,bo],resolvers:[mT,ET,IT]},XVe=VVe;var CO={};ft(CO,{default:()=>o9e});Is();var Ia;(function(i){i.All="all",i.Production="production",i.Development="development"})(Ia||(Ia={}));var vo;(function(s){s.Info="info",s.Low="low",s.Moderate="moderate",s.High="high",s.Critical="critical"})(vo||(vo={}));var Yb=[vo.Info,vo.Low,vo.Moderate,vo.High,vo.Critical];function age(t,e){let r=[],i=new Set,n=o=>{i.has(o)||(i.add(o),r.push(o))};for(let o of e)n(o);let s=new Set;for(;r.length>0;){let o=r.shift(),a=t.storedResolutions.get(o);if(typeof a=="undefined")throw new Error("Assertion failed: Expected the resolution to have been registered");let l=t.storedPackages.get(a);if(!!l){s.add(o);for(let c of l.dependencies.values())n(c.descriptorHash)}}return s}function ZVe(t,e){return new Set([...t].filter(r=>!e.has(r)))}function $Ve(t,e,{all:r}){let i=r?t.workspaces:[e],n=i.map(f=>f.manifest),s=new Set(n.map(f=>[...f.dependencies].map(([h,p])=>h)).flat()),o=new Set(n.map(f=>[...f.devDependencies].map(([h,p])=>h)).flat()),a=i.map(f=>[...f.dependencies.values()]).flat(),l=a.filter(f=>s.has(f.identHash)).map(f=>f.descriptorHash),c=a.filter(f=>o.has(f.identHash)).map(f=>f.descriptorHash),u=age(t,l),g=age(t,c);return ZVe(g,u)}function Age(t){let e={};for(let r of t)e[P.stringifyIdent(r)]=P.parseRange(r.range).selector;return e}function lge(t){if(typeof t=="undefined")return new Set;let e=Yb.indexOf(t),r=Yb.slice(e);return new Set(r)}function e9e(t,e){let r=lge(e),i={};for(let n of r)i[n]=t[n];return i}function cge(t,e){var i;let r=e9e(t,e);for(let n of Object.keys(r))if((i=r[n])!=null?i:0>0)return!0;return!1}function uge(t,e){var s;let r={},i={children:r},n=Object.values(t.advisories);if(e!=null){let o=lge(e);n=n.filter(a=>o.has(a.severity))}for(let o of ve.sortMap(n,a=>a.module_name))r[o.module_name]={label:o.module_name,value:Ae.tuple(Ae.Type.RANGE,o.findings.map(a=>a.version).join(", ")),children:{Issue:{label:"Issue",value:Ae.tuple(Ae.Type.NO_HINT,o.title)},URL:{label:"URL",value:Ae.tuple(Ae.Type.URL,o.url)},Severity:{label:"Severity",value:Ae.tuple(Ae.Type.NO_HINT,o.severity)},["Vulnerable Versions"]:{label:"Vulnerable Versions",value:Ae.tuple(Ae.Type.RANGE,o.vulnerable_versions)},["Patched Versions"]:{label:"Patched Versions",value:Ae.tuple(Ae.Type.RANGE,o.patched_versions)},Via:{label:"Via",value:Ae.tuple(Ae.Type.NO_HINT,Array.from(new Set(o.findings.map(a=>a.paths).flat().map(a=>a.split(">")[0]))).join(", "))},Recommendation:{label:"Recommendation",value:Ae.tuple(Ae.Type.NO_HINT,(s=o.recommendation)==null?void 0:s.replace(/\n/g," "))}}};return i}function gge(t,e,{all:r,environment:i}){let n=r?t.workspaces:[e],s=[Ia.All,Ia.Production].includes(i),o=[];if(s)for(let c of n)for(let u of c.manifest.dependencies.values())o.push(u);let a=[Ia.All,Ia.Development].includes(i),l=[];if(a)for(let c of n)for(let u of c.manifest.devDependencies.values())l.push(u);return Age([...o,...l].filter(c=>P.parseRange(c.range).protocol===null))}function fge(t,e,{all:r}){var s;let i=$Ve(t,e,{all:r}),n={};for(let o of t.storedPackages.values())n[P.stringifyIdent(o)]={version:(s=o.version)!=null?s:"0.0.0",integrity:o.identHash,requires:Age(o.dependencies.values()),dev:i.has(P.convertLocatorToDescriptor(o).descriptorHash)};return n}var gE=class extends Le{constructor(){super(...arguments);this.all=W.Boolean("-A,--all",!1,{description:"Audit dependencies from all workspaces"});this.recursive=W.Boolean("-R,--recursive",!1,{description:"Audit transitive dependencies as well"});this.environment=W.String("--environment",Ia.All,{description:"Which environments to cover",validator:nn(Ia)});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.severity=W.String("--severity",vo.Info,{description:"Minimal severity requested for packages to be displayed",validator:nn(vo)})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState();let n=gge(r,i,{all:this.all,environment:this.environment}),s=fge(r,i,{all:this.all});if(!this.recursive)for(let f of Object.keys(s))Object.prototype.hasOwnProperty.call(n,f)?s[f].requires={}:delete s[f];let o={requires:n,dependencies:s},a=br.getAuditRegistry(i.manifest,{configuration:e}),l,c=await gA.start({configuration:e,stdout:this.context.stdout},async()=>{l=await zt.post("/-/npm/v1/security/audits/quick",o,{authType:zt.AuthType.BEST_EFFORT,configuration:e,jsonResponse:!0,registry:a})});if(c.hasErrors())return c.exitCode();let u=cge(l.metadata.vulnerabilities,this.severity);return!this.json&&u?(As.emitTree(uge(l,this.severity),{configuration:e,json:this.json,stdout:this.context.stdout,separators:2}),1):(await Je.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async f=>{f.reportJson(l),u||f.reportInfo($.EXCEPTION,"No audit suggestions")})).exitCode()}};gE.paths=[["npm","audit"]],gE.usage=Re.Usage({description:"perform a vulnerability audit against the installed packages",details:`
+ This command checks for known security reports on the packages you use. The reports are by default extracted from the npm registry, and may or may not be relevant to your actual program (not all vulnerabilities affect all code paths).
+
+ For consistency with our other commands the default is to only check the direct dependencies for the active workspace. To extend this search to all workspaces, use \`-A,--all\`. To extend this search to both direct and transitive dependencies, use \`-R,--recursive\`.
+
+ Applying the \`--severity\` flag will limit the audit table to vulnerabilities of the corresponding severity and above. Valid values are ${Yb.map(e=>`\`${e}\``).join(", ")}.
+
+ If the \`--json\` flag is set, Yarn will print the output exactly as received from the registry. Regardless of this flag, the process will exit with a non-zero exit code if a report is found for the selected packages.
+
+ To understand the dependency tree requiring vulnerable packages, check the raw report with the \`--json\` flag or use \`yarn why \` to get more information as to who depends on them.
+ `,examples:[["Checks for known security issues with the installed packages. The output is a list of known issues.","yarn npm audit"],["Audit dependencies in all workspaces","yarn npm audit --all"],["Limit auditing to `dependencies` (excludes `devDependencies`)","yarn npm audit --environment production"],["Show audit report as valid JSON","yarn npm audit --json"],["Audit all direct and transitive dependencies","yarn npm audit --recursive"],["Output moderate (or more severe) vulnerabilities","yarn npm audit --severity moderate"]]});var hge=gE;var hO=ge(ri()),pO=ge(require("util")),fE=class extends Le{constructor(){super(...arguments);this.fields=W.String("-f,--fields",{description:"A comma-separated list of manifest fields that should be displayed"});this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.packages=W.Rest()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r}=await ze.find(e,this.context.cwd),i=typeof this.fields!="undefined"?new Set(["name",...this.fields.split(/\s*,\s*/)]):null,n=[],s=!1,o=await Je.start({configuration:e,includeFooter:!1,json:this.json,stdout:this.context.stdout},async a=>{for(let l of this.packages){let c;if(l==="."){let k=r.topLevelWorkspace;if(!k.manifest.name)throw new Pe(`Missing ${Ae.pretty(e,"name",Ae.Type.CODE)} field in ${H.fromPortablePath(x.join(k.cwd,Pt.manifest))}`);c=P.makeDescriptor(k.manifest.name,"unknown")}else c=P.parseDescriptor(l);let u=zt.getIdentUrl(c),g=dO(await zt.get(u,{configuration:e,ident:c,jsonResponse:!0,customErrorMessage:zt.customPackageError})),f=Object.keys(g.versions).sort(hO.default.compareLoose),p=g["dist-tags"].latest||f[f.length-1],m=Wt.validRange(c.range);if(m){let k=hO.default.maxSatisfying(f,m);k!==null?p=k:(a.reportWarning($.UNNAMED,`Unmet range ${P.prettyRange(e,c.range)}; falling back to the latest version`),s=!0)}else Object.prototype.hasOwnProperty.call(g["dist-tags"],c.range)?p=g["dist-tags"][c.range]:c.range!=="unknown"&&(a.reportWarning($.UNNAMED,`Unknown tag ${P.prettyRange(e,c.range)}; falling back to the latest version`),s=!0);let y=g.versions[p],b=ie(N(N({},g),y),{version:p,versions:f}),S;if(i!==null){S={};for(let k of i){let T=b[k];if(typeof T!="undefined")S[k]=T;else{a.reportWarning($.EXCEPTION,`The ${Ae.pretty(e,k,Ae.Type.CODE)} field doesn't exist inside ${P.prettyIdent(e,c)}'s information`),s=!0;continue}}}else this.json||(delete b.dist,delete b.readme,delete b.users),S=b;a.reportJson(S),this.json||n.push(S)}});pO.inspect.styles.name="cyan";for(let a of n)(a!==n[0]||s)&&this.context.stdout.write(`
+`),this.context.stdout.write(`${(0,pO.inspect)(a,{depth:Infinity,colors:!0,compact:!1})}
+`);return o.exitCode()}};fE.paths=[["npm","info"]],fE.usage=Re.Usage({category:"Npm-related commands",description:"show information about a package",details:"\n This command fetches information about a package from the npm registry and prints it in a tree format.\n\n The package does not have to be installed locally, but needs to have been published (in particular, local changes will be ignored even for workspaces).\n\n Append `@` to the package argument to provide information specific to the latest version that satisfies the range or to the corresponding tagged version. If the range is invalid or if there is no version satisfying the range, the command will print a warning and fall back to the latest version.\n\n If the `-f,--fields` option is set, it's a comma-separated list of fields which will be used to only display part of the package information.\n\n By default, this command won't return the `dist`, `readme`, and `users` fields, since they are often very long. To explicitly request those fields, explicitly list them with the `--fields` flag or request the output in JSON mode.\n ",examples:[["Show all available information about react (except the `dist`, `readme`, and `users` fields)","yarn npm info react"],["Show all available information about react as valid JSON (including the `dist`, `readme`, and `users` fields)","yarn npm info react --json"],["Show all available information about react@16.12.0","yarn npm info react@16.12.0"],["Show all available information about react@next","yarn npm info react@next"],["Show the description of react","yarn npm info react --fields description"],["Show all available versions of react","yarn npm info react --fields versions"],["Show the readme of react","yarn npm info react --fields readme"],["Show a few fields of react","yarn npm info react --fields homepage,repository"]]});var pge=fE;function dO(t){if(Array.isArray(t)){let e=[];for(let r of t)r=dO(r),r&&e.push(r);return e}else if(typeof t=="object"&&t!==null){let e={};for(let r of Object.keys(t)){if(r.startsWith("_"))continue;let i=dO(t[r]);i&&(e[r]=i)}return e}else return t||null}var dge=ge(em()),hE=class extends Le{constructor(){super(...arguments);this.scope=W.String("-s,--scope",{description:"Login to the registry configured for a given scope"});this.publish=W.Boolean("--publish",!1,{description:"Login to the publish registry"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),r=await qb({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope});return(await Je.start({configuration:e,stdout:this.context.stdout},async n=>{let s=await r9e({registry:r,report:n,stdin:this.context.stdin,stdout:this.context.stdout}),o=`/-/user/org.couchdb.user:${encodeURIComponent(s.name)}`,a=await zt.put(o,s,{attemptedAs:s.name,configuration:e,registry:r,jsonResponse:!0,authType:zt.AuthType.NO_AUTH});return await t9e(r,a.token,{configuration:e,scope:this.scope}),n.reportInfo($.UNNAMED,"Successfully logged in")})).exitCode()}};hE.paths=[["npm","login"]],hE.usage=Re.Usage({category:"Npm-related commands",description:"store new login info to access the npm registry",details:"\n This command will ask you for your username, password, and 2FA One-Time-Password (when it applies). It will then modify your local configuration (in your home folder, never in the project itself) to reference the new tokens thus generated.\n\n Adding the `-s,--scope` flag will cause the authentication to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the authentication to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n ",examples:[["Login to the default registry","yarn npm login"],["Login to the registry linked to the @my-scope registry","yarn npm login --scope my-scope"],["Login to the publish registry for the current package","yarn npm login --publish"]]});var Cge=hE;async function qb({scope:t,publish:e,configuration:r,cwd:i}){return t&&e?br.getScopeRegistry(t,{configuration:r,type:br.RegistryType.PUBLISH_REGISTRY}):t?br.getScopeRegistry(t,{configuration:r}):e?br.getPublishRegistry((await zf(r,i)).manifest,{configuration:r}):br.getDefaultRegistry({configuration:r})}async function t9e(t,e,{configuration:r,scope:i}){let n=o=>a=>{let l=ve.isIndexableObject(a)?a:{},c=l[o],u=ve.isIndexableObject(c)?c:{};return ie(N({},l),{[o]:ie(N({},u),{npmAuthToken:e})})},s=i?{npmScopes:n(i)}:{npmRegistries:n(t)};return await we.updateHomeConfiguration(s)}async function r9e({registry:t,report:e,stdin:r,stdout:i}){if(process.env.TEST_ENV)return{name:process.env.TEST_NPM_USER||"",password:process.env.TEST_NPM_PASSWORD||""};e.reportInfo($.UNNAMED,`Logging in to ${t}`);let n=!1;t.match(/^https:\/\/npm\.pkg\.github\.com(\/|$)/)&&(e.reportInfo($.UNNAMED,"You seem to be using the GitHub Package Registry. Tokens must be generated with the 'repo', 'write:packages', and 'read:packages' permissions."),n=!0),e.reportSeparator();let{username:s,password:o}=await(0,dge.prompt)([{type:"input",name:"username",message:"Username:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i},{type:"password",name:"password",message:n?"Token:":"Password:",required:!0,onCancel:()=>process.exit(130),stdin:r,stdout:i}]);return e.reportSeparator(),{name:s,password:o}}var bh=new Set(["npmAuthIdent","npmAuthToken"]),pE=class extends Le{constructor(){super(...arguments);this.scope=W.String("-s,--scope",{description:"Logout of the registry configured for a given scope"});this.publish=W.Boolean("--publish",!1,{description:"Logout of the publish registry"});this.all=W.Boolean("-A,--all",!1,{description:"Logout of all registries"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),r=async()=>{var l;let n=await qb({configuration:e,cwd:this.context.cwd,publish:this.publish,scope:this.scope}),s=await we.find(this.context.cwd,this.context.plugins),o=P.makeIdent((l=this.scope)!=null?l:null,"pkg");return!br.getAuthConfiguration(n,{configuration:s,ident:o}).get("npmAuthToken")};return(await Je.start({configuration:e,stdout:this.context.stdout},async n=>{if(this.all&&(await i9e(),n.reportInfo($.UNNAMED,"Successfully logged out from everything")),this.scope){await mge("npmScopes",this.scope),await r()?n.reportInfo($.UNNAMED,`Successfully logged out from ${this.scope}`):n.reportWarning($.UNNAMED,"Scope authentication settings removed, but some other ones settings still apply to it");return}let s=await qb({configuration:e,cwd:this.context.cwd,publish:this.publish});await mge("npmRegistries",s),await r()?n.reportInfo($.UNNAMED,`Successfully logged out from ${s}`):n.reportWarning($.UNNAMED,"Registry authentication settings removed, but some other ones settings still apply to it")})).exitCode()}};pE.paths=[["npm","logout"]],pE.usage=Re.Usage({category:"Npm-related commands",description:"logout of the npm registry",details:"\n This command will log you out by modifying your local configuration (in your home folder, never in the project itself) to delete all credentials linked to a registry.\n\n Adding the `-s,--scope` flag will cause the deletion to be done against whatever registry is configured for the associated scope (see also `npmScopes`).\n\n Adding the `--publish` flag will cause the deletion to be done against the registry used when publishing the package (see also `publishConfig.registry` and `npmPublishRegistry`).\n\n Adding the `-A,--all` flag will cause the deletion to be done against all registries and scopes.\n ",examples:[["Logout of the default registry","yarn npm logout"],["Logout of the @my-scope scope","yarn npm logout --scope my-scope"],["Logout of the publish registry for the current package","yarn npm logout --publish"],["Logout of all registries","yarn npm logout --all"]]});var Ege=pE;function n9e(t,e){let r=t[e];if(!ve.isIndexableObject(r))return!1;let i=new Set(Object.keys(r));if([...bh].every(s=>!i.has(s)))return!1;for(let s of bh)i.delete(s);if(i.size===0)return t[e]=void 0,!0;let n=N({},r);for(let s of bh)delete n[s];return t[e]=n,!0}async function i9e(){let t=e=>{let r=!1,i=ve.isIndexableObject(e)?N({},e):{};i.npmAuthToken&&(delete i.npmAuthToken,r=!0);for(let n of Object.keys(i))n9e(i,n)&&(r=!0);if(Object.keys(i).length!==0)return r?i:e};return await we.updateHomeConfiguration({npmRegistries:t,npmScopes:t})}async function mge(t,e){return await we.updateHomeConfiguration({[t]:r=>{let i=ve.isIndexableObject(r)?r:{};if(!Object.prototype.hasOwnProperty.call(i,e))return r;let n=i[e],s=ve.isIndexableObject(n)?n:{},o=new Set(Object.keys(s));if([...bh].every(l=>!o.has(l)))return r;for(let l of bh)o.delete(l);if(o.size===0)return Object.keys(i).length===1?void 0:ie(N({},i),{[e]:void 0});let a={};for(let l of bh)a[l]=void 0;return ie(N({},i),{[e]:N(N({},s),a)})}})}var dE=class extends Le{constructor(){super(...arguments);this.access=W.String("--access",{description:"The access for the published package (public or restricted)"});this.tag=W.String("--tag","latest",{description:"The tag on the registry that the package should be attached to"});this.tolerateRepublish=W.Boolean("--tolerate-republish",!1,{description:"Warn and exit when republishing an already existing version of a package"});this.otp=W.String("--otp",{description:"The OTP token to use with the command"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);if(i.manifest.private)throw new Pe("Private workspaces cannot be published");if(i.manifest.name===null||i.manifest.version===null)throw new Pe("Workspaces must have valid names and versions to be published on an external registry");await r.restoreInstallState();let n=i.manifest.name,s=i.manifest.version,o=br.getPublishRegistry(i.manifest,{configuration:e});return(await Je.start({configuration:e,stdout:this.context.stdout},async l=>{var c,u;if(this.tolerateRepublish)try{let g=await zt.get(zt.getIdentUrl(n),{configuration:e,registry:o,ident:n,jsonResponse:!0});if(!Object.prototype.hasOwnProperty.call(g,"versions"))throw new ct($.REMOTE_INVALID,'Registry returned invalid data for - missing "versions" field');if(Object.prototype.hasOwnProperty.call(g.versions,s)){l.reportWarning($.UNNAMED,`Registry already knows about version ${s}; skipping.`);return}}catch(g){if(((u=(c=g.originalError)==null?void 0:c.response)==null?void 0:u.statusCode)!==404)throw g}await Zt.maybeExecuteWorkspaceLifecycleScript(i,"prepublish",{report:l}),await SA.prepareForPack(i,{report:l},async()=>{let g=await SA.genPackList(i);for(let y of g)l.reportInfo(null,y);let f=await SA.genPackStream(i,g),h=await ve.bufferStream(f),p=await Bh.getGitHead(i.cwd),m=await Bh.makePublishBody(i,h,{access:this.access,tag:this.tag,registry:o,gitHead:p});await zt.put(zt.getIdentUrl(n),m,{configuration:e,registry:o,ident:n,otp:this.otp,jsonResponse:!0})}),l.reportInfo($.UNNAMED,"Package archive published")})).exitCode()}};dE.paths=[["npm","publish"]],dE.usage=Re.Usage({category:"Npm-related commands",description:"publish the active workspace to the npm registry",details:'\n This command will pack the active workspace into a fresh archive and upload it to the npm registry.\n\n The package will by default be attached to the `latest` tag on the registry, but this behavior can be overriden by using the `--tag` option.\n\n Note that for legacy reasons scoped packages are by default published with an access set to `restricted` (aka "private packages"). This requires you to register for a paid npm plan. In case you simply wish to publish a public scoped package to the registry (for free), just add the `--access public` flag. This behavior can be enabled by default through the `npmPublishAccess` settings.\n ',examples:[["Publish the active workspace","yarn npm publish"]]});var Ige=dE;var wge=ge(ri());var CE=class extends Le{constructor(){super(...arguments);this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=W.String({required:!1})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n;if(typeof this.package!="undefined")n=P.parseIdent(this.package);else{if(!i)throw new ht(r.cwd,this.context.cwd);if(!i.manifest.name)throw new Pe(`Missing 'name' field in ${H.fromPortablePath(x.join(i.cwd,Pt.manifest))}`);n=i.manifest.name}let s=await mE(n,e),a={children:ve.sortMap(Object.entries(s),([l])=>l).map(([l,c])=>({value:Ae.tuple(Ae.Type.RESOLUTION,{descriptor:P.makeDescriptor(n,l),locator:P.makeLocator(n,c)})}))};return As.emitTree(a,{configuration:e,json:this.json,stdout:this.context.stdout})}};CE.paths=[["npm","tag","list"]],CE.usage=Re.Usage({category:"Npm-related commands",description:"list all dist-tags of a package",details:`
+ This command will list all tags of a package from the npm registry.
+
+ If the package is not specified, Yarn will default to the current workspace.
+ `,examples:[["List all tags of package `my-pkg`","yarn npm tag list my-pkg"]]});var yge=CE;async function mE(t,e){let r=`/-/package${zt.getIdentUrl(t)}/dist-tags`;return zt.get(r,{configuration:e,ident:t,jsonResponse:!0,customErrorMessage:zt.customPackageError})}var EE=class extends Le{constructor(){super(...arguments);this.package=W.String();this.tag=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);let n=P.parseDescriptor(this.package,!0),s=n.range;if(!wge.default.valid(s))throw new Pe(`The range ${Ae.pretty(e,n.range,Ae.Type.RANGE)} must be a valid semver version`);let o=br.getPublishRegistry(i.manifest,{configuration:e}),a=Ae.pretty(e,n,Ae.Type.IDENT),l=Ae.pretty(e,s,Ae.Type.RANGE),c=Ae.pretty(e,this.tag,Ae.Type.CODE);return(await Je.start({configuration:e,stdout:this.context.stdout},async g=>{let f=await mE(n,e);Object.prototype.hasOwnProperty.call(f,this.tag)&&f[this.tag]===s&&g.reportWarning($.UNNAMED,`Tag ${c} is already set to version ${l}`);let h=`/-/package${zt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await zt.put(h,s,{configuration:e,registry:o,ident:n,jsonRequest:!0,jsonResponse:!0}),g.reportInfo($.UNNAMED,`Tag ${c} added to version ${l} of package ${a}`)})).exitCode()}};EE.paths=[["npm","tag","add"]],EE.usage=Re.Usage({category:"Npm-related commands",description:"add a tag for a specific version of a package",details:`
+ This command will add a tag to the npm registry for a specific version of a package. If the tag already exists, it will be overwritten.
+ `,examples:[["Add a `beta` tag for version `2.3.4-beta.4` of package `my-pkg`","yarn npm tag add my-pkg@2.3.4-beta.4 beta"]]});var Bge=EE;var IE=class extends Le{constructor(){super(...arguments);this.package=W.String();this.tag=W.String()}async execute(){if(this.tag==="latest")throw new Pe("The 'latest' tag cannot be removed.");let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);let n=P.parseIdent(this.package),s=br.getPublishRegistry(i.manifest,{configuration:e}),o=Ae.pretty(e,this.tag,Ae.Type.CODE),a=Ae.pretty(e,n,Ae.Type.IDENT),l=await mE(n,e);if(!Object.prototype.hasOwnProperty.call(l,this.tag))throw new Pe(`${o} is not a tag of package ${a}`);return(await Je.start({configuration:e,stdout:this.context.stdout},async u=>{let g=`/-/package${zt.getIdentUrl(n)}/dist-tags/${encodeURIComponent(this.tag)}`;await zt.del(g,{configuration:e,registry:s,ident:n,jsonResponse:!0}),u.reportInfo($.UNNAMED,`Tag ${o} removed from package ${a}`)})).exitCode()}};IE.paths=[["npm","tag","remove"]],IE.usage=Re.Usage({category:"Npm-related commands",description:"remove a tag from a package",details:`
+ This command will remove a tag from a package from the npm registry.
+ `,examples:[["Remove the `beta` tag from package `my-pkg`","yarn npm tag remove my-pkg beta"]]});var bge=IE;var yE=class extends Le{constructor(){super(...arguments);this.scope=W.String("-s,--scope",{description:"Print username for the registry configured for a given scope"});this.publish=W.Boolean("--publish",!1,{description:"Print username for the publish registry"})}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),r;return this.scope&&this.publish?r=br.getScopeRegistry(this.scope,{configuration:e,type:br.RegistryType.PUBLISH_REGISTRY}):this.scope?r=br.getScopeRegistry(this.scope,{configuration:e}):this.publish?r=br.getPublishRegistry((await zf(e,this.context.cwd)).manifest,{configuration:e}):r=br.getDefaultRegistry({configuration:e}),(await Je.start({configuration:e,stdout:this.context.stdout},async n=>{var o,a;let s;try{s=await zt.get("/-/whoami",{configuration:e,registry:r,authType:zt.AuthType.ALWAYS_AUTH,jsonResponse:!0,ident:this.scope?P.makeIdent(this.scope,""):void 0})}catch(l){if(((o=l.response)==null?void 0:o.statusCode)===401||((a=l.response)==null?void 0:a.statusCode)===403){n.reportError($.AUTHENTICATION_INVALID,"Authentication failed - your credentials may have expired");return}else throw l}n.reportInfo($.UNNAMED,s.username)})).exitCode()}};yE.paths=[["npm","whoami"]],yE.usage=Re.Usage({category:"Npm-related commands",description:"display the name of the authenticated user",details:"\n Print the username associated with the current authentication settings to the standard output.\n\n When using `-s,--scope`, the username printed will be the one that matches the authentication settings of the registry associated with the given scope (those settings can be overriden using the `npmRegistries` map, and the registry associated with the scope is configured via the `npmScopes` map).\n\n When using `--publish`, the registry we'll select will by default be the one used when publishing packages (`publishConfig.registry` or `npmPublishRegistry` if available, otherwise we'll fallback to the regular `npmRegistryServer`).\n ",examples:[["Print username for the default registry","yarn npm whoami"],["Print username for the registry on a given scope","yarn npm whoami --scope company"]]});var Qge=yE;var s9e={configuration:{npmPublishAccess:{description:"Default access of the published packages",type:ye.STRING,default:null}},commands:[hge,pge,Cge,Ege,Ige,Bge,yge,bge,Qge]},o9e=s9e;var QO={};ft(QO,{default:()=>w9e,patchUtils:()=>mO});var mO={};ft(mO,{applyPatchFile:()=>zb,diffFolders:()=>wO,extractPackageToDisk:()=>yO,extractPatchFlags:()=>Fge,isParentRequired:()=>IO,loadPatchFiles:()=>QE,makeDescriptor:()=>E9e,makeLocator:()=>EO,parseDescriptor:()=>BE,parseLocator:()=>bE,parsePatchFile:()=>Wb});var wE=class extends Error{constructor(e,r){super(`Cannot apply hunk #${e+1}`);this.hunk=r}};var a9e=/^@@ -(\d+)(,(\d+))? \+(\d+)(,(\d+))? @@.*/;function Qh(t){return x.relative(Ke.root,x.resolve(Ke.root,H.toPortablePath(t)))}function A9e(t){let e=t.trim().match(a9e);if(!e)throw new Error(`Bad header line: '${t}'`);return{original:{start:Math.max(Number(e[1]),1),length:Number(e[3]||1)},patched:{start:Math.max(Number(e[4]),1),length:Number(e[6]||1)}}}var l9e=420,c9e=493,Zr;(function(i){i.Context="context",i.Insertion="insertion",i.Deletion="deletion"})(Zr||(Zr={}));var vge=()=>({semverExclusivity:null,diffLineFromPath:null,diffLineToPath:null,oldMode:null,newMode:null,deletedFileMode:null,newFileMode:null,renameFrom:null,renameTo:null,beforeHash:null,afterHash:null,fromPath:null,toPath:null,hunks:null}),u9e=t=>({header:A9e(t),parts:[]}),g9e={["@"]:"header",["-"]:Zr.Deletion,["+"]:Zr.Insertion,[" "]:Zr.Context,["\\"]:"pragma",undefined:Zr.Context};function h9e(t){let e=[],r=vge(),i="parsing header",n=null,s=null;function o(){n&&(s&&(n.parts.push(s),s=null),r.hunks.push(n),n=null)}function a(){o(),e.push(r),r=vge()}for(let l=0;l0?"patch":"mode change",S=null;switch(b){case"rename":{if(!u||!g)throw new Error("Bad parser state: rename from & to not given");e.push({type:"rename",semverExclusivity:i,fromPath:Qh(u),toPath:Qh(g)}),S=g}break;case"file deletion":{let k=n||p;if(!k)throw new Error("Bad parse state: no path given for file deletion");e.push({type:"file deletion",semverExclusivity:i,hunk:y&&y[0]||null,path:Qh(k),mode:Jb(l),hash:f})}break;case"file creation":{let k=s||m;if(!k)throw new Error("Bad parse state: no path given for file creation");e.push({type:"file creation",semverExclusivity:i,hunk:y&&y[0]||null,path:Qh(k),mode:Jb(c),hash:h})}break;case"patch":case"mode change":S=m||s;break;default:ve.assertNever(b);break}S&&o&&a&&o!==a&&e.push({type:"mode change",semverExclusivity:i,path:Qh(S),oldMode:Jb(o),newMode:Jb(a)}),S&&y&&y.length&&e.push({type:"patch",semverExclusivity:i,path:Qh(S),hunks:y,beforeHash:f,afterHash:h})}if(e.length===0)throw new Error("Unable to parse patch file: No changes found. Make sure the patch is a valid UTF8 encoded string");return e}function Jb(t){let e=parseInt(t,8)&511;if(e!==l9e&&e!==c9e)throw new Error(`Unexpected file mode string: ${t}`);return e}function Wb(t){let e=t.split(/\n/g);return e[e.length-1]===""&&e.pop(),p9e(h9e(e))}function f9e(t){let e=0,r=0;for(let{type:i,lines:n}of t.parts)switch(i){case Zr.Context:r+=n.length,e+=n.length;break;case Zr.Deletion:e+=n.length;break;case Zr.Insertion:r+=n.length;break;default:ve.assertNever(i);break}if(e!==t.header.original.length||r!==t.header.patched.length){let i=n=>n<0?n:`+${n}`;throw new Error(`hunk header integrity check failed (expected @@ ${i(t.header.original.length)} ${i(t.header.patched.length)} @@, got @@ ${i(e)} ${i(r)} @@)`)}}async function vh(t,e,r){let i=await t.lstatPromise(e),n=await r();if(typeof n!="undefined"&&(e=n),t.lutimesPromise)await t.lutimesPromise(e,i.atime,i.mtime);else if(!i.isSymbolicLink())await t.utimesPromise(e,i.atime,i.mtime);else throw new Error("Cannot preserve the time values of a symlink")}async function zb(t,{baseFs:e=new ar,dryRun:r=!1,version:i=null}={}){for(let n of t)if(!(n.semverExclusivity!==null&&i!==null&&!Wt.satisfiesWithPrereleases(i,n.semverExclusivity)))switch(n.type){case"file deletion":if(r){if(!e.existsSync(n.path))throw new Error(`Trying to delete a file that doesn't exist: ${n.path}`)}else await vh(e,x.dirname(n.path),async()=>{await e.unlinkPromise(n.path)});break;case"rename":if(r){if(!e.existsSync(n.fromPath))throw new Error(`Trying to move a file that doesn't exist: ${n.fromPath}`)}else await vh(e,x.dirname(n.fromPath),async()=>{await vh(e,x.dirname(n.toPath),async()=>{await vh(e,n.fromPath,async()=>(await e.movePromise(n.fromPath,n.toPath),n.toPath))})});break;case"file creation":if(r){if(e.existsSync(n.path))throw new Error(`Trying to create a file that already exists: ${n.path}`)}else{let s=n.hunk?n.hunk.parts[0].lines.join(`
+`)+(n.hunk.parts[0].noNewlineAtEndOfFile?"":`
+`):"";await e.mkdirpPromise(x.dirname(n.path),{chmod:493,utimes:[Dr.SAFE_TIME,Dr.SAFE_TIME]}),await e.writeFilePromise(n.path,s,{mode:n.mode}),await e.utimesPromise(n.path,Dr.SAFE_TIME,Dr.SAFE_TIME)}break;case"patch":await vh(e,n.path,async()=>{await d9e(n,{baseFs:e,dryRun:r})});break;case"mode change":{let o=(await e.statPromise(n.path)).mode;if(Sge(n.newMode)!==Sge(o))continue;await vh(e,n.path,async()=>{await e.chmodPromise(n.path,n.newMode)})}break;default:ve.assertNever(n);break}}function Sge(t){return(t&64)>0}function kge(t){return t.replace(/\s+$/,"")}function C9e(t,e){return kge(t)===kge(e)}async function d9e({hunks:t,path:e},{baseFs:r,dryRun:i=!1}){let n=await r.statSync(e).mode,o=(await r.readFileSync(e,"utf8")).split(/\n/),a=[],l=0,c=0;for(let g of t){let f=Math.max(c,g.header.patched.start+l),h=Math.max(0,f-c),p=Math.max(0,o.length-f-g.header.original.length),m=Math.max(h,p),y=0,b=0,S=null;for(;y<=m;){if(y<=h&&(b=f-y,S=xge(g,o,b),S!==null)){y=-y;break}if(y<=p&&(b=f+y,S=xge(g,o,b),S!==null))break;y+=1}if(S===null)throw new wE(t.indexOf(g),g);a.push(S),l+=y,c=b+g.header.original.length}if(i)return;let u=0;for(let g of a)for(let f of g)switch(f.type){case"splice":{let h=f.index+u;o.splice(h,f.numToDelete,...f.linesToInsert),u+=f.linesToInsert.length-f.numToDelete}break;case"pop":o.pop();break;case"push":o.push(f.line);break;default:ve.assertNever(f);break}await r.writeFilePromise(e,o.join(`
+`),{mode:n})}function xge(t,e,r){let i=[];for(let n of t.parts)switch(n.type){case Zr.Context:case Zr.Deletion:{for(let s of n.lines){let o=e[r];if(o==null||!C9e(o,s))return null;r+=1}n.type===Zr.Deletion&&(i.push({type:"splice",index:r-n.lines.length,numToDelete:n.lines.length,linesToInsert:[]}),n.noNewlineAtEndOfFile&&i.push({type:"push",line:""}))}break;case Zr.Insertion:i.push({type:"splice",index:r,numToDelete:0,linesToInsert:n.lines}),n.noNewlineAtEndOfFile&&i.push({type:"pop"});break;default:ve.assertNever(n.type);break}return i}var m9e=/^builtin<([^>]+)>$/;function Pge(t,e){let{source:r,selector:i,params:n}=P.parseRange(t);if(r===null)throw new Error("Patch locators must explicitly define their source");let s=i?i.split(/&/).map(c=>H.toPortablePath(c)):[],o=n&&typeof n.locator=="string"?P.parseLocator(n.locator):null,a=n&&typeof n.version=="string"?n.version:null,l=e(r);return{parentLocator:o,sourceItem:l,patchPaths:s,sourceVersion:a}}function BE(t){let i=Pge(t.range,P.parseDescriptor),{sourceItem:e}=i,r=Tr(i,["sourceItem"]);return ie(N({},r),{sourceDescriptor:e})}function bE(t){let i=Pge(t.reference,P.parseLocator),{sourceItem:e}=i,r=Tr(i,["sourceItem"]);return ie(N({},r),{sourceLocator:e})}function Dge({parentLocator:t,sourceItem:e,patchPaths:r,sourceVersion:i,patchHash:n},s){let o=t!==null?{locator:P.stringifyLocator(t)}:{},a=typeof i!="undefined"?{version:i}:{},l=typeof n!="undefined"?{hash:n}:{};return P.makeRange({protocol:"patch:",source:s(e),selector:r.join("&"),params:N(N(N({},a),l),o)})}function E9e(t,{parentLocator:e,sourceDescriptor:r,patchPaths:i}){return P.makeLocator(t,Dge({parentLocator:e,sourceItem:r,patchPaths:i},P.stringifyDescriptor))}function EO(t,{parentLocator:e,sourcePackage:r,patchPaths:i,patchHash:n}){return P.makeLocator(t,Dge({parentLocator:e,sourceItem:r,sourceVersion:r.version,patchPaths:i,patchHash:n},P.stringifyLocator))}function Rge({onAbsolute:t,onRelative:e,onBuiltin:r},i){i.startsWith("~")&&(i=i.slice(1));let s=i.match(m9e);return s!==null?r(s[1]):x.isAbsolute(i)?t(i):e(i)}function Fge(t){let e=t.startsWith("~");return e&&(t=t.slice(1)),{optional:e}}function IO(t){return Rge({onAbsolute:()=>!1,onRelative:()=>!0,onBuiltin:()=>!1},t)}async function QE(t,e,r){let i=t!==null?await r.fetcher.fetch(t,r):null,n=i&&i.localPath?{packageFs:new _t(Ke.root),prefixPath:x.relative(Ke.root,i.localPath)}:i;i&&i!==n&&i.releaseFs&&i.releaseFs();let s=await ve.releaseAfterUseAsync(async()=>await Promise.all(e.map(async o=>{let a=Fge(o),l=await Rge({onAbsolute:async()=>await K.readFilePromise(o,"utf8"),onRelative:async()=>{if(n===null)throw new Error("Assertion failed: The parent locator should have been fetched");return await n.packageFs.readFilePromise(x.join(n.prefixPath,o),"utf8")},onBuiltin:async c=>await r.project.configuration.firstHook(u=>u.getBuiltinPatch,r.project,c)},o);return ie(N({},a),{source:l})})));for(let o of s)typeof o.source=="string"&&(o.source=o.source.replace(/\r\n?/g,`
+`));return s}async function yO(t,{cache:e,project:r}){let i=r.storedPackages.get(t.locatorHash);if(typeof i=="undefined")throw new Error("Assertion failed: Expected the package to be registered");let n=r.storedChecksums,s=new pi,o=r.configuration.makeFetcher(),a=await o.fetch(t,{cache:e,project:r,fetcher:o,checksums:n,report:s}),l=await K.mktempPromise(),c=x.join(l,"source"),u=x.join(l,"user"),g=x.join(l,".yarn-patch.json");return await Promise.all([K.copyPromise(c,a.prefixPath,{baseFs:a.packageFs}),K.copyPromise(u,a.prefixPath,{baseFs:a.packageFs}),K.writeJsonPromise(g,{locator:P.stringifyLocator(t),version:i.version})]),K.detachTemp(l),u}async function wO(t,e){let r=H.fromPortablePath(t).replace(/\\/g,"/"),i=H.fromPortablePath(e).replace(/\\/g,"/"),{stdout:n,stderr:s}=await Fr.execvp("git",["-c","core.safecrlf=false","diff","--src-prefix=a/","--dst-prefix=b/","--ignore-cr-at-eol","--full-index","--no-index","--text",r,i],{cwd:H.toPortablePath(process.cwd()),env:ie(N({},process.env),{GIT_CONFIG_NOSYSTEM:"1",HOME:"",XDG_CONFIG_HOME:"",USERPROFILE:""})});if(s.length>0)throw new Error(`Unable to diff directories. Make sure you have a recent version of 'git' available in PATH.
+The following error was reported by 'git':
+${s}`);let o=r.startsWith("/")?a=>a.slice(1):a=>a;return n.replace(new RegExp(`(a|b)(${ve.escapeRegExp(`/${o(r)}/`)})`,"g"),"$1/").replace(new RegExp(`(a|b)${ve.escapeRegExp(`/${o(i)}/`)}`,"g"),"$1/").replace(new RegExp(ve.escapeRegExp(`${r}/`),"g"),"").replace(new RegExp(ve.escapeRegExp(`${i}/`),"g"),"")}function Nge(t,{configuration:e,report:r}){for(let i of t.parts)for(let n of i.lines)switch(i.type){case Zr.Context:r.reportInfo(null,` ${Ae.pretty(e,n,"grey")}`);break;case Zr.Deletion:r.reportError($.FROZEN_LOCKFILE_EXCEPTION,`- ${Ae.pretty(e,n,Ae.Type.REMOVED)}`);break;case Zr.Insertion:r.reportError($.FROZEN_LOCKFILE_EXCEPTION,`+ ${Ae.pretty(e,n,Ae.Type.ADDED)}`);break;default:ve.assertNever(i.type)}}var BO=class{supports(e,r){return!!e.reference.startsWith("patch:")}getLocalPath(e,r){return null}async fetch(e,r){let i=r.checksums.get(e.locatorHash)||null,[n,s,o]=await r.cache.fetchPackageFromCache(e,i,N({onHit:()=>r.report.reportCacheHit(e),onMiss:()=>r.report.reportCacheMiss(e,`${P.prettyLocator(r.project.configuration,e)} can't be found in the cache and will be fetched from the disk`),loader:()=>this.patchPackage(e,r),skipIntegrityCheck:r.skipIntegrityCheck},r.cacheOptions));return{packageFs:n,releaseFs:s,prefixPath:P.getIdentVendorPath(e),localPath:this.getLocalPath(e,r),checksum:o}}async patchPackage(e,r){let{parentLocator:i,sourceLocator:n,sourceVersion:s,patchPaths:o}=bE(e),a=await QE(i,o,r),l=await K.mktempPromise(),c=x.join(l,"current.zip"),u=await r.fetcher.fetch(n,r),g=P.getIdentVendorPath(e),f=await fn(),h=new Ai(c,{libzip:f,create:!0,level:r.project.configuration.get("compressionLevel")});await ve.releaseAfterUseAsync(async()=>{await h.copyPromise(g,u.prefixPath,{baseFs:u.packageFs,stableSort:!0})},u.releaseFs),h.saveAndClose();for(let{source:p,optional:m}of a){if(p===null)continue;let y=new Ai(c,{libzip:f,level:r.project.configuration.get("compressionLevel")}),b=new _t(x.resolve(Ke.root,g),{baseFs:y});try{await zb(Wb(p),{baseFs:b,version:s})}catch(S){if(!(S instanceof wE))throw S;let k=r.project.configuration.get("enableInlineHunks"),T=!k&&!m?" (set enableInlineHunks for details)":"",Y=`${P.prettyLocator(r.project.configuration,e)}: ${S.message}${T}`,j=Z=>{!k||Nge(S.hunk,{configuration:r.project.configuration,report:Z})};if(y.discardAndClose(),m){r.report.reportWarningOnce($.PATCH_HUNK_FAILED,Y,{reportExtra:j});continue}else throw new ct($.PATCH_HUNK_FAILED,Y,j)}y.saveAndClose()}return new Ai(c,{libzip:f,level:r.project.configuration.get("compressionLevel")})}};var I9e=3,bO=class{supportsDescriptor(e,r){return!!e.range.startsWith("patch:")}supportsLocator(e,r){return!!e.reference.startsWith("patch:")}shouldPersistResolution(e,r){return!1}bindDescriptor(e,r,i){let{patchPaths:n}=BE(e);return n.every(s=>!IO(s))?e:P.bindDescriptor(e,{locator:P.stringifyLocator(r)})}getResolutionDependencies(e,r){let{sourceDescriptor:i}=BE(e);return[i]}async getCandidates(e,r,i){if(!i.fetchOptions)throw new Error("Assertion failed: This resolver cannot be used unless a fetcher is configured");let{parentLocator:n,sourceDescriptor:s,patchPaths:o}=BE(e),a=await QE(n,o,i.fetchOptions),l=r.get(s.descriptorHash);if(typeof l=="undefined")throw new Error("Assertion failed: The dependency should have been resolved");let c=Dn.makeHash(`${I9e}`,...a.map(u=>JSON.stringify(u))).slice(0,6);return[EO(e,{parentLocator:n,sourcePackage:l,patchPaths:o,patchHash:c})]}async getSatisfying(e,r,i){return null}async resolve(e,r){let{sourceLocator:i}=bE(e),n=await r.resolver.resolve(i,r);return N(N({},n),e)}};var vE=class extends Le{constructor(){super(...arguments);this.save=W.Boolean("-s,--save",!1,{description:"Add the patch to your resolution entries"});this.patchFolder=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState();let n=x.resolve(this.context.cwd,H.toPortablePath(this.patchFolder)),s=x.join(n,"../source"),o=x.join(n,"../.yarn-patch.json");if(!K.existsSync(s))throw new Pe("The argument folder didn't get created by 'yarn patch'");let a=await wO(s,n),l=await K.readJsonPromise(o),c=P.parseLocator(l.locator,!0);if(!r.storedPackages.has(c.locatorHash))throw new Pe("No package found in the project for the given locator");if(!this.save){this.context.stdout.write(a);return}let u=e.get("patchFolder"),g=x.join(u,`${P.slugifyLocator(c)}.patch`);await K.mkdirPromise(u,{recursive:!0}),await K.writeFilePromise(g,a);let f=x.relative(r.cwd,g);r.topLevelWorkspace.manifest.resolutions.push({pattern:{descriptor:{fullName:P.stringifyIdent(c),description:l.version}},reference:`patch:${P.stringifyLocator(c)}#${f}`}),await r.persist()}};vE.paths=[["patch-commit"]],vE.usage=Re.Usage({description:"generate a patch out of a directory",details:"\n By default, this will print a patchfile on stdout based on the diff between the folder passed in and the original version of the package. Such file is suitable for consumption with the `patch:` protocol.\n\n With the `-s,--save` option set, the patchfile won't be printed on stdout anymore and will instead be stored within a local file (by default kept within `.yarn/patches`, but configurable via the `patchFolder` setting). A `resolutions` entry will also be added to your top-level manifest, referencing the patched package via the `patch:` protocol.\n\n Note that only folders generated by `yarn patch` are accepted as valid input for `yarn patch-commit`.\n "});var Lge=vE;var SE=class extends Le{constructor(){super(...arguments);this.json=W.Boolean("--json",!1,{description:"Format the output as an NDJSON stream"});this.package=W.String()}async execute(){let e=await we.find(this.context.cwd,this.context.plugins),{project:r,workspace:i}=await ze.find(e,this.context.cwd),n=await Nt.find(e);if(!i)throw new ht(r.cwd,this.context.cwd);await r.restoreInstallState();let s=P.parseLocator(this.package);if(s.reference==="unknown"){let o=ve.mapAndFilter([...r.storedPackages.values()],a=>a.identHash!==s.identHash?ve.mapAndFilter.skip:P.isVirtualLocator(a)?ve.mapAndFilter.skip:a);if(o.length===0)throw new Pe("No package found in the project for the given locator");if(o.length>1)throw new Pe(`Multiple candidate packages found; explicitly choose one of them (use \`yarn why \` to get more information as to who depends on them):
+${o.map(a=>`
+- ${P.prettyLocator(e,a)}`).join("")}`);s=o[0]}if(!r.storedPackages.has(s.locatorHash))throw new Pe("No package found in the project for the given locator");await Je.start({configuration:e,json:this.json,stdout:this.context.stdout},async o=>{let a=await yO(s,{cache:n,project:r});o.reportJson({locator:P.stringifyLocator(s),path:H.fromPortablePath(a)}),o.reportInfo($.UNNAMED,`Package ${P.prettyLocator(e,s)} got extracted with success!`),o.reportInfo($.UNNAMED,`You can now edit the following folder: ${Ae.pretty(e,H.fromPortablePath(a),"magenta")}`),o.reportInfo($.UNNAMED,`Once you are done run ${Ae.pretty(e,`yarn patch-commit -s ${process.platform==="win32"?'"':""}${H.fromPortablePath(a)}${process.platform==="win32"?'"':""}`,"cyan")} and Yarn will store a patchfile based on your changes.`)})}};SE.paths=[["patch"]],SE.usage=Re.Usage({description:"prepare a package for patching",details:"\n This command will cause a package to be extracted in a temporary directory intended to be editable at will.\n \n Once you're done with your changes, run `yarn patch-commit -s ` (with `` being the temporary directory you received) to generate a patchfile and register it into your top-level manifest via the `patch:` protocol. Run `yarn patch-commit -h` for more details.\n "});var Tge=SE;var y9e={configuration:{enableInlineHunks:{description:"If true, the installs will print unmatched patch hunks",type:ye.BOOLEAN,default:!1},patchFolder:{description:"Folder where the patch files must be written",type:ye.ABSOLUTE_PATH,default:"./.yarn/patches"}},commands:[Lge,Tge],fetchers:[BO],resolvers:[bO]},w9e=y9e;var xO={};ft(xO,{default:()=>Q9e});var vO=class{supportsPackage(e,r){return this.isEnabled(r)}async findPackageLocation(e,r){if(!this.isEnabled(r))throw new Error("Assertion failed: Expected the pnpm linker to be enabled");let i=SO(),n=r.project.installersCustomData.get(i);if(!n)throw new Pe(`The project in ${Ae.pretty(r.project.configuration,`${r.project.cwd}/package.json`,Ae.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=n.pathByLocator.get(e.locatorHash);if(typeof s=="undefined")throw new Pe(`Couldn't find ${P.prettyLocator(r.project.configuration,e)} in the currently installed pnpm map - running an install might help`);return s}async findPackageLocator(e,r){if(!this.isEnabled(r))return null;let i=SO(),n=r.project.installersCustomData.get(i);if(!n)throw new Pe(`The project in ${Ae.pretty(r.project.configuration,`${r.project.cwd}/package.json`,Ae.Type.PATH)} doesn't seem to have been installed - running an install there might help`);let s=e.match(/(^.*\/node_modules\/(@[^/]*\/)?[^/]+)(\/.*$)/);if(s){let l=n.locatorByPath.get(s[1]);if(l)return l}let o=e,a=e;do{a=o,o=x.dirname(a);let l=n.locatorByPath.get(a);if(l)return l}while(o!==a);return null}makeInstaller(e){return new Oge(e)}isEnabled(e){return e.project.configuration.get("nodeLinker")==="pnpm"}},Oge=class{constructor(e){this.opts=e;this.asyncActions=new ve.AsyncActions(10);this.customData={pathByLocator:new Map,locatorByPath:new Map}}getCustomDataKey(){return SO()}attachCustomData(e){}async installPackage(e,r,i){switch(e.linkType){case Qt.SOFT:return this.installPackageSoft(e,r,i);case Qt.HARD:return this.installPackageHard(e,r,i)}throw new Error("Assertion failed: Unsupported package link type")}async installPackageSoft(e,r,i){let n=x.resolve(r.packageFs.getRealPath(),r.prefixPath);return this.customData.pathByLocator.set(e.locatorHash,n),{packageLocation:n,buildDirective:null}}async installPackageHard(e,r,i){var u;let n=B9e(e,{project:this.opts.project});this.customData.locatorByPath.set(n,P.stringifyLocator(e)),this.customData.pathByLocator.set(e.locatorHash,n),i.holdFetchResult(this.asyncActions.set(e.locatorHash,async()=>{await K.mkdirPromise(n,{recursive:!0}),await K.copyPromise(n,r.prefixPath,{baseFs:r.packageFs,overwrite:!1})}));let o=P.isVirtualLocator(e)?P.devirtualizeLocator(e):e,a={manifest:(u=await At.tryFind(r.prefixPath,{baseFs:r.packageFs}))!=null?u:new At,misc:{hasBindingGyp:ha.hasBindingGyp(r)}},l=this.opts.project.getDependencyMeta(o,e.version),c=ha.extractBuildScripts(e,a,l,{configuration:this.opts.project.configuration,report:this.opts.report});return{packageLocation:n,buildDirective:c}}async attachInternalDependencies(e,r){this.opts.project.configuration.get("nodeLinker")==="pnpm"&&(!Uge(e,{project:this.opts.project})||this.asyncActions.reduce(e.locatorHash,async i=>{await i;let n=this.customData.pathByLocator.get(e.locatorHash);if(typeof n=="undefined")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(e)})`);let s=x.join(n,Pt.nodeModules),o=[],a=await Hge(s);for(let[l,c]of r){let u=c;Uge(c,{project:this.opts.project})||(this.opts.report.reportWarning($.UNNAMED,"The pnpm linker doesn't support providing different versions to workspaces' peer dependencies"),u=P.devirtualizeLocator(c));let g=this.customData.pathByLocator.get(u.locatorHash);if(typeof g=="undefined")throw new Error(`Assertion failed: Expected the package to have been registered (${P.stringifyLocator(c)})`);let f=P.stringifyIdent(l),h=x.join(s,f),p=x.relative(x.dirname(h),g),m=a.get(f);a.delete(f),o.push(Promise.resolve().then(async()=>{if(m){if(m.isSymbolicLink()&&await K.readlinkPromise(h)===p)return;await K.removePromise(h)}await K.mkdirpPromise(x.dirname(h)),process.platform=="win32"?await K.symlinkPromise(g,h,"junction"):await K.symlinkPromise(p,h)}))}o.push(Gge(s,a)),await Promise.all(o)}))}async attachExternalDependents(e,r){throw new Error("External dependencies haven't been implemented for the pnpm linker")}async finalizeInstall(){let e=Kge(this.opts.project);if(this.opts.project.configuration.get("nodeLinker")!=="pnpm")await K.removePromise(e);else{let r=[],i=new Set;for(let s of this.customData.pathByLocator.values()){let o=x.contains(e,s);if(o!==null){let[a,,...l]=o.split(x.sep);i.add(a);let c=x.join(e,a);r.push(K.readdirPromise(c).then(u=>Promise.all(u.map(async g=>{let f=x.join(c,g);if(g===Pt.nodeModules){let h=await Hge(f);return h.delete(l.join(x.sep)),Gge(f,h)}else return K.removePromise(f)}))).catch(u=>{if(u.code!=="ENOENT")throw u}))}}let n;try{n=await K.readdirPromise(e)}catch{n=[]}for(let s of n)i.has(s)||r.push(K.removePromise(x.join(e,s)));await Promise.all(r)}return await this.asyncActions.wait(),await kO(e),this.opts.project.configuration.get("nodeLinker")!=="node-modules"&&await kO(Mge(this.opts.project)),{customData:this.customData}}};function SO(){return JSON.stringify({name:"PnpmInstaller",version:2})}function Mge(t){return x.join(t.cwd,Pt.nodeModules)}function Kge(t){return x.join(Mge(t),".store")}function B9e(t,{project:e}){let r=P.slugifyLocator(t),i=P.getIdentVendorPath(t);return x.join(Kge(e),r,i)}function Uge(t,{project:e}){return!P.isVirtualLocator(t)||!e.tryWorkspaceByLocator(t)}async function Hge(t){let e=new Map,r=[];try{r=await K.readdirPromise(t,{withFileTypes:!0})}catch(i){if(i.code!=="ENOENT")throw i}try{for(let i of r)if(!i.name.startsWith("."))if(i.name.startsWith("@")){let n=await K.readdirPromise(x.join(t,i.name),{withFileTypes:!0});if(n.length===0)e.set(i.name,i);else for(let s of n)e.set(`${i.name}/${s.name}`,s)}else e.set(i.name,i)}catch(i){if(i.code!=="ENOENT")throw i}return e}async function Gge(t,e){var n;let r=[],i=new Set;for(let s of e.keys()){r.push(K.removePromise(x.join(t,s)));let o=(n=P.tryParseIdent(s))==null?void 0:n.scope;o&&i.add(`@${o}`)}return Promise.all(r).then(()=>Promise.all([...i].map(s=>kO(x.join(t,s)))))}async function kO(t){try{await K.rmdirPromise(t)}catch(e){if(e.code!=="ENOENT"&&e.code!=="ENOTEMPTY")throw e}}var b9e={linkers:[vO]},Q9e=b9e;var W0=()=>({modules:new Map([["@yarnpkg/cli",VC],["@yarnpkg/core",vC],["@yarnpkg/fslib",$h],["@yarnpkg/libzip",Kd],["@yarnpkg/parsers",ap],["@yarnpkg/shell",Hd],["clipanion",u$(mp)],["semver",v9e],["typanion",ag],["yup",S9e],["@yarnpkg/plugin-essentials",uL],["@yarnpkg/plugin-compat",pL],["@yarnpkg/plugin-dlx",dL],["@yarnpkg/plugin-file",QL],["@yarnpkg/plugin-git",cL],["@yarnpkg/plugin-github",SL],["@yarnpkg/plugin-http",PL],["@yarnpkg/plugin-init",NL],["@yarnpkg/plugin-link",KL],["@yarnpkg/plugin-nm",fT],["@yarnpkg/plugin-npm",gO],["@yarnpkg/plugin-npm-cli",CO],["@yarnpkg/plugin-pack",AO],["@yarnpkg/plugin-patch",QO],["@yarnpkg/plugin-pnp",rT],["@yarnpkg/plugin-pnpm",xO]]),plugins:new Set(["@yarnpkg/plugin-essentials","@yarnpkg/plugin-compat","@yarnpkg/plugin-dlx","@yarnpkg/plugin-file","@yarnpkg/plugin-git","@yarnpkg/plugin-github","@yarnpkg/plugin-http","@yarnpkg/plugin-init","@yarnpkg/plugin-link","@yarnpkg/plugin-nm","@yarnpkg/plugin-npm","@yarnpkg/plugin-npm-cli","@yarnpkg/plugin-pack","@yarnpkg/plugin-patch","@yarnpkg/plugin-pnp","@yarnpkg/plugin-pnpm"])});C0({binaryVersion:Kr||"",pluginConfiguration:W0()});})();
+/*!
+ * buildToken
+ * Builds OAuth token prefix (helper function)
+ *
+ * @name buildToken
+ * @function
+ * @param {GitUrl} obj The parsed Git url object.
+ * @return {String} token prefix
+ */
+/*!
+ * fill-range
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+/*!
+ * is-extglob
+ *
+ * Copyright (c) 2014-2016, Jon Schlinkert.
+ * Licensed under the MIT License.
+ */
+/*!
+ * is-glob
+ *
+ * Copyright (c) 2014-2017, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+/*!
+ * is-number
+ *
+ * Copyright (c) 2014-present, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+/*!
+ * is-windows
+ *
+ * Copyright © 2015-2018, Jon Schlinkert.
+ * Released under the MIT License.
+ */
+/*!
+ * to-regex-range
+ *
+ * Copyright (c) 2015-present, Jon Schlinkert.
+ * Released under the MIT License.
+ */
diff --git a/docs/.yarnrc.yml b/docs/.yarnrc.yml
index 0dc69bae5b..9a4086b1b6 100644
--- a/docs/.yarnrc.yml
+++ b/docs/.yarnrc.yml
@@ -1 +1 @@
-yarnPath: .yarn/releases/yarn-1.23.0-20210103.1434.cjs
+yarnPath: .yarn/releases/yarn-3.2.1.cjs
diff --git a/docs/assets/nuxt.css b/docs/assets/nuxt.css
deleted file mode 100644
index 26cbe0958d..0000000000
--- a/docs/assets/nuxt.css
+++ /dev/null
@@ -1,30 +0,0 @@
-:root {
- --header-height: theme('spacing.14');
- --docs-scroll-margin-block: calc(var(--header-height) + 4rem);
- --blogpost-scroll-margin-block: calc(var(--header-height));
-}
-
-@screen md {
- :root {
- --header-height: theme('spacing.18');
- --blogpost-scroll-margin-block: calc(var(--header-height) - 0.5rem);
- }
-}
-
-@screen xl {
- :root {
- --docs-scroll-margin-block: calc(var(--header-height) + 1rem);
- }
-}
-
-button:focus-visible, div:focus-visible, a:focus-visible {
- /* remove default focus style */
- outline: none;
- /* custom focus style */
- border-radius: 2px;
- box-shadow: 0 0 0 2px #00DC82;
-}
-
-h1 > code, h2 > code, h3 > code, h4 > code, h5 > code, h6 > code {
- font-size: inherit !important;
-}
diff --git a/docs/components/app/AlgoliaSearchBox.vue b/docs/components/app/AlgoliaSearchBox.vue
deleted file mode 100644
index f5be19fb46..0000000000
--- a/docs/components/app/AlgoliaSearchBox.vue
+++ /dev/null
@@ -1,194 +0,0 @@
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/app/AppAside.vue b/docs/components/app/AppAside.vue
deleted file mode 100644
index 9e080164bc..0000000000
--- a/docs/components/app/AppAside.vue
+++ /dev/null
@@ -1,118 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/app/AppFooter.vue b/docs/components/app/AppFooter.vue
deleted file mode 100644
index ae3b6a8f73..0000000000
--- a/docs/components/app/AppFooter.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/app/AppHeader.vue b/docs/components/app/AppHeader.vue
deleted file mode 100644
index 5a0ee220af..0000000000
--- a/docs/components/app/AppHeader.vue
+++ /dev/null
@@ -1,61 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/app/AppLayout.vue b/docs/components/app/AppLayout.vue
deleted file mode 100644
index 18b862f46e..0000000000
--- a/docs/components/app/AppLayout.vue
+++ /dev/null
@@ -1,44 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/app/AsideHeaderNavigation.vue b/docs/components/app/AsideHeaderNavigation.vue
deleted file mode 100644
index cdc407f31e..0000000000
--- a/docs/components/app/AsideHeaderNavigation.vue
+++ /dev/null
@@ -1,71 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/app/AsideNavigation.vue b/docs/components/app/AsideNavigation.vue
deleted file mode 100644
index 23ffc611ab..0000000000
--- a/docs/components/app/AsideNavigation.vue
+++ /dev/null
@@ -1,101 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/atoms/Alert.vue b/docs/components/atoms/Alert.vue
deleted file mode 100644
index d70fee5df0..0000000000
--- a/docs/components/atoms/Alert.vue
+++ /dev/null
@@ -1,121 +0,0 @@
-
-
-
-
- {{ icon }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/atoms/ButtonLink.vue b/docs/components/atoms/ButtonLink.vue
deleted file mode 100644
index 2ae5d8f816..0000000000
--- a/docs/components/atoms/ButtonLink.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/atoms/EditOnGithub.vue b/docs/components/atoms/EditOnGithub.vue
deleted file mode 100644
index 499d30a20c..0000000000
--- a/docs/components/atoms/EditOnGithub.vue
+++ /dev/null
@@ -1,74 +0,0 @@
-
-
-
-
-
- {{ $t('article.github') }}
-
-
-
-
- {{ $t('article.updatedAt') }} {{ $d(Date.parse(page.mtime), 'long') }}
-
-
-
-
-
diff --git a/docs/components/atoms/Gem.vue b/docs/components/atoms/Gem.vue
deleted file mode 100644
index f55ec4b1a1..0000000000
--- a/docs/components/atoms/Gem.vue
+++ /dev/null
@@ -1,134 +0,0 @@
-
-
-
-
-
-
-
diff --git a/docs/components/atoms/GitHubButton.vue b/docs/components/atoms/GitHubButton.vue
deleted file mode 100644
index 758c07382d..0000000000
--- a/docs/components/atoms/GitHubButton.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/atoms/Headline.vue b/docs/components/atoms/Headline.vue
deleted file mode 100644
index 295a4ae0d7..0000000000
--- a/docs/components/atoms/Headline.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/atoms/LinkExample.vue b/docs/components/atoms/LinkExample.vue
deleted file mode 100644
index f1b9caddd8..0000000000
--- a/docs/components/atoms/LinkExample.vue
+++ /dev/null
@@ -1,28 +0,0 @@
-
-
- Read and edit a live example in .
-
-
-
-
diff --git a/docs/components/atoms/Logo.vue b/docs/components/atoms/Logo.vue
deleted file mode 100644
index 2f5dd27a2c..0000000000
--- a/docs/components/atoms/Logo.vue
+++ /dev/null
@@ -1,26 +0,0 @@
-
-
-
- RC
-
-
-
-
diff --git a/docs/components/atoms/NeedContribution.vue b/docs/components/atoms/NeedContribution.vue
deleted file mode 100644
index 2468444655..0000000000
--- a/docs/components/atoms/NeedContribution.vue
+++ /dev/null
@@ -1,11 +0,0 @@
-
-
- Documentation for this section is not yet complete. You can
-
- contribute to the documentation.
-
-
-
-
-
diff --git a/docs/components/atoms/NuxtContainer.vue b/docs/components/atoms/NuxtContainer.vue
deleted file mode 100644
index 58600dd5da..0000000000
--- a/docs/components/atoms/NuxtContainer.vue
+++ /dev/null
@@ -1,18 +0,0 @@
-
-
-
-
-
-
-
diff --git a/docs/components/atoms/ReadMore.vue b/docs/components/atoms/ReadMore.vue
deleted file mode 100644
index 0c1a8766d9..0000000000
--- a/docs/components/atoms/ReadMore.vue
+++ /dev/null
@@ -1,29 +0,0 @@
-
-
- Read more in .
-
-
-
-
diff --git a/docs/components/atoms/Sandbox.vue b/docs/components/atoms/Sandbox.vue
deleted file mode 100644
index 4186b04149..0000000000
--- a/docs/components/atoms/Sandbox.vue
+++ /dev/null
@@ -1,107 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
- Loading Sandbox...
-
-
-
-
-
-
diff --git a/docs/components/atoms/SectionButton.vue b/docs/components/atoms/SectionButton.vue
deleted file mode 100644
index b9ab20b1f5..0000000000
--- a/docs/components/atoms/SectionButton.vue
+++ /dev/null
@@ -1,84 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/atoms/StabilityEdge.vue b/docs/components/atoms/StabilityEdge.vue
deleted file mode 100644
index 4a7b73ba28..0000000000
--- a/docs/components/atoms/StabilityEdge.vue
+++ /dev/null
@@ -1,22 +0,0 @@
-
-
- {{ title }} is available on edge channel. Check out the
-
- Edge Channel Documentation
- to beta test.
-
-
-
-
-
diff --git a/docs/components/atoms/Star.vue b/docs/components/atoms/Star.vue
deleted file mode 100644
index 0628cb9a7a..0000000000
--- a/docs/components/atoms/Star.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
diff --git a/docs/components/atoms/TwitterButton.vue b/docs/components/atoms/TwitterButton.vue
deleted file mode 100644
index 6bb85a9305..0000000000
--- a/docs/components/atoms/TwitterButton.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/atoms/icons/IconArrowRight.vue b/docs/components/atoms/icons/IconArrowRight.vue
deleted file mode 100644
index a67983b4f0..0000000000
--- a/docs/components/atoms/icons/IconArrowRight.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconCAPI.vue b/docs/components/atoms/icons/IconCAPI.vue
deleted file mode 100644
index 747973e78c..0000000000
--- a/docs/components/atoms/icons/IconCAPI.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconCLI.vue b/docs/components/atoms/icons/IconCLI.vue
deleted file mode 100644
index f409de1626..0000000000
--- a/docs/components/atoms/icons/IconCLI.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconClose.vue b/docs/components/atoms/icons/IconClose.vue
deleted file mode 100644
index 513b9f1678..0000000000
--- a/docs/components/atoms/icons/IconClose.vue
+++ /dev/null
@@ -1,5 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconCloud.vue b/docs/components/atoms/icons/IconCloud.vue
deleted file mode 100644
index 311ddc5c23..0000000000
--- a/docs/components/atoms/icons/IconCloud.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconCode.vue b/docs/components/atoms/icons/IconCode.vue
deleted file mode 100644
index 49493d34fa..0000000000
--- a/docs/components/atoms/icons/IconCode.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconDevtools.vue b/docs/components/atoms/icons/IconDevtools.vue
deleted file mode 100644
index eefbcefb49..0000000000
--- a/docs/components/atoms/icons/IconDevtools.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconDirectory.vue b/docs/components/atoms/icons/IconDirectory.vue
deleted file mode 100644
index bd4639ddf5..0000000000
--- a/docs/components/atoms/icons/IconDirectory.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/components/atoms/icons/IconFeather.vue b/docs/components/atoms/icons/IconFeather.vue
deleted file mode 100644
index 873fdf78b6..0000000000
--- a/docs/components/atoms/icons/IconFeather.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconFile.vue b/docs/components/atoms/icons/IconFile.vue
deleted file mode 100644
index 72ebd4eac0..0000000000
--- a/docs/components/atoms/icons/IconFile.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/components/atoms/icons/IconFileSettings.vue b/docs/components/atoms/icons/IconFileSettings.vue
deleted file mode 100644
index 07d3bb19af..0000000000
--- a/docs/components/atoms/icons/IconFileSettings.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/components/atoms/icons/IconGit.vue b/docs/components/atoms/icons/IconGit.vue
deleted file mode 100644
index 06c288415f..0000000000
--- a/docs/components/atoms/icons/IconGit.vue
+++ /dev/null
@@ -1,4 +0,0 @@
-
-
-
-
diff --git a/docs/components/atoms/icons/IconGitHub.vue b/docs/components/atoms/icons/IconGitHub.vue
deleted file mode 100644
index 9f0c4a7041..0000000000
--- a/docs/components/atoms/icons/IconGitHub.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconHybrid.vue b/docs/components/atoms/icons/IconHybrid.vue
deleted file mode 100644
index 46624fec5a..0000000000
--- a/docs/components/atoms/icons/IconHybrid.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconKit.vue b/docs/components/atoms/icons/IconKit.vue
deleted file mode 100644
index 8b5dd9d799..0000000000
--- a/docs/components/atoms/icons/IconKit.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconNpm.vue b/docs/components/atoms/icons/IconNpm.vue
deleted file mode 100644
index b9771cf5b8..0000000000
--- a/docs/components/atoms/icons/IconNpm.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconNuxtBridge.vue b/docs/components/atoms/icons/IconNuxtBridge.vue
deleted file mode 100644
index fd15c5b58f..0000000000
--- a/docs/components/atoms/icons/IconNuxtBridge.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconNuxtNitro.vue b/docs/components/atoms/icons/IconNuxtNitro.vue
deleted file mode 100644
index 2201a1f77d..0000000000
--- a/docs/components/atoms/icons/IconNuxtNitro.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconPresets.vue b/docs/components/atoms/icons/IconPresets.vue
deleted file mode 100644
index 0e1edbc832..0000000000
--- a/docs/components/atoms/icons/IconPresets.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconRabbit.vue b/docs/components/atoms/icons/IconRabbit.vue
deleted file mode 100644
index f02662dab3..0000000000
--- a/docs/components/atoms/icons/IconRabbit.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconSuspense.vue b/docs/components/atoms/icons/IconSuspense.vue
deleted file mode 100644
index d1b6b20ecf..0000000000
--- a/docs/components/atoms/icons/IconSuspense.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconTwitter.vue b/docs/components/atoms/icons/IconTwitter.vue
deleted file mode 100644
index e2ee131519..0000000000
--- a/docs/components/atoms/icons/IconTwitter.vue
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconTypeScript.vue b/docs/components/atoms/icons/IconTypeScript.vue
deleted file mode 100644
index b575daef45..0000000000
--- a/docs/components/atoms/icons/IconTypeScript.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconVite.vue b/docs/components/atoms/icons/IconVite.vue
deleted file mode 100644
index 5b2c4cb0d8..0000000000
--- a/docs/components/atoms/icons/IconVite.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconVue.vue b/docs/components/atoms/icons/IconVue.vue
deleted file mode 100644
index 9e0430acc1..0000000000
--- a/docs/components/atoms/icons/IconVue.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/icons/IconWebpack.vue b/docs/components/atoms/icons/IconWebpack.vue
deleted file mode 100644
index ac1ccd8a5e..0000000000
--- a/docs/components/atoms/icons/IconWebpack.vue
+++ /dev/null
@@ -1,13 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoAzure.vue b/docs/components/atoms/logo/LogoAzure.vue
deleted file mode 100644
index 04679a9e7a..0000000000
--- a/docs/components/atoms/logo/LogoAzure.vue
+++ /dev/null
@@ -1,46 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoCloudFlare.vue b/docs/components/atoms/logo/LogoCloudFlare.vue
deleted file mode 100644
index 563583b1da..0000000000
--- a/docs/components/atoms/logo/LogoCloudFlare.vue
+++ /dev/null
@@ -1,7 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoFirebase.vue b/docs/components/atoms/logo/LogoFirebase.vue
deleted file mode 100644
index 7758bd3e36..0000000000
--- a/docs/components/atoms/logo/LogoFirebase.vue
+++ /dev/null
@@ -1,31 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoNetlify.vue b/docs/components/atoms/logo/LogoNetlify.vue
deleted file mode 100644
index cd44a37296..0000000000
--- a/docs/components/atoms/logo/LogoNetlify.vue
+++ /dev/null
@@ -1,20 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoPM2.vue b/docs/components/atoms/logo/LogoPM2.vue
deleted file mode 100644
index bdf7fa6bdb..0000000000
--- a/docs/components/atoms/logo/LogoPM2.vue
+++ /dev/null
@@ -1,3 +0,0 @@
-
-
-
diff --git a/docs/components/atoms/logo/LogoVercel.vue b/docs/components/atoms/logo/LogoVercel.vue
deleted file mode 100644
index 02c1d07b74..0000000000
--- a/docs/components/atoms/logo/LogoVercel.vue
+++ /dev/null
@@ -1,12 +0,0 @@
-
-
-
diff --git a/docs/components/molecules/HeroParallax.vue b/docs/components/molecules/HeroParallax.vue
deleted file mode 100644
index e13de5501b..0000000000
--- a/docs/components/molecules/HeroParallax.vue
+++ /dev/null
@@ -1,58 +0,0 @@
-
-
-
-
-
-
-
diff --git a/docs/components/molecules/HeroSection.vue b/docs/components/molecules/HeroSection.vue
deleted file mode 100644
index c98af1374e..0000000000
--- a/docs/components/molecules/HeroSection.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
-
-
- Currently in public beta
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/molecules/HomeHero.vue b/docs/components/molecules/HomeHero.vue
deleted file mode 100644
index 0deab76b56..0000000000
--- a/docs/components/molecules/HomeHero.vue
+++ /dev/null
@@ -1,90 +0,0 @@
-
-
-
-
-
-
- Check out the Nuxt 3 roadmap
-
-
-
-
-
-
-
-
-
-
-
- {{ primary.text }}
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/organisms/HomeFeatures.vue b/docs/components/organisms/HomeFeatures.vue
deleted file mode 100644
index db3133613f..0000000000
--- a/docs/components/organisms/HomeFeatures.vue
+++ /dev/null
@@ -1,36 +0,0 @@
-
-
-
-
-
-
- {{ category }}
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/components/organisms/SectionContentItem.vue b/docs/components/organisms/SectionContentItem.vue
deleted file mode 100644
index 1f0517e3c4..0000000000
--- a/docs/components/organisms/SectionContentItem.vue
+++ /dev/null
@@ -1,75 +0,0 @@
-
-
-
-
-
-
- {{ title }}
- soon
-
-
- {{ description }}
-
-
-
-
-
diff --git a/docs/components/templates/AutoGenerated.vue b/docs/components/templates/AutoGenerated.vue
deleted file mode 100644
index b0dd0c6e8e..0000000000
--- a/docs/components/templates/AutoGenerated.vue
+++ /dev/null
@@ -1,8 +0,0 @@
-
-
- This section is auto-generated from the source code.
-
-
-
-
diff --git a/docs/components/templates/Blank.vue b/docs/components/templates/Blank.vue
deleted file mode 100644
index c710b5c35d..0000000000
--- a/docs/components/templates/Blank.vue
+++ /dev/null
@@ -1,16 +0,0 @@
-
-
-
-
-
diff --git a/docs/components/templates/Error.vue b/docs/components/templates/Error.vue
deleted file mode 100644
index cf364a6849..0000000000
--- a/docs/components/templates/Error.vue
+++ /dev/null
@@ -1,33 +0,0 @@
-
-
-
-
- {{ error.message }}
-
-
- Go Home
-
-
-
-
-
-
diff --git a/docs/components/templates/Example.vue b/docs/components/templates/Example.vue
deleted file mode 100644
index a09688a513..0000000000
--- a/docs/components/templates/Example.vue
+++ /dev/null
@@ -1,45 +0,0 @@
-
-
-
-
-
-
-
-
-
-
diff --git a/docs/content/1.getting-started/1.introduction.md b/docs/content/1.getting-started/1.introduction.md
index 69fd45cb70..946deafe08 100644
--- a/docs/content/1.getting-started/1.introduction.md
+++ b/docs/content/1.getting-started/1.introduction.md
@@ -1,3 +1,9 @@
+---
+navigation.icon: uil:info-circle
+titleTemplate: '%s'
+description: Nuxt's goal is to make web development intuitive and performant with a great DX in mind.
+---
+
# What is Nuxt?
Nuxt's goal is to make web development intuitive and performant with a great developer experience in mind.
diff --git a/docs/content/1.getting-started/10.deployment.md b/docs/content/1.getting-started/10.deployment.md
index 6ef4a6a4a8..435f0fcdff 100644
--- a/docs/content/1.getting-started/10.deployment.md
+++ b/docs/content/1.getting-started/10.deployment.md
@@ -1,3 +1,8 @@
+---
+navigation.icon: uil:rocket
+description: Deploy on a Node.js server, pre-render for static hosting and to serverless or edge environments.
+---
+
# Deployment
A Nuxt application can be deployed on a Node.js server, pre-rendered for static hosting, or deployed to serverless or edge (CDN) environments.
diff --git a/docs/content/1.getting-started/10.upgrade-guide/_dir.yml b/docs/content/1.getting-started/10.upgrade-guide/_dir.yml
new file mode 100644
index 0000000000..a4707ca102
--- /dev/null
+++ b/docs/content/1.getting-started/10.upgrade-guide/_dir.yml
@@ -0,0 +1 @@
+navigation.icon: uil:arrow-circle-up
diff --git a/docs/content/1.getting-started/10.upgrade.md b/docs/content/1.getting-started/11.upgrade.md
similarity index 91%
rename from docs/content/1.getting-started/10.upgrade.md
rename to docs/content/1.getting-started/11.upgrade.md
index 37d5dd875e..3df6a8a467 100644
--- a/docs/content/1.getting-started/10.upgrade.md
+++ b/docs/content/1.getting-started/11.upgrade.md
@@ -1,3 +1,7 @@
+---
+navigation.icon: uil:arrow-up
+description: Have a Nuxt 2 project to migrate? Use these guides to upgrade your applications to Nuxt 3.
+---
# Upgrade Guide
Have a Nuxt 2 project to migrate? Use these guides to upgrade your Nuxt applications to Nuxt 3 or take the first step in that direction with Nuxt Bridge.
@@ -46,7 +50,7 @@ If you prefer to progressively migrate your Nuxt 2 application to Nuxt 3, you ca
### Latest release
-To upgrade Nuxt 3 to the latest release, use the `nuxi upgrade` command.
+To upgrade Nuxt 3 to the [latest release](/community/changelog), use the `nuxi upgrade` command.
```bash
npx nuxi upgrade
diff --git a/docs/content/1.getting-started/2.installation.md b/docs/content/1.getting-started/2.installation.md
index 081a05ac31..3bfe2f0473 100644
--- a/docs/content/1.getting-started/2.installation.md
+++ b/docs/content/1.getting-started/2.installation.md
@@ -1,13 +1,17 @@
+---
+navigation.icon: uil:play-circle
+---
+
# Installation
-Starting fresh? Getting started with Nuxt 3 is straightforward!
+Get started with Nuxt quickly with our online starters or start locally with your terminal.
## Play Online
You can start playing with Nuxt 3 in your browser using our online sandboxes:
-:button-link[Play on StackBlitz]{href="https://stackblitz.com/github/nuxt/starter/tree/v3-stackblitz" blank}
-:button-link[Play on CodeSandbox]{href="https://codesandbox.io/p/github/nuxt/starter/v3-codesandbox" blank}
+:button-link[Play on StackBlitz]{href="https://stackblitz.com/github/nuxt/starter/tree/v3-stackblitz" blank .mr-2}
+:button-link[Play on CodeSandbox]{href="https://codesandbox.io/s/github/nuxt/starter/tree/v3-codesandbox" blank}
## Prerequisites
diff --git a/docs/content/1.getting-started/3.configuration.md b/docs/content/1.getting-started/3.configuration.md
index 0ea468afb9..f4e7074e27 100644
--- a/docs/content/1.getting-started/3.configuration.md
+++ b/docs/content/1.getting-started/3.configuration.md
@@ -1,3 +1,8 @@
+---
+navigation.icon: uil:wrench
+description: Nuxt is configured with sensible defaults. The config file can override or extend them.
+---
+
# Configuration
By default, Nuxt is configured to cover most use cases. The [`nuxt.config.ts`](/guide/directory-structure/nuxt.config) file can override or extend this default configuration.
diff --git a/docs/content/1.getting-started/3.views.md b/docs/content/1.getting-started/3.views.md
index ad1f82f7e9..8fa77ea23c 100644
--- a/docs/content/1.getting-started/3.views.md
+++ b/docs/content/1.getting-started/3.views.md
@@ -1,3 +1,7 @@
+---
+navigation.icon: uil:window-section
+---
+
# Views
Nuxt provides several component layers to implement the user interface of your application.
diff --git a/docs/content/1.getting-started/4.assets.md b/docs/content/1.getting-started/4.assets.md
index 0b38397c33..8ec4215cd5 100644
--- a/docs/content/1.getting-started/4.assets.md
+++ b/docs/content/1.getting-started/4.assets.md
@@ -1,6 +1,10 @@
+---
+navigation.icon: uil:image
+---
+
# Assets
-Nuxt uses two directories to handle assets like stylesheets, fonts or images:
+Nuxt uses two directories to handle assets like stylesheets, fonts or images.
- The [`public/` directory](/guide/directory-structure/public) content is served at the server root as-is.
- The [`assets/` directory](/guide/directory-structure/assets) contains by convention every asset that you want the build tool (Vite or Webpack) to process.
diff --git a/docs/content/1.getting-started/5.routing.md b/docs/content/1.getting-started/5.routing.md
index ac3f40c8c8..4973eebab4 100644
--- a/docs/content/1.getting-started/5.routing.md
+++ b/docs/content/1.getting-started/5.routing.md
@@ -1,3 +1,7 @@
+---
+navigation.icon: uil:sign-alt
+description: Nuxt file-system routing creates a route for every file in the pages/ directory.
+---
# Routing
One of Nuxt core feature is the file-system router. Every Vue file created inside the pages/ directory creates a corresponding URL (or route) that displays the content of the file. Nuxt leverages code-splitting on each page by using dynamic imports to ship the minimum of JavaScript for the requested route.
diff --git a/docs/content/1.getting-started/5.seo-meta.md b/docs/content/1.getting-started/5.seo-meta.md
index b3f602840c..7064573e9d 100644
--- a/docs/content/1.getting-started/5.seo-meta.md
+++ b/docs/content/1.getting-started/5.seo-meta.md
@@ -1,3 +1,8 @@
+---
+navigation.icon: uil:file-search-alt
+description: Nuxt provides good default values for meta tags, but you can override these if you need to.
+---
+
# SEO and Meta
Out-of-the-box, Nuxt provides good default values for `charset` and `viewport` meta tags, but you can override these if you need to, as well as customize other meta tags for your site in several different ways.
diff --git a/docs/content/1.getting-started/6.data-fetching.md b/docs/content/1.getting-started/6.data-fetching.md
index 03c5cee2b7..138882bc0d 100644
--- a/docs/content/1.getting-started/6.data-fetching.md
+++ b/docs/content/1.getting-started/6.data-fetching.md
@@ -1,6 +1,11 @@
+---
+navigation.icon: uil:channel
+description: Nuxt provides composables to handle data fetching within your application.
+---
+
# Data Fetching
-Nuxt provides `useFetch`, `useLazyFetch`, `useAsyncData` and `useLazyAsyncData` to handle data fetching within your application.
+Nuxt provides useFetch, useLazyFetch, useAsyncData and useLazyAsyncData to handle data fetching within your application.
::alert{icon=👉}
**`useFetch`, `useLazyFetch`, `useAsyncData` and `useLazyAsyncData` only work during `setup` or `Lifecycle Hooks`**
diff --git a/docs/content/1.getting-started/7.state-management.md b/docs/content/1.getting-started/7.state-management.md
index 27ada7ffb7..716031dcef 100644
--- a/docs/content/1.getting-started/7.state-management.md
+++ b/docs/content/1.getting-started/7.state-management.md
@@ -1,6 +1,11 @@
+---
+navigation.icon: uil:database
+description: Nuxt provides useState composable to create a reactive and SSR-friendly shared state.
+---
+
# State Management
-Nuxt provides `useState` composable to create a reactive and SSR-friendly shared state across components.
+Nuxt provides useState composable to create a reactive and SSR-friendly shared state across components.
`useState` is an SSR-friendly [`ref`](https://vuejs.org/api/reactivity-core.html#ref) replacement. Its value will be preserved after server-side rendering (during client-side hydration) and shared across all components using a unique key.
diff --git a/docs/content/1.getting-started/8.error-handling.md b/docs/content/1.getting-started/8.error-handling.md
index dcc2fc1c01..9d8dfa4bb9 100644
--- a/docs/content/1.getting-started/8.error-handling.md
+++ b/docs/content/1.getting-started/8.error-handling.md
@@ -1,4 +1,10 @@
-# Error Handling
+---
+navigation.icon: uil:bug
+---
+
+# Error handling
+
+Learn how to catch errors in different lifecycle.
## Handling Errors
diff --git a/docs/content/1.getting-started/9.testing.md b/docs/content/1.getting-started/9.testing.md
index cdbe3771eb..3e6ab31caa 100644
--- a/docs/content/1.getting-started/9.testing.md
+++ b/docs/content/1.getting-started/9.testing.md
@@ -1,5 +1,11 @@
+---
+navigation.icon: uil:check-circle
+---
+
# Testing
+How to test your Nuxt application.
+
::alert{icon=👉}
Test utils are still in development and the API and behavior may change. Currently, it is in preview stage but not yet ready for testing production apps.
If you are a module author, you can find more specific informations in the [Module Author's guide](/guide/going-further/modules#testing)
diff --git a/docs/content/1.getting-started/_dir.yml b/docs/content/1.getting-started/_dir.yml
new file mode 100644
index 0000000000..95c565f6e0
--- /dev/null
+++ b/docs/content/1.getting-started/_dir.yml
@@ -0,0 +1 @@
+title: Get Started
diff --git a/docs/content/1.getting-started/index.md b/docs/content/1.getting-started/index.md
deleted file mode 100644
index 43eeec5fdf..0000000000
--- a/docs/content/1.getting-started/index.md
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: Get Started
-layout.aside: true
-navigation.exclusive: true
-navigation.redirect: /getting-started/introduction
----
diff --git a/docs/content/2.guide/1.concepts/1.auto-imports.md b/docs/content/2.guide/1.concepts/1.auto-imports.md
index beddc4d392..200439cc2f 100644
--- a/docs/content/2.guide/1.concepts/1.auto-imports.md
+++ b/docs/content/2.guide/1.concepts/1.auto-imports.md
@@ -1,4 +1,8 @@
-# Auto Imports
+---
+description: "Nuxt auto-imports helper functions, composables and Vue APIs."
+---
+
+# Auto imports
Nuxt auto-imports helper functions, composables and Vue APIs to use across your application without explicitly importing them. Based on the directory structure, every Nuxt application can also use auto-imports for its own components, composables and plugins. Components, composables or plugins can use these functions.
diff --git a/docs/content/2.guide/1.concepts/2.vuejs-development.md b/docs/content/2.guide/1.concepts/2.vuejs-development.md
index 99ac359689..f3bbc850a1 100644
--- a/docs/content/2.guide/1.concepts/2.vuejs-development.md
+++ b/docs/content/2.guide/1.concepts/2.vuejs-development.md
@@ -1,9 +1,11 @@
+---
+description: "Nuxt uses Vue and adds features such as component auto-imports and file-based routing."
+---
+
# Vue.js Development
Nuxt uses Vue as a frontend framework and adds features such as component auto-imports and file-based routing. Nuxt 3 integrates Vue 3, the new major release of Vue that enables new patterns for Nuxt users.
-## Vue.js
-
> While an in-depth knowledge of Vue is not required to use Nuxt, we recommend that you read the documentation and go through some of the examples on [vuejs.org](https://vuejs.org/).
>
diff --git a/docs/content/2.guide/1.concepts/3.rendering.md b/docs/content/2.guide/1.concepts/3.rendering.md
index 5ab8ca21b2..0fb415a611 100644
--- a/docs/content/2.guide/1.concepts/3.rendering.md
+++ b/docs/content/2.guide/1.concepts/3.rendering.md
@@ -1,3 +1,7 @@
+---
+description: "Nuxt supports different rendering modes. Each one has pros and cons covered in this section."
+---
+
# Rendering Modes
Both the browser and server can interpret JavaScript code to render Vue.js components into HTML elements. This step is called **rendering**. Nuxt supports both **client-side** and **universal** rendering. The two approaches have pros and cons that we will cover in this section.
@@ -6,8 +10,8 @@ Both the browser and server can interpret JavaScript code to render Vue.js compo
Out of the box, a traditional Vue.js application is rendered in the browser (or **client**). Then, Vue.js generates HTML elements after the browser downloads and parses all the JavaScript code containing the instructions to create the current interface.
-![Users have to wait for the browser to download, parse and execute the JavaScript before seeing the page's content](/img/concepts/rendering/light/csr.svg){.dark:hidden}
-![Users have to wait for the browser to download, parse and execute the JavaScript before seeing the page's content](/img/concepts/rendering/dark/csr.svg){.light:hidden}
+![Users have to wait for the browser to download, parse and execute the JavaScript before seeing the page's content](/img/concepts/rendering/light/csr.svg){.light-img}
+![Users have to wait for the browser to download, parse and execute the JavaScript before seeing the page's content](/img/concepts/rendering/dark/csr.svg){.dark-img}
While this technique allows building complex and dynamic UIs with smooth page transitions, it has different pros and cons:
@@ -36,8 +40,8 @@ Making a static page interactive in the browser is called "Hydration."
Universal rendering allows a Nuxt application to provide quick page load times while preserving the benefits of client-side rendering. Furthermore, as the content is already present in the HTML document, crawlers can index it without overhead.
-![Users can access the static content when the HTML document is loaded. Hydration then allows page's interactivity](/img/concepts/rendering/light/ssr.svg){.dark:hidden}
-![Users can access the static content when the HTML document is loaded. Hydration then allows page's interactivity](/img/concepts/rendering/dark/ssr.svg){.light:hidden}
+![Users can access the static content when the HTML document is loaded. Hydration then allows page's interactivity](/img/concepts/rendering/light/ssr.svg){.light-img}
+![Users can access the static content when the HTML document is loaded. Hydration then allows page's interactivity](/img/concepts/rendering/dark/ssr.svg){.dark-img}
### Pros
diff --git a/docs/content/2.guide/1.concepts/5.modules.md b/docs/content/2.guide/1.concepts/5.modules.md
index 5885f0889f..80e0f0fcea 100644
--- a/docs/content/2.guide/1.concepts/5.modules.md
+++ b/docs/content/2.guide/1.concepts/5.modules.md
@@ -1,3 +1,7 @@
+---
+description: "Nuxt provides a module system to extend the framework core and simplify integrations."
+---
+
# Modules
Nuxt provides a module system to extend the framework core and simplify integrations. You don't need to develop everything from scratch or maintain boilerplate if there is already a Nuxt module for it. Adding Nuxt modules is possible using [`nuxt.config`](/api/configuration/nuxt.config#modules).
diff --git a/docs/content/2.guide/1.concepts/7.esm.md b/docs/content/2.guide/1.concepts/7.esm.md
index 752814fb66..42f51fb858 100644
--- a/docs/content/2.guide/1.concepts/7.esm.md
+++ b/docs/content/2.guide/1.concepts/7.esm.md
@@ -1,6 +1,8 @@
-# ES Modules
+---
+description: "Nuxt 3 (and Bridge) uses Native ES Modules."
+---
-Nuxt 3 (and Bridge) uses Native ES Modules.
+# ES Modules
This guide helps explain what ES Modules are and how to make a Nuxt app (or upstream library) compatible with ESM.
diff --git a/docs/content/2.guide/1.concepts/8.typescript.md b/docs/content/2.guide/1.concepts/8.typescript.md
index 11b53e229e..2a31ef5920 100644
--- a/docs/content/2.guide/1.concepts/8.typescript.md
+++ b/docs/content/2.guide/1.concepts/8.typescript.md
@@ -1,3 +1,7 @@
+---
+description: "Nuxt 3 is fully typed and provides accurate type information when you are coding."
+---
+
# TypeScript
Nuxt 3 is fully typed and provides helpful shortcuts to ensure you have access to accurate type information when you are coding.
diff --git a/docs/content/2.guide/1.concepts/_dir.yml b/docs/content/2.guide/1.concepts/_dir.yml
new file mode 100644
index 0000000000..1da929584e
--- /dev/null
+++ b/docs/content/2.guide/1.concepts/_dir.yml
@@ -0,0 +1,3 @@
+title: Key Concepts
+titleTemplate: '%s · Nuxt Concepts'
+navigation.icon: uil:award-alt
diff --git a/docs/content/2.guide/1.concepts/index.md b/docs/content/2.guide/1.concepts/index.md
index a74635d40f..7c00ce8cee 100644
--- a/docs/content/2.guide/1.concepts/index.md
+++ b/docs/content/2.guide/1.concepts/index.md
@@ -1,7 +1,4 @@
---
-title: Key Concepts
-layout.aside: true
-layout.asideClass: ''
-navigation.redirect: /guide/concepts/auto-imports
-# navigation.collapse: true
+navigation: false
+redirect: /guide/concepts/auto-imports
---
diff --git a/docs/content/2.guide/2.directory-structure/0.nuxt.md b/docs/content/2.guide/2.directory-structure/0.nuxt.md
index 2cebd800cb..03d0d2fa0d 100644
--- a/docs/content/2.guide/2.directory-structure/0.nuxt.md
+++ b/docs/content/2.guide/2.directory-structure/0.nuxt.md
@@ -1,11 +1,11 @@
---
-icon: IconDirectory
-title: '.nuxt'
-head.title: Nuxt Directory
+navigation.icon: IconDirectory
+title: ".nuxt"
+description: "Nuxt uses the .nuxt/ directory in development to generate your Vue application."
+head.title: ".nuxt"
---
-
-# Nuxt Directory
+# .nuxt Directory
Nuxt uses the `.nuxt/` directory in development to generate your Vue application.
diff --git a/docs/content/2.guide/2.directory-structure/0.output.md b/docs/content/2.guide/2.directory-structure/0.output.md
index 891f39932a..62e0c7fe41 100644
--- a/docs/content/2.guide/2.directory-structure/0.output.md
+++ b/docs/content/2.guide/2.directory-structure/0.output.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: '.output'
-head.title: Output Directory
+navigation.icon: IconDirectory
+title: ".output"
+description: "Nuxt creates the .output/ directory when building your application for production."
+head.title: ".output"
---
# Output Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.assets.md b/docs/content/2.guide/2.directory-structure/1.assets.md
index 88eeead0a3..39daa0ab10 100644
--- a/docs/content/2.guide/2.directory-structure/1.assets.md
+++ b/docs/content/2.guide/2.directory-structure/1.assets.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: 'assets'
-head.title: Assets Directory
+navigation.icon: IconDirectory
+title: "assets"
+description: "The assets/ directory is used to add all the website's assets that the build tool will process."
+head.title: "Assets"
---
# Assets Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.components.md b/docs/content/2.guide/2.directory-structure/1.components.md
index 2466d2f962..8bac9fa14e 100644
--- a/docs/content/2.guide/2.directory-structure/1.components.md
+++ b/docs/content/2.guide/2.directory-structure/1.components.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: 'components'
-head.title: Components Directory
+navigation.icon: IconDirectory
+title: "components"
+description: "The components/ directory is where you put all your Vue components."
+head.title: "Components"
---
# Components Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.composables.md b/docs/content/2.guide/2.directory-structure/1.composables.md
index f445cae21f..f212813ce8 100644
--- a/docs/content/2.guide/2.directory-structure/1.composables.md
+++ b/docs/content/2.guide/2.directory-structure/1.composables.md
@@ -1,12 +1,13 @@
---
-icon: IconDirectory
+navigation.icon: IconDirectory
title: 'composables'
-head.title: Composables Directory
+head.title: Composables
+description: Use the composables/ directory to auto-import your Vue composables into your application.
---
# Composables Directory
-Nuxt 3 supports `composables/` directory to automatically import your Vue composables into your application using [auto-imports](/guide/concepts/auto-imports)!
+Nuxt 3 uses the `composables/` directory to automatically import your Vue composables into your application using [auto-imports](/guide/concepts/auto-imports)!
Under the hood, Nuxt auto generates the file `.nuxt/imports.d.ts` to declare the types.
diff --git a/docs/content/2.guide/2.directory-structure/1.content.md b/docs/content/2.guide/2.directory-structure/1.content.md
index 63f34d72af..a5fd6bbf0e 100644
--- a/docs/content/2.guide/2.directory-structure/1.content.md
+++ b/docs/content/2.guide/2.directory-structure/1.content.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
+navigation.icon: IconDirectory
title: 'content'
-head.title: Content Directory
+head.title: Content
+description: The Content module reads the content/ directory to create a file-based CMS for your application.
---
# Content Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.layouts.md b/docs/content/2.guide/2.directory-structure/1.layouts.md
index 86264e0bf0..9533dec432 100644
--- a/docs/content/2.guide/2.directory-structure/1.layouts.md
+++ b/docs/content/2.guide/2.directory-structure/1.layouts.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: 'layouts'
-head.title: Layouts Directory
+navigation.icon: IconDirectory
+title: "layouts"
+description: "Nuxt provides a layouts framework to extract common UI patterns into reusable layouts."
+head.title: "Layouts"
---
# Layouts Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.middleware.md b/docs/content/2.guide/2.directory-structure/1.middleware.md
index 89f0748120..3a0c3b5667 100644
--- a/docs/content/2.guide/2.directory-structure/1.middleware.md
+++ b/docs/content/2.guide/2.directory-structure/1.middleware.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: 'middleware'
-head.title: Middleware Directory
+navigation.icon: IconDirectory
+title: "middleware"
+description: "Nuxt provides middleware to run code before navigating to a particular route."
+head.title: "Middleware"
---
# Middleware Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.node_modules.md b/docs/content/2.guide/2.directory-structure/1.node_modules.md
index 01cf7ca142..1435329006 100644
--- a/docs/content/2.guide/2.directory-structure/1.node_modules.md
+++ b/docs/content/2.guide/2.directory-structure/1.node_modules.md
@@ -1,9 +1,10 @@
---
-icon: IconDirectory
-title: 'node_modules'
-head.title: Node Modules Directory
+navigation.icon: IconDirectory
+title: "node_modules"
+description: "The package manager stores the dependencies of your project in the node_modules/ directory."
+head.title: "Node Modules"
---
-# Node Modules Directory
+# Node modules Directory
-The package manager ([`npm`](https://docs.npmjs.com/cli/v7/commands/npm) or [`yarn`](https://yarnpkg.com/) or [`pnpm`](https://pnpm.io/cli/install)) creates the `node_modules` directory to store the dependencies of your project.
+The package manager ([`npm`](https://docs.npmjs.com/cli/v7/commands/npm) or [`yarn`](https://yarnpkg.com/) or [`pnpm`](https://pnpm.io/cli/install)) creates the `node_modules/` directory to store the dependencies of your project.
diff --git a/docs/content/2.guide/2.directory-structure/1.pages.md b/docs/content/2.guide/2.directory-structure/1.pages.md
index fcd599a883..e45b01ce7c 100644
--- a/docs/content/2.guide/2.directory-structure/1.pages.md
+++ b/docs/content/2.guide/2.directory-structure/1.pages.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: 'pages'
-head.title: Pages Directory
+navigation.icon: IconDirectory
+title: "pages"
+description: "Nuxt provides a file-based routing to create routes within your web application."
+head.title: "Pages"
---
# Pages Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.plugins.md b/docs/content/2.guide/2.directory-structure/1.plugins.md
index 2b93add1ed..27576e17c1 100644
--- a/docs/content/2.guide/2.directory-structure/1.plugins.md
+++ b/docs/content/2.guide/2.directory-structure/1.plugins.md
@@ -1,12 +1,13 @@
---
-icon: IconDirectory
-title: 'plugins'
-head.title: Plugins Directory
+navigation.icon: IconDirectory
+title: "plugins"
+description: "Nuxt reads the files in your plugins directory and loads them at the creation of the Vue application."
+head.title: "Plugins"
---
# Plugins Directory
-Nuxt will automatically read the files in your `plugins` directory and load them. You can use `.server` or `.client` suffix in the file name to load a plugin only on the server or client side.
+Nuxt automatically reads the files in your `plugins` directory and loads them at the creation of the Vue application. You can use `.server` or `.client` suffix in the file name to load a plugin only on the server or client side.
::alert{type=warning}
All plugins in your `plugins/` directory are auto-registered, so you should not add them to your `nuxt.config` separately.
diff --git a/docs/content/2.guide/2.directory-structure/1.public.md b/docs/content/2.guide/2.directory-structure/1.public.md
index 48cb492d47..1a3ea384a9 100644
--- a/docs/content/2.guide/2.directory-structure/1.public.md
+++ b/docs/content/2.guide/2.directory-structure/1.public.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
-title: public
-head.title: Public Directory
+navigation.icon: IconDirectory
+title: "public"
+description: "The public/ directory is used to serve your website's static assets."
+head.title: "Public"
---
# Public Directory
diff --git a/docs/content/2.guide/2.directory-structure/1.server.md b/docs/content/2.guide/2.directory-structure/1.server.md
index 5bf170d59c..e4ddde4a70 100644
--- a/docs/content/2.guide/2.directory-structure/1.server.md
+++ b/docs/content/2.guide/2.directory-structure/1.server.md
@@ -1,7 +1,8 @@
---
-icon: IconDirectory
+navigation.icon: IconDirectory
title: server
-head.title: Server Directory
+head.title: Server
+description: The server/ directory is used to register API and server handlers to your application.
---
# Server Directory
diff --git a/docs/content/2.guide/2.directory-structure/2.gitignore.md b/docs/content/2.guide/2.directory-structure/2.gitignore.md
index a4ba6bbed4..b82f4221f8 100644
--- a/docs/content/2.guide/2.directory-structure/2.gitignore.md
+++ b/docs/content/2.guide/2.directory-structure/2.gitignore.md
@@ -1,7 +1,8 @@
---
-icon: IconFile
-title: .gitignore
-head.title: Git Ignore File
+navigation.icon: IconFile
+title: ".gitignore"
+description: "A .gitignore file specifies intentionally untracked files that git should ignore."
+head.title: "Git Ignore File"
---
# Git Ignore File
diff --git a/docs/content/2.guide/2.directory-structure/2.nuxtignore.md b/docs/content/2.guide/2.directory-structure/2.nuxtignore.md
index 0b1c989bbe..f7b2097257 100644
--- a/docs/content/2.guide/2.directory-structure/2.nuxtignore.md
+++ b/docs/content/2.guide/2.directory-structure/2.nuxtignore.md
@@ -1,12 +1,13 @@
---
-icon: IconFile
+navigation.icon: IconFile
title: .nuxtignore
head.title: Nuxt Ignore File
+description: The .nuxtignore file lets Nuxt ignore files in your project’s root directory during the build phase.
---
# Nuxt Ignore File
-You can use a `.nuxtignore` file to let Nuxt ignore `layout`, `pages`, `components`, `composables` and `middleware` files in your project’s root directory (`rootDir`) during the build phase. The `.nuxtignore` file is subject to the same specification as `.gitignore` and `.eslintignore` files, in which each line is a glob pattern indicating which files should be ignored.
+The `.nuxtignore` file lets Nuxt ignore `layout`, `pages`, `components`, `composables` and `middleware` files in your project’s root directory (`rootDir`) during the build phase. The `.nuxtignore` file is subject to the same specification as `.gitignore` and `.eslintignore` files, in which each line is a glob pattern indicating which files should be ignored.
**Note**: You can also configure [`ignoreOptions`](/guide/directory-structure/nuxt.config#ignoreoptions), [`ignorePrefix`](/guide/directory-structure/nuxt.config#ignoreprefix) and [`ignore`](/guide/directory-structure/nuxt.config#ignore) in your `nuxt.config` file.
diff --git a/docs/content/2.guide/2.directory-structure/3.app.config.md b/docs/content/2.guide/2.directory-structure/3.app.config.md
index 5c4ab3df7b..2dff2c0bef 100644
--- a/docs/content/2.guide/2.directory-structure/3.app.config.md
+++ b/docs/content/2.guide/2.directory-structure/3.app.config.md
@@ -1,7 +1,8 @@
---
-icon: IconFile
+navigation.icon: IconFile
title: app.config.ts
head.title: Nuxt App Config
+description: Nuxt 3 provides the app.config file to expose reactive configuration within your application.
---
# App Config File
diff --git a/docs/content/2.guide/2.directory-structure/3.app.md b/docs/content/2.guide/2.directory-structure/3.app.md
index 39a79ff032..1ca856d8ce 100644
--- a/docs/content/2.guide/2.directory-structure/3.app.md
+++ b/docs/content/2.guide/2.directory-structure/3.app.md
@@ -1,14 +1,15 @@
---
-icon: IconFile
-title: app.vue
-head.title: App File
+navigation.icon: IconFile
+title: "app.vue"
+description: "The app.vue file is the main component in your Nuxt 3 applications."
+head.title: "App File"
---
-# App File
+# App file
The `app.vue` file is the main component in your Nuxt 3 applications.
-## Minimal Usage
+## Minimal usage
With Nuxt 3, the [`pages/`](/guide/directory-structure/pages) directory is optional. If not present, Nuxt won't include [vue-router](https://router.vuejs.org/) dependency. This is useful when working on a landing page or an application that does not need routing.
diff --git a/docs/content/2.guide/2.directory-structure/3.nuxt.config.md b/docs/content/2.guide/2.directory-structure/3.nuxt.config.md
index 158d6bb4cf..ba5def5f61 100644
--- a/docs/content/2.guide/2.directory-structure/3.nuxt.config.md
+++ b/docs/content/2.guide/2.directory-structure/3.nuxt.config.md
@@ -1,10 +1,11 @@
---
-icon: IconFile
-title: nuxt.config.ts
-head.title: Nuxt Configuration file
+navigation.icon: IconFile
+title: "nuxt.config.ts"
+description: "Nuxt can be easily configured with a single nuxt.config file."
+head.title: "Nuxt Configuration File"
---
-# Nuxt Configuration file
+# Nuxt Config File
Nuxt can be easily configured with a single `nuxt.config` file, which can have either a `.js`, `.ts` or `.mjs` extension.
diff --git a/docs/content/2.guide/2.directory-structure/3.package.md b/docs/content/2.guide/2.directory-structure/3.package.md
index 83edd28fcc..26c51f8390 100644
--- a/docs/content/2.guide/2.directory-structure/3.package.md
+++ b/docs/content/2.guide/2.directory-structure/3.package.md
@@ -1,7 +1,8 @@
---
-icon: IconFile
+navigation.icon: IconFile
title: package.json
head.title: Package.json File
+description: The package.json file contains all the dependencies and scripts for your application.
---
# Package.json File
diff --git a/docs/content/2.guide/2.directory-structure/3.tsconfig.md b/docs/content/2.guide/2.directory-structure/3.tsconfig.md
index 138538f397..af65ed0e8a 100644
--- a/docs/content/2.guide/2.directory-structure/3.tsconfig.md
+++ b/docs/content/2.guide/2.directory-structure/3.tsconfig.md
@@ -1,7 +1,8 @@
---
-icon: IconFile
-title: tsconfig.json
-head.title: TypeScript Configuration File
+navigation.icon: IconFile
+title: "tsconfig.json"
+description: "Nuxt generates a .nuxt/tsconfig.json file with sensible defaults and your aliases."
+head.title: "TypeScript Config File"
---
# TypeScript Configuration File
diff --git a/docs/content/2.guide/2.directory-structure/_dir.yml b/docs/content/2.guide/2.directory-structure/_dir.yml
new file mode 100644
index 0000000000..9cb2d63677
--- /dev/null
+++ b/docs/content/2.guide/2.directory-structure/_dir.yml
@@ -0,0 +1,3 @@
+title: Directory Structure
+titleTemplate: '%s · Nuxt Directory Structure'
+navigation.icon: uil:folder-open
diff --git a/docs/content/2.guide/2.directory-structure/index.md b/docs/content/2.guide/2.directory-structure/index.md
index d0e28765e8..1f32316657 100644
--- a/docs/content/2.guide/2.directory-structure/index.md
+++ b/docs/content/2.guide/2.directory-structure/index.md
@@ -1,7 +1,4 @@
---
-title: 'Directory Structure'
-layout.aside: true
-layout.asideClass: ''
-navigation.redirect: /guide/directory-structure/nuxt
-# navigation.collapse: true
+navigation: false
+redirect: /guide/directory-structure/nuxt
---
diff --git a/docs/content/2.guide/3.deploy/_dir.yml b/docs/content/2.guide/3.deploy/_dir.yml
new file mode 100644
index 0000000000..0d19ecf0bc
--- /dev/null
+++ b/docs/content/2.guide/3.deploy/_dir.yml
@@ -0,0 +1,2 @@
+title: Deploy
+navigation.icon: uil:cloud-check
diff --git a/docs/content/2.guide/3.deploy/providers/_dir.yml b/docs/content/2.guide/3.deploy/providers/_dir.yml
new file mode 100644
index 0000000000..9a286def08
--- /dev/null
+++ b/docs/content/2.guide/3.deploy/providers/_dir.yml
@@ -0,0 +1 @@
+navigation: false
diff --git a/docs/content/2.guide/4.going-further/1.internals.md b/docs/content/2.guide/4.going-further/1.internals.md
index 050a76dba8..2267241f88 100644
--- a/docs/content/2.guide/4.going-further/1.internals.md
+++ b/docs/content/2.guide/4.going-further/1.internals.md
@@ -1,3 +1,8 @@
+---
+title: "How Nuxt Works?"
+description: "Nuxt is a minimal but highly customizable framework to build web applications."
+---
+
# How Nuxt Works?
Nuxt is a minimal but highly customizable framework to build web applications. This guide helps you better understand Nuxt internals to develop new solutions and module integrations on top of Nuxt.
diff --git a/docs/content/2.guide/4.going-further/10.runtime-config.md b/docs/content/2.guide/4.going-further/10.runtime-config.md
index 1c4e6ca54b..4a380f642f 100644
--- a/docs/content/2.guide/4.going-further/10.runtime-config.md
+++ b/docs/content/2.guide/4.going-further/10.runtime-config.md
@@ -1,3 +1,8 @@
+---
+title: "Runtime Config"
+description: "Nuxt provides a runtime config API to expose configuration within your application."
+---
+
# Runtime Config
Nuxt provides a runtime config API to expose configuration within your application and server routes, with the ability to update it at runtime by setting environment variables.
diff --git a/docs/content/2.guide/4.going-further/11.edge-channel.md b/docs/content/2.guide/4.going-further/11.edge-channel.md
index 517767e848..b01b46838c 100644
--- a/docs/content/2.guide/4.going-further/11.edge-channel.md
+++ b/docs/content/2.guide/4.going-further/11.edge-channel.md
@@ -1,5 +1,6 @@
---
-title: Edge Channel
+title: "Edge Channel"
+description: "Edge channel allows to use latest commits from the repository."
---
# Edge Release Channel
diff --git a/docs/content/2.guide/4.going-further/2.hooks.md b/docs/content/2.guide/4.going-further/2.hooks.md
index 636db5e77e..af8652f6c3 100644
--- a/docs/content/2.guide/4.going-further/2.hooks.md
+++ b/docs/content/2.guide/4.going-further/2.hooks.md
@@ -1,6 +1,11 @@
+---
+title: "Lifecycle Hooks"
+description: "Nuxt provides a powerful hooking system to expand almost every aspect using hooks."
+---
+
# Lifecycle Hooks
-Nuxt provides a powerful hooking system to expand almost every aspect using hooks powered by [unjs/hookable](https://github.com/unjs/hookable).
+Nuxt provides a powerful hooking system to expand almost every aspect using hooks. This feature is powered by [unjs/hookable](https://github.com/unjs/hookable).
## Nuxt Hooks (Build Time)
diff --git a/docs/content/2.guide/4.going-further/3.modules.md b/docs/content/2.guide/4.going-further/3.modules.md
index cbe8daf106..28ac587130 100644
--- a/docs/content/2.guide/4.going-further/3.modules.md
+++ b/docs/content/2.guide/4.going-further/3.modules.md
@@ -1,10 +1,18 @@
+---
+title: "Module Author Guide"
+description: "Learn how to create a Nuxt module."
+---
+
# Module Author Guide
+A powerful configuration and hooks system makes it possible to customize almost every aspect of Nuxt Framework and add endless possible integrations when it comes to customization.
+
Nuxt provides a zero-config experience with a preset of integrations and best practices to develop Web applications.
A powerful configuration and hooks system makes it possible to customize almost every aspect of Nuxt Framework and add endless possible integrations when it comes to customization. You can learn more about how Nuxt works in the [Nuxt internals](/guide/going-further/internals) section.
Nuxt exposes a powerful API called **Nuxt Modules**. Nuxt modules are simple async functions that sequentially run when starting Nuxt in development mode using `nuxi dev` or building a project for production with `nuxi build`.
Using Nuxt Modules, we can encapsulate, properly test and share custom solutions as npm packages without adding unnecessary boilerplate to the Nuxt project itself.
+
Nuxt Modules can hook into lifecycle events of Nuxt builder, provide runtime app templates, update the configuration or do any other custom action based on needs.
## Quick Start
diff --git a/docs/content/2.guide/4.going-further/4.kit.md b/docs/content/2.guide/4.going-further/4.kit.md
index 1141132909..b23626a8ce 100644
--- a/docs/content/2.guide/4.going-further/4.kit.md
+++ b/docs/content/2.guide/4.going-further/4.kit.md
@@ -1,3 +1,8 @@
+---
+title: "Nuxt Kit"
+description: "@nuxt/kit provides features for module authors."
+---
+
# Nuxt Kit
> Nuxt Kit provides composable utilities to make interacting with [Nuxt Hooks](/api/advanced/hooks) and [Nuxt Builder Core](/guide/going-further/internals#the-nuxt-interface) and developing [Nuxt Modules](/guide/going-further/modules) super easy!
diff --git a/docs/content/2.guide/4.going-further/6.nuxt-app.md b/docs/content/2.guide/4.going-further/6.nuxt-app.md
index b81b8bca3d..4097ab4392 100644
--- a/docs/content/2.guide/4.going-further/6.nuxt-app.md
+++ b/docs/content/2.guide/4.going-further/6.nuxt-app.md
@@ -1,8 +1,11 @@
+---
+title: "NuxtApp"
+description: "In Nuxt 3, you can access runtime app context within composables, components and plugins."
+---
+
# NuxtApp
-In Nuxt 3, you can access runtime app context within composables, components and plugins.
-
-In Nuxt 2, this was referred to as [Nuxt context](https://nuxtjs.org/docs/internals-glossary/context#the-context).
+In Nuxt 3, you can access runtime app context within composables, components and plugins. In Nuxt 2, this was referred to as [Nuxt context](https://nuxtjs.org/docs/internals-glossary/context#the-context).
## Accessing NuxtApp
diff --git a/docs/content/2.guide/4.going-further/_dir.yml b/docs/content/2.guide/4.going-further/_dir.yml
new file mode 100644
index 0000000000..d1d1f28174
--- /dev/null
+++ b/docs/content/2.guide/4.going-further/_dir.yml
@@ -0,0 +1,2 @@
+title: Going further
+navigation.icon: uil:star
diff --git a/docs/content/2.guide/4.going-further/index.md b/docs/content/2.guide/4.going-further/index.md
index 5da8a286dd..568dff82b9 100644
--- a/docs/content/2.guide/4.going-further/index.md
+++ b/docs/content/2.guide/4.going-further/index.md
@@ -1,7 +1,4 @@
---
-title: Going Further
-layout.aside: true
-layout.asideClass: ''
-navigation.redirect: /guide/going-further/tooling
-# navigation.collapse: true
+navigation: false
+redirect: /guide/going-further/tooling
---
diff --git a/docs/content/2.guide/index.md b/docs/content/2.guide/index.md
index 78b0134f53..7c00ce8cee 100644
--- a/docs/content/2.guide/index.md
+++ b/docs/content/2.guide/index.md
@@ -1,6 +1,4 @@
---
-title: Guide
-layout.aside: true
-navigation.exclusive: true
-navigation.redirect: /guide/concepts/auto-imports
+navigation: false
+redirect: /guide/concepts/auto-imports
---
diff --git a/docs/content/3.api/1.composables/_dir.yml b/docs/content/3.api/1.composables/_dir.yml
new file mode 100644
index 0000000000..c9c5a6d5e8
--- /dev/null
+++ b/docs/content/3.api/1.composables/_dir.yml
@@ -0,0 +1,2 @@
+navigation.icon: heroicons-outline:switch-horizontal
+titleTemplate: '%s · Nuxt Composables'
diff --git a/docs/content/3.api/1.composables/use-app-config.md b/docs/content/3.api/1.composables/use-app-config.md
index d018007e56..5cf95e367a 100644
--- a/docs/content/3.api/1.composables/use-app-config.md
+++ b/docs/content/3.api/1.composables/use-app-config.md
@@ -1,6 +1,6 @@
# `useAppConfig`
-Access [app config](/guide/features/app-config):
+Access the reactive [app config](/guide/directory-structure/app.config) defined in the project.
**Usage:**
diff --git a/docs/content/3.api/1.composables/use-async-data.md b/docs/content/3.api/1.composables/use-async-data.md
index 6093917cc8..c462022791 100644
--- a/docs/content/3.api/1.composables/use-async-data.md
+++ b/docs/content/3.api/1.composables/use-async-data.md
@@ -1,3 +1,6 @@
+---
+description: useAsyncData provides access to data that resolves asynchronously.
+---
# `useAsyncData`
Within your pages, components, and plugins you can use useAsyncData to get access to data that resolves asynchronously.
diff --git a/docs/content/3.api/1.composables/use-cookie.md b/docs/content/3.api/1.composables/use-cookie.md
index 43a4eff732..dc75421a5f 100644
--- a/docs/content/3.api/1.composables/use-cookie.md
+++ b/docs/content/3.api/1.composables/use-cookie.md
@@ -1,15 +1,17 @@
+---
+description: useCookie is an SSR-friendly composable to read and write cookies.
+---
+
# `useCookie`
-Nuxt provides an SSR-friendly composable to read and write cookies.
-
-Within your pages, components and plugins you can use `useCookie` to create a reactive reference bound to a specific cookie.
+Within your pages, components and plugins you can use `useCookie`, an SSR-friendly composable to read and write cookies.
```js
const cookie = useCookie(name, options)
```
::alert{icon=👉}
-**`useCookie` only works during `setup` or `Lifecycle Hooks`**.
+`useCookie` only works during `setup` or `Lifecycle Hooks`.
::
::alert{icon=😌}
diff --git a/docs/content/3.api/1.composables/use-error.md b/docs/content/3.api/1.composables/use-error.md
index 5787fca623..e1e51dcc1e 100644
--- a/docs/content/3.api/1.composables/use-error.md
+++ b/docs/content/3.api/1.composables/use-error.md
@@ -1,7 +1,5 @@
# `useError`
-Nuxt provides a composable to catch global errors.
-
This function will return the global Nuxt error that is being handled.
```ts
diff --git a/docs/content/3.api/1.composables/use-fetch.md b/docs/content/3.api/1.composables/use-fetch.md
index c44b6e4f25..a5134fb7d6 100644
--- a/docs/content/3.api/1.composables/use-fetch.md
+++ b/docs/content/3.api/1.composables/use-fetch.md
@@ -1,6 +1,8 @@
# `useFetch`
-This composable provides a convenient wrapper around [`useAsyncData`](/api/composables/use-async-data) and [`$fetch`](/api/utils/$fetch). It automatically generates a key based on URL and fetch options, provides type hints for request url based on server routes, and infers API response type.
+This composable provides a convenient wrapper around [`useAsyncData`](/api/composables/use-async-data) and [`$fetch`](/api/utils/$fetch).
+
+It automatically generates a key based on URL and fetch options, provides type hints for request url based on server routes, and infers API response type.
## Type
diff --git a/docs/content/3.api/1.composables/use-head.md b/docs/content/3.api/1.composables/use-head.md
index 51a9db990d..11a2caa845 100644
--- a/docs/content/3.api/1.composables/use-head.md
+++ b/docs/content/3.api/1.composables/use-head.md
@@ -1,9 +1,13 @@
+---
+description: useHead customizes the head properties of individual pages of your Nuxt app.
+---
+
# `useHead`
-Nuxt provides the `useHead` composable to add and customize the head properties of individual pages of your Nuxt app. `useHead` uses [@vueuse/head](https://github.com/vueuse/head) under the hood.
+Nuxt provides the `useHead` composable to add and customize the head properties of individual pages of your Nuxt app. It uses [@vueuse/head](https://github.com/vueuse/head) under the hood.
::alert{icon=👉}
-**`useHead` must be placed within the `setup` function**.
+`useHead` only works during `setup` or `Lifecycle Hooks`.
::
## Type
diff --git a/docs/content/3.api/1.composables/use-hydration.md b/docs/content/3.api/1.composables/use-hydration.md
index eba45d775d..c3684b0811 100644
--- a/docs/content/3.api/1.composables/use-hydration.md
+++ b/docs/content/3.api/1.composables/use-hydration.md
@@ -1,5 +1,7 @@
# `useHydration`
+Allows full control of the hydration cycle to set and receive data from the server.
+
::ReadMore{link="/getting-started/data-fetching"}
::
diff --git a/docs/content/3.api/1.composables/use-lazy-async-data.md b/docs/content/3.api/1.composables/use-lazy-async-data.md
index 22ce1cfc04..c69279943d 100644
--- a/docs/content/3.api/1.composables/use-lazy-async-data.md
+++ b/docs/content/3.api/1.composables/use-lazy-async-data.md
@@ -1,11 +1,15 @@
+---
+description: This wrapper around useAsyncData triggers navigation immediately.
+---
+
# `useLazyAsyncData`
+`useLazyAsyncData` provides a wrapper around `useAsyncData` that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
+
## Description
By default, [useAsyncData](/api/composables/use-async-data) blocks navigation until its async handler is resolved.
-`useLazyAsyncData` provides a wrapper around `useAsyncData` that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
-
> `useLazyAsyncData` has the same signature as `useAsyncData`.
:ReadMore{link="/api/composables/use-async-data"}
diff --git a/docs/content/3.api/1.composables/use-lazy-fetch.md b/docs/content/3.api/1.composables/use-lazy-fetch.md
index e99e63b594..578d2dbb53 100644
--- a/docs/content/3.api/1.composables/use-lazy-fetch.md
+++ b/docs/content/3.api/1.composables/use-lazy-fetch.md
@@ -1,11 +1,15 @@
+---
+description: This wrapper around useFetch triggers navigation immediately.
+---
+
# `useLazyFetch`
+`useLazyFetch` provides a wrapper around `useFetch` that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
+
## Description
By default, [useFetch](/api/composables/use-fetch) blocks navigation until its async handler is resolved.
-`useLazyFetch` provides a wrapper around `useFetch` that triggers navigation before the handler is resolved by setting the `lazy` option to `true`.
-
> `useLazyFetch` has the same signature as `useFetch`.
:ReadMore{link="/api/composables/use-fetch"}
diff --git a/docs/content/3.api/1.composables/use-nuxt-app.md b/docs/content/3.api/1.composables/use-nuxt-app.md
index 46bb65acce..4e4af44efe 100644
--- a/docs/content/3.api/1.composables/use-nuxt-app.md
+++ b/docs/content/3.api/1.composables/use-nuxt-app.md
@@ -14,7 +14,7 @@ You can use `useNuxtApp()` within composables, plugins and components.
### `provide (name, value)`
-`nuxtApp` is a runtime context that you can extend using [Nuxt plugins](https://v3.nuxtjs.org/guide/directory-structure/plugins). You can use the `provide` function to create Nuxt plugins to make values and helper methods available in your Nuxt application across all composables and components.
+`nuxtApp` is a runtime context that you can extend using [Nuxt plugins](https://v3.nuxtjs.org/guide/directory-structure/plugins). Use the `provide` function to create Nuxt plugins to make values and helper methods available in your Nuxt application across all composables and components.
`provide` function accepts `name` and `value` parameters.
@@ -117,7 +117,7 @@ export default defineNuxtPlugin((nuxtApp) => {
### `isHydrating`
-You can use `nuxtApp.isHydrating` (boolean) to check if the Nuxt app is hydrating on the client side.
+Use `nuxtApp.isHydrating` (boolean) to check if the Nuxt app is hydrating on the client side.
**Example:**
diff --git a/docs/content/3.api/1.composables/use-request-event.md b/docs/content/3.api/1.composables/use-request-event.md
index 881dfc8801..54d1fb1a0a 100644
--- a/docs/content/3.api/1.composables/use-request-event.md
+++ b/docs/content/3.api/1.composables/use-request-event.md
@@ -1,6 +1,9 @@
-# `useRequestEvent`
+---
+title: "useRequestEvent"
+description: "You can use useRequestEvent to access the incoming request."
+---
-Nuxt provides composables and utilities for first-class server-side-rendering support.
+# `useRequestEvent`
Within your pages, components, and plugins you can use `useRequestEvent` to access the incoming request.
diff --git a/docs/content/3.api/1.composables/use-request-headers.md b/docs/content/3.api/1.composables/use-request-headers.md
index 3c944bb44d..90115ece83 100644
--- a/docs/content/3.api/1.composables/use-request-headers.md
+++ b/docs/content/3.api/1.composables/use-request-headers.md
@@ -1,6 +1,9 @@
-# `useRequestHeaders`
+---
+title: "useRequestHeaders"
+description: "Use useRequestHeaders to access the incoming request headers."
+---
-Nuxt provides composables and utilities for first-class server-side-rendering support.
+# `useRequestHeaders`
Within your pages, components, and plugins you can use `useRequestHeaders` to access the incoming request headers.
diff --git a/docs/content/3.api/1.composables/use-route.md b/docs/content/3.api/1.composables/use-route.md
index 202a9bd2d9..0d1f1f7146 100644
--- a/docs/content/3.api/1.composables/use-route.md
+++ b/docs/content/3.api/1.composables/use-route.md
@@ -1,3 +1,8 @@
+---
+title: "useRoute"
+description: The useRoute composable returns the current route.
+---
+
# `useRoute`
The `useRoute` composable returns the current route and must be called in a `setup` function, plugin, or route middleware.
diff --git a/docs/content/3.api/1.composables/use-router.md b/docs/content/3.api/1.composables/use-router.md
index 3c691fa202..36696c5499 100644
--- a/docs/content/3.api/1.composables/use-router.md
+++ b/docs/content/3.api/1.composables/use-router.md
@@ -1,6 +1,13 @@
+---
+title: "useRouter"
+description: "The useRouter composable returns the router instance."
+---
+
# `useRouter`
-The `useRouter` composable returns the router instance and must be called in a `setup` function, plugin, or route middleware. (Within the template of a Vue component, you can access the router using `$router` instead.)
+The useRouter composable returns the router instance and must be called in a setup function, plugin, or route middleware.
+
+Within the template of a Vue component, you can access the router using `$router` instead.
If you have a `pages/` folder, `useRouter` is identical in behavior to the one provided by `vue-router`. Feel free to read the router documentation for more information on what each method does.
diff --git a/docs/content/3.api/1.composables/use-state.md b/docs/content/3.api/1.composables/use-state.md
index 97d8000732..78fda837a3 100644
--- a/docs/content/3.api/1.composables/use-state.md
+++ b/docs/content/3.api/1.composables/use-state.md
@@ -1,3 +1,8 @@
+---
+title: "useState"
+description: The useState composable creates a reactive and SSR-friendly shared state.
+---
+
# `useState`
```ts
diff --git a/docs/content/3.api/2.components/1.nuxt-page.md b/docs/content/3.api/2.components/1.nuxt-page.md
index 6ea8b28eca..1419691bf5 100644
--- a/docs/content/3.api/2.components/1.nuxt-page.md
+++ b/docs/content/3.api/2.components/1.nuxt-page.md
@@ -1,6 +1,11 @@
+---
+title: ""
+description: The NuxtPage component is required to display pages located in the pages/ directory.
+---
+
# ``
- `` is a built-in component that comes with Nuxt. `NuxtPage` component is required to display top-level or nested pages located in the `/pages` directory.
+`` is a built-in component that comes with Nuxt. `NuxtPage` is required to display top-level or nested pages located in the `pages/` directory.
`NuxtPage` is a wrapper around [``](https://router.vuejs.org/api/#router-view-props) component from Vue Router. `NuxtPage` component accepts same `name` and `route` props.
diff --git a/docs/content/3.api/2.components/2.nuxt-layout.md b/docs/content/3.api/2.components/2.nuxt-layout.md
index 676a926301..2532da6a73 100644
--- a/docs/content/3.api/2.components/2.nuxt-layout.md
+++ b/docs/content/3.api/2.components/2.nuxt-layout.md
@@ -1,3 +1,7 @@
+---
+title: ""
+---
+
# ``
You can use ` ` component to activate `default` layout on `app.vue` or `error.vue`.
diff --git a/docs/content/3.api/2.components/4.nuxt-link.md b/docs/content/3.api/2.components/4.nuxt-link.md
index b113d9e1c3..cf73bff0f3 100644
--- a/docs/content/3.api/2.components/4.nuxt-link.md
+++ b/docs/content/3.api/2.components/4.nuxt-link.md
@@ -1,3 +1,8 @@
+---
+title: ""
+description: "Nuxt provides component to handle any kind of links within your application."
+---
+
# ``
Nuxt provides `` component to handle any kind of links within your application.
diff --git a/docs/content/3.api/2.components/4.nuxt-loading-indicator.md b/docs/content/3.api/2.components/4.nuxt-loading-indicator.md
index 517d5602e3..7209f48232 100644
--- a/docs/content/3.api/2.components/4.nuxt-loading-indicator.md
+++ b/docs/content/3.api/2.components/4.nuxt-loading-indicator.md
@@ -1,6 +1,6 @@
# ``
-Nuxt provides `` to display a progress bar on page navigation.
+The `` component displays a progress bar on page navigation.
## Examples
diff --git a/docs/content/3.api/2.components/5.nuxt-error-boundary.md b/docs/content/3.api/2.components/5.nuxt-error-boundary.md
index ae4b8c2ffa..b44ce11299 100644
--- a/docs/content/3.api/2.components/5.nuxt-error-boundary.md
+++ b/docs/content/3.api/2.components/5.nuxt-error-boundary.md
@@ -1,6 +1,11 @@
+---
+title: ""
+description: The component handles client-side errors happening in its default slot.
+---
+
# ``
-Nuxt provides the `` component to handle client-side errors happening in its default slot, using Vue's [`onErrorCaptured` hook.](https://vuejs.org/api/composition-api-lifecycle.html#onerrorcaptured)
+The `` component handles client-side errors happening in its default slot, using Vue's [`onErrorCaptured` hook.](https://vuejs.org/api/composition-api-lifecycle.html#onerrorcaptured)
## Events
diff --git a/docs/content/3.api/2.components/6.nuxt-welcome.md b/docs/content/3.api/2.components/6.nuxt-welcome.md
index e0b5a31556..87cfff0b49 100644
--- a/docs/content/3.api/2.components/6.nuxt-welcome.md
+++ b/docs/content/3.api/2.components/6.nuxt-welcome.md
@@ -1,10 +1,14 @@
+---
+description: The `` component greets users in new projects made from the starter template.
+---
+
# ``
+The `` component greets users in new projects made from the starter template. It includes links to the Nuxt documentation, source code, and social media accounts.
+
::alert{type=info icon=🔎}
This component is part of [@nuxt/ui](https://github.com/nuxt/ui)
::
-Nuxt uses the `` component to greet users in new projects made from the starter template. It includes links to the Nuxt documentation, source code, and social media accounts.
-
::ReadMore{link="https://github.com/nuxt/ui" title="@nuxt/ui"}
::
diff --git a/docs/content/3.api/2.components/7.teleports.md b/docs/content/3.api/2.components/7.teleports.md
index a21541b7c2..fba5b53e87 100644
--- a/docs/content/3.api/2.components/7.teleports.md
+++ b/docs/content/3.api/2.components/7.teleports.md
@@ -1,8 +1,11 @@
+---
+description: The component teleports a component to a different location in the DOM.
+---
# ``
-Vue 3 provides the [`` component](https://vuejs.org/guide/built-ins/teleport.html) which allows content to be rendered elsewhere in the DOM, outside of the Vue application.
+The `` component teleports a component to a different location in the DOM.
-The `to` target of `` expects a CSS selector string or an actual DOM node. Nuxt currently has SSR support for teleports to `body` only, with client-side support for other targets using a `` wrapper.
+The `to` target of [``](https://vuejs.org/guide/built-ins/teleport.html) expects a CSS selector string or an actual DOM node. Nuxt currently has SSR support for teleports to `body` only, with client-side support for other targets using a `` wrapper.
## Example: `body` Teleport
diff --git a/docs/content/3.api/2.components/_dir.yml b/docs/content/3.api/2.components/_dir.yml
new file mode 100644
index 0000000000..cd765af82a
--- /dev/null
+++ b/docs/content/3.api/2.components/_dir.yml
@@ -0,0 +1,2 @@
+navigation.icon: heroicons-outline:cube
+titleTemplate: '%s · Nuxt Components'
diff --git a/docs/content/3.api/2.components/index.md b/docs/content/3.api/2.components/index.md
index f6f324dc85..b3ff4c1eef 100644
--- a/docs/content/3.api/2.components/index.md
+++ b/docs/content/3.api/2.components/index.md
@@ -1,6 +1,5 @@
---
-title: Components
-layout.aside: true
-layout.asideClass: ''
-navigation.redirect: /api/components/nuxt-page
+title: "Components"
+navigation: false
+redirect: /api/components/nuxt-page
---
diff --git a/docs/content/3.api/3.utils/$fetch.md b/docs/content/3.api/3.utils/$fetch.md
index 63adb2bb1c..35830f027b 100644
--- a/docs/content/3.api/3.utils/$fetch.md
+++ b/docs/content/3.api/3.utils/$fetch.md
@@ -1,10 +1,15 @@
+---
+title: "$fetch"
+description: Nuxt uses ohmyfetch to expose globally the $fetch helper for making HTTP requests.
+---
+
# `$fetch`
+Nuxt uses [ohmyfetch](https://github.com/unjs/ohmyfetch) to expose globally the `$fetch` helper for making HTTP requests within your Vue app or API routes.
+
::ReadMore{link="/getting-started/data-fetching"}
::
-Nuxt uses [ohmyfetch](https://github.com/unjs/ohmyfetch) to expose globally the `$fetch` helper for making HTTP requests within your Vue app or API routes.
-
During server-side rendering, calling `$fetch` to fetch your internal [API routes](/guide/directory-structure/server) will directly call the relevant function (emulating the request), **saving an additional API call**.
Note that `$fetch` is the preferred way to make HTTP calls in Nuxt 3 instead of [@nuxt/http](https://github.com/nuxt/http) and [@nuxtjs/axios](https://github.com/nuxt-community/axios-module) that are made for Nuxt 2.
diff --git a/docs/content/3.api/3.utils/_dir.yml b/docs/content/3.api/3.utils/_dir.yml
new file mode 100644
index 0000000000..9058e7c452
--- /dev/null
+++ b/docs/content/3.api/3.utils/_dir.yml
@@ -0,0 +1,2 @@
+titleTemplate: '%s · Nuxt Utils'
+navigation.icon: uil:adjust-circle
diff --git a/docs/content/3.api/3.utils/abort-navigation.md b/docs/content/3.api/3.utils/abort-navigation.md
index 119151b267..f8aff36ba8 100644
--- a/docs/content/3.api/3.utils/abort-navigation.md
+++ b/docs/content/3.api/3.utils/abort-navigation.md
@@ -1,3 +1,7 @@
+---
+title: "abortNavigation"
+---
+
# `abortNavigation`
`abortNavigation` is a helper function that prevents navigation from taking place and throws an error if one is set as a parameter.
diff --git a/docs/content/3.api/3.utils/add-route-middleware.md b/docs/content/3.api/3.utils/add-route-middleware.md
index 8add9a93d3..c73697864e 100644
--- a/docs/content/3.api/3.utils/add-route-middleware.md
+++ b/docs/content/3.api/3.utils/add-route-middleware.md
@@ -1,3 +1,8 @@
+---
+title: "addRouteMiddleware"
+description: addRouteMiddleware() is a helper function to dynamically add middleware in your application.
+---
+
# `addRouteMiddleware`
`addRouteMiddleware()` is a helper function to dynamically add route middleware in your Nuxt application.
@@ -60,7 +65,7 @@ export default defineNuxtPlugin(() => {
### Global Route Middleware
-You can set an optional, third argument `{ global: true }` to indicate whether the route middleware is global:
+Set an optional, third argument `{ global: true }` to indicate whether the route middleware is global:
```ts [plugins/my-plugin.ts]
export default defineNuxtPlugin(() => {
diff --git a/docs/content/3.api/3.utils/clear-error.md b/docs/content/3.api/3.utils/clear-error.md
index 4191a76756..6552d28f44 100644
--- a/docs/content/3.api/3.utils/clear-error.md
+++ b/docs/content/3.api/3.utils/clear-error.md
@@ -1,6 +1,9 @@
-# `clearError`
+---
+title: "clearError"
+description: "The clearError composable clears all handled errors."
+---
-Nuxt provides a composable to clear all handled errors.
+# `clearError`
Within your pages, components, and plugins, you can use `clearError` to clear all errors and redirect the user.
diff --git a/docs/content/3.api/3.utils/create-error.md b/docs/content/3.api/3.utils/create-error.md
index cdea2a6f8d..546e0905da 100644
--- a/docs/content/3.api/3.utils/create-error.md
+++ b/docs/content/3.api/3.utils/create-error.md
@@ -1,3 +1,7 @@
+---
+description: You can use this function to create an error object with additional metadata.
+---
+
# `createError`
You can use this function to create an error object with additional metadata. It is usable in both the Vue and Nitro portions of your app, and is meant to be thrown.
@@ -27,7 +31,7 @@ if (!data.value) {
## Throwing Errors in API Routes
-You can use `createError` to trigger error handling in server API routes.
+Use `createError` to trigger error handling in server API routes.
### Example
diff --git a/docs/content/3.api/3.utils/define-nuxt-component.md b/docs/content/3.api/3.utils/define-nuxt-component.md
index ed55f5edeb..49c0960b9b 100644
--- a/docs/content/3.api/3.utils/define-nuxt-component.md
+++ b/docs/content/3.api/3.utils/define-nuxt-component.md
@@ -1,3 +1,8 @@
+---
+title: "defineNuxtComponent"
+description: defineNuxtComponent() is a helper function for defining type safe components with Options API.
+---
+
# `defineNuxtComponent`
`defineNuxtComponent()` is a helper function for defining type safe Vue components using options API similar to [defineComponent()](https://vuejs.org/api/general.html#definecomponent). `defineNuxtComponent()` wrapper also adds support for `asyncData` component option.
diff --git a/docs/content/3.api/3.utils/define-nuxt-route-middleware.md b/docs/content/3.api/3.utils/define-nuxt-route-middleware.md
index 747bf5f607..50a5b065a2 100644
--- a/docs/content/3.api/3.utils/define-nuxt-route-middleware.md
+++ b/docs/content/3.api/3.utils/define-nuxt-route-middleware.md
@@ -1,6 +1,10 @@
+---
+title: "defineNuxtRouteMiddleware"
+---
+
# `defineNuxtRouteMiddleware`
-You can create named route middleware using `defineNuxtRouteMiddleware` helper function.
+Create named route middleware using `defineNuxtRouteMiddleware` helper function.
Route middleware are stored in the `middleware/` directory of your Nuxt application (unless [set otherwise](/api/configuration/nuxt.config#middleware)).
@@ -42,7 +46,7 @@ The above route middleware will redirect a user to the custom error page defined
### Redirection
-You can use `useState` in combination with `navigateTo` helper function inside the route middleware to redirect users to different routes based on their authentication status:
+Use `useState` in combination with `navigateTo` helper function inside the route middleware to redirect users to different routes based on their authentication status:
```ts [middleware/auth.ts]
export default defineNuxtRouteMiddleware((to, from) => {
diff --git a/docs/content/3.api/3.utils/define-page-meta.md b/docs/content/3.api/3.utils/define-page-meta.md
index ef8ef33ec9..296fbaa1da 100644
--- a/docs/content/3.api/3.utils/define-page-meta.md
+++ b/docs/content/3.api/3.utils/define-page-meta.md
@@ -1,3 +1,7 @@
+---
+title: "definePageMeta"
+---
+
# `definePageMeta`
`definePageMeta` is a compiler macro that you can use to set metadata for your **page** components located in the `pages/` directory (unless [set otherwise](https://v3.nuxtjs.org/api/configuration/nuxt.config#pages)). This way you can set custom metadata for each static or dynamic route of your Nuxt application.
diff --git a/docs/content/3.api/3.utils/index.md b/docs/content/3.api/3.utils/index.md
index a9141cab53..a9369a314b 100644
--- a/docs/content/3.api/3.utils/index.md
+++ b/docs/content/3.api/3.utils/index.md
@@ -1,6 +1,5 @@
---
-title: Utils
-layout.aside: true
-layout.asideClass: ''
-navigation.redirect: /api/utils/
+title: "Utils"
+navigation: false
+redirect: /api/utils/
---
diff --git a/docs/content/3.api/3.utils/navigate-to.md b/docs/content/3.api/3.utils/navigate-to.md
index 80c1de2fc9..c00fc6b8a8 100644
--- a/docs/content/3.api/3.utils/navigate-to.md
+++ b/docs/content/3.api/3.utils/navigate-to.md
@@ -1,3 +1,8 @@
+---
+title: "navigateTo"
+description: navigateTo is a helper function that programmatically navigates users.
+---
+
# `navigateTo`
`navigateTo` is a router helper function that allows programmatically navigating users through your Nuxt application.
diff --git a/docs/content/3.api/1.composables/prefetch-components.md b/docs/content/3.api/3.utils/prefetch-components.md
similarity index 72%
rename from docs/content/3.api/1.composables/prefetch-components.md
rename to docs/content/3.api/3.utils/prefetch-components.md
index 971042002a..a02bc428ff 100644
--- a/docs/content/3.api/1.composables/prefetch-components.md
+++ b/docs/content/3.api/3.utils/prefetch-components.md
@@ -1,10 +1,14 @@
+---
+description: Nuxt provides utilities to give you control over prefetching and preloading components.
+---
+
# `prefetchComponents`
Nuxt provides composables and utilities to give you fine-grained control over prefetching and preloading components.
> Prefetching component downloads the code in the background, this is based on the assumption that the component will likely be used for rendering, enabling the component to load instantly if and when the user requests it. The component is downloaded and cached for anticipated future use without the user making an explicit request for it.
-You can use `prefetchComponents` to manually prefetch individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
+Use `prefetchComponents` to manually prefetch individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
```js
await prefetchComponents('MyGlobalComponent')
diff --git a/docs/content/3.api/1.composables/preload-components.md b/docs/content/3.api/3.utils/preload-components.md
similarity index 63%
rename from docs/content/3.api/1.composables/preload-components.md
rename to docs/content/3.api/3.utils/preload-components.md
index 5bbbb25308..9d85800aba 100644
--- a/docs/content/3.api/1.composables/preload-components.md
+++ b/docs/content/3.api/3.utils/preload-components.md
@@ -1,10 +1,14 @@
+---
+description: Nuxt provides utilities to give you control over prefetching and preloading components.
+---
+
# `preloadComponents`
Nuxt provides composables and utilities to give you fine-grained control over prefetching and preloading components.
> Preloading components loads components that your page will need very soon, which you want to start loading early in rendering lifecycle. This ensures they are available earlier and are less likely to block the page's render, improving performance.
-You can use `preloadComponents` to manually preload individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
+Use `preloadComponents` to manually preload individual components that have been registered globally in your Nuxt app. (By default Nuxt registers these as async components.) You must use the Pascal-cased version of the component name.
```js
await preloadComponents('MyGlobalComponent')
diff --git a/docs/content/3.api/3.utils/refresh-nuxt-data.md b/docs/content/3.api/3.utils/refresh-nuxt-data.md
index 6c38fb6fa3..6e1bd435a0 100644
--- a/docs/content/3.api/3.utils/refresh-nuxt-data.md
+++ b/docs/content/3.api/3.utils/refresh-nuxt-data.md
@@ -1,5 +1,12 @@
+---
+title: "refreshNuxtData"
+description: refreshNuxtData refetches all data from the server and updates the page.
+---
+
# `refreshNuxtData`
+`refreshNuxtData` refetches all data from the server and updates the page.
+
::ReadMore{link="/getting-started/data-fetching"}
::
diff --git a/docs/content/3.api/1.composables/set-layout.md b/docs/content/3.api/3.utils/set-layout.md
similarity index 86%
rename from docs/content/3.api/1.composables/set-layout.md
rename to docs/content/3.api/3.utils/set-layout.md
index 893ac0a602..41ca0f02d9 100644
--- a/docs/content/3.api/1.composables/set-layout.md
+++ b/docs/content/3.api/3.utils/set-layout.md
@@ -1,3 +1,6 @@
+---
+description: setPageLayout allows you to dynamically change the layout of a page.
+---
# `setPageLayout`
`setPageLayout` allows you to dynamically change the layout of a page. It relies on access to the Nuxt context and can only be called within components' setup functions, plugins, and route middleware.
diff --git a/docs/content/3.api/1.composables/set-response-status.md b/docs/content/3.api/3.utils/set-response-status.md
similarity index 69%
rename from docs/content/3.api/1.composables/set-response-status.md
rename to docs/content/3.api/3.utils/set-response-status.md
index 349993ea73..1fe99a6b70 100644
--- a/docs/content/3.api/1.composables/set-response-status.md
+++ b/docs/content/3.api/3.utils/set-response-status.md
@@ -1,8 +1,11 @@
+---
+description: setResponseStatus sets the statusCode (and optionally the statusMessage) of the response.
+---
# `setResponseStatus`
Nuxt provides composables and utilities for first-class server-side-rendering support.
-You can use `setResponseStatus` to set the statusCode (and optionally the statusMessage) of the response.
+`setResponseStatus` sets the statusCode (and optionally the statusMessage) of the response.
`setResponseStatus` can only be called within component setup functions, plugins, and route middleware.
diff --git a/docs/content/3.api/1.composables/update-app-config.md b/docs/content/3.api/3.utils/update-app-config.md
similarity index 100%
rename from docs/content/3.api/1.composables/update-app-config.md
rename to docs/content/3.api/3.utils/update-app-config.md
diff --git a/docs/content/3.api/4.advanced/1.hooks.md b/docs/content/3.api/4.advanced/1.hooks.md
index a55c987818..a0ad009cab 100644
--- a/docs/content/3.api/4.advanced/1.hooks.md
+++ b/docs/content/3.api/4.advanced/1.hooks.md
@@ -1,3 +1,8 @@
+---
+title: "Lifecycle Hooks"
+description: Nuxt provides a powerful hooking system to expand almost every aspect using hooks.
+---
+
# Lifecycle Hooks
:ReadMore{link="/guide/going-further/hooks"}
diff --git a/docs/content/3.api/4.advanced/2.kit.md b/docs/content/3.api/4.advanced/2.kit.md
index ecafb3c682..e7e43f096b 100644
--- a/docs/content/3.api/4.advanced/2.kit.md
+++ b/docs/content/3.api/4.advanced/2.kit.md
@@ -1,3 +1,8 @@
+---
+title: "Kit Utilities"
+description: Nuxt Kit provides composable utilities to help interacting with Nuxt Hooks and Nuxt Builder.
+---
+
# Kit Utilities
::ReadMore{link="/guide/going-further/kit"}
diff --git a/docs/content/3.api/4.advanced/_dir.yml b/docs/content/3.api/4.advanced/_dir.yml
new file mode 100644
index 0000000000..ccf31e1ad8
--- /dev/null
+++ b/docs/content/3.api/4.advanced/_dir.yml
@@ -0,0 +1 @@
+navigation.icon: uil:cell
diff --git a/docs/content/3.api/5.commands/_dir.yml b/docs/content/3.api/5.commands/_dir.yml
new file mode 100644
index 0000000000..fda7427111
--- /dev/null
+++ b/docs/content/3.api/5.commands/_dir.yml
@@ -0,0 +1 @@
+navigation.icon: uil:caret-right
diff --git a/docs/content/3.api/5.commands/add.md b/docs/content/3.api/5.commands/add.md
index b606f1e2e3..a7b2589eba 100644
--- a/docs/content/3.api/5.commands/add.md
+++ b/docs/content/3.api/5.commands/add.md
@@ -1,6 +1,9 @@
-# `nuxi add`
+---
+title: "nuxi add"
+description: "Scaffold an entity into your Nuxt application."
+---
-Scaffold an entity into your Nuxt application.
+# `nuxi add`
```{bash}
npx nuxi add [--cwd] [--force]
diff --git a/docs/content/3.api/5.commands/analyze.md b/docs/content/3.api/5.commands/analyze.md
index a0fb9e463f..6a66fdf28d 100644
--- a/docs/content/3.api/5.commands/analyze.md
+++ b/docs/content/3.api/5.commands/analyze.md
@@ -1,6 +1,9 @@
-# `nuxi analyze`
+---
+title: "nuxi analyze"
+description: "Analyze the production bundle or your Nuxt application."
+---
-Analyze the production bundle or your Nuxt application.
+# `nuxi analyze`
```{bash}
npx nuxi analyze [rootDir]
diff --git a/docs/content/3.api/5.commands/build.md b/docs/content/3.api/5.commands/build.md
index 696f3e8a72..2034f1ea01 100644
--- a/docs/content/3.api/5.commands/build.md
+++ b/docs/content/3.api/5.commands/build.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi build"
+description: "Build your Nuxt application."
+---
+
# `nuxi build`
```{bash}
diff --git a/docs/content/3.api/5.commands/cleanup.md b/docs/content/3.api/5.commands/cleanup.md
index 5251f51700..2e37dcd197 100644
--- a/docs/content/3.api/5.commands/cleanup.md
+++ b/docs/content/3.api/5.commands/cleanup.md
@@ -1,3 +1,6 @@
+---
+description: "Remove common generated Nuxt files and caches."
+---
# `nuxi cleanup`
```{bash}
diff --git a/docs/content/3.api/5.commands/dev.md b/docs/content/3.api/5.commands/dev.md
index fc74a0d5b0..ce4dfab513 100644
--- a/docs/content/3.api/5.commands/dev.md
+++ b/docs/content/3.api/5.commands/dev.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi dev"
+description: The dev command starts a development server with hot module replacement at http://localhost:3000
+---
+
# `nuxi dev`
```{bash}
diff --git a/docs/content/3.api/5.commands/generate.md b/docs/content/3.api/5.commands/generate.md
index c81d9e05d2..4965034a33 100644
--- a/docs/content/3.api/5.commands/generate.md
+++ b/docs/content/3.api/5.commands/generate.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi generate"
+description: Pre-renders every route of the application and stores the result in plain HTML files.
+---
+
# `nuxi generate`
```{bash}
diff --git a/docs/content/3.api/5.commands/info.md b/docs/content/3.api/5.commands/info.md
index 9bb9ab0f7b..12519e7b00 100644
--- a/docs/content/3.api/5.commands/info.md
+++ b/docs/content/3.api/5.commands/info.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi info"
+description: The info command logs information about the current or specified Nuxt project.
+---
+
# `nuxi info`
```{bash}
diff --git a/docs/content/3.api/5.commands/init.md b/docs/content/3.api/5.commands/init.md
index 2c1cc4115d..345373f496 100644
--- a/docs/content/3.api/5.commands/init.md
+++ b/docs/content/3.api/5.commands/init.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi init"
+description: The init command initializes a fresh Nuxt project.
+---
+
# `nuxi init`
```{bash}
diff --git a/docs/content/3.api/5.commands/prepare.md b/docs/content/3.api/5.commands/prepare.md
index 1a3aca4e9d..788fab4442 100644
--- a/docs/content/3.api/5.commands/prepare.md
+++ b/docs/content/3.api/5.commands/prepare.md
@@ -1,3 +1,6 @@
+---
+description: The prepare command creates a .nuxt directory in your application and generates types.
+---
# `nuxi prepare`
```{bash}
diff --git a/docs/content/3.api/5.commands/preview.md b/docs/content/3.api/5.commands/preview.md
index 4b86222e99..bd674166c6 100644
--- a/docs/content/3.api/5.commands/preview.md
+++ b/docs/content/3.api/5.commands/preview.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi preview"
+description: The preview command starts a server to preview your application after the build command.
+---
+
# `nuxi preview`
```{bash}
diff --git a/docs/content/3.api/5.commands/typecheck.md b/docs/content/3.api/5.commands/typecheck.md
index 23d5a0a1e7..ce80b78e49 100644
--- a/docs/content/3.api/5.commands/typecheck.md
+++ b/docs/content/3.api/5.commands/typecheck.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi typecheck"
+description: The typecheck command runs vue-tsc to check types throughout your app.
+---
+
# `nuxi typecheck`
```{bash}
diff --git a/docs/content/3.api/5.commands/upgrade.md b/docs/content/3.api/5.commands/upgrade.md
index eea68bc79a..eb86321bd5 100644
--- a/docs/content/3.api/5.commands/upgrade.md
+++ b/docs/content/3.api/5.commands/upgrade.md
@@ -1,3 +1,8 @@
+---
+title: "nuxi upgrade"
+description: The upgrade command upgrades Nuxt 3 to the latest version.
+---
+
# `nuxi upgrade`
```{bash}
diff --git a/docs/content/3.api/6.configuration/_dir.yml b/docs/content/3.api/6.configuration/_dir.yml
new file mode 100644
index 0000000000..8b01f4c7f0
--- /dev/null
+++ b/docs/content/3.api/6.configuration/_dir.yml
@@ -0,0 +1 @@
+navigation.icon: uil:wrench
diff --git a/docs/content/3.api/_dir.yml b/docs/content/3.api/_dir.yml
new file mode 100644
index 0000000000..04d91e0c59
--- /dev/null
+++ b/docs/content/3.api/_dir.yml
@@ -0,0 +1 @@
+title: API
diff --git a/docs/content/3.api/index.md b/docs/content/3.api/index.md
index 878c49fff0..470c3679d8 100644
--- a/docs/content/3.api/index.md
+++ b/docs/content/3.api/index.md
@@ -1,7 +1,4 @@
---
-title: References
-layout.aside: true
-navigation.exclusive: true
-navigation.collapse: true
-navigation.redirect: /api/composables/prefetch-components
+navigation: false
+redirect: /api/composables/use-app-config
---
diff --git a/docs/content/4.examples/0.essentials/hello-world.md b/docs/content/4.examples/0.essentials/hello-world.md
index 51ab227ac0..69586e6201 100644
--- a/docs/content/4.examples/0.essentials/hello-world.md
+++ b/docs/content/4.examples/0.essentials/hello-world.md
@@ -1,12 +1,13 @@
---
-template: Example
+title: "Hello World"
+description: "A minimal Nuxt 3 application only requires the `app.vue` and `nuxt.config.js` files."
+toc: false
---
-# Hello World
-
A minimal Nuxt 3 application only requires the `app.vue` and `nuxt.config.js` files.
::ReadMore{link="/getting-started/introduction"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/essentials/hello-world" file="app.vue"}
+::
diff --git a/docs/content/4.examples/1.app/error-handling.md b/docs/content/4.examples/1.app/error-handling.md
index 0d9185f34f..9488e6a23b 100644
--- a/docs/content/4.examples/1.app/error-handling.md
+++ b/docs/content/4.examples/1.app/error-handling.md
@@ -1,5 +1,7 @@
---
-template: Example
+title: "Error Handling"
+description: "This example shows how to handle errors in different contexts: pages, plugins, components and middleware."
+toc: false
---
# Error Handling
@@ -10,3 +12,4 @@ This example shows how to handle errors in different contexts: pages, plugins, c
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/app/error-handling" file="app.vue"}
+::
diff --git a/docs/content/4.examples/1.app/plugins.md b/docs/content/4.examples/1.app/plugins.md
index 94c1e34682..6f69ab876d 100644
--- a/docs/content/4.examples/1.app/plugins.md
+++ b/docs/content/4.examples/1.app/plugins.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "Plugins"
+description: "This example shows how to use the plugins/ directory to auto-register plugins."
+toc: false
---
-# Plugins
-
-This example shows how to use the `plugins/` directory to auto-register plugins.
-
::ReadMore{link="/guide/directory-structure/plugins"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/app/plugins" file="app.vue"}
+::
diff --git a/docs/content/4.examples/1.app/teleport.md b/docs/content/4.examples/1.app/teleport.md
index 4bcdd0e6f4..274ac11847 100644
--- a/docs/content/4.examples/1.app/teleport.md
+++ b/docs/content/4.examples/1.app/teleport.md
@@ -1,9 +1,9 @@
---
-template: Example
+title: "Teleport"
+description: "This example shows how to use the with client-side and server-side rendering."
+toc: false
---
-# Teleport
-
Vue 3 provides the [`` component](https://vuejs.org/guide/built-ins/teleport.html) which allows content to be rendered elsewhere in the DOM, outside of the Vue application.
This example shows how to use the `` with client-side and server-side rendering.
@@ -12,3 +12,4 @@ This example shows how to use the `` with client-side and server-side
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/app/teleport" file="app.vue"}
+::
diff --git a/docs/content/4.examples/2.auto-imports/components.md b/docs/content/4.examples/2.auto-imports/components.md
index 5cf49ee3db..1f881164df 100644
--- a/docs/content/4.examples/2.auto-imports/components.md
+++ b/docs/content/4.examples/2.auto-imports/components.md
@@ -1,13 +1,13 @@
---
-template: Example
+title: "Components"
+description: "You can configure other directories to support components auto-imports."
+toc: false
---
-# Components
-
Components in the `components/` directory are auto-imported and can be used directly in your templates.
-You can configure other directories to support components auto-imports.
::ReadMore{link="/guide/directory-structure/components"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/auto-imports/components" file="app.vue"}
+::
diff --git a/docs/content/4.examples/2.auto-imports/composables.md b/docs/content/4.examples/2.auto-imports/composables.md
index b2016e200d..babd706eb0 100644
--- a/docs/content/4.examples/2.auto-imports/composables.md
+++ b/docs/content/4.examples/2.auto-imports/composables.md
@@ -1,13 +1,13 @@
---
-template: Example
+title: "Composables"
+description: "This example shows how to use the composables/ directory to auto-import composables."
+toc: false
---
-# Composables
-
-This example shows how to use the `composables/` directory to auto-import composables.
If the component file provides a default export, the name of the composable will be mapped to the name of the file. Named exports can be used as-is.
::ReadMore{link="/guide/directory-structure/composables"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/auto-imports/composables" file="app.vue"}
+::
diff --git a/docs/content/4.examples/3.composables/use-async-data.md b/docs/content/4.examples/3.composables/use-async-data.md
index e8c278988a..9a98adc237 100644
--- a/docs/content/4.examples/3.composables/use-async-data.md
+++ b/docs/content/4.examples/3.composables/use-async-data.md
@@ -1,11 +1,9 @@
---
-template: Example
+title: "useAsyncData"
+description: "This example shows how to use useAsyncData to fetch data from an API endpoint."
+toc: false
---
-# `useAsyncData`
-
-This example shows how to use `useAsyncData` to fetch data from an API endpoint.
-
::alert{type=info icon=💡}
Nuxt will automatically read files in the `~/server/api` directory to create API endpoints.
::
@@ -17,3 +15,4 @@ Nuxt will automatically read files in the `~/server/api` directory to create API
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/composables/use-async-data" file="app.vue"}
+::
diff --git a/docs/content/4.examples/3.composables/use-cookie.md b/docs/content/4.examples/3.composables/use-cookie.md
index fd0d795727..8d3ffc8f14 100644
--- a/docs/content/4.examples/3.composables/use-cookie.md
+++ b/docs/content/4.examples/3.composables/use-cookie.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "useCookie"
+description: "This example shows how to use the useCookie API to persist small amounts of data that both client and server can use."
+toc: false
---
-# `useCookie`
-
-This example shows how to use the `useCookie` API to persist small amounts of data that both client and server can use.
-
::ReadMore{link="/api/composables/use-cookie"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/composables/use-cookie" file="app.vue"}
+::
diff --git a/docs/content/4.examples/3.composables/use-fetch.md b/docs/content/4.examples/3.composables/use-fetch.md
index 113df4d337..3bdfede2eb 100644
--- a/docs/content/4.examples/3.composables/use-fetch.md
+++ b/docs/content/4.examples/3.composables/use-fetch.md
@@ -1,11 +1,9 @@
---
-template: Example
+title: "useFetch"
+description: "This example shows how to use useFetch to fetch data from an API endpoint."
+toc: false
---
-# `useFetch`
-
-This example shows how to use `useFetch` to fetch data from an API endpoint.
-
::alert{type=info icon=💡}
Nuxt will automatically read files in the `~/server/api` directory to create API endpoints.
::
@@ -17,3 +15,4 @@ Nuxt will automatically read files in the `~/server/api` directory to create API
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/composables/use-fetch" file="app.vue"}
+::
diff --git a/docs/content/4.examples/3.composables/use-head.md b/docs/content/4.examples/3.composables/use-head.md
index 265afafb8d..2f5d60c61b 100644
--- a/docs/content/4.examples/3.composables/use-head.md
+++ b/docs/content/4.examples/3.composables/use-head.md
@@ -1,11 +1,9 @@
---
-template: Example
+toc: false
+description: "This example shows how to use useHead and Nuxt built-in components to bind meta data to the head of the page."
+title: "useHead"
---
-# `useHead`
-
-This example shows how to use `useHead` and Nuxt built-in components to bind meta data to the head of the page.
-
::alert{type=info icon=👉}
Learn more about [meta tags](/guide/features/head-management#meta-components).
::
@@ -17,3 +15,4 @@ Learn more about [meta tags](/guide/features/head-management#meta-components).
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/composables/use-head" file="app.vue"}
+::
diff --git a/docs/content/4.examples/3.composables/use-state.md b/docs/content/4.examples/3.composables/use-state.md
index d216941ffb..2bbb42ec34 100644
--- a/docs/content/4.examples/3.composables/use-state.md
+++ b/docs/content/4.examples/3.composables/use-state.md
@@ -1,10 +1,10 @@
---
-template: Example
+title: "useState"
+description: "useState is an SSR-friendly ref replacement."
+toc: false
---
-# `useState`
-
-`useState` is an SSR-friendly ref replacement. Its value will be preserved after server-side rendering and shared across all components using a unique key.
+Its value will be preserved after server-side rendering and shared across all components using a unique key.
::alert{type=info icon=👉}
Learn more about [useState](/api/composables/use-state).
@@ -17,3 +17,4 @@ Learn more about [useState](/api/composables/use-state).
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/composables/use-state" file="app.vue"}
+::
diff --git a/docs/content/4.examples/4.routing/layouts.md b/docs/content/4.examples/4.routing/layouts.md
index 811a49a264..fc4c715b91 100644
--- a/docs/content/4.examples/4.routing/layouts.md
+++ b/docs/content/4.examples/4.routing/layouts.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "Layouts"
+description: "This example shows how to define default and custom layouts."
+toc: false
---
-# Layouts
-
-This example shows how to define default and custom layouts.
-
::ReadMore{link="/guide/directory-structure/layouts"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/routing/layouts" file="pages/index.vue"}
+::
diff --git a/docs/content/4.examples/4.routing/middleware.md b/docs/content/4.examples/4.routing/middleware.md
index 5e51d53b76..863f19edd6 100644
--- a/docs/content/4.examples/4.routing/middleware.md
+++ b/docs/content/4.examples/4.routing/middleware.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "Middleware"
+description: "This example shows how to add route middleware with the middleware/ directory or with a plugin, and how to use them globally or per page."
+toc: false
---
-# Middleware
-
-This example shows how to add route middleware with the `middleware/` directory or with a plugin, and how to use them globally or per page.
-
::ReadMore{link="/guide/directory-structure/middleware"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/routing/middleware" file="app.vue"}
+::
diff --git a/docs/content/4.examples/4.routing/nuxt-link.md b/docs/content/4.examples/4.routing/nuxt-link.md
index 0fa4b9be6f..a4c7f0e5b2 100644
--- a/docs/content/4.examples/4.routing/nuxt-link.md
+++ b/docs/content/4.examples/4.routing/nuxt-link.md
@@ -1,11 +1,9 @@
---
-template: Example
+title: ""
+description: "This example shows different ways to use ."
+toc: false
---
-# ``
-
-This example shows different ways to use ``.
-
::alert{type=info icon=💡}
`components/MyNuxtLink.ts` defines a custom ``.
::
@@ -14,3 +12,4 @@ This example shows different ways to use ``.
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/routing/nuxt-link" file="app.vue"}
+::
diff --git a/docs/content/4.examples/4.routing/pages.md b/docs/content/4.examples/4.routing/pages.md
index 9852b128fb..9276619bea 100644
--- a/docs/content/4.examples/4.routing/pages.md
+++ b/docs/content/4.examples/4.routing/pages.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "Pages"
+description: "This example shows how to use the pages/ directory to create application routes."
+toc: false
---
-# Pages
-
-This example shows how to use the `pages/` directory to create application routes.
-
::ReadMore{link="/guide/directory-structure/pages"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/routing/pages" file="app.vue"}
+::
diff --git a/docs/content/4.examples/4.routing/universal-router.md b/docs/content/4.examples/4.routing/universal-router.md
index f52df48370..30a8533742 100644
--- a/docs/content/4.examples/4.routing/universal-router.md
+++ b/docs/content/4.examples/4.routing/universal-router.md
@@ -1,5 +1,7 @@
---
-template: Example
+title: "Universal Router"
+description: "This example demonstrates Nuxt universal routing utilities without depending on pages/ and vue-router."
+toc: false
---
# Universal Router
@@ -7,3 +9,4 @@ template: Example
This example demonstrates Nuxt universal routing utilities without depending on `pages/` and `vue-router`.
::sandbox{repo="nuxt/framework" branch="main" dir="examples/routing/universal-router" file="app.vue"}
+::
diff --git a/docs/content/4.examples/5.server/routes.md b/docs/content/4.examples/5.server/routes.md
index ea49a72874..d2a093ac06 100644
--- a/docs/content/4.examples/5.server/routes.md
+++ b/docs/content/4.examples/5.server/routes.md
@@ -1,5 +1,7 @@
---
-template: Example
+title: "Server Routes"
+description: "This example shows how to create server routes inside the server/api directory."
+toc: false
---
# Server Routes
@@ -10,3 +12,4 @@ This example shows how to create server routes inside the `server/api` directory
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/server/routes" file="app.vue"}
+::
diff --git a/docs/content/4.examples/6.advanced/config-extends.md b/docs/content/4.examples/6.advanced/config-extends.md
index 697d20a8f1..e8f93e6aa8 100644
--- a/docs/content/4.examples/6.advanced/config-extends.md
+++ b/docs/content/4.examples/6.advanced/config-extends.md
@@ -1,9 +1,10 @@
---
-template: Example
+title: "Config Extends"
+description: "This example shows how to use the extends key in nuxt.config.ts."
+toc: false
---
-# Config Extends
-
This example shows how to use the `extends` key in nuxt.config.ts to use the `base/` directory as a base Nuxt application, and use its components, composables or config and override them if necessary.
::sandbox{repo="nuxt/framework" branch="main" dir="examples/advanced/config-extends" file="nuxt.config.ts"}
+::
diff --git a/docs/content/4.examples/6.advanced/module-extend-pages.md b/docs/content/4.examples/6.advanced/module-extend-pages.md
index a6960120fb..36bac69820 100644
--- a/docs/content/4.examples/6.advanced/module-extend-pages.md
+++ b/docs/content/4.examples/6.advanced/module-extend-pages.md
@@ -1,12 +1,13 @@
---
-template: Example
+title: "Module Extend Pages"
+description: "This example defines a new test page using extendPages within a module."
+toc: false
---
-# Module Extend Pages
-
This example defines a new `test` page using `extendPages` within a module.
::ReadMore{link="/guide/going-further/modules"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/advanced/module-extend-pages" file="pages/index.vue"}
+::
diff --git a/docs/content/4.examples/6.advanced/testing.md b/docs/content/4.examples/6.advanced/testing.md
index 797138966a..659227d76f 100644
--- a/docs/content/4.examples/6.advanced/testing.md
+++ b/docs/content/4.examples/6.advanced/testing.md
@@ -1,9 +1,9 @@
---
-template: Example
+title: "Testing"
+description: "This example shows how to test your Nuxt application."
+toc: false
---
-# Testing
-
::alert{type=info icon=👉}
Learn more about [testing](/guide/going-further/testing).
::
@@ -12,3 +12,4 @@ Learn more about [testing](/guide/going-further/testing).
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/advanced/testing" file="app.vue"}
+::
diff --git a/docs/content/4.examples/7.experimental/reactivity-transform.md b/docs/content/4.examples/7.experimental/reactivity-transform.md
index defdc91f2c..cdda17773e 100644
--- a/docs/content/4.examples/7.experimental/reactivity-transform.md
+++ b/docs/content/4.examples/7.experimental/reactivity-transform.md
@@ -1,12 +1,11 @@
---
-template: Example
+title: "Reactivity Transform"
+description: "This example demonstrates the support of Reactivity Transform in Nuxt 3."
+toc: false
---
-# Reactivity Transform
-
-This example demonstrates the support of Reactivity Transform in Nuxt 3.
-
::ReadMore{link="https://vuejs.org/guide/extras/reactivity-transform.html" title="Reactivity Transform"}
::
::sandbox{repo="nuxt/framework" branch="main" dir="examples/experimental/reactivity-transform" file="app.vue"}
+::
diff --git a/docs/content/4.examples/7.experimental/wasm.md b/docs/content/4.examples/7.experimental/wasm.md
index 6dd502905a..3607c6ec72 100644
--- a/docs/content/4.examples/7.experimental/wasm.md
+++ b/docs/content/4.examples/7.experimental/wasm.md
@@ -1,9 +1,8 @@
---
-template: Example
+title: "WASM"
+description: "This example demonstrates the server-side support of WebAssembly in Nuxt 3."
+toc: false
---
-# Wasm
-
-This example demonstrates the server-side support of WebAssembly in Nuxt 3.
-
::sandbox{repo="nuxt/framework" branch="main" dir="examples/experimental/wasm" file="app.vue"}
+::
diff --git a/docs/content/4.examples/8.other/locale.md b/docs/content/4.examples/8.other/locale.md
index 1f9d0db992..f21a56fbce 100644
--- a/docs/content/4.examples/8.other/locale.md
+++ b/docs/content/4.examples/8.other/locale.md
@@ -1,11 +1,8 @@
---
-template: Example
+title: "Locale"
+description: "This example shows how to define a locale composable to handle the application's locale, both server and client side."
---
-# Locale
-
-This example shows how to define a locale composable to handle the application's locale, both server and client side.
-
::alert{type=info icon=💡}
You can right-click to "View Page Source" and see that Nuxt renders the correct date in SSR based on the visitor's locale.
::
diff --git a/docs/content/4.examples/index.md b/docs/content/4.examples/index.md
index acf6d0c78a..111df6d8f5 100644
--- a/docs/content/4.examples/index.md
+++ b/docs/content/4.examples/index.md
@@ -1,9 +1,5 @@
---
-title: Examples
-layout.aside: true
-layout.fluid: true
-navigation:
- exclusive: true
- collapse: true
- redirect: /examples/essentials/hello-world
+navigation: false
+title: "Examples"
+redirect: /examples/essentials/hello-world
---
diff --git a/docs/content/5.community/1.getting-help.md b/docs/content/5.community/1.getting-help.md
index f2be8d88ed..004178e002 100644
--- a/docs/content/5.community/1.getting-help.md
+++ b/docs/content/5.community/1.getting-help.md
@@ -1,6 +1,14 @@
+---
+navigation.icon: uil:life-ring
+---
+
# Getting Help
-At some point, you may find that there's an issue you need some help with. But don't worry! We're a friendly community of developers and we'd love to help.
+We're a friendly community of developers and we'd love to help.
+
+At some point, you may find that there's an issue you need some help with.
+
+But don't worry! We're a friendly community of developers and we'd love to help.
## "I can't figure out how to (...)."
diff --git a/docs/content/5.community/2.reporting-bugs.md b/docs/content/5.community/2.reporting-bugs.md
index 59a629239b..b06f73bde5 100644
--- a/docs/content/5.community/2.reporting-bugs.md
+++ b/docs/content/5.community/2.reporting-bugs.md
@@ -1,6 +1,14 @@
+---
+navigation.icon: uil:bug
+---
+
# Reporting Bugs
-Try as we might, we will never completely eliminate bugs. One of the most valuable roles in open source is taking the time to report bugs helpfully. Even if you can't fix the underlying code, reporting a bug well can enable someone else with a bit more familiarity with the codebase to spot a pattern or make a quick fix.
+One of the most valuable roles in open source is taking the time to report bugs helpfully.
+
+Try as we might, we will never completely eliminate bugs.
+
+Even if you can't fix the underlying code, reporting a bug well can enable someone else with a bit more familiarity with the codebase to spot a pattern or make a quick fix.
Here are a few key steps.
diff --git a/docs/content/5.community/3.contribution.md b/docs/content/5.community/3.contribution.md
index 01ce27f629..7c909bccbc 100644
--- a/docs/content/5.community/3.contribution.md
+++ b/docs/content/5.community/3.contribution.md
@@ -1,3 +1,7 @@
+---
+navigation.icon: octicon:code-of-conduct-24
+---
+
# Contribution
Nuxt is a community project - and so we love contributions of all kinds! ❤️
diff --git a/docs/content/5.community/4.framework-contribution.md b/docs/content/5.community/4.framework-contribution.md
index ddec708eb0..2e6cd0b946 100644
--- a/docs/content/5.community/4.framework-contribution.md
+++ b/docs/content/5.community/4.framework-contribution.md
@@ -1,3 +1,8 @@
+---
+navigation.icon: octicon:repo-24
+description: Some specific points about contributions to the nuxt/framework repository.
+---
+
# nuxt/framework
Once you've read the [general contribution guide](./contribution), here are some specific points to make about contributions to the `nuxt/framework` repository.
diff --git a/docs/content/5.community/5.roadmap.md b/docs/content/5.community/5.roadmap.md
index 2b213a96c0..f11bfceacf 100644
--- a/docs/content/5.community/5.roadmap.md
+++ b/docs/content/5.community/5.roadmap.md
@@ -1,6 +1,12 @@
+---
+navigation.icon: uil:directions
+---
+
# Roadmap
-Nuxt is constantly evolving, with new features and modules being added all the time. This page lists the current status and schedule of our planned releases.
+Nuxt is constantly evolving, with new features and modules being added all the time.
+
+This page lists the current status and schedule of our planned releases.
## 📢 Announcements
diff --git a/docs/content/5.community/6.changelog.md b/docs/content/5.community/6.changelog.md
new file mode 100644
index 0000000000..12b8158470
--- /dev/null
+++ b/docs/content/5.community/6.changelog.md
@@ -0,0 +1,12 @@
+---
+toc: false
+navigation.icon: heroicons-outline:newspaper
+description: Discover the latest Nuxt 3 updates.
+---
+
+# Releases
+
+Discover the latest Nuxt updates.
+
+::releases
+::
diff --git a/docs/content/5.community/index.md b/docs/content/5.community/index.md
index 860bdb9583..4d0f7783f3 100644
--- a/docs/content/5.community/index.md
+++ b/docs/content/5.community/index.md
@@ -1,8 +1,5 @@
---
-title: Community
-layout.aside: true
-layout.asideClass: ''
-navigation.collapse: true
-navigation.exclusive: true
-navigation.redirect: /community/getting-help
+navigation: false
+title: "Community"
+redirect: /community/getting-help
---
diff --git a/docs/content/bridge/1.overview.md b/docs/content/6.bridge/1.overview.md
similarity index 98%
rename from docs/content/bridge/1.overview.md
rename to docs/content/6.bridge/1.overview.md
index aec21984ba..f68c4071da 100644
--- a/docs/content/bridge/1.overview.md
+++ b/docs/content/6.bridge/1.overview.md
@@ -1,10 +1,4 @@
----
-title: Overview
-head.title: 'Migrate from Nuxt 2 to Nuxt Bridge'
-head.titleTemplate: ''
----
-
-# Migrate from Nuxt 2 to Nuxt Bridge
+# Overview
Experience Nuxt 3 features on existing Nuxt 2 projects.
diff --git a/docs/content/bridge/2.bridge-composition-api.md b/docs/content/6.bridge/2.bridge-composition-api.md
similarity index 99%
rename from docs/content/bridge/2.bridge-composition-api.md
rename to docs/content/6.bridge/2.bridge-composition-api.md
index 6f05027370..115fd3d2fa 100644
--- a/docs/content/bridge/2.bridge-composition-api.md
+++ b/docs/content/6.bridge/2.bridge-composition-api.md
@@ -1,8 +1,3 @@
----
-head.title: 'Nuxt 2 to Nuxt Bridge: Composition API'
-head.titleTemplate: ''
----
-
# Composition API
Nuxt Bridge provides access to Composition API syntax. It is specifically designed to be aligned with Nuxt 3. Because of this, there are a few extra steps to take when enabling Nuxt Bridge, if you have been using the Composition API previously.
diff --git a/docs/content/6.bridge/_dir.yml b/docs/content/6.bridge/_dir.yml
new file mode 100644
index 0000000000..044572d59d
--- /dev/null
+++ b/docs/content/6.bridge/_dir.yml
@@ -0,0 +1 @@
+titleTemplate: 'Migrate to Bridge: %s'
diff --git a/docs/content/6.bridge/index.md b/docs/content/6.bridge/index.md
new file mode 100644
index 0000000000..9b88233bce
--- /dev/null
+++ b/docs/content/6.bridge/index.md
@@ -0,0 +1,4 @@
+---
+navigation: false
+redirect: /bridge/overview
+---
diff --git a/docs/content/migration/1.overview.md b/docs/content/7.migration/1.overview.md
similarity index 74%
rename from docs/content/migration/1.overview.md
rename to docs/content/7.migration/1.overview.md
index 3b1aa20c76..de50db842d 100644
--- a/docs/content/migration/1.overview.md
+++ b/docs/content/7.migration/1.overview.md
@@ -1,12 +1,8 @@
----
-title: Overview
-head.title: 'Migrate from Nuxt 2 to Nuxt 3'
-head.titleTemplate: ''
----
+# Overview
-# Migrate from Nuxt 2 to Nuxt 3
+Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies.
-Nuxt 3 is a complete rewrite of Nuxt 2, and also based on a new set of underlying technologies. That means there will be significant changes when migrating a Nuxt 2 app to Nuxt 3, although you can expect migration to become more straightforward as we move toward a stable release.
+That means there will be significant changes when migrating a Nuxt 2 app to Nuxt 3, although you can expect migration to become more straightforward as we move toward a stable release.