Spaces:
Sleeping
Sleeping
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.Qs = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | |
; | |
var replace = String.prototype.replace; | |
var percentTwenties = /%20/g; | |
var Format = { | |
RFC1738: 'RFC1738', | |
RFC3986: 'RFC3986' | |
}; | |
module.exports = { | |
'default': Format.RFC3986, | |
formatters: { | |
RFC1738: function (value) { | |
return replace.call(value, percentTwenties, '+'); | |
}, | |
RFC3986: function (value) { | |
return String(value); | |
} | |
}, | |
RFC1738: Format.RFC1738, | |
RFC3986: Format.RFC3986 | |
}; | |
},{}],2:[function(require,module,exports){ | |
; | |
var stringify = require('./stringify'); | |
var parse = require('./parse'); | |
var formats = require('./formats'); | |
module.exports = { | |
formats: formats, | |
parse: parse, | |
stringify: stringify | |
}; | |
},{"./formats":1,"./parse":3,"./stringify":4}],3:[function(require,module,exports){ | |
; | |
var utils = require('./utils'); | |
var has = Object.prototype.hasOwnProperty; | |
var isArray = Array.isArray; | |
var defaults = { | |
allowDots: false, | |
allowPrototypes: false, | |
allowSparse: false, | |
arrayLimit: 20, | |
charset: 'utf-8', | |
charsetSentinel: false, | |
comma: false, | |
decoder: utils.decode, | |
delimiter: '&', | |
depth: 5, | |
ignoreQueryPrefix: false, | |
interpretNumericEntities: false, | |
parameterLimit: 1000, | |
parseArrays: true, | |
plainObjects: false, | |
strictNullHandling: false | |
}; | |
var interpretNumericEntities = function (str) { | |
return str.replace(/&#(\d+);/g, function ($0, numberStr) { | |
return String.fromCharCode(parseInt(numberStr, 10)); | |
}); | |
}; | |
var parseArrayValue = function (val, options) { | |
if (val && typeof val === 'string' && options.comma && val.indexOf(',') > -1) { | |
return val.split(','); | |
} | |
return val; | |
}; | |
// This is what browsers will submit when the ✓ character occurs in an | |
// application/x-www-form-urlencoded body and the encoding of the page containing | |
// the form is iso-8859-1, or when the submitted form has an accept-charset | |
// attribute of iso-8859-1. Presumably also with other charsets that do not contain | |
// the ✓ character, such as us-ascii. | |
var isoSentinel = 'utf8=%26%2310003%3B'; // encodeURIComponent('✓') | |
// These are the percent-encoded utf-8 octets representing a checkmark, indicating that the request actually is utf-8 encoded. | |
var charsetSentinel = 'utf8=%E2%9C%93'; // encodeURIComponent('✓') | |
var parseValues = function parseQueryStringValues(str, options) { | |
var obj = {}; | |
var cleanStr = options.ignoreQueryPrefix ? str.replace(/^\?/, '') : str; | |
var limit = options.parameterLimit === Infinity ? undefined : options.parameterLimit; | |
var parts = cleanStr.split(options.delimiter, limit); | |
var skipIndex = -1; // Keep track of where the utf8 sentinel was found | |
var i; | |
var charset = options.charset; | |
if (options.charsetSentinel) { | |
for (i = 0; i < parts.length; ++i) { | |
if (parts[i].indexOf('utf8=') === 0) { | |
if (parts[i] === charsetSentinel) { | |
charset = 'utf-8'; | |
} else if (parts[i] === isoSentinel) { | |
charset = 'iso-8859-1'; | |
} | |
skipIndex = i; | |
i = parts.length; // The eslint settings do not allow break; | |
} | |
} | |
} | |
for (i = 0; i < parts.length; ++i) { | |
if (i === skipIndex) { | |
continue; | |
} | |
var part = parts[i]; | |
var bracketEqualsPos = part.indexOf(']='); | |
var pos = bracketEqualsPos === -1 ? part.indexOf('=') : bracketEqualsPos + 1; | |
var key, val; | |
if (pos === -1) { | |
key = options.decoder(part, defaults.decoder, charset, 'key'); | |
val = options.strictNullHandling ? null : ''; | |
} else { | |
key = options.decoder(part.slice(0, pos), defaults.decoder, charset, 'key'); | |
val = utils.maybeMap( | |
parseArrayValue(part.slice(pos + 1), options), | |
function (encodedVal) { | |
return options.decoder(encodedVal, defaults.decoder, charset, 'value'); | |
} | |
); | |
} | |
if (val && options.interpretNumericEntities && charset === 'iso-8859-1') { | |
val = interpretNumericEntities(val); | |
} | |
if (part.indexOf('[]=') > -1) { | |
val = isArray(val) ? [val] : val; | |
} | |
if (has.call(obj, key)) { | |
obj[key] = utils.combine(obj[key], val); | |
} else { | |
obj[key] = val; | |
} | |
} | |
return obj; | |
}; | |
var parseObject = function (chain, val, options, valuesParsed) { | |
var leaf = valuesParsed ? val : parseArrayValue(val, options); | |
for (var i = chain.length - 1; i >= 0; --i) { | |
var obj; | |
var root = chain[i]; | |
if (root === '[]' && options.parseArrays) { | |
obj = [].concat(leaf); | |
} else { | |
obj = options.plainObjects ? Object.create(null) : {}; | |
var cleanRoot = root.charAt(0) === '[' && root.charAt(root.length - 1) === ']' ? root.slice(1, -1) : root; | |
var index = parseInt(cleanRoot, 10); | |
if (!options.parseArrays && cleanRoot === '') { | |
obj = { 0: leaf }; | |
} else if ( | |
!isNaN(index) | |
&& root !== cleanRoot | |
&& String(index) === cleanRoot | |
&& index >= 0 | |
&& (options.parseArrays && index <= options.arrayLimit) | |
) { | |
obj = []; | |
obj[index] = leaf; | |
} else if (cleanRoot !== '__proto__') { | |
obj[cleanRoot] = leaf; | |
} | |
} | |
leaf = obj; | |
} | |
return leaf; | |
}; | |
var parseKeys = function parseQueryStringKeys(givenKey, val, options, valuesParsed) { | |
if (!givenKey) { | |
return; | |
} | |
// Transform dot notation to bracket notation | |
var key = options.allowDots ? givenKey.replace(/\.([^.[]+)/g, '[$1]') : givenKey; | |
// The regex chunks | |
var brackets = /(\[[^[\]]*])/; | |
var child = /(\[[^[\]]*])/g; | |
// Get the parent | |
var segment = options.depth > 0 && brackets.exec(key); | |
var parent = segment ? key.slice(0, segment.index) : key; | |
// Stash the parent if it exists | |
var keys = []; | |
if (parent) { | |
// If we aren't using plain objects, optionally prefix keys that would overwrite object prototype properties | |
if (!options.plainObjects && has.call(Object.prototype, parent)) { | |
if (!options.allowPrototypes) { | |
return; | |
} | |
} | |
keys.push(parent); | |
} | |
// Loop through children appending to the array until we hit depth | |
var i = 0; | |
while (options.depth > 0 && (segment = child.exec(key)) !== null && i < options.depth) { | |
i += 1; | |
if (!options.plainObjects && has.call(Object.prototype, segment[1].slice(1, -1))) { | |
if (!options.allowPrototypes) { | |
return; | |
} | |
} | |
keys.push(segment[1]); | |
} | |
// If there's a remainder, just add whatever is left | |
if (segment) { | |
keys.push('[' + key.slice(segment.index) + ']'); | |
} | |
return parseObject(keys, val, options, valuesParsed); | |
}; | |
var normalizeParseOptions = function normalizeParseOptions(opts) { | |
if (!opts) { | |
return defaults; | |
} | |
if (opts.decoder !== null && opts.decoder !== undefined && typeof opts.decoder !== 'function') { | |
throw new TypeError('Decoder has to be a function.'); | |
} | |
if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { | |
throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); | |
} | |
var charset = typeof opts.charset === 'undefined' ? defaults.charset : opts.charset; | |
return { | |
allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, | |
allowPrototypes: typeof opts.allowPrototypes === 'boolean' ? opts.allowPrototypes : defaults.allowPrototypes, | |
allowSparse: typeof opts.allowSparse === 'boolean' ? opts.allowSparse : defaults.allowSparse, | |
arrayLimit: typeof opts.arrayLimit === 'number' ? opts.arrayLimit : defaults.arrayLimit, | |
charset: charset, | |
charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, | |
comma: typeof opts.comma === 'boolean' ? opts.comma : defaults.comma, | |
decoder: typeof opts.decoder === 'function' ? opts.decoder : defaults.decoder, | |
delimiter: typeof opts.delimiter === 'string' || utils.isRegExp(opts.delimiter) ? opts.delimiter : defaults.delimiter, | |
// eslint-disable-next-line no-implicit-coercion, no-extra-parens | |
depth: (typeof opts.depth === 'number' || opts.depth === false) ? +opts.depth : defaults.depth, | |
ignoreQueryPrefix: opts.ignoreQueryPrefix === true, | |
interpretNumericEntities: typeof opts.interpretNumericEntities === 'boolean' ? opts.interpretNumericEntities : defaults.interpretNumericEntities, | |
parameterLimit: typeof opts.parameterLimit === 'number' ? opts.parameterLimit : defaults.parameterLimit, | |
parseArrays: opts.parseArrays !== false, | |
plainObjects: typeof opts.plainObjects === 'boolean' ? opts.plainObjects : defaults.plainObjects, | |
strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling | |
}; | |
}; | |
module.exports = function (str, opts) { | |
var options = normalizeParseOptions(opts); | |
if (str === '' || str === null || typeof str === 'undefined') { | |
return options.plainObjects ? Object.create(null) : {}; | |
} | |
var tempObj = typeof str === 'string' ? parseValues(str, options) : str; | |
var obj = options.plainObjects ? Object.create(null) : {}; | |
// Iterate over the keys and setup the new object | |
var keys = Object.keys(tempObj); | |
for (var i = 0; i < keys.length; ++i) { | |
var key = keys[i]; | |
var newObj = parseKeys(key, tempObj[key], options, typeof str === 'string'); | |
obj = utils.merge(obj, newObj, options); | |
} | |
if (options.allowSparse === true) { | |
return obj; | |
} | |
return utils.compact(obj); | |
}; | |
},{"./utils":5}],4:[function(require,module,exports){ | |
; | |
var getSideChannel = require('side-channel'); | |
var utils = require('./utils'); | |
var formats = require('./formats'); | |
var has = Object.prototype.hasOwnProperty; | |
var arrayPrefixGenerators = { | |
brackets: function brackets(prefix) { | |
return prefix + '[]'; | |
}, | |
comma: 'comma', | |
indices: function indices(prefix, key) { | |
return prefix + '[' + key + ']'; | |
}, | |
repeat: function repeat(prefix) { | |
return prefix; | |
} | |
}; | |
var isArray = Array.isArray; | |
var split = String.prototype.split; | |
var push = Array.prototype.push; | |
var pushToArray = function (arr, valueOrArray) { | |
push.apply(arr, isArray(valueOrArray) ? valueOrArray : [valueOrArray]); | |
}; | |
var toISO = Date.prototype.toISOString; | |
var defaultFormat = formats['default']; | |
var defaults = { | |
addQueryPrefix: false, | |
allowDots: false, | |
charset: 'utf-8', | |
charsetSentinel: false, | |
delimiter: '&', | |
encode: true, | |
encoder: utils.encode, | |
encodeValuesOnly: false, | |
format: defaultFormat, | |
formatter: formats.formatters[defaultFormat], | |
// deprecated | |
indices: false, | |
serializeDate: function serializeDate(date) { | |
return toISO.call(date); | |
}, | |
skipNulls: false, | |
strictNullHandling: false | |
}; | |
var isNonNullishPrimitive = function isNonNullishPrimitive(v) { | |
return typeof v === 'string' | |
|| typeof v === 'number' | |
|| typeof v === 'boolean' | |
|| typeof v === 'symbol' | |
|| typeof v === 'bigint'; | |
}; | |
var sentinel = {}; | |
var stringify = function stringify( | |
object, | |
prefix, | |
generateArrayPrefix, | |
commaRoundTrip, | |
strictNullHandling, | |
skipNulls, | |
encoder, | |
filter, | |
sort, | |
allowDots, | |
serializeDate, | |
format, | |
formatter, | |
encodeValuesOnly, | |
charset, | |
sideChannel | |
) { | |
var obj = object; | |
var tmpSc = sideChannel; | |
var step = 0; | |
var findFlag = false; | |
while ((tmpSc = tmpSc.get(sentinel)) !== void undefined && !findFlag) { | |
// Where object last appeared in the ref tree | |
var pos = tmpSc.get(object); | |
step += 1; | |
if (typeof pos !== 'undefined') { | |
if (pos === step) { | |
throw new RangeError('Cyclic object value'); | |
} else { | |
findFlag = true; // Break while | |
} | |
} | |
if (typeof tmpSc.get(sentinel) === 'undefined') { | |
step = 0; | |
} | |
} | |
if (typeof filter === 'function') { | |
obj = filter(prefix, obj); | |
} else if (obj instanceof Date) { | |
obj = serializeDate(obj); | |
} else if (generateArrayPrefix === 'comma' && isArray(obj)) { | |
obj = utils.maybeMap(obj, function (value) { | |
if (value instanceof Date) { | |
return serializeDate(value); | |
} | |
return value; | |
}); | |
} | |
if (obj === null) { | |
if (strictNullHandling) { | |
return encoder && !encodeValuesOnly ? encoder(prefix, defaults.encoder, charset, 'key', format) : prefix; | |
} | |
obj = ''; | |
} | |
if (isNonNullishPrimitive(obj) || utils.isBuffer(obj)) { | |
if (encoder) { | |
var keyValue = encodeValuesOnly ? prefix : encoder(prefix, defaults.encoder, charset, 'key', format); | |
if (generateArrayPrefix === 'comma' && encodeValuesOnly) { | |
var valuesArray = split.call(String(obj), ','); | |
var valuesJoined = ''; | |
for (var i = 0; i < valuesArray.length; ++i) { | |
valuesJoined += (i === 0 ? '' : ',') + formatter(encoder(valuesArray[i], defaults.encoder, charset, 'value', format)); | |
} | |
return [formatter(keyValue) + (commaRoundTrip && isArray(obj) && valuesArray.length === 1 ? '[]' : '') + '=' + valuesJoined]; | |
} | |
return [formatter(keyValue) + '=' + formatter(encoder(obj, defaults.encoder, charset, 'value', format))]; | |
} | |
return [formatter(prefix) + '=' + formatter(String(obj))]; | |
} | |
var values = []; | |
if (typeof obj === 'undefined') { | |
return values; | |
} | |
var objKeys; | |
if (generateArrayPrefix === 'comma' && isArray(obj)) { | |
// we need to join elements in | |
objKeys = [{ value: obj.length > 0 ? obj.join(',') || null : void undefined }]; | |
} else if (isArray(filter)) { | |
objKeys = filter; | |
} else { | |
var keys = Object.keys(obj); | |
objKeys = sort ? keys.sort(sort) : keys; | |
} | |
var adjustedPrefix = commaRoundTrip && isArray(obj) && obj.length === 1 ? prefix + '[]' : prefix; | |
for (var j = 0; j < objKeys.length; ++j) { | |
var key = objKeys[j]; | |
var value = typeof key === 'object' && typeof key.value !== 'undefined' ? key.value : obj[key]; | |
if (skipNulls && value === null) { | |
continue; | |
} | |
var keyPrefix = isArray(obj) | |
? typeof generateArrayPrefix === 'function' ? generateArrayPrefix(adjustedPrefix, key) : adjustedPrefix | |
: adjustedPrefix + (allowDots ? '.' + key : '[' + key + ']'); | |
sideChannel.set(object, step); | |
var valueSideChannel = getSideChannel(); | |
valueSideChannel.set(sentinel, sideChannel); | |
pushToArray(values, stringify( | |
value, | |
keyPrefix, | |
generateArrayPrefix, | |
commaRoundTrip, | |
strictNullHandling, | |
skipNulls, | |
encoder, | |
filter, | |
sort, | |
allowDots, | |
serializeDate, | |
format, | |
formatter, | |
encodeValuesOnly, | |
charset, | |
valueSideChannel | |
)); | |
} | |
return values; | |
}; | |
var normalizeStringifyOptions = function normalizeStringifyOptions(opts) { | |
if (!opts) { | |
return defaults; | |
} | |
if (opts.encoder !== null && typeof opts.encoder !== 'undefined' && typeof opts.encoder !== 'function') { | |
throw new TypeError('Encoder has to be a function.'); | |
} | |
var charset = opts.charset || defaults.charset; | |
if (typeof opts.charset !== 'undefined' && opts.charset !== 'utf-8' && opts.charset !== 'iso-8859-1') { | |
throw new TypeError('The charset option must be either utf-8, iso-8859-1, or undefined'); | |
} | |
var format = formats['default']; | |
if (typeof opts.format !== 'undefined') { | |
if (!has.call(formats.formatters, opts.format)) { | |
throw new TypeError('Unknown format option provided.'); | |
} | |
format = opts.format; | |
} | |
var formatter = formats.formatters[format]; | |
var filter = defaults.filter; | |
if (typeof opts.filter === 'function' || isArray(opts.filter)) { | |
filter = opts.filter; | |
} | |
return { | |
addQueryPrefix: typeof opts.addQueryPrefix === 'boolean' ? opts.addQueryPrefix : defaults.addQueryPrefix, | |
allowDots: typeof opts.allowDots === 'undefined' ? defaults.allowDots : !!opts.allowDots, | |
charset: charset, | |
charsetSentinel: typeof opts.charsetSentinel === 'boolean' ? opts.charsetSentinel : defaults.charsetSentinel, | |
delimiter: typeof opts.delimiter === 'undefined' ? defaults.delimiter : opts.delimiter, | |
encode: typeof opts.encode === 'boolean' ? opts.encode : defaults.encode, | |
encoder: typeof opts.encoder === 'function' ? opts.encoder : defaults.encoder, | |
encodeValuesOnly: typeof opts.encodeValuesOnly === 'boolean' ? opts.encodeValuesOnly : defaults.encodeValuesOnly, | |
filter: filter, | |
format: format, | |
formatter: formatter, | |
serializeDate: typeof opts.serializeDate === 'function' ? opts.serializeDate : defaults.serializeDate, | |
skipNulls: typeof opts.skipNulls === 'boolean' ? opts.skipNulls : defaults.skipNulls, | |
sort: typeof opts.sort === 'function' ? opts.sort : null, | |
strictNullHandling: typeof opts.strictNullHandling === 'boolean' ? opts.strictNullHandling : defaults.strictNullHandling | |
}; | |
}; | |
module.exports = function (object, opts) { | |
var obj = object; | |
var options = normalizeStringifyOptions(opts); | |
var objKeys; | |
var filter; | |
if (typeof options.filter === 'function') { | |
filter = options.filter; | |
obj = filter('', obj); | |
} else if (isArray(options.filter)) { | |
filter = options.filter; | |
objKeys = filter; | |
} | |
var keys = []; | |
if (typeof obj !== 'object' || obj === null) { | |
return ''; | |
} | |
var arrayFormat; | |
if (opts && opts.arrayFormat in arrayPrefixGenerators) { | |
arrayFormat = opts.arrayFormat; | |
} else if (opts && 'indices' in opts) { | |
arrayFormat = opts.indices ? 'indices' : 'repeat'; | |
} else { | |
arrayFormat = 'indices'; | |
} | |
var generateArrayPrefix = arrayPrefixGenerators[arrayFormat]; | |
if (opts && 'commaRoundTrip' in opts && typeof opts.commaRoundTrip !== 'boolean') { | |
throw new TypeError('`commaRoundTrip` must be a boolean, or absent'); | |
} | |
var commaRoundTrip = generateArrayPrefix === 'comma' && opts && opts.commaRoundTrip; | |
if (!objKeys) { | |
objKeys = Object.keys(obj); | |
} | |
if (options.sort) { | |
objKeys.sort(options.sort); | |
} | |
var sideChannel = getSideChannel(); | |
for (var i = 0; i < objKeys.length; ++i) { | |
var key = objKeys[i]; | |
if (options.skipNulls && obj[key] === null) { | |
continue; | |
} | |
pushToArray(keys, stringify( | |
obj[key], | |
key, | |
generateArrayPrefix, | |
commaRoundTrip, | |
options.strictNullHandling, | |
options.skipNulls, | |
options.encode ? options.encoder : null, | |
options.filter, | |
options.sort, | |
options.allowDots, | |
options.serializeDate, | |
options.format, | |
options.formatter, | |
options.encodeValuesOnly, | |
options.charset, | |
sideChannel | |
)); | |
} | |
var joined = keys.join(options.delimiter); | |
var prefix = options.addQueryPrefix === true ? '?' : ''; | |
if (options.charsetSentinel) { | |
if (options.charset === 'iso-8859-1') { | |
// encodeURIComponent('✓'), the "numeric entity" representation of a checkmark | |
prefix += 'utf8=%26%2310003%3B&'; | |
} else { | |
// encodeURIComponent('✓') | |
prefix += 'utf8=%E2%9C%93&'; | |
} | |
} | |
return joined.length > 0 ? prefix + joined : ''; | |
}; | |
},{"./formats":1,"./utils":5,"side-channel":16}],5:[function(require,module,exports){ | |
; | |
var formats = require('./formats'); | |
var has = Object.prototype.hasOwnProperty; | |
var isArray = Array.isArray; | |
var hexTable = (function () { | |
var array = []; | |
for (var i = 0; i < 256; ++i) { | |
array.push('%' + ((i < 16 ? '0' : '') + i.toString(16)).toUpperCase()); | |
} | |
return array; | |
}()); | |
var compactQueue = function compactQueue(queue) { | |
while (queue.length > 1) { | |
var item = queue.pop(); | |
var obj = item.obj[item.prop]; | |
if (isArray(obj)) { | |
var compacted = []; | |
for (var j = 0; j < obj.length; ++j) { | |
if (typeof obj[j] !== 'undefined') { | |
compacted.push(obj[j]); | |
} | |
} | |
item.obj[item.prop] = compacted; | |
} | |
} | |
}; | |
var arrayToObject = function arrayToObject(source, options) { | |
var obj = options && options.plainObjects ? Object.create(null) : {}; | |
for (var i = 0; i < source.length; ++i) { | |
if (typeof source[i] !== 'undefined') { | |
obj[i] = source[i]; | |
} | |
} | |
return obj; | |
}; | |
var merge = function merge(target, source, options) { | |
/* eslint no-param-reassign: 0 */ | |
if (!source) { | |
return target; | |
} | |
if (typeof source !== 'object') { | |
if (isArray(target)) { | |
target.push(source); | |
} else if (target && typeof target === 'object') { | |
if ((options && (options.plainObjects || options.allowPrototypes)) || !has.call(Object.prototype, source)) { | |
target[source] = true; | |
} | |
} else { | |
return [target, source]; | |
} | |
return target; | |
} | |
if (!target || typeof target !== 'object') { | |
return [target].concat(source); | |
} | |
var mergeTarget = target; | |
if (isArray(target) && !isArray(source)) { | |
mergeTarget = arrayToObject(target, options); | |
} | |
if (isArray(target) && isArray(source)) { | |
source.forEach(function (item, i) { | |
if (has.call(target, i)) { | |
var targetItem = target[i]; | |
if (targetItem && typeof targetItem === 'object' && item && typeof item === 'object') { | |
target[i] = merge(targetItem, item, options); | |
} else { | |
target.push(item); | |
} | |
} else { | |
target[i] = item; | |
} | |
}); | |
return target; | |
} | |
return Object.keys(source).reduce(function (acc, key) { | |
var value = source[key]; | |
if (has.call(acc, key)) { | |
acc[key] = merge(acc[key], value, options); | |
} else { | |
acc[key] = value; | |
} | |
return acc; | |
}, mergeTarget); | |
}; | |
var assign = function assignSingleSource(target, source) { | |
return Object.keys(source).reduce(function (acc, key) { | |
acc[key] = source[key]; | |
return acc; | |
}, target); | |
}; | |
var decode = function (str, decoder, charset) { | |
var strWithoutPlus = str.replace(/\+/g, ' '); | |
if (charset === 'iso-8859-1') { | |
// unescape never throws, no try...catch needed: | |
return strWithoutPlus.replace(/%[0-9a-f]{2}/gi, unescape); | |
} | |
// utf-8 | |
try { | |
return decodeURIComponent(strWithoutPlus); | |
} catch (e) { | |
return strWithoutPlus; | |
} | |
}; | |
var encode = function encode(str, defaultEncoder, charset, kind, format) { | |
// This code was originally written by Brian White (mscdex) for the io.js core querystring library. | |
// It has been adapted here for stricter adherence to RFC 3986 | |
if (str.length === 0) { | |
return str; | |
} | |
var string = str; | |
if (typeof str === 'symbol') { | |
string = Symbol.prototype.toString.call(str); | |
} else if (typeof str !== 'string') { | |
string = String(str); | |
} | |
if (charset === 'iso-8859-1') { | |
return escape(string).replace(/%u[0-9a-f]{4}/gi, function ($0) { | |
return '%26%23' + parseInt($0.slice(2), 16) + '%3B'; | |
}); | |
} | |
var out = ''; | |
for (var i = 0; i < string.length; ++i) { | |
var c = string.charCodeAt(i); | |
if ( | |
c === 0x2D // - | |
|| c === 0x2E // . | |
|| c === 0x5F // _ | |
|| c === 0x7E // ~ | |
|| (c >= 0x30 && c <= 0x39) // 0-9 | |
|| (c >= 0x41 && c <= 0x5A) // a-z | |
|| (c >= 0x61 && c <= 0x7A) // A-Z | |
|| (format === formats.RFC1738 && (c === 0x28 || c === 0x29)) // ( ) | |
) { | |
out += string.charAt(i); | |
continue; | |
} | |
if (c < 0x80) { | |
out = out + hexTable[c]; | |
continue; | |
} | |
if (c < 0x800) { | |
out = out + (hexTable[0xC0 | (c >> 6)] + hexTable[0x80 | (c & 0x3F)]); | |
continue; | |
} | |
if (c < 0xD800 || c >= 0xE000) { | |
out = out + (hexTable[0xE0 | (c >> 12)] + hexTable[0x80 | ((c >> 6) & 0x3F)] + hexTable[0x80 | (c & 0x3F)]); | |
continue; | |
} | |
i += 1; | |
c = 0x10000 + (((c & 0x3FF) << 10) | (string.charCodeAt(i) & 0x3FF)); | |
/* eslint operator-linebreak: [2, "before"] */ | |
out += hexTable[0xF0 | (c >> 18)] | |
+ hexTable[0x80 | ((c >> 12) & 0x3F)] | |
+ hexTable[0x80 | ((c >> 6) & 0x3F)] | |
+ hexTable[0x80 | (c & 0x3F)]; | |
} | |
return out; | |
}; | |
var compact = function compact(value) { | |
var queue = [{ obj: { o: value }, prop: 'o' }]; | |
var refs = []; | |
for (var i = 0; i < queue.length; ++i) { | |
var item = queue[i]; | |
var obj = item.obj[item.prop]; | |
var keys = Object.keys(obj); | |
for (var j = 0; j < keys.length; ++j) { | |
var key = keys[j]; | |
var val = obj[key]; | |
if (typeof val === 'object' && val !== null && refs.indexOf(val) === -1) { | |
queue.push({ obj: obj, prop: key }); | |
refs.push(val); | |
} | |
} | |
} | |
compactQueue(queue); | |
return value; | |
}; | |
var isRegExp = function isRegExp(obj) { | |
return Object.prototype.toString.call(obj) === '[object RegExp]'; | |
}; | |
var isBuffer = function isBuffer(obj) { | |
if (!obj || typeof obj !== 'object') { | |
return false; | |
} | |
return !!(obj.constructor && obj.constructor.isBuffer && obj.constructor.isBuffer(obj)); | |
}; | |
var combine = function combine(a, b) { | |
return [].concat(a, b); | |
}; | |
var maybeMap = function maybeMap(val, fn) { | |
if (isArray(val)) { | |
var mapped = []; | |
for (var i = 0; i < val.length; i += 1) { | |
mapped.push(fn(val[i])); | |
} | |
return mapped; | |
} | |
return fn(val); | |
}; | |
module.exports = { | |
arrayToObject: arrayToObject, | |
assign: assign, | |
combine: combine, | |
compact: compact, | |
decode: decode, | |
encode: encode, | |
isBuffer: isBuffer, | |
isRegExp: isRegExp, | |
maybeMap: maybeMap, | |
merge: merge | |
}; | |
},{"./formats":1}],6:[function(require,module,exports){ | |
},{}],7:[function(require,module,exports){ | |
; | |
var GetIntrinsic = require('get-intrinsic'); | |
var callBind = require('./'); | |
var $indexOf = callBind(GetIntrinsic('String.prototype.indexOf')); | |
module.exports = function callBoundIntrinsic(name, allowMissing) { | |
var intrinsic = GetIntrinsic(name, !!allowMissing); | |
if (typeof intrinsic === 'function' && $indexOf(name, '.prototype.') > -1) { | |
return callBind(intrinsic); | |
} | |
return intrinsic; | |
}; | |
},{"./":8,"get-intrinsic":11}],8:[function(require,module,exports){ | |
; | |
var bind = require('function-bind'); | |
var GetIntrinsic = require('get-intrinsic'); | |
var $apply = GetIntrinsic('%Function.prototype.apply%'); | |
var $call = GetIntrinsic('%Function.prototype.call%'); | |
var $reflectApply = GetIntrinsic('%Reflect.apply%', true) || bind.call($call, $apply); | |
var $gOPD = GetIntrinsic('%Object.getOwnPropertyDescriptor%', true); | |
var $defineProperty = GetIntrinsic('%Object.defineProperty%', true); | |
var $max = GetIntrinsic('%Math.max%'); | |
if ($defineProperty) { | |
try { | |
$defineProperty({}, 'a', { value: 1 }); | |
} catch (e) { | |
// IE 8 has a broken defineProperty | |
$defineProperty = null; | |
} | |
} | |
module.exports = function callBind(originalFunction) { | |
var func = $reflectApply(bind, $call, arguments); | |
if ($gOPD && $defineProperty) { | |
var desc = $gOPD(func, 'length'); | |
if (desc.configurable) { | |
// original length, plus the receiver, minus any additional arguments (after the receiver) | |
$defineProperty( | |
func, | |
'length', | |
{ value: 1 + $max(0, originalFunction.length - (arguments.length - 1)) } | |
); | |
} | |
} | |
return func; | |
}; | |
var applyBind = function applyBind() { | |
return $reflectApply(bind, $apply, arguments); | |
}; | |
if ($defineProperty) { | |
$defineProperty(module.exports, 'apply', { value: applyBind }); | |
} else { | |
module.exports.apply = applyBind; | |
} | |
},{"function-bind":10,"get-intrinsic":11}],9:[function(require,module,exports){ | |
; | |
/* eslint no-invalid-this: 1 */ | |
var ERROR_MESSAGE = 'Function.prototype.bind called on incompatible '; | |
var slice = Array.prototype.slice; | |
var toStr = Object.prototype.toString; | |
var funcType = '[object Function]'; | |
module.exports = function bind(that) { | |
var target = this; | |
if (typeof target !== 'function' || toStr.call(target) !== funcType) { | |
throw new TypeError(ERROR_MESSAGE + target); | |
} | |
var args = slice.call(arguments, 1); | |
var bound; | |
var binder = function () { | |
if (this instanceof bound) { | |
var result = target.apply( | |
this, | |
args.concat(slice.call(arguments)) | |
); | |
if (Object(result) === result) { | |
return result; | |
} | |
return this; | |
} else { | |
return target.apply( | |
that, | |
args.concat(slice.call(arguments)) | |
); | |
} | |
}; | |
var boundLength = Math.max(0, target.length - args.length); | |
var boundArgs = []; | |
for (var i = 0; i < boundLength; i++) { | |
boundArgs.push('$' + i); | |
} | |
bound = Function('binder', 'return function (' + boundArgs.join(',') + '){ return binder.apply(this,arguments); }')(binder); | |
if (target.prototype) { | |
var Empty = function Empty() {}; | |
Empty.prototype = target.prototype; | |
bound.prototype = new Empty(); | |
Empty.prototype = null; | |
} | |
return bound; | |
}; | |
},{}],10:[function(require,module,exports){ | |
; | |
var implementation = require('./implementation'); | |
module.exports = Function.prototype.bind || implementation; | |
},{"./implementation":9}],11:[function(require,module,exports){ | |
; | |
var undefined; | |
var $SyntaxError = SyntaxError; | |
var $Function = Function; | |
var $TypeError = TypeError; | |
// eslint-disable-next-line consistent-return | |
var getEvalledConstructor = function (expressionSyntax) { | |
try { | |
return $Function('"use strict"; return (' + expressionSyntax + ').constructor;')(); | |
} catch (e) {} | |
}; | |
var $gOPD = Object.getOwnPropertyDescriptor; | |
if ($gOPD) { | |
try { | |
$gOPD({}, ''); | |
} catch (e) { | |
$gOPD = null; // this is IE 8, which has a broken gOPD | |
} | |
} | |
var throwTypeError = function () { | |
throw new $TypeError(); | |
}; | |
var ThrowTypeError = $gOPD | |
? (function () { | |
try { | |
// eslint-disable-next-line no-unused-expressions, no-caller, no-restricted-properties | |
arguments.callee; // IE 8 does not throw here | |
return throwTypeError; | |
} catch (calleeThrows) { | |
try { | |
// IE 8 throws on Object.getOwnPropertyDescriptor(arguments, '') | |
return $gOPD(arguments, 'callee').get; | |
} catch (gOPDthrows) { | |
return throwTypeError; | |
} | |
} | |
}()) | |
: throwTypeError; | |
var hasSymbols = require('has-symbols')(); | |
var getProto = Object.getPrototypeOf || function (x) { return x.__proto__; }; // eslint-disable-line no-proto | |
var needsEval = {}; | |
var TypedArray = typeof Uint8Array === 'undefined' ? undefined : getProto(Uint8Array); | |
var INTRINSICS = { | |
'%AggregateError%': typeof AggregateError === 'undefined' ? undefined : AggregateError, | |
'%Array%': Array, | |
'%ArrayBuffer%': typeof ArrayBuffer === 'undefined' ? undefined : ArrayBuffer, | |
'%ArrayIteratorPrototype%': hasSymbols ? getProto([][Symbol.iterator]()) : undefined, | |
'%AsyncFromSyncIteratorPrototype%': undefined, | |
'%AsyncFunction%': needsEval, | |
'%AsyncGenerator%': needsEval, | |
'%AsyncGeneratorFunction%': needsEval, | |
'%AsyncIteratorPrototype%': needsEval, | |
'%Atomics%': typeof Atomics === 'undefined' ? undefined : Atomics, | |
'%BigInt%': typeof BigInt === 'undefined' ? undefined : BigInt, | |
'%Boolean%': Boolean, | |
'%DataView%': typeof DataView === 'undefined' ? undefined : DataView, | |
'%Date%': Date, | |
'%decodeURI%': decodeURI, | |
'%decodeURIComponent%': decodeURIComponent, | |
'%encodeURI%': encodeURI, | |
'%encodeURIComponent%': encodeURIComponent, | |
'%Error%': Error, | |
'%eval%': eval, // eslint-disable-line no-eval | |
'%EvalError%': EvalError, | |
'%Float32Array%': typeof Float32Array === 'undefined' ? undefined : Float32Array, | |
'%Float64Array%': typeof Float64Array === 'undefined' ? undefined : Float64Array, | |
'%FinalizationRegistry%': typeof FinalizationRegistry === 'undefined' ? undefined : FinalizationRegistry, | |
'%Function%': $Function, | |
'%GeneratorFunction%': needsEval, | |
'%Int8Array%': typeof Int8Array === 'undefined' ? undefined : Int8Array, | |
'%Int16Array%': typeof Int16Array === 'undefined' ? undefined : Int16Array, | |
'%Int32Array%': typeof Int32Array === 'undefined' ? undefined : Int32Array, | |
'%isFinite%': isFinite, | |
'%isNaN%': isNaN, | |
'%IteratorPrototype%': hasSymbols ? getProto(getProto([][Symbol.iterator]())) : undefined, | |
'%JSON%': typeof JSON === 'object' ? JSON : undefined, | |
'%Map%': typeof Map === 'undefined' ? undefined : Map, | |
'%MapIteratorPrototype%': typeof Map === 'undefined' || !hasSymbols ? undefined : getProto(new Map()[Symbol.iterator]()), | |
'%Math%': Math, | |
'%Number%': Number, | |
'%Object%': Object, | |
'%parseFloat%': parseFloat, | |
'%parseInt%': parseInt, | |
'%Promise%': typeof Promise === 'undefined' ? undefined : Promise, | |
'%Proxy%': typeof Proxy === 'undefined' ? undefined : Proxy, | |
'%RangeError%': RangeError, | |
'%ReferenceError%': ReferenceError, | |
'%Reflect%': typeof Reflect === 'undefined' ? undefined : Reflect, | |
'%RegExp%': RegExp, | |
'%Set%': typeof Set === 'undefined' ? undefined : Set, | |
'%SetIteratorPrototype%': typeof Set === 'undefined' || !hasSymbols ? undefined : getProto(new Set()[Symbol.iterator]()), | |
'%SharedArrayBuffer%': typeof SharedArrayBuffer === 'undefined' ? undefined : SharedArrayBuffer, | |
'%String%': String, | |
'%StringIteratorPrototype%': hasSymbols ? getProto(''[Symbol.iterator]()) : undefined, | |
'%Symbol%': hasSymbols ? Symbol : undefined, | |
'%SyntaxError%': $SyntaxError, | |
'%ThrowTypeError%': ThrowTypeError, | |
'%TypedArray%': TypedArray, | |
'%TypeError%': $TypeError, | |
'%Uint8Array%': typeof Uint8Array === 'undefined' ? undefined : Uint8Array, | |
'%Uint8ClampedArray%': typeof Uint8ClampedArray === 'undefined' ? undefined : Uint8ClampedArray, | |
'%Uint16Array%': typeof Uint16Array === 'undefined' ? undefined : Uint16Array, | |
'%Uint32Array%': typeof Uint32Array === 'undefined' ? undefined : Uint32Array, | |
'%URIError%': URIError, | |
'%WeakMap%': typeof WeakMap === 'undefined' ? undefined : WeakMap, | |
'%WeakRef%': typeof WeakRef === 'undefined' ? undefined : WeakRef, | |
'%WeakSet%': typeof WeakSet === 'undefined' ? undefined : WeakSet | |
}; | |
var doEval = function doEval(name) { | |
var value; | |
if (name === '%AsyncFunction%') { | |
value = getEvalledConstructor('async function () {}'); | |
} else if (name === '%GeneratorFunction%') { | |
value = getEvalledConstructor('function* () {}'); | |
} else if (name === '%AsyncGeneratorFunction%') { | |
value = getEvalledConstructor('async function* () {}'); | |
} else if (name === '%AsyncGenerator%') { | |
var fn = doEval('%AsyncGeneratorFunction%'); | |
if (fn) { | |
value = fn.prototype; | |
} | |
} else if (name === '%AsyncIteratorPrototype%') { | |
var gen = doEval('%AsyncGenerator%'); | |
if (gen) { | |
value = getProto(gen.prototype); | |
} | |
} | |
INTRINSICS[name] = value; | |
return value; | |
}; | |
var LEGACY_ALIASES = { | |
'%ArrayBufferPrototype%': ['ArrayBuffer', 'prototype'], | |
'%ArrayPrototype%': ['Array', 'prototype'], | |
'%ArrayProto_entries%': ['Array', 'prototype', 'entries'], | |
'%ArrayProto_forEach%': ['Array', 'prototype', 'forEach'], | |
'%ArrayProto_keys%': ['Array', 'prototype', 'keys'], | |
'%ArrayProto_values%': ['Array', 'prototype', 'values'], | |
'%AsyncFunctionPrototype%': ['AsyncFunction', 'prototype'], | |
'%AsyncGenerator%': ['AsyncGeneratorFunction', 'prototype'], | |
'%AsyncGeneratorPrototype%': ['AsyncGeneratorFunction', 'prototype', 'prototype'], | |
'%BooleanPrototype%': ['Boolean', 'prototype'], | |
'%DataViewPrototype%': ['DataView', 'prototype'], | |
'%DatePrototype%': ['Date', 'prototype'], | |
'%ErrorPrototype%': ['Error', 'prototype'], | |
'%EvalErrorPrototype%': ['EvalError', 'prototype'], | |
'%Float32ArrayPrototype%': ['Float32Array', 'prototype'], | |
'%Float64ArrayPrototype%': ['Float64Array', 'prototype'], | |
'%FunctionPrototype%': ['Function', 'prototype'], | |
'%Generator%': ['GeneratorFunction', 'prototype'], | |
'%GeneratorPrototype%': ['GeneratorFunction', 'prototype', 'prototype'], | |
'%Int8ArrayPrototype%': ['Int8Array', 'prototype'], | |
'%Int16ArrayPrototype%': ['Int16Array', 'prototype'], | |
'%Int32ArrayPrototype%': ['Int32Array', 'prototype'], | |
'%JSONParse%': ['JSON', 'parse'], | |
'%JSONStringify%': ['JSON', 'stringify'], | |
'%MapPrototype%': ['Map', 'prototype'], | |
'%NumberPrototype%': ['Number', 'prototype'], | |
'%ObjectPrototype%': ['Object', 'prototype'], | |
'%ObjProto_toString%': ['Object', 'prototype', 'toString'], | |
'%ObjProto_valueOf%': ['Object', 'prototype', 'valueOf'], | |
'%PromisePrototype%': ['Promise', 'prototype'], | |
'%PromiseProto_then%': ['Promise', 'prototype', 'then'], | |
'%Promise_all%': ['Promise', 'all'], | |
'%Promise_reject%': ['Promise', 'reject'], | |
'%Promise_resolve%': ['Promise', 'resolve'], | |
'%RangeErrorPrototype%': ['RangeError', 'prototype'], | |
'%ReferenceErrorPrototype%': ['ReferenceError', 'prototype'], | |
'%RegExpPrototype%': ['RegExp', 'prototype'], | |
'%SetPrototype%': ['Set', 'prototype'], | |
'%SharedArrayBufferPrototype%': ['SharedArrayBuffer', 'prototype'], | |
'%StringPrototype%': ['String', 'prototype'], | |
'%SymbolPrototype%': ['Symbol', 'prototype'], | |
'%SyntaxErrorPrototype%': ['SyntaxError', 'prototype'], | |
'%TypedArrayPrototype%': ['TypedArray', 'prototype'], | |
'%TypeErrorPrototype%': ['TypeError', 'prototype'], | |
'%Uint8ArrayPrototype%': ['Uint8Array', 'prototype'], | |
'%Uint8ClampedArrayPrototype%': ['Uint8ClampedArray', 'prototype'], | |
'%Uint16ArrayPrototype%': ['Uint16Array', 'prototype'], | |
'%Uint32ArrayPrototype%': ['Uint32Array', 'prototype'], | |
'%URIErrorPrototype%': ['URIError', 'prototype'], | |
'%WeakMapPrototype%': ['WeakMap', 'prototype'], | |
'%WeakSetPrototype%': ['WeakSet', 'prototype'] | |
}; | |
var bind = require('function-bind'); | |
var hasOwn = require('has'); | |
var $concat = bind.call(Function.call, Array.prototype.concat); | |
var $spliceApply = bind.call(Function.apply, Array.prototype.splice); | |
var $replace = bind.call(Function.call, String.prototype.replace); | |
var $strSlice = bind.call(Function.call, String.prototype.slice); | |
/* adapted from https://github.com/lodash/lodash/blob/4.17.15/dist/lodash.js#L6735-L6744 */ | |
var rePropName = /[^%.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|%$))/g; | |
var reEscapeChar = /\\(\\)?/g; /** Used to match backslashes in property paths. */ | |
var stringToPath = function stringToPath(string) { | |
var first = $strSlice(string, 0, 1); | |
var last = $strSlice(string, -1); | |
if (first === '%' && last !== '%') { | |
throw new $SyntaxError('invalid intrinsic syntax, expected closing `%`'); | |
} else if (last === '%' && first !== '%') { | |
throw new $SyntaxError('invalid intrinsic syntax, expected opening `%`'); | |
} | |
var result = []; | |
$replace(string, rePropName, function (match, number, quote, subString) { | |
result[result.length] = quote ? $replace(subString, reEscapeChar, '$1') : number || match; | |
}); | |
return result; | |
}; | |
/* end adaptation */ | |
var getBaseIntrinsic = function getBaseIntrinsic(name, allowMissing) { | |
var intrinsicName = name; | |
var alias; | |
if (hasOwn(LEGACY_ALIASES, intrinsicName)) { | |
alias = LEGACY_ALIASES[intrinsicName]; | |
intrinsicName = '%' + alias[0] + '%'; | |
} | |
if (hasOwn(INTRINSICS, intrinsicName)) { | |
var value = INTRINSICS[intrinsicName]; | |
if (value === needsEval) { | |
value = doEval(intrinsicName); | |
} | |
if (typeof value === 'undefined' && !allowMissing) { | |
throw new $TypeError('intrinsic ' + name + ' exists, but is not available. Please file an issue!'); | |
} | |
return { | |
alias: alias, | |
name: intrinsicName, | |
value: value | |
}; | |
} | |
throw new $SyntaxError('intrinsic ' + name + ' does not exist!'); | |
}; | |
module.exports = function GetIntrinsic(name, allowMissing) { | |
if (typeof name !== 'string' || name.length === 0) { | |
throw new $TypeError('intrinsic name must be a non-empty string'); | |
} | |
if (arguments.length > 1 && typeof allowMissing !== 'boolean') { | |
throw new $TypeError('"allowMissing" argument must be a boolean'); | |
} | |
var parts = stringToPath(name); | |
var intrinsicBaseName = parts.length > 0 ? parts[0] : ''; | |
var intrinsic = getBaseIntrinsic('%' + intrinsicBaseName + '%', allowMissing); | |
var intrinsicRealName = intrinsic.name; | |
var value = intrinsic.value; | |
var skipFurtherCaching = false; | |
var alias = intrinsic.alias; | |
if (alias) { | |
intrinsicBaseName = alias[0]; | |
$spliceApply(parts, $concat([0, 1], alias)); | |
} | |
for (var i = 1, isOwn = true; i < parts.length; i += 1) { | |
var part = parts[i]; | |
var first = $strSlice(part, 0, 1); | |
var last = $strSlice(part, -1); | |
if ( | |
( | |
(first === '"' || first === "'" || first === '`') | |
|| (last === '"' || last === "'" || last === '`') | |
) | |
&& first !== last | |
) { | |
throw new $SyntaxError('property names with quotes must have matching quotes'); | |
} | |
if (part === 'constructor' || !isOwn) { | |
skipFurtherCaching = true; | |
} | |
intrinsicBaseName += '.' + part; | |
intrinsicRealName = '%' + intrinsicBaseName + '%'; | |
if (hasOwn(INTRINSICS, intrinsicRealName)) { | |
value = INTRINSICS[intrinsicRealName]; | |
} else if (value != null) { | |
if (!(part in value)) { | |
if (!allowMissing) { | |
throw new $TypeError('base intrinsic for ' + name + ' exists, but the property is not available.'); | |
} | |
return void undefined; | |
} | |
if ($gOPD && (i + 1) >= parts.length) { | |
var desc = $gOPD(value, part); | |
isOwn = !!desc; | |
// By convention, when a data property is converted to an accessor | |
// property to emulate a data property that does not suffer from | |
// the override mistake, that accessor's getter is marked with | |
// an `originalValue` property. Here, when we detect this, we | |
// uphold the illusion by pretending to see that original data | |
// property, i.e., returning the value rather than the getter | |
// itself. | |
if (isOwn && 'get' in desc && !('originalValue' in desc.get)) { | |
value = desc.get; | |
} else { | |
value = value[part]; | |
} | |
} else { | |
isOwn = hasOwn(value, part); | |
value = value[part]; | |
} | |
if (isOwn && !skipFurtherCaching) { | |
INTRINSICS[intrinsicRealName] = value; | |
} | |
} | |
} | |
return value; | |
}; | |
},{"function-bind":10,"has":14,"has-symbols":12}],12:[function(require,module,exports){ | |
; | |
var origSymbol = typeof Symbol !== 'undefined' && Symbol; | |
var hasSymbolSham = require('./shams'); | |
module.exports = function hasNativeSymbols() { | |
if (typeof origSymbol !== 'function') { return false; } | |
if (typeof Symbol !== 'function') { return false; } | |
if (typeof origSymbol('foo') !== 'symbol') { return false; } | |
if (typeof Symbol('bar') !== 'symbol') { return false; } | |
return hasSymbolSham(); | |
}; | |
},{"./shams":13}],13:[function(require,module,exports){ | |
; | |
/* eslint complexity: [2, 18], max-statements: [2, 33] */ | |
module.exports = function hasSymbols() { | |
if (typeof Symbol !== 'function' || typeof Object.getOwnPropertySymbols !== 'function') { return false; } | |
if (typeof Symbol.iterator === 'symbol') { return true; } | |
var obj = {}; | |
var sym = Symbol('test'); | |
var symObj = Object(sym); | |
if (typeof sym === 'string') { return false; } | |
if (Object.prototype.toString.call(sym) !== '[object Symbol]') { return false; } | |
if (Object.prototype.toString.call(symObj) !== '[object Symbol]') { return false; } | |
// temp disabled per https://github.com/ljharb/object.assign/issues/17 | |
// if (sym instanceof Symbol) { return false; } | |
// temp disabled per https://github.com/WebReflection/get-own-property-symbols/issues/4 | |
// if (!(symObj instanceof Symbol)) { return false; } | |
// if (typeof Symbol.prototype.toString !== 'function') { return false; } | |
// if (String(sym) !== Symbol.prototype.toString.call(sym)) { return false; } | |
var symVal = 42; | |
obj[sym] = symVal; | |
for (sym in obj) { return false; } // eslint-disable-line no-restricted-syntax, no-unreachable-loop | |
if (typeof Object.keys === 'function' && Object.keys(obj).length !== 0) { return false; } | |
if (typeof Object.getOwnPropertyNames === 'function' && Object.getOwnPropertyNames(obj).length !== 0) { return false; } | |
var syms = Object.getOwnPropertySymbols(obj); | |
if (syms.length !== 1 || syms[0] !== sym) { return false; } | |
if (!Object.prototype.propertyIsEnumerable.call(obj, sym)) { return false; } | |
if (typeof Object.getOwnPropertyDescriptor === 'function') { | |
var descriptor = Object.getOwnPropertyDescriptor(obj, sym); | |
if (descriptor.value !== symVal || descriptor.enumerable !== true) { return false; } | |
} | |
return true; | |
}; | |
},{}],14:[function(require,module,exports){ | |
; | |
var bind = require('function-bind'); | |
module.exports = bind.call(Function.call, Object.prototype.hasOwnProperty); | |
},{"function-bind":10}],15:[function(require,module,exports){ | |
var hasMap = typeof Map === 'function' && Map.prototype; | |
var mapSizeDescriptor = Object.getOwnPropertyDescriptor && hasMap ? Object.getOwnPropertyDescriptor(Map.prototype, 'size') : null; | |
var mapSize = hasMap && mapSizeDescriptor && typeof mapSizeDescriptor.get === 'function' ? mapSizeDescriptor.get : null; | |
var mapForEach = hasMap && Map.prototype.forEach; | |
var hasSet = typeof Set === 'function' && Set.prototype; | |
var setSizeDescriptor = Object.getOwnPropertyDescriptor && hasSet ? Object.getOwnPropertyDescriptor(Set.prototype, 'size') : null; | |
var setSize = hasSet && setSizeDescriptor && typeof setSizeDescriptor.get === 'function' ? setSizeDescriptor.get : null; | |
var setForEach = hasSet && Set.prototype.forEach; | |
var hasWeakMap = typeof WeakMap === 'function' && WeakMap.prototype; | |
var weakMapHas = hasWeakMap ? WeakMap.prototype.has : null; | |
var hasWeakSet = typeof WeakSet === 'function' && WeakSet.prototype; | |
var weakSetHas = hasWeakSet ? WeakSet.prototype.has : null; | |
var hasWeakRef = typeof WeakRef === 'function' && WeakRef.prototype; | |
var weakRefDeref = hasWeakRef ? WeakRef.prototype.deref : null; | |
var booleanValueOf = Boolean.prototype.valueOf; | |
var objectToString = Object.prototype.toString; | |
var functionToString = Function.prototype.toString; | |
var $match = String.prototype.match; | |
var $slice = String.prototype.slice; | |
var $replace = String.prototype.replace; | |
var $toUpperCase = String.prototype.toUpperCase; | |
var $toLowerCase = String.prototype.toLowerCase; | |
var $test = RegExp.prototype.test; | |
var $concat = Array.prototype.concat; | |
var $join = Array.prototype.join; | |
var $arrSlice = Array.prototype.slice; | |
var $floor = Math.floor; | |
var bigIntValueOf = typeof BigInt === 'function' ? BigInt.prototype.valueOf : null; | |
var gOPS = Object.getOwnPropertySymbols; | |
var symToString = typeof Symbol === 'function' && typeof Symbol.iterator === 'symbol' ? Symbol.prototype.toString : null; | |
var hasShammedSymbols = typeof Symbol === 'function' && typeof Symbol.iterator === 'object'; | |
// ie, `has-tostringtag/shams | |
var toStringTag = typeof Symbol === 'function' && Symbol.toStringTag && (typeof Symbol.toStringTag === hasShammedSymbols ? 'object' : 'symbol') | |
? Symbol.toStringTag | |
: null; | |
var isEnumerable = Object.prototype.propertyIsEnumerable; | |
var gPO = (typeof Reflect === 'function' ? Reflect.getPrototypeOf : Object.getPrototypeOf) || ( | |
[].__proto__ === Array.prototype // eslint-disable-line no-proto | |
? function (O) { | |
return O.__proto__; // eslint-disable-line no-proto | |
} | |
: null | |
); | |
function addNumericSeparator(num, str) { | |
if ( | |
num === Infinity | |
|| num === -Infinity | |
|| num !== num | |
|| (num && num > -1000 && num < 1000) | |
|| $test.call(/e/, str) | |
) { | |
return str; | |
} | |
var sepRegex = /[0-9](?=(?:[0-9]{3})+(?![0-9]))/g; | |
if (typeof num === 'number') { | |
var int = num < 0 ? -$floor(-num) : $floor(num); // trunc(num) | |
if (int !== num) { | |
var intStr = String(int); | |
var dec = $slice.call(str, intStr.length + 1); | |
return $replace.call(intStr, sepRegex, '$&_') + '.' + $replace.call($replace.call(dec, /([0-9]{3})/g, '$&_'), /_$/, ''); | |
} | |
} | |
return $replace.call(str, sepRegex, '$&_'); | |
} | |
var utilInspect = require('./util.inspect'); | |
var inspectCustom = utilInspect.custom; | |
var inspectSymbol = isSymbol(inspectCustom) ? inspectCustom : null; | |
module.exports = function inspect_(obj, options, depth, seen) { | |
var opts = options || {}; | |
if (has(opts, 'quoteStyle') && (opts.quoteStyle !== 'single' && opts.quoteStyle !== 'double')) { | |
throw new TypeError('option "quoteStyle" must be "single" or "double"'); | |
} | |
if ( | |
has(opts, 'maxStringLength') && (typeof opts.maxStringLength === 'number' | |
? opts.maxStringLength < 0 && opts.maxStringLength !== Infinity | |
: opts.maxStringLength !== null | |
) | |
) { | |
throw new TypeError('option "maxStringLength", if provided, must be a positive integer, Infinity, or `null`'); | |
} | |
var customInspect = has(opts, 'customInspect') ? opts.customInspect : true; | |
if (typeof customInspect !== 'boolean' && customInspect !== 'symbol') { | |
throw new TypeError('option "customInspect", if provided, must be `true`, `false`, or `\'symbol\'`'); | |
} | |
if ( | |
has(opts, 'indent') | |
&& opts.indent !== null | |
&& opts.indent !== '\t' | |
&& !(parseInt(opts.indent, 10) === opts.indent && opts.indent > 0) | |
) { | |
throw new TypeError('option "indent" must be "\\t", an integer > 0, or `null`'); | |
} | |
if (has(opts, 'numericSeparator') && typeof opts.numericSeparator !== 'boolean') { | |
throw new TypeError('option "numericSeparator", if provided, must be `true` or `false`'); | |
} | |
var numericSeparator = opts.numericSeparator; | |
if (typeof obj === 'undefined') { | |
return 'undefined'; | |
} | |
if (obj === null) { | |
return 'null'; | |
} | |
if (typeof obj === 'boolean') { | |
return obj ? 'true' : 'false'; | |
} | |
if (typeof obj === 'string') { | |
return inspectString(obj, opts); | |
} | |
if (typeof obj === 'number') { | |
if (obj === 0) { | |
return Infinity / obj > 0 ? '0' : '-0'; | |
} | |
var str = String(obj); | |
return numericSeparator ? addNumericSeparator(obj, str) : str; | |
} | |
if (typeof obj === 'bigint') { | |
var bigIntStr = String(obj) + 'n'; | |
return numericSeparator ? addNumericSeparator(obj, bigIntStr) : bigIntStr; | |
} | |
var maxDepth = typeof opts.depth === 'undefined' ? 5 : opts.depth; | |
if (typeof depth === 'undefined') { depth = 0; } | |
if (depth >= maxDepth && maxDepth > 0 && typeof obj === 'object') { | |
return isArray(obj) ? '[Array]' : '[Object]'; | |
} | |
var indent = getIndent(opts, depth); | |
if (typeof seen === 'undefined') { | |
seen = []; | |
} else if (indexOf(seen, obj) >= 0) { | |
return '[Circular]'; | |
} | |
function inspect(value, from, noIndent) { | |
if (from) { | |
seen = $arrSlice.call(seen); | |
seen.push(from); | |
} | |
if (noIndent) { | |
var newOpts = { | |
depth: opts.depth | |
}; | |
if (has(opts, 'quoteStyle')) { | |
newOpts.quoteStyle = opts.quoteStyle; | |
} | |
return inspect_(value, newOpts, depth + 1, seen); | |
} | |
return inspect_(value, opts, depth + 1, seen); | |
} | |
if (typeof obj === 'function' && !isRegExp(obj)) { // in older engines, regexes are callable | |
var name = nameOf(obj); | |
var keys = arrObjKeys(obj, inspect); | |
return '[Function' + (name ? ': ' + name : ' (anonymous)') + ']' + (keys.length > 0 ? ' { ' + $join.call(keys, ', ') + ' }' : ''); | |
} | |
if (isSymbol(obj)) { | |
var symString = hasShammedSymbols ? $replace.call(String(obj), /^(Symbol\(.*\))_[^)]*$/, '$1') : symToString.call(obj); | |
return typeof obj === 'object' && !hasShammedSymbols ? markBoxed(symString) : symString; | |
} | |
if (isElement(obj)) { | |
var s = '<' + $toLowerCase.call(String(obj.nodeName)); | |
var attrs = obj.attributes || []; | |
for (var i = 0; i < attrs.length; i++) { | |
s += ' ' + attrs[i].name + '=' + wrapQuotes(quote(attrs[i].value), 'double', opts); | |
} | |
s += '>'; | |
if (obj.childNodes && obj.childNodes.length) { s += '...'; } | |
s += '</' + $toLowerCase.call(String(obj.nodeName)) + '>'; | |
return s; | |
} | |
if (isArray(obj)) { | |
if (obj.length === 0) { return '[]'; } | |
var xs = arrObjKeys(obj, inspect); | |
if (indent && !singleLineValues(xs)) { | |
return '[' + indentedJoin(xs, indent) + ']'; | |
} | |
return '[ ' + $join.call(xs, ', ') + ' ]'; | |
} | |
if (isError(obj)) { | |
var parts = arrObjKeys(obj, inspect); | |
if (!('cause' in Error.prototype) && 'cause' in obj && !isEnumerable.call(obj, 'cause')) { | |
return '{ [' + String(obj) + '] ' + $join.call($concat.call('[cause]: ' + inspect(obj.cause), parts), ', ') + ' }'; | |
} | |
if (parts.length === 0) { return '[' + String(obj) + ']'; } | |
return '{ [' + String(obj) + '] ' + $join.call(parts, ', ') + ' }'; | |
} | |
if (typeof obj === 'object' && customInspect) { | |
if (inspectSymbol && typeof obj[inspectSymbol] === 'function' && utilInspect) { | |
return utilInspect(obj, { depth: maxDepth - depth }); | |
} else if (customInspect !== 'symbol' && typeof obj.inspect === 'function') { | |
return obj.inspect(); | |
} | |
} | |
if (isMap(obj)) { | |
var mapParts = []; | |
mapForEach.call(obj, function (value, key) { | |
mapParts.push(inspect(key, obj, true) + ' => ' + inspect(value, obj)); | |
}); | |
return collectionOf('Map', mapSize.call(obj), mapParts, indent); | |
} | |
if (isSet(obj)) { | |
var setParts = []; | |
setForEach.call(obj, function (value) { | |
setParts.push(inspect(value, obj)); | |
}); | |
return collectionOf('Set', setSize.call(obj), setParts, indent); | |
} | |
if (isWeakMap(obj)) { | |
return weakCollectionOf('WeakMap'); | |
} | |
if (isWeakSet(obj)) { | |
return weakCollectionOf('WeakSet'); | |
} | |
if (isWeakRef(obj)) { | |
return weakCollectionOf('WeakRef'); | |
} | |
if (isNumber(obj)) { | |
return markBoxed(inspect(Number(obj))); | |
} | |
if (isBigInt(obj)) { | |
return markBoxed(inspect(bigIntValueOf.call(obj))); | |
} | |
if (isBoolean(obj)) { | |
return markBoxed(booleanValueOf.call(obj)); | |
} | |
if (isString(obj)) { | |
return markBoxed(inspect(String(obj))); | |
} | |
if (!isDate(obj) && !isRegExp(obj)) { | |
var ys = arrObjKeys(obj, inspect); | |
var isPlainObject = gPO ? gPO(obj) === Object.prototype : obj instanceof Object || obj.constructor === Object; | |
var protoTag = obj instanceof Object ? '' : 'null prototype'; | |
var stringTag = !isPlainObject && toStringTag && Object(obj) === obj && toStringTag in obj ? $slice.call(toStr(obj), 8, -1) : protoTag ? 'Object' : ''; | |
var constructorTag = isPlainObject || typeof obj.constructor !== 'function' ? '' : obj.constructor.name ? obj.constructor.name + ' ' : ''; | |
var tag = constructorTag + (stringTag || protoTag ? '[' + $join.call($concat.call([], stringTag || [], protoTag || []), ': ') + '] ' : ''); | |
if (ys.length === 0) { return tag + '{}'; } | |
if (indent) { | |
return tag + '{' + indentedJoin(ys, indent) + '}'; | |
} | |
return tag + '{ ' + $join.call(ys, ', ') + ' }'; | |
} | |
return String(obj); | |
}; | |
function wrapQuotes(s, defaultStyle, opts) { | |
var quoteChar = (opts.quoteStyle || defaultStyle) === 'double' ? '"' : "'"; | |
return quoteChar + s + quoteChar; | |
} | |
function quote(s) { | |
return $replace.call(String(s), /"/g, '"'); | |
} | |
function isArray(obj) { return toStr(obj) === '[object Array]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isDate(obj) { return toStr(obj) === '[object Date]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isRegExp(obj) { return toStr(obj) === '[object RegExp]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isError(obj) { return toStr(obj) === '[object Error]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isString(obj) { return toStr(obj) === '[object String]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isNumber(obj) { return toStr(obj) === '[object Number]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
function isBoolean(obj) { return toStr(obj) === '[object Boolean]' && (!toStringTag || !(typeof obj === 'object' && toStringTag in obj)); } | |
// Symbol and BigInt do have Symbol.toStringTag by spec, so that can't be used to eliminate false positives | |
function isSymbol(obj) { | |
if (hasShammedSymbols) { | |
return obj && typeof obj === 'object' && obj instanceof Symbol; | |
} | |
if (typeof obj === 'symbol') { | |
return true; | |
} | |
if (!obj || typeof obj !== 'object' || !symToString) { | |
return false; | |
} | |
try { | |
symToString.call(obj); | |
return true; | |
} catch (e) {} | |
return false; | |
} | |
function isBigInt(obj) { | |
if (!obj || typeof obj !== 'object' || !bigIntValueOf) { | |
return false; | |
} | |
try { | |
bigIntValueOf.call(obj); | |
return true; | |
} catch (e) {} | |
return false; | |
} | |
var hasOwn = Object.prototype.hasOwnProperty || function (key) { return key in this; }; | |
function has(obj, key) { | |
return hasOwn.call(obj, key); | |
} | |
function toStr(obj) { | |
return objectToString.call(obj); | |
} | |
function nameOf(f) { | |
if (f.name) { return f.name; } | |
var m = $match.call(functionToString.call(f), /^function\s*([\w$]+)/); | |
if (m) { return m[1]; } | |
return null; | |
} | |
function indexOf(xs, x) { | |
if (xs.indexOf) { return xs.indexOf(x); } | |
for (var i = 0, l = xs.length; i < l; i++) { | |
if (xs[i] === x) { return i; } | |
} | |
return -1; | |
} | |
function isMap(x) { | |
if (!mapSize || !x || typeof x !== 'object') { | |
return false; | |
} | |
try { | |
mapSize.call(x); | |
try { | |
setSize.call(x); | |
} catch (s) { | |
return true; | |
} | |
return x instanceof Map; // core-js workaround, pre-v2.5.0 | |
} catch (e) {} | |
return false; | |
} | |
function isWeakMap(x) { | |
if (!weakMapHas || !x || typeof x !== 'object') { | |
return false; | |
} | |
try { | |
weakMapHas.call(x, weakMapHas); | |
try { | |
weakSetHas.call(x, weakSetHas); | |
} catch (s) { | |
return true; | |
} | |
return x instanceof WeakMap; // core-js workaround, pre-v2.5.0 | |
} catch (e) {} | |
return false; | |
} | |
function isWeakRef(x) { | |
if (!weakRefDeref || !x || typeof x !== 'object') { | |
return false; | |
} | |
try { | |
weakRefDeref.call(x); | |
return true; | |
} catch (e) {} | |
return false; | |
} | |
function isSet(x) { | |
if (!setSize || !x || typeof x !== 'object') { | |
return false; | |
} | |
try { | |
setSize.call(x); | |
try { | |
mapSize.call(x); | |
} catch (m) { | |
return true; | |
} | |
return x instanceof Set; // core-js workaround, pre-v2.5.0 | |
} catch (e) {} | |
return false; | |
} | |
function isWeakSet(x) { | |
if (!weakSetHas || !x || typeof x !== 'object') { | |
return false; | |
} | |
try { | |
weakSetHas.call(x, weakSetHas); | |
try { | |
weakMapHas.call(x, weakMapHas); | |
} catch (s) { | |
return true; | |
} | |
return x instanceof WeakSet; // core-js workaround, pre-v2.5.0 | |
} catch (e) {} | |
return false; | |
} | |
function isElement(x) { | |
if (!x || typeof x !== 'object') { return false; } | |
if (typeof HTMLElement !== 'undefined' && x instanceof HTMLElement) { | |
return true; | |
} | |
return typeof x.nodeName === 'string' && typeof x.getAttribute === 'function'; | |
} | |
function inspectString(str, opts) { | |
if (str.length > opts.maxStringLength) { | |
var remaining = str.length - opts.maxStringLength; | |
var trailer = '... ' + remaining + ' more character' + (remaining > 1 ? 's' : ''); | |
return inspectString($slice.call(str, 0, opts.maxStringLength), opts) + trailer; | |
} | |
// eslint-disable-next-line no-control-regex | |
var s = $replace.call($replace.call(str, /(['\\])/g, '\\$1'), /[\x00-\x1f]/g, lowbyte); | |
return wrapQuotes(s, 'single', opts); | |
} | |
function lowbyte(c) { | |
var n = c.charCodeAt(0); | |
var x = { | |
8: 'b', | |
9: 't', | |
10: 'n', | |
12: 'f', | |
13: 'r' | |
}[n]; | |
if (x) { return '\\' + x; } | |
return '\\x' + (n < 0x10 ? '0' : '') + $toUpperCase.call(n.toString(16)); | |
} | |
function markBoxed(str) { | |
return 'Object(' + str + ')'; | |
} | |
function weakCollectionOf(type) { | |
return type + ' { ? }'; | |
} | |
function collectionOf(type, size, entries, indent) { | |
var joinedEntries = indent ? indentedJoin(entries, indent) : $join.call(entries, ', '); | |
return type + ' (' + size + ') {' + joinedEntries + '}'; | |
} | |
function singleLineValues(xs) { | |
for (var i = 0; i < xs.length; i++) { | |
if (indexOf(xs[i], '\n') >= 0) { | |
return false; | |
} | |
} | |
return true; | |
} | |
function getIndent(opts, depth) { | |
var baseIndent; | |
if (opts.indent === '\t') { | |
baseIndent = '\t'; | |
} else if (typeof opts.indent === 'number' && opts.indent > 0) { | |
baseIndent = $join.call(Array(opts.indent + 1), ' '); | |
} else { | |
return null; | |
} | |
return { | |
base: baseIndent, | |
prev: $join.call(Array(depth + 1), baseIndent) | |
}; | |
} | |
function indentedJoin(xs, indent) { | |
if (xs.length === 0) { return ''; } | |
var lineJoiner = '\n' + indent.prev + indent.base; | |
return lineJoiner + $join.call(xs, ',' + lineJoiner) + '\n' + indent.prev; | |
} | |
function arrObjKeys(obj, inspect) { | |
var isArr = isArray(obj); | |
var xs = []; | |
if (isArr) { | |
xs.length = obj.length; | |
for (var i = 0; i < obj.length; i++) { | |
xs[i] = has(obj, i) ? inspect(obj[i], obj) : ''; | |
} | |
} | |
var syms = typeof gOPS === 'function' ? gOPS(obj) : []; | |
var symMap; | |
if (hasShammedSymbols) { | |
symMap = {}; | |
for (var k = 0; k < syms.length; k++) { | |
symMap['$' + syms[k]] = syms[k]; | |
} | |
} | |
for (var key in obj) { // eslint-disable-line no-restricted-syntax | |
if (!has(obj, key)) { continue; } // eslint-disable-line no-restricted-syntax, no-continue | |
if (isArr && String(Number(key)) === key && key < obj.length) { continue; } // eslint-disable-line no-restricted-syntax, no-continue | |
if (hasShammedSymbols && symMap['$' + key] instanceof Symbol) { | |
// this is to prevent shammed Symbols, which are stored as strings, from being included in the string key section | |
continue; // eslint-disable-line no-restricted-syntax, no-continue | |
} else if ($test.call(/[^\w$]/, key)) { | |
xs.push(inspect(key, obj) + ': ' + inspect(obj[key], obj)); | |
} else { | |
xs.push(key + ': ' + inspect(obj[key], obj)); | |
} | |
} | |
if (typeof gOPS === 'function') { | |
for (var j = 0; j < syms.length; j++) { | |
if (isEnumerable.call(obj, syms[j])) { | |
xs.push('[' + inspect(syms[j]) + ']: ' + inspect(obj[syms[j]], obj)); | |
} | |
} | |
} | |
return xs; | |
} | |
},{"./util.inspect":6}],16:[function(require,module,exports){ | |
; | |
var GetIntrinsic = require('get-intrinsic'); | |
var callBound = require('call-bind/callBound'); | |
var inspect = require('object-inspect'); | |
var $TypeError = GetIntrinsic('%TypeError%'); | |
var $WeakMap = GetIntrinsic('%WeakMap%', true); | |
var $Map = GetIntrinsic('%Map%', true); | |
var $weakMapGet = callBound('WeakMap.prototype.get', true); | |
var $weakMapSet = callBound('WeakMap.prototype.set', true); | |
var $weakMapHas = callBound('WeakMap.prototype.has', true); | |
var $mapGet = callBound('Map.prototype.get', true); | |
var $mapSet = callBound('Map.prototype.set', true); | |
var $mapHas = callBound('Map.prototype.has', true); | |
/* | |
* This function traverses the list returning the node corresponding to the | |
* given key. | |
* | |
* That node is also moved to the head of the list, so that if it's accessed | |
* again we don't need to traverse the whole list. By doing so, all the recently | |
* used nodes can be accessed relatively quickly. | |
*/ | |
var listGetNode = function (list, key) { // eslint-disable-line consistent-return | |
for (var prev = list, curr; (curr = prev.next) !== null; prev = curr) { | |
if (curr.key === key) { | |
prev.next = curr.next; | |
curr.next = list.next; | |
list.next = curr; // eslint-disable-line no-param-reassign | |
return curr; | |
} | |
} | |
}; | |
var listGet = function (objects, key) { | |
var node = listGetNode(objects, key); | |
return node && node.value; | |
}; | |
var listSet = function (objects, key, value) { | |
var node = listGetNode(objects, key); | |
if (node) { | |
node.value = value; | |
} else { | |
// Prepend the new node to the beginning of the list | |
objects.next = { // eslint-disable-line no-param-reassign | |
key: key, | |
next: objects.next, | |
value: value | |
}; | |
} | |
}; | |
var listHas = function (objects, key) { | |
return !!listGetNode(objects, key); | |
}; | |
module.exports = function getSideChannel() { | |
var $wm; | |
var $m; | |
var $o; | |
var channel = { | |
assert: function (key) { | |
if (!channel.has(key)) { | |
throw new $TypeError('Side channel does not contain ' + inspect(key)); | |
} | |
}, | |
get: function (key) { // eslint-disable-line consistent-return | |
if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { | |
if ($wm) { | |
return $weakMapGet($wm, key); | |
} | |
} else if ($Map) { | |
if ($m) { | |
return $mapGet($m, key); | |
} | |
} else { | |
if ($o) { // eslint-disable-line no-lonely-if | |
return listGet($o, key); | |
} | |
} | |
}, | |
has: function (key) { | |
if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { | |
if ($wm) { | |
return $weakMapHas($wm, key); | |
} | |
} else if ($Map) { | |
if ($m) { | |
return $mapHas($m, key); | |
} | |
} else { | |
if ($o) { // eslint-disable-line no-lonely-if | |
return listHas($o, key); | |
} | |
} | |
return false; | |
}, | |
set: function (key, value) { | |
if ($WeakMap && key && (typeof key === 'object' || typeof key === 'function')) { | |
if (!$wm) { | |
$wm = new $WeakMap(); | |
} | |
$weakMapSet($wm, key, value); | |
} else if ($Map) { | |
if (!$m) { | |
$m = new $Map(); | |
} | |
$mapSet($m, key, value); | |
} else { | |
if (!$o) { | |
/* | |
* Initialize the linked list as an empty node, so that we don't have | |
* to special-case handling of the first node: we can always refer to | |
* it as (previous node).next, instead of something like (list).head | |
*/ | |
$o = { key: {}, next: null }; | |
} | |
listSet($o, key, value); | |
} | |
} | |
}; | |
return channel; | |
}; | |
},{"call-bind/callBound":7,"get-intrinsic":11,"object-inspect":15}]},{},[2])(2) | |
}); | |