var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
- function getDefaultExportFromCjs (x) {
- return x && x.__esModule && Object.prototype.hasOwnProperty.call(x, 'default') ? x['default'] : x;
- }
-
function createCommonjsModule(fn, basedir, module) {
return module = {
path: basedir,
// https://github.com/zloirock/core-js/issues/86#issuecomment-115759028
var global_1 =
- // eslint-disable-next-line no-undef
+ /* global globalThis -- safe */
check(typeof globalThis == 'object' && globalThis) ||
check(typeof window == 'object' && window) ||
check(typeof self == 'object' && self) ||
check(typeof commonjsGlobal == 'object' && commonjsGlobal) ||
- // eslint-disable-next-line no-new-func
+ // eslint-disable-next-line no-new-func -- fallback
(function () { return this; })() || Function('return this')();
var fails = function (exec) {
}
};
- // Thank's IE8 for his funny defineProperty
+ // Detect IE8's incomplete defineProperty implementation
var descriptors = !fails(function () {
return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7;
});
var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1);
// `Object.prototype.propertyIsEnumerable` method implementation
- // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable
+ // https://tc39.es/ecma262/#sec-object.prototype.propertyisenumerable
var f = NASHORN_BUG ? function propertyIsEnumerable(V) {
var descriptor = getOwnPropertyDescriptor(this, V);
return !!descriptor && descriptor.enumerable;
// fallback for non-array-like ES3 and non-enumerable old V8 strings
var indexedObject = fails(function () {
// throws an error in rhino, see https://github.com/mozilla/rhino/issues/346
- // eslint-disable-next-line no-prototype-builtins
+ // eslint-disable-next-line no-prototype-builtins -- safe
return !Object('z').propertyIsEnumerable(0);
}) ? function (it) {
return classofRaw(it) == 'String' ? split.call(it, '') : Object(it);
} : Object;
// `RequireObjectCoercible` abstract operation
- // https://tc39.github.io/ecma262/#sec-requireobjectcoercible
+ // https://tc39.es/ecma262/#sec-requireobjectcoercible
var requireObjectCoercible = function (it) {
if (it == undefined) throw TypeError("Can't call method on " + it);
return it;
};
// `ToPrimitive` abstract operation
- // https://tc39.github.io/ecma262/#sec-toprimitive
+ // https://tc39.es/ecma262/#sec-toprimitive
// instead of the ES6 spec version, we didn't implement @@toPrimitive case
// and the second argument - flag - preferred type is a string
var toPrimitive = function (input, PREFERRED_STRING) {
var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor;
// `Object.getOwnPropertyDescriptor` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
+ // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
var f$1 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) {
O = toIndexedObject(O);
P = toPrimitive(P, true);
var nativeDefineProperty = Object.defineProperty;
// `Object.defineProperty` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperty
+ // https://tc39.es/ecma262/#sec-object.defineproperty
var f$2 = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) {
anObject(O);
P = toPrimitive(P, true);
(module.exports = function (key, value) {
return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {});
})('versions', []).push({
- version: '3.7.0',
+ version: '3.9.1',
mode: 'global',
- copyright: '© 2020 Denis Pushkarev (zloirock.ru)'
+ copyright: '© 2021 Denis Pushkarev (zloirock.ru)'
});
});
var floor = Math.floor;
// `ToInteger` abstract operation
- // https://tc39.github.io/ecma262/#sec-tointeger
+ // https://tc39.es/ecma262/#sec-tointeger
var toInteger = function (argument) {
return isNaN(argument = +argument) ? 0 : (argument > 0 ? floor : ceil)(argument);
};
var min = Math.min;
// `ToLength` abstract operation
- // https://tc39.github.io/ecma262/#sec-tolength
+ // https://tc39.es/ecma262/#sec-tolength
var toLength = function (argument) {
return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991
};
var index = toAbsoluteIndex(fromIndex, length);
var value;
// Array#includes uses SameValueZero equality algorithm
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
if (IS_INCLUDES && el != el) while (length > index) {
value = O[index++];
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
if (value != value) return true;
// Array#indexOf ignores holes, Array#includes - not
} else for (;length > index; index++) {
var arrayIncludes = {
// `Array.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.includes
+ // https://tc39.es/ecma262/#sec-array.prototype.includes
includes: createMethod(true),
// `Array.prototype.indexOf` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
+ // https://tc39.es/ecma262/#sec-array.prototype.indexof
indexOf: createMethod(false)
};
var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype');
// `Object.getOwnPropertyNames` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
+ // https://tc39.es/ecma262/#sec-object.getownpropertynames
var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) {
return objectKeysInternal(O, hiddenKeys$1);
};
};
// `Date.now` method
- // https://tc39.github.io/ecma262/#sec-date.now
+ // https://tc39.es/ecma262/#sec-date.now
_export({ target: 'Date', stat: true }, {
now: function now() {
return new Date().getTime();
var getTime = DatePrototype.getTime;
// `Date.prototype.toString` method
- // https://tc39.github.io/ecma262/#sec-date.prototype.tostring
+ // https://tc39.es/ecma262/#sec-date.prototype.tostring
if (new Date(NaN) + '' != INVALID_DATE) {
redefine(DatePrototype, TO_STRING, function toString() {
var value = getTime.call(this);
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
return value === value ? nativeDateToString.call(this) : INVALID_DATE;
});
}
+ function _typeof(obj) {
+ "@babel/helpers - typeof";
+
+ if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
+ _typeof = function (obj) {
+ return typeof obj;
+ };
+ } else {
+ _typeof = function (obj) {
+ return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
+ };
+ }
+
+ return _typeof(obj);
+ }
+
+ function _classCallCheck(instance, Constructor) {
+ if (!(instance instanceof Constructor)) {
+ throw new TypeError("Cannot call a class as a function");
+ }
+ }
+
+ function _defineProperties(target, props) {
+ for (var i = 0; i < props.length; i++) {
+ var descriptor = props[i];
+ descriptor.enumerable = descriptor.enumerable || false;
+ descriptor.configurable = true;
+ if ("value" in descriptor) descriptor.writable = true;
+ Object.defineProperty(target, descriptor.key, descriptor);
+ }
+ }
+
+ function _createClass(Constructor, protoProps, staticProps) {
+ if (protoProps) _defineProperties(Constructor.prototype, protoProps);
+ if (staticProps) _defineProperties(Constructor, staticProps);
+ return Constructor;
+ }
+
+ function _defineProperty(obj, key, value) {
+ if (key in obj) {
+ Object.defineProperty(obj, key, {
+ value: value,
+ enumerable: true,
+ configurable: true,
+ writable: true
+ });
+ } else {
+ obj[key] = value;
+ }
+
+ return obj;
+ }
+
+ function _slicedToArray(arr, i) {
+ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
+ }
+
+ function _toConsumableArray(arr) {
+ return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
+ }
+
+ function _arrayWithoutHoles(arr) {
+ if (Array.isArray(arr)) return _arrayLikeToArray(arr);
+ }
+
+ function _arrayWithHoles(arr) {
+ if (Array.isArray(arr)) return arr;
+ }
+
+ function _iterableToArray(iter) {
+ if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
+ }
+
+ function _iterableToArrayLimit(arr, i) {
+ if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
+ var _arr = [];
+ var _n = true;
+ var _d = false;
+ var _e = undefined;
+
+ try {
+ for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
+ _arr.push(_s.value);
+
+ if (i && _arr.length === i) break;
+ }
+ } catch (err) {
+ _d = true;
+ _e = err;
+ } finally {
+ try {
+ if (!_n && _i["return"] != null) _i["return"]();
+ } finally {
+ if (_d) throw _e;
+ }
+ }
+
+ return _arr;
+ }
+
+ function _unsupportedIterableToArray(o, minLen) {
+ if (!o) return;
+ if (typeof o === "string") return _arrayLikeToArray(o, minLen);
+ var n = Object.prototype.toString.call(o).slice(8, -1);
+ if (n === "Object" && o.constructor) n = o.constructor.name;
+ if (n === "Map" || n === "Set") return Array.from(o);
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
+ }
+
+ function _arrayLikeToArray(arr, len) {
+ if (len == null || len > arr.length) len = arr.length;
+
+ for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+
+ return arr2;
+ }
+
+ function _nonIterableSpread() {
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ function _nonIterableRest() {
+ throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ function _createForOfIteratorHelper(o, allowArrayLike) {
+ var it;
+
+ if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
+ if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
+ if (it) o = it;
+ var i = 0;
+
+ var F = function () {};
+
+ return {
+ s: F,
+ n: function () {
+ if (i >= o.length) return {
+ done: true
+ };
+ return {
+ done: false,
+ value: o[i++]
+ };
+ },
+ e: function (e) {
+ throw e;
+ },
+ f: F
+ };
+ }
+
+ throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ }
+
+ var normalCompletion = true,
+ didErr = false,
+ err;
+ return {
+ s: function () {
+ it = o[Symbol.iterator]();
+ },
+ n: function () {
+ var step = it.next();
+ normalCompletion = step.done;
+ return step;
+ },
+ e: function (e) {
+ didErr = true;
+ err = e;
+ },
+ f: function () {
+ try {
+ if (!normalCompletion && it.return != null) it.return();
+ } finally {
+ if (didErr) throw err;
+ }
+ }
+ };
+ }
+
+ var engineIsNode = classofRaw(global_1.process) == 'process';
+
+ var engineUserAgent = getBuiltIn('navigator', 'userAgent') || '';
+
+ var process$1 = global_1.process;
+ var versions = process$1 && process$1.versions;
+ var v8 = versions && versions.v8;
+ var match, version;
+
+ if (v8) {
+ match = v8.split('.');
+ version = match[0] + match[1];
+ } else if (engineUserAgent) {
+ match = engineUserAgent.match(/Edge\/(\d+)/);
+ if (!match || match[1] >= 74) {
+ match = engineUserAgent.match(/Chrome\/(\d+)/);
+ if (match) version = match[1];
+ }
+ }
+
+ var engineV8Version = version && +version;
+
var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () {
- // Chrome 38 Symbol has incorrect toString conversion
- // eslint-disable-next-line no-undef
- return !String(Symbol());
+ /* global Symbol -- required for testing */
+ return !Symbol.sham &&
+ // Chrome 38 Symbol has incorrect toString conversion
+ // Chrome 38-40 symbols are not inherited from DOM collections prototypes to instances
+ (engineIsNode ? engineV8Version === 38 : engineV8Version > 37 && engineV8Version < 41);
});
var useSymbolAsUid = nativeSymbol
- // eslint-disable-next-line no-undef
+ /* global Symbol -- safe */
&& !Symbol.sham
- // eslint-disable-next-line no-undef
&& typeof Symbol.iterator == 'symbol';
- // `IsArray` abstract operation
- // https://tc39.github.io/ecma262/#sec-isarray
- var isArray = Array.isArray || function isArray(arg) {
- return classofRaw(arg) == 'Array';
+ var WellKnownSymbolsStore = shared('wks');
+ var Symbol$1 = global_1.Symbol;
+ var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid;
+
+ var wellKnownSymbol = function (name) {
+ if (!has(WellKnownSymbolsStore, name) || !(nativeSymbol || typeof WellKnownSymbolsStore[name] == 'string')) {
+ if (nativeSymbol && has(Symbol$1, name)) {
+ WellKnownSymbolsStore[name] = Symbol$1[name];
+ } else {
+ WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
+ }
+ } return WellKnownSymbolsStore[name];
+ };
+
+ var f$5 = wellKnownSymbol;
+
+ var wellKnownSymbolWrapped = {
+ f: f$5
+ };
+
+ var defineProperty = objectDefineProperty.f;
+
+ var defineWellKnownSymbol = function (NAME) {
+ var Symbol = path.Symbol || (path.Symbol = {});
+ if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {
+ value: wellKnownSymbolWrapped.f(NAME)
+ });
+ };
+
+ // `Symbol.iterator` well-known symbol
+ // https://tc39.es/ecma262/#sec-symbol.iterator
+ defineWellKnownSymbol('iterator');
+
+ var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+ var test = {};
+
+ test[TO_STRING_TAG] = 'z';
+
+ var toStringTagSupport = String(test) === '[object z]';
+
+ var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag');
+ // ES3 wrong here
+ var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
+
+ // fallback for IE11 Script Access Denied error
+ var tryGet = function (it, key) {
+ try {
+ return it[key];
+ } catch (error) { /* empty */ }
+ };
+
+ // getting tag from ES6+ `Object.prototype.toString`
+ var classof = toStringTagSupport ? classofRaw : function (it) {
+ var O, tag, result;
+ return it === undefined ? 'Undefined' : it === null ? 'Null'
+ // @@toStringTag case
+ : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$1)) == 'string' ? tag
+ // builtinTag case
+ : CORRECT_ARGUMENTS ? classofRaw(O)
+ // ES3 arguments fallback
+ : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
+ };
+
+ // `Object.prototype.toString` method implementation
+ // https://tc39.es/ecma262/#sec-object.prototype.tostring
+ var objectToString = toStringTagSupport ? {}.toString : function toString() {
+ return '[object ' + classof(this) + ']';
+ };
+
+ // `Object.prototype.toString` method
+ // https://tc39.es/ecma262/#sec-object.prototype.tostring
+ if (!toStringTagSupport) {
+ redefine(Object.prototype, 'toString', objectToString, { unsafe: true });
+ }
+
+ // `String.prototype.{ codePointAt, at }` methods implementation
+ var createMethod$1 = function (CONVERT_TO_STRING) {
+ return function ($this, pos) {
+ var S = String(requireObjectCoercible($this));
+ var position = toInteger(pos);
+ var size = S.length;
+ var first, second;
+ if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
+ first = S.charCodeAt(position);
+ return first < 0xD800 || first > 0xDBFF || position + 1 === size
+ || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
+ ? CONVERT_TO_STRING ? S.charAt(position) : first
+ : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
+ };
+ };
+
+ var stringMultibyte = {
+ // `String.prototype.codePointAt` method
+ // https://tc39.es/ecma262/#sec-string.prototype.codepointat
+ codeAt: createMethod$1(false),
+ // `String.prototype.at` method
+ // https://github.com/mathiasbynens/String.prototype.at
+ charAt: createMethod$1(true)
};
// `ToObject` abstract operation
- // https://tc39.github.io/ecma262/#sec-toobject
+ // https://tc39.es/ecma262/#sec-toobject
var toObject = function (argument) {
return Object(requireObjectCoercible(argument));
};
+ var correctPrototypeGetter = !fails(function () {
+ function F() { /* empty */ }
+ F.prototype.constructor = null;
+ return Object.getPrototypeOf(new F()) !== F.prototype;
+ });
+
+ var IE_PROTO = sharedKey('IE_PROTO');
+ var ObjectPrototype = Object.prototype;
+
+ // `Object.getPrototypeOf` method
+ // https://tc39.es/ecma262/#sec-object.getprototypeof
+ var objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) {
+ O = toObject(O);
+ if (has(O, IE_PROTO)) return O[IE_PROTO];
+ if (typeof O.constructor == 'function' && O instanceof O.constructor) {
+ return O.constructor.prototype;
+ } return O instanceof Object ? ObjectPrototype : null;
+ };
+
+ var ITERATOR = wellKnownSymbol('iterator');
+ var BUGGY_SAFARI_ITERATORS = false;
+
+ var returnThis = function () { return this; };
+
+ // `%IteratorPrototype%` object
+ // https://tc39.es/ecma262/#sec-%iteratorprototype%-object
+ var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
+
+ if ([].keys) {
+ arrayIterator = [].keys();
+ // Safari 8 has buggy iterators w/o `next`
+ if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
+ else {
+ PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator));
+ if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
+ }
+ }
+
+ var NEW_ITERATOR_PROTOTYPE = IteratorPrototype == undefined || fails(function () {
+ var test = {};
+ // FF44- legacy iterators case
+ return IteratorPrototype[ITERATOR].call(test) !== test;
+ });
+
+ if (NEW_ITERATOR_PROTOTYPE) IteratorPrototype = {};
+
+ // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
+ if ( !has(IteratorPrototype, ITERATOR)) {
+ createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
+ }
+
+ var iteratorsCore = {
+ IteratorPrototype: IteratorPrototype,
+ BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
+ };
+
// `Object.keys` method
- // https://tc39.github.io/ecma262/#sec-object.keys
+ // https://tc39.es/ecma262/#sec-object.keys
var objectKeys = Object.keys || function keys(O) {
return objectKeysInternal(O, enumBugKeys);
};
// `Object.defineProperties` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperties
+ // https://tc39.es/ecma262/#sec-object.defineproperties
var objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) {
anObject(O);
var keys = objectKeys(Properties);
var LT = '<';
var PROTOTYPE = 'prototype';
var SCRIPT = 'script';
- var IE_PROTO = sharedKey('IE_PROTO');
+ var IE_PROTO$1 = sharedKey('IE_PROTO');
var EmptyConstructor = function () { /* empty */ };
var activeXDocument;
var NullProtoObject = function () {
try {
- /* global ActiveXObject */
+ /* global ActiveXObject -- old IE */
activeXDocument = document.domain && new ActiveXObject('htmlfile');
} catch (error) { /* ignore */ }
NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame();
return NullProtoObject();
};
- hiddenKeys[IE_PROTO] = true;
+ hiddenKeys[IE_PROTO$1] = true;
// `Object.create` method
- // https://tc39.github.io/ecma262/#sec-object.create
+ // https://tc39.es/ecma262/#sec-object.create
var objectCreate = Object.create || function create(O, Properties) {
var result;
if (O !== null) {
result = new EmptyConstructor();
EmptyConstructor[PROTOTYPE] = null;
// add "__proto__" for Object.getPrototypeOf polyfill
- result[IE_PROTO] = O;
+ result[IE_PROTO$1] = O;
} else result = NullProtoObject();
return Properties === undefined ? result : objectDefineProperties(result, Properties);
};
- var nativeGetOwnPropertyNames = objectGetOwnPropertyNames.f;
+ var defineProperty$1 = objectDefineProperty.f;
- var toString$1 = {}.toString;
- var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
- ? Object.getOwnPropertyNames(window) : [];
- var getWindowNames = function (it) {
- try {
- return nativeGetOwnPropertyNames(it);
- } catch (error) {
- return windowNames.slice();
+ var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag');
+
+ var setToStringTag = function (it, TAG, STATIC) {
+ if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG$2)) {
+ defineProperty$1(it, TO_STRING_TAG$2, { configurable: true, value: TAG });
}
};
- // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
- var f$5 = function getOwnPropertyNames(it) {
- return windowNames && toString$1.call(it) == '[object Window]'
- ? getWindowNames(it)
- : nativeGetOwnPropertyNames(toIndexedObject(it));
+ var iterators = {};
+
+ var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
+
+
+
+
+
+ var returnThis$1 = function () { return this; };
+
+ var createIteratorConstructor = function (IteratorConstructor, NAME, next) {
+ var TO_STRING_TAG = NAME + ' Iterator';
+ IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(1, next) });
+ setToStringTag(IteratorConstructor, TO_STRING_TAG, false);
+ iterators[TO_STRING_TAG] = returnThis$1;
+ return IteratorConstructor;
};
- var objectGetOwnPropertyNamesExternal = {
- f: f$5
+ var aPossiblePrototype = function (it) {
+ if (!isObject(it) && it !== null) {
+ throw TypeError("Can't set " + String(it) + ' as a prototype');
+ } return it;
};
- var WellKnownSymbolsStore = shared('wks');
- var Symbol$1 = global_1.Symbol;
- var createWellKnownSymbol = useSymbolAsUid ? Symbol$1 : Symbol$1 && Symbol$1.withoutSetter || uid;
+ /* eslint-disable no-proto -- safe */
- var wellKnownSymbol = function (name) {
- if (!has(WellKnownSymbolsStore, name)) {
- if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name];
- else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name);
- } return WellKnownSymbolsStore[name];
- };
- var f$6 = wellKnownSymbol;
- var wellKnownSymbolWrapped = {
- f: f$6
- };
+ // `Object.setPrototypeOf` method
+ // https://tc39.es/ecma262/#sec-object.setprototypeof
+ // Works with __proto__ only. Old v8 can't work with null proto objects.
+ var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
+ var CORRECT_SETTER = false;
+ var test = {};
+ var setter;
+ try {
+ setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
+ setter.call(test, []);
+ CORRECT_SETTER = test instanceof Array;
+ } catch (error) { /* empty */ }
+ return function setPrototypeOf(O, proto) {
+ anObject(O);
+ aPossiblePrototype(proto);
+ if (CORRECT_SETTER) setter.call(O, proto);
+ else O.__proto__ = proto;
+ return O;
+ };
+ }() : undefined);
- var defineProperty = objectDefineProperty.f;
+ var IteratorPrototype$2 = iteratorsCore.IteratorPrototype;
+ var BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS;
+ var ITERATOR$1 = wellKnownSymbol('iterator');
+ var KEYS = 'keys';
+ var VALUES = 'values';
+ var ENTRIES = 'entries';
- var defineWellKnownSymbol = function (NAME) {
- var Symbol = path.Symbol || (path.Symbol = {});
- if (!has(Symbol, NAME)) defineProperty(Symbol, NAME, {
- value: wellKnownSymbolWrapped.f(NAME)
- });
- };
+ var returnThis$2 = function () { return this; };
- var defineProperty$1 = objectDefineProperty.f;
+ var defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
+ createIteratorConstructor(IteratorConstructor, NAME, next);
+ var getIterationMethod = function (KIND) {
+ if (KIND === DEFAULT && defaultIterator) return defaultIterator;
+ if (!BUGGY_SAFARI_ITERATORS$1 && KIND in IterablePrototype) return IterablePrototype[KIND];
+ switch (KIND) {
+ case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
+ case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
+ case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
+ } return function () { return new IteratorConstructor(this); };
+ };
+ var TO_STRING_TAG = NAME + ' Iterator';
+ var INCORRECT_VALUES_NAME = false;
+ var IterablePrototype = Iterable.prototype;
+ var nativeIterator = IterablePrototype[ITERATOR$1]
+ || IterablePrototype['@@iterator']
+ || DEFAULT && IterablePrototype[DEFAULT];
+ var defaultIterator = !BUGGY_SAFARI_ITERATORS$1 && nativeIterator || getIterationMethod(DEFAULT);
+ var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
+ var CurrentIteratorPrototype, methods, KEY;
- var TO_STRING_TAG = wellKnownSymbol('toStringTag');
+ // fix native
+ if (anyNativeIterator) {
+ CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable()));
+ if (IteratorPrototype$2 !== Object.prototype && CurrentIteratorPrototype.next) {
+ if ( objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype$2) {
+ if (objectSetPrototypeOf) {
+ objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2);
+ } else if (typeof CurrentIteratorPrototype[ITERATOR$1] != 'function') {
+ createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$1, returnThis$2);
+ }
+ }
+ // Set @@toStringTag to native iterators
+ setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true);
+ }
+ }
- var setToStringTag = function (it, TAG, STATIC) {
- if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) {
- defineProperty$1(it, TO_STRING_TAG, { configurable: true, value: TAG });
+ // fix Array#{values, @@iterator}.name in V8 / FF
+ if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
+ INCORRECT_VALUES_NAME = true;
+ defaultIterator = function values() { return nativeIterator.call(this); };
}
- };
- var aFunction$1 = function (it) {
- if (typeof it != 'function') {
- throw TypeError(String(it) + ' is not a function');
- } return it;
- };
+ // define iterator
+ if ( IterablePrototype[ITERATOR$1] !== defaultIterator) {
+ createNonEnumerableProperty(IterablePrototype, ITERATOR$1, defaultIterator);
+ }
+ iterators[NAME] = defaultIterator;
- // optional / simple context binding
- var functionBindContext = function (fn, that, length) {
- aFunction$1(fn);
- if (that === undefined) return fn;
- switch (length) {
- case 0: return function () {
- return fn.call(that);
- };
- case 1: return function (a) {
- return fn.call(that, a);
- };
- case 2: return function (a, b) {
- return fn.call(that, a, b);
- };
- case 3: return function (a, b, c) {
- return fn.call(that, a, b, c);
+ // export additional methods
+ if (DEFAULT) {
+ methods = {
+ values: getIterationMethod(VALUES),
+ keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
+ entries: getIterationMethod(ENTRIES)
};
+ if (FORCED) for (KEY in methods) {
+ if (BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
+ redefine(IterablePrototype, KEY, methods[KEY]);
+ }
+ } else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME }, methods);
}
- return function (/* ...args */) {
- return fn.apply(that, arguments);
- };
+
+ return methods;
};
- var SPECIES = wellKnownSymbol('species');
+ var charAt = stringMultibyte.charAt;
+
+
+
+ var STRING_ITERATOR = 'String Iterator';
+ var setInternalState = internalState.set;
+ var getInternalState = internalState.getterFor(STRING_ITERATOR);
+
+ // `String.prototype[@@iterator]` method
+ // https://tc39.es/ecma262/#sec-string.prototype-@@iterator
+ defineIterator(String, 'String', function (iterated) {
+ setInternalState(this, {
+ type: STRING_ITERATOR,
+ string: String(iterated),
+ index: 0
+ });
+ // `%StringIteratorPrototype%.next` method
+ // https://tc39.es/ecma262/#sec-%stringiteratorprototype%.next
+ }, function next() {
+ var state = getInternalState(this);
+ var string = state.string;
+ var index = state.index;
+ var point;
+ if (index >= string.length) return { value: undefined, done: true };
+ point = charAt(string, index);
+ state.index += point.length;
+ return { value: point, done: false };
+ });
+
+ var UNSCOPABLES = wellKnownSymbol('unscopables');
+ var ArrayPrototype = Array.prototype;
+
+ // Array.prototype[@@unscopables]
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
+ if (ArrayPrototype[UNSCOPABLES] == undefined) {
+ objectDefineProperty.f(ArrayPrototype, UNSCOPABLES, {
+ configurable: true,
+ value: objectCreate(null)
+ });
+ }
+
+ // add a key to Array.prototype[@@unscopables]
+ var addToUnscopables = function (key) {
+ ArrayPrototype[UNSCOPABLES][key] = true;
+ };
+
+ var ARRAY_ITERATOR = 'Array Iterator';
+ var setInternalState$1 = internalState.set;
+ var getInternalState$1 = internalState.getterFor(ARRAY_ITERATOR);
+
+ // `Array.prototype.entries` method
+ // https://tc39.es/ecma262/#sec-array.prototype.entries
+ // `Array.prototype.keys` method
+ // https://tc39.es/ecma262/#sec-array.prototype.keys
+ // `Array.prototype.values` method
+ // https://tc39.es/ecma262/#sec-array.prototype.values
+ // `Array.prototype[@@iterator]` method
+ // https://tc39.es/ecma262/#sec-array.prototype-@@iterator
+ // `CreateArrayIterator` internal method
+ // https://tc39.es/ecma262/#sec-createarrayiterator
+ var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) {
+ setInternalState$1(this, {
+ type: ARRAY_ITERATOR,
+ target: toIndexedObject(iterated), // target
+ index: 0, // next index
+ kind: kind // kind
+ });
+ // `%ArrayIteratorPrototype%.next` method
+ // https://tc39.es/ecma262/#sec-%arrayiteratorprototype%.next
+ }, function () {
+ var state = getInternalState$1(this);
+ var target = state.target;
+ var kind = state.kind;
+ var index = state.index++;
+ if (!target || index >= target.length) {
+ state.target = undefined;
+ return { value: undefined, done: true };
+ }
+ if (kind == 'keys') return { value: index, done: false };
+ if (kind == 'values') return { value: target[index], done: false };
+ return { value: [index, target[index]], done: false };
+ }, 'values');
+
+ // argumentsList[@@iterator] is %ArrayProto_values%
+ // https://tc39.es/ecma262/#sec-createunmappedargumentsobject
+ // https://tc39.es/ecma262/#sec-createmappedargumentsobject
+ iterators.Arguments = iterators.Array;
+
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
+ addToUnscopables('keys');
+ addToUnscopables('values');
+ addToUnscopables('entries');
+
+ // iterable DOM collections
+ // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
+ var domIterables = {
+ CSSRuleList: 0,
+ CSSStyleDeclaration: 0,
+ CSSValueList: 0,
+ ClientRectList: 0,
+ DOMRectList: 0,
+ DOMStringList: 0,
+ DOMTokenList: 1,
+ DataTransferItemList: 0,
+ FileList: 0,
+ HTMLAllCollection: 0,
+ HTMLCollection: 0,
+ HTMLFormElement: 0,
+ HTMLSelectElement: 0,
+ MediaList: 0,
+ MimeTypeArray: 0,
+ NamedNodeMap: 0,
+ NodeList: 1,
+ PaintRequestList: 0,
+ Plugin: 0,
+ PluginArray: 0,
+ SVGLengthList: 0,
+ SVGNumberList: 0,
+ SVGPathSegList: 0,
+ SVGPointList: 0,
+ SVGStringList: 0,
+ SVGTransformList: 0,
+ SourceBufferList: 0,
+ StyleSheetList: 0,
+ TextTrackCueList: 0,
+ TextTrackList: 0,
+ TouchList: 0
+ };
+
+ var ITERATOR$2 = wellKnownSymbol('iterator');
+ var TO_STRING_TAG$3 = wellKnownSymbol('toStringTag');
+ var ArrayValues = es_array_iterator.values;
+
+ for (var COLLECTION_NAME in domIterables) {
+ var Collection = global_1[COLLECTION_NAME];
+ var CollectionPrototype = Collection && Collection.prototype;
+ if (CollectionPrototype) {
+ // some Chrome versions have non-configurable methods on DOMTokenList
+ if (CollectionPrototype[ITERATOR$2] !== ArrayValues) try {
+ createNonEnumerableProperty(CollectionPrototype, ITERATOR$2, ArrayValues);
+ } catch (error) {
+ CollectionPrototype[ITERATOR$2] = ArrayValues;
+ }
+ if (!CollectionPrototype[TO_STRING_TAG$3]) {
+ createNonEnumerableProperty(CollectionPrototype, TO_STRING_TAG$3, COLLECTION_NAME);
+ }
+ if (domIterables[COLLECTION_NAME]) for (var METHOD_NAME in es_array_iterator) {
+ // some Chrome versions have non-configurable methods on DOMTokenList
+ if (CollectionPrototype[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try {
+ createNonEnumerableProperty(CollectionPrototype, METHOD_NAME, es_array_iterator[METHOD_NAME]);
+ } catch (error) {
+ CollectionPrototype[METHOD_NAME] = es_array_iterator[METHOD_NAME];
+ }
+ }
+ }
+ }
+
+ // `IsArray` abstract operation
+ // https://tc39.es/ecma262/#sec-isarray
+ var isArray = Array.isArray || function isArray(arg) {
+ return classofRaw(arg) == 'Array';
+ };
+
+ var nativeGetOwnPropertyNames = objectGetOwnPropertyNames.f;
+
+ var toString$1 = {}.toString;
+
+ var windowNames = typeof window == 'object' && window && Object.getOwnPropertyNames
+ ? Object.getOwnPropertyNames(window) : [];
+
+ var getWindowNames = function (it) {
+ try {
+ return nativeGetOwnPropertyNames(it);
+ } catch (error) {
+ return windowNames.slice();
+ }
+ };
+
+ // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window
+ var f$6 = function getOwnPropertyNames(it) {
+ return windowNames && toString$1.call(it) == '[object Window]'
+ ? getWindowNames(it)
+ : nativeGetOwnPropertyNames(toIndexedObject(it));
+ };
+
+ var objectGetOwnPropertyNamesExternal = {
+ f: f$6
+ };
+
+ var aFunction$1 = function (it) {
+ if (typeof it != 'function') {
+ throw TypeError(String(it) + ' is not a function');
+ } return it;
+ };
+
+ // optional / simple context binding
+ var functionBindContext = function (fn, that, length) {
+ aFunction$1(fn);
+ if (that === undefined) return fn;
+ switch (length) {
+ case 0: return function () {
+ return fn.call(that);
+ };
+ case 1: return function (a) {
+ return fn.call(that, a);
+ };
+ case 2: return function (a, b) {
+ return fn.call(that, a, b);
+ };
+ case 3: return function (a, b, c) {
+ return fn.call(that, a, b, c);
+ };
+ }
+ return function (/* ...args */) {
+ return fn.apply(that, arguments);
+ };
+ };
+
+ var SPECIES = wellKnownSymbol('species');
// `ArraySpeciesCreate` abstract operation
- // https://tc39.github.io/ecma262/#sec-arrayspeciescreate
+ // https://tc39.es/ecma262/#sec-arrayspeciescreate
var arraySpeciesCreate = function (originalArray, length) {
var C;
if (isArray(originalArray)) {
var push = [].push;
- // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation
- var createMethod$1 = function (TYPE) {
+ // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex, filterOut }` methods implementation
+ var createMethod$2 = function (TYPE) {
var IS_MAP = TYPE == 1;
var IS_FILTER = TYPE == 2;
var IS_SOME = TYPE == 3;
var IS_EVERY = TYPE == 4;
var IS_FIND_INDEX = TYPE == 6;
+ var IS_FILTER_OUT = TYPE == 7;
var NO_HOLES = TYPE == 5 || IS_FIND_INDEX;
return function ($this, callbackfn, that, specificCreate) {
var O = toObject($this);
var length = toLength(self.length);
var index = 0;
var create = specificCreate || arraySpeciesCreate;
- var target = IS_MAP ? create($this, length) : IS_FILTER ? create($this, 0) : undefined;
+ var target = IS_MAP ? create($this, length) : IS_FILTER || IS_FILTER_OUT ? create($this, 0) : undefined;
var value, result;
for (;length > index; index++) if (NO_HOLES || index in self) {
value = self[index];
case 5: return value; // find
case 6: return index; // findIndex
case 2: push.call(target, value); // filter
- } else if (IS_EVERY) return false; // every
+ } else switch (TYPE) {
+ case 4: return false; // every
+ case 7: push.call(target, value); // filterOut
+ }
}
}
return IS_FIND_INDEX ? -1 : IS_SOME || IS_EVERY ? IS_EVERY : target;
var arrayIteration = {
// `Array.prototype.forEach` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
- forEach: createMethod$1(0),
+ // https://tc39.es/ecma262/#sec-array.prototype.foreach
+ forEach: createMethod$2(0),
// `Array.prototype.map` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.map
- map: createMethod$1(1),
+ // https://tc39.es/ecma262/#sec-array.prototype.map
+ map: createMethod$2(1),
// `Array.prototype.filter` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.filter
- filter: createMethod$1(2),
+ // https://tc39.es/ecma262/#sec-array.prototype.filter
+ filter: createMethod$2(2),
// `Array.prototype.some` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.some
- some: createMethod$1(3),
+ // https://tc39.es/ecma262/#sec-array.prototype.some
+ some: createMethod$2(3),
// `Array.prototype.every` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.every
- every: createMethod$1(4),
+ // https://tc39.es/ecma262/#sec-array.prototype.every
+ every: createMethod$2(4),
// `Array.prototype.find` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.find
- find: createMethod$1(5),
+ // https://tc39.es/ecma262/#sec-array.prototype.find
+ find: createMethod$2(5),
// `Array.prototype.findIndex` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex
- findIndex: createMethod$1(6)
+ // https://tc39.es/ecma262/#sec-array.prototype.findIndex
+ findIndex: createMethod$2(6),
+ // `Array.prototype.filterOut` method
+ // https://github.com/tc39/proposal-array-filtering
+ filterOut: createMethod$2(7)
};
var $forEach = arrayIteration.forEach;
var SYMBOL = 'Symbol';
var PROTOTYPE$1 = 'prototype';
var TO_PRIMITIVE = wellKnownSymbol('toPrimitive');
- var setInternalState = internalState.set;
- var getInternalState = internalState.getterFor(SYMBOL);
- var ObjectPrototype = Object[PROTOTYPE$1];
+ var setInternalState$2 = internalState.set;
+ var getInternalState$2 = internalState.getterFor(SYMBOL);
+ var ObjectPrototype$1 = Object[PROTOTYPE$1];
var $Symbol = global_1.Symbol;
var $stringify = getBuiltIn('JSON', 'stringify');
var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f;
get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; }
})).a != 7;
}) ? function (O, P, Attributes) {
- var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype, P);
- if (ObjectPrototypeDescriptor) delete ObjectPrototype[P];
+ var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype$1, P);
+ if (ObjectPrototypeDescriptor) delete ObjectPrototype$1[P];
nativeDefineProperty$1(O, P, Attributes);
- if (ObjectPrototypeDescriptor && O !== ObjectPrototype) {
- nativeDefineProperty$1(ObjectPrototype, P, ObjectPrototypeDescriptor);
+ if (ObjectPrototypeDescriptor && O !== ObjectPrototype$1) {
+ nativeDefineProperty$1(ObjectPrototype$1, P, ObjectPrototypeDescriptor);
}
} : nativeDefineProperty$1;
var wrap = function (tag, description) {
var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$1]);
- setInternalState(symbol, {
+ setInternalState$2(symbol, {
type: SYMBOL,
tag: tag,
description: description
};
var $defineProperty = function defineProperty(O, P, Attributes) {
- if (O === ObjectPrototype) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
+ if (O === ObjectPrototype$1) $defineProperty(ObjectPrototypeSymbols, P, Attributes);
anObject(O);
var key = toPrimitive(P, true);
anObject(Attributes);
var $propertyIsEnumerable = function propertyIsEnumerable(V) {
var P = toPrimitive(V, true);
var enumerable = nativePropertyIsEnumerable$1.call(this, P);
- if (this === ObjectPrototype && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
+ if (this === ObjectPrototype$1 && has(AllSymbols, P) && !has(ObjectPrototypeSymbols, P)) return false;
return enumerable || !has(this, P) || !has(AllSymbols, P) || has(this, HIDDEN) && this[HIDDEN][P] ? enumerable : true;
};
var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(O, P) {
var it = toIndexedObject(O);
var key = toPrimitive(P, true);
- if (it === ObjectPrototype && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
+ if (it === ObjectPrototype$1 && has(AllSymbols, key) && !has(ObjectPrototypeSymbols, key)) return;
var descriptor = nativeGetOwnPropertyDescriptor$1(it, key);
if (descriptor && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key])) {
descriptor.enumerable = true;
};
var $getOwnPropertySymbols = function getOwnPropertySymbols(O) {
- var IS_OBJECT_PROTOTYPE = O === ObjectPrototype;
+ var IS_OBJECT_PROTOTYPE = O === ObjectPrototype$1;
var names = nativeGetOwnPropertyNames$1(IS_OBJECT_PROTOTYPE ? ObjectPrototypeSymbols : toIndexedObject(O));
var result = [];
$forEach(names, function (key) {
- if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype, key))) {
+ if (has(AllSymbols, key) && (!IS_OBJECT_PROTOTYPE || has(ObjectPrototype$1, key))) {
result.push(AllSymbols[key]);
}
});
};
// `Symbol` constructor
- // https://tc39.github.io/ecma262/#sec-symbol-constructor
+ // https://tc39.es/ecma262/#sec-symbol-constructor
if (!nativeSymbol) {
$Symbol = function Symbol() {
if (this instanceof $Symbol) throw TypeError('Symbol is not a constructor');
var description = !arguments.length || arguments[0] === undefined ? undefined : String(arguments[0]);
var tag = uid(description);
var setter = function (value) {
- if (this === ObjectPrototype) setter.call(ObjectPrototypeSymbols, value);
+ if (this === ObjectPrototype$1) setter.call(ObjectPrototypeSymbols, value);
if (has(this, HIDDEN) && has(this[HIDDEN], tag)) this[HIDDEN][tag] = false;
setSymbolDescriptor(this, tag, createPropertyDescriptor(1, value));
};
- if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype, tag, { configurable: true, set: setter });
+ if (descriptors && USE_SETTER) setSymbolDescriptor(ObjectPrototype$1, tag, { configurable: true, set: setter });
return wrap(tag, description);
};
redefine($Symbol[PROTOTYPE$1], 'toString', function toString() {
- return getInternalState(this).tag;
+ return getInternalState$2(this).tag;
});
redefine($Symbol, 'withoutSetter', function (description) {
nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', {
configurable: true,
get: function description() {
- return getInternalState(this).description;
+ return getInternalState$2(this).description;
}
});
{
- redefine(ObjectPrototype, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
+ redefine(ObjectPrototype$1, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true });
}
}
}
_export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, {
// `Symbol.for` method
- // https://tc39.github.io/ecma262/#sec-symbol.for
+ // https://tc39.es/ecma262/#sec-symbol.for
'for': function (key) {
var string = String(key);
if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string];
return symbol;
},
// `Symbol.keyFor` method
- // https://tc39.github.io/ecma262/#sec-symbol.keyfor
+ // https://tc39.es/ecma262/#sec-symbol.keyfor
keyFor: function keyFor(sym) {
if (!isSymbol(sym)) throw TypeError(sym + ' is not a symbol');
if (has(SymbolToStringRegistry, sym)) return SymbolToStringRegistry[sym];
_export({ target: 'Object', stat: true, forced: !nativeSymbol, sham: !descriptors }, {
// `Object.create` method
- // https://tc39.github.io/ecma262/#sec-object.create
+ // https://tc39.es/ecma262/#sec-object.create
create: $create,
// `Object.defineProperty` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperty
+ // https://tc39.es/ecma262/#sec-object.defineproperty
defineProperty: $defineProperty,
// `Object.defineProperties` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperties
+ // https://tc39.es/ecma262/#sec-object.defineproperties
defineProperties: $defineProperties,
// `Object.getOwnPropertyDescriptor` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors
+ // https://tc39.es/ecma262/#sec-object.getownpropertydescriptors
getOwnPropertyDescriptor: $getOwnPropertyDescriptor
});
_export({ target: 'Object', stat: true, forced: !nativeSymbol }, {
// `Object.getOwnPropertyNames` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
+ // https://tc39.es/ecma262/#sec-object.getownpropertynames
getOwnPropertyNames: $getOwnPropertyNames,
// `Object.getOwnPropertySymbols` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols
+ // https://tc39.es/ecma262/#sec-object.getownpropertysymbols
getOwnPropertySymbols: $getOwnPropertySymbols
});
});
// `JSON.stringify` method behavior with symbols
- // https://tc39.github.io/ecma262/#sec-json.stringify
+ // https://tc39.es/ecma262/#sec-json.stringify
if ($stringify) {
var FORCED_JSON_STRINGIFY = !nativeSymbol || fails(function () {
var symbol = $Symbol();
});
_export({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, {
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
stringify: function stringify(it, replacer, space) {
var args = [it];
var index = 1;
}
// `Symbol.prototype[@@toPrimitive]` method
- // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive
+ // https://tc39.es/ecma262/#sec-symbol.prototype-@@toprimitive
if (!$Symbol[PROTOTYPE$1][TO_PRIMITIVE]) {
createNonEnumerableProperty($Symbol[PROTOTYPE$1], TO_PRIMITIVE, $Symbol[PROTOTYPE$1].valueOf);
}
// `Symbol.prototype[@@toStringTag]` property
- // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@tostringtag
+ // https://tc39.es/ecma262/#sec-symbol.prototype-@@tostringtag
setToStringTag($Symbol, SYMBOL);
hiddenKeys[HIDDEN] = true;
});
}
- // `Symbol.iterator` well-known symbol
- // https://tc39.github.io/ecma262/#sec-symbol.iterator
- defineWellKnownSymbol('iterator');
+ var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';
- var arrayMethodIsStrict = function (METHOD_NAME, argument) {
- var method = [][METHOD_NAME];
- return !!method && fails(function () {
- // eslint-disable-next-line no-useless-call,no-throw-literal
- method.call(null, argument || function () { throw 1; }, 1);
- });
+ var redefineAll = function (target, src, options) {
+ for (var key in src) redefine(target, key, src[key], options);
+ return target;
};
- var defineProperty$3 = Object.defineProperty;
- var cache = {};
-
- var thrower = function (it) { throw it; };
-
- var arrayMethodUsesToLength = function (METHOD_NAME, options) {
- if (has(cache, METHOD_NAME)) return cache[METHOD_NAME];
- if (!options) options = {};
- var method = [][METHOD_NAME];
- var ACCESSORS = has(options, 'ACCESSORS') ? options.ACCESSORS : false;
- var argument0 = has(options, 0) ? options[0] : thrower;
- var argument1 = has(options, 1) ? options[1] : undefined;
-
- return cache[METHOD_NAME] = !!method && !fails(function () {
- if (ACCESSORS && !descriptors) return true;
- var O = { length: -1 };
-
- if (ACCESSORS) defineProperty$3(O, 1, { enumerable: true, get: thrower });
- else O[1] = 1;
-
- method.call(O, argument0, argument1);
- });
+ var anInstance = function (it, Constructor, name) {
+ if (!(it instanceof Constructor)) {
+ throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
+ } return it;
};
- var $forEach$1 = arrayIteration.forEach;
-
-
-
- var STRICT_METHOD = arrayMethodIsStrict('forEach');
- var USES_TO_LENGTH = arrayMethodUsesToLength('forEach');
-
- // `Array.prototype.forEach` method implementation
- // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
- var arrayForEach = (!STRICT_METHOD || !USES_TO_LENGTH) ? function forEach(callbackfn /* , thisArg */) {
- return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- } : [].forEach;
-
- // `Array.prototype.forEach` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.foreach
- _export({ target: 'Array', proto: true, forced: [].forEach != arrayForEach }, {
- forEach: arrayForEach
- });
-
- var $indexOf = arrayIncludes.indexOf;
-
-
-
- var nativeIndexOf = [].indexOf;
+ // `ToIndex` abstract operation
+ // https://tc39.es/ecma262/#sec-toindex
+ var toIndex = function (it) {
+ if (it === undefined) return 0;
+ var number = toInteger(it);
+ var length = toLength(number);
+ if (number !== length) throw RangeError('Wrong length or index');
+ return length;
+ };
- var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
- var STRICT_METHOD$1 = arrayMethodIsStrict('indexOf');
- var USES_TO_LENGTH$1 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
+ // IEEE754 conversions based on https://github.com/feross/ieee754
+ var abs = Math.abs;
+ var pow = Math.pow;
+ var floor$1 = Math.floor;
+ var log = Math.log;
+ var LN2 = Math.LN2;
- // `Array.prototype.indexOf` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.indexof
- _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD$1 || !USES_TO_LENGTH$1 }, {
- indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
- return NEGATIVE_ZERO
- // convert -0 to +0
- ? nativeIndexOf.apply(this, arguments) || 0
- : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);
+ var pack = function (number, mantissaLength, bytes) {
+ var buffer = new Array(bytes);
+ var exponentLength = bytes * 8 - mantissaLength - 1;
+ var eMax = (1 << exponentLength) - 1;
+ var eBias = eMax >> 1;
+ var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
+ var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
+ var index = 0;
+ var exponent, mantissa, c;
+ number = abs(number);
+ // eslint-disable-next-line no-self-compare -- NaN check
+ if (number != number || number === Infinity) {
+ // eslint-disable-next-line no-self-compare -- NaN check
+ mantissa = number != number ? 1 : 0;
+ exponent = eMax;
+ } else {
+ exponent = floor$1(log(number) / LN2);
+ if (number * (c = pow(2, -exponent)) < 1) {
+ exponent--;
+ c *= 2;
+ }
+ if (exponent + eBias >= 1) {
+ number += rt / c;
+ } else {
+ number += rt * pow(2, 1 - eBias);
+ }
+ if (number * c >= 2) {
+ exponent++;
+ c /= 2;
+ }
+ if (exponent + eBias >= eMax) {
+ mantissa = 0;
+ exponent = eMax;
+ } else if (exponent + eBias >= 1) {
+ mantissa = (number * c - 1) * pow(2, mantissaLength);
+ exponent = exponent + eBias;
+ } else {
+ mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
+ exponent = 0;
+ }
}
- });
-
- // `Array.isArray` method
- // https://tc39.github.io/ecma262/#sec-array.isarray
- _export({ target: 'Array', stat: true }, {
- isArray: isArray
- });
-
- var UNSCOPABLES = wellKnownSymbol('unscopables');
- var ArrayPrototype = Array.prototype;
-
- // Array.prototype[@@unscopables]
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- if (ArrayPrototype[UNSCOPABLES] == undefined) {
- objectDefineProperty.f(ArrayPrototype, UNSCOPABLES, {
- configurable: true,
- value: objectCreate(null)
- });
- }
-
- // add a key to Array.prototype[@@unscopables]
- var addToUnscopables = function (key) {
- ArrayPrototype[UNSCOPABLES][key] = true;
+ for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);
+ exponent = exponent << mantissaLength | mantissa;
+ exponentLength += mantissaLength;
+ for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);
+ buffer[--index] |= sign * 128;
+ return buffer;
};
- var iterators = {};
-
- var correctPrototypeGetter = !fails(function () {
- function F() { /* empty */ }
- F.prototype.constructor = null;
- return Object.getPrototypeOf(new F()) !== F.prototype;
- });
+ var unpack = function (buffer, mantissaLength) {
+ var bytes = buffer.length;
+ var exponentLength = bytes * 8 - mantissaLength - 1;
+ var eMax = (1 << exponentLength) - 1;
+ var eBias = eMax >> 1;
+ var nBits = exponentLength - 7;
+ var index = bytes - 1;
+ var sign = buffer[index--];
+ var exponent = sign & 127;
+ var mantissa;
+ sign >>= 7;
+ for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);
+ mantissa = exponent & (1 << -nBits) - 1;
+ exponent >>= -nBits;
+ nBits += mantissaLength;
+ for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);
+ if (exponent === 0) {
+ exponent = 1 - eBias;
+ } else if (exponent === eMax) {
+ return mantissa ? NaN : sign ? -Infinity : Infinity;
+ } else {
+ mantissa = mantissa + pow(2, mantissaLength);
+ exponent = exponent - eBias;
+ } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
+ };
- var IE_PROTO$1 = sharedKey('IE_PROTO');
- var ObjectPrototype$1 = Object.prototype;
+ var ieee754 = {
+ pack: pack,
+ unpack: unpack
+ };
- // `Object.getPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.getprototypeof
- var objectGetPrototypeOf = correctPrototypeGetter ? Object.getPrototypeOf : function (O) {
- O = toObject(O);
- if (has(O, IE_PROTO$1)) return O[IE_PROTO$1];
- if (typeof O.constructor == 'function' && O instanceof O.constructor) {
- return O.constructor.prototype;
- } return O instanceof Object ? ObjectPrototype$1 : null;
+ // `Array.prototype.fill` method implementation
+ // https://tc39.es/ecma262/#sec-array.prototype.fill
+ var arrayFill = function fill(value /* , start = 0, end = @length */) {
+ var O = toObject(this);
+ var length = toLength(O.length);
+ var argumentsLength = arguments.length;
+ var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);
+ var end = argumentsLength > 2 ? arguments[2] : undefined;
+ var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
+ while (endPos > index) O[index++] = value;
+ return O;
};
- var ITERATOR = wellKnownSymbol('iterator');
- var BUGGY_SAFARI_ITERATORS = false;
+ var getOwnPropertyNames = objectGetOwnPropertyNames.f;
+ var defineProperty$3 = objectDefineProperty.f;
- var returnThis = function () { return this; };
- // `%IteratorPrototype%` object
- // https://tc39.github.io/ecma262/#sec-%iteratorprototype%-object
- var IteratorPrototype, PrototypeOfArrayIteratorPrototype, arrayIterator;
- if ([].keys) {
- arrayIterator = [].keys();
- // Safari 8 has buggy iterators w/o `next`
- if (!('next' in arrayIterator)) BUGGY_SAFARI_ITERATORS = true;
- else {
- PrototypeOfArrayIteratorPrototype = objectGetPrototypeOf(objectGetPrototypeOf(arrayIterator));
- if (PrototypeOfArrayIteratorPrototype !== Object.prototype) IteratorPrototype = PrototypeOfArrayIteratorPrototype;
- }
- }
- if (IteratorPrototype == undefined) IteratorPrototype = {};
+ var getInternalState$3 = internalState.get;
+ var setInternalState$3 = internalState.set;
+ var ARRAY_BUFFER = 'ArrayBuffer';
+ var DATA_VIEW = 'DataView';
+ var PROTOTYPE$2 = 'prototype';
+ var WRONG_LENGTH = 'Wrong length';
+ var WRONG_INDEX = 'Wrong index';
+ var NativeArrayBuffer = global_1[ARRAY_BUFFER];
+ var $ArrayBuffer = NativeArrayBuffer;
+ var $DataView = global_1[DATA_VIEW];
+ var $DataViewPrototype = $DataView && $DataView[PROTOTYPE$2];
+ var ObjectPrototype$2 = Object.prototype;
+ var RangeError$1 = global_1.RangeError;
- // 25.1.2.1.1 %IteratorPrototype%[@@iterator]()
- if ( !has(IteratorPrototype, ITERATOR)) {
- createNonEnumerableProperty(IteratorPrototype, ITERATOR, returnThis);
- }
+ var packIEEE754 = ieee754.pack;
+ var unpackIEEE754 = ieee754.unpack;
- var iteratorsCore = {
- IteratorPrototype: IteratorPrototype,
- BUGGY_SAFARI_ITERATORS: BUGGY_SAFARI_ITERATORS
+ var packInt8 = function (number) {
+ return [number & 0xFF];
};
- var IteratorPrototype$1 = iteratorsCore.IteratorPrototype;
+ var packInt16 = function (number) {
+ return [number & 0xFF, number >> 8 & 0xFF];
+ };
+ var packInt32 = function (number) {
+ return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
+ };
+ var unpackInt32 = function (buffer) {
+ return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
+ };
+ var packFloat32 = function (number) {
+ return packIEEE754(number, 23, 4);
+ };
+ var packFloat64 = function (number) {
+ return packIEEE754(number, 52, 8);
+ };
- var returnThis$1 = function () { return this; };
+ var addGetter = function (Constructor, key) {
+ defineProperty$3(Constructor[PROTOTYPE$2], key, { get: function () { return getInternalState$3(this)[key]; } });
+ };
- var createIteratorConstructor = function (IteratorConstructor, NAME, next) {
- var TO_STRING_TAG = NAME + ' Iterator';
- IteratorConstructor.prototype = objectCreate(IteratorPrototype$1, { next: createPropertyDescriptor(1, next) });
- setToStringTag(IteratorConstructor, TO_STRING_TAG, false);
- iterators[TO_STRING_TAG] = returnThis$1;
- return IteratorConstructor;
+ var get$1 = function (view, count, index, isLittleEndian) {
+ var intIndex = toIndex(index);
+ var store = getInternalState$3(view);
+ if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX);
+ var bytes = getInternalState$3(store.buffer).bytes;
+ var start = intIndex + store.byteOffset;
+ var pack = bytes.slice(start, start + count);
+ return isLittleEndian ? pack : pack.reverse();
};
- var aPossiblePrototype = function (it) {
- if (!isObject(it) && it !== null) {
- throw TypeError("Can't set " + String(it) + ' as a prototype');
- } return it;
+ var set$1 = function (view, count, index, conversion, value, isLittleEndian) {
+ var intIndex = toIndex(index);
+ var store = getInternalState$3(view);
+ if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX);
+ var bytes = getInternalState$3(store.buffer).bytes;
+ var start = intIndex + store.byteOffset;
+ var pack = conversion(+value);
+ for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
};
- // `Object.setPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.setprototypeof
- // Works with __proto__ only. Old v8 can't work with null proto objects.
- /* eslint-disable no-proto */
- var objectSetPrototypeOf = Object.setPrototypeOf || ('__proto__' in {} ? function () {
- var CORRECT_SETTER = false;
- var test = {};
- var setter;
- try {
- setter = Object.getOwnPropertyDescriptor(Object.prototype, '__proto__').set;
- setter.call(test, []);
- CORRECT_SETTER = test instanceof Array;
- } catch (error) { /* empty */ }
- return function setPrototypeOf(O, proto) {
- anObject(O);
- aPossiblePrototype(proto);
- if (CORRECT_SETTER) setter.call(O, proto);
- else O.__proto__ = proto;
- return O;
+ if (!arrayBufferNative) {
+ $ArrayBuffer = function ArrayBuffer(length) {
+ anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
+ var byteLength = toIndex(length);
+ setInternalState$3(this, {
+ bytes: arrayFill.call(new Array(byteLength), 0),
+ byteLength: byteLength
+ });
+ if (!descriptors) this.byteLength = byteLength;
};
- }() : undefined);
-
- var IteratorPrototype$2 = iteratorsCore.IteratorPrototype;
- var BUGGY_SAFARI_ITERATORS$1 = iteratorsCore.BUGGY_SAFARI_ITERATORS;
- var ITERATOR$1 = wellKnownSymbol('iterator');
- var KEYS = 'keys';
- var VALUES = 'values';
- var ENTRIES = 'entries';
- var returnThis$2 = function () { return this; };
+ $DataView = function DataView(buffer, byteOffset, byteLength) {
+ anInstance(this, $DataView, DATA_VIEW);
+ anInstance(buffer, $ArrayBuffer, DATA_VIEW);
+ var bufferLength = getInternalState$3(buffer).byteLength;
+ var offset = toInteger(byteOffset);
+ if (offset < 0 || offset > bufferLength) throw RangeError$1('Wrong offset');
+ byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
+ if (offset + byteLength > bufferLength) throw RangeError$1(WRONG_LENGTH);
+ setInternalState$3(this, {
+ buffer: buffer,
+ byteLength: byteLength,
+ byteOffset: offset
+ });
+ if (!descriptors) {
+ this.buffer = buffer;
+ this.byteLength = byteLength;
+ this.byteOffset = offset;
+ }
+ };
- var defineIterator = function (Iterable, NAME, IteratorConstructor, next, DEFAULT, IS_SET, FORCED) {
- createIteratorConstructor(IteratorConstructor, NAME, next);
-
- var getIterationMethod = function (KIND) {
- if (KIND === DEFAULT && defaultIterator) return defaultIterator;
- if (!BUGGY_SAFARI_ITERATORS$1 && KIND in IterablePrototype) return IterablePrototype[KIND];
- switch (KIND) {
- case KEYS: return function keys() { return new IteratorConstructor(this, KIND); };
- case VALUES: return function values() { return new IteratorConstructor(this, KIND); };
- case ENTRIES: return function entries() { return new IteratorConstructor(this, KIND); };
- } return function () { return new IteratorConstructor(this); };
- };
-
- var TO_STRING_TAG = NAME + ' Iterator';
- var INCORRECT_VALUES_NAME = false;
- var IterablePrototype = Iterable.prototype;
- var nativeIterator = IterablePrototype[ITERATOR$1]
- || IterablePrototype['@@iterator']
- || DEFAULT && IterablePrototype[DEFAULT];
- var defaultIterator = !BUGGY_SAFARI_ITERATORS$1 && nativeIterator || getIterationMethod(DEFAULT);
- var anyNativeIterator = NAME == 'Array' ? IterablePrototype.entries || nativeIterator : nativeIterator;
- var CurrentIteratorPrototype, methods, KEY;
-
- // fix native
- if (anyNativeIterator) {
- CurrentIteratorPrototype = objectGetPrototypeOf(anyNativeIterator.call(new Iterable()));
- if (IteratorPrototype$2 !== Object.prototype && CurrentIteratorPrototype.next) {
- if ( objectGetPrototypeOf(CurrentIteratorPrototype) !== IteratorPrototype$2) {
- if (objectSetPrototypeOf) {
- objectSetPrototypeOf(CurrentIteratorPrototype, IteratorPrototype$2);
- } else if (typeof CurrentIteratorPrototype[ITERATOR$1] != 'function') {
- createNonEnumerableProperty(CurrentIteratorPrototype, ITERATOR$1, returnThis$2);
- }
- }
- // Set @@toStringTag to native iterators
- setToStringTag(CurrentIteratorPrototype, TO_STRING_TAG, true);
- }
- }
-
- // fix Array#{values, @@iterator}.name in V8 / FF
- if (DEFAULT == VALUES && nativeIterator && nativeIterator.name !== VALUES) {
- INCORRECT_VALUES_NAME = true;
- defaultIterator = function values() { return nativeIterator.call(this); };
- }
-
- // define iterator
- if ( IterablePrototype[ITERATOR$1] !== defaultIterator) {
- createNonEnumerableProperty(IterablePrototype, ITERATOR$1, defaultIterator);
- }
- iterators[NAME] = defaultIterator;
-
- // export additional methods
- if (DEFAULT) {
- methods = {
- values: getIterationMethod(VALUES),
- keys: IS_SET ? defaultIterator : getIterationMethod(KEYS),
- entries: getIterationMethod(ENTRIES)
- };
- if (FORCED) for (KEY in methods) {
- if (BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME || !(KEY in IterablePrototype)) {
- redefine(IterablePrototype, KEY, methods[KEY]);
- }
- } else _export({ target: NAME, proto: true, forced: BUGGY_SAFARI_ITERATORS$1 || INCORRECT_VALUES_NAME }, methods);
- }
-
- return methods;
- };
-
- var ARRAY_ITERATOR = 'Array Iterator';
- var setInternalState$1 = internalState.set;
- var getInternalState$1 = internalState.getterFor(ARRAY_ITERATOR);
-
- // `Array.prototype.entries` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.entries
- // `Array.prototype.keys` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.keys
- // `Array.prototype.values` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.values
- // `Array.prototype[@@iterator]` method
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@iterator
- // `CreateArrayIterator` internal method
- // https://tc39.github.io/ecma262/#sec-createarrayiterator
- var es_array_iterator = defineIterator(Array, 'Array', function (iterated, kind) {
- setInternalState$1(this, {
- type: ARRAY_ITERATOR,
- target: toIndexedObject(iterated), // target
- index: 0, // next index
- kind: kind // kind
- });
- // `%ArrayIteratorPrototype%.next` method
- // https://tc39.github.io/ecma262/#sec-%arrayiteratorprototype%.next
- }, function () {
- var state = getInternalState$1(this);
- var target = state.target;
- var kind = state.kind;
- var index = state.index++;
- if (!target || index >= target.length) {
- state.target = undefined;
- return { value: undefined, done: true };
- }
- if (kind == 'keys') return { value: index, done: false };
- if (kind == 'values') return { value: target[index], done: false };
- return { value: [index, target[index]], done: false };
- }, 'values');
-
- // argumentsList[@@iterator] is %ArrayProto_values%
- // https://tc39.github.io/ecma262/#sec-createunmappedargumentsobject
- // https://tc39.github.io/ecma262/#sec-createmappedargumentsobject
- iterators.Arguments = iterators.Array;
-
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables('keys');
- addToUnscopables('values');
- addToUnscopables('entries');
-
- var nativeJoin = [].join;
-
- var ES3_STRINGS = indexedObject != Object;
- var STRICT_METHOD$2 = arrayMethodIsStrict('join', ',');
-
- // `Array.prototype.join` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.join
- _export({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$2 }, {
- join: function join(separator) {
- return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);
- }
- });
-
- var engineUserAgent = getBuiltIn('navigator', 'userAgent') || '';
-
- var process$1 = global_1.process;
- var versions = process$1 && process$1.versions;
- var v8 = versions && versions.v8;
- var match, version;
-
- if (v8) {
- match = v8.split('.');
- version = match[0] + match[1];
- } else if (engineUserAgent) {
- match = engineUserAgent.match(/Edge\/(\d+)/);
- if (!match || match[1] >= 74) {
- match = engineUserAgent.match(/Chrome\/(\d+)/);
- if (match) version = match[1];
- }
- }
-
- var engineV8Version = version && +version;
-
- var SPECIES$1 = wellKnownSymbol('species');
-
- var arrayMethodHasSpeciesSupport = function (METHOD_NAME) {
- // We can't use this feature detection in V8 since it causes
- // deoptimization and serious performance degradation
- // https://github.com/zloirock/core-js/issues/677
- return engineV8Version >= 51 || !fails(function () {
- var array = [];
- var constructor = array.constructor = {};
- constructor[SPECIES$1] = function () {
- return { foo: 1 };
- };
- return array[METHOD_NAME](Boolean).foo !== 1;
- });
- };
-
- var $map = arrayIteration.map;
-
-
-
- var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
- // FF49- issue
- var USES_TO_LENGTH$2 = arrayMethodUsesToLength('map');
-
- // `Array.prototype.map` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.map
- // with adding support of @@species
- _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT || !USES_TO_LENGTH$2 }, {
- map: function map(callbackfn /* , thisArg */) {
- return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- }
- });
-
- var createProperty = function (object, key, value) {
- var propertyKey = toPrimitive(key);
- if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));
- else object[propertyKey] = value;
- };
-
- var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('slice');
- var USES_TO_LENGTH$3 = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 });
-
- var SPECIES$2 = wellKnownSymbol('species');
- var nativeSlice = [].slice;
- var max$1 = Math.max;
-
- // `Array.prototype.slice` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.slice
- // fallback for not array-like ES3 strings and DOM objects
- _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 || !USES_TO_LENGTH$3 }, {
- slice: function slice(start, end) {
- var O = toIndexedObject(this);
- var length = toLength(O.length);
- var k = toAbsoluteIndex(start, length);
- var fin = toAbsoluteIndex(end === undefined ? length : end, length);
- // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
- var Constructor, result, n;
- if (isArray(O)) {
- Constructor = O.constructor;
- // cross-realm fallback
- if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {
- Constructor = undefined;
- } else if (isObject(Constructor)) {
- Constructor = Constructor[SPECIES$2];
- if (Constructor === null) Constructor = undefined;
- }
- if (Constructor === Array || Constructor === undefined) {
- return nativeSlice.call(O, k, fin);
- }
- }
- result = new (Constructor === undefined ? Array : Constructor)(max$1(fin - k, 0));
- for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
- result.length = n;
- return result;
- }
- });
-
- var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined';
-
- var redefineAll = function (target, src, options) {
- for (var key in src) redefine(target, key, src[key], options);
- return target;
- };
-
- var anInstance = function (it, Constructor, name) {
- if (!(it instanceof Constructor)) {
- throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation');
- } return it;
- };
-
- // `ToIndex` abstract operation
- // https://tc39.github.io/ecma262/#sec-toindex
- var toIndex = function (it) {
- if (it === undefined) return 0;
- var number = toInteger(it);
- var length = toLength(number);
- if (number !== length) throw RangeError('Wrong length or index');
- return length;
- };
-
- // IEEE754 conversions based on https://github.com/feross/ieee754
- // eslint-disable-next-line no-shadow-restricted-names
- var Infinity$1 = 1 / 0;
- var abs = Math.abs;
- var pow = Math.pow;
- var floor$1 = Math.floor;
- var log = Math.log;
- var LN2 = Math.LN2;
-
- var pack = function (number, mantissaLength, bytes) {
- var buffer = new Array(bytes);
- var exponentLength = bytes * 8 - mantissaLength - 1;
- var eMax = (1 << exponentLength) - 1;
- var eBias = eMax >> 1;
- var rt = mantissaLength === 23 ? pow(2, -24) - pow(2, -77) : 0;
- var sign = number < 0 || number === 0 && 1 / number < 0 ? 1 : 0;
- var index = 0;
- var exponent, mantissa, c;
- number = abs(number);
- // eslint-disable-next-line no-self-compare
- if (number != number || number === Infinity$1) {
- // eslint-disable-next-line no-self-compare
- mantissa = number != number ? 1 : 0;
- exponent = eMax;
- } else {
- exponent = floor$1(log(number) / LN2);
- if (number * (c = pow(2, -exponent)) < 1) {
- exponent--;
- c *= 2;
- }
- if (exponent + eBias >= 1) {
- number += rt / c;
- } else {
- number += rt * pow(2, 1 - eBias);
- }
- if (number * c >= 2) {
- exponent++;
- c /= 2;
- }
- if (exponent + eBias >= eMax) {
- mantissa = 0;
- exponent = eMax;
- } else if (exponent + eBias >= 1) {
- mantissa = (number * c - 1) * pow(2, mantissaLength);
- exponent = exponent + eBias;
- } else {
- mantissa = number * pow(2, eBias - 1) * pow(2, mantissaLength);
- exponent = 0;
- }
- }
- for (; mantissaLength >= 8; buffer[index++] = mantissa & 255, mantissa /= 256, mantissaLength -= 8);
- exponent = exponent << mantissaLength | mantissa;
- exponentLength += mantissaLength;
- for (; exponentLength > 0; buffer[index++] = exponent & 255, exponent /= 256, exponentLength -= 8);
- buffer[--index] |= sign * 128;
- return buffer;
- };
-
- var unpack = function (buffer, mantissaLength) {
- var bytes = buffer.length;
- var exponentLength = bytes * 8 - mantissaLength - 1;
- var eMax = (1 << exponentLength) - 1;
- var eBias = eMax >> 1;
- var nBits = exponentLength - 7;
- var index = bytes - 1;
- var sign = buffer[index--];
- var exponent = sign & 127;
- var mantissa;
- sign >>= 7;
- for (; nBits > 0; exponent = exponent * 256 + buffer[index], index--, nBits -= 8);
- mantissa = exponent & (1 << -nBits) - 1;
- exponent >>= -nBits;
- nBits += mantissaLength;
- for (; nBits > 0; mantissa = mantissa * 256 + buffer[index], index--, nBits -= 8);
- if (exponent === 0) {
- exponent = 1 - eBias;
- } else if (exponent === eMax) {
- return mantissa ? NaN : sign ? -Infinity$1 : Infinity$1;
- } else {
- mantissa = mantissa + pow(2, mantissaLength);
- exponent = exponent - eBias;
- } return (sign ? -1 : 1) * mantissa * pow(2, exponent - mantissaLength);
- };
-
- var ieee754 = {
- pack: pack,
- unpack: unpack
- };
-
- // `Array.prototype.fill` method implementation
- // https://tc39.github.io/ecma262/#sec-array.prototype.fill
- var arrayFill = function fill(value /* , start = 0, end = @length */) {
- var O = toObject(this);
- var length = toLength(O.length);
- var argumentsLength = arguments.length;
- var index = toAbsoluteIndex(argumentsLength > 1 ? arguments[1] : undefined, length);
- var end = argumentsLength > 2 ? arguments[2] : undefined;
- var endPos = end === undefined ? length : toAbsoluteIndex(end, length);
- while (endPos > index) O[index++] = value;
- return O;
- };
-
- var getOwnPropertyNames = objectGetOwnPropertyNames.f;
- var defineProperty$4 = objectDefineProperty.f;
-
-
-
-
- var getInternalState$2 = internalState.get;
- var setInternalState$2 = internalState.set;
- var ARRAY_BUFFER = 'ArrayBuffer';
- var DATA_VIEW = 'DataView';
- var PROTOTYPE$2 = 'prototype';
- var WRONG_LENGTH = 'Wrong length';
- var WRONG_INDEX = 'Wrong index';
- var NativeArrayBuffer = global_1[ARRAY_BUFFER];
- var $ArrayBuffer = NativeArrayBuffer;
- var $DataView = global_1[DATA_VIEW];
- var $DataViewPrototype = $DataView && $DataView[PROTOTYPE$2];
- var ObjectPrototype$2 = Object.prototype;
- var RangeError$1 = global_1.RangeError;
-
- var packIEEE754 = ieee754.pack;
- var unpackIEEE754 = ieee754.unpack;
-
- var packInt8 = function (number) {
- return [number & 0xFF];
- };
-
- var packInt16 = function (number) {
- return [number & 0xFF, number >> 8 & 0xFF];
- };
-
- var packInt32 = function (number) {
- return [number & 0xFF, number >> 8 & 0xFF, number >> 16 & 0xFF, number >> 24 & 0xFF];
- };
-
- var unpackInt32 = function (buffer) {
- return buffer[3] << 24 | buffer[2] << 16 | buffer[1] << 8 | buffer[0];
- };
-
- var packFloat32 = function (number) {
- return packIEEE754(number, 23, 4);
- };
-
- var packFloat64 = function (number) {
- return packIEEE754(number, 52, 8);
- };
-
- var addGetter = function (Constructor, key) {
- defineProperty$4(Constructor[PROTOTYPE$2], key, { get: function () { return getInternalState$2(this)[key]; } });
- };
-
- var get$1 = function (view, count, index, isLittleEndian) {
- var intIndex = toIndex(index);
- var store = getInternalState$2(view);
- if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX);
- var bytes = getInternalState$2(store.buffer).bytes;
- var start = intIndex + store.byteOffset;
- var pack = bytes.slice(start, start + count);
- return isLittleEndian ? pack : pack.reverse();
- };
-
- var set$1 = function (view, count, index, conversion, value, isLittleEndian) {
- var intIndex = toIndex(index);
- var store = getInternalState$2(view);
- if (intIndex + count > store.byteLength) throw RangeError$1(WRONG_INDEX);
- var bytes = getInternalState$2(store.buffer).bytes;
- var start = intIndex + store.byteOffset;
- var pack = conversion(+value);
- for (var i = 0; i < count; i++) bytes[start + i] = pack[isLittleEndian ? i : count - i - 1];
- };
-
- if (!arrayBufferNative) {
- $ArrayBuffer = function ArrayBuffer(length) {
- anInstance(this, $ArrayBuffer, ARRAY_BUFFER);
- var byteLength = toIndex(length);
- setInternalState$2(this, {
- bytes: arrayFill.call(new Array(byteLength), 0),
- byteLength: byteLength
- });
- if (!descriptors) this.byteLength = byteLength;
- };
-
- $DataView = function DataView(buffer, byteOffset, byteLength) {
- anInstance(this, $DataView, DATA_VIEW);
- anInstance(buffer, $ArrayBuffer, DATA_VIEW);
- var bufferLength = getInternalState$2(buffer).byteLength;
- var offset = toInteger(byteOffset);
- if (offset < 0 || offset > bufferLength) throw RangeError$1('Wrong offset');
- byteLength = byteLength === undefined ? bufferLength - offset : toLength(byteLength);
- if (offset + byteLength > bufferLength) throw RangeError$1(WRONG_LENGTH);
- setInternalState$2(this, {
- buffer: buffer,
- byteLength: byteLength,
- byteOffset: offset
- });
- if (!descriptors) {
- this.buffer = buffer;
- this.byteLength = byteLength;
- this.byteOffset = offset;
- }
- };
-
- if (descriptors) {
- addGetter($ArrayBuffer, 'byteLength');
- addGetter($DataView, 'buffer');
- addGetter($DataView, 'byteLength');
- addGetter($DataView, 'byteOffset');
- }
+ if (descriptors) {
+ addGetter($ArrayBuffer, 'byteLength');
+ addGetter($DataView, 'buffer');
+ addGetter($DataView, 'byteLength');
+ addGetter($DataView, 'byteOffset');
+ }
redefineAll($DataView[PROTOTYPE$2], {
getInt8: function getInt8(byteOffset) {
}
});
} else {
+ /* eslint-disable no-new -- required for testing */
if (!fails(function () {
NativeArrayBuffer(1);
}) || !fails(function () {
- new NativeArrayBuffer(-1); // eslint-disable-line no-new
+ new NativeArrayBuffer(-1);
}) || fails(function () {
- new NativeArrayBuffer(); // eslint-disable-line no-new
- new NativeArrayBuffer(1.5); // eslint-disable-line no-new
- new NativeArrayBuffer(NaN); // eslint-disable-line no-new
+ new NativeArrayBuffer();
+ new NativeArrayBuffer(1.5);
+ new NativeArrayBuffer(NaN);
return NativeArrayBuffer.name != ARRAY_BUFFER;
})) {
+ /* eslint-enable no-new -- required for testing */
$ArrayBuffer = function ArrayBuffer(length) {
anInstance(this, $ArrayBuffer);
return new NativeArrayBuffer(toIndex(length));
DataView: $DataView
};
- var SPECIES$3 = wellKnownSymbol('species');
+ // `DataView` constructor
+ // https://tc39.es/ecma262/#sec-dataview-constructor
+ _export({ global: true, forced: !arrayBufferNative }, {
+ DataView: arrayBuffer.DataView
+ });
- var setSpecies = function (CONSTRUCTOR_NAME) {
- var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
- var defineProperty = objectDefineProperty.f;
+ var SPECIES$1 = wellKnownSymbol('species');
- if (descriptors && Constructor && !Constructor[SPECIES$3]) {
- defineProperty(Constructor, SPECIES$3, {
- configurable: true,
- get: function () { return this; }
- });
- }
+ // `SpeciesConstructor` abstract operation
+ // https://tc39.es/ecma262/#sec-speciesconstructor
+ var speciesConstructor = function (O, defaultConstructor) {
+ var C = anObject(O).constructor;
+ var S;
+ return C === undefined || (S = anObject(C)[SPECIES$1]) == undefined ? defaultConstructor : aFunction$1(S);
};
- var ARRAY_BUFFER$1 = 'ArrayBuffer';
- var ArrayBuffer$1 = arrayBuffer[ARRAY_BUFFER$1];
- var NativeArrayBuffer$1 = global_1[ARRAY_BUFFER$1];
+ var ArrayBuffer$1 = arrayBuffer.ArrayBuffer;
+ var DataView$1 = arrayBuffer.DataView;
+ var nativeArrayBufferSlice = ArrayBuffer$1.prototype.slice;
- // `ArrayBuffer` constructor
- // https://tc39.github.io/ecma262/#sec-arraybuffer-constructor
- _export({ global: true, forced: NativeArrayBuffer$1 !== ArrayBuffer$1 }, {
- ArrayBuffer: ArrayBuffer$1
+ var INCORRECT_SLICE = fails(function () {
+ return !new ArrayBuffer$1(2).slice(1, undefined).byteLength;
});
- setSpecies(ARRAY_BUFFER$1);
-
- var TO_STRING_TAG$1 = wellKnownSymbol('toStringTag');
- var test = {};
-
- test[TO_STRING_TAG$1] = 'z';
-
- var toStringTagSupport = String(test) === '[object z]';
-
- var TO_STRING_TAG$2 = wellKnownSymbol('toStringTag');
- // ES3 wrong here
- var CORRECT_ARGUMENTS = classofRaw(function () { return arguments; }()) == 'Arguments';
-
- // fallback for IE11 Script Access Denied error
- var tryGet = function (it, key) {
- try {
- return it[key];
- } catch (error) { /* empty */ }
- };
-
- // getting tag from ES6+ `Object.prototype.toString`
- var classof = toStringTagSupport ? classofRaw : function (it) {
- var O, tag, result;
- return it === undefined ? 'Undefined' : it === null ? 'Null'
- // @@toStringTag case
- : typeof (tag = tryGet(O = Object(it), TO_STRING_TAG$2)) == 'string' ? tag
- // builtinTag case
- : CORRECT_ARGUMENTS ? classofRaw(O)
- // ES3 arguments fallback
- : (result = classofRaw(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : result;
- };
+ // `ArrayBuffer.prototype.slice` method
+ // https://tc39.es/ecma262/#sec-arraybuffer.prototype.slice
+ _export({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
+ slice: function slice(start, end) {
+ if (nativeArrayBufferSlice !== undefined && end === undefined) {
+ return nativeArrayBufferSlice.call(anObject(this), start); // FF fix
+ }
+ var length = anObject(this).byteLength;
+ var first = toAbsoluteIndex(start, length);
+ var fin = toAbsoluteIndex(end === undefined ? length : end, length);
+ var result = new (speciesConstructor(this, ArrayBuffer$1))(toLength(fin - first));
+ var viewSource = new DataView$1(this);
+ var viewTarget = new DataView$1(result);
+ var index = 0;
+ while (first < fin) {
+ viewTarget.setUint8(index++, viewSource.getUint8(first++));
+ } return result;
+ }
+ });
- var defineProperty$5 = objectDefineProperty.f;
+ var defineProperty$4 = objectDefineProperty.f;
var ObjectPrototype$3 = Object.prototype;
var isPrototypeOf = ObjectPrototype$3.isPrototypeOf;
- var TO_STRING_TAG$3 = wellKnownSymbol('toStringTag');
+ var TO_STRING_TAG$4 = wellKnownSymbol('toStringTag');
var TYPED_ARRAY_TAG = uid('TYPED_ARRAY_TAG');
// Fixing native typed arrays in Opera Presto crashes the browser, see #595
var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferNative && !!objectSetPrototypeOf && classof(global_1.opera) !== 'Opera';
Float64Array: 8
};
+ var BigIntArrayConstructorsList = {
+ BigInt64Array: 8,
+ BigUint64Array: 8
+ };
+
var isView = function isView(it) {
+ if (!isObject(it)) return false;
var klass = classof(it);
- return klass === 'DataView' || has(TypedArrayConstructorsList, klass);
+ return klass === 'DataView'
+ || has(TypedArrayConstructorsList, klass)
+ || has(BigIntArrayConstructorsList, klass);
};
var isTypedArray = function (it) {
- return isObject(it) && has(TypedArrayConstructorsList, classof(it));
+ if (!isObject(it)) return false;
+ var klass = classof(it);
+ return has(TypedArrayConstructorsList, klass)
+ || has(BigIntArrayConstructorsList, klass);
};
var aTypedArray = function (it) {
// WebKit bug - typed arrays constructors prototype is Object.prototype
if (!NATIVE_ARRAY_BUFFER_VIEWS || typeof TypedArray != 'function' || TypedArray === Function.prototype) {
- // eslint-disable-next-line no-shadow
+ // eslint-disable-next-line no-shadow -- safe
TypedArray = function TypedArray() {
throw TypeError('Incorrect invocation');
};
objectSetPrototypeOf(Uint8ClampedArrayPrototype, TypedArrayPrototype);
}
- if (descriptors && !has(TypedArrayPrototype, TO_STRING_TAG$3)) {
+ if (descriptors && !has(TypedArrayPrototype, TO_STRING_TAG$4)) {
TYPED_ARRAY_TAG_REQIRED = true;
- defineProperty$5(TypedArrayPrototype, TO_STRING_TAG$3, { get: function () {
+ defineProperty$4(TypedArrayPrototype, TO_STRING_TAG$4, { get: function () {
return isObject(this) ? this[TYPED_ARRAY_TAG] : undefined;
} });
for (NAME in TypedArrayConstructorsList) if (global_1[NAME]) {
var NATIVE_ARRAY_BUFFER_VIEWS$1 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
// `ArrayBuffer.isView` method
- // https://tc39.github.io/ecma262/#sec-arraybuffer.isview
+ // https://tc39.es/ecma262/#sec-arraybuffer.isview
_export({ target: 'ArrayBuffer', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS$1 }, {
isView: arrayBufferViewCore.isView
});
- var SPECIES$4 = wellKnownSymbol('species');
+ var SPECIES$2 = wellKnownSymbol('species');
- // `SpeciesConstructor` abstract operation
- // https://tc39.github.io/ecma262/#sec-speciesconstructor
- var speciesConstructor = function (O, defaultConstructor) {
- var C = anObject(O).constructor;
- var S;
- return C === undefined || (S = anObject(C)[SPECIES$4]) == undefined ? defaultConstructor : aFunction$1(S);
+ var setSpecies = function (CONSTRUCTOR_NAME) {
+ var Constructor = getBuiltIn(CONSTRUCTOR_NAME);
+ var defineProperty = objectDefineProperty.f;
+
+ if (descriptors && Constructor && !Constructor[SPECIES$2]) {
+ defineProperty(Constructor, SPECIES$2, {
+ configurable: true,
+ get: function () { return this; }
+ });
+ }
};
- var ArrayBuffer$2 = arrayBuffer.ArrayBuffer;
- var DataView$1 = arrayBuffer.DataView;
- var nativeArrayBufferSlice = ArrayBuffer$2.prototype.slice;
+ var ARRAY_BUFFER$1 = 'ArrayBuffer';
+ var ArrayBuffer$2 = arrayBuffer[ARRAY_BUFFER$1];
+ var NativeArrayBuffer$1 = global_1[ARRAY_BUFFER$1];
- var INCORRECT_SLICE = fails(function () {
- return !new ArrayBuffer$2(2).slice(1, undefined).byteLength;
+ // `ArrayBuffer` constructor
+ // https://tc39.es/ecma262/#sec-arraybuffer-constructor
+ _export({ global: true, forced: NativeArrayBuffer$1 !== ArrayBuffer$2 }, {
+ ArrayBuffer: ArrayBuffer$2
});
- // `ArrayBuffer.prototype.slice` method
- // https://tc39.github.io/ecma262/#sec-arraybuffer.prototype.slice
- _export({ target: 'ArrayBuffer', proto: true, unsafe: true, forced: INCORRECT_SLICE }, {
- slice: function slice(start, end) {
- if (nativeArrayBufferSlice !== undefined && end === undefined) {
- return nativeArrayBufferSlice.call(anObject(this), start); // FF fix
- }
- var length = anObject(this).byteLength;
- var first = toAbsoluteIndex(start, length);
- var fin = toAbsoluteIndex(end === undefined ? length : end, length);
- var result = new (speciesConstructor(this, ArrayBuffer$2))(toLength(fin - first));
- var viewSource = new DataView$1(this);
- var viewTarget = new DataView$1(result);
- var index = 0;
- while (first < fin) {
- viewTarget.setUint8(index++, viewSource.getUint8(first++));
- } return result;
+ setSpecies(ARRAY_BUFFER$1);
+
+ var arrayMethodIsStrict = function (METHOD_NAME, argument) {
+ var method = [][METHOD_NAME];
+ return !!method && fails(function () {
+ // eslint-disable-next-line no-useless-call,no-throw-literal -- required for testing
+ method.call(null, argument || function () { throw 1; }, 1);
+ });
+ };
+
+ var $indexOf = arrayIncludes.indexOf;
+
+
+ var nativeIndexOf = [].indexOf;
+
+ var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0;
+ var STRICT_METHOD = arrayMethodIsStrict('indexOf');
+
+ // `Array.prototype.indexOf` method
+ // https://tc39.es/ecma262/#sec-array.prototype.indexof
+ _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD }, {
+ indexOf: function indexOf(searchElement /* , fromIndex = 0 */) {
+ return NEGATIVE_ZERO
+ // convert -0 to +0
+ ? nativeIndexOf.apply(this, arguments) || 0
+ : $indexOf(this, searchElement, arguments.length > 1 ? arguments[1] : undefined);
}
});
- // `DataView` constructor
- // https://tc39.github.io/ecma262/#sec-dataview-constructor
- _export({ global: true, forced: !arrayBufferNative }, {
- DataView: arrayBuffer.DataView
+ var SPECIES$3 = wellKnownSymbol('species');
+
+ var arrayMethodHasSpeciesSupport = function (METHOD_NAME) {
+ // We can't use this feature detection in V8 since it causes
+ // deoptimization and serious performance degradation
+ // https://github.com/zloirock/core-js/issues/677
+ return engineV8Version >= 51 || !fails(function () {
+ var array = [];
+ var constructor = array.constructor = {};
+ constructor[SPECIES$3] = function () {
+ return { foo: 1 };
+ };
+ return array[METHOD_NAME](Boolean).foo !== 1;
+ });
+ };
+
+ var $map = arrayIteration.map;
+
+
+ var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map');
+
+ // `Array.prototype.map` method
+ // https://tc39.es/ecma262/#sec-array.prototype.map
+ // with adding support of @@species
+ _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT }, {
+ map: function map(callbackfn /* , thisArg */) {
+ return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ }
});
- var defineProperty$6 = objectDefineProperty.f;
+ var $forEach$1 = arrayIteration.forEach;
- var FunctionPrototype = Function.prototype;
- var FunctionPrototypeToString = FunctionPrototype.toString;
- var nameRE = /^\s*function ([^ (]*)/;
- var NAME$1 = 'name';
- // Function instances `.name` property
- // https://tc39.github.io/ecma262/#sec-function-instances-name
- if (descriptors && !(NAME$1 in FunctionPrototype)) {
- defineProperty$6(FunctionPrototype, NAME$1, {
- configurable: true,
- get: function () {
- try {
- return FunctionPrototypeToString.call(this).match(nameRE)[1];
- } catch (error) {
- return '';
- }
- }
- });
+ var STRICT_METHOD$1 = arrayMethodIsStrict('forEach');
+
+ // `Array.prototype.forEach` method implementation
+ // https://tc39.es/ecma262/#sec-array.prototype.foreach
+ var arrayForEach = !STRICT_METHOD$1 ? function forEach(callbackfn /* , thisArg */) {
+ return $forEach$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ } : [].forEach;
+
+ // `Array.prototype.forEach` method
+ // https://tc39.es/ecma262/#sec-array.prototype.foreach
+ _export({ target: 'Array', proto: true, forced: [].forEach != arrayForEach }, {
+ forEach: arrayForEach
+ });
+
+ for (var COLLECTION_NAME$1 in domIterables) {
+ var Collection$1 = global_1[COLLECTION_NAME$1];
+ var CollectionPrototype$1 = Collection$1 && Collection$1.prototype;
+ // some Chrome versions have non-configurable methods on DOMTokenList
+ if (CollectionPrototype$1 && CollectionPrototype$1.forEach !== arrayForEach) try {
+ createNonEnumerableProperty(CollectionPrototype$1, 'forEach', arrayForEach);
+ } catch (error) {
+ CollectionPrototype$1.forEach = arrayForEach;
+ }
}
- // `Object.create` method
- // https://tc39.github.io/ecma262/#sec-object.create
- _export({ target: 'Object', stat: true, sham: !descriptors }, {
- create: objectCreate
+ // `Array.isArray` method
+ // https://tc39.es/ecma262/#sec-array.isarray
+ _export({ target: 'Array', stat: true }, {
+ isArray: isArray
});
var nativeGetOwnPropertyNames$2 = objectGetOwnPropertyNamesExternal.f;
var FAILS_ON_PRIMITIVES = fails(function () { return !Object.getOwnPropertyNames(1); });
// `Object.getOwnPropertyNames` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertynames
+ // https://tc39.es/ecma262/#sec-object.getownpropertynames
_export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, {
getOwnPropertyNames: nativeGetOwnPropertyNames$2
});
- // `Object.prototype.toString` method implementation
- // https://tc39.github.io/ecma262/#sec-object.prototype.tostring
- var objectToString = toStringTagSupport ? {}.toString : function toString() {
- return '[object ' + classof(this) + ']';
- };
-
- // `Object.prototype.toString` method
- // https://tc39.github.io/ecma262/#sec-object.prototype.tostring
- if (!toStringTagSupport) {
- redefine(Object.prototype, 'toString', objectToString, { unsafe: true });
- }
-
var nativePromiseConstructor = global_1.Promise;
- var ITERATOR$2 = wellKnownSymbol('iterator');
+ var ITERATOR$3 = wellKnownSymbol('iterator');
var ArrayPrototype$1 = Array.prototype;
// check on default Array iterator
var isArrayIteratorMethod = function (it) {
- return it !== undefined && (iterators.Array === it || ArrayPrototype$1[ITERATOR$2] === it);
+ return it !== undefined && (iterators.Array === it || ArrayPrototype$1[ITERATOR$3] === it);
};
- var ITERATOR$3 = wellKnownSymbol('iterator');
+ var ITERATOR$4 = wellKnownSymbol('iterator');
var getIteratorMethod = function (it) {
- if (it != undefined) return it[ITERATOR$3]
+ if (it != undefined) return it[ITERATOR$4]
|| it['@@iterator']
|| iterators[classof(it)];
};
} return new Result(false);
};
- var ITERATOR$4 = wellKnownSymbol('iterator');
+ var ITERATOR$5 = wellKnownSymbol('iterator');
var SAFE_CLOSING = false;
try {
SAFE_CLOSING = true;
}
};
- iteratorWithReturn[ITERATOR$4] = function () {
+ iteratorWithReturn[ITERATOR$5] = function () {
return this;
};
- // eslint-disable-next-line no-throw-literal
+ // eslint-disable-next-line no-throw-literal -- required for testing
Array.from(iteratorWithReturn, function () { throw 2; });
} catch (error) { /* empty */ }
var ITERATION_SUPPORT = false;
try {
var object = {};
- object[ITERATOR$4] = function () {
+ object[ITERATOR$5] = function () {
return {
next: function () {
return { done: ITERATION_SUPPORT = true };
var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent);
- var engineIsNode = classofRaw(global_1.process) == 'process';
-
var location$1 = global_1.location;
var set$2 = global_1.setImmediate;
var clear = global_1.clearImmediate;
var defer, channel, port;
var run = function (id) {
- // eslint-disable-next-line no-prototype-builtins
+ // eslint-disable-next-line no-prototype-builtins -- safe
if (queue.hasOwnProperty(id)) {
var fn = queue[id];
delete queue[id];
var i = 1;
while (arguments.length > i) args.push(arguments[i++]);
queue[++counter] = function () {
- // eslint-disable-next-line no-new-func
+ // eslint-disable-next-line no-new-func -- spec requirement
(typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args);
};
defer(counter);
clear: clear
};
+ var engineIsWebosWebkit = /web0s(?!.*chrome)/i.test(engineUserAgent);
+
var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
var macrotask = task.set;
+
var MutationObserver = global_1.MutationObserver || global_1.WebKitMutationObserver;
var document$2 = global_1.document;
var process$3 = global_1.process;
};
// browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339
- if (!engineIsIos && !engineIsNode && MutationObserver && document$2) {
+ // also except WebOS Webkit https://github.com/zloirock/core-js/issues/898
+ if (!engineIsIos && !engineIsNode && !engineIsWebosWebkit && MutationObserver && document$2) {
toggle = true;
node = document$2.createTextNode('');
new MutationObserver(flush).observe(node, { characterData: true });
- var SPECIES$5 = wellKnownSymbol('species');
+ var SPECIES$4 = wellKnownSymbol('species');
var PROMISE = 'Promise';
- var getInternalState$3 = internalState.get;
- var setInternalState$3 = internalState.set;
+ var getInternalState$4 = internalState.get;
+ var setInternalState$4 = internalState.set;
var getInternalPromiseState = internalState.getterFor(PROMISE);
var PromiseConstructor = nativePromiseConstructor;
var TypeError$1 = global_1.TypeError;
exec(function () { /* empty */ }, function () { /* empty */ });
};
var constructor = promise.constructor = {};
- constructor[SPECIES$5] = FakePromise;
+ constructor[SPECIES$4] = FakePromise;
return !(promise.then(function () { /* empty */ }) instanceof FakePromise);
});
anInstance(this, PromiseConstructor, PROMISE);
aFunction$1(executor);
Internal.call(this);
- var state = getInternalState$3(this);
+ var state = getInternalState$4(this);
try {
executor(bind(internalResolve, state), bind(internalReject, state));
} catch (error) {
internalReject(state, error);
}
};
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
Internal = function Promise(executor) {
- setInternalState$3(this, {
+ setInternalState$4(this, {
type: PROMISE,
done: false,
notified: false,
};
Internal.prototype = redefineAll(PromiseConstructor.prototype, {
// `Promise.prototype.then` method
- // https://tc39.github.io/ecma262/#sec-promise.prototype.then
+ // https://tc39.es/ecma262/#sec-promise.prototype.then
then: function then(onFulfilled, onRejected) {
var state = getInternalPromiseState(this);
var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor));
return reaction.promise;
},
// `Promise.prototype.catch` method
- // https://tc39.github.io/ecma262/#sec-promise.prototype.catch
+ // https://tc39.es/ecma262/#sec-promise.prototype.catch
'catch': function (onRejected) {
return this.then(undefined, onRejected);
}
});
OwnPromiseCapability = function () {
var promise = new Internal();
- var state = getInternalState$3(promise);
+ var state = getInternalState$4(promise);
this.promise = promise;
this.resolve = bind(internalResolve, state);
this.reject = bind(internalReject, state);
// wrap fetch result
if (typeof $fetch == 'function') _export({ global: true, enumerable: true, forced: true }, {
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
fetch: function fetch(input /* , init */) {
return promiseResolve(PromiseConstructor, $fetch.apply(global_1, arguments));
}
// statics
_export({ target: PROMISE, stat: true, forced: FORCED }, {
// `Promise.reject` method
- // https://tc39.github.io/ecma262/#sec-promise.reject
+ // https://tc39.es/ecma262/#sec-promise.reject
reject: function reject(r) {
var capability = newPromiseCapability$1(this);
capability.reject.call(undefined, r);
_export({ target: PROMISE, stat: true, forced: FORCED }, {
// `Promise.resolve` method
- // https://tc39.github.io/ecma262/#sec-promise.resolve
+ // https://tc39.es/ecma262/#sec-promise.resolve
resolve: function resolve(x) {
return promiseResolve( this, x);
}
_export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, {
// `Promise.all` method
- // https://tc39.github.io/ecma262/#sec-promise.all
+ // https://tc39.es/ecma262/#sec-promise.all
all: function all(iterable) {
var C = this;
var capability = newPromiseCapability$1(C);
return capability.promise;
},
// `Promise.race` method
- // https://tc39.github.io/ecma262/#sec-promise.race
+ // https://tc39.es/ecma262/#sec-promise.race
race: function race(iterable) {
var C = this;
var capability = newPromiseCapability$1(C);
}
});
- // `RegExp.prototype.flags` getter implementation
- // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags
- var regexpFlags = function () {
- var that = anObject(this);
- var result = '';
- if (that.global) result += 'g';
- if (that.ignoreCase) result += 'i';
- if (that.multiline) result += 'm';
- if (that.dotAll) result += 's';
- if (that.unicode) result += 'u';
- if (that.sticky) result += 'y';
- return result;
- };
+ /* eslint-disable no-new -- required for testing */
- // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
- // so we use an intermediate function.
- function RE(s, f) {
- return RegExp(s, f);
- }
- var UNSUPPORTED_Y = fails(function () {
- // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
- var re = RE('a', 'y');
- re.lastIndex = 2;
- return re.exec('abcd') != null;
- });
- var BROKEN_CARET = fails(function () {
- // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
- var re = RE('^r', 'gy');
- re.lastIndex = 2;
- return re.exec('str') != null;
+ var NATIVE_ARRAY_BUFFER_VIEWS$2 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
+
+ var ArrayBuffer$3 = global_1.ArrayBuffer;
+ var Int8Array$2 = global_1.Int8Array;
+
+ var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$2 || !fails(function () {
+ Int8Array$2(1);
+ }) || !fails(function () {
+ new Int8Array$2(-1);
+ }) || !checkCorrectnessOfIteration(function (iterable) {
+ new Int8Array$2();
+ new Int8Array$2(null);
+ new Int8Array$2(1.5);
+ new Int8Array$2(iterable);
+ }, true) || fails(function () {
+ // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
+ return new Int8Array$2(new ArrayBuffer$3(2), 1, undefined).length !== 1;
});
- var regexpStickyHelpers = {
- UNSUPPORTED_Y: UNSUPPORTED_Y,
- BROKEN_CARET: BROKEN_CARET
+ var toPositiveInteger = function (it) {
+ var result = toInteger(it);
+ if (result < 0) throw RangeError("The argument can't be less than 0");
+ return result;
};
- var nativeExec = RegExp.prototype.exec;
- // This always refers to the native implementation, because the
- // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
- // which loads this file before patching the method.
- var nativeReplace = String.prototype.replace;
-
- var patchedExec = nativeExec;
+ var toOffset = function (it, BYTES) {
+ var offset = toPositiveInteger(it);
+ if (offset % BYTES) throw RangeError('Wrong offset');
+ return offset;
+ };
- var UPDATES_LAST_INDEX_WRONG = (function () {
- var re1 = /a/;
- var re2 = /b*/g;
- nativeExec.call(re1, 'a');
- nativeExec.call(re2, 'a');
- return re1.lastIndex !== 0 || re2.lastIndex !== 0;
- })();
+ var aTypedArrayConstructor$1 = arrayBufferViewCore.aTypedArrayConstructor;
- var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET;
+ var typedArrayFrom = function from(source /* , mapfn, thisArg */) {
+ var O = toObject(source);
+ var argumentsLength = arguments.length;
+ var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
+ var mapping = mapfn !== undefined;
+ var iteratorMethod = getIteratorMethod(O);
+ var i, length, result, step, iterator, next;
+ if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {
+ iterator = iteratorMethod.call(O);
+ next = iterator.next;
+ O = [];
+ while (!(step = next.call(iterator)).done) {
+ O.push(step.value);
+ }
+ }
+ if (mapping && argumentsLength > 2) {
+ mapfn = functionBindContext(mapfn, arguments[2], 2);
+ }
+ length = toLength(O.length);
+ result = new (aTypedArrayConstructor$1(this))(length);
+ for (i = 0; length > i; i++) {
+ result[i] = mapping ? mapfn(O[i], i) : O[i];
+ }
+ return result;
+ };
- // nonparticipating capturing group, copied from es5-shim's String#split patch.
- var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
+ // makes subclassing work correct for wrapped built-ins
+ var inheritIfRequired = function ($this, dummy, Wrapper) {
+ var NewTarget, NewTargetPrototype;
+ if (
+ // it can work only with native `setPrototypeOf`
+ objectSetPrototypeOf &&
+ // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
+ typeof (NewTarget = dummy.constructor) == 'function' &&
+ NewTarget !== Wrapper &&
+ isObject(NewTargetPrototype = NewTarget.prototype) &&
+ NewTargetPrototype !== Wrapper.prototype
+ ) objectSetPrototypeOf($this, NewTargetPrototype);
+ return $this;
+ };
- var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1;
+ var typedArrayConstructor = createCommonjsModule(function (module) {
- if (PATCH) {
- patchedExec = function exec(str) {
- var re = this;
- var lastIndex, reCopy, match, i;
- var sticky = UNSUPPORTED_Y$1 && re.sticky;
- var flags = regexpFlags.call(re);
- var source = re.source;
- var charsAdded = 0;
- var strCopy = str;
- if (sticky) {
- flags = flags.replace('y', '');
- if (flags.indexOf('g') === -1) {
- flags += 'g';
- }
- strCopy = String(str).slice(re.lastIndex);
- // Support anchored sticky behavior.
- if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) {
- source = '(?: ' + source + ')';
- strCopy = ' ' + strCopy;
- charsAdded++;
- }
- // ^(? + rx + ) is needed, in combination with some str slicing, to
- // simulate the 'y' flag.
- reCopy = new RegExp('^(?:' + source + ')', flags);
- }
- if (NPCG_INCLUDED) {
- reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
- }
- if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
- match = nativeExec.call(sticky ? reCopy : re, strCopy);
- if (sticky) {
- if (match) {
- match.input = match.input.slice(charsAdded);
- match[0] = match[0].slice(charsAdded);
- match.index = re.lastIndex;
- re.lastIndex += match[0].length;
- } else re.lastIndex = 0;
- } else if (UPDATES_LAST_INDEX_WRONG && match) {
- re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
- }
- if (NPCG_INCLUDED && match && match.length > 1) {
- // Fix browsers whose `exec` methods don't consistently return `undefined`
- // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
- nativeReplace.call(match[0], reCopy, function () {
- for (i = 1; i < arguments.length - 2; i++) {
- if (arguments[i] === undefined) match[i] = undefined;
- }
- });
- }
- return match;
- };
- }
- var regexpExec = patchedExec;
- _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, {
- exec: regexpExec
- });
- var TO_STRING$1 = 'toString';
- var RegExpPrototype = RegExp.prototype;
- var nativeToString = RegExpPrototype[TO_STRING$1];
- var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
- // FF44- RegExp#toString has a wrong name
- var INCORRECT_NAME = nativeToString.name != TO_STRING$1;
- // `RegExp.prototype.toString` method
- // https://tc39.github.io/ecma262/#sec-regexp.prototype.tostring
- if (NOT_GENERIC || INCORRECT_NAME) {
- redefine(RegExp.prototype, TO_STRING$1, function toString() {
- var R = anObject(this);
- var p = String(R.source);
- var rf = R.flags;
- var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? regexpFlags.call(R) : rf);
- return '/' + p + '/' + f;
- }, { unsafe: true });
- }
- // `String.prototype.{ codePointAt, at }` methods implementation
- var createMethod$2 = function (CONVERT_TO_STRING) {
- return function ($this, pos) {
- var S = String(requireObjectCoercible($this));
- var position = toInteger(pos);
- var size = S.length;
- var first, second;
- if (position < 0 || position >= size) return CONVERT_TO_STRING ? '' : undefined;
- first = S.charCodeAt(position);
- return first < 0xD800 || first > 0xDBFF || position + 1 === size
- || (second = S.charCodeAt(position + 1)) < 0xDC00 || second > 0xDFFF
- ? CONVERT_TO_STRING ? S.charAt(position) : first
- : CONVERT_TO_STRING ? S.slice(position, position + 2) : (first - 0xD800 << 10) + (second - 0xDC00) + 0x10000;
- };
- };
- var stringMultibyte = {
- // `String.prototype.codePointAt` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.codepointat
- codeAt: createMethod$2(false),
- // `String.prototype.at` method
- // https://github.com/mathiasbynens/String.prototype.at
- charAt: createMethod$2(true)
- };
- var charAt = stringMultibyte.charAt;
- var STRING_ITERATOR = 'String Iterator';
- var setInternalState$4 = internalState.set;
- var getInternalState$4 = internalState.getterFor(STRING_ITERATOR);
+ var getOwnPropertyNames = objectGetOwnPropertyNames.f;
- // `String.prototype[@@iterator]` method
- // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator
- defineIterator(String, 'String', function (iterated) {
- setInternalState$4(this, {
- type: STRING_ITERATOR,
- string: String(iterated),
- index: 0
- });
- // `%StringIteratorPrototype%.next` method
- // https://tc39.github.io/ecma262/#sec-%stringiteratorprototype%.next
- }, function next() {
- var state = getInternalState$4(this);
- var string = state.string;
- var index = state.index;
- var point;
- if (index >= string.length) return { value: undefined, done: true };
- point = charAt(string, index);
- state.index += point.length;
- return { value: point, done: false };
- });
+ var forEach = arrayIteration.forEach;
- // TODO: Remove from `core-js@4` since it's moved to entry points
+ var getInternalState = internalState.get;
+ var setInternalState = internalState.set;
+ var nativeDefineProperty = objectDefineProperty.f;
+ var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
+ var round = Math.round;
+ var RangeError = global_1.RangeError;
+ var ArrayBuffer = arrayBuffer.ArrayBuffer;
+ var DataView = arrayBuffer.DataView;
+ var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
+ var TYPED_ARRAY_TAG = arrayBufferViewCore.TYPED_ARRAY_TAG;
+ var TypedArray = arrayBufferViewCore.TypedArray;
+ var TypedArrayPrototype = arrayBufferViewCore.TypedArrayPrototype;
+ var aTypedArrayConstructor = arrayBufferViewCore.aTypedArrayConstructor;
+ var isTypedArray = arrayBufferViewCore.isTypedArray;
+ var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
+ var WRONG_LENGTH = 'Wrong length';
+ var fromList = function (C, list) {
+ var index = 0;
+ var length = list.length;
+ var result = new (aTypedArrayConstructor(C))(length);
+ while (length > index) result[index] = list[index++];
+ return result;
+ };
- var SPECIES$6 = wellKnownSymbol('species');
+ var addGetter = function (it, key) {
+ nativeDefineProperty(it, key, { get: function () {
+ return getInternalState(this)[key];
+ } });
+ };
- var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
- // #replace needs built-in support for named groups.
- // #match works fine because it just return the exec results, even if it has
- // a "grops" property.
- var re = /./;
- re.exec = function () {
- var result = [];
- result.groups = { a: '7' };
- return result;
- };
- return ''.replace(re, '$<a>') !== '7';
- });
+ var isArrayBuffer = function (it) {
+ var klass;
+ return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
+ };
- // IE <= 11 replaces $0 with the whole match, as if it was $&
- // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
- var REPLACE_KEEPS_$0 = (function () {
- return 'a'.replace(/./, '$0') === '$0';
- })();
+ var isTypedArrayIndex = function (target, key) {
+ return isTypedArray(target)
+ && typeof key != 'symbol'
+ && key in target
+ && String(+key) == String(key);
+ };
- var REPLACE = wellKnownSymbol('replace');
- // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
- var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
- if (/./[REPLACE]) {
- return /./[REPLACE]('a', '$0') === '';
- }
- return false;
- })();
+ var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
+ return isTypedArrayIndex(target, key = toPrimitive(key, true))
+ ? createPropertyDescriptor(2, target[key])
+ : nativeGetOwnPropertyDescriptor(target, key);
+ };
- // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
- // Weex JS has frozen built-in prototypes, so use try / catch wrapper
- var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
- var re = /(?:)/;
- var originalExec = re.exec;
- re.exec = function () { return originalExec.apply(this, arguments); };
- var result = 'ab'.split(re);
- return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
- });
+ var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
+ if (isTypedArrayIndex(target, key = toPrimitive(key, true))
+ && isObject(descriptor)
+ && has(descriptor, 'value')
+ && !has(descriptor, 'get')
+ && !has(descriptor, 'set')
+ // TODO: add validation descriptor w/o calling accessors
+ && !descriptor.configurable
+ && (!has(descriptor, 'writable') || descriptor.writable)
+ && (!has(descriptor, 'enumerable') || descriptor.enumerable)
+ ) {
+ target[key] = descriptor.value;
+ return target;
+ } return nativeDefineProperty(target, key, descriptor);
+ };
- var fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) {
- var SYMBOL = wellKnownSymbol(KEY);
+ if (descriptors) {
+ if (!NATIVE_ARRAY_BUFFER_VIEWS) {
+ objectGetOwnPropertyDescriptor.f = wrappedGetOwnPropertyDescriptor;
+ objectDefineProperty.f = wrappedDefineProperty;
+ addGetter(TypedArrayPrototype, 'buffer');
+ addGetter(TypedArrayPrototype, 'byteOffset');
+ addGetter(TypedArrayPrototype, 'byteLength');
+ addGetter(TypedArrayPrototype, 'length');
+ }
- var DELEGATES_TO_SYMBOL = !fails(function () {
- // String methods call symbol-named RegEp methods
- var O = {};
- O[SYMBOL] = function () { return 7; };
- return ''[KEY](O) != 7;
+ _export({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
+ getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
+ defineProperty: wrappedDefineProperty
});
- var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
- // Symbol-named RegExp methods call .exec
- var execCalled = false;
- var re = /a/;
-
- if (KEY === 'split') {
- // We can't use real regex here since it causes deoptimization
- // and serious performance degradation in V8
- // https://github.com/zloirock/core-js/issues/306
- re = {};
- // RegExp[@@split] doesn't call the regex's exec method, but first creates
- // a new one. We need to return the patched regex when creating the new one.
- re.constructor = {};
- re.constructor[SPECIES$6] = function () { return re; };
- re.flags = '';
- re[SYMBOL] = /./[SYMBOL];
- }
+ module.exports = function (TYPE, wrapper, CLAMPED) {
+ var BYTES = TYPE.match(/\d+$/)[0] / 8;
+ var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
+ var GETTER = 'get' + TYPE;
+ var SETTER = 'set' + TYPE;
+ var NativeTypedArrayConstructor = global_1[CONSTRUCTOR_NAME];
+ var TypedArrayConstructor = NativeTypedArrayConstructor;
+ var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
+ var exported = {};
- re.exec = function () { execCalled = true; return null; };
+ var getter = function (that, index) {
+ var data = getInternalState(that);
+ return data.view[GETTER](index * BYTES + data.byteOffset, true);
+ };
- re[SYMBOL]('');
- return !execCalled;
- });
+ var setter = function (that, index, value) {
+ var data = getInternalState(that);
+ if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
+ data.view[SETTER](index * BYTES + data.byteOffset, value, true);
+ };
- if (
- !DELEGATES_TO_SYMBOL ||
- !DELEGATES_TO_EXEC ||
- (KEY === 'replace' && !(
- REPLACE_SUPPORTS_NAMED_GROUPS &&
- REPLACE_KEEPS_$0 &&
- !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
- )) ||
- (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
- ) {
- var nativeRegExpMethod = /./[SYMBOL];
- var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
- if (regexp.exec === regexpExec) {
- if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
- // The native String method already delegates to @@method (this
- // polyfilled function), leasing to infinite recursion.
- // We avoid it by directly calling the native @@method method.
- return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
- }
- return { done: true, value: nativeMethod.call(str, regexp, arg2) };
- }
- return { done: false };
- }, {
- REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,
- REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
- });
- var stringMethod = methods[0];
- var regexMethod = methods[1];
-
- redefine(String.prototype, KEY, stringMethod);
- redefine(RegExp.prototype, SYMBOL, length == 2
- // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
- // 21.2.5.11 RegExp.prototype[@@split](string, limit)
- ? function (string, arg) { return regexMethod.call(string, this, arg); }
- // 21.2.5.6 RegExp.prototype[@@match](string)
- // 21.2.5.9 RegExp.prototype[@@search](string)
- : function (string) { return regexMethod.call(string, this); }
- );
- }
+ var addElement = function (that, index) {
+ nativeDefineProperty(that, index, {
+ get: function () {
+ return getter(this, index);
+ },
+ set: function (value) {
+ return setter(this, index, value);
+ },
+ enumerable: true
+ });
+ };
- if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);
- };
+ if (!NATIVE_ARRAY_BUFFER_VIEWS) {
+ TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
+ anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);
+ var index = 0;
+ var byteOffset = 0;
+ var buffer, byteLength, length;
+ if (!isObject(data)) {
+ length = toIndex(data);
+ byteLength = length * BYTES;
+ buffer = new ArrayBuffer(byteLength);
+ } else if (isArrayBuffer(data)) {
+ buffer = data;
+ byteOffset = toOffset(offset, BYTES);
+ var $len = data.byteLength;
+ if ($length === undefined) {
+ if ($len % BYTES) throw RangeError(WRONG_LENGTH);
+ byteLength = $len - byteOffset;
+ if (byteLength < 0) throw RangeError(WRONG_LENGTH);
+ } else {
+ byteLength = toLength($length) * BYTES;
+ if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);
+ }
+ length = byteLength / BYTES;
+ } else if (isTypedArray(data)) {
+ return fromList(TypedArrayConstructor, data);
+ } else {
+ return typedArrayFrom.call(TypedArrayConstructor, data);
+ }
+ setInternalState(that, {
+ buffer: buffer,
+ byteOffset: byteOffset,
+ byteLength: byteLength,
+ length: length,
+ view: new DataView(buffer)
+ });
+ while (index < length) addElement(that, index++);
+ });
- var charAt$1 = stringMultibyte.charAt;
+ if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray);
+ TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = objectCreate(TypedArrayPrototype);
+ } else if (typedArrayConstructorsRequireWrappers) {
+ TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
+ anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);
+ return inheritIfRequired(function () {
+ if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));
+ if (isArrayBuffer(data)) return $length !== undefined
+ ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)
+ : typedArrayOffset !== undefined
+ ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))
+ : new NativeTypedArrayConstructor(data);
+ if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
+ return typedArrayFrom.call(TypedArrayConstructor, data);
+ }(), dummy, TypedArrayConstructor);
+ });
- // `AdvanceStringIndex` abstract operation
- // https://tc39.github.io/ecma262/#sec-advancestringindex
- var advanceStringIndex = function (S, index, unicode) {
- return index + (unicode ? charAt$1(S, index).length : 1);
- };
+ if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray);
+ forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {
+ if (!(key in TypedArrayConstructor)) {
+ createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
+ }
+ });
+ TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
+ }
- // `RegExpExec` abstract operation
- // https://tc39.github.io/ecma262/#sec-regexpexec
- var regexpExecAbstract = function (R, S) {
- var exec = R.exec;
- if (typeof exec === 'function') {
- var result = exec.call(R, S);
- if (typeof result !== 'object') {
- throw TypeError('RegExp exec method returned something other than an Object or null');
+ if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
+ createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
}
- return result;
- }
- if (classofRaw(R) !== 'RegExp') {
- throw TypeError('RegExp#exec called on incompatible receiver');
- }
+ if (TYPED_ARRAY_TAG) {
+ createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
+ }
- return regexpExec.call(R, S);
- };
+ exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
- var max$2 = Math.max;
- var min$2 = Math.min;
- var floor$2 = Math.floor;
- var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g;
- var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g;
+ _export({
+ global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS
+ }, exported);
- var maybeToString = function (it) {
- return it === undefined ? it : String(it);
- };
+ if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
+ createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
+ }
- // @@replace logic
- fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {
- var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;
- var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;
- var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
+ if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
+ createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
+ }
- return [
- // `String.prototype.replace` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.replace
- function replace(searchValue, replaceValue) {
- var O = requireObjectCoercible(this);
- var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
- return replacer !== undefined
- ? replacer.call(searchValue, O, replaceValue)
- : nativeReplace.call(String(O), searchValue, replaceValue);
- },
- // `RegExp.prototype[@@replace]` method
- // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@replace
- function (regexp, replaceValue) {
- if (
- (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||
- (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)
- ) {
- var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
- if (res.done) return res.value;
- }
+ setSpecies(CONSTRUCTOR_NAME);
+ };
+ } else module.exports = function () { /* empty */ };
+ });
- var rx = anObject(regexp);
- var S = String(this);
+ // `Uint8Array` constructor
+ // https://tc39.es/ecma262/#sec-typedarray-objects
+ typedArrayConstructor('Uint8', function (init) {
+ return function Uint8Array(data, byteOffset, length) {
+ return init(this, data, byteOffset, length);
+ };
+ });
- var functionalReplace = typeof replaceValue === 'function';
- if (!functionalReplace) replaceValue = String(replaceValue);
+ var min$2 = Math.min;
- var global = rx.global;
- if (global) {
- var fullUnicode = rx.unicode;
- rx.lastIndex = 0;
- }
- var results = [];
- while (true) {
- var result = regexpExecAbstract(rx, S);
- if (result === null) break;
+ // `Array.prototype.copyWithin` method implementation
+ // https://tc39.es/ecma262/#sec-array.prototype.copywithin
+ var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
+ var O = toObject(this);
+ var len = toLength(O.length);
+ var to = toAbsoluteIndex(target, len);
+ var from = toAbsoluteIndex(start, len);
+ var end = arguments.length > 2 ? arguments[2] : undefined;
+ var count = min$2((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
+ var inc = 1;
+ if (from < to && to < from + count) {
+ inc = -1;
+ from += count - 1;
+ to += count - 1;
+ }
+ while (count-- > 0) {
+ if (from in O) O[to] = O[from];
+ else delete O[to];
+ to += inc;
+ from += inc;
+ } return O;
+ };
- results.push(result);
- if (!global) break;
+ var aTypedArray$1 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$1 = arrayBufferViewCore.exportTypedArrayMethod;
- var matchStr = String(result[0]);
- if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
- }
+ // `%TypedArray%.prototype.copyWithin` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.copywithin
+ exportTypedArrayMethod$1('copyWithin', function copyWithin(target, start /* , end */) {
+ return arrayCopyWithin.call(aTypedArray$1(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
+ });
- var accumulatedResult = '';
- var nextSourcePosition = 0;
- for (var i = 0; i < results.length; i++) {
- result = results[i];
+ var $every = arrayIteration.every;
- var matched = String(result[0]);
- var position = max$2(min$2(toInteger(result.index), S.length), 0);
- var captures = [];
- // NOTE: This is equivalent to
- // captures = result.slice(1).map(maybeToString)
- // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
- // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
- // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
- for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
- var namedCaptures = result.groups;
- if (functionalReplace) {
- var replacerArgs = [matched].concat(captures, position, S);
- if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
- var replacement = String(replaceValue.apply(undefined, replacerArgs));
- } else {
- replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
- }
- if (position >= nextSourcePosition) {
- accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
- nextSourcePosition = position + matched.length;
- }
- }
- return accumulatedResult + S.slice(nextSourcePosition);
- }
- ];
+ var aTypedArray$2 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$2 = arrayBufferViewCore.exportTypedArrayMethod;
- // https://tc39.github.io/ecma262/#sec-getsubstitution
- function getSubstitution(matched, str, position, captures, namedCaptures, replacement) {
- var tailPos = position + matched.length;
- var m = captures.length;
- var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
- if (namedCaptures !== undefined) {
- namedCaptures = toObject(namedCaptures);
- symbols = SUBSTITUTION_SYMBOLS;
- }
- return nativeReplace.call(replacement, symbols, function (match, ch) {
- var capture;
- switch (ch.charAt(0)) {
- case '$': return '$';
- case '&': return matched;
- case '`': return str.slice(0, position);
- case "'": return str.slice(tailPos);
- case '<':
- capture = namedCaptures[ch.slice(1, -1)];
- break;
- default: // \d\d?
- var n = +ch;
- if (n === 0) return match;
- if (n > m) {
- var f = floor$2(n / 10);
- if (f === 0) return match;
- if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
- return match;
- }
- capture = captures[n - 1];
- }
- return capture === undefined ? '' : capture;
- });
- }
+ // `%TypedArray%.prototype.every` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.every
+ exportTypedArrayMethod$2('every', function every(callbackfn /* , thisArg */) {
+ return $every(aTypedArray$2(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
});
- var MATCH = wellKnownSymbol('match');
+ var aTypedArray$3 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$3 = arrayBufferViewCore.exportTypedArrayMethod;
- // `IsRegExp` abstract operation
- // https://tc39.github.io/ecma262/#sec-isregexp
- var isRegexp = function (it) {
- var isRegExp;
- return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp');
- };
+ // `%TypedArray%.prototype.fill` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.fill
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
+ exportTypedArrayMethod$3('fill', function fill(value /* , start, end */) {
+ return arrayFill.apply(aTypedArray$3(this), arguments);
+ });
- var arrayPush = [].push;
- var min$3 = Math.min;
- var MAX_UINT32 = 0xFFFFFFFF;
+ var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
- // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError
- var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });
- // @@split logic
- fixRegexpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {
- var internalSplit;
- if (
- 'abbc'.split(/(b)*/)[1] == 'c' ||
- 'test'.split(/(?:)/, -1).length != 4 ||
- 'ab'.split(/(?:ab)*/).length != 2 ||
- '.'.split(/(.?)(.?)/).length != 4 ||
- '.'.split(/()()/).length > 1 ||
- ''.split(/.?/).length
- ) {
- // based on es5-shim implementation, need to rework it
- internalSplit = function (separator, limit) {
- var string = String(requireObjectCoercible(this));
- var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
- if (lim === 0) return [];
- if (separator === undefined) return [string];
- // If `separator` is not a regex, use native split
- if (!isRegexp(separator)) {
- return nativeSplit.call(string, separator, lim);
- }
- var output = [];
- var flags = (separator.ignoreCase ? 'i' : '') +
- (separator.multiline ? 'm' : '') +
- (separator.unicode ? 'u' : '') +
- (separator.sticky ? 'y' : '');
- var lastLastIndex = 0;
- // Make `global` and avoid `lastIndex` issues by working with a copy
- var separatorCopy = new RegExp(separator.source, flags + 'g');
- var match, lastIndex, lastLength;
- while (match = regexpExec.call(separatorCopy, string)) {
- lastIndex = separatorCopy.lastIndex;
- if (lastIndex > lastLastIndex) {
- output.push(string.slice(lastLastIndex, match.index));
- if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
- lastLength = match[0].length;
- lastLastIndex = lastIndex;
- if (output.length >= lim) break;
- }
- if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
- }
- if (lastLastIndex === string.length) {
- if (lastLength || !separatorCopy.test('')) output.push('');
- } else output.push(string.slice(lastLastIndex));
- return output.length > lim ? output.slice(0, lim) : output;
- };
- // Chakra, V8
- } else if ('0'.split(undefined, 0).length) {
- internalSplit = function (separator, limit) {
- return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
- };
- } else internalSplit = nativeSplit;
+ var typedArrayFromSpeciesAndList = function (instance, list) {
+ var C = speciesConstructor(instance, instance.constructor);
+ var index = 0;
+ var length = list.length;
+ var result = new (aTypedArrayConstructor$2(C))(length);
+ while (length > index) result[index] = list[index++];
+ return result;
+ };
- return [
- // `String.prototype.split` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.split
- function split(separator, limit) {
- var O = requireObjectCoercible(this);
- var splitter = separator == undefined ? undefined : separator[SPLIT];
- return splitter !== undefined
- ? splitter.call(separator, O, limit)
- : internalSplit.call(String(O), separator, limit);
- },
- // `RegExp.prototype[@@split]` method
- // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@split
- //
- // NOTE: This cannot be properly polyfilled in engines that don't support
- // the 'y' flag.
- function (regexp, limit) {
- var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);
- if (res.done) return res.value;
+ var $filter = arrayIteration.filter;
- var rx = anObject(regexp);
- var S = String(this);
- var C = speciesConstructor(rx, RegExp);
- var unicodeMatching = rx.unicode;
- var flags = (rx.ignoreCase ? 'i' : '') +
- (rx.multiline ? 'm' : '') +
- (rx.unicode ? 'u' : '') +
- (SUPPORTS_Y ? 'y' : 'g');
+ var aTypedArray$4 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$4 = arrayBufferViewCore.exportTypedArrayMethod;
- // ^(? + rx + ) is needed, in combination with some S slicing, to
- // simulate the 'y' flag.
- var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
- var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
- if (lim === 0) return [];
- if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : [];
- var p = 0;
- var q = 0;
- var A = [];
- while (q < S.length) {
- splitter.lastIndex = SUPPORTS_Y ? q : 0;
- var z = regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q));
- var e;
- if (
- z === null ||
- (e = min$3(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p
- ) {
- q = advanceStringIndex(S, q, unicodeMatching);
- } else {
- A.push(S.slice(p, q));
- if (A.length === lim) return A;
- for (var i = 1; i <= z.length - 1; i++) {
- A.push(z[i]);
- if (A.length === lim) return A;
- }
- q = p = e;
- }
- }
- A.push(S.slice(p));
- return A;
- }
- ];
- }, !SUPPORTS_Y);
+ // `%TypedArray%.prototype.filter` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.filter
+ exportTypedArrayMethod$4('filter', function filter(callbackfn /* , thisArg */) {
+ var list = $filter(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
+ return typedArrayFromSpeciesAndList(this, list);
+ });
- // a string of all valid unicode whitespaces
- // eslint-disable-next-line max-len
- var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+ var $find = arrayIteration.find;
- var whitespace = '[' + whitespaces + ']';
- var ltrim = RegExp('^' + whitespace + whitespace + '*');
- var rtrim = RegExp(whitespace + whitespace + '*$');
+ var aTypedArray$5 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$5 = arrayBufferViewCore.exportTypedArrayMethod;
- // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
- var createMethod$3 = function (TYPE) {
- return function ($this) {
- var string = String(requireObjectCoercible($this));
- if (TYPE & 1) string = string.replace(ltrim, '');
- if (TYPE & 2) string = string.replace(rtrim, '');
- return string;
- };
- };
+ // `%TypedArray%.prototype.find` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.find
+ exportTypedArrayMethod$5('find', function find(predicate /* , thisArg */) {
+ return $find(aTypedArray$5(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+ });
- var stringTrim = {
- // `String.prototype.{ trimLeft, trimStart }` methods
- // https://tc39.github.io/ecma262/#sec-string.prototype.trimstart
- start: createMethod$3(1),
- // `String.prototype.{ trimRight, trimEnd }` methods
- // https://tc39.github.io/ecma262/#sec-string.prototype.trimend
- end: createMethod$3(2),
- // `String.prototype.trim` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.trim
- trim: createMethod$3(3)
- };
+ var $findIndex = arrayIteration.findIndex;
- var non = '\u200B\u0085\u180E';
+ var aTypedArray$6 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod;
- // check that a method works with the correct list
- // of whitespaces and has a correct name
- var stringTrimForced = function (METHOD_NAME) {
- return fails(function () {
- return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
- });
- };
+ // `%TypedArray%.prototype.findIndex` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.findindex
+ exportTypedArrayMethod$6('findIndex', function findIndex(predicate /* , thisArg */) {
+ return $findIndex(aTypedArray$6(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
+ });
- var $trim = stringTrim.trim;
+ var $forEach$2 = arrayIteration.forEach;
+ var aTypedArray$7 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$7 = arrayBufferViewCore.exportTypedArrayMethod;
- // `String.prototype.trim` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.trim
- _export({ target: 'String', proto: true, forced: stringTrimForced('trim') }, {
- trim: function trim() {
- return $trim(this);
- }
+ // `%TypedArray%.prototype.forEach` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.foreach
+ exportTypedArrayMethod$7('forEach', function forEach(callbackfn /* , thisArg */) {
+ $forEach$2(aTypedArray$7(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
});
- /* eslint-disable no-new */
+ var $includes = arrayIncludes.includes;
+ var aTypedArray$8 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$8 = arrayBufferViewCore.exportTypedArrayMethod;
+ // `%TypedArray%.prototype.includes` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.includes
+ exportTypedArrayMethod$8('includes', function includes(searchElement /* , fromIndex */) {
+ return $includes(aTypedArray$8(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
+ });
- var NATIVE_ARRAY_BUFFER_VIEWS$2 = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
+ var $indexOf$1 = arrayIncludes.indexOf;
- var ArrayBuffer$3 = global_1.ArrayBuffer;
- var Int8Array$2 = global_1.Int8Array;
+ var aTypedArray$9 = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$9 = arrayBufferViewCore.exportTypedArrayMethod;
- var typedArrayConstructorsRequireWrappers = !NATIVE_ARRAY_BUFFER_VIEWS$2 || !fails(function () {
- Int8Array$2(1);
- }) || !fails(function () {
- new Int8Array$2(-1);
- }) || !checkCorrectnessOfIteration(function (iterable) {
- new Int8Array$2();
- new Int8Array$2(null);
- new Int8Array$2(1.5);
- new Int8Array$2(iterable);
- }, true) || fails(function () {
- // Safari (11+) bug - a reason why even Safari 13 should load a typed array polyfill
- return new Int8Array$2(new ArrayBuffer$3(2), 1, undefined).length !== 1;
+ // `%TypedArray%.prototype.indexOf` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.indexof
+ exportTypedArrayMethod$9('indexOf', function indexOf(searchElement /* , fromIndex */) {
+ return $indexOf$1(aTypedArray$9(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
});
- var toPositiveInteger = function (it) {
- var result = toInteger(it);
- if (result < 0) throw RangeError("The argument can't be less than 0");
- return result;
- };
+ var ITERATOR$6 = wellKnownSymbol('iterator');
+ var Uint8Array$1 = global_1.Uint8Array;
+ var arrayValues = es_array_iterator.values;
+ var arrayKeys = es_array_iterator.keys;
+ var arrayEntries = es_array_iterator.entries;
+ var aTypedArray$a = arrayBufferViewCore.aTypedArray;
+ var exportTypedArrayMethod$a = arrayBufferViewCore.exportTypedArrayMethod;
+ var nativeTypedArrayIterator = Uint8Array$1 && Uint8Array$1.prototype[ITERATOR$6];
- var toOffset = function (it, BYTES) {
- var offset = toPositiveInteger(it);
- if (offset % BYTES) throw RangeError('Wrong offset');
- return offset;
- };
+ var CORRECT_ITER_NAME = !!nativeTypedArrayIterator
+ && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);
- var aTypedArrayConstructor$1 = arrayBufferViewCore.aTypedArrayConstructor;
-
- var typedArrayFrom = function from(source /* , mapfn, thisArg */) {
- var O = toObject(source);
- var argumentsLength = arguments.length;
- var mapfn = argumentsLength > 1 ? arguments[1] : undefined;
- var mapping = mapfn !== undefined;
- var iteratorMethod = getIteratorMethod(O);
- var i, length, result, step, iterator, next;
- if (iteratorMethod != undefined && !isArrayIteratorMethod(iteratorMethod)) {
- iterator = iteratorMethod.call(O);
- next = iterator.next;
- O = [];
- while (!(step = next.call(iterator)).done) {
- O.push(step.value);
- }
- }
- if (mapping && argumentsLength > 2) {
- mapfn = functionBindContext(mapfn, arguments[2], 2);
- }
- length = toLength(O.length);
- result = new (aTypedArrayConstructor$1(this))(length);
- for (i = 0; length > i; i++) {
- result[i] = mapping ? mapfn(O[i], i) : O[i];
- }
- return result;
- };
-
- // makes subclassing work correct for wrapped built-ins
- var inheritIfRequired = function ($this, dummy, Wrapper) {
- var NewTarget, NewTargetPrototype;
- if (
- // it can work only with native `setPrototypeOf`
- objectSetPrototypeOf &&
- // we haven't completely correct pre-ES6 way for getting `new.target`, so use this
- typeof (NewTarget = dummy.constructor) == 'function' &&
- NewTarget !== Wrapper &&
- isObject(NewTargetPrototype = NewTarget.prototype) &&
- NewTargetPrototype !== Wrapper.prototype
- ) objectSetPrototypeOf($this, NewTargetPrototype);
- return $this;
- };
-
- var typedArrayConstructor = createCommonjsModule(function (module) {
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- var getOwnPropertyNames = objectGetOwnPropertyNames.f;
-
- var forEach = arrayIteration.forEach;
-
-
-
-
-
-
- var getInternalState = internalState.get;
- var setInternalState = internalState.set;
- var nativeDefineProperty = objectDefineProperty.f;
- var nativeGetOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f;
- var round = Math.round;
- var RangeError = global_1.RangeError;
- var ArrayBuffer = arrayBuffer.ArrayBuffer;
- var DataView = arrayBuffer.DataView;
- var NATIVE_ARRAY_BUFFER_VIEWS = arrayBufferViewCore.NATIVE_ARRAY_BUFFER_VIEWS;
- var TYPED_ARRAY_TAG = arrayBufferViewCore.TYPED_ARRAY_TAG;
- var TypedArray = arrayBufferViewCore.TypedArray;
- var TypedArrayPrototype = arrayBufferViewCore.TypedArrayPrototype;
- var aTypedArrayConstructor = arrayBufferViewCore.aTypedArrayConstructor;
- var isTypedArray = arrayBufferViewCore.isTypedArray;
- var BYTES_PER_ELEMENT = 'BYTES_PER_ELEMENT';
- var WRONG_LENGTH = 'Wrong length';
-
- var fromList = function (C, list) {
- var index = 0;
- var length = list.length;
- var result = new (aTypedArrayConstructor(C))(length);
- while (length > index) result[index] = list[index++];
- return result;
- };
-
- var addGetter = function (it, key) {
- nativeDefineProperty(it, key, { get: function () {
- return getInternalState(this)[key];
- } });
- };
-
- var isArrayBuffer = function (it) {
- var klass;
- return it instanceof ArrayBuffer || (klass = classof(it)) == 'ArrayBuffer' || klass == 'SharedArrayBuffer';
- };
-
- var isTypedArrayIndex = function (target, key) {
- return isTypedArray(target)
- && typeof key != 'symbol'
- && key in target
- && String(+key) == String(key);
- };
-
- var wrappedGetOwnPropertyDescriptor = function getOwnPropertyDescriptor(target, key) {
- return isTypedArrayIndex(target, key = toPrimitive(key, true))
- ? createPropertyDescriptor(2, target[key])
- : nativeGetOwnPropertyDescriptor(target, key);
- };
-
- var wrappedDefineProperty = function defineProperty(target, key, descriptor) {
- if (isTypedArrayIndex(target, key = toPrimitive(key, true))
- && isObject(descriptor)
- && has(descriptor, 'value')
- && !has(descriptor, 'get')
- && !has(descriptor, 'set')
- // TODO: add validation descriptor w/o calling accessors
- && !descriptor.configurable
- && (!has(descriptor, 'writable') || descriptor.writable)
- && (!has(descriptor, 'enumerable') || descriptor.enumerable)
- ) {
- target[key] = descriptor.value;
- return target;
- } return nativeDefineProperty(target, key, descriptor);
- };
-
- if (descriptors) {
- if (!NATIVE_ARRAY_BUFFER_VIEWS) {
- objectGetOwnPropertyDescriptor.f = wrappedGetOwnPropertyDescriptor;
- objectDefineProperty.f = wrappedDefineProperty;
- addGetter(TypedArrayPrototype, 'buffer');
- addGetter(TypedArrayPrototype, 'byteOffset');
- addGetter(TypedArrayPrototype, 'byteLength');
- addGetter(TypedArrayPrototype, 'length');
- }
-
- _export({ target: 'Object', stat: true, forced: !NATIVE_ARRAY_BUFFER_VIEWS }, {
- getOwnPropertyDescriptor: wrappedGetOwnPropertyDescriptor,
- defineProperty: wrappedDefineProperty
- });
-
- module.exports = function (TYPE, wrapper, CLAMPED) {
- var BYTES = TYPE.match(/\d+$/)[0] / 8;
- var CONSTRUCTOR_NAME = TYPE + (CLAMPED ? 'Clamped' : '') + 'Array';
- var GETTER = 'get' + TYPE;
- var SETTER = 'set' + TYPE;
- var NativeTypedArrayConstructor = global_1[CONSTRUCTOR_NAME];
- var TypedArrayConstructor = NativeTypedArrayConstructor;
- var TypedArrayConstructorPrototype = TypedArrayConstructor && TypedArrayConstructor.prototype;
- var exported = {};
-
- var getter = function (that, index) {
- var data = getInternalState(that);
- return data.view[GETTER](index * BYTES + data.byteOffset, true);
- };
-
- var setter = function (that, index, value) {
- var data = getInternalState(that);
- if (CLAMPED) value = (value = round(value)) < 0 ? 0 : value > 0xFF ? 0xFF : value & 0xFF;
- data.view[SETTER](index * BYTES + data.byteOffset, value, true);
- };
-
- var addElement = function (that, index) {
- nativeDefineProperty(that, index, {
- get: function () {
- return getter(this, index);
- },
- set: function (value) {
- return setter(this, index, value);
- },
- enumerable: true
- });
- };
-
- if (!NATIVE_ARRAY_BUFFER_VIEWS) {
- TypedArrayConstructor = wrapper(function (that, data, offset, $length) {
- anInstance(that, TypedArrayConstructor, CONSTRUCTOR_NAME);
- var index = 0;
- var byteOffset = 0;
- var buffer, byteLength, length;
- if (!isObject(data)) {
- length = toIndex(data);
- byteLength = length * BYTES;
- buffer = new ArrayBuffer(byteLength);
- } else if (isArrayBuffer(data)) {
- buffer = data;
- byteOffset = toOffset(offset, BYTES);
- var $len = data.byteLength;
- if ($length === undefined) {
- if ($len % BYTES) throw RangeError(WRONG_LENGTH);
- byteLength = $len - byteOffset;
- if (byteLength < 0) throw RangeError(WRONG_LENGTH);
- } else {
- byteLength = toLength($length) * BYTES;
- if (byteLength + byteOffset > $len) throw RangeError(WRONG_LENGTH);
- }
- length = byteLength / BYTES;
- } else if (isTypedArray(data)) {
- return fromList(TypedArrayConstructor, data);
- } else {
- return typedArrayFrom.call(TypedArrayConstructor, data);
- }
- setInternalState(that, {
- buffer: buffer,
- byteOffset: byteOffset,
- byteLength: byteLength,
- length: length,
- view: new DataView(buffer)
- });
- while (index < length) addElement(that, index++);
- });
-
- if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray);
- TypedArrayConstructorPrototype = TypedArrayConstructor.prototype = objectCreate(TypedArrayPrototype);
- } else if (typedArrayConstructorsRequireWrappers) {
- TypedArrayConstructor = wrapper(function (dummy, data, typedArrayOffset, $length) {
- anInstance(dummy, TypedArrayConstructor, CONSTRUCTOR_NAME);
- return inheritIfRequired(function () {
- if (!isObject(data)) return new NativeTypedArrayConstructor(toIndex(data));
- if (isArrayBuffer(data)) return $length !== undefined
- ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES), $length)
- : typedArrayOffset !== undefined
- ? new NativeTypedArrayConstructor(data, toOffset(typedArrayOffset, BYTES))
- : new NativeTypedArrayConstructor(data);
- if (isTypedArray(data)) return fromList(TypedArrayConstructor, data);
- return typedArrayFrom.call(TypedArrayConstructor, data);
- }(), dummy, TypedArrayConstructor);
- });
-
- if (objectSetPrototypeOf) objectSetPrototypeOf(TypedArrayConstructor, TypedArray);
- forEach(getOwnPropertyNames(NativeTypedArrayConstructor), function (key) {
- if (!(key in TypedArrayConstructor)) {
- createNonEnumerableProperty(TypedArrayConstructor, key, NativeTypedArrayConstructor[key]);
- }
- });
- TypedArrayConstructor.prototype = TypedArrayConstructorPrototype;
- }
-
- if (TypedArrayConstructorPrototype.constructor !== TypedArrayConstructor) {
- createNonEnumerableProperty(TypedArrayConstructorPrototype, 'constructor', TypedArrayConstructor);
- }
-
- if (TYPED_ARRAY_TAG) {
- createNonEnumerableProperty(TypedArrayConstructorPrototype, TYPED_ARRAY_TAG, CONSTRUCTOR_NAME);
- }
-
- exported[CONSTRUCTOR_NAME] = TypedArrayConstructor;
-
- _export({
- global: true, forced: TypedArrayConstructor != NativeTypedArrayConstructor, sham: !NATIVE_ARRAY_BUFFER_VIEWS
- }, exported);
-
- if (!(BYTES_PER_ELEMENT in TypedArrayConstructor)) {
- createNonEnumerableProperty(TypedArrayConstructor, BYTES_PER_ELEMENT, BYTES);
- }
-
- if (!(BYTES_PER_ELEMENT in TypedArrayConstructorPrototype)) {
- createNonEnumerableProperty(TypedArrayConstructorPrototype, BYTES_PER_ELEMENT, BYTES);
- }
-
- setSpecies(CONSTRUCTOR_NAME);
- };
- } else module.exports = function () { /* empty */ };
- });
-
- // `Uint8Array` constructor
- // https://tc39.github.io/ecma262/#sec-typedarray-objects
- typedArrayConstructor('Uint8', function (init) {
- return function Uint8Array(data, byteOffset, length) {
- return init(this, data, byteOffset, length);
- };
- });
-
- var min$4 = Math.min;
-
- // `Array.prototype.copyWithin` method implementation
- // https://tc39.github.io/ecma262/#sec-array.prototype.copywithin
- var arrayCopyWithin = [].copyWithin || function copyWithin(target /* = 0 */, start /* = 0, end = @length */) {
- var O = toObject(this);
- var len = toLength(O.length);
- var to = toAbsoluteIndex(target, len);
- var from = toAbsoluteIndex(start, len);
- var end = arguments.length > 2 ? arguments[2] : undefined;
- var count = min$4((end === undefined ? len : toAbsoluteIndex(end, len)) - from, len - to);
- var inc = 1;
- if (from < to && to < from + count) {
- inc = -1;
- from += count - 1;
- to += count - 1;
- }
- while (count-- > 0) {
- if (from in O) O[to] = O[from];
- else delete O[to];
- to += inc;
- from += inc;
- } return O;
- };
-
- var aTypedArray$1 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$1 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.copyWithin` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.copywithin
- exportTypedArrayMethod$1('copyWithin', function copyWithin(target, start /* , end */) {
- return arrayCopyWithin.call(aTypedArray$1(this), target, start, arguments.length > 2 ? arguments[2] : undefined);
- });
-
- var $every = arrayIteration.every;
-
- var aTypedArray$2 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$2 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.every` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.every
- exportTypedArrayMethod$2('every', function every(callbackfn /* , thisArg */) {
- return $every(aTypedArray$2(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var aTypedArray$3 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$3 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.fill` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.fill
- // eslint-disable-next-line no-unused-vars
- exportTypedArrayMethod$3('fill', function fill(value /* , start, end */) {
- return arrayFill.apply(aTypedArray$3(this), arguments);
- });
-
- var $filter = arrayIteration.filter;
-
-
- var aTypedArray$4 = arrayBufferViewCore.aTypedArray;
- var aTypedArrayConstructor$2 = arrayBufferViewCore.aTypedArrayConstructor;
- var exportTypedArrayMethod$4 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.filter` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.filter
- exportTypedArrayMethod$4('filter', function filter(callbackfn /* , thisArg */) {
- var list = $filter(aTypedArray$4(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- var C = speciesConstructor(this, this.constructor);
- var index = 0;
- var length = list.length;
- var result = new (aTypedArrayConstructor$2(C))(length);
- while (length > index) result[index] = list[index++];
- return result;
- });
-
- var $find = arrayIteration.find;
-
- var aTypedArray$5 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$5 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.find` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.find
- exportTypedArrayMethod$5('find', function find(predicate /* , thisArg */) {
- return $find(aTypedArray$5(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var $findIndex = arrayIteration.findIndex;
-
- var aTypedArray$6 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$6 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.findIndex` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.findindex
- exportTypedArrayMethod$6('findIndex', function findIndex(predicate /* , thisArg */) {
- return $findIndex(aTypedArray$6(this), predicate, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var $forEach$2 = arrayIteration.forEach;
-
- var aTypedArray$7 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$7 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.forEach` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.foreach
- exportTypedArrayMethod$7('forEach', function forEach(callbackfn /* , thisArg */) {
- $forEach$2(aTypedArray$7(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var $includes = arrayIncludes.includes;
-
- var aTypedArray$8 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$8 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.includes
- exportTypedArrayMethod$8('includes', function includes(searchElement /* , fromIndex */) {
- return $includes(aTypedArray$8(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var $indexOf$1 = arrayIncludes.indexOf;
-
- var aTypedArray$9 = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$9 = arrayBufferViewCore.exportTypedArrayMethod;
-
- // `%TypedArray%.prototype.indexOf` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.indexof
- exportTypedArrayMethod$9('indexOf', function indexOf(searchElement /* , fromIndex */) {
- return $indexOf$1(aTypedArray$9(this), searchElement, arguments.length > 1 ? arguments[1] : undefined);
- });
-
- var ITERATOR$5 = wellKnownSymbol('iterator');
- var Uint8Array$1 = global_1.Uint8Array;
- var arrayValues = es_array_iterator.values;
- var arrayKeys = es_array_iterator.keys;
- var arrayEntries = es_array_iterator.entries;
- var aTypedArray$a = arrayBufferViewCore.aTypedArray;
- var exportTypedArrayMethod$a = arrayBufferViewCore.exportTypedArrayMethod;
- var nativeTypedArrayIterator = Uint8Array$1 && Uint8Array$1.prototype[ITERATOR$5];
-
- var CORRECT_ITER_NAME = !!nativeTypedArrayIterator
- && (nativeTypedArrayIterator.name == 'values' || nativeTypedArrayIterator.name == undefined);
-
- var typedArrayValues = function values() {
- return arrayValues.call(aTypedArray$a(this));
- };
+ var typedArrayValues = function values() {
+ return arrayValues.call(aTypedArray$a(this));
+ };
// `%TypedArray%.prototype.entries` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.entries
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.entries
exportTypedArrayMethod$a('entries', function entries() {
return arrayEntries.call(aTypedArray$a(this));
});
// `%TypedArray%.prototype.keys` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.keys
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.keys
exportTypedArrayMethod$a('keys', function keys() {
return arrayKeys.call(aTypedArray$a(this));
});
// `%TypedArray%.prototype.values` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.values
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.values
exportTypedArrayMethod$a('values', typedArrayValues, !CORRECT_ITER_NAME);
// `%TypedArray%.prototype[@@iterator]` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype-@@iterator
- exportTypedArrayMethod$a(ITERATOR$5, typedArrayValues, !CORRECT_ITER_NAME);
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype-@@iterator
+ exportTypedArrayMethod$a(ITERATOR$6, typedArrayValues, !CORRECT_ITER_NAME);
var aTypedArray$b = arrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod$b = arrayBufferViewCore.exportTypedArrayMethod;
var $join = [].join;
// `%TypedArray%.prototype.join` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.join
- // eslint-disable-next-line no-unused-vars
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.join
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
exportTypedArrayMethod$b('join', function join(separator) {
return $join.apply(aTypedArray$b(this), arguments);
});
- var min$5 = Math.min;
+ var min$3 = Math.min;
var nativeLastIndexOf = [].lastIndexOf;
var NEGATIVE_ZERO$1 = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0;
- var STRICT_METHOD$3 = arrayMethodIsStrict('lastIndexOf');
- // For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method
- var USES_TO_LENGTH$4 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
- var FORCED$1 = NEGATIVE_ZERO$1 || !STRICT_METHOD$3 || !USES_TO_LENGTH$4;
+ var STRICT_METHOD$2 = arrayMethodIsStrict('lastIndexOf');
+ var FORCED$1 = NEGATIVE_ZERO$1 || !STRICT_METHOD$2;
// `Array.prototype.lastIndexOf` method implementation
- // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof
+ // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
var arrayLastIndexOf = FORCED$1 ? function lastIndexOf(searchElement /* , fromIndex = @[*-1] */) {
// convert -0 to +0
if (NEGATIVE_ZERO$1) return nativeLastIndexOf.apply(this, arguments) || 0;
var O = toIndexedObject(this);
var length = toLength(O.length);
var index = length - 1;
- if (arguments.length > 1) index = min$5(index, toInteger(arguments[1]));
+ if (arguments.length > 1) index = min$3(index, toInteger(arguments[1]));
if (index < 0) index = length + index;
for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0;
return -1;
var exportTypedArrayMethod$c = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.lastIndexOf` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.lastindexof
- // eslint-disable-next-line no-unused-vars
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.lastindexof
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
exportTypedArrayMethod$c('lastIndexOf', function lastIndexOf(searchElement /* , fromIndex */) {
return arrayLastIndexOf.apply(aTypedArray$c(this), arguments);
});
var exportTypedArrayMethod$d = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.map` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.map
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.map
exportTypedArrayMethod$d('map', function map(mapfn /* , thisArg */) {
return $map$1(aTypedArray$d(this), mapfn, arguments.length > 1 ? arguments[1] : undefined, function (O, length) {
return new (aTypedArrayConstructor$3(speciesConstructor(O, O.constructor)))(length);
});
// `Array.prototype.{ reduce, reduceRight }` methods implementation
- var createMethod$4 = function (IS_RIGHT) {
+ var createMethod$3 = function (IS_RIGHT) {
return function (that, callbackfn, argumentsLength, memo) {
aFunction$1(callbackfn);
var O = toObject(that);
var arrayReduce = {
// `Array.prototype.reduce` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.reduce
- left: createMethod$4(false),
+ // https://tc39.es/ecma262/#sec-array.prototype.reduce
+ left: createMethod$3(false),
// `Array.prototype.reduceRight` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright
- right: createMethod$4(true)
+ // https://tc39.es/ecma262/#sec-array.prototype.reduceright
+ right: createMethod$3(true)
};
var $reduce = arrayReduce.left;
var exportTypedArrayMethod$e = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.reduce` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduce
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduce
exportTypedArrayMethod$e('reduce', function reduce(callbackfn /* , initialValue */) {
return $reduce(aTypedArray$e(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
});
var exportTypedArrayMethod$f = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.reduceRicht` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reduceright
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reduceright
exportTypedArrayMethod$f('reduceRight', function reduceRight(callbackfn /* , initialValue */) {
return $reduceRight(aTypedArray$f(this), callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
});
var aTypedArray$g = arrayBufferViewCore.aTypedArray;
var exportTypedArrayMethod$g = arrayBufferViewCore.exportTypedArrayMethod;
- var floor$3 = Math.floor;
+ var floor$2 = Math.floor;
// `%TypedArray%.prototype.reverse` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.reverse
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.reverse
exportTypedArrayMethod$g('reverse', function reverse() {
var that = this;
var length = aTypedArray$g(that).length;
- var middle = floor$3(length / 2);
+ var middle = floor$2(length / 2);
var index = 0;
var value;
while (index < middle) {
var exportTypedArrayMethod$h = arrayBufferViewCore.exportTypedArrayMethod;
var FORCED$2 = fails(function () {
- // eslint-disable-next-line no-undef
+ /* global Int8Array -- safe */
new Int8Array(1).set({});
});
// `%TypedArray%.prototype.set` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.set
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.set
exportTypedArrayMethod$h('set', function set(arrayLike /* , offset */) {
aTypedArray$h(this);
var offset = toOffset(arguments.length > 1 ? arguments[1] : undefined, 1);
var $slice = [].slice;
var FORCED$3 = fails(function () {
- // eslint-disable-next-line no-undef
+ /* global Int8Array -- safe */
new Int8Array(1).slice();
});
// `%TypedArray%.prototype.slice` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.slice
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.slice
exportTypedArrayMethod$i('slice', function slice(start, end) {
var list = $slice.call(aTypedArray$i(this), start, end);
var C = speciesConstructor(this, this.constructor);
var exportTypedArrayMethod$j = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.some` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.some
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.some
exportTypedArrayMethod$j('some', function some(callbackfn /* , thisArg */) {
return $some(aTypedArray$j(this), callbackfn, arguments.length > 1 ? arguments[1] : undefined);
});
var $sort = [].sort;
// `%TypedArray%.prototype.sort` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.sort
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.sort
exportTypedArrayMethod$k('sort', function sort(comparefn) {
return $sort.call(aTypedArray$k(this), comparefn);
});
var exportTypedArrayMethod$l = arrayBufferViewCore.exportTypedArrayMethod;
// `%TypedArray%.prototype.subarray` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.subarray
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.subarray
exportTypedArrayMethod$l('subarray', function subarray(begin, end) {
var O = aTypedArray$l(this);
var length = O.length;
});
// `%TypedArray%.prototype.toLocaleString` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tolocalestring
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tolocalestring
exportTypedArrayMethod$m('toLocaleString', function toLocaleString() {
return $toLocaleString.apply(TO_LOCALE_STRING_BUG ? $slice$1.call(aTypedArray$m(this)) : aTypedArray$m(this), arguments);
}, FORCED$4);
var IS_NOT_ARRAY_METHOD = Uint8ArrayPrototype.toString != arrayToString;
// `%TypedArray%.prototype.toString` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.prototype.tostring
+ // https://tc39.es/ecma262/#sec-%typedarray%.prototype.tostring
exportTypedArrayMethod$n('toString', arrayToString, IS_NOT_ARRAY_METHOD);
- // iterable DOM collections
- // flag - `iterable` interface - 'entries', 'keys', 'values', 'forEach' methods
- var domIterables = {
- CSSRuleList: 0,
- CSSStyleDeclaration: 0,
- CSSValueList: 0,
- ClientRectList: 0,
- DOMRectList: 0,
- DOMStringList: 0,
- DOMTokenList: 1,
- DataTransferItemList: 0,
- FileList: 0,
- HTMLAllCollection: 0,
- HTMLCollection: 0,
- HTMLFormElement: 0,
- HTMLSelectElement: 0,
- MediaList: 0,
- MimeTypeArray: 0,
- NamedNodeMap: 0,
- NodeList: 1,
- PaintRequestList: 0,
- Plugin: 0,
- PluginArray: 0,
- SVGLengthList: 0,
- SVGNumberList: 0,
- SVGPathSegList: 0,
- SVGPointList: 0,
- SVGStringList: 0,
- SVGTransformList: 0,
- SourceBufferList: 0,
- StyleSheetList: 0,
- TextTrackCueList: 0,
- TextTrackList: 0,
- TouchList: 0
- };
+ var nativeJoin = [].join;
- for (var COLLECTION_NAME in domIterables) {
- var Collection = global_1[COLLECTION_NAME];
- var CollectionPrototype = Collection && Collection.prototype;
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype && CollectionPrototype.forEach !== arrayForEach) try {
- createNonEnumerableProperty(CollectionPrototype, 'forEach', arrayForEach);
- } catch (error) {
- CollectionPrototype.forEach = arrayForEach;
+ var ES3_STRINGS = indexedObject != Object;
+ var STRICT_METHOD$3 = arrayMethodIsStrict('join', ',');
+
+ // `Array.prototype.join` method
+ // https://tc39.es/ecma262/#sec-array.prototype.join
+ _export({ target: 'Array', proto: true, forced: ES3_STRINGS || !STRICT_METHOD$3 }, {
+ join: function join(separator) {
+ return nativeJoin.call(toIndexedObject(this), separator === undefined ? ',' : separator);
}
- }
+ });
- var ITERATOR$6 = wellKnownSymbol('iterator');
- var TO_STRING_TAG$4 = wellKnownSymbol('toStringTag');
- var ArrayValues = es_array_iterator.values;
+ var createProperty = function (object, key, value) {
+ var propertyKey = toPrimitive(key);
+ if (propertyKey in object) objectDefineProperty.f(object, propertyKey, createPropertyDescriptor(0, value));
+ else object[propertyKey] = value;
+ };
- for (var COLLECTION_NAME$1 in domIterables) {
- var Collection$1 = global_1[COLLECTION_NAME$1];
- var CollectionPrototype$1 = Collection$1 && Collection$1.prototype;
- if (CollectionPrototype$1) {
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype$1[ITERATOR$6] !== ArrayValues) try {
- createNonEnumerableProperty(CollectionPrototype$1, ITERATOR$6, ArrayValues);
- } catch (error) {
- CollectionPrototype$1[ITERATOR$6] = ArrayValues;
- }
- if (!CollectionPrototype$1[TO_STRING_TAG$4]) {
- createNonEnumerableProperty(CollectionPrototype$1, TO_STRING_TAG$4, COLLECTION_NAME$1);
- }
- if (domIterables[COLLECTION_NAME$1]) for (var METHOD_NAME in es_array_iterator) {
- // some Chrome versions have non-configurable methods on DOMTokenList
- if (CollectionPrototype$1[METHOD_NAME] !== es_array_iterator[METHOD_NAME]) try {
- createNonEnumerableProperty(CollectionPrototype$1, METHOD_NAME, es_array_iterator[METHOD_NAME]);
- } catch (error) {
- CollectionPrototype$1[METHOD_NAME] = es_array_iterator[METHOD_NAME];
+ var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('slice');
+
+ var SPECIES$5 = wellKnownSymbol('species');
+ var nativeSlice = [].slice;
+ var max$1 = Math.max;
+
+ // `Array.prototype.slice` method
+ // https://tc39.es/ecma262/#sec-array.prototype.slice
+ // fallback for not array-like ES3 strings and DOM objects
+ _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$1 }, {
+ slice: function slice(start, end) {
+ var O = toIndexedObject(this);
+ var length = toLength(O.length);
+ var k = toAbsoluteIndex(start, length);
+ var fin = toAbsoluteIndex(end === undefined ? length : end, length);
+ // inline `ArraySpeciesCreate` for usage native `Array#slice` where it's possible
+ var Constructor, result, n;
+ if (isArray(O)) {
+ Constructor = O.constructor;
+ // cross-realm fallback
+ if (typeof Constructor == 'function' && (Constructor === Array || isArray(Constructor.prototype))) {
+ Constructor = undefined;
+ } else if (isObject(Constructor)) {
+ Constructor = Constructor[SPECIES$5];
+ if (Constructor === null) Constructor = undefined;
+ }
+ if (Constructor === Array || Constructor === undefined) {
+ return nativeSlice.call(O, k, fin);
}
}
+ result = new (Constructor === undefined ? Array : Constructor)(max$1(fin - k, 0));
+ for (n = 0; k < fin; k++, n++) if (k in O) createProperty(result, n, O[k]);
+ result.length = n;
+ return result;
}
- }
+ });
- var slice = [].slice;
- var MSIE = /MSIE .\./.test(engineUserAgent); // <- dirty ie9- check
-
- var wrap$1 = function (scheduler) {
- return function (handler, timeout /* , ...arguments */) {
- var boundArgs = arguments.length > 2;
- var args = boundArgs ? slice.call(arguments, 2) : undefined;
- return scheduler(boundArgs ? function () {
- // eslint-disable-next-line no-new-func
- (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
- } : handler, timeout);
- };
- };
-
- // ie9- setTimeout & setInterval additional parameters fix
- // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
- _export({ global: true, bind: true, forced: MSIE }, {
- // `setTimeout` method
- // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
- setTimeout: wrap$1(global_1.setTimeout),
- // `setInterval` method
- // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
- setInterval: wrap$1(global_1.setInterval)
- });
-
- var ITERATOR$7 = wellKnownSymbol('iterator');
+ var ITERATOR$7 = wellKnownSymbol('iterator');
var nativeUrl = !fails(function () {
var url = new URL('b?a=1&b=2&c=3', 'http://a');
});
var nativeAssign = Object.assign;
- var defineProperty$7 = Object.defineProperty;
+ var defineProperty$5 = Object.defineProperty;
// `Object.assign` method
- // https://tc39.github.io/ecma262/#sec-object.assign
+ // https://tc39.es/ecma262/#sec-object.assign
var objectAssign = !nativeAssign || fails(function () {
// should have correct order of operations (Edge bug)
- if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$7({}, 'a', {
+ if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$5({}, 'a', {
enumerable: true,
get: function () {
- defineProperty$7(this, 'b', {
+ defineProperty$5(this, 'b', {
value: 3,
enumerable: false
});
// should work with symbols and should have deterministic property order (V8 bug)
var A = {};
var B = {};
- // eslint-disable-next-line no-undef
+ /* global Symbol -- required for testing */
var symbol = Symbol();
var alphabet = 'abcdefghijklmnopqrst';
A[symbol] = 7;
alphabet.split('').forEach(function (chr) { B[chr] = chr; });
return nativeAssign({}, A)[symbol] != 7 || objectKeys(nativeAssign({}, B)).join('') != alphabet;
- }) ? function assign(target, source) { // eslint-disable-line no-unused-vars
+ }) ? function assign(target, source) { // eslint-disable-line no-unused-vars -- required for `.length`
var T = toObject(target);
var argumentsLength = arguments.length;
var index = 1;
};
// `Array.from` method implementation
- // https://tc39.github.io/ecma262/#sec-array.from
+ // https://tc39.es/ecma262/#sec-array.from
var arrayFrom = function from(arrayLike /* , mapfn = undefined, thisArg = undefined */) {
var O = toObject(arrayLike);
var C = typeof this == 'function' ? this : Array;
var regexSeparators = /[.\u3002\uFF0E\uFF61]/g; // RFC 3490 separators
var OVERFLOW_ERROR = 'Overflow: input needs wider integers to process';
var baseMinusTMin = base - tMin;
- var floor$4 = Math.floor;
+ var floor$3 = Math.floor;
var stringFromCharCode = String.fromCharCode;
/**
*/
var adapt = function (delta, numPoints, firstTime) {
var k = 0;
- delta = firstTime ? floor$4(delta / damp) : delta >> 1;
- delta += floor$4(delta / numPoints);
+ delta = firstTime ? floor$3(delta / damp) : delta >> 1;
+ delta += floor$3(delta / numPoints);
for (; delta > baseMinusTMin * tMax >> 1; k += base) {
- delta = floor$4(delta / baseMinusTMin);
+ delta = floor$3(delta / baseMinusTMin);
}
- return floor$4(k + (baseMinusTMin + 1) * delta / (delta + skew));
+ return floor$3(k + (baseMinusTMin + 1) * delta / (delta + skew));
};
/**
* Converts a string of Unicode symbols (e.g. a domain name label) to a
* Punycode string of ASCII-only symbols.
*/
- // eslint-disable-next-line max-statements
+ // eslint-disable-next-line max-statements -- TODO
var encode = function (input) {
var output = [];
// Increase `delta` enough to advance the decoder's <n,i> state to <m,0>, but guard against overflow.
var handledCPCountPlusOne = handledCPCount + 1;
- if (m - n > floor$4((maxInt - delta) / handledCPCountPlusOne)) {
+ if (m - n > floor$3((maxInt - delta) / handledCPCountPlusOne)) {
throw RangeError(OVERFLOW_ERROR);
}
var qMinusT = q - t;
var baseMinusT = base - t;
output.push(stringFromCharCode(digitToBasic(t + qMinusT % baseMinusT)));
- q = floor$4(qMinusT / baseMinusT);
+ q = floor$3(qMinusT / baseMinusT);
}
output.push(stringFromCharCode(digitToBasic(q)));
var getInternalSearchParamsState = web_urlSearchParams.getState;
var setInternalState$6 = internalState.set;
var getInternalURLState = internalState.getterFor('URL');
- var floor$5 = Math.floor;
+ var floor$4 = Math.floor;
var pow$1 = Math.pow;
var INVALID_AUTHORITY = 'Invalid authority';
var OCT = /^[0-7]+$/;
var DEC = /^\d+$/;
var HEX = /^[\dA-Fa-f]+$/;
- // eslint-disable-next-line no-control-regex
- var FORBIDDEN_HOST_CODE_POINT = /[\u0000\u0009\u000A\u000D #%/:?@[\\]]/;
- // eslint-disable-next-line no-control-regex
- var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\u0009\u000A\u000D #/:?@[\\]]/;
- // eslint-disable-next-line no-control-regex
+ /* eslint-disable no-control-regex -- safe */
+ var FORBIDDEN_HOST_CODE_POINT = /[\u0000\t\u000A\u000D #%/:?@[\\]]/;
+ var FORBIDDEN_HOST_CODE_POINT_EXCLUDING_PERCENT = /[\u0000\t\u000A\u000D #/:?@[\\]]/;
var LEADING_AND_TRAILING_C0_CONTROL_OR_SPACE = /^[\u0000-\u001F ]+|[\u0000-\u001F ]+$/g;
- // eslint-disable-next-line no-control-regex
- var TAB_AND_NEW_LINE = /[\u0009\u000A\u000D]/g;
+ var TAB_AND_NEW_LINE = /[\t\u000A\u000D]/g;
+ /* eslint-enable no-control-regex -- safe */
var EOF;
var parseHost = function (url, input) {
return ipv4;
};
- // eslint-disable-next-line max-statements
+ // eslint-disable-next-line max-statements -- TODO
var parseIPv6 = function (input) {
var address = [0, 0, 0, 0, 0, 0, 0, 0];
var pieceIndex = 0;
result = [];
for (index = 0; index < 4; index++) {
result.unshift(host % 256);
- host = floor$5(host / 256);
+ host = floor$4(host / 256);
} return result.join('.');
// ipv6
} else if (typeof host == 'object') {
var QUERY = {};
var FRAGMENT = {};
- // eslint-disable-next-line max-statements
+ // eslint-disable-next-line max-statements -- TODO
var parseURL = function (url, input, stateOverride, base) {
var state = stateOverride || SCHEME_START;
var pointer = 0;
var nativeRevokeObjectURL = NativeURL.revokeObjectURL;
// `URL.createObjectURL` method
// https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
if (nativeCreateObjectURL) redefine(URLConstructor, 'createObjectURL', function createObjectURL(blob) {
return nativeCreateObjectURL.apply(NativeURL, arguments);
});
// `URL.revokeObjectURL` method
// https://developer.mozilla.org/en-US/docs/Web/API/URL/revokeObjectURL
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
if (nativeRevokeObjectURL) redefine(URLConstructor, 'revokeObjectURL', function revokeObjectURL(url) {
return nativeRevokeObjectURL.apply(NativeURL, arguments);
});
URL: URLConstructor
});
- function _typeof(obj) {
- "@babel/helpers - typeof";
-
- if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") {
- _typeof = function (obj) {
- return typeof obj;
- };
- } else {
- _typeof = function (obj) {
- return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj;
- };
- }
+ // `RegExp.prototype.flags` getter implementation
+ // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
+ var regexpFlags = function () {
+ var that = anObject(this);
+ var result = '';
+ if (that.global) result += 'g';
+ if (that.ignoreCase) result += 'i';
+ if (that.multiline) result += 'm';
+ if (that.dotAll) result += 's';
+ if (that.unicode) result += 'u';
+ if (that.sticky) result += 'y';
+ return result;
+ };
- return _typeof(obj);
- }
+ var TO_STRING$1 = 'toString';
+ var RegExpPrototype = RegExp.prototype;
+ var nativeToString = RegExpPrototype[TO_STRING$1];
- function _classCallCheck(instance, Constructor) {
- if (!(instance instanceof Constructor)) {
- throw new TypeError("Cannot call a class as a function");
- }
- }
+ var NOT_GENERIC = fails(function () { return nativeToString.call({ source: 'a', flags: 'b' }) != '/a/b'; });
+ // FF44- RegExp#toString has a wrong name
+ var INCORRECT_NAME = nativeToString.name != TO_STRING$1;
- function _defineProperties(target, props) {
- for (var i = 0; i < props.length; i++) {
- var descriptor = props[i];
- descriptor.enumerable = descriptor.enumerable || false;
- descriptor.configurable = true;
- if ("value" in descriptor) descriptor.writable = true;
- Object.defineProperty(target, descriptor.key, descriptor);
- }
+ // `RegExp.prototype.toString` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype.tostring
+ if (NOT_GENERIC || INCORRECT_NAME) {
+ redefine(RegExp.prototype, TO_STRING$1, function toString() {
+ var R = anObject(this);
+ var p = String(R.source);
+ var rf = R.flags;
+ var f = String(rf === undefined && R instanceof RegExp && !('flags' in RegExpPrototype) ? regexpFlags.call(R) : rf);
+ return '/' + p + '/' + f;
+ }, { unsafe: true });
}
- function _createClass(Constructor, protoProps, staticProps) {
- if (protoProps) _defineProperties(Constructor.prototype, protoProps);
- if (staticProps) _defineProperties(Constructor, staticProps);
- return Constructor;
+ // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError,
+ // so we use an intermediate function.
+ function RE(s, f) {
+ return RegExp(s, f);
}
- function _defineProperty(obj, key, value) {
- if (key in obj) {
- Object.defineProperty(obj, key, {
- value: value,
- enumerable: true,
- configurable: true,
- writable: true
- });
- } else {
- obj[key] = value;
- }
+ var UNSUPPORTED_Y = fails(function () {
+ // babel-minify transpiles RegExp('a', 'y') -> /a/y and it causes SyntaxError
+ var re = RE('a', 'y');
+ re.lastIndex = 2;
+ return re.exec('abcd') != null;
+ });
- return obj;
- }
+ var BROKEN_CARET = fails(function () {
+ // https://bugzilla.mozilla.org/show_bug.cgi?id=773687
+ var re = RE('^r', 'gy');
+ re.lastIndex = 2;
+ return re.exec('str') != null;
+ });
- function _slicedToArray(arr, i) {
- return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest();
- }
+ var regexpStickyHelpers = {
+ UNSUPPORTED_Y: UNSUPPORTED_Y,
+ BROKEN_CARET: BROKEN_CARET
+ };
- function _toConsumableArray(arr) {
- return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread();
- }
+ var nativeExec = RegExp.prototype.exec;
+ // This always refers to the native implementation, because the
+ // String#replace polyfill uses ./fix-regexp-well-known-symbol-logic.js,
+ // which loads this file before patching the method.
+ var nativeReplace = String.prototype.replace;
- function _arrayWithoutHoles(arr) {
- if (Array.isArray(arr)) return _arrayLikeToArray(arr);
- }
+ var patchedExec = nativeExec;
- function _arrayWithHoles(arr) {
- if (Array.isArray(arr)) return arr;
- }
+ var UPDATES_LAST_INDEX_WRONG = (function () {
+ var re1 = /a/;
+ var re2 = /b*/g;
+ nativeExec.call(re1, 'a');
+ nativeExec.call(re2, 'a');
+ return re1.lastIndex !== 0 || re2.lastIndex !== 0;
+ })();
- function _iterableToArray(iter) {
- if (typeof Symbol !== "undefined" && Symbol.iterator in Object(iter)) return Array.from(iter);
- }
+ var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET;
- function _iterableToArrayLimit(arr, i) {
- if (typeof Symbol === "undefined" || !(Symbol.iterator in Object(arr))) return;
- var _arr = [];
- var _n = true;
- var _d = false;
- var _e = undefined;
+ // nonparticipating capturing group, copied from es5-shim's String#split patch.
+ // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing
+ var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined;
- try {
- for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {
- _arr.push(_s.value);
+ var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$1;
- if (i && _arr.length === i) break;
- }
- } catch (err) {
- _d = true;
- _e = err;
- } finally {
- try {
- if (!_n && _i["return"] != null) _i["return"]();
- } finally {
- if (_d) throw _e;
- }
- }
+ if (PATCH) {
+ patchedExec = function exec(str) {
+ var re = this;
+ var lastIndex, reCopy, match, i;
+ var sticky = UNSUPPORTED_Y$1 && re.sticky;
+ var flags = regexpFlags.call(re);
+ var source = re.source;
+ var charsAdded = 0;
+ var strCopy = str;
- return _arr;
- }
+ if (sticky) {
+ flags = flags.replace('y', '');
+ if (flags.indexOf('g') === -1) {
+ flags += 'g';
+ }
- function _unsupportedIterableToArray(o, minLen) {
- if (!o) return;
- if (typeof o === "string") return _arrayLikeToArray(o, minLen);
- var n = Object.prototype.toString.call(o).slice(8, -1);
- if (n === "Object" && o.constructor) n = o.constructor.name;
- if (n === "Map" || n === "Set") return Array.from(o);
- if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);
- }
+ strCopy = String(str).slice(re.lastIndex);
+ // Support anchored sticky behavior.
+ if (re.lastIndex > 0 && (!re.multiline || re.multiline && str[re.lastIndex - 1] !== '\n')) {
+ source = '(?: ' + source + ')';
+ strCopy = ' ' + strCopy;
+ charsAdded++;
+ }
+ // ^(? + rx + ) is needed, in combination with some str slicing, to
+ // simulate the 'y' flag.
+ reCopy = new RegExp('^(?:' + source + ')', flags);
+ }
- function _arrayLikeToArray(arr, len) {
- if (len == null || len > arr.length) len = arr.length;
+ if (NPCG_INCLUDED) {
+ reCopy = new RegExp('^' + source + '$(?!\\s)', flags);
+ }
+ if (UPDATES_LAST_INDEX_WRONG) lastIndex = re.lastIndex;
- for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];
+ match = nativeExec.call(sticky ? reCopy : re, strCopy);
- return arr2;
- }
+ if (sticky) {
+ if (match) {
+ match.input = match.input.slice(charsAdded);
+ match[0] = match[0].slice(charsAdded);
+ match.index = re.lastIndex;
+ re.lastIndex += match[0].length;
+ } else re.lastIndex = 0;
+ } else if (UPDATES_LAST_INDEX_WRONG && match) {
+ re.lastIndex = re.global ? match.index + match[0].length : lastIndex;
+ }
+ if (NPCG_INCLUDED && match && match.length > 1) {
+ // Fix browsers whose `exec` methods don't consistently return `undefined`
+ // for NPCG, like IE8. NOTE: This doesn' work for /(.?)?/
+ nativeReplace.call(match[0], reCopy, function () {
+ for (i = 1; i < arguments.length - 2; i++) {
+ if (arguments[i] === undefined) match[i] = undefined;
+ }
+ });
+ }
- function _nonIterableSpread() {
- throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
+ return match;
+ };
}
- function _nonIterableRest() {
- throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
+ var regexpExec = patchedExec;
- function _createForOfIteratorHelper(o, allowArrayLike) {
- var it;
+ // `RegExp.prototype.exec` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype.exec
+ _export({ target: 'RegExp', proto: true, forced: /./.exec !== regexpExec }, {
+ exec: regexpExec
+ });
- if (typeof Symbol === "undefined" || o[Symbol.iterator] == null) {
- if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === "number") {
- if (it) o = it;
- var i = 0;
+ // TODO: Remove from `core-js@4` since it's moved to entry points
- var F = function () {};
- return {
- s: F,
- n: function () {
- if (i >= o.length) return {
- done: true
- };
- return {
- done: false,
- value: o[i++]
- };
- },
- e: function (e) {
- throw e;
- },
- f: F
- };
- }
- throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
- }
- var normalCompletion = true,
- didErr = false,
- err;
- return {
- s: function () {
- it = o[Symbol.iterator]();
- },
- n: function () {
- var step = it.next();
- normalCompletion = step.done;
- return step;
- },
- e: function (e) {
- didErr = true;
- err = e;
- },
- f: function () {
- try {
- if (!normalCompletion && it.return != null) it.return();
- } finally {
- if (didErr) throw err;
- }
- }
- };
- }
- var global$1 = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global$1 !== 'undefined' && global$1;
- var support = {
- searchParams: 'URLSearchParams' in global$1,
- iterable: 'Symbol' in global$1 && 'iterator' in Symbol,
- blob: 'FileReader' in global$1 && 'Blob' in global$1 && function () {
- try {
- new Blob();
- return true;
- } catch (e) {
- return false;
- }
- }(),
- formData: 'FormData' in global$1,
- arrayBuffer: 'ArrayBuffer' in global$1
- };
- function isDataView(obj) {
- return obj && DataView.prototype.isPrototypeOf(obj);
- }
- if (support.arrayBuffer) {
- var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]'];
+ var SPECIES$6 = wellKnownSymbol('species');
- var isArrayBufferView = ArrayBuffer.isView || function (obj) {
- return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
+ var REPLACE_SUPPORTS_NAMED_GROUPS = !fails(function () {
+ // #replace needs built-in support for named groups.
+ // #match works fine because it just return the exec results, even if it has
+ // a "grops" property.
+ var re = /./;
+ re.exec = function () {
+ var result = [];
+ result.groups = { a: '7' };
+ return result;
};
- }
+ return ''.replace(re, '$<a>') !== '7';
+ });
- function normalizeName(name) {
- if (typeof name !== 'string') {
- name = String(name);
- }
+ // IE <= 11 replaces $0 with the whole match, as if it was $&
+ // https://stackoverflow.com/questions/6024666/getting-ie-to-replace-a-regex-with-the-literal-string-0
+ var REPLACE_KEEPS_$0 = (function () {
+ return 'a'.replace(/./, '$0') === '$0';
+ })();
- if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {
- throw new TypeError('Invalid character in header field name');
+ var REPLACE = wellKnownSymbol('replace');
+ // Safari <= 13.0.3(?) substitutes nth capture where n>m with an empty string
+ var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = (function () {
+ if (/./[REPLACE]) {
+ return /./[REPLACE]('a', '$0') === '';
}
+ return false;
+ })();
- return name.toLowerCase();
- }
+ // Chrome 51 has a buggy "split" implementation when RegExp#exec !== nativeExec
+ // Weex JS has frozen built-in prototypes, so use try / catch wrapper
+ var SPLIT_WORKS_WITH_OVERWRITTEN_EXEC = !fails(function () {
+ // eslint-disable-next-line regexp/no-empty-group -- required for testing
+ var re = /(?:)/;
+ var originalExec = re.exec;
+ re.exec = function () { return originalExec.apply(this, arguments); };
+ var result = 'ab'.split(re);
+ return result.length !== 2 || result[0] !== 'a' || result[1] !== 'b';
+ });
- function normalizeValue(value) {
- if (typeof value !== 'string') {
- value = String(value);
- }
+ var fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) {
+ var SYMBOL = wellKnownSymbol(KEY);
- return value;
- } // Build a destructive iterator for the value list
+ var DELEGATES_TO_SYMBOL = !fails(function () {
+ // String methods call symbol-named RegEp methods
+ var O = {};
+ O[SYMBOL] = function () { return 7; };
+ return ''[KEY](O) != 7;
+ });
+ var DELEGATES_TO_EXEC = DELEGATES_TO_SYMBOL && !fails(function () {
+ // Symbol-named RegExp methods call .exec
+ var execCalled = false;
+ var re = /a/;
- function iteratorFor(items) {
- var iterator = {
- next: function next() {
- var value = items.shift();
- return {
- done: value === undefined,
- value: value
- };
+ if (KEY === 'split') {
+ // We can't use real regex here since it causes deoptimization
+ // and serious performance degradation in V8
+ // https://github.com/zloirock/core-js/issues/306
+ re = {};
+ // RegExp[@@split] doesn't call the regex's exec method, but first creates
+ // a new one. We need to return the patched regex when creating the new one.
+ re.constructor = {};
+ re.constructor[SPECIES$6] = function () { return re; };
+ re.flags = '';
+ re[SYMBOL] = /./[SYMBOL];
}
- };
- if (support.iterable) {
- iterator[Symbol.iterator] = function () {
- return iterator;
- };
- }
+ re.exec = function () { execCalled = true; return null; };
- return iterator;
- }
+ re[SYMBOL]('');
+ return !execCalled;
+ });
- function Headers$1(headers) {
- this.map = {};
+ if (
+ !DELEGATES_TO_SYMBOL ||
+ !DELEGATES_TO_EXEC ||
+ (KEY === 'replace' && !(
+ REPLACE_SUPPORTS_NAMED_GROUPS &&
+ REPLACE_KEEPS_$0 &&
+ !REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
+ )) ||
+ (KEY === 'split' && !SPLIT_WORKS_WITH_OVERWRITTEN_EXEC)
+ ) {
+ var nativeRegExpMethod = /./[SYMBOL];
+ var methods = exec(SYMBOL, ''[KEY], function (nativeMethod, regexp, str, arg2, forceStringMethod) {
+ if (regexp.exec === regexpExec) {
+ if (DELEGATES_TO_SYMBOL && !forceStringMethod) {
+ // The native String method already delegates to @@method (this
+ // polyfilled function), leasing to infinite recursion.
+ // We avoid it by directly calling the native @@method method.
+ return { done: true, value: nativeRegExpMethod.call(regexp, str, arg2) };
+ }
+ return { done: true, value: nativeMethod.call(str, regexp, arg2) };
+ }
+ return { done: false };
+ }, {
+ REPLACE_KEEPS_$0: REPLACE_KEEPS_$0,
+ REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE: REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE
+ });
+ var stringMethod = methods[0];
+ var regexMethod = methods[1];
- if (headers instanceof Headers$1) {
- headers.forEach(function (value, name) {
- this.append(name, value);
- }, this);
- } else if (Array.isArray(headers)) {
- headers.forEach(function (header) {
- this.append(header[0], header[1]);
- }, this);
- } else if (headers) {
- Object.getOwnPropertyNames(headers).forEach(function (name) {
- this.append(name, headers[name]);
- }, this);
+ redefine(String.prototype, KEY, stringMethod);
+ redefine(RegExp.prototype, SYMBOL, length == 2
+ // 21.2.5.8 RegExp.prototype[@@replace](string, replaceValue)
+ // 21.2.5.11 RegExp.prototype[@@split](string, limit)
+ ? function (string, arg) { return regexMethod.call(string, this, arg); }
+ // 21.2.5.6 RegExp.prototype[@@match](string)
+ // 21.2.5.9 RegExp.prototype[@@search](string)
+ : function (string) { return regexMethod.call(string, this); }
+ );
}
- }
-
- Headers$1.prototype.append = function (name, value) {
- name = normalizeName(name);
- value = normalizeValue(value);
- var oldValue = this.map[name];
- this.map[name] = oldValue ? oldValue + ', ' + value : value;
- };
- Headers$1.prototype['delete'] = function (name) {
- delete this.map[normalizeName(name)];
+ if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true);
};
- Headers$1.prototype.get = function (name) {
- name = normalizeName(name);
- return this.has(name) ? this.map[name] : null;
- };
+ var charAt$1 = stringMultibyte.charAt;
- Headers$1.prototype.has = function (name) {
- return this.map.hasOwnProperty(normalizeName(name));
+ // `AdvanceStringIndex` abstract operation
+ // https://tc39.es/ecma262/#sec-advancestringindex
+ var advanceStringIndex = function (S, index, unicode) {
+ return index + (unicode ? charAt$1(S, index).length : 1);
};
- Headers$1.prototype.set = function (name, value) {
- this.map[normalizeName(name)] = normalizeValue(value);
+ var floor$5 = Math.floor;
+ var replace$1 = ''.replace;
+ var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d{1,2}|<[^>]*>)/g;
+ var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d{1,2})/g;
+
+ // https://tc39.es/ecma262/#sec-getsubstitution
+ var getSubstitution = function (matched, str, position, captures, namedCaptures, replacement) {
+ var tailPos = position + matched.length;
+ var m = captures.length;
+ var symbols = SUBSTITUTION_SYMBOLS_NO_NAMED;
+ if (namedCaptures !== undefined) {
+ namedCaptures = toObject(namedCaptures);
+ symbols = SUBSTITUTION_SYMBOLS;
+ }
+ return replace$1.call(replacement, symbols, function (match, ch) {
+ var capture;
+ switch (ch.charAt(0)) {
+ case '$': return '$';
+ case '&': return matched;
+ case '`': return str.slice(0, position);
+ case "'": return str.slice(tailPos);
+ case '<':
+ capture = namedCaptures[ch.slice(1, -1)];
+ break;
+ default: // \d\d?
+ var n = +ch;
+ if (n === 0) return match;
+ if (n > m) {
+ var f = floor$5(n / 10);
+ if (f === 0) return match;
+ if (f <= m) return captures[f - 1] === undefined ? ch.charAt(1) : captures[f - 1] + ch.charAt(1);
+ return match;
+ }
+ capture = captures[n - 1];
+ }
+ return capture === undefined ? '' : capture;
+ });
};
- Headers$1.prototype.forEach = function (callback, thisArg) {
- for (var name in this.map) {
- if (this.map.hasOwnProperty(name)) {
- callback.call(thisArg, this.map[name], name, this);
+ // `RegExpExec` abstract operation
+ // https://tc39.es/ecma262/#sec-regexpexec
+ var regexpExecAbstract = function (R, S) {
+ var exec = R.exec;
+ if (typeof exec === 'function') {
+ var result = exec.call(R, S);
+ if (typeof result !== 'object') {
+ throw TypeError('RegExp exec method returned something other than an Object or null');
}
+ return result;
+ }
+
+ if (classofRaw(R) !== 'RegExp') {
+ throw TypeError('RegExp#exec called on incompatible receiver');
}
+
+ return regexpExec.call(R, S);
};
- Headers$1.prototype.keys = function () {
- var items = [];
- this.forEach(function (value, name) {
- items.push(name);
+ var max$2 = Math.max;
+ var min$4 = Math.min;
+
+ var maybeToString = function (it) {
+ return it === undefined ? it : String(it);
+ };
+
+ // @@replace logic
+ fixRegexpWellKnownSymbolLogic('replace', 2, function (REPLACE, nativeReplace, maybeCallNative, reason) {
+ var REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE = reason.REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE;
+ var REPLACE_KEEPS_$0 = reason.REPLACE_KEEPS_$0;
+ var UNSAFE_SUBSTITUTE = REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE ? '$' : '$0';
+
+ return [
+ // `String.prototype.replace` method
+ // https://tc39.es/ecma262/#sec-string.prototype.replace
+ function replace(searchValue, replaceValue) {
+ var O = requireObjectCoercible(this);
+ var replacer = searchValue == undefined ? undefined : searchValue[REPLACE];
+ return replacer !== undefined
+ ? replacer.call(searchValue, O, replaceValue)
+ : nativeReplace.call(String(O), searchValue, replaceValue);
+ },
+ // `RegExp.prototype[@@replace]` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype-@@replace
+ function (regexp, replaceValue) {
+ if (
+ (!REGEXP_REPLACE_SUBSTITUTES_UNDEFINED_CAPTURE && REPLACE_KEEPS_$0) ||
+ (typeof replaceValue === 'string' && replaceValue.indexOf(UNSAFE_SUBSTITUTE) === -1)
+ ) {
+ var res = maybeCallNative(nativeReplace, regexp, this, replaceValue);
+ if (res.done) return res.value;
+ }
+
+ var rx = anObject(regexp);
+ var S = String(this);
+
+ var functionalReplace = typeof replaceValue === 'function';
+ if (!functionalReplace) replaceValue = String(replaceValue);
+
+ var global = rx.global;
+ if (global) {
+ var fullUnicode = rx.unicode;
+ rx.lastIndex = 0;
+ }
+ var results = [];
+ while (true) {
+ var result = regexpExecAbstract(rx, S);
+ if (result === null) break;
+
+ results.push(result);
+ if (!global) break;
+
+ var matchStr = String(result[0]);
+ if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode);
+ }
+
+ var accumulatedResult = '';
+ var nextSourcePosition = 0;
+ for (var i = 0; i < results.length; i++) {
+ result = results[i];
+
+ var matched = String(result[0]);
+ var position = max$2(min$4(toInteger(result.index), S.length), 0);
+ var captures = [];
+ // NOTE: This is equivalent to
+ // captures = result.slice(1).map(maybeToString)
+ // but for some reason `nativeSlice.call(result, 1, result.length)` (called in
+ // the slice polyfill when slicing native arrays) "doesn't work" in safari 9 and
+ // causes a crash (https://pastebin.com/N21QzeQA) when trying to debug it.
+ for (var j = 1; j < result.length; j++) captures.push(maybeToString(result[j]));
+ var namedCaptures = result.groups;
+ if (functionalReplace) {
+ var replacerArgs = [matched].concat(captures, position, S);
+ if (namedCaptures !== undefined) replacerArgs.push(namedCaptures);
+ var replacement = String(replaceValue.apply(undefined, replacerArgs));
+ } else {
+ replacement = getSubstitution(matched, S, position, captures, namedCaptures, replaceValue);
+ }
+ if (position >= nextSourcePosition) {
+ accumulatedResult += S.slice(nextSourcePosition, position) + replacement;
+ nextSourcePosition = position + matched.length;
+ }
+ }
+ return accumulatedResult + S.slice(nextSourcePosition);
+ }
+ ];
+ });
+
+ var MATCH = wellKnownSymbol('match');
+
+ // `IsRegExp` abstract operation
+ // https://tc39.es/ecma262/#sec-isregexp
+ var isRegexp = function (it) {
+ var isRegExp;
+ return isObject(it) && ((isRegExp = it[MATCH]) !== undefined ? !!isRegExp : classofRaw(it) == 'RegExp');
+ };
+
+ var arrayPush = [].push;
+ var min$5 = Math.min;
+ var MAX_UINT32 = 0xFFFFFFFF;
+
+ // babel-minify transpiles RegExp('x', 'y') -> /x/y and it causes SyntaxError
+ var SUPPORTS_Y = !fails(function () { return !RegExp(MAX_UINT32, 'y'); });
+
+ // @@split logic
+ fixRegexpWellKnownSymbolLogic('split', 2, function (SPLIT, nativeSplit, maybeCallNative) {
+ var internalSplit;
+ if (
+ 'abbc'.split(/(b)*/)[1] == 'c' ||
+ // eslint-disable-next-line regexp/no-empty-group -- required for testing
+ 'test'.split(/(?:)/, -1).length != 4 ||
+ 'ab'.split(/(?:ab)*/).length != 2 ||
+ '.'.split(/(.?)(.?)/).length != 4 ||
+ // eslint-disable-next-line regexp/no-assertion-capturing-group, regexp/no-empty-group -- required for testing
+ '.'.split(/()()/).length > 1 ||
+ ''.split(/.?/).length
+ ) {
+ // based on es5-shim implementation, need to rework it
+ internalSplit = function (separator, limit) {
+ var string = String(requireObjectCoercible(this));
+ var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
+ if (lim === 0) return [];
+ if (separator === undefined) return [string];
+ // If `separator` is not a regex, use native split
+ if (!isRegexp(separator)) {
+ return nativeSplit.call(string, separator, lim);
+ }
+ var output = [];
+ var flags = (separator.ignoreCase ? 'i' : '') +
+ (separator.multiline ? 'm' : '') +
+ (separator.unicode ? 'u' : '') +
+ (separator.sticky ? 'y' : '');
+ var lastLastIndex = 0;
+ // Make `global` and avoid `lastIndex` issues by working with a copy
+ var separatorCopy = new RegExp(separator.source, flags + 'g');
+ var match, lastIndex, lastLength;
+ while (match = regexpExec.call(separatorCopy, string)) {
+ lastIndex = separatorCopy.lastIndex;
+ if (lastIndex > lastLastIndex) {
+ output.push(string.slice(lastLastIndex, match.index));
+ if (match.length > 1 && match.index < string.length) arrayPush.apply(output, match.slice(1));
+ lastLength = match[0].length;
+ lastLastIndex = lastIndex;
+ if (output.length >= lim) break;
+ }
+ if (separatorCopy.lastIndex === match.index) separatorCopy.lastIndex++; // Avoid an infinite loop
+ }
+ if (lastLastIndex === string.length) {
+ if (lastLength || !separatorCopy.test('')) output.push('');
+ } else output.push(string.slice(lastLastIndex));
+ return output.length > lim ? output.slice(0, lim) : output;
+ };
+ // Chakra, V8
+ } else if ('0'.split(undefined, 0).length) {
+ internalSplit = function (separator, limit) {
+ return separator === undefined && limit === 0 ? [] : nativeSplit.call(this, separator, limit);
+ };
+ } else internalSplit = nativeSplit;
+
+ return [
+ // `String.prototype.split` method
+ // https://tc39.es/ecma262/#sec-string.prototype.split
+ function split(separator, limit) {
+ var O = requireObjectCoercible(this);
+ var splitter = separator == undefined ? undefined : separator[SPLIT];
+ return splitter !== undefined
+ ? splitter.call(separator, O, limit)
+ : internalSplit.call(String(O), separator, limit);
+ },
+ // `RegExp.prototype[@@split]` method
+ // https://tc39.es/ecma262/#sec-regexp.prototype-@@split
+ //
+ // NOTE: This cannot be properly polyfilled in engines that don't support
+ // the 'y' flag.
+ function (regexp, limit) {
+ var res = maybeCallNative(internalSplit, regexp, this, limit, internalSplit !== nativeSplit);
+ if (res.done) return res.value;
+
+ var rx = anObject(regexp);
+ var S = String(this);
+ var C = speciesConstructor(rx, RegExp);
+
+ var unicodeMatching = rx.unicode;
+ var flags = (rx.ignoreCase ? 'i' : '') +
+ (rx.multiline ? 'm' : '') +
+ (rx.unicode ? 'u' : '') +
+ (SUPPORTS_Y ? 'y' : 'g');
+
+ // ^(? + rx + ) is needed, in combination with some S slicing, to
+ // simulate the 'y' flag.
+ var splitter = new C(SUPPORTS_Y ? rx : '^(?:' + rx.source + ')', flags);
+ var lim = limit === undefined ? MAX_UINT32 : limit >>> 0;
+ if (lim === 0) return [];
+ if (S.length === 0) return regexpExecAbstract(splitter, S) === null ? [S] : [];
+ var p = 0;
+ var q = 0;
+ var A = [];
+ while (q < S.length) {
+ splitter.lastIndex = SUPPORTS_Y ? q : 0;
+ var z = regexpExecAbstract(splitter, SUPPORTS_Y ? S : S.slice(q));
+ var e;
+ if (
+ z === null ||
+ (e = min$5(toLength(splitter.lastIndex + (SUPPORTS_Y ? 0 : q)), S.length)) === p
+ ) {
+ q = advanceStringIndex(S, q, unicodeMatching);
+ } else {
+ A.push(S.slice(p, q));
+ if (A.length === lim) return A;
+ for (var i = 1; i <= z.length - 1; i++) {
+ A.push(z[i]);
+ if (A.length === lim) return A;
+ }
+ q = p = e;
+ }
+ }
+ A.push(S.slice(p));
+ return A;
+ }
+ ];
+ }, !SUPPORTS_Y);
+
+ // a string of all valid unicode whitespaces
+ var whitespaces = '\u0009\u000A\u000B\u000C\u000D\u0020\u00A0\u1680\u2000\u2001\u2002' +
+ '\u2003\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028\u2029\uFEFF';
+
+ var whitespace = '[' + whitespaces + ']';
+ var ltrim = RegExp('^' + whitespace + whitespace + '*');
+ var rtrim = RegExp(whitespace + whitespace + '*$');
+
+ // `String.prototype.{ trim, trimStart, trimEnd, trimLeft, trimRight }` methods implementation
+ var createMethod$4 = function (TYPE) {
+ return function ($this) {
+ var string = String(requireObjectCoercible($this));
+ if (TYPE & 1) string = string.replace(ltrim, '');
+ if (TYPE & 2) string = string.replace(rtrim, '');
+ return string;
+ };
+ };
+
+ var stringTrim = {
+ // `String.prototype.{ trimLeft, trimStart }` methods
+ // https://tc39.es/ecma262/#sec-string.prototype.trimstart
+ start: createMethod$4(1),
+ // `String.prototype.{ trimRight, trimEnd }` methods
+ // https://tc39.es/ecma262/#sec-string.prototype.trimend
+ end: createMethod$4(2),
+ // `String.prototype.trim` method
+ // https://tc39.es/ecma262/#sec-string.prototype.trim
+ trim: createMethod$4(3)
+ };
+
+ var non = '\u200B\u0085\u180E';
+
+ // check that a method works with the correct list
+ // of whitespaces and has a correct name
+ var stringTrimForced = function (METHOD_NAME) {
+ return fails(function () {
+ return !!whitespaces[METHOD_NAME]() || non[METHOD_NAME]() != non || whitespaces[METHOD_NAME].name !== METHOD_NAME;
+ });
+ };
+
+ var $trim = stringTrim.trim;
+
+
+ // `String.prototype.trim` method
+ // https://tc39.es/ecma262/#sec-string.prototype.trim
+ _export({ target: 'String', proto: true, forced: stringTrimForced('trim') }, {
+ trim: function trim() {
+ return $trim(this);
+ }
+ });
+
+ var defineProperty$6 = objectDefineProperty.f;
+
+ var FunctionPrototype = Function.prototype;
+ var FunctionPrototypeToString = FunctionPrototype.toString;
+ var nameRE = /^\s*function ([^ (]*)/;
+ var NAME$1 = 'name';
+
+ // Function instances `.name` property
+ // https://tc39.es/ecma262/#sec-function-instances-name
+ if (descriptors && !(NAME$1 in FunctionPrototype)) {
+ defineProperty$6(FunctionPrototype, NAME$1, {
+ configurable: true,
+ get: function () {
+ try {
+ return FunctionPrototypeToString.call(this).match(nameRE)[1];
+ } catch (error) {
+ return '';
+ }
+ }
+ });
+ }
+
+ // `Object.create` method
+ // https://tc39.es/ecma262/#sec-object.create
+ _export({ target: 'Object', stat: true, sham: !descriptors }, {
+ create: objectCreate
+ });
+
+ var slice = [].slice;
+ var MSIE = /MSIE .\./.test(engineUserAgent); // <- dirty ie9- check
+
+ var wrap$1 = function (scheduler) {
+ return function (handler, timeout /* , ...arguments */) {
+ var boundArgs = arguments.length > 2;
+ var args = boundArgs ? slice.call(arguments, 2) : undefined;
+ return scheduler(boundArgs ? function () {
+ // eslint-disable-next-line no-new-func -- spec requirement
+ (typeof handler == 'function' ? handler : Function(handler)).apply(this, args);
+ } : handler, timeout);
+ };
+ };
+
+ // ie9- setTimeout & setInterval additional parameters fix
+ // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#timers
+ _export({ global: true, bind: true, forced: MSIE }, {
+ // `setTimeout` method
+ // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-settimeout
+ setTimeout: wrap$1(global_1.setTimeout),
+ // `setInterval` method
+ // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval
+ setInterval: wrap$1(global_1.setInterval)
+ });
+
+ var global$1 = typeof globalThis !== 'undefined' && globalThis || typeof self !== 'undefined' && self || typeof global$1 !== 'undefined' && global$1;
+ var support = {
+ searchParams: 'URLSearchParams' in global$1,
+ iterable: 'Symbol' in global$1 && 'iterator' in Symbol,
+ blob: 'FileReader' in global$1 && 'Blob' in global$1 && function () {
+ try {
+ new Blob();
+ return true;
+ } catch (e) {
+ return false;
+ }
+ }(),
+ formData: 'FormData' in global$1,
+ arrayBuffer: 'ArrayBuffer' in global$1
+ };
+
+ function isDataView(obj) {
+ return obj && DataView.prototype.isPrototypeOf(obj);
+ }
+
+ if (support.arrayBuffer) {
+ var viewClasses = ['[object Int8Array]', '[object Uint8Array]', '[object Uint8ClampedArray]', '[object Int16Array]', '[object Uint16Array]', '[object Int32Array]', '[object Uint32Array]', '[object Float32Array]', '[object Float64Array]'];
+
+ var isArrayBufferView = ArrayBuffer.isView || function (obj) {
+ return obj && viewClasses.indexOf(Object.prototype.toString.call(obj)) > -1;
+ };
+ }
+
+ function normalizeName(name) {
+ if (typeof name !== 'string') {
+ name = String(name);
+ }
+
+ if (/[^a-z0-9\-#$%&'*+.^_`|~!]/i.test(name) || name === '') {
+ throw new TypeError('Invalid character in header field name: "' + name + '"');
+ }
+
+ return name.toLowerCase();
+ }
+
+ function normalizeValue(value) {
+ if (typeof value !== 'string') {
+ value = String(value);
+ }
+
+ return value;
+ } // Build a destructive iterator for the value list
+
+
+ function iteratorFor(items) {
+ var iterator = {
+ next: function next() {
+ var value = items.shift();
+ return {
+ done: value === undefined,
+ value: value
+ };
+ }
+ };
+
+ if (support.iterable) {
+ iterator[Symbol.iterator] = function () {
+ return iterator;
+ };
+ }
+
+ return iterator;
+ }
+
+ function Headers$1(headers) {
+ this.map = {};
+
+ if (headers instanceof Headers$1) {
+ headers.forEach(function (value, name) {
+ this.append(name, value);
+ }, this);
+ } else if (Array.isArray(headers)) {
+ headers.forEach(function (header) {
+ this.append(header[0], header[1]);
+ }, this);
+ } else if (headers) {
+ Object.getOwnPropertyNames(headers).forEach(function (name) {
+ this.append(name, headers[name]);
+ }, this);
+ }
+ }
+
+ Headers$1.prototype.append = function (name, value) {
+ name = normalizeName(name);
+ value = normalizeValue(value);
+ var oldValue = this.map[name];
+ this.map[name] = oldValue ? oldValue + ', ' + value : value;
+ };
+
+ Headers$1.prototype['delete'] = function (name) {
+ delete this.map[normalizeName(name)];
+ };
+
+ Headers$1.prototype.get = function (name) {
+ name = normalizeName(name);
+ return this.has(name) ? this.map[name] : null;
+ };
+
+ Headers$1.prototype.has = function (name) {
+ return this.map.hasOwnProperty(normalizeName(name));
+ };
+
+ Headers$1.prototype.set = function (name, value) {
+ this.map[normalizeName(name)] = normalizeValue(value);
+ };
+
+ Headers$1.prototype.forEach = function (callback, thisArg) {
+ for (var name in this.map) {
+ if (this.map.hasOwnProperty(name)) {
+ callback.call(thisArg, this.map[name], name, this);
+ }
+ }
+ };
+
+ Headers$1.prototype.keys = function () {
+ var items = [];
+ this.forEach(function (value, name) {
+ items.push(name);
});
return iteratorFor(items);
};
this.type = 'default';
this.status = options.status === undefined ? 200 : options.status;
this.ok = this.status >= 200 && this.status < 300;
- this.statusText = 'statusText' in options ? options.statusText : '';
+ this.statusText = options.statusText === undefined ? '' : '' + options.statusText;
this.headers = new Headers$1(options.headers);
this.url = options.url || '';
global$1.Response = Response;
}
- // `Symbol.toStringTag` well-known symbol
- // https://tc39.github.io/ecma262/#sec-symbol.tostringtag
- defineWellKnownSymbol('toStringTag');
-
- var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('splice');
- var USES_TO_LENGTH$5 = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 });
-
- var max$3 = Math.max;
- var min$6 = Math.min;
- var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
- var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';
-
- // `Array.prototype.splice` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.splice
- // with adding support of @@species
- _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 || !USES_TO_LENGTH$5 }, {
- splice: function splice(start, deleteCount /* , ...items */) {
- var O = toObject(this);
- var len = toLength(O.length);
- var actualStart = toAbsoluteIndex(start, len);
- var argumentsLength = arguments.length;
- var insertCount, actualDeleteCount, A, k, from, to;
- if (argumentsLength === 0) {
- insertCount = actualDeleteCount = 0;
- } else if (argumentsLength === 1) {
- insertCount = 0;
- actualDeleteCount = len - actualStart;
- } else {
- insertCount = argumentsLength - 2;
- actualDeleteCount = min$6(max$3(toInteger(deleteCount), 0), len - actualStart);
- }
- if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {
- throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
- }
- A = arraySpeciesCreate(O, actualDeleteCount);
- for (k = 0; k < actualDeleteCount; k++) {
- from = actualStart + k;
- if (from in O) createProperty(A, k, O[from]);
- }
- A.length = actualDeleteCount;
- if (insertCount < actualDeleteCount) {
- for (k = actualStart; k < len - actualDeleteCount; k++) {
- from = k + actualDeleteCount;
- to = k + insertCount;
- if (from in O) O[to] = O[from];
- else delete O[to];
- }
- for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];
- } else if (insertCount > actualDeleteCount) {
- for (k = len - actualDeleteCount; k > actualStart; k--) {
- from = k + actualDeleteCount - 1;
- to = k + insertCount - 1;
- if (from in O) O[to] = O[from];
- else delete O[to];
- }
- }
- for (k = 0; k < insertCount; k++) {
- O[k + actualStart] = arguments[k + 2];
- }
- O.length = len - actualDeleteCount + insertCount;
- return A;
- }
- });
-
- // JSON[@@toStringTag] property
- // https://tc39.github.io/ecma262/#sec-json-@@tostringtag
- setToStringTag(global_1.JSON, 'JSON', true);
-
- // Math[@@toStringTag] property
- // https://tc39.github.io/ecma262/#sec-math-@@tostringtag
- setToStringTag(Math, 'Math', true);
-
// `Object.defineProperty` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperty
+ // https://tc39.es/ecma262/#sec-object.defineproperty
_export({ target: 'Object', stat: true, forced: !descriptors, sham: !descriptors }, {
defineProperty: objectDefineProperty.f
});
- var nativeGetOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
-
-
- var FAILS_ON_PRIMITIVES$1 = fails(function () { nativeGetOwnPropertyDescriptor$2(1); });
- var FORCED$5 = !descriptors || FAILS_ON_PRIMITIVES$1;
-
- // `Object.getOwnPropertyDescriptor` method
- // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor
- _export({ target: 'Object', stat: true, forced: FORCED$5, sham: !descriptors }, {
- getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
- return nativeGetOwnPropertyDescriptor$2(toIndexedObject(it), key);
- }
+ // `Object.setPrototypeOf` method
+ // https://tc39.es/ecma262/#sec-object.setprototypeof
+ _export({ target: 'Object', stat: true }, {
+ setPrototypeOf: objectSetPrototypeOf
});
- var FAILS_ON_PRIMITIVES$2 = fails(function () { objectGetPrototypeOf(1); });
+ var FAILS_ON_PRIMITIVES$1 = fails(function () { objectGetPrototypeOf(1); });
// `Object.getPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.getprototypeof
- _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$2, sham: !correctPrototypeGetter }, {
+ // https://tc39.es/ecma262/#sec-object.getprototypeof
+ _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$1, sham: !correctPrototypeGetter }, {
getPrototypeOf: function getPrototypeOf(it) {
return objectGetPrototypeOf(toObject(it));
}
});
- // `Object.setPrototypeOf` method
- // https://tc39.github.io/ecma262/#sec-object.setprototypeof
- _export({ target: 'Object', stat: true }, {
- setPrototypeOf: objectSetPrototypeOf
- });
-
var slice$1 = [].slice;
var factories = {};
var construct = function (C, argsLength, args) {
if (!(argsLength in factories)) {
for (var list = [], i = 0; i < argsLength; i++) list[i] = 'a[' + i + ']';
- // eslint-disable-next-line no-new-func
+ // eslint-disable-next-line no-new-func -- we have no proper alternatives, IE8- only
factories[argsLength] = Function('C,a', 'return new C(' + list.join(',') + ')');
} return factories[argsLength](C, args);
};
// `Function.prototype.bind` method implementation
- // https://tc39.github.io/ecma262/#sec-function.prototype.bind
+ // https://tc39.es/ecma262/#sec-function.prototype.bind
var functionBind = Function.bind || function bind(that /* , ...args */) {
var fn = aFunction$1(this);
var partArgs = slice$1.call(arguments, 1);
var nativeConstruct = getBuiltIn('Reflect', 'construct');
// `Reflect.construct` method
- // https://tc39.github.io/ecma262/#sec-reflect.construct
+ // https://tc39.es/ecma262/#sec-reflect.construct
// MS Edge supports only 2 arguments and argumentsList argument is optional
// FF Nightly sets third argument as `new.target`, but does not create `this` from it
var NEW_TARGET_BUG = fails(function () {
var ARGS_BUG = !fails(function () {
nativeConstruct(function () { /* empty */ });
});
- var FORCED$6 = NEW_TARGET_BUG || ARGS_BUG;
+ var FORCED$5 = NEW_TARGET_BUG || ARGS_BUG;
- _export({ target: 'Reflect', stat: true, forced: FORCED$6, sham: FORCED$6 }, {
+ _export({ target: 'Reflect', stat: true, forced: FORCED$5, sham: FORCED$5 }, {
construct: function construct(Target, args /* , newTarget */) {
aFunction$1(Target);
anObject(args);
});
// `Reflect.get` method
- // https://tc39.github.io/ecma262/#sec-reflect.get
+ // https://tc39.es/ecma262/#sec-reflect.get
function get$2(target, propertyKey /* , receiver */) {
var receiver = arguments.length < 3 ? target : arguments[2];
var descriptor, prototype;
get: get$2
});
- (function (factory) {
- factory();
- })(function () {
+ var nativeGetOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f;
+
+
+ var FAILS_ON_PRIMITIVES$2 = fails(function () { nativeGetOwnPropertyDescriptor$2(1); });
+ var FORCED$6 = !descriptors || FAILS_ON_PRIMITIVES$2;
+
+ // `Object.getOwnPropertyDescriptor` method
+ // https://tc39.es/ecma262/#sec-object.getownpropertydescriptor
+ _export({ target: 'Object', stat: true, forced: FORCED$6, sham: !descriptors }, {
+ getOwnPropertyDescriptor: function getOwnPropertyDescriptor(it, key) {
+ return nativeGetOwnPropertyDescriptor$2(toIndexedObject(it), key);
+ }
+ });
+
+ var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('splice');
+
+ var max$3 = Math.max;
+ var min$6 = Math.min;
+ var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF;
+ var MAXIMUM_ALLOWED_LENGTH_EXCEEDED = 'Maximum allowed length exceeded';
+
+ // `Array.prototype.splice` method
+ // https://tc39.es/ecma262/#sec-array.prototype.splice
+ // with adding support of @@species
+ _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$2 }, {
+ splice: function splice(start, deleteCount /* , ...items */) {
+ var O = toObject(this);
+ var len = toLength(O.length);
+ var actualStart = toAbsoluteIndex(start, len);
+ var argumentsLength = arguments.length;
+ var insertCount, actualDeleteCount, A, k, from, to;
+ if (argumentsLength === 0) {
+ insertCount = actualDeleteCount = 0;
+ } else if (argumentsLength === 1) {
+ insertCount = 0;
+ actualDeleteCount = len - actualStart;
+ } else {
+ insertCount = argumentsLength - 2;
+ actualDeleteCount = min$6(max$3(toInteger(deleteCount), 0), len - actualStart);
+ }
+ if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER) {
+ throw TypeError(MAXIMUM_ALLOWED_LENGTH_EXCEEDED);
+ }
+ A = arraySpeciesCreate(O, actualDeleteCount);
+ for (k = 0; k < actualDeleteCount; k++) {
+ from = actualStart + k;
+ if (from in O) createProperty(A, k, O[from]);
+ }
+ A.length = actualDeleteCount;
+ if (insertCount < actualDeleteCount) {
+ for (k = actualStart; k < len - actualDeleteCount; k++) {
+ from = k + actualDeleteCount;
+ to = k + insertCount;
+ if (from in O) O[to] = O[from];
+ else delete O[to];
+ }
+ for (k = len; k > len - actualDeleteCount + insertCount; k--) delete O[k - 1];
+ } else if (insertCount > actualDeleteCount) {
+ for (k = len - actualDeleteCount; k > actualStart; k--) {
+ from = k + actualDeleteCount - 1;
+ to = k + insertCount - 1;
+ if (from in O) O[to] = O[from];
+ else delete O[to];
+ }
+ }
+ for (k = 0; k < insertCount; k++) {
+ O[k + actualStart] = arguments[k + 2];
+ }
+ O.length = len - actualDeleteCount + insertCount;
+ return A;
+ }
+ });
+
+ // `Symbol.toStringTag` well-known symbol
+ // https://tc39.es/ecma262/#sec-symbol.tostringtag
+ defineWellKnownSymbol('toStringTag');
+
+ // Math[@@toStringTag] property
+ // https://tc39.es/ecma262/#sec-math-@@tostringtag
+ setToStringTag(Math, 'Math', true);
+
+ // JSON[@@toStringTag] property
+ // https://tc39.es/ecma262/#sec-json-@@tostringtag
+ setToStringTag(global_1.JSON, 'JSON', true);
+
+ (function (factory) {
+ factory();
+ })(function () {
function _classCallCheck(instance, Constructor) {
if (!(instance instanceof Constructor)) {
_createClass(Emitter, [{
key: "addEventListener",
- value: function addEventListener(type, callback) {
+ value: function addEventListener(type, callback, options) {
if (!(type in this.listeners)) {
this.listeners[type] = [];
}
- this.listeners[type].push(callback);
+ this.listeners[type].push({
+ callback: callback,
+ options: options
+ });
}
}, {
key: "removeEventListener",
var stack = this.listeners[type];
for (var i = 0, l = stack.length; i < l; i++) {
- if (stack[i] === callback) {
+ if (stack[i].callback === callback) {
stack.splice(i, 1);
return;
}
}, {
key: "dispatchEvent",
value: function dispatchEvent(event) {
- var _this = this;
-
if (!(event.type in this.listeners)) {
return;
}
- var debounce = function debounce(callback) {
- setTimeout(function () {
- return callback.call(_this, event);
- });
- };
-
var stack = this.listeners[event.type];
+ var stackToCall = stack.slice();
- for (var i = 0, l = stack.length; i < l; i++) {
- debounce(stack[i]);
+ for (var i = 0, l = stackToCall.length; i < l; i++) {
+ var listener = stackToCall[i];
+
+ try {
+ listener.callback.call(this, event);
+ } catch (e) {
+ Promise.resolve().then(function () {
+ throw e;
+ });
+ }
+
+ if (listener.options && listener.options.once) {
+ this.removeEventListener(event.type, listener.callback);
+ }
}
return !event.defaultPrevented;
var _super = _createSuper(AbortSignal);
function AbortSignal() {
- var _this2;
+ var _this;
_classCallCheck(this, AbortSignal);
- _this2 = _super.call(this); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
+ _this = _super.call(this); // Some versions of babel does not transpile super() correctly for IE <= 10, if the parent
// constructor has failed to run, then "this.listeners" will still be undefined and then we call
// the parent constructor directly instead as a workaround. For general details, see babel bug:
// https://github.com/babel/babel/issues/3041
// This hack was added as a fix for the issue described here:
// https://github.com/Financial-Times/polyfill-library/pull/59#issuecomment-477558042
- if (!_this2.listeners) {
- Emitter.call(_assertThisInitialized(_this2));
+ if (!_this.listeners) {
+ Emitter.call(_assertThisInitialized(_this));
} // Compared to assignment, Object.defineProperty makes properties non-enumerable by default and
// we want Object.keys(new AbortController().signal) to be [] for compat with the native impl
- Object.defineProperty(_assertThisInitialized(_this2), 'aborted', {
+ Object.defineProperty(_assertThisInitialized(_this), 'aborted', {
value: false,
writable: true,
configurable: true
});
- Object.defineProperty(_assertThisInitialized(_this2), 'onabort', {
+ Object.defineProperty(_assertThisInitialized(_this), 'onabort', {
value: null,
writable: true,
configurable: true
});
- return _this2;
+ return _this;
}
_createClass(AbortSignal, [{
var FORCED$7 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT;
// `Array.prototype.concat` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.concat
+ // https://tc39.es/ecma262/#sec-array.prototype.concat
// with adding support of @@isConcatSpreadable and @@species
_export({ target: 'Array', proto: true, forced: FORCED$7 }, {
- concat: function concat(arg) { // eslint-disable-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
+ concat: function concat(arg) {
var O = toObject(this);
var A = arraySpeciesCreate(O, 0);
var n = 0;
});
// `Object.assign` method
- // https://tc39.github.io/ecma262/#sec-object.assign
+ // https://tc39.es/ecma262/#sec-object.assign
_export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, {
assign: objectAssign
});
var $filter$1 = arrayIteration.filter;
-
var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport('filter');
- // Edge 14- issue
- var USES_TO_LENGTH$6 = arrayMethodUsesToLength('filter');
// `Array.prototype.filter` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.filter
+ // https://tc39.es/ecma262/#sec-array.prototype.filter
// with adding support of @@species
- _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 || !USES_TO_LENGTH$6 }, {
+ _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 }, {
filter: function filter(callbackfn /* , thisArg */) {
return $filter$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
+ var FAILS_ON_PRIMITIVES$3 = fails(function () { objectKeys(1); });
+
+ // `Object.keys` method
+ // https://tc39.es/ecma262/#sec-object.keys
+ _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$3 }, {
+ keys: function keys(it) {
+ return objectKeys(toObject(it));
+ }
+ });
+
var nativeReverse = [].reverse;
var test$1 = [1, 2];
// `Array.prototype.reverse` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.reverse
+ // https://tc39.es/ecma262/#sec-array.prototype.reverse
// fix for Safari 12.0 bug
// https://bugs.webkit.org/show_bug.cgi?id=188794
_export({ target: 'Array', proto: true, forced: String(test$1) === String(test$1.reverse()) }, {
reverse: function reverse() {
- // eslint-disable-next-line no-self-assign
+ // eslint-disable-next-line no-self-assign -- dirty hack
if (isArray(this)) this.length = this.length;
return nativeReverse.call(this);
}
});
- var FAILS_ON_PRIMITIVES$3 = fails(function () { objectKeys(1); });
-
- // `Object.keys` method
- // https://tc39.github.io/ecma262/#sec-object.keys
- _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$3 }, {
- keys: function keys(it) {
- return objectKeys(toObject(it));
- }
- });
-
var trim = stringTrim.trim;
var FORCED$8 = 1 / $parseFloat(whitespaces + '-0') !== -Infinity;
// `parseFloat` method
- // https://tc39.github.io/ecma262/#sec-parsefloat-string
+ // https://tc39.es/ecma262/#sec-parsefloat-string
var numberParseFloat = FORCED$8 ? function parseFloat(string) {
var trimmedString = trim(String(string));
var result = $parseFloat(trimmedString);
} : $parseFloat;
// `parseFloat` method
- // https://tc39.github.io/ecma262/#sec-parsefloat-string
+ // https://tc39.es/ecma262/#sec-parsefloat-string
_export({ global: true, forced: parseFloat != numberParseFloat }, {
parseFloat: numberParseFloat
});
var FORCED$9 = $parseInt(whitespaces + '08') !== 8 || $parseInt(whitespaces + '0x16') !== 22;
// `parseInt` method
- // https://tc39.github.io/ecma262/#sec-parseint-string-radix
+ // https://tc39.es/ecma262/#sec-parseint-string-radix
var numberParseInt = FORCED$9 ? function parseInt(string, radix) {
var S = trim$1(String(string));
return $parseInt(S, (radix >>> 0) || (hex$1.test(S) ? 16 : 10));
} : $parseInt;
// `parseInt` method
- // https://tc39.github.io/ecma262/#sec-parseint-string-radix
+ // https://tc39.es/ecma262/#sec-parseint-string-radix
_export({ global: true, forced: parseInt != numberParseInt }, {
parseInt: numberParseInt
});
);
};
- // eslint-disable-next-line max-len
- if (isForced_1(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
- new NativeConstructor().entries().next();
- })))) {
+ var REPLACE = isForced_1(
+ CONSTRUCTOR_NAME,
+ typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () {
+ new NativeConstructor().entries().next();
+ }))
+ );
+
+ if (REPLACE) {
// create collection constructor
Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER);
internalMetadata.REQUIRED = true;
// V8 ~ Chromium 40- weak-collections throws on primitives, but should return false
var THROWS_ON_PRIMITIVES = fails(function () { instance.has(1); });
// most early implementations doesn't supports iterables, most modern - not close it correctly
- // eslint-disable-next-line no-new
+ // eslint-disable-next-line no-new -- required for testing
var ACCEPT_ITERABLES = checkCorrectnessOfIteration(function (iterable) { new NativeConstructor(iterable); });
// for early implementations -0 and +0 not the same
var BUGGY_ZERO = !IS_WEAK && fails(function () {
return Constructor;
};
- var defineProperty$8 = objectDefineProperty.f;
+ var defineProperty$7 = objectDefineProperty.f;
return define(this, value = value === 0 ? 0 : value, value);
}
});
- if (descriptors) defineProperty$8(C.prototype, 'size', {
+ if (descriptors) defineProperty$7(C.prototype, 'size', {
get: function () {
return getInternalState(this).size;
}
};
// `Set` constructor
- // https://tc39.github.io/ecma262/#sec-set-objects
+ // https://tc39.es/ecma262/#sec-set-objects
var es_set = collection('Set', function (init) {
return function Set() { return init(this, arguments.length ? arguments[0] : undefined); };
}, collectionStrong);
}
// `Symbol.asyncIterator` well-known symbol
- // https://tc39.github.io/ecma262/#sec-symbol.asynciterator
+ // https://tc39.es/ecma262/#sec-symbol.asynciterator
defineWellKnownSymbol('asyncIterator');
var runtime_1 = createCommonjsModule(function (module) {
var bisectRight = ascendingBisect.right;
var bisectCenter = d3_bisector(number).center;
- // `Array.prototype.fill` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.fill
- _export({ target: 'Array', proto: true }, {
- fill: arrayFill
- });
-
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
- addToUnscopables('fill');
-
var INCORRECT_ITERATION$1 = !checkCorrectnessOfIteration(function (iterable) {
Array.from(iterable);
});
// `Array.from` method
- // https://tc39.github.io/ecma262/#sec-array.from
+ // https://tc39.es/ecma262/#sec-array.from
_export({ target: 'Array', stat: true, forced: INCORRECT_ITERATION$1 }, {
from: arrayFrom
});
- var $some$1 = arrayIteration.some;
+ // `Array.prototype.fill` method
+ // https://tc39.es/ecma262/#sec-array.prototype.fill
+ _export({ target: 'Array', proto: true }, {
+ fill: arrayFill
+ });
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
+ addToUnscopables('fill');
+
+ var $some$1 = arrayIteration.some;
var STRICT_METHOD$4 = arrayMethodIsStrict('some');
- var USES_TO_LENGTH$7 = arrayMethodUsesToLength('some');
// `Array.prototype.some` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.some
- _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 || !USES_TO_LENGTH$7 }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.some
+ _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$4 }, {
some: function some(callbackfn /* , thisArg */) {
return $some$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
+ var exportTypedArrayStaticMethod$1 = arrayBufferViewCore.exportTypedArrayStaticMethod;
+
+
+ // `%TypedArray%.from` method
+ // https://tc39.es/ecma262/#sec-%typedarray%.from
+ exportTypedArrayStaticMethod$1('from', typedArrayFrom, typedArrayConstructorsRequireWrappers);
+
// `Float64Array` constructor
- // https://tc39.github.io/ecma262/#sec-typedarray-objects
+ // https://tc39.es/ecma262/#sec-typedarray-objects
typedArrayConstructor('Float64', function (init) {
return function Float64Array(data, byteOffset, length) {
return init(this, data, byteOffset, length);
};
});
- var exportTypedArrayStaticMethod$1 = arrayBufferViewCore.exportTypedArrayStaticMethod;
-
-
- // `%TypedArray%.from` method
- // https://tc39.github.io/ecma262/#sec-%typedarray%.from
- exportTypedArrayStaticMethod$1('from', typedArrayFrom, typedArrayConstructorsRequireWrappers);
-
function d3_descending (a, b) {
return b < a ? -1 : b > a ? 1 : b >= a ? 0 : NaN;
}
return Adder;
}();
+ // `Object.defineProperties` method
+ // https://tc39.es/ecma262/#sec-object.defineproperties
+ _export({ target: 'Object', stat: true, forced: !descriptors, sham: !descriptors }, {
+ defineProperties: objectDefineProperties
+ });
+
// `Map` constructor
- // https://tc39.github.io/ecma262/#sec-map-objects
+ // https://tc39.es/ecma262/#sec-map-objects
var es_map = collection('Map', function (init) {
return function Map() { return init(this, arguments.length ? arguments[0] : undefined); };
}, collectionStrong);
+ var test$2 = [];
+ var nativeSort = test$2.sort;
+
+ // IE8-
+ var FAILS_ON_UNDEFINED = fails(function () {
+ test$2.sort(undefined);
+ });
+ // V8 bug
+ var FAILS_ON_NULL = fails(function () {
+ test$2.sort(null);
+ });
+ // Old WebKit
+ var STRICT_METHOD$5 = arrayMethodIsStrict('sort');
+
+ var FORCED$a = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD$5;
+
+ // `Array.prototype.sort` method
+ // https://tc39.es/ecma262/#sec-array.prototype.sort
+ _export({ target: 'Array', proto: true, forced: FORCED$a }, {
+ sort: function sort(comparefn) {
+ return comparefn === undefined
+ ? nativeSort.call(toObject(this))
+ : nativeSort.call(toObject(this), aFunction$1(comparefn));
+ }
+ });
+
var e10 = Math.sqrt(50),
e5 = Math.sqrt(10),
e2 = Math.sqrt(2);
return range;
}
- var test$2 = [];
- var nativeSort = test$2.sort;
-
- // IE8-
- var FAILS_ON_UNDEFINED = fails(function () {
- test$2.sort(undefined);
- });
- // V8 bug
- var FAILS_ON_NULL = fails(function () {
- test$2.sort(null);
- });
- // Old WebKit
- var STRICT_METHOD$5 = arrayMethodIsStrict('sort');
-
- var FORCED$a = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD$5;
-
- // `Array.prototype.sort` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.sort
- _export({ target: 'Array', proto: true, forced: FORCED$a }, {
- sort: function sort(comparefn) {
- return comparefn === undefined
- ? nativeSort.call(toObject(this))
- : nativeSort.call(toObject(this), aFunction$1(comparefn));
- }
- });
-
// `SameValue` abstract operation
- // https://tc39.github.io/ecma262/#sec-samevalue
+ // https://tc39.es/ecma262/#sec-samevalue
var sameValue = Object.is || function is(x, y) {
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y;
};
var BUGGY = !!$hypot && $hypot(Infinity, NaN) !== Infinity;
// `Math.hypot` method
- // https://tc39.github.io/ecma262/#sec-math.hypot
+ // https://tc39.es/ecma262/#sec-math.hypot
_export({ target: 'Math', stat: true, forced: BUGGY }, {
- hypot: function hypot(value1, value2) { // eslint-disable-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
+ hypot: function hypot(value1, value2) {
var sum = 0;
var i = 0;
var aLen = arguments.length;
});
// `Math.sign` method implementation
- // https://tc39.github.io/ecma262/#sec-math.sign
+ // https://tc39.es/ecma262/#sec-math.sign
var mathSign = Math.sign || function sign(x) {
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
return (x = +x) == 0 || x != x ? x : x < 0 ? -1 : 1;
};
// `Math.sign` method
- // https://tc39.github.io/ecma262/#sec-math.sign
+ // https://tc39.es/ecma262/#sec-math.sign
_export({ target: 'Math', stat: true }, {
sign: mathSign
});
var $every$1 = arrayIteration.every;
-
var STRICT_METHOD$6 = arrayMethodIsStrict('every');
- var USES_TO_LENGTH$8 = arrayMethodUsesToLength('every');
// `Array.prototype.every` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.every
- _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$6 || !USES_TO_LENGTH$8 }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.every
+ _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$6 }, {
every: function every(callbackfn /* , thisArg */) {
return $every$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
-
var STRICT_METHOD$7 = arrayMethodIsStrict('reduce');
- var USES_TO_LENGTH$9 = arrayMethodUsesToLength('reduce', { 1: 0 });
// Chrome 80-82 has a critical bug
// https://bugs.chromium.org/p/chromium/issues/detail?id=1049982
var CHROME_BUG = !engineIsNode && engineV8Version > 79 && engineV8Version < 83;
// `Array.prototype.reduce` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.reduce
- _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$7 || !USES_TO_LENGTH$9 || CHROME_BUG }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.reduce
+ _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$7 || CHROME_BUG }, {
reduce: function reduce(callbackfn /* , initialValue */) {
return $reduce$1(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined);
}
var $find$1 = arrayIteration.find;
-
var FIND = 'find';
var SKIPS_HOLES = true;
- var USES_TO_LENGTH$a = arrayMethodUsesToLength(FIND);
-
// Shouldn't skip holes
if (FIND in []) Array(1)[FIND](function () { SKIPS_HOLES = false; });
// `Array.prototype.find` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.find
- _export({ target: 'Array', proto: true, forced: SKIPS_HOLES || !USES_TO_LENGTH$a }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.find
+ _export({ target: 'Array', proto: true, forced: SKIPS_HOLES }, {
find: function find(callbackfn /* , that = undefined */) {
return $find$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables(FIND);
function matcher (selector) {
};
});
- // `Object.defineProperties` method
- // https://tc39.github.io/ecma262/#sec-object.defineproperties
- _export({ target: 'Object', stat: true, forced: !descriptors, sham: !descriptors }, {
- defineProperties: objectDefineProperties
- });
-
function DragEvent(type, _ref) {
var sourceEvent = _ref.sourceEvent,
subject = _ref.subject,
return drag;
}
- var defineProperty$9 = objectDefineProperty.f;
+ var defineProperty$8 = objectDefineProperty.f;
var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f;
})));
// `RegExp` constructor
- // https://tc39.github.io/ecma262/#sec-regexp-constructor
+ // https://tc39.es/ecma262/#sec-regexp-constructor
if (FORCED$b) {
var RegExpWrapper = function RegExp(pattern, flags) {
var thisIsRegExp = this instanceof RegExpWrapper;
return result;
};
var proxy = function (key) {
- key in RegExpWrapper || defineProperty$9(RegExpWrapper, key, {
+ key in RegExpWrapper || defineProperty$8(RegExpWrapper, key, {
configurable: true,
get: function () { return NativeRegExp[key]; },
set: function (it) { NativeRegExp[key] = it; }
redefine(global_1, 'RegExp', RegExpWrapper);
}
- // https://tc39.github.io/ecma262/#sec-get-regexp-@@species
+ // https://tc39.es/ecma262/#sec-get-regexp-@@species
setSpecies('RegExp');
function define (constructor, factory, prototype) {
}
// `Function.prototype.bind` method
- // https://tc39.github.io/ecma262/#sec-function.prototype.bind
+ // https://tc39.es/ecma262/#sec-function.prototype.bind
_export({ target: 'Function', proto: true }, {
bind: functionBind
});
var FAILS_ON_PRIMITIVES$4 = fails(function () { nativeFreeze(1); });
// `Object.freeze` method
- // https://tc39.github.io/ecma262/#sec-object.freeze
+ // https://tc39.es/ecma262/#sec-object.freeze
_export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$4, sham: !freezing }, {
freeze: function freeze(it) {
return nativeFreeze && isObject(it) ? nativeFreeze(onFreeze(it)) : it;
fixRegexpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) {
return [
// `String.prototype.match` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.match
+ // https://tc39.es/ecma262/#sec-string.prototype.match
function match(regexp) {
var O = requireObjectCoercible(this);
var matcher = regexp == undefined ? undefined : regexp[MATCH];
return matcher !== undefined ? matcher.call(regexp, O) : new RegExp(regexp)[MATCH](String(O));
},
// `RegExp.prototype[@@match]` method
- // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@match
+ // https://tc39.es/ecma262/#sec-regexp.prototype-@@match
function (regexp) {
var res = maybeCallNative(nativeMatch, regexp, this);
if (res.done) return res.value;
var objectToArray = {
// `Object.entries` method
- // https://tc39.github.io/ecma262/#sec-object.entries
+ // https://tc39.es/ecma262/#sec-object.entries
entries: createMethod$5(true),
// `Object.values` method
- // https://tc39.github.io/ecma262/#sec-object.values
+ // https://tc39.es/ecma262/#sec-object.values
values: createMethod$5(false)
};
var $values = objectToArray.values;
// `Object.values` method
- // https://tc39.github.io/ecma262/#sec-object.values
+ // https://tc39.es/ecma262/#sec-object.values
_export({ target: 'Object', stat: true }, {
values: function values(O) {
return $values(O);
var $findIndex$1 = arrayIteration.findIndex;
-
var FIND_INDEX = 'findIndex';
var SKIPS_HOLES$1 = true;
- var USES_TO_LENGTH$b = arrayMethodUsesToLength(FIND_INDEX);
-
// Shouldn't skip holes
if (FIND_INDEX in []) Array(1)[FIND_INDEX](function () { SKIPS_HOLES$1 = false; });
// `Array.prototype.findIndex` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.findindex
- _export({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 || !USES_TO_LENGTH$b }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.findindex
+ _export({ target: 'Array', proto: true, forced: SKIPS_HOLES$1 }, {
findIndex: function findIndex(callbackfn /* , that = undefined */) {
return $findIndex$1(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined);
}
});
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables(FIND_INDEX);
var $includes$1 = arrayIncludes.includes;
-
- var USES_TO_LENGTH$c = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 });
-
// `Array.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.includes
- _export({ target: 'Array', proto: true, forced: !USES_TO_LENGTH$c }, {
+ // https://tc39.es/ecma262/#sec-array.prototype.includes
+ _export({ target: 'Array', proto: true }, {
includes: function includes(el /* , fromIndex = 0 */) {
return $includes$1(this, el, arguments.length > 1 ? arguments[1] : undefined);
}
});
- // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables
+ // https://tc39.es/ecma262/#sec-array.prototype-@@unscopables
addToUnscopables('includes');
var notARegexp = function (it) {
};
// `String.prototype.includes` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.includes
+ // https://tc39.es/ecma262/#sec-string.prototype.includes
_export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, {
includes: function includes(searchString /* , position = 0 */) {
return !!~String(requireObjectCoercible(this))
return _detected;
}
+ // `Number.MAX_SAFE_INTEGER` constant
+ // https://tc39.es/ecma262/#sec-number.max_safe_integer
+ _export({ target: 'Number', stat: true }, {
+ MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF
+ });
+
var getOwnPropertyNames$2 = objectGetOwnPropertyNames.f;
var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f;
- var defineProperty$a = objectDefineProperty.f;
+ var defineProperty$9 = objectDefineProperty.f;
var trim$2 = stringTrim.trim;
var NUMBER = 'Number';
var BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER;
// `ToNumber` abstract operation
- // https://tc39.github.io/ecma262/#sec-tonumber
+ // https://tc39.es/ecma262/#sec-tonumber
var toNumber = function (argument) {
var it = toPrimitive(argument, false);
var first, third, radix, maxCode, digits, length, index, code;
};
// `Number` constructor
- // https://tc39.github.io/ecma262/#sec-number-constructor
+ // https://tc39.es/ecma262/#sec-number-constructor
if (isForced_1(NUMBER, !NativeNumber(' 0o1') || !NativeNumber('0b1') || NativeNumber('+0x1'))) {
var NumberWrapper = function Number(value) {
var it = arguments.length < 1 ? 0 : value;
'MAX_VALUE,MIN_VALUE,NaN,NEGATIVE_INFINITY,POSITIVE_INFINITY,' +
// ES2015 (in case, if modules with ES2015 Number statics required before):
'EPSILON,isFinite,isInteger,isNaN,isSafeInteger,MAX_SAFE_INTEGER,' +
- 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger'
+ 'MIN_SAFE_INTEGER,parseFloat,parseInt,isInteger,' +
+ // ESNext
+ 'fromString,range'
).split(','), j$2 = 0, key$1; keys$3.length > j$2; j$2++) {
if (has(NativeNumber, key$1 = keys$3[j$2]) && !has(NumberWrapper, key$1)) {
- defineProperty$a(NumberWrapper, key$1, getOwnPropertyDescriptor$3(NativeNumber, key$1));
+ defineProperty$9(NumberWrapper, key$1, getOwnPropertyDescriptor$3(NativeNumber, key$1));
}
}
NumberWrapper.prototype = NumberPrototype;
redefine(global_1, NUMBER, NumberWrapper);
}
- // `Number.MAX_SAFE_INTEGER` constant
- // https://tc39.github.io/ecma262/#sec-number.max_safe_integer
- _export({ target: 'Number', stat: true }, {
- MAX_SAFE_INTEGER: 0x1FFFFFFFFFFFFF
- });
-
var aesJs = createCommonjsModule(function (module, exports) {
/*! MIT License. Copyright 2015-2018 Richard Moore <me@ricmoo.com>. See LICENSE.txt. */
(function (root) {
}
// `Array.prototype.lastIndexOf` method
- // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof
+ // https://tc39.es/ecma262/#sec-array.prototype.lastindexof
_export({ target: 'Array', proto: true, forced: arrayLastIndexOf !== [].lastIndexOf }, {
lastIndexOf: arrayLastIndexOf
});
var UNSUPPORTED_Y$3 = regexpStickyHelpers.UNSUPPORTED_Y;
// `RegExp.prototype.flags` getter
- // https://tc39.github.io/ecma262/#sec-get-regexp.prototype.flags
+ // https://tc39.es/ecma262/#sec-get-regexp.prototype.flags
if (descriptors && (/./g.flags != 'g' || UNSUPPORTED_Y$3)) {
objectDefineProperty.f(RegExp.prototype, 'flags', {
configurable: true,
}
// `thisNumberValue` abstract operation
- // https://tc39.github.io/ecma262/#sec-thisnumbervalue
+ // https://tc39.es/ecma262/#sec-thisnumbervalue
var thisNumberValue = function (value) {
if (typeof value != 'number' && classofRaw(value) != 'Number') {
throw TypeError('Incorrect invocation');
};
// `String.prototype.repeat` method implementation
- // https://tc39.github.io/ecma262/#sec-string.prototype.repeat
+ // https://tc39.es/ecma262/#sec-string.prototype.repeat
var stringRepeat = ''.repeat || function repeat(count) {
var str = String(requireObjectCoercible(this));
var result = '';
} return n;
};
+ var multiply = function (data, n, c) {
+ var index = -1;
+ var c2 = c;
+ while (++index < 6) {
+ c2 += n * data[index];
+ data[index] = c2 % 1e7;
+ c2 = floor$6(c2 / 1e7);
+ }
+ };
+
+ var divide = function (data, n) {
+ var index = 6;
+ var c = 0;
+ while (--index >= 0) {
+ c += data[index];
+ data[index] = floor$6(c / n);
+ c = (c % n) * 1e7;
+ }
+ };
+
+ var dataToString = function (data) {
+ var index = 6;
+ var s = '';
+ while (--index >= 0) {
+ if (s !== '' || index === 0 || data[index] !== 0) {
+ var t = String(data[index]);
+ s = s === '' ? t : s + stringRepeat.call('0', 7 - t.length) + t;
+ }
+ } return s;
+ };
+
var FORCED$c = nativeToFixed && (
0.00008.toFixed(3) !== '0.000' ||
0.9.toFixed(0) !== '1' ||
});
// `Number.prototype.toFixed` method
- // https://tc39.github.io/ecma262/#sec-number.prototype.tofixed
+ // https://tc39.es/ecma262/#sec-number.prototype.tofixed
_export({ target: 'Number', proto: true, forced: FORCED$c }, {
- // eslint-disable-next-line max-statements
toFixed: function toFixed(fractionDigits) {
var number = thisNumberValue(this);
var fractDigits = toInteger(fractionDigits);
var result = '0';
var e, z, j, k;
- var multiply = function (n, c) {
- var index = -1;
- var c2 = c;
- while (++index < 6) {
- c2 += n * data[index];
- data[index] = c2 % 1e7;
- c2 = floor$6(c2 / 1e7);
- }
- };
-
- var divide = function (n) {
- var index = 6;
- var c = 0;
- while (--index >= 0) {
- c += data[index];
- data[index] = floor$6(c / n);
- c = (c % n) * 1e7;
- }
- };
-
- var dataToString = function () {
- var index = 6;
- var s = '';
- while (--index >= 0) {
- if (s !== '' || index === 0 || data[index] !== 0) {
- var t = String(data[index]);
- s = s === '' ? t : s + stringRepeat.call('0', 7 - t.length) + t;
- }
- } return s;
- };
-
if (fractDigits < 0 || fractDigits > 20) throw RangeError('Incorrect fraction digits');
- // eslint-disable-next-line no-self-compare
+ // eslint-disable-next-line no-self-compare -- NaN check
if (number != number) return 'NaN';
if (number <= -1e21 || number >= 1e21) return String(number);
if (number < 0) {
z *= 0x10000000000000;
e = 52 - e;
if (e > 0) {
- multiply(0, z);
+ multiply(data, 0, z);
j = fractDigits;
while (j >= 7) {
- multiply(1e7, 0);
+ multiply(data, 1e7, 0);
j -= 7;
}
- multiply(pow$2(10, j, 1), 0);
+ multiply(data, pow$2(10, j, 1), 0);
j = e - 1;
while (j >= 23) {
- divide(1 << 23);
+ divide(data, 1 << 23);
j -= 23;
}
- divide(1 << j);
- multiply(1, 1);
- divide(2);
- result = dataToString();
+ divide(data, 1 << j);
+ multiply(data, 1, 1);
+ divide(data, 2);
+ result = dataToString(data);
} else {
- multiply(0, z);
- multiply(1 << -e, 0);
- result = dataToString() + stringRepeat.call('0', fractDigits);
+ multiply(data, 0, z);
+ multiply(data, 1 << -e, 0);
+ result = dataToString(data) + stringRepeat.call('0', fractDigits);
}
}
if (fractDigits > 0) {
});
// `Number.prototype.toPrecision` method
- // https://tc39.github.io/ecma262/#sec-number.prototype.toprecision
+ // https://tc39.es/ecma262/#sec-number.prototype.toprecision
_export({ target: 'Number', proto: true, forced: FORCED$d }, {
toPrecision: function toPrecision(precision) {
return precision === undefined
var exp$1 = Math.exp;
// `Math.expm1` method implementation
- // https://tc39.github.io/ecma262/#sec-math.expm1
+ // https://tc39.es/ecma262/#sec-math.expm1
var mathExpm1 = (!nativeExpm1
// Old FF bug
|| nativeExpm1(10) > 22025.465794806719 || nativeExpm1(10) < 22025.4657948067165168
var stringPad = {
// `String.prototype.padStart` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.padstart
+ // https://tc39.es/ecma262/#sec-string.prototype.padstart
start: createMethod$6(false),
// `String.prototype.padEnd` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.padend
+ // https://tc39.es/ecma262/#sec-string.prototype.padend
end: createMethod$6(true)
};
var nativeDateToISOString = DatePrototype$1.toISOString;
// `Date.prototype.toISOString` method implementation
- // https://tc39.github.io/ecma262/#sec-date.prototype.toisostring
+ // https://tc39.es/ecma262/#sec-date.prototype.toisostring
// PhantomJS / old WebKit fails here:
var dateToIsoString = (fails(function () {
return nativeDateToISOString.call(new Date(-5e13 - 1)) != '0385-07-25T07:06:39.999Z';
} : nativeDateToISOString;
// `Date.prototype.toISOString` method
- // https://tc39.github.io/ecma262/#sec-date.prototype.toisostring
+ // https://tc39.es/ecma262/#sec-date.prototype.toisostring
// PhantomJS / old WebKit has a broken implementations
_export({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== dateToIsoString }, {
toISOString: dateToIsoString
}
// `String.prototype.repeat` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.repeat
+ // https://tc39.es/ecma262/#sec-string.prototype.repeat
_export({ target: 'String', proto: true }, {
repeat: stringRepeat
});
return mode;
}
- // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
- var NON_GENERIC = !!nativePromiseConstructor && fails(function () {
- nativePromiseConstructor.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
- });
-
- // `Promise.prototype.finally` method
- // https://tc39.github.io/ecma262/#sec-promise.prototype.finally
- _export({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
- 'finally': function (onFinally) {
- var C = speciesConstructor(this, getBuiltIn('Promise'));
- var isFunction = typeof onFinally == 'function';
- return this.then(
- isFunction ? function (x) {
- return promiseResolve(C, onFinally()).then(function () { return x; });
- } : onFinally,
- isFunction ? function (e) {
- return promiseResolve(C, onFinally()).then(function () { throw e; });
- } : onFinally
- );
- }
- });
-
- // patch native Promise.prototype for native async functions
- if ( typeof nativePromiseConstructor == 'function' && !nativePromiseConstructor.prototype['finally']) {
- redefine(nativePromiseConstructor.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);
- }
-
// @@search logic
fixRegexpWellKnownSymbolLogic('search', 1, function (SEARCH, nativeSearch, maybeCallNative) {
return [
// `String.prototype.search` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.search
+ // https://tc39.es/ecma262/#sec-string.prototype.search
function search(regexp) {
var O = requireObjectCoercible(this);
var searcher = regexp == undefined ? undefined : regexp[SEARCH];
return searcher !== undefined ? searcher.call(regexp, O) : new RegExp(regexp)[SEARCH](String(O));
},
// `RegExp.prototype[@@search]` method
- // https://tc39.github.io/ecma262/#sec-regexp.prototype-@@search
+ // https://tc39.es/ecma262/#sec-regexp.prototype-@@search
function (regexp) {
var res = maybeCallNative(nativeSearch, regexp, this);
if (res.done) return res.value;
];
});
+ // Safari bug https://bugs.webkit.org/show_bug.cgi?id=200829
+ var NON_GENERIC = !!nativePromiseConstructor && fails(function () {
+ nativePromiseConstructor.prototype['finally'].call({ then: function () { /* empty */ } }, function () { /* empty */ });
+ });
+
+ // `Promise.prototype.finally` method
+ // https://tc39.es/ecma262/#sec-promise.prototype.finally
+ _export({ target: 'Promise', proto: true, real: true, forced: NON_GENERIC }, {
+ 'finally': function (onFinally) {
+ var C = speciesConstructor(this, getBuiltIn('Promise'));
+ var isFunction = typeof onFinally == 'function';
+ return this.then(
+ isFunction ? function (x) {
+ return promiseResolve(C, onFinally()).then(function () { return x; });
+ } : onFinally,
+ isFunction ? function (e) {
+ return promiseResolve(C, onFinally()).then(function () { throw e; });
+ } : onFinally
+ );
+ }
+ });
+
+ // patch native Promise.prototype for native async functions
+ if ( typeof nativePromiseConstructor == 'function' && !nativePromiseConstructor.prototype['finally']) {
+ redefine(nativePromiseConstructor.prototype, 'finally', getBuiltIn('Promise').prototype['finally']);
+ }
+
function quickselect$1(arr, k, left, right, compare) {
quickselectStep(arr, k, left || 0, right || arr.length - 1, compare || defaultCompare);
}
var quot = /"/g;
// B.2.3.2.1 CreateHTML(string, tag, attribute, value)
- // https://tc39.github.io/ecma262/#sec-createhtml
+ // https://tc39.es/ecma262/#sec-createhtml
var createHtml = function (string, tag, attribute, value) {
var S = String(requireObjectCoercible(string));
var p1 = '<' + tag;
};
// `String.prototype.link` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.link
+ // https://tc39.es/ecma262/#sec-string.prototype.link
_export({ target: 'String', proto: true, forced: stringHtmlForced('link') }, {
link: function link(url) {
return createHtml(this, 'a', 'href', url);
}
});
- var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f;
-
-
-
-
-
-
- var nativeEndsWith = ''.endsWith;
- var min$8 = Math.min;
-
- var CORRECT_IS_REGEXP_LOGIC = correctIsRegexpLogic('endsWith');
- // https://github.com/zloirock/core-js/pull/702
- var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
- var descriptor = getOwnPropertyDescriptor$4(String.prototype, 'endsWith');
- return descriptor && !descriptor.writable;
- }();
-
- // `String.prototype.endsWith` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.endswith
- _export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
- endsWith: function endsWith(searchString /* , endPosition = @length */) {
- var that = String(requireObjectCoercible(this));
- notARegexp(searchString);
- var endPosition = arguments.length > 1 ? arguments[1] : undefined;
- var len = toLength(that.length);
- var end = endPosition === undefined ? len : min$8(toLength(endPosition), len);
- var search = String(searchString);
- return nativeEndsWith
- ? nativeEndsWith.call(that, search, end)
- : that.slice(end - search.length, end) === search;
- }
- });
-
- var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f;
-
-
-
-
-
-
- var nativeStartsWith = ''.startsWith;
- var min$9 = Math.min;
-
- var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegexpLogic('startsWith');
- // https://github.com/zloirock/core-js/pull/702
- var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
- var descriptor = getOwnPropertyDescriptor$5(String.prototype, 'startsWith');
- return descriptor && !descriptor.writable;
- }();
-
- // `String.prototype.startsWith` method
- // https://tc39.github.io/ecma262/#sec-string.prototype.startswith
- _export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
- startsWith: function startsWith(searchString /* , position = 0 */) {
- var that = String(requireObjectCoercible(this));
- notARegexp(searchString);
- var index = toLength(min$9(arguments.length > 1 ? arguments[1] : undefined, that.length));
- var search = String(searchString);
- return nativeStartsWith
- ? nativeStartsWith.call(that, search, index)
- : that.slice(index, index + search.length) === search;
- }
- });
-
var $trimEnd = stringTrim.end;
} : ''.trimEnd;
// `String.prototype.{ trimEnd, trimRight }` methods
- // https://github.com/tc39/ecmascript-string-left-right-trim
+ // https://tc39.es/ecma262/#sec-string.prototype.trimend
+ // https://tc39.es/ecma262/#String.prototype.trimright
_export({ target: 'String', proto: true, forced: FORCED$e }, {
trimEnd: trimEnd,
trimRight: trimEnd
};
}
- var text = cap[0].replace(/^ {4}/gm, '');
+ var text = cap[0].replace(/^ {1,4}/gm, '');
return {
type: 'code',
raw: cap[0],
var cap = this.rules.block.heading.exec(src);
if (cap) {
+ var text = cap[2].trim(); // remove trailing #s
+
+ if (/#$/.test(text)) {
+ var trimmed = rtrim$2(text, '#');
+
+ if (this.options.pedantic) {
+ text = trimmed.trim();
+ } else if (!trimmed || / $/.test(trimmed)) {
+ // CommonMark requires space before trailing #s
+ text = trimmed.trim();
+ }
+ }
+
return {
type: 'heading',
raw: cap[0],
depth: cap[1].length,
- text: cap[2]
+ text: text
};
}
}
if (i !== l - 1) {
bnext = this.rules.block.listItemStart.exec(itemMatch[i + 1]);
- if (bnext[1].length > bcurr[0].length || bnext[1].length > 3) {
+ if (!this.options.pedantic ? bnext[1].length > bcurr[0].length || bnext[1].length > 3 : bnext[1].length > bcurr[1].length) {
// nested list
itemMatch.splice(i, 2, itemMatch[i] + '\n' + itemMatch[i + 1]);
i--;
} // Check for task list items
- istask = /^\[[ xX]\] /.test(item);
- ischecked = undefined;
+ if (this.options.gfm) {
+ istask = /^\[[ xX]\] /.test(item);
+ ischecked = undefined;
- if (istask) {
- ischecked = item[1] !== ' ';
- item = item.replace(/^\[[ xX]\] +/, '');
+ if (istask) {
+ ischecked = item[1] !== ' ';
+ item = item.replace(/^\[[ xX]\] +/, '');
+ }
}
list.items.push({
var cap = this.rules.inline.link.exec(src);
if (cap) {
- var lastParenIndex = findClosingBracket$1(cap[2], '()');
+ var trimmedUrl = cap[2].trim();
+
+ if (!this.options.pedantic && /^</.test(trimmedUrl)) {
+ // commonmark requires matching angle brackets
+ if (!/>$/.test(trimmedUrl)) {
+ return;
+ } // ending angle bracket cannot be escaped
+
- if (lastParenIndex > -1) {
- var start = cap[0].indexOf('!') === 0 ? 5 : 4;
- var linkLen = start + cap[1].length + lastParenIndex;
- cap[2] = cap[2].substring(0, lastParenIndex);
- cap[0] = cap[0].substring(0, linkLen).trim();
- cap[3] = '';
+ var rtrimSlash = rtrim$2(trimmedUrl.slice(0, -1), '\\');
+
+ if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {
+ return;
+ }
+ } else {
+ // find closing parenthesis
+ var lastParenIndex = findClosingBracket$1(cap[2], '()');
+
+ if (lastParenIndex > -1) {
+ var start = cap[0].indexOf('!') === 0 ? 5 : 4;
+ var linkLen = start + cap[1].length + lastParenIndex;
+ cap[2] = cap[2].substring(0, lastParenIndex);
+ cap[0] = cap[0].substring(0, linkLen).trim();
+ cap[3] = '';
+ }
}
var href = cap[2];
var title = '';
if (this.options.pedantic) {
+ // split pedantic href and title
var link = /^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(href);
if (link) {
href = link[1];
title = link[3];
- } else {
- title = '';
}
} else {
title = cap[3] ? cap[3].slice(1, -1) : '';
}
- href = href.trim().replace(/^<([\s\S]*)>$/, '$1');
- var token = outputLink(cap, {
+ href = href.trim();
+
+ if (/^</.test(href)) {
+ if (this.options.pedantic && !/>$/.test(trimmedUrl)) {
+ // pedantic allows starting angle bracket without ending angle bracket
+ href = href.slice(1);
+ } else {
+ href = href.slice(1, -1);
+ }
+ }
+
+ return outputLink(cap, {
href: href ? href.replace(this.rules.inline._escapes, '$1') : href,
title: title ? title.replace(this.rules.inline._escapes, '$1') : title
}, cap[0]);
- return token;
}
}
}, {
};
}
- var token = outputLink(cap, link, cap[0]);
- return token;
+ return outputLink(cap, link, cap[0]);
}
}
}, {
if (cap) {
var text = cap[2].replace(/\n/g, ' ');
var hasNonSpaceChars = /[^ ]/.test(text);
- var hasSpaceCharsOnBothEnds = text.startsWith(' ') && text.endsWith(' ');
+ var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);
if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {
text = text.substring(1, text.length - 1);
return {
type: 'del',
raw: cap[0],
- text: cap[1]
+ text: cap[2]
};
}
}
*/
var block = {
- newline: /^\n+/,
- code: /^( {4}[^\n]+\n*)+/,
+ newline: /^(?: *(?:\n|$))+/,
+ code: /^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,
fences: /^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?:\n+|$)|$)/,
hr: /^ {0,3}((?:- *){3,}|(?:_ *){3,}|(?:\* *){3,})(?:\n+|$)/,
- heading: /^ {0,3}(#{1,6}) +([^\n]*?)(?: +#+)? *(?:\n+|$)/,
+ heading: /^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,
blockquote: /^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,
list: /^( {0,3})(bull) [\s\S]+?(?:hr|def|\n{2,}(?! )(?! {0,3}bull )\n*|\s*$)/,
html: '^ {0,3}(?:' // optional indentation
lheading: /^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,
// regex template, placeholders will be replaced according to different paragraph
// interruption rules of commonmark and the original markdown spec:
- _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html)[^\n]+)*)/,
+ _paragraph: /^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html| +\n)[^\n]+)*)/,
text: /^[^\n]+/
};
block._label = /(?!\s*\])(?:\\[\[\]]|[^\[\]])+/;
html: edit$1('^ *(?:comment *(?:\\n|\\s*$)' + '|<(tag)[\\s\\S]+?</\\1> *(?:\\n{2,}|\\s*$)' // closed tag
+ '|<tag(?:"[^"]*"|\'[^\']*\'|\\s[^\'"/>\\s]*)*?/?> *(?:\\n{2,}|\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\b)\\w+(?!:|[^\\w\\s@]*@)\\b').getRegex(),
def: /^ *\[([^\]]+)\]: *<?([^\s>]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,
- heading: /^ *(#{1,6}) *([^\n]+?) *(?:#+ *)?(?:\n+|$)/,
+ heading: /^(#{1,6})(.*)(?:\n+|$)/,
fences: noopTest$1,
// fences not supported
paragraph: edit$1(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()
inline._attribute = /\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/;
inline.tag = edit$1(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();
inline._label = /(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/;
- inline._href = /<(?:\\[<>]?|[^\s<>\\])*>|[^\s\x00-\x1f]*/;
+ inline._href = /<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/;
inline._title = /"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/;
inline.link = edit$1(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();
inline.reflink = edit$1(inline.reflink).replace('label', inline._label).getRegex();
_extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,
url: /^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,
_backpedal: /(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,
- del: /^~+(?=\S)([\s\S]*?\S)~+/,
- text: /^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
+ del: /^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,
+ text: /^([`~]+|[^`~])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\<!\[`*~]|\b_|https?:\/\/|ftp:\/\/|www\.|$)|[^ ](?= {2,}\n)|[^a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-](?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@))/
});
inline.gfm.url = edit$1(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();
/**
_createClass(Lexer, [{
key: "lex",
-
+ value:
/**
* Preprocessing
*/
- value: function lex(src) {
+ function lex(src) {
src = src.replace(/\r\n|\r/g, '\n').replace(/\t/g, ' ');
this.blockTokens(src, this.tokens, true);
this.inline(this.tokens);
value: function blockTokens(src) {
var tokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var top = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true;
- src = src.replace(/^ +$/gm, '');
+
+ if (this.options.pedantic) {
+ src = src.replace(/^ +$/gm, '');
+ }
+
var token, i, l, lastToken;
while (src) {
var tokens = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var inLink = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
var inRawBlock = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : false;
- var prevChar = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : '';
var token; // String with links masked to avoid interference with em and strong
var maskedSrc = src;
- var match; // Mask out reflinks
+ var match;
+ var keepPrevChar, prevChar; // Mask out reflinks
if (this.tokens.links) {
var links = Object.keys(this.tokens.links);
}
while (src) {
- // escape
+ if (!keepPrevChar) {
+ prevChar = '';
+ }
+
+ keepPrevChar = false; // escape
+
if (token = this.tokenizer.escape(src)) {
src = src.substring(token.raw.length);
tokens.push(token);
if (token = this.tokenizer.inlineText(src, inRawBlock, smartypants)) {
src = src.substring(token.raw.length);
prevChar = token.raw.slice(-1);
+ keepPrevChar = true;
tokens.push(token);
continue;
}
return tokens;
}
}], [{
- key: "lex",
-
+ key: "rules",
+ get: function get() {
+ return {
+ block: block$1,
+ inline: inline$1
+ };
+ }
/**
* Static Lex Method
*/
+
+ }, {
+ key: "lex",
value: function lex(src, options) {
var lexer = new Lexer(options);
return lexer.lex(src);
var lexer = new Lexer(options);
return lexer.inlineTokens(src);
}
- }, {
- key: "rules",
- get: function get() {
- return {
- block: block$1,
- inline: inline$1
- };
- }
}]);
return Lexer;
}
}
+ _code = _code.replace(/\n$/, '') + '\n';
+
if (!lang) {
return '<pre><code>' + (escaped ? _code : escape$2(_code, true)) + '</code></pre>\n';
}
_createClass(TextRenderer, [{
key: "strong",
- // no need for block level renderers
- value: function strong(text) {
+ value: // no need for block level renderers
+ function strong(text) {
return text;
}
}, {
_createClass(Parser, [{
key: "parse",
-
+ value:
/**
* Parse Loop
*/
- value: function parse(tokens) {
+ function parse(tokens) {
var top = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
var out = '',
i,
});
// `Date.prototype.toJSON` method
- // https://tc39.github.io/ecma262/#sec-date.prototype.tojson
+ // https://tc39.es/ecma262/#sec-date.prototype.tojson
_export({ target: 'Date', proto: true, forced: FORCED$f }, {
- // eslint-disable-next-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
toJSON: function toJSON(key) {
var O = toObject(this);
var pv = toPrimitive(O);
return root$1.Date.now();
};
+ /** Used to match a single whitespace character. */
+ var reWhitespace = /\s/;
+ /**
+ * Used by `_.trim` and `_.trimEnd` to get the index of the last non-whitespace
+ * character of `string`.
+ *
+ * @private
+ * @param {string} string The string to inspect.
+ * @returns {number} Returns the index of the last non-whitespace character.
+ */
+
+ function trimmedEndIndex(string) {
+ var index = string.length;
+
+ while (index-- && reWhitespace.test(string.charAt(index))) {}
+
+ return index;
+ }
+
+ /** Used to match leading whitespace. */
+
+ var reTrimStart = /^\s+/;
+ /**
+ * The base implementation of `_.trim`.
+ *
+ * @private
+ * @param {string} string The string to trim.
+ * @returns {string} Returns the trimmed string.
+ */
+
+ function baseTrim(string) {
+ return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, '') : string;
+ }
+
/** Built-in value references. */
var _Symbol = root$1.Symbol;
/** Used as references for various `Number` constants. */
var NAN = 0 / 0;
- /** Used to match leading and trailing whitespace. */
-
- var reTrim = /^\s+|\s+$/g;
/** Used to detect bad signed hexadecimal string values. */
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
return value === 0 ? value : +value;
}
- value = value.replace(reTrim, '');
+ value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var options = {
skipSeen: true
};
- return parseXML(xml, function (err, results) {
- if (err) {
- return callback(err);
- } else {
- return callback(undefined, results[0]);
- }
- }, options);
- }
- },
- // Load the details of the logged-in user
- // GET /api/0.6/user/details
- userDetails: function userDetails(callback) {
- if (_userDetails) {
- // retrieve cached
- return callback(undefined, _userDetails);
- }
-
- oauth.xhr({
- method: 'GET',
- path: '/api/0.6/user/details'
- }, wrapcb(this, done, _connectionID));
-
- function done(err, xml) {
- if (err) {
- return callback(err);
- }
-
- var options = {
- skipSeen: false
- };
- return parseXML(xml, function (err, results) {
- if (err) {
- return callback(err);
- } else {
- _userDetails = results[0];
- return callback(undefined, _userDetails);
- }
- }, options);
- }
- },
- // Load previous changesets for the logged in user
- // GET /api/0.6/changesets?user=#id
- userChangesets: function userChangesets(callback) {
- if (_userChangesets) {
- // retrieve cached
- return callback(undefined, _userChangesets);
- }
-
- this.userDetails(wrapcb(this, gotDetails, _connectionID));
-
- function gotDetails(err, user) {
- if (err) {
- return callback(err);
- }
-
- oauth.xhr({
- method: 'GET',
- path: '/api/0.6/changesets?user=' + user.id
- }, wrapcb(this, done, _connectionID));
- }
-
- function done(err, xml) {
- if (err) {
- return callback(err);
- }
-
- _userChangesets = Array.prototype.map.call(xml.getElementsByTagName('changeset'), function (changeset) {
- return {
- tags: getTags(changeset)
- };
- }).filter(function (changeset) {
- var comment = changeset.tags.comment;
- return comment && comment !== '';
- });
- return callback(undefined, _userChangesets);
- }
- },
- // Fetch the status of the OSM API
- // GET /api/capabilities
- status: function status(callback) {
- var url = urlroot + '/api/capabilities';
- var errback = wrapcb(this, done, _connectionID);
- d3_xml(url).then(function (data) {
- errback(null, data);
- })["catch"](function (err) {
- errback(err.message);
- });
-
- function done(err, xml) {
- if (err) {
- // the status is null if no response could be retrieved
- return callback(err, null);
- } // update blocklists
-
-
- var elements = xml.getElementsByTagName('blacklist');
- var regexes = [];
-
- for (var i = 0; i < elements.length; i++) {
- var regexString = elements[i].getAttribute('regex'); // needs unencode?
-
- if (regexString) {
- try {
- var regex = new RegExp(regexString);
- regexes.push(regex);
- } catch (e) {
- /* noop */
- }
- }
- }
-
- if (regexes.length) {
- _imageryBlocklists = regexes;
- }
-
- if (_rateLimitError) {
- return callback(_rateLimitError, 'rateLimited');
- } else {
- var waynodes = xml.getElementsByTagName('waynodes');
- var maxWayNodes = waynodes.length && parseInt(waynodes[0].getAttribute('maximum'), 10);
- if (maxWayNodes && isFinite(maxWayNodes)) _maxWayNodes = maxWayNodes;
- var apiStatus = xml.getElementsByTagName('status');
- var val = apiStatus[0].getAttribute('api');
- return callback(undefined, val);
- }
- }
- },
- // Calls `status` and dispatches an `apiStatusChange` event if the returned
- // status differs from the cached status.
- reloadApiStatus: function reloadApiStatus() {
- // throttle to avoid unnecessary API calls
- if (!this.throttledReloadApiStatus) {
- var that = this;
- this.throttledReloadApiStatus = throttle(function () {
- that.status(function (err, status) {
- if (status !== _cachedApiStatus) {
- _cachedApiStatus = status;
- dispatch$6.call('apiStatusChange', that, err, status);
- }
- });
- }, 500);
- }
-
- this.throttledReloadApiStatus();
- },
- // Returns the maximum number of nodes a single way can have
- maxWayNodes: function maxWayNodes() {
- return _maxWayNodes;
- },
- // Load data (entities) from the API in tiles
- // GET /api/0.6/map?bbox=
- loadTiles: function loadTiles(projection, callback) {
- if (_off) return; // determine the needed tiles to cover the view
-
- var tiles = tiler$5.zoomExtent([_tileZoom$3, _tileZoom$3]).getTiles(projection); // abort inflight requests that are no longer needed
-
- var hadRequests = hasInflightRequests(_tileCache);
- abortUnwantedRequests$3(_tileCache, tiles);
-
- if (hadRequests && !hasInflightRequests(_tileCache)) {
- dispatch$6.call('loaded'); // stop the spinner
- } // issue new requests..
-
-
- tiles.forEach(function (tile) {
- this.loadTile(tile, callback);
- }, this);
- },
- // Load a single data tile
- // GET /api/0.6/map?bbox=
- loadTile: function loadTile(tile, callback) {
- if (_off) return;
- if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
-
- if (!hasInflightRequests(_tileCache)) {
- dispatch$6.call('loading'); // start the spinner
- }
-
- var path = '/api/0.6/map.json?bbox=';
- var options = {
- skipSeen: true
- };
- _tileCache.inflight[tile.id] = this.loadFromAPI(path + tile.extent.toParam(), tileCallback, options);
-
- function tileCallback(err, parsed) {
- delete _tileCache.inflight[tile.id];
-
- if (!err) {
- delete _tileCache.toLoad[tile.id];
- _tileCache.loaded[tile.id] = true;
- var bbox = tile.extent.bbox();
- bbox.id = tile.id;
-
- _tileCache.rtree.insert(bbox);
- }
-
- if (callback) {
- callback(err, Object.assign({
- data: parsed
- }, tile));
- }
-
- if (!hasInflightRequests(_tileCache)) {
- dispatch$6.call('loaded'); // stop the spinner
- }
- }
- },
- isDataLoaded: function isDataLoaded(loc) {
- var bbox = {
- minX: loc[0],
- minY: loc[1],
- maxX: loc[0],
- maxY: loc[1]
- };
- return _tileCache.rtree.collides(bbox);
- },
- // load the tile that covers the given `loc`
- loadTileAtLoc: function loadTileAtLoc(loc, callback) {
- // Back off if the toLoad queue is filling up.. re #6417
- // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
- // let users safely edit geometries which extend to unloaded tiles. We can drop some.)
- if (Object.keys(_tileCache.toLoad).length > 50) return;
- var k = geoZoomToScale(_tileZoom$3 + 1);
- var offset = geoRawMercator().scale(k)(loc);
- var projection = geoRawMercator().transform({
- k: k,
- x: -offset[0],
- y: -offset[1]
- });
- var tiles = tiler$5.zoomExtent([_tileZoom$3, _tileZoom$3]).getTiles(projection);
- tiles.forEach(function (tile) {
- if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
- _tileCache.toLoad[tile.id] = true;
- this.loadTile(tile, callback);
- }, this);
- },
- // Load notes from the API in tiles
- // GET /api/0.6/notes?bbox=
- loadNotes: function loadNotes(projection, noteOptions) {
- noteOptions = Object.assign({
- limit: 10000,
- closed: 7
- }, noteOptions);
- if (_off) return;
- var that = this;
- var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
-
- var throttleLoadUsers = throttle(function () {
- var uids = Object.keys(_userCache.toLoad);
- if (!uids.length) return;
- that.loadUsers(uids, function () {}); // eagerly load user details
- }, 750); // determine the needed tiles to cover the view
-
-
- var tiles = tiler$5.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection); // abort inflight requests that are no longer needed
-
- abortUnwantedRequests$3(_noteCache, tiles); // issue new requests..
-
- tiles.forEach(function (tile) {
- if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
- var options = {
- skipSeen: false
- };
- _noteCache.inflight[tile.id] = that.loadFromAPI(path + tile.extent.toParam(), function (err) {
- delete _noteCache.inflight[tile.id];
-
- if (!err) {
- _noteCache.loaded[tile.id] = true;
- }
-
- throttleLoadUsers();
- dispatch$6.call('loadedNotes');
- }, options);
- });
- },
- // Create a note
- // POST /api/0.6/notes?params
- postNoteCreate: function postNoteCreate(note, callback) {
- if (!this.authenticated()) {
- return callback({
- message: 'Not Authenticated',
- status: -3
- }, note);
- }
-
- if (_noteCache.inflightPost[note.id]) {
- return callback({
- message: 'Note update already inflight',
- status: -2
- }, note);
- }
-
- if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
-
- var comment = note.newComment;
-
- if (note.newCategory && note.newCategory !== 'None') {
- comment += ' #' + note.newCategory;
- }
-
- var path = '/api/0.6/notes?' + utilQsString({
- lon: note.loc[0],
- lat: note.loc[1],
- text: comment
- });
- _noteCache.inflightPost[note.id] = oauth.xhr({
- method: 'POST',
- path: path
- }, wrapcb(this, done, _connectionID));
-
- function done(err, xml) {
- delete _noteCache.inflightPost[note.id];
-
- if (err) {
- return callback(err);
- } // we get the updated note back, remove from caches and reparse..
-
-
- this.removeNote(note);
- var options = {
- skipSeen: false
- };
- return parseXML(xml, function (err, results) {
- if (err) {
- return callback(err);
- } else {
- return callback(undefined, results[0]);
- }
- }, options);
- }
- },
- // Update a note
- // POST /api/0.6/notes/#id/comment?text=comment
- // POST /api/0.6/notes/#id/close?text=comment
- // POST /api/0.6/notes/#id/reopen?text=comment
- postNoteUpdate: function postNoteUpdate(note, newStatus, callback) {
- if (!this.authenticated()) {
- return callback({
- message: 'Not Authenticated',
- status: -3
- }, note);
- }
-
- if (_noteCache.inflightPost[note.id]) {
- return callback({
- message: 'Note update already inflight',
- status: -2
- }, note);
- }
-
- var action;
-
- if (note.status !== 'closed' && newStatus === 'closed') {
- action = 'close';
- } else if (note.status !== 'open' && newStatus === 'open') {
- action = 'reopen';
- } else {
- action = 'comment';
- if (!note.newComment) return; // when commenting, comment required
- }
-
- var path = '/api/0.6/notes/' + note.id + '/' + action;
-
- if (note.newComment) {
- path += '?' + utilQsString({
- text: note.newComment
- });
- }
-
- _noteCache.inflightPost[note.id] = oauth.xhr({
- method: 'POST',
- path: path
- }, wrapcb(this, done, _connectionID));
-
- function done(err, xml) {
- delete _noteCache.inflightPost[note.id];
-
- if (err) {
- return callback(err);
- } // we get the updated note back, remove from caches and reparse..
-
-
- this.removeNote(note); // update closed note cache - used to populate `closed:note` changeset tag
-
- if (action === 'close') {
- _noteCache.closed[note.id] = true;
- } else if (action === 'reopen') {
- delete _noteCache.closed[note.id];
- }
-
- var options = {
- skipSeen: false
- };
- return parseXML(xml, function (err, results) {
- if (err) {
- return callback(err);
- } else {
- return callback(undefined, results[0]);
- }
- }, options);
- }
- },
- "switch": function _switch(options) {
- urlroot = options.urlroot;
- oauth.options(Object.assign({
- url: urlroot,
- loading: authLoading,
- done: authDone
- }, options));
- this.reset();
- this.userChangesets(function () {}); // eagerly load user details/changesets
-
- dispatch$6.call('change');
- return this;
- },
- toggle: function toggle(val) {
- _off = !val;
- return this;
- },
- isChangesetInflight: function isChangesetInflight() {
- return !!_changeset.inflight;
- },
- // get/set cached data
- // This is used to save/restore the state when entering/exiting the walkthrough
- // Also used for testing purposes.
- caches: function caches(obj) {
- function cloneCache(source) {
- var target = {};
- Object.keys(source).forEach(function (k) {
- if (k === 'rtree') {
- target.rtree = new RBush().fromJSON(source.rtree.toJSON()); // clone rbush
- } else if (k === 'note') {
- target.note = {};
- Object.keys(source.note).forEach(function (id) {
- target.note[id] = osmNote(source.note[id]); // copy notes
- });
- } else {
- target[k] = JSON.parse(JSON.stringify(source[k])); // clone deep
- }
- });
- return target;
- }
-
- if (!arguments.length) {
- return {
- tile: cloneCache(_tileCache),
- note: cloneCache(_noteCache),
- user: cloneCache(_userCache)
- };
- } // access caches directly for testing (e.g., loading notes rtree)
-
-
- if (obj === 'get') {
- return {
- tile: _tileCache,
- note: _noteCache,
- user: _userCache
- };
- }
-
- if (obj.tile) {
- _tileCache = obj.tile;
- _tileCache.inflight = {};
- }
-
- if (obj.note) {
- _noteCache = obj.note;
- _noteCache.inflight = {};
- _noteCache.inflightPost = {};
- }
-
- if (obj.user) {
- _userCache = obj.user;
- }
-
- return this;
- },
- logout: function logout() {
- _userChangesets = undefined;
- _userDetails = undefined;
- oauth.logout();
- dispatch$6.call('change');
- return this;
- },
- authenticated: function authenticated() {
- return oauth.authenticated();
- },
- authenticate: function authenticate(callback) {
- var that = this;
- var cid = _connectionID;
- _userChangesets = undefined;
- _userDetails = undefined;
-
- function done(err, res) {
- if (err) {
- if (callback) callback(err);
- return;
- }
-
- if (that.getConnectionId() !== cid) {
- if (callback) callback({
- message: 'Connection Switched',
- status: -1
- });
- return;
- }
-
- _rateLimitError = undefined;
- dispatch$6.call('change');
- if (callback) callback(err, res);
- that.userChangesets(function () {}); // eagerly load user details/changesets
- }
-
- return oauth.authenticate(done);
- },
- imageryBlocklists: function imageryBlocklists() {
- return _imageryBlocklists;
- },
- tileZoom: function tileZoom(val) {
- if (!arguments.length) return _tileZoom$3;
- _tileZoom$3 = val;
- return this;
- },
- // get all cached notes covering the viewport
- notes: function notes(projection) {
- var viewport = projection.clipExtent();
- var min = [viewport[0][0], viewport[1][1]];
- var max = [viewport[1][0], viewport[0][1]];
- var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
- return _noteCache.rtree.search(bbox).map(function (d) {
- return d.data;
- });
- },
- // get a single note from the cache
- getNote: function getNote(id) {
- return _noteCache.note[id];
- },
- // remove a single note from the cache
- removeNote: function removeNote(note) {
- if (!(note instanceof osmNote) || !note.id) return;
- delete _noteCache.note[note.id];
- updateRtree$3(encodeNoteRtree(note), false); // false = remove
- },
- // replace a single note in the cache
- replaceNote: function replaceNote(note) {
- if (!(note instanceof osmNote) || !note.id) return;
- _noteCache.note[note.id] = note;
- updateRtree$3(encodeNoteRtree(note), true); // true = replace
-
- return note;
- },
- // Get an array of note IDs closed during this session.
- // Used to populate `closed:note` changeset tag
- getClosedIDs: function getClosedIDs() {
- return Object.keys(_noteCache.closed).sort();
- }
- };
-
- var _apibase = 'https://wiki.openstreetmap.org/w/api.php';
- var _inflight$1 = {};
- var _wikibaseCache = {};
- var _localeIDs = {
- en: false
- };
-
- var debouncedRequest = debounce(request, 500, {
- leading: false
- });
-
- function request(url, callback) {
- if (_inflight$1[url]) return;
- var controller = new AbortController();
- _inflight$1[url] = controller;
- d3_json(url, {
- signal: controller.signal
- }).then(function (result) {
- delete _inflight$1[url];
- if (callback) callback(null, result);
- })["catch"](function (err) {
- delete _inflight$1[url];
- if (err.name === 'AbortError') return;
- if (callback) callback(err.message);
- });
- }
-
- var serviceOsmWikibase = {
- init: function init() {
- _inflight$1 = {};
- _wikibaseCache = {};
- _localeIDs = {};
- },
- reset: function reset() {
- Object.values(_inflight$1).forEach(function (controller) {
- controller.abort();
- });
- _inflight$1 = {};
- },
-
- /**
- * Get the best value for the property, or undefined if not found
- * @param entity object from wikibase
- * @param property string e.g. 'P4' for image
- * @param langCode string e.g. 'fr' for French
- */
- claimToValue: function claimToValue(entity, property, langCode) {
- if (!entity.claims[property]) return undefined;
- var locale = _localeIDs[langCode];
- var preferredPick, localePick;
- entity.claims[property].forEach(function (stmt) {
- // If exists, use value limited to the needed language (has a qualifier P26 = locale)
- // Or if not found, use the first value with the "preferred" rank
- if (!preferredPick && stmt.rank === 'preferred') {
- preferredPick = stmt;
- }
-
- if (locale && stmt.qualifiers && stmt.qualifiers.P26 && stmt.qualifiers.P26[0].datavalue.value.id === locale) {
- localePick = stmt;
- }
- });
- var result = localePick || preferredPick;
-
- if (result) {
- var datavalue = result.mainsnak.datavalue;
- return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
- } else {
- return undefined;
- }
- },
-
- /**
- * Convert monolingual property into a key-value object (language -> value)
- * @param entity object from wikibase
- * @param property string e.g. 'P31' for monolingual wiki page title
- */
- monolingualClaimToValueObj: function monolingualClaimToValueObj(entity, property) {
- if (!entity || !entity.claims[property]) return undefined;
- return entity.claims[property].reduce(function (acc, obj) {
- var value = obj.mainsnak.datavalue.value;
- acc[value.language] = value.text;
- return acc;
- }, {});
- },
- toSitelink: function toSitelink(key, value) {
- var result = value ? 'Tag:' + key + '=' + value : 'Key:' + key;
- return result.replace(/_/g, ' ').trim();
- },
- //
- // Pass params object of the form:
- // {
- // key: 'string',
- // value: 'string',
- // langCode: 'string'
- // }
- //
- getEntity: function getEntity(params, callback) {
- var doRequest = params.debounce ? debouncedRequest : request;
- var that = this;
- var titles = [];
- var result = {};
- var rtypeSitelink = params.key === 'type' && params.value ? ('Relation:' + params.value).replace(/_/g, ' ').trim() : false;
- var keySitelink = params.key ? this.toSitelink(params.key) : false;
- var tagSitelink = params.key && params.value ? this.toSitelink(params.key, params.value) : false;
- var localeSitelink;
-
- if (params.langCodes) {
- params.langCodes.forEach(function (langCode) {
- if (_localeIDs[langCode] === undefined) {
- // If this is the first time we are asking about this locale,
- // fetch corresponding entity (if it exists), and cache it.
- // If there is no such entry, cache `false` value to avoid re-requesting it.
- localeSitelink = ('Locale:' + langCode).replace(/_/g, ' ').trim();
- titles.push(localeSitelink);
- }
- });
- }
-
- if (rtypeSitelink) {
- if (_wikibaseCache[rtypeSitelink]) {
- result.rtype = _wikibaseCache[rtypeSitelink];
- } else {
- titles.push(rtypeSitelink);
- }
- }
-
- if (keySitelink) {
- if (_wikibaseCache[keySitelink]) {
- result.key = _wikibaseCache[keySitelink];
- } else {
- titles.push(keySitelink);
- }
- }
-
- if (tagSitelink) {
- if (_wikibaseCache[tagSitelink]) {
- result.tag = _wikibaseCache[tagSitelink];
- } else {
- titles.push(tagSitelink);
- }
- }
-
- if (!titles.length) {
- // Nothing to do, we already had everything in the cache
- return callback(null, result);
- } // Requesting just the user language code
- // If backend recognizes the code, it will perform proper fallbacks,
- // and the result will contain the requested code. If not, all values are returned:
- // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
- // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
-
-
- var obj = {
- action: 'wbgetentities',
- sites: 'wiki',
- titles: titles.join('|'),
- languages: params.langCodes.join('|'),
- languagefallback: 1,
- origin: '*',
- format: 'json' // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
- // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
- // formatversion: 2,
-
- };
- var url = _apibase + '?' + utilQsString(obj);
- doRequest(url, function (err, d) {
- if (err) {
- callback(err);
- } else if (!d.success || d.error) {
- callback(d.error.messages.map(function (v) {
- return v.html['*'];
- }).join('<br>'));
- } else {
- var localeID = false;
- Object.values(d.entities).forEach(function (res) {
- if (res.missing !== '') {
- var title = res.sitelinks.wiki.title;
-
- if (title === rtypeSitelink) {
- _wikibaseCache[rtypeSitelink] = res;
- result.rtype = res;
- } else if (title === keySitelink) {
- _wikibaseCache[keySitelink] = res;
- result.key = res;
- } else if (title === tagSitelink) {
- _wikibaseCache[tagSitelink] = res;
- result.tag = res;
- } else if (title === localeSitelink) {
- localeID = res.id;
- } else {
- console.log('Unexpected title ' + title); // eslint-disable-line no-console
- }
- }
- });
-
- if (localeSitelink) {
- // If locale ID is not found, store false to prevent repeated queries
- that.addLocale(params.langCodes[0], localeID);
- }
-
- callback(null, result);
- }
- });
- },
- //
- // Pass params object of the form:
- // {
- // key: 'string', // required
- // value: 'string' // optional
- // }
- //
- // Get an result object used to display tag documentation
- // {
- // title: 'string',
- // description: 'string',
- // editURL: 'string',
- // imageURL: 'string',
- // wiki: { title: 'string', text: 'string', url: 'string' }
- // }
- //
- getDocs: function getDocs(params, callback) {
- var that = this;
- var langCodes = _mainLocalizer.localeCodes().map(function (code) {
- return code.toLowerCase();
- });
- params.langCodes = langCodes;
- this.getEntity(params, function (err, data) {
- if (err) {
- callback(err);
- return;
- }
-
- var entity = data.rtype || data.tag || data.key;
-
- if (!entity) {
- callback('No entity');
- return;
- }
-
- var i;
- var description;
-
- for (i in langCodes) {
- var _code = langCodes[i];
-
- if (entity.descriptions[_code] && entity.descriptions[_code].language === _code) {
- description = entity.descriptions[_code];
- break;
- }
- }
-
- if (!description && Object.values(entity.descriptions).length) description = Object.values(entity.descriptions)[0]; // prepare result
-
- var result = {
- title: entity.title,
- description: description ? description.value : '',
- descriptionLocaleCode: description ? description.language : '',
- editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
- }; // add image
-
- if (entity.claims) {
- var imageroot;
- var image = that.claimToValue(entity, 'P4', langCodes[0]);
-
- if (image) {
- imageroot = 'https://commons.wikimedia.org/w/index.php';
- } else {
- image = that.claimToValue(entity, 'P28', langCodes[0]);
-
- if (image) {
- imageroot = 'https://wiki.openstreetmap.org/w/index.php';
- }
- }
-
- if (imageroot && image) {
- result.imageURL = imageroot + '?' + utilQsString({
- title: 'Special:Redirect/file/' + image,
- width: 400
- });
- }
- } // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
- // If neither tag nor key data item contain a wiki page in the needed language nor English,
- // get the first found wiki page from either the tag or the key item.
-
-
- var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
- var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
- var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
- var wikis = [rtypeWiki, tagWiki, keyWiki];
-
- for (i in wikis) {
- var wiki = wikis[i];
-
- for (var j in langCodes) {
- var code = langCodes[j];
- var referenceId = langCodes[0].split('-')[0] !== 'en' && code.split('-')[0] === 'en' ? 'inspector.wiki_en_reference' : 'inspector.wiki_reference';
- var info = getWikiInfo(wiki, code, referenceId);
-
- if (info) {
- result.wiki = info;
- break;
- }
- }
-
- if (result.wiki) break;
- }
-
- callback(null, result); // Helper method to get wiki info if a given language exists
-
- function getWikiInfo(wiki, langCode, tKey) {
- if (wiki && wiki[langCode]) {
- return {
- title: wiki[langCode],
- text: tKey,
- url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
- };
- }
- }
- });
- },
- addLocale: function addLocale(langCode, qid) {
- // Makes it easier to unit test
- _localeIDs[langCode] = qid;
- },
- apibase: function apibase(val) {
- if (!arguments.length) return _apibase;
- _apibase = val;
- return this;
- }
- };
-
- var jsonpCache = {};
- window.jsonpCache = jsonpCache;
- function jsonpRequest(url, callback) {
- var request = {
- abort: function abort() {}
- };
-
- if (window.JSONP_FIX) {
- if (window.JSONP_DELAY === 0) {
- callback(window.JSONP_FIX);
- } else {
- var t = window.setTimeout(function () {
- callback(window.JSONP_FIX);
- }, window.JSONP_DELAY || 0);
-
- request.abort = function () {
- window.clearTimeout(t);
- };
+ return parseXML(xml, function (err, results) {
+ if (err) {
+ return callback(err);
+ } else {
+ return callback(undefined, results[0]);
+ }
+ }, options);
+ }
+ },
+ // Load the details of the logged-in user
+ // GET /api/0.6/user/details
+ userDetails: function userDetails(callback) {
+ if (_userDetails) {
+ // retrieve cached
+ return callback(undefined, _userDetails);
}
- return request;
- }
+ oauth.xhr({
+ method: 'GET',
+ path: '/api/0.6/user/details'
+ }, wrapcb(this, done, _connectionID));
- function rand() {
- var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
- var c = '';
- var i = -1;
+ function done(err, xml) {
+ if (err) {
+ return callback(err);
+ }
- while (++i < 15) {
- c += chars.charAt(Math.floor(Math.random() * 52));
+ var options = {
+ skipSeen: false
+ };
+ return parseXML(xml, function (err, results) {
+ if (err) {
+ return callback(err);
+ } else {
+ _userDetails = results[0];
+ return callback(undefined, _userDetails);
+ }
+ }, options);
+ }
+ },
+ // Load previous changesets for the logged in user
+ // GET /api/0.6/changesets?user=#id
+ userChangesets: function userChangesets(callback) {
+ if (_userChangesets) {
+ // retrieve cached
+ return callback(undefined, _userChangesets);
}
- return c;
- }
-
- function create(url) {
- var e = url.match(/callback=(\w+)/);
- var c = e ? e[1] : rand();
+ this.userDetails(wrapcb(this, gotDetails, _connectionID));
- jsonpCache[c] = function (data) {
- if (jsonpCache[c]) {
- callback(data);
+ function gotDetails(err, user) {
+ if (err) {
+ return callback(err);
}
- finalize();
- };
-
- function finalize() {
- delete jsonpCache[c];
- script.remove();
+ oauth.xhr({
+ method: 'GET',
+ path: '/api/0.6/changesets?user=' + user.id
+ }, wrapcb(this, done, _connectionID));
}
- request.abort = finalize;
- return 'jsonpCache.' + c;
- }
-
- var cb = create(url);
- var script = select('head').append('script').attr('type', 'text/javascript').attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
- return request;
- }
-
- var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
- var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
- var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
- var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
- var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
- var maxResults$2 = 2000;
- var tileZoom$2 = 16.5;
- var tiler$6 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
- var dispatch$7 = dispatch('loadedImages', 'viewerChanged');
- var minHfov = 10; // zoom in degrees: 20, 10, 5
+ function done(err, xml) {
+ if (err) {
+ return callback(err);
+ }
- var maxHfov = 90; // zoom out degrees
+ _userChangesets = Array.prototype.map.call(xml.getElementsByTagName('changeset'), function (changeset) {
+ return {
+ tags: getTags(changeset)
+ };
+ }).filter(function (changeset) {
+ var comment = changeset.tags.comment;
+ return comment && comment !== '';
+ });
+ return callback(undefined, _userChangesets);
+ }
+ },
+ // Fetch the status of the OSM API
+ // GET /api/capabilities
+ status: function status(callback) {
+ var url = urlroot + '/api/capabilities';
+ var errback = wrapcb(this, done, _connectionID);
+ d3_xml(url).then(function (data) {
+ errback(null, data);
+ })["catch"](function (err) {
+ errback(err.message);
+ });
- var defaultHfov = 45;
- var _hires = false;
- var _resolution = 512; // higher numbers are slower - 512, 1024, 2048, 4096
+ function done(err, xml) {
+ if (err) {
+ // the status is null if no response could be retrieved
+ return callback(err, null);
+ } // update blocklists
- var _currScene = 0;
- var _ssCache;
+ var elements = xml.getElementsByTagName('blacklist');
+ var regexes = [];
- var _pannellumViewer;
+ for (var i = 0; i < elements.length; i++) {
+ var regexString = elements[i].getAttribute('regex'); // needs unencode?
- var _sceneOptions = {
- showFullscreenCtrl: false,
- autoLoad: true,
- compass: true,
- yaw: 0,
- minHfov: minHfov,
- maxHfov: maxHfov,
- hfov: defaultHfov,
- type: 'cubemap',
- cubeMap: []
- };
+ if (regexString) {
+ try {
+ var regex = new RegExp(regexString);
+ regexes.push(regex);
+ } catch (e) {
+ /* noop */
+ }
+ }
+ }
- var _loadViewerPromise$2;
- /**
- * abortRequest().
- */
+ if (regexes.length) {
+ _imageryBlocklists = regexes;
+ }
+ if (_rateLimitError) {
+ return callback(_rateLimitError, 'rateLimited');
+ } else {
+ var waynodes = xml.getElementsByTagName('waynodes');
+ var maxWayNodes = waynodes.length && parseInt(waynodes[0].getAttribute('maximum'), 10);
+ if (maxWayNodes && isFinite(maxWayNodes)) _maxWayNodes = maxWayNodes;
+ var apiStatus = xml.getElementsByTagName('status');
+ var val = apiStatus[0].getAttribute('api');
+ return callback(undefined, val);
+ }
+ }
+ },
+ // Calls `status` and dispatches an `apiStatusChange` event if the returned
+ // status differs from the cached status.
+ reloadApiStatus: function reloadApiStatus() {
+ // throttle to avoid unnecessary API calls
+ if (!this.throttledReloadApiStatus) {
+ var that = this;
+ this.throttledReloadApiStatus = throttle(function () {
+ that.status(function (err, status) {
+ if (status !== _cachedApiStatus) {
+ _cachedApiStatus = status;
+ dispatch$6.call('apiStatusChange', that, err, status);
+ }
+ });
+ }, 500);
+ }
- function abortRequest$6(i) {
- i.abort();
- }
- /**
- * localeTimeStamp().
- */
+ this.throttledReloadApiStatus();
+ },
+ // Returns the maximum number of nodes a single way can have
+ maxWayNodes: function maxWayNodes() {
+ return _maxWayNodes;
+ },
+ // Load data (entities) from the API in tiles
+ // GET /api/0.6/map?bbox=
+ loadTiles: function loadTiles(projection, callback) {
+ if (_off) return; // determine the needed tiles to cover the view
+ var tiles = tiler$5.zoomExtent([_tileZoom$3, _tileZoom$3]).getTiles(projection); // abort inflight requests that are no longer needed
- function localeTimestamp(s) {
- if (!s) return null;
- var options = {
- day: 'numeric',
- month: 'short',
- year: 'numeric'
- };
- var d = new Date(s);
- if (isNaN(d.getTime())) return null;
- return d.toLocaleString(_mainLocalizer.localeCode(), options);
- }
- /**
- * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
- */
+ var hadRequests = hasInflightRequests(_tileCache);
+ abortUnwantedRequests$3(_tileCache, tiles);
+ if (hadRequests && !hasInflightRequests(_tileCache)) {
+ dispatch$6.call('loaded'); // stop the spinner
+ } // issue new requests..
- function loadTiles$2(which, url, projection, margin) {
- var tiles = tiler$6.margin(margin).getTiles(projection); // abort inflight requests that are no longer needed
- var cache = _ssCache[which];
- Object.keys(cache.inflight).forEach(function (k) {
- var wanted = tiles.find(function (tile) {
- return k.indexOf(tile.id + ',') === 0;
- });
+ tiles.forEach(function (tile) {
+ this.loadTile(tile, callback);
+ }, this);
+ },
+ // Load a single data tile
+ // GET /api/0.6/map?bbox=
+ loadTile: function loadTile(tile, callback) {
+ if (_off) return;
+ if (_tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
- if (!wanted) {
- abortRequest$6(cache.inflight[k]);
- delete cache.inflight[k];
+ if (!hasInflightRequests(_tileCache)) {
+ dispatch$6.call('loading'); // start the spinner
}
- });
- tiles.forEach(function (tile) {
- return loadNextTilePage$2(which, url, tile);
- });
- }
- /**
- * loadNextTilePage() load data for the next tile page in line.
- */
+ var path = '/api/0.6/map.json?bbox=';
+ var options = {
+ skipSeen: true
+ };
+ _tileCache.inflight[tile.id] = this.loadFromAPI(path + tile.extent.toParam(), tileCallback, options);
- function loadNextTilePage$2(which, url, tile) {
- var cache = _ssCache[which];
- var nextPage = cache.nextPage[tile.id] || 0;
- var id = tile.id + ',' + String(nextPage);
- if (cache.loaded[id] || cache.inflight[id]) return;
- cache.inflight[id] = getBubbles(url, tile, function (bubbles) {
- cache.loaded[id] = true;
- delete cache.inflight[id];
- if (!bubbles) return; // [].shift() removes the first element, some statistics info, not a bubble point
-
- bubbles.shift();
- var features = bubbles.map(function (bubble) {
- if (cache.points[bubble.id]) return null; // skip duplicates
+ function tileCallback(err, parsed) {
+ delete _tileCache.inflight[tile.id];
- var loc = [bubble.lo, bubble.la];
- var d = {
- loc: loc,
- key: bubble.id,
- ca: bubble.he,
- captured_at: bubble.cd,
- captured_by: 'microsoft',
- // nbn: bubble.nbn,
- // pbn: bubble.pbn,
- // ad: bubble.ad,
- // rn: bubble.rn,
- pr: bubble.pr,
- // previous
- ne: bubble.ne,
- // next
- pano: true,
- sequenceKey: null
- };
- cache.points[bubble.id] = d; // a sequence starts here
+ if (!err) {
+ delete _tileCache.toLoad[tile.id];
+ _tileCache.loaded[tile.id] = true;
+ var bbox = tile.extent.bbox();
+ bbox.id = tile.id;
- if (bubble.pr === undefined) {
- cache.leaders.push(bubble.id);
+ _tileCache.rtree.insert(bbox);
}
- return {
- minX: loc[0],
- minY: loc[1],
- maxX: loc[0],
- maxY: loc[1],
- data: d
- };
- }).filter(Boolean);
- cache.rtree.load(features);
- connectSequences();
+ if (callback) {
+ callback(err, Object.assign({
+ data: parsed
+ }, tile));
+ }
- if (which === 'bubbles') {
- dispatch$7.call('loadedImages');
+ if (!hasInflightRequests(_tileCache)) {
+ dispatch$6.call('loaded'); // stop the spinner
+ }
}
- });
- } // call this sometimes to connect the bubbles into sequences
-
-
- function connectSequences() {
- var cache = _ssCache.bubbles;
- var keepLeaders = [];
-
- for (var i = 0; i < cache.leaders.length; i++) {
- var bubble = cache.points[cache.leaders[i]];
- var seen = {}; // try to make a sequence.. use the key of the leader bubble.
-
- var sequence = {
- key: bubble.key,
- bubbles: []
+ },
+ isDataLoaded: function isDataLoaded(loc) {
+ var bbox = {
+ minX: loc[0],
+ minY: loc[1],
+ maxX: loc[0],
+ maxY: loc[1]
};
- var complete = false;
-
- do {
- sequence.bubbles.push(bubble);
- seen[bubble.key] = true;
+ return _tileCache.rtree.collides(bbox);
+ },
+ // load the tile that covers the given `loc`
+ loadTileAtLoc: function loadTileAtLoc(loc, callback) {
+ // Back off if the toLoad queue is filling up.. re #6417
+ // (Currently `loadTileAtLoc` requests are considered low priority - used by operations to
+ // let users safely edit geometries which extend to unloaded tiles. We can drop some.)
+ if (Object.keys(_tileCache.toLoad).length > 50) return;
+ var k = geoZoomToScale(_tileZoom$3 + 1);
+ var offset = geoRawMercator().scale(k)(loc);
+ var projection = geoRawMercator().transform({
+ k: k,
+ x: -offset[0],
+ y: -offset[1]
+ });
+ var tiles = tiler$5.zoomExtent([_tileZoom$3, _tileZoom$3]).getTiles(projection);
+ tiles.forEach(function (tile) {
+ if (_tileCache.toLoad[tile.id] || _tileCache.loaded[tile.id] || _tileCache.inflight[tile.id]) return;
+ _tileCache.toLoad[tile.id] = true;
+ this.loadTile(tile, callback);
+ }, this);
+ },
+ // Load notes from the API in tiles
+ // GET /api/0.6/notes?bbox=
+ loadNotes: function loadNotes(projection, noteOptions) {
+ noteOptions = Object.assign({
+ limit: 10000,
+ closed: 7
+ }, noteOptions);
+ if (_off) return;
+ var that = this;
+ var path = '/api/0.6/notes?limit=' + noteOptions.limit + '&closed=' + noteOptions.closed + '&bbox=';
- if (bubble.ne === undefined) {
- complete = true;
- } else {
- bubble = cache.points[bubble.ne]; // advance to next
- }
- } while (bubble && !seen[bubble.key] && !complete);
+ var throttleLoadUsers = throttle(function () {
+ var uids = Object.keys(_userCache.toLoad);
+ if (!uids.length) return;
+ that.loadUsers(uids, function () {}); // eagerly load user details
+ }, 750); // determine the needed tiles to cover the view
- if (complete) {
- _ssCache.sequences[sequence.key] = sequence; // assign bubbles to the sequence
- for (var j = 0; j < sequence.bubbles.length; j++) {
- sequence.bubbles[j].sequenceKey = sequence.key;
- } // create a GeoJSON LineString
+ var tiles = tiler$5.zoomExtent([_noteZoom, _noteZoom]).getTiles(projection); // abort inflight requests that are no longer needed
+ abortUnwantedRequests$3(_noteCache, tiles); // issue new requests..
- sequence.geojson = {
- type: 'LineString',
- properties: {
- captured_at: sequence.bubbles[0] ? sequence.bubbles[0].captured_at : null,
- captured_by: sequence.bubbles[0] ? sequence.bubbles[0].captured_by : null,
- key: sequence.key
- },
- coordinates: sequence.bubbles.map(function (d) {
- return d.loc;
- })
+ tiles.forEach(function (tile) {
+ if (_noteCache.loaded[tile.id] || _noteCache.inflight[tile.id]) return;
+ var options = {
+ skipSeen: false
};
- } else {
- keepLeaders.push(cache.leaders[i]);
+ _noteCache.inflight[tile.id] = that.loadFromAPI(path + tile.extent.toParam(), function (err) {
+ delete _noteCache.inflight[tile.id];
+
+ if (!err) {
+ _noteCache.loaded[tile.id] = true;
+ }
+
+ throttleLoadUsers();
+ dispatch$6.call('loadedNotes');
+ }, options);
+ });
+ },
+ // Create a note
+ // POST /api/0.6/notes?params
+ postNoteCreate: function postNoteCreate(note, callback) {
+ if (!this.authenticated()) {
+ return callback({
+ message: 'Not Authenticated',
+ status: -3
+ }, note);
}
- } // couldn't complete these, save for later
+ if (_noteCache.inflightPost[note.id]) {
+ return callback({
+ message: 'Note update already inflight',
+ status: -2
+ }, note);
+ }
- cache.leaders = keepLeaders;
- }
- /**
- * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
- */
+ if (!note.loc[0] || !note.loc[1] || !note.newComment) return; // location & description required
+ var comment = note.newComment;
- function getBubbles(url, tile, callback) {
- var rect = tile.extent.rectangle();
- var urlForRequest = url + utilQsString({
- n: rect[3],
- s: rect[1],
- e: rect[2],
- w: rect[0],
- c: maxResults$2,
- appkey: bubbleAppKey,
- jsCallback: '{callback}'
- });
- return jsonpRequest(urlForRequest, function (data) {
- if (!data || data.error) {
- callback(null);
- } else {
- callback(data);
+ if (note.newCategory && note.newCategory !== 'None') {
+ comment += ' #' + note.newCategory;
}
- });
- } // partition viewport into higher zoom tiles
+ var path = '/api/0.6/notes?' + utilQsString({
+ lon: note.loc[0],
+ lat: note.loc[1],
+ text: comment
+ });
+ _noteCache.inflightPost[note.id] = oauth.xhr({
+ method: 'POST',
+ path: path
+ }, wrapcb(this, done, _connectionID));
- function partitionViewport$2(projection) {
- var z = geoScaleToZoom(projection.scale());
- var z2 = Math.ceil(z * 2) / 2 + 2.5; // round to next 0.5 and add 2.5
+ function done(err, xml) {
+ delete _noteCache.inflightPost[note.id];
- var tiler = utilTiler().zoomExtent([z2, z2]);
- return tiler.getTiles(projection).map(function (tile) {
- return tile.extent;
- });
- } // no more than `limit` results per partition.
+ if (err) {
+ return callback(err);
+ } // we get the updated note back, remove from caches and reparse..
- function searchLimited$2(limit, projection, rtree) {
- limit = limit || 5;
- return partitionViewport$2(projection).reduce(function (result, extent) {
- var found = rtree.search(extent.bbox()).slice(0, limit).map(function (d) {
- return d.data;
- });
- return found.length ? result.concat(found) : result;
- }, []);
- }
- /**
- * loadImage()
- */
+ this.removeNote(note);
+ var options = {
+ skipSeen: false
+ };
+ return parseXML(xml, function (err, results) {
+ if (err) {
+ return callback(err);
+ } else {
+ return callback(undefined, results[0]);
+ }
+ }, options);
+ }
+ },
+ // Update a note
+ // POST /api/0.6/notes/#id/comment?text=comment
+ // POST /api/0.6/notes/#id/close?text=comment
+ // POST /api/0.6/notes/#id/reopen?text=comment
+ postNoteUpdate: function postNoteUpdate(note, newStatus, callback) {
+ if (!this.authenticated()) {
+ return callback({
+ message: 'Not Authenticated',
+ status: -3
+ }, note);
+ }
+
+ if (_noteCache.inflightPost[note.id]) {
+ return callback({
+ message: 'Note update already inflight',
+ status: -2
+ }, note);
+ }
+ var action;
- function loadImage(imgInfo) {
- return new Promise(function (resolve) {
- var img = new Image();
+ if (note.status !== 'closed' && newStatus === 'closed') {
+ action = 'close';
+ } else if (note.status !== 'open' && newStatus === 'open') {
+ action = 'reopen';
+ } else {
+ action = 'comment';
+ if (!note.newComment) return; // when commenting, comment required
+ }
- img.onload = function () {
- var canvas = document.getElementById('ideditor-canvas' + imgInfo.face);
- var ctx = canvas.getContext('2d');
- ctx.drawImage(img, imgInfo.x, imgInfo.y);
- resolve({
- imgInfo: imgInfo,
- status: 'ok'
- });
- };
+ var path = '/api/0.6/notes/' + note.id + '/' + action;
- img.onerror = function () {
- resolve({
- data: imgInfo,
- status: 'error'
+ if (note.newComment) {
+ path += '?' + utilQsString({
+ text: note.newComment
});
- };
-
- img.setAttribute('crossorigin', '');
- img.src = imgInfo.url;
- });
- }
- /**
- * loadCanvas()
- */
+ }
+ _noteCache.inflightPost[note.id] = oauth.xhr({
+ method: 'POST',
+ path: path
+ }, wrapcb(this, done, _connectionID));
- function loadCanvas(imageGroup) {
- return Promise.all(imageGroup.map(loadImage)).then(function (data) {
- var canvas = document.getElementById('ideditor-canvas' + data[0].imgInfo.face);
- var which = {
- '01': 0,
- '02': 1,
- '03': 2,
- '10': 3,
- '11': 4,
- '12': 5
- };
- var face = data[0].imgInfo.face;
- _sceneOptions.cubeMap[which[face]] = canvas.toDataURL('image/jpeg', 1.0);
- return {
- status: 'loadCanvas for face ' + data[0].imgInfo.face + 'ok'
- };
- });
- }
- /**
- * loadFaces()
- */
+ function done(err, xml) {
+ delete _noteCache.inflightPost[note.id];
+ if (err) {
+ return callback(err);
+ } // we get the updated note back, remove from caches and reparse..
- function loadFaces(faceGroup) {
- return Promise.all(faceGroup.map(loadCanvas)).then(function () {
- return {
- status: 'loadFaces done'
- };
- });
- }
- function setupCanvas(selection, reset) {
- if (reset) {
- selection.selectAll('#ideditor-stitcher-canvases').remove();
- } // Add the Streetside working canvases. These are used for 'stitching', or combining,
- // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
+ this.removeNote(note); // update closed note cache - used to populate `closed:note` changeset tag
+ if (action === 'close') {
+ _noteCache.closed[note.id] = true;
+ } else if (action === 'reopen') {
+ delete _noteCache.closed[note.id];
+ }
- selection.selectAll('#ideditor-stitcher-canvases').data([0]).enter().append('div').attr('id', 'ideditor-stitcher-canvases').attr('display', 'none').selectAll('canvas').data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12']).enter().append('canvas').attr('id', function (d) {
- return 'ideditor-' + d;
- }).attr('width', _resolution).attr('height', _resolution);
- }
+ var options = {
+ skipSeen: false
+ };
+ return parseXML(xml, function (err, results) {
+ if (err) {
+ return callback(err);
+ } else {
+ return callback(undefined, results[0]);
+ }
+ }, options);
+ }
+ },
+ "switch": function _switch(options) {
+ urlroot = options.urlroot;
+ oauth.options(Object.assign({
+ url: urlroot,
+ loading: authLoading,
+ done: authDone
+ }, options));
+ this.reset();
+ this.userChangesets(function () {}); // eagerly load user details/changesets
- function qkToXY(qk) {
- var x = 0;
- var y = 0;
- var scale = 256;
+ dispatch$6.call('change');
+ return this;
+ },
+ toggle: function toggle(val) {
+ _off = !val;
+ return this;
+ },
+ isChangesetInflight: function isChangesetInflight() {
+ return !!_changeset.inflight;
+ },
+ // get/set cached data
+ // This is used to save/restore the state when entering/exiting the walkthrough
+ // Also used for testing purposes.
+ caches: function caches(obj) {
+ function cloneCache(source) {
+ var target = {};
+ Object.keys(source).forEach(function (k) {
+ if (k === 'rtree') {
+ target.rtree = new RBush().fromJSON(source.rtree.toJSON()); // clone rbush
+ } else if (k === 'note') {
+ target.note = {};
+ Object.keys(source.note).forEach(function (id) {
+ target.note[id] = osmNote(source.note[id]); // copy notes
+ });
+ } else {
+ target[k] = JSON.parse(JSON.stringify(source[k])); // clone deep
+ }
+ });
+ return target;
+ }
- for (var i = qk.length; i > 0; i--) {
- var key = qk[i - 1];
- x += +(key === '1' || key === '3') * scale;
- y += +(key === '2' || key === '3') * scale;
- scale *= 2;
- }
+ if (!arguments.length) {
+ return {
+ tile: cloneCache(_tileCache),
+ note: cloneCache(_noteCache),
+ user: cloneCache(_userCache)
+ };
+ } // access caches directly for testing (e.g., loading notes rtree)
- return [x, y];
- }
- function getQuadKeys() {
- var dim = _resolution / 256;
- var quadKeys;
+ if (obj === 'get') {
+ return {
+ tile: _tileCache,
+ note: _noteCache,
+ user: _userCache
+ };
+ }
- if (dim === 16) {
- quadKeys = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111', '0002', '0003', '0012', '0013', '0102', '0103', '0112', '0113', '1002', '1003', '1012', '1013', '1102', '1103', '1112', '1113', '0020', '0021', '0030', '0031', '0120', '0121', '0130', '0131', '1020', '1021', '1030', '1031', '1120', '1121', '1130', '1131', '0022', '0023', '0032', '0033', '0122', '0123', '0132', '0133', '1022', '1023', '1032', '1033', '1122', '1123', '1132', '1133', '0200', '0201', '0210', '0211', '0300', '0301', '0310', '0311', '1200', '1201', '1210', '1211', '1300', '1301', '1310', '1311', '0202', '0203', '0212', '0213', '0302', '0303', '0312', '0313', '1202', '1203', '1212', '1213', '1302', '1303', '1312', '1313', '0220', '0221', '0230', '0231', '0320', '0321', '0330', '0331', '1220', '1221', '1230', '1231', '1320', '1321', '1330', '1331', '0222', '0223', '0232', '0233', '0322', '0323', '0332', '0333', '1222', '1223', '1232', '1233', '1322', '1323', '1332', '1333', '2000', '2001', '2010', '2011', '2100', '2101', '2110', '2111', '3000', '3001', '3010', '3011', '3100', '3101', '3110', '3111', '2002', '2003', '2012', '2013', '2102', '2103', '2112', '2113', '3002', '3003', '3012', '3013', '3102', '3103', '3112', '3113', '2020', '2021', '2030', '2031', '2120', '2121', '2130', '2131', '3020', '3021', '3030', '3031', '3120', '3121', '3130', '3131', '2022', '2023', '2032', '2033', '2122', '2123', '2132', '2133', '3022', '3023', '3032', '3033', '3122', '3123', '3132', '3133', '2200', '2201', '2210', '2211', '2300', '2301', '2310', '2311', '3200', '3201', '3210', '3211', '3300', '3301', '3310', '3311', '2202', '2203', '2212', '2213', '2302', '2303', '2312', '2313', '3202', '3203', '3212', '3213', '3302', '3303', '3312', '3313', '2220', '2221', '2230', '2231', '2320', '2321', '2330', '2331', '3220', '3221', '3230', '3231', '3320', '3321', '3330', '3331', '2222', '2223', '2232', '2233', '2322', '2323', '2332', '2333', '3222', '3223', '3232', '3233', '3322', '3323', '3332', '3333'];
- } else if (dim === 8) {
- quadKeys = ['000', '001', '010', '011', '100', '101', '110', '111', '002', '003', '012', '013', '102', '103', '112', '113', '020', '021', '030', '031', '120', '121', '130', '131', '022', '023', '032', '033', '122', '123', '132', '133', '200', '201', '210', '211', '300', '301', '310', '311', '202', '203', '212', '213', '302', '303', '312', '313', '220', '221', '230', '231', '320', '321', '330', '331', '222', '223', '232', '233', '322', '323', '332', '333'];
- } else if (dim === 4) {
- quadKeys = ['00', '01', '10', '11', '02', '03', '12', '13', '20', '21', '30', '31', '22', '23', '32', '33'];
- } else {
- // dim === 2
- quadKeys = ['0', '1', '2', '3'];
- }
+ if (obj.tile) {
+ _tileCache = obj.tile;
+ _tileCache.inflight = {};
+ }
- return quadKeys;
- }
+ if (obj.note) {
+ _noteCache = obj.note;
+ _noteCache.inflight = {};
+ _noteCache.inflightPost = {};
+ }
- var serviceStreetside = {
- /**
- * init() initialize streetside.
- */
- init: function init() {
- if (!_ssCache) {
- this.reset();
+ if (obj.user) {
+ _userCache = obj.user;
}
- this.event = utilRebind(this, dispatch$7, 'on');
+ return this;
+ },
+ logout: function logout() {
+ _userChangesets = undefined;
+ _userDetails = undefined;
+ oauth.logout();
+ dispatch$6.call('change');
+ return this;
+ },
+ authenticated: function authenticated() {
+ return oauth.authenticated();
},
+ authenticate: function authenticate(callback) {
+ var that = this;
+ var cid = _connectionID;
+ _userChangesets = undefined;
+ _userDetails = undefined;
- /**
- * reset() reset the cache.
- */
- reset: function reset() {
- if (_ssCache) {
- Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$6);
+ function done(err, res) {
+ if (err) {
+ if (callback) callback(err);
+ return;
+ }
+
+ if (that.getConnectionId() !== cid) {
+ if (callback) callback({
+ message: 'Connection Switched',
+ status: -1
+ });
+ return;
+ }
+
+ _rateLimitError = undefined;
+ dispatch$6.call('change');
+ if (callback) callback(err, res);
+ that.userChangesets(function () {}); // eagerly load user details/changesets
}
- _ssCache = {
- bubbles: {
- inflight: {},
- loaded: {},
- nextPage: {},
- rtree: new RBush(),
- points: {},
- leaders: []
- },
- sequences: {}
- };
+ return oauth.authenticate(done);
},
-
- /**
- * bubbles()
- */
- bubbles: function bubbles(projection) {
- var limit = 5;
- return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
+ imageryBlocklists: function imageryBlocklists() {
+ return _imageryBlocklists;
},
- cachedImage: function cachedImage(imageKey) {
- return _ssCache.bubbles.points[imageKey];
+ tileZoom: function tileZoom(val) {
+ if (!arguments.length) return _tileZoom$3;
+ _tileZoom$3 = val;
+ return this;
},
- sequences: function sequences(projection) {
+ // get all cached notes covering the viewport
+ notes: function notes(projection) {
var viewport = projection.clipExtent();
var min = [viewport[0][0], viewport[1][1]];
var max = [viewport[1][0], viewport[0][1]];
var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
- var seen = {};
- var results = []; // all sequences for bubbles in viewport
-
- _ssCache.bubbles.rtree.search(bbox).forEach(function (d) {
- var key = d.data.sequenceKey;
-
- if (key && !seen[key]) {
- seen[key] = true;
- results.push(_ssCache.sequences[key].geojson);
- }
+ return _noteCache.rtree.search(bbox).map(function (d) {
+ return d.data;
});
-
- return results;
},
-
- /**
- * loadBubbles()
- */
- loadBubbles: function loadBubbles(projection, margin) {
- // by default: request 2 nearby tiles so we can connect sequences.
- if (margin === undefined) margin = 2;
- loadTiles$2('bubbles', bubbleApi, projection, margin);
+ // get a single note from the cache
+ getNote: function getNote(id) {
+ return _noteCache.note[id];
},
- viewer: function viewer() {
- return _pannellumViewer;
+ // remove a single note from the cache
+ removeNote: function removeNote(note) {
+ if (!(note instanceof osmNote) || !note.id) return;
+ delete _noteCache.note[note.id];
+ updateRtree$3(encodeNoteRtree(note), false); // false = remove
},
- initViewer: function initViewer() {
- if (!window.pannellum) return;
- if (_pannellumViewer) return;
- _currScene += 1;
-
- var sceneID = _currScene.toString();
+ // replace a single note in the cache
+ replaceNote: function replaceNote(note) {
+ if (!(note instanceof osmNote) || !note.id) return;
+ _noteCache.note[note.id] = note;
+ updateRtree$3(encodeNoteRtree(note), true); // true = replace
- var options = {
- 'default': {
- firstScene: sceneID
- },
- scenes: {}
- };
- options.scenes[sceneID] = _sceneOptions;
- _pannellumViewer = window.pannellum.viewer('ideditor-viewer-streetside', options);
+ return note;
},
- ensureViewerLoaded: function ensureViewerLoaded(context) {
- if (_loadViewerPromise$2) return _loadViewerPromise$2; // create ms-wrapper, a photo wrapper class
-
- var wrap = context.container().select('.photoviewer').selectAll('.ms-wrapper').data([0]); // inject ms-wrapper into the photoviewer div
- // (used by all to house each custom photo viewer)
-
- var wrapEnter = wrap.enter().append('div').attr('class', 'photo-wrapper ms-wrapper').classed('hide', true);
- var that = this;
- var pointerPrefix = 'PointerEvent' in window ? 'pointer' : 'mouse'; // inject div to support streetside viewer (pannellum) and attribution line
-
- wrapEnter.append('div').attr('id', 'ideditor-viewer-streetside').on(pointerPrefix + 'down.streetside', function () {
- select(window).on(pointerPrefix + 'move.streetside', function () {
- dispatch$7.call('viewerChanged');
- }, true);
- }).on(pointerPrefix + 'up.streetside pointercancel.streetside', function () {
- select(window).on(pointerPrefix + 'move.streetside', null); // continue dispatching events for a few seconds, in case viewer has inertia.
+ // Get an array of note IDs closed during this session.
+ // Used to populate `closed:note` changeset tag
+ getClosedIDs: function getClosedIDs() {
+ return Object.keys(_noteCache.closed).sort();
+ }
+ };
- var t = timer(function (elapsed) {
- dispatch$7.call('viewerChanged');
+ var _apibase = 'https://wiki.openstreetmap.org/w/api.php';
+ var _inflight$1 = {};
+ var _wikibaseCache = {};
+ var _localeIDs = {
+ en: false
+ };
- if (elapsed > 2000) {
- t.stop();
- }
- });
- }).append('div').attr('class', 'photo-attribution fillD');
- var controlsEnter = wrapEnter.append('div').attr('class', 'photo-controls-wrap').append('div').attr('class', 'photo-controls');
- controlsEnter.append('button').on('click.back', step(-1)).html('◄');
- controlsEnter.append('button').on('click.forward', step(1)).html('►'); // create working canvas for stitching together images
+ var debouncedRequest = debounce(request, 500, {
+ leading: false
+ });
- wrap = wrap.merge(wrapEnter).call(setupCanvas, true); // Register viewer resize handler
+ function request(url, callback) {
+ if (_inflight$1[url]) return;
+ var controller = new AbortController();
+ _inflight$1[url] = controller;
+ d3_json(url, {
+ signal: controller.signal
+ }).then(function (result) {
+ delete _inflight$1[url];
+ if (callback) callback(null, result);
+ })["catch"](function (err) {
+ delete _inflight$1[url];
+ if (err.name === 'AbortError') return;
+ if (callback) callback(err.message);
+ });
+ }
- context.ui().photoviewer.on('resize.streetside', function () {
- if (_pannellumViewer) {
- _pannellumViewer.resize();
- }
+ var serviceOsmWikibase = {
+ init: function init() {
+ _inflight$1 = {};
+ _wikibaseCache = {};
+ _localeIDs = {};
+ },
+ reset: function reset() {
+ Object.values(_inflight$1).forEach(function (controller) {
+ controller.abort();
});
- _loadViewerPromise$2 = new Promise(function (resolve, reject) {
- var loadedCount = 0;
+ _inflight$1 = {};
+ },
- function loaded() {
- loadedCount += 1; // wait until both files are loaded
+ /**
+ * Get the best value for the property, or undefined if not found
+ * @param entity object from wikibase
+ * @param property string e.g. 'P4' for image
+ * @param langCode string e.g. 'fr' for French
+ */
+ claimToValue: function claimToValue(entity, property, langCode) {
+ if (!entity.claims[property]) return undefined;
+ var locale = _localeIDs[langCode];
+ var preferredPick, localePick;
+ entity.claims[property].forEach(function (stmt) {
+ // If exists, use value limited to the needed language (has a qualifier P26 = locale)
+ // Or if not found, use the first value with the "preferred" rank
+ if (!preferredPick && stmt.rank === 'preferred') {
+ preferredPick = stmt;
+ }
- if (loadedCount === 2) resolve();
+ if (locale && stmt.qualifiers && stmt.qualifiers.P26 && stmt.qualifiers.P26[0].datavalue.value.id === locale) {
+ localePick = stmt;
}
+ });
+ var result = localePick || preferredPick;
- var head = select('head'); // load streetside pannellum viewer css
+ if (result) {
+ var datavalue = result.mainsnak.datavalue;
+ return datavalue.type === 'wikibase-entityid' ? datavalue.value.id : datavalue.value;
+ } else {
+ return undefined;
+ }
+ },
- head.selectAll('#ideditor-streetside-viewercss').data([0]).enter().append('link').attr('id', 'ideditor-streetside-viewercss').attr('rel', 'stylesheet').attr('crossorigin', 'anonymous').attr('href', context.asset(pannellumViewerCSS)).on('load.serviceStreetside', loaded).on('error.serviceStreetside', function () {
- reject();
- }); // load streetside pannellum viewer js
+ /**
+ * Convert monolingual property into a key-value object (language -> value)
+ * @param entity object from wikibase
+ * @param property string e.g. 'P31' for monolingual wiki page title
+ */
+ monolingualClaimToValueObj: function monolingualClaimToValueObj(entity, property) {
+ if (!entity || !entity.claims[property]) return undefined;
+ return entity.claims[property].reduce(function (acc, obj) {
+ var value = obj.mainsnak.datavalue.value;
+ acc[value.language] = value.text;
+ return acc;
+ }, {});
+ },
+ toSitelink: function toSitelink(key, value) {
+ var result = value ? 'Tag:' + key + '=' + value : 'Key:' + key;
+ return result.replace(/_/g, ' ').trim();
+ },
+ //
+ // Pass params object of the form:
+ // {
+ // key: 'string',
+ // value: 'string',
+ // langCode: 'string'
+ // }
+ //
+ getEntity: function getEntity(params, callback) {
+ var doRequest = params.debounce ? debouncedRequest : request;
+ var that = this;
+ var titles = [];
+ var result = {};
+ var rtypeSitelink = params.key === 'type' && params.value ? ('Relation:' + params.value).replace(/_/g, ' ').trim() : false;
+ var keySitelink = params.key ? this.toSitelink(params.key) : false;
+ var tagSitelink = params.key && params.value ? this.toSitelink(params.key, params.value) : false;
+ var localeSitelink;
- head.selectAll('#ideditor-streetside-viewerjs').data([0]).enter().append('script').attr('id', 'ideditor-streetside-viewerjs').attr('crossorigin', 'anonymous').attr('src', context.asset(pannellumViewerJS)).on('load.serviceStreetside', loaded).on('error.serviceStreetside', function () {
- reject();
+ if (params.langCodes) {
+ params.langCodes.forEach(function (langCode) {
+ if (_localeIDs[langCode] === undefined) {
+ // If this is the first time we are asking about this locale,
+ // fetch corresponding entity (if it exists), and cache it.
+ // If there is no such entry, cache `false` value to avoid re-requesting it.
+ localeSitelink = ('Locale:' + langCode).replace(/_/g, ' ').trim();
+ titles.push(localeSitelink);
+ }
});
- })["catch"](function () {
- _loadViewerPromise$2 = null;
- });
- return _loadViewerPromise$2;
-
- function step(stepBy) {
- return function () {
- var viewer = context.container().select('.photoviewer');
- var selected = viewer.empty() ? undefined : viewer.datum();
- if (!selected) return;
- var nextID = stepBy === 1 ? selected.ne : selected.pr;
+ }
- var yaw = _pannellumViewer.getYaw();
+ if (rtypeSitelink) {
+ if (_wikibaseCache[rtypeSitelink]) {
+ result.rtype = _wikibaseCache[rtypeSitelink];
+ } else {
+ titles.push(rtypeSitelink);
+ }
+ }
- var ca = selected.ca + yaw;
- var origin = selected.loc; // construct a search trapezoid pointing out from current bubble
+ if (keySitelink) {
+ if (_wikibaseCache[keySitelink]) {
+ result.key = _wikibaseCache[keySitelink];
+ } else {
+ titles.push(keySitelink);
+ }
+ }
- var meters = 35;
- var p1 = [origin[0] + geoMetersToLon(meters / 5, origin[1]), origin[1]];
- var p2 = [origin[0] + geoMetersToLon(meters / 2, origin[1]), origin[1] + geoMetersToLat(meters)];
- var p3 = [origin[0] - geoMetersToLon(meters / 2, origin[1]), origin[1] + geoMetersToLat(meters)];
- var p4 = [origin[0] - geoMetersToLon(meters / 5, origin[1]), origin[1]];
- var poly = [p1, p2, p3, p4, p1]; // rotate it to face forward/backward
+ if (tagSitelink) {
+ if (_wikibaseCache[tagSitelink]) {
+ result.tag = _wikibaseCache[tagSitelink];
+ } else {
+ titles.push(tagSitelink);
+ }
+ }
- var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
- poly = geoRotate(poly, -angle, origin);
- var extent = poly.reduce(function (extent, point) {
- return extent.extend(geoExtent(point));
- }, geoExtent()); // find nearest other bubble in the search polygon
+ if (!titles.length) {
+ // Nothing to do, we already had everything in the cache
+ return callback(null, result);
+ } // Requesting just the user language code
+ // If backend recognizes the code, it will perform proper fallbacks,
+ // and the result will contain the requested code. If not, all values are returned:
+ // {"zh-tw":{"value":"...","language":"zh-tw","source-language":"zh-hant"}
+ // {"pt-br":{"value":"...","language":"pt","for-language":"pt-br"}}
- var minDist = Infinity;
- _ssCache.bubbles.rtree.search(extent.bbox()).forEach(function (d) {
- if (d.data.key === selected.key) return;
- if (!geoPointInPolygon(d.data.loc, poly)) return;
- var dist = geoVecLength(d.data.loc, selected.loc);
- var theta = selected.ca - d.data.ca;
- var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
+ var obj = {
+ action: 'wbgetentities',
+ sites: 'wiki',
+ titles: titles.join('|'),
+ languages: params.langCodes.join('|'),
+ languagefallback: 1,
+ origin: '*',
+ format: 'json' // There is an MW Wikibase API bug https://phabricator.wikimedia.org/T212069
+ // We shouldn't use v1 until it gets fixed, but should switch to it afterwards
+ // formatversion: 2,
- if (minTheta > 20) {
- dist += 5; // penalize distance if camera angles don't match
- }
+ };
+ var url = _apibase + '?' + utilQsString(obj);
+ doRequest(url, function (err, d) {
+ if (err) {
+ callback(err);
+ } else if (!d.success || d.error) {
+ callback(d.error.messages.map(function (v) {
+ return v.html['*'];
+ }).join('<br>'));
+ } else {
+ var localeID = false;
+ Object.values(d.entities).forEach(function (res) {
+ if (res.missing !== '') {
+ var title = res.sitelinks.wiki.title;
- if (dist < minDist) {
- nextID = d.data.key;
- minDist = dist;
+ if (title === rtypeSitelink) {
+ _wikibaseCache[rtypeSitelink] = res;
+ result.rtype = res;
+ } else if (title === keySitelink) {
+ _wikibaseCache[keySitelink] = res;
+ result.key = res;
+ } else if (title === tagSitelink) {
+ _wikibaseCache[tagSitelink] = res;
+ result.tag = res;
+ } else if (title === localeSitelink) {
+ localeID = res.id;
+ } else {
+ console.log('Unexpected title ' + title); // eslint-disable-line no-console
+ }
}
});
- var nextBubble = nextID && that.cachedImage(nextID);
- if (!nextBubble) return;
- context.map().centerEase(nextBubble.loc);
- that.selectImage(context, nextBubble.key).yaw(yaw).showViewer(context);
- };
- }
- },
- yaw: function yaw(_yaw) {
- if (typeof _yaw !== 'number') return _yaw;
- _sceneOptions.yaw = _yaw;
- return this;
+ if (localeSitelink) {
+ // If locale ID is not found, store false to prevent repeated queries
+ that.addLocale(params.langCodes[0], localeID);
+ }
+
+ callback(null, result);
+ }
+ });
},
+ //
+ // Pass params object of the form:
+ // {
+ // key: 'string', // required
+ // value: 'string' // optional
+ // }
+ //
+ // Get an result object used to display tag documentation
+ // {
+ // title: 'string',
+ // description: 'string',
+ // editURL: 'string',
+ // imageURL: 'string',
+ // wiki: { title: 'string', text: 'string', url: 'string' }
+ // }
+ //
+ getDocs: function getDocs(params, callback) {
+ var that = this;
+ var langCodes = _mainLocalizer.localeCodes().map(function (code) {
+ return code.toLowerCase();
+ });
+ params.langCodes = langCodes;
+ this.getEntity(params, function (err, data) {
+ if (err) {
+ callback(err);
+ return;
+ }
- /**
- * showViewer()
- */
- showViewer: function showViewer(context) {
- var wrap = context.container().select('.photoviewer').classed('hide', false);
- var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
+ var entity = data.rtype || data.tag || data.key;
- if (isHidden) {
- wrap.selectAll('.photo-wrapper:not(.ms-wrapper)').classed('hide', true);
- wrap.selectAll('.photo-wrapper.ms-wrapper').classed('hide', false);
- }
+ if (!entity) {
+ callback('No entity');
+ return;
+ }
- return this;
- },
+ var i;
+ var description;
- /**
- * hideViewer()
- */
- hideViewer: function hideViewer(context) {
- var viewer = context.container().select('.photoviewer');
- if (!viewer.empty()) viewer.datum(null);
- viewer.classed('hide', true).selectAll('.photo-wrapper').classed('hide', true);
- context.container().selectAll('.viewfield-group, .sequence, .icon-sign').classed('currentView', false);
- this.updateUrlImage(null);
- return this.setStyles(context, null, true);
- },
+ for (i in langCodes) {
+ var _code = langCodes[i];
- /**
- * selectImage().
- */
- selectImage: function selectImage(context, key) {
- var that = this;
- var d = this.cachedImage(key);
- var viewer = context.container().select('.photoviewer');
- if (!viewer.empty()) viewer.datum(d);
- this.setStyles(context, null, true);
- var wrap = context.container().select('.photoviewer .ms-wrapper');
- var attribution = wrap.selectAll('.photo-attribution').html('');
- wrap.selectAll('.pnlm-load-box') // display "loading.."
- .style('display', 'block');
- if (!d) return this;
- this.updateUrlImage(key);
- _sceneOptions.northOffset = d.ca;
- var line1 = attribution.append('div').attr('class', 'attribution-row');
- var hiresDomId = utilUniqueDomId('streetside-hires'); // Add hires checkbox
+ if (entity.descriptions[_code] && entity.descriptions[_code].language === _code) {
+ description = entity.descriptions[_code];
+ break;
+ }
+ }
- var label = line1.append('label').attr('for', hiresDomId).attr('class', 'streetside-hires');
- label.append('input').attr('type', 'checkbox').attr('id', hiresDomId).property('checked', _hires).on('click', function (d3_event) {
- d3_event.stopPropagation();
- _hires = !_hires;
- _resolution = _hires ? 1024 : 512;
- wrap.call(setupCanvas, true);
- var viewstate = {
- yaw: _pannellumViewer.getYaw(),
- pitch: _pannellumViewer.getPitch(),
- hfov: _pannellumViewer.getHfov()
- };
- _sceneOptions = Object.assign(_sceneOptions, viewstate);
- that.selectImage(context, d.key).showViewer(context);
- });
- label.append('span').html(_t.html('streetside.hires'));
- var captureInfo = line1.append('div').attr('class', 'attribution-capture-info'); // Add capture date
+ if (!description && Object.values(entity.descriptions).length) description = Object.values(entity.descriptions)[0]; // prepare result
- if (d.captured_by) {
- var yyyy = new Date().getFullYear();
- captureInfo.append('a').attr('class', 'captured_by').attr('target', '_blank').attr('href', 'https://www.microsoft.com/en-us/maps/streetside').html('©' + yyyy + ' Microsoft');
- captureInfo.append('span').html('|');
- }
+ var result = {
+ title: entity.title,
+ description: description ? description.value : '',
+ descriptionLocaleCode: description ? description.language : '',
+ editURL: 'https://wiki.openstreetmap.org/wiki/' + entity.title
+ }; // add image
- if (d.captured_at) {
- captureInfo.append('span').attr('class', 'captured_at').html(localeTimestamp(d.captured_at));
- } // Add image links
+ if (entity.claims) {
+ var imageroot;
+ var image = that.claimToValue(entity, 'P4', langCodes[0]);
+ if (image) {
+ imageroot = 'https://commons.wikimedia.org/w/index.php';
+ } else {
+ image = that.claimToValue(entity, 'P28', langCodes[0]);
- var line2 = attribution.append('div').attr('class', 'attribution-row');
- line2.append('a').attr('class', 'image-view-link').attr('target', '_blank').attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] + '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1').html(_t.html('streetside.view_on_bing'));
- line2.append('a').attr('class', 'image-report-link').attr('target', '_blank').attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17').html(_t.html('streetside.report'));
- var bubbleIdQuadKey = d.key.toString(4);
- var paddingNeeded = 16 - bubbleIdQuadKey.length;
+ if (image) {
+ imageroot = 'https://wiki.openstreetmap.org/w/index.php';
+ }
+ }
- for (var i = 0; i < paddingNeeded; i++) {
- bubbleIdQuadKey = '0' + bubbleIdQuadKey;
- }
+ if (imageroot && image) {
+ result.imageURL = imageroot + '?' + utilQsString({
+ title: 'Special:Redirect/file/' + image,
+ width: 400
+ });
+ }
+ } // Try to get a wiki page from tag data item first, followed by the corresponding key data item.
+ // If neither tag nor key data item contain a wiki page in the needed language nor English,
+ // get the first found wiki page from either the tag or the key item.
- var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
- var imgUrlSuffix = '.jpg?g=6338&n=z'; // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
- var faceKeys = ['01', '02', '03', '10', '11', '12']; // Map images to cube faces
+ var rtypeWiki = that.monolingualClaimToValueObj(data.rtype, 'P31');
+ var tagWiki = that.monolingualClaimToValueObj(data.tag, 'P31');
+ var keyWiki = that.monolingualClaimToValueObj(data.key, 'P31');
+ var wikis = [rtypeWiki, tagWiki, keyWiki];
- var quadKeys = getQuadKeys();
- var faces = faceKeys.map(function (faceKey) {
- return quadKeys.map(function (quadKey) {
- var xy = qkToXY(quadKey);
- return {
- face: faceKey,
- url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
- x: xy[0],
- y: xy[1]
- };
- });
- });
- loadFaces(faces).then(function () {
- if (!_pannellumViewer) {
- that.initViewer();
- } else {
- // make a new scene
- _currScene += 1;
+ for (i in wikis) {
+ var wiki = wikis[i];
- var sceneID = _currScene.toString();
+ for (var j in langCodes) {
+ var code = langCodes[j];
+ var referenceId = langCodes[0].split('-')[0] !== 'en' && code.split('-')[0] === 'en' ? 'inspector.wiki_en_reference' : 'inspector.wiki_reference';
+ var info = getWikiInfo(wiki, code, referenceId);
- _pannellumViewer.addScene(sceneID, _sceneOptions).loadScene(sceneID); // remove previous scene
+ if (info) {
+ result.wiki = info;
+ break;
+ }
+ }
+ if (result.wiki) break;
+ }
- if (_currScene > 2) {
- sceneID = (_currScene - 1).toString();
+ callback(null, result); // Helper method to get wiki info if a given language exists
- _pannellumViewer.removeScene(sceneID);
+ function getWikiInfo(wiki, langCode, tKey) {
+ if (wiki && wiki[langCode]) {
+ return {
+ title: wiki[langCode],
+ text: tKey,
+ url: 'https://wiki.openstreetmap.org/wiki/' + wiki[langCode]
+ };
}
}
});
- return this;
},
- getSequenceKeyForBubble: function getSequenceKeyForBubble(d) {
- return d && d.sequenceKey;
+ addLocale: function addLocale(langCode, qid) {
+ // Makes it easier to unit test
+ _localeIDs[langCode] = qid;
},
- // Updates the currently highlighted sequence and selected bubble.
- // Reset is only necessary when interacting with the viewport because
- // this implicitly changes the currently selected bubble/sequence
- setStyles: function setStyles(context, hovered, reset) {
- if (reset) {
- // reset all layers
- context.container().selectAll('.viewfield-group').classed('highlighted', false).classed('hovered', false).classed('currentView', false);
- context.container().selectAll('.sequence').classed('highlighted', false).classed('currentView', false);
- }
-
- var hoveredBubbleKey = hovered && hovered.key;
- var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
- var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
- var hoveredBubbleKeys = hoveredSequence && hoveredSequence.bubbles.map(function (d) {
- return d.key;
- }) || [];
- var viewer = context.container().select('.photoviewer');
- var selected = viewer.empty() ? undefined : viewer.datum();
- var selectedBubbleKey = selected && selected.key;
- var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
- var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
- var selectedBubbleKeys = selectedSequence && selectedSequence.bubbles.map(function (d) {
- return d.key;
- }) || []; // highlight sibling viewfields on either the selected or the hovered sequences
-
- var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
- context.container().selectAll('.layer-streetside-images .viewfield-group').classed('highlighted', function (d) {
- return highlightedBubbleKeys.indexOf(d.key) !== -1;
- }).classed('hovered', function (d) {
- return d.key === hoveredBubbleKey;
- }).classed('currentView', function (d) {
- return d.key === selectedBubbleKey;
- });
- context.container().selectAll('.layer-streetside-images .sequence').classed('highlighted', function (d) {
- return d.properties.key === hoveredSequenceKey;
- }).classed('currentView', function (d) {
- return d.properties.key === selectedSequenceKey;
- }); // update viewfields if needed
+ apibase: function apibase(val) {
+ if (!arguments.length) return _apibase;
+ _apibase = val;
+ return this;
+ }
+ };
- context.container().selectAll('.viewfield-group .viewfield').attr('d', viewfieldPath);
+ var jsonpCache = {};
+ window.jsonpCache = jsonpCache;
+ function jsonpRequest(url, callback) {
+ var request = {
+ abort: function abort() {}
+ };
- function viewfieldPath() {
- var d = this.parentNode.__data__;
+ if (window.JSONP_FIX) {
+ if (window.JSONP_DELAY === 0) {
+ callback(window.JSONP_FIX);
+ } else {
+ var t = window.setTimeout(function () {
+ callback(window.JSONP_FIX);
+ }, window.JSONP_DELAY || 0);
- if (d.pano && d.key !== selectedBubbleKey) {
- return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
- } else {
- return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
- }
+ request.abort = function () {
+ window.clearTimeout(t);
+ };
}
- return this;
- },
- updateUrlImage: function updateUrlImage(imageKey) {
- if (!window.mocha) {
- var hash = utilStringQs(window.location.hash);
+ return request;
+ }
- if (imageKey) {
- hash.photo = 'streetside/' + imageKey;
- } else {
- delete hash.photo;
- }
+ function rand() {
+ var chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz';
+ var c = '';
+ var i = -1;
- window.location.replace('#' + utilQsString(hash, true));
+ while (++i < 15) {
+ c += chars.charAt(Math.floor(Math.random() * 52));
}
- },
-
- /**
- * cache().
- */
- cache: function cache() {
- return _ssCache;
- }
- };
-
- var _apibase$1 = 'https://taginfo.openstreetmap.org/api/4/';
- var _inflight$2 = {};
- var _popularKeys = {};
- var _taginfoCache = {};
- var tag_sorts = {
- point: 'count_nodes',
- vertex: 'count_nodes',
- area: 'count_ways',
- line: 'count_ways'
- };
- var tag_sort_members = {
- point: 'count_node_members',
- vertex: 'count_node_members',
- area: 'count_way_members',
- line: 'count_way_members',
- relation: 'count_relation_members'
- };
- var tag_filters = {
- point: 'nodes',
- vertex: 'nodes',
- area: 'ways',
- line: 'ways'
- };
- var tag_members_fractions = {
- point: 'count_node_members_fraction',
- vertex: 'count_node_members_fraction',
- area: 'count_way_members_fraction',
- line: 'count_way_members_fraction',
- relation: 'count_relation_members_fraction'
- };
- function sets(params, n, o) {
- if (params.geometry && o[params.geometry]) {
- params[n] = o[params.geometry];
+ return c;
}
- return params;
- }
-
- function setFilter(params) {
- return sets(params, 'filter', tag_filters);
- }
+ function create(url) {
+ var e = url.match(/callback=(\w+)/);
+ var c = e ? e[1] : rand();
- function setSort(params) {
- return sets(params, 'sortname', tag_sorts);
- }
+ jsonpCache[c] = function (data) {
+ if (jsonpCache[c]) {
+ callback(data);
+ }
- function setSortMembers(params) {
- return sets(params, 'sortname', tag_sort_members);
- }
+ finalize();
+ };
- function clean(params) {
- return utilObjectOmit(params, ['geometry', 'debounce']);
- }
+ function finalize() {
+ delete jsonpCache[c];
+ script.remove();
+ }
- function filterKeys(type) {
- var count_type = type ? 'count_' + type : 'count_all';
- return function (d) {
- return parseFloat(d[count_type]) > 2500 || d.in_wiki;
- };
- }
+ request.abort = finalize;
+ return 'jsonpCache.' + c;
+ }
- function filterMultikeys(prefix) {
- return function (d) {
- // d.key begins with prefix, and d.key contains no additional ':'s
- var re = new RegExp('^' + prefix + '(.*)$');
- var matches = d.key.match(re) || [];
- return matches.length === 2 && matches[1].indexOf(':') === -1;
- };
+ var cb = create(url);
+ var script = select('head').append('script').attr('type', 'text/javascript').attr('src', url.replace(/(\{|%7B)callback(\}|%7D)/, cb));
+ return request;
}
- function filterValues(allowUpperCase) {
- return function (d) {
- if (d.value.match(/[;,]/) !== null) return false; // exclude some punctuation
+ var bubbleApi = 'https://dev.virtualearth.net/mapcontrol/HumanScaleServices/GetBubbles.ashx?';
+ var streetsideImagesApi = 'https://t.ssl.ak.tiles.virtualearth.net/tiles/';
+ var bubbleAppKey = 'AuftgJsO0Xs8Ts4M1xZUQJQXJNsvmh3IV8DkNieCiy3tCwCUMq76-WpkrBtNAuEm';
+ var pannellumViewerCSS = 'pannellum-streetside/pannellum.css';
+ var pannellumViewerJS = 'pannellum-streetside/pannellum.js';
+ var maxResults$2 = 2000;
+ var tileZoom$2 = 16.5;
+ var tiler$6 = utilTiler().zoomExtent([tileZoom$2, tileZoom$2]).skipNullIsland(true);
+ var dispatch$7 = dispatch('loadedImages', 'viewerChanged');
+ var minHfov = 10; // zoom in degrees: 20, 10, 5
- if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false; // exclude uppercase letters
+ var maxHfov = 90; // zoom out degrees
- return parseFloat(d.fraction) > 0.0;
- };
- }
+ var defaultHfov = 45;
+ var _hires = false;
+ var _resolution = 512; // higher numbers are slower - 512, 1024, 2048, 4096
- function filterRoles(geometry) {
- return function (d) {
- if (d.role === '') return false; // exclude empty role
+ var _currScene = 0;
- if (d.role.match(/[A-Z*;,]/) !== null) return false; // exclude uppercase letters and some punctuation
+ var _ssCache;
- return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
- };
- }
+ var _pannellumViewer;
- function valKey(d) {
- return {
- value: d.key,
- title: d.key
- };
- }
+ var _sceneOptions = {
+ showFullscreenCtrl: false,
+ autoLoad: true,
+ compass: true,
+ yaw: 0,
+ minHfov: minHfov,
+ maxHfov: maxHfov,
+ hfov: defaultHfov,
+ type: 'cubemap',
+ cubeMap: []
+ };
- function valKeyDescription(d) {
- var obj = {
- value: d.value,
- title: d.description || d.value
- };
+ var _loadViewerPromise$2;
+ /**
+ * abortRequest().
+ */
- if (d.count) {
- obj.count = d.count;
- }
- return obj;
+ function abortRequest$6(i) {
+ i.abort();
}
+ /**
+ * localeTimeStamp().
+ */
- function roleKey(d) {
- return {
- value: d.role,
- title: d.role
+
+ function localeTimestamp(s) {
+ if (!s) return null;
+ var options = {
+ day: 'numeric',
+ month: 'short',
+ year: 'numeric'
};
- } // sort keys with ':' lower than keys without ':'
+ var d = new Date(s);
+ if (isNaN(d.getTime())) return null;
+ return d.toLocaleString(_mainLocalizer.localeCode(), options);
+ }
+ /**
+ * loadTiles() wraps the process of generating tiles and then fetching image points for each tile.
+ */
- function sortKeys(a, b) {
- return a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1 ? -1 : a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1 ? 1 : 0;
- }
+ function loadTiles$2(which, url, projection, margin) {
+ var tiles = tiler$6.margin(margin).getTiles(projection); // abort inflight requests that are no longer needed
- var debouncedRequest$1 = debounce(request$1, 300, {
- leading: false
- });
+ var cache = _ssCache[which];
+ Object.keys(cache.inflight).forEach(function (k) {
+ var wanted = tiles.find(function (tile) {
+ return k.indexOf(tile.id + ',') === 0;
+ });
- function request$1(url, params, exactMatch, callback, loaded) {
- if (_inflight$2[url]) return;
- if (checkCache(url, params, exactMatch, callback)) return;
- var controller = new AbortController();
- _inflight$2[url] = controller;
- d3_json(url, {
- signal: controller.signal
- }).then(function (result) {
- delete _inflight$2[url];
- if (loaded) loaded(null, result);
- })["catch"](function (err) {
- delete _inflight$2[url];
- if (err.name === 'AbortError') return;
- if (loaded) loaded(err.message);
+ if (!wanted) {
+ abortRequest$6(cache.inflight[k]);
+ delete cache.inflight[k];
+ }
+ });
+ tiles.forEach(function (tile) {
+ return loadNextTilePage$2(which, url, tile);
});
}
+ /**
+ * loadNextTilePage() load data for the next tile page in line.
+ */
- function checkCache(url, params, exactMatch, callback) {
- var rp = params.rp || 25;
- var testQuery = params.query || '';
- var testUrl = url;
-
- do {
- var hit = _taginfoCache[testUrl]; // exact match, or shorter match yielding fewer than max results (rp)
- if (hit && (url === testUrl || hit.length < rp)) {
- callback(null, hit);
- return true;
- } // don't try to shorten the query
+ function loadNextTilePage$2(which, url, tile) {
+ var cache = _ssCache[which];
+ var nextPage = cache.nextPage[tile.id] || 0;
+ var id = tile.id + ',' + String(nextPage);
+ if (cache.loaded[id] || cache.inflight[id]) return;
+ cache.inflight[id] = getBubbles(url, tile, function (bubbles) {
+ cache.loaded[id] = true;
+ delete cache.inflight[id];
+ if (!bubbles) return; // [].shift() removes the first element, some statistics info, not a bubble point
+ bubbles.shift();
+ var features = bubbles.map(function (bubble) {
+ if (cache.points[bubble.id]) return null; // skip duplicates
- if (exactMatch || !testQuery.length) return false; // do shorten the query to see if we already have a cached result
- // that has returned fewer than max results (rp)
+ var loc = [bubble.lo, bubble.la];
+ var d = {
+ loc: loc,
+ key: bubble.id,
+ ca: bubble.he,
+ captured_at: bubble.cd,
+ captured_by: 'microsoft',
+ // nbn: bubble.nbn,
+ // pbn: bubble.pbn,
+ // ad: bubble.ad,
+ // rn: bubble.rn,
+ pr: bubble.pr,
+ // previous
+ ne: bubble.ne,
+ // next
+ pano: true,
+ sequenceKey: null
+ };
+ cache.points[bubble.id] = d; // a sequence starts here
- testQuery = testQuery.slice(0, -1);
- testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
- } while (testQuery.length >= 0);
+ if (bubble.pr === undefined) {
+ cache.leaders.push(bubble.id);
+ }
- return false;
- }
+ return {
+ minX: loc[0],
+ minY: loc[1],
+ maxX: loc[0],
+ maxY: loc[1],
+ data: d
+ };
+ }).filter(Boolean);
+ cache.rtree.load(features);
+ connectSequences();
- var serviceTaginfo = {
- init: function init() {
- _inflight$2 = {};
- _taginfoCache = {};
- _popularKeys = {
- // manually exclude some keys – #5377, #7485
- postal_code: true,
- full_name: true,
- loc_name: true,
- reg_name: true,
- short_name: true,
- sorting_name: true,
- artist_name: true,
- nat_name: true,
- long_name: true,
- 'bridge:name': true
- }; // Fetch popular keys. We'll exclude these from `values`
- // lookups because they stress taginfo, and they aren't likely
- // to yield meaningful autocomplete results.. see #3955
+ if (which === 'bubbles') {
+ dispatch$7.call('loadedImages');
+ }
+ });
+ } // call this sometimes to connect the bubbles into sequences
- var params = {
- rp: 100,
- sortname: 'values_all',
- sortorder: 'desc',
- page: 1,
- debounce: false,
- lang: _mainLocalizer.languageCode()
- };
- this.keys(params, function (err, data) {
- if (err) return;
- data.forEach(function (d) {
- if (d.value === 'opening_hours') return; // exception
- _popularKeys[d.value] = true;
- });
- });
- },
- reset: function reset() {
- Object.values(_inflight$2).forEach(function (controller) {
- controller.abort();
- });
- _inflight$2 = {};
- },
- keys: function keys(params, callback) {
- var doRequest = params.debounce ? debouncedRequest$1 : request$1;
- params = clean(setSort(params));
- params = Object.assign({
- rp: 10,
- sortname: 'count_all',
- sortorder: 'desc',
- page: 1,
- lang: _mainLocalizer.languageCode()
- }, params);
- var url = _apibase$1 + 'keys/all?' + utilQsString(params);
- doRequest(url, params, false, callback, function (err, d) {
- if (err) {
- callback(err);
- } else {
- var f = filterKeys(params.filter);
- var result = d.data.filter(f).sort(sortKeys).map(valKey);
- _taginfoCache[url] = result;
- callback(null, result);
- }
- });
- },
- multikeys: function multikeys(params, callback) {
- var doRequest = params.debounce ? debouncedRequest$1 : request$1;
- params = clean(setSort(params));
- params = Object.assign({
- rp: 25,
- sortname: 'count_all',
- sortorder: 'desc',
- page: 1,
- lang: _mainLocalizer.languageCode()
- }, params);
- var prefix = params.query;
- var url = _apibase$1 + 'keys/all?' + utilQsString(params);
- doRequest(url, params, true, callback, function (err, d) {
- if (err) {
- callback(err);
- } else {
- var f = filterMultikeys(prefix);
- var result = d.data.filter(f).map(valKey);
- _taginfoCache[url] = result;
- callback(null, result);
- }
- });
- },
- values: function values(params, callback) {
- // Exclude popular keys from values lookups.. see #3955
- var key = params.key;
+ function connectSequences() {
+ var cache = _ssCache.bubbles;
+ var keepLeaders = [];
- if (key && _popularKeys[key]) {
- callback(null, []);
- return;
- }
+ for (var i = 0; i < cache.leaders.length; i++) {
+ var bubble = cache.points[cache.leaders[i]];
+ var seen = {}; // try to make a sequence.. use the key of the leader bubble.
- var doRequest = params.debounce ? debouncedRequest$1 : request$1;
- params = clean(setSort(setFilter(params)));
- params = Object.assign({
- rp: 25,
- sortname: 'count_all',
- sortorder: 'desc',
- page: 1,
- lang: _mainLocalizer.languageCode()
- }, params);
- var url = _apibase$1 + 'key/values?' + utilQsString(params);
- doRequest(url, params, false, callback, function (err, d) {
- if (err) {
- callback(err);
- } else {
- // In most cases we prefer taginfo value results with lowercase letters.
- // A few OSM keys expect values to contain uppercase values (see #3377).
- // This is not an exhaustive list (e.g. `name` also has uppercase values)
- // but these are the fields where taginfo value lookup is most useful.
- var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
- var allowUpperCase = re.test(params.key);
- var f = filterValues(allowUpperCase);
- var result = d.data.filter(f).map(valKeyDescription);
- _taginfoCache[url] = result;
- callback(null, result);
- }
- });
- },
- roles: function roles(params, callback) {
- var doRequest = params.debounce ? debouncedRequest$1 : request$1;
- var geometry = params.geometry;
- params = clean(setSortMembers(params));
- params = Object.assign({
- rp: 25,
- sortname: 'count_all_members',
- sortorder: 'desc',
- page: 1,
- lang: _mainLocalizer.languageCode()
- }, params);
- var url = _apibase$1 + 'relation/roles?' + utilQsString(params);
- doRequest(url, params, true, callback, function (err, d) {
- if (err) {
- callback(err);
- } else {
- var f = filterRoles(geometry);
- var result = d.data.filter(f).map(roleKey);
- _taginfoCache[url] = result;
- callback(null, result);
- }
- });
- },
- docs: function docs(params, callback) {
- var doRequest = params.debounce ? debouncedRequest$1 : request$1;
- params = clean(setSort(params));
- var path = 'key/wiki_pages?';
+ var sequence = {
+ key: bubble.key,
+ bubbles: []
+ };
+ var complete = false;
- if (params.value) {
- path = 'tag/wiki_pages?';
- } else if (params.rtype) {
- path = 'relation/wiki_pages?';
- }
+ do {
+ sequence.bubbles.push(bubble);
+ seen[bubble.key] = true;
- var url = _apibase$1 + path + utilQsString(params);
- doRequest(url, params, true, callback, function (err, d) {
- if (err) {
- callback(err);
+ if (bubble.ne === undefined) {
+ complete = true;
} else {
- _taginfoCache[url] = d.data;
- callback(null, d.data);
+ bubble = cache.points[bubble.ne]; // advance to next
}
- });
- },
- apibase: function apibase(_) {
- if (!arguments.length) return _apibase$1;
- _apibase$1 = _;
- return this;
- }
- };
-
- var helpers$1 = createCommonjsModule(function (module, exports) {
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
- /**
- * @module helpers
- */
+ } while (bubble && !seen[bubble.key] && !complete);
- /**
- * Earth Radius used with the Harvesine formula and approximates using a spherical (non-ellipsoid) Earth.
- *
- * @memberof helpers
- * @type {number}
- */
+ if (complete) {
+ _ssCache.sequences[sequence.key] = sequence; // assign bubbles to the sequence
- exports.earthRadius = 6371008.8;
- /**
- * Unit of measurement factors using a spherical (non-ellipsoid) earth radius.
- *
- * @memberof helpers
- * @type {Object}
- */
+ for (var j = 0; j < sequence.bubbles.length; j++) {
+ sequence.bubbles[j].sequenceKey = sequence.key;
+ } // create a GeoJSON LineString
- exports.factors = {
- centimeters: exports.earthRadius * 100,
- centimetres: exports.earthRadius * 100,
- degrees: exports.earthRadius / 111325,
- feet: exports.earthRadius * 3.28084,
- inches: exports.earthRadius * 39.370,
- kilometers: exports.earthRadius / 1000,
- kilometres: exports.earthRadius / 1000,
- meters: exports.earthRadius,
- metres: exports.earthRadius,
- miles: exports.earthRadius / 1609.344,
- millimeters: exports.earthRadius * 1000,
- millimetres: exports.earthRadius * 1000,
- nauticalmiles: exports.earthRadius / 1852,
- radians: 1,
- yards: exports.earthRadius / 1.0936
- };
- /**
- * Units of measurement factors based on 1 meter.
- *
- * @memberof helpers
- * @type {Object}
- */
- exports.unitsFactors = {
- centimeters: 100,
- centimetres: 100,
- degrees: 1 / 111325,
- feet: 3.28084,
- inches: 39.370,
- kilometers: 1 / 1000,
- kilometres: 1 / 1000,
- meters: 1,
- metres: 1,
- miles: 1 / 1609.344,
- millimeters: 1000,
- millimetres: 1000,
- nauticalmiles: 1 / 1852,
- radians: 1 / exports.earthRadius,
- yards: 1 / 1.0936
- };
- /**
- * Area of measurement factors based on 1 square meter.
- *
- * @memberof helpers
- * @type {Object}
- */
+ sequence.geojson = {
+ type: 'LineString',
+ properties: {
+ captured_at: sequence.bubbles[0] ? sequence.bubbles[0].captured_at : null,
+ captured_by: sequence.bubbles[0] ? sequence.bubbles[0].captured_by : null,
+ key: sequence.key
+ },
+ coordinates: sequence.bubbles.map(function (d) {
+ return d.loc;
+ })
+ };
+ } else {
+ keepLeaders.push(cache.leaders[i]);
+ }
+ } // couldn't complete these, save for later
- exports.areaFactors = {
- acres: 0.000247105,
- centimeters: 10000,
- centimetres: 10000,
- feet: 10.763910417,
- inches: 1550.003100006,
- kilometers: 0.000001,
- kilometres: 0.000001,
- meters: 1,
- metres: 1,
- miles: 3.86e-7,
- millimeters: 1000000,
- millimetres: 1000000,
- yards: 1.195990046
- };
- /**
- * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
- *
- * @name feature
- * @param {Geometry} geometry input geometry
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature} a GeoJSON Feature
- * @example
- * var geometry = {
- * "type": "Point",
- * "coordinates": [110, 50]
- * };
- *
- * var feature = turf.feature(geometry);
- *
- * //=feature
- */
- function feature(geom, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ cache.leaders = keepLeaders;
+ }
+ /**
+ * getBubbles() handles the request to the server for a tile extent of 'bubbles' (streetside image locations).
+ */
- var feat = {
- type: "Feature"
- };
- if (options.id === 0 || options.id) {
- feat.id = options.id;
+ function getBubbles(url, tile, callback) {
+ var rect = tile.extent.rectangle();
+ var urlForRequest = url + utilQsString({
+ n: rect[3],
+ s: rect[1],
+ e: rect[2],
+ w: rect[0],
+ c: maxResults$2,
+ appkey: bubbleAppKey,
+ jsCallback: '{callback}'
+ });
+ return jsonpRequest(urlForRequest, function (data) {
+ if (!data || data.error) {
+ callback(null);
+ } else {
+ callback(data);
}
+ });
+ } // partition viewport into higher zoom tiles
- if (options.bbox) {
- feat.bbox = options.bbox;
- }
- feat.properties = properties || {};
- feat.geometry = geom;
- return feat;
- }
+ function partitionViewport$2(projection) {
+ var z = geoScaleToZoom(projection.scale());
+ var z2 = Math.ceil(z * 2) / 2 + 2.5; // round to next 0.5 and add 2.5
- exports.feature = feature;
- /**
- * Creates a GeoJSON {@link Geometry} from a Geometry string type & coordinates.
- * For GeometryCollection type use `helpers.geometryCollection`
- *
- * @name geometry
- * @param {string} type Geometry Type
- * @param {Array<any>} coordinates Coordinates
- * @param {Object} [options={}] Optional Parameters
- * @returns {Geometry} a GeoJSON Geometry
- * @example
- * var type = "Point";
- * var coordinates = [110, 50];
- * var geometry = turf.geometry(type, coordinates);
- * // => geometry
- */
+ var tiler = utilTiler().zoomExtent([z2, z2]);
+ return tiler.getTiles(projection).map(function (tile) {
+ return tile.extent;
+ });
+ } // no more than `limit` results per partition.
- function geometry(type, coordinates, options) {
- switch (type) {
- case "Point":
- return point(coordinates).geometry;
+ function searchLimited$2(limit, projection, rtree) {
+ limit = limit || 5;
+ return partitionViewport$2(projection).reduce(function (result, extent) {
+ var found = rtree.search(extent.bbox()).slice(0, limit).map(function (d) {
+ return d.data;
+ });
+ return found.length ? result.concat(found) : result;
+ }, []);
+ }
+ /**
+ * loadImage()
+ */
- case "LineString":
- return lineString(coordinates).geometry;
- case "Polygon":
- return polygon(coordinates).geometry;
+ function loadImage(imgInfo) {
+ return new Promise(function (resolve) {
+ var img = new Image();
- case "MultiPoint":
- return multiPoint(coordinates).geometry;
+ img.onload = function () {
+ var canvas = document.getElementById('ideditor-canvas' + imgInfo.face);
+ var ctx = canvas.getContext('2d');
+ ctx.drawImage(img, imgInfo.x, imgInfo.y);
+ resolve({
+ imgInfo: imgInfo,
+ status: 'ok'
+ });
+ };
- case "MultiLineString":
- return multiLineString(coordinates).geometry;
+ img.onerror = function () {
+ resolve({
+ data: imgInfo,
+ status: 'error'
+ });
+ };
- case "MultiPolygon":
- return multiPolygon(coordinates).geometry;
+ img.setAttribute('crossorigin', '');
+ img.src = imgInfo.url;
+ });
+ }
+ /**
+ * loadCanvas()
+ */
- default:
- throw new Error(type + " is invalid");
- }
- }
- exports.geometry = geometry;
- /**
- * Creates a {@link Point} {@link Feature} from a Position.
- *
- * @name point
- * @param {Array<number>} coordinates longitude, latitude position (each in decimal degrees)
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<Point>} a Point feature
- * @example
- * var point = turf.point([-75.343, 39.984]);
- *
- * //=point
- */
+ function loadCanvas(imageGroup) {
+ return Promise.all(imageGroup.map(loadImage)).then(function (data) {
+ var canvas = document.getElementById('ideditor-canvas' + data[0].imgInfo.face);
+ var which = {
+ '01': 0,
+ '02': 1,
+ '03': 2,
+ '10': 3,
+ '11': 4,
+ '12': 5
+ };
+ var face = data[0].imgInfo.face;
+ _sceneOptions.cubeMap[which[face]] = canvas.toDataURL('image/jpeg', 1.0);
+ return {
+ status: 'loadCanvas for face ' + data[0].imgInfo.face + 'ok'
+ };
+ });
+ }
+ /**
+ * loadFaces()
+ */
- function point(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
- var geom = {
- type: "Point",
- coordinates: coordinates
+ function loadFaces(faceGroup) {
+ return Promise.all(faceGroup.map(loadCanvas)).then(function () {
+ return {
+ status: 'loadFaces done'
};
- return feature(geom, properties, options);
- }
-
- exports.point = point;
- /**
- * Creates a {@link Point} {@link FeatureCollection} from an Array of Point coordinates.
- *
- * @name points
- * @param {Array<Array<number>>} coordinates an array of Points
- * @param {Object} [properties={}] Translate these properties to each Feature
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
- * associated with the FeatureCollection
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<Point>} Point Feature
- * @example
- * var points = turf.points([
- * [-75, 39],
- * [-80, 45],
- * [-78, 50]
- * ]);
- *
- * //=points
- */
+ });
+ }
- function points(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ function setupCanvas(selection, reset) {
+ if (reset) {
+ selection.selectAll('#ideditor-stitcher-canvases').remove();
+ } // Add the Streetside working canvases. These are used for 'stitching', or combining,
+ // multiple images for each of the six faces, before passing to the Pannellum control as DataUrls
- return featureCollection(coordinates.map(function (coords) {
- return point(coords, properties);
- }), options);
- }
- exports.points = points;
- /**
- * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
- *
- * @name polygon
- * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<Polygon>} Polygon Feature
- * @example
- * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
- *
- * //=polygon
- */
+ selection.selectAll('#ideditor-stitcher-canvases').data([0]).enter().append('div').attr('id', 'ideditor-stitcher-canvases').attr('display', 'none').selectAll('canvas').data(['canvas01', 'canvas02', 'canvas03', 'canvas10', 'canvas11', 'canvas12']).enter().append('canvas').attr('id', function (d) {
+ return 'ideditor-' + d;
+ }).attr('width', _resolution).attr('height', _resolution);
+ }
- function polygon(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ function qkToXY(qk) {
+ var x = 0;
+ var y = 0;
+ var scale = 256;
- for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
- var ring = coordinates_1[_i];
+ for (var i = qk.length; i > 0; i--) {
+ var key = qk[i - 1];
+ x += +(key === '1' || key === '3') * scale;
+ y += +(key === '2' || key === '3') * scale;
+ scale *= 2;
+ }
- if (ring.length < 4) {
- throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
- }
+ return [x, y];
+ }
- for (var j = 0; j < ring[ring.length - 1].length; j++) {
- // Check if first point of Polygon contains two numbers
- if (ring[ring.length - 1][j] !== ring[0][j]) {
- throw new Error("First and last Position are not equivalent.");
- }
- }
- }
+ function getQuadKeys() {
+ var dim = _resolution / 256;
+ var quadKeys;
- var geom = {
- type: "Polygon",
- coordinates: coordinates
- };
- return feature(geom, properties, options);
+ if (dim === 16) {
+ quadKeys = ['0000', '0001', '0010', '0011', '0100', '0101', '0110', '0111', '1000', '1001', '1010', '1011', '1100', '1101', '1110', '1111', '0002', '0003', '0012', '0013', '0102', '0103', '0112', '0113', '1002', '1003', '1012', '1013', '1102', '1103', '1112', '1113', '0020', '0021', '0030', '0031', '0120', '0121', '0130', '0131', '1020', '1021', '1030', '1031', '1120', '1121', '1130', '1131', '0022', '0023', '0032', '0033', '0122', '0123', '0132', '0133', '1022', '1023', '1032', '1033', '1122', '1123', '1132', '1133', '0200', '0201', '0210', '0211', '0300', '0301', '0310', '0311', '1200', '1201', '1210', '1211', '1300', '1301', '1310', '1311', '0202', '0203', '0212', '0213', '0302', '0303', '0312', '0313', '1202', '1203', '1212', '1213', '1302', '1303', '1312', '1313', '0220', '0221', '0230', '0231', '0320', '0321', '0330', '0331', '1220', '1221', '1230', '1231', '1320', '1321', '1330', '1331', '0222', '0223', '0232', '0233', '0322', '0323', '0332', '0333', '1222', '1223', '1232', '1233', '1322', '1323', '1332', '1333', '2000', '2001', '2010', '2011', '2100', '2101', '2110', '2111', '3000', '3001', '3010', '3011', '3100', '3101', '3110', '3111', '2002', '2003', '2012', '2013', '2102', '2103', '2112', '2113', '3002', '3003', '3012', '3013', '3102', '3103', '3112', '3113', '2020', '2021', '2030', '2031', '2120', '2121', '2130', '2131', '3020', '3021', '3030', '3031', '3120', '3121', '3130', '3131', '2022', '2023', '2032', '2033', '2122', '2123', '2132', '2133', '3022', '3023', '3032', '3033', '3122', '3123', '3132', '3133', '2200', '2201', '2210', '2211', '2300', '2301', '2310', '2311', '3200', '3201', '3210', '3211', '3300', '3301', '3310', '3311', '2202', '2203', '2212', '2213', '2302', '2303', '2312', '2313', '3202', '3203', '3212', '3213', '3302', '3303', '3312', '3313', '2220', '2221', '2230', '2231', '2320', '2321', '2330', '2331', '3220', '3221', '3230', '3231', '3320', '3321', '3330', '3331', '2222', '2223', '2232', '2233', '2322', '2323', '2332', '2333', '3222', '3223', '3232', '3233', '3322', '3323', '3332', '3333'];
+ } else if (dim === 8) {
+ quadKeys = ['000', '001', '010', '011', '100', '101', '110', '111', '002', '003', '012', '013', '102', '103', '112', '113', '020', '021', '030', '031', '120', '121', '130', '131', '022', '023', '032', '033', '122', '123', '132', '133', '200', '201', '210', '211', '300', '301', '310', '311', '202', '203', '212', '213', '302', '303', '312', '313', '220', '221', '230', '231', '320', '321', '330', '331', '222', '223', '232', '233', '322', '323', '332', '333'];
+ } else if (dim === 4) {
+ quadKeys = ['00', '01', '10', '11', '02', '03', '12', '13', '20', '21', '30', '31', '22', '23', '32', '33'];
+ } else {
+ // dim === 2
+ quadKeys = ['0', '1', '2', '3'];
}
- exports.polygon = polygon;
+ return quadKeys;
+ }
+
+ var serviceStreetside = {
/**
- * Creates a {@link Polygon} {@link FeatureCollection} from an Array of Polygon coordinates.
- *
- * @name polygons
- * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygon coordinates
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<Polygon>} Polygon FeatureCollection
- * @example
- * var polygons = turf.polygons([
- * [[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]],
- * [[[-15, 42], [-14, 46], [-12, 41], [-17, 44], [-15, 42]]],
- * ]);
- *
- * //=polygons
+ * init() initialize streetside.
*/
-
- function polygons(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
+ init: function init() {
+ if (!_ssCache) {
+ this.reset();
}
- return featureCollection(coordinates.map(function (coords) {
- return polygon(coords, properties);
- }), options);
- }
+ this.event = utilRebind(this, dispatch$7, 'on');
+ },
- exports.polygons = polygons;
/**
- * Creates a {@link LineString} {@link Feature} from an Array of Positions.
- *
- * @name lineString
- * @param {Array<Array<number>>} coordinates an array of Positions
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<LineString>} LineString Feature
- * @example
- * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
- * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
- *
- * //=linestring1
- * //=linestring2
+ * reset() reset the cache.
*/
-
- function lineString(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
-
- if (coordinates.length < 2) {
- throw new Error("coordinates must be an array of two or more positions");
+ reset: function reset() {
+ if (_ssCache) {
+ Object.values(_ssCache.bubbles.inflight).forEach(abortRequest$6);
}
- var geom = {
- type: "LineString",
- coordinates: coordinates
+ _ssCache = {
+ bubbles: {
+ inflight: {},
+ loaded: {},
+ nextPage: {},
+ rtree: new RBush(),
+ points: {},
+ leaders: []
+ },
+ sequences: {}
};
- return feature(geom, properties, options);
- }
+ },
- exports.lineString = lineString;
/**
- * Creates a {@link LineString} {@link FeatureCollection} from an Array of LineString coordinates.
- *
- * @name lineStrings
- * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north]
- * associated with the FeatureCollection
- * @param {string|number} [options.id] Identifier associated with the FeatureCollection
- * @returns {FeatureCollection<LineString>} LineString FeatureCollection
- * @example
- * var linestrings = turf.lineStrings([
- * [[-24, 63], [-23, 60], [-25, 65], [-20, 69]],
- * [[-14, 43], [-13, 40], [-15, 45], [-10, 49]]
- * ]);
- *
- * //=linestrings
+ * bubbles()
*/
+ bubbles: function bubbles(projection) {
+ var limit = 5;
+ return searchLimited$2(limit, projection, _ssCache.bubbles.rtree);
+ },
+ cachedImage: function cachedImage(imageKey) {
+ return _ssCache.bubbles.points[imageKey];
+ },
+ sequences: function sequences(projection) {
+ var viewport = projection.clipExtent();
+ var min = [viewport[0][0], viewport[1][1]];
+ var max = [viewport[1][0], viewport[0][1]];
+ var bbox = geoExtent(projection.invert(min), projection.invert(max)).bbox();
+ var seen = {};
+ var results = []; // all sequences for bubbles in viewport
- function lineStrings(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ _ssCache.bubbles.rtree.search(bbox).forEach(function (d) {
+ var key = d.data.sequenceKey;
- return featureCollection(coordinates.map(function (coords) {
- return lineString(coords, properties);
- }), options);
- }
+ if (key && !seen[key]) {
+ seen[key] = true;
+ results.push(_ssCache.sequences[key].geojson);
+ }
+ });
+
+ return results;
+ },
- exports.lineStrings = lineStrings;
/**
- * Takes one or more {@link Feature|Features} and creates a {@link FeatureCollection}.
- *
- * @name featureCollection
- * @param {Feature[]} features input features
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {FeatureCollection} FeatureCollection of Features
- * @example
- * var locationA = turf.point([-75.343, 39.984], {name: 'Location A'});
- * var locationB = turf.point([-75.833, 39.284], {name: 'Location B'});
- * var locationC = turf.point([-75.534, 39.123], {name: 'Location C'});
- *
- * var collection = turf.featureCollection([
- * locationA,
- * locationB,
- * locationC
- * ]);
- *
- * //=collection
+ * loadBubbles()
*/
+ loadBubbles: function loadBubbles(projection, margin) {
+ // by default: request 2 nearby tiles so we can connect sequences.
+ if (margin === undefined) margin = 2;
+ loadTiles$2('bubbles', bubbleApi, projection, margin);
+ },
+ viewer: function viewer() {
+ return _pannellumViewer;
+ },
+ initViewer: function initViewer() {
+ if (!window.pannellum) return;
+ if (_pannellumViewer) return;
+ _currScene += 1;
- function featureCollection(features, options) {
- if (options === void 0) {
- options = {};
- }
+ var sceneID = _currScene.toString();
- var fc = {
- type: "FeatureCollection"
+ var options = {
+ 'default': {
+ firstScene: sceneID
+ },
+ scenes: {}
};
+ options.scenes[sceneID] = _sceneOptions;
+ _pannellumViewer = window.pannellum.viewer('ideditor-viewer-streetside', options);
+ },
+ ensureViewerLoaded: function ensureViewerLoaded(context) {
+ if (_loadViewerPromise$2) return _loadViewerPromise$2; // create ms-wrapper, a photo wrapper class
- if (options.id) {
- fc.id = options.id;
- }
-
- if (options.bbox) {
- fc.bbox = options.bbox;
- }
+ var wrap = context.container().select('.photoviewer').selectAll('.ms-wrapper').data([0]); // inject ms-wrapper into the photoviewer div
+ // (used by all to house each custom photo viewer)
- fc.features = features;
- return fc;
- }
+ var wrapEnter = wrap.enter().append('div').attr('class', 'photo-wrapper ms-wrapper').classed('hide', true);
+ var that = this;
+ var pointerPrefix = 'PointerEvent' in window ? 'pointer' : 'mouse'; // inject div to support streetside viewer (pannellum) and attribution line
- exports.featureCollection = featureCollection;
- /**
- * Creates a {@link Feature<MultiLineString>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiLineString
- * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiLineString>} a MultiLineString feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
- *
- * //=multiLine
- */
+ wrapEnter.append('div').attr('id', 'ideditor-viewer-streetside').on(pointerPrefix + 'down.streetside', function () {
+ select(window).on(pointerPrefix + 'move.streetside', function () {
+ dispatch$7.call('viewerChanged');
+ }, true);
+ }).on(pointerPrefix + 'up.streetside pointercancel.streetside', function () {
+ select(window).on(pointerPrefix + 'move.streetside', null); // continue dispatching events for a few seconds, in case viewer has inertia.
- function multiLineString(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ var t = timer(function (elapsed) {
+ dispatch$7.call('viewerChanged');
- var geom = {
- type: "MultiLineString",
- coordinates: coordinates
- };
- return feature(geom, properties, options);
- }
+ if (elapsed > 2000) {
+ t.stop();
+ }
+ });
+ }).append('div').attr('class', 'photo-attribution fillD');
+ var controlsEnter = wrapEnter.append('div').attr('class', 'photo-controls-wrap').append('div').attr('class', 'photo-controls');
+ controlsEnter.append('button').on('click.back', step(-1)).html('◄');
+ controlsEnter.append('button').on('click.forward', step(1)).html('►'); // create working canvas for stitching together images
- exports.multiLineString = multiLineString;
- /**
- * Creates a {@link Feature<MultiPoint>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiPoint
- * @param {Array<Array<number>>} coordinates an array of Positions
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiPoint>} a MultiPoint feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiPt = turf.multiPoint([[0,0],[10,10]]);
- *
- * //=multiPt
- */
+ wrap = wrap.merge(wrapEnter).call(setupCanvas, true); // Register viewer resize handler
- function multiPoint(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ context.ui().photoviewer.on('resize.streetside', function () {
+ if (_pannellumViewer) {
+ _pannellumViewer.resize();
+ }
+ });
+ _loadViewerPromise$2 = new Promise(function (resolve, reject) {
+ var loadedCount = 0;
- var geom = {
- type: "MultiPoint",
- coordinates: coordinates
- };
- return feature(geom, properties, options);
- }
+ function loaded() {
+ loadedCount += 1; // wait until both files are loaded
- exports.multiPoint = multiPoint;
- /**
- * Creates a {@link Feature<MultiPolygon>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name multiPolygon
- * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<MultiPolygon>} a multipolygon feature
- * @throws {Error} if no coordinates are passed
- * @example
- * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
- *
- * //=multiPoly
- *
- */
+ if (loadedCount === 2) resolve();
+ }
- function multiPolygon(coordinates, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ var head = select('head'); // load streetside pannellum viewer css
- var geom = {
- type: "MultiPolygon",
- coordinates: coordinates
- };
- return feature(geom, properties, options);
- }
+ head.selectAll('#ideditor-streetside-viewercss').data([0]).enter().append('link').attr('id', 'ideditor-streetside-viewercss').attr('rel', 'stylesheet').attr('crossorigin', 'anonymous').attr('href', context.asset(pannellumViewerCSS)).on('load.serviceStreetside', loaded).on('error.serviceStreetside', function () {
+ reject();
+ }); // load streetside pannellum viewer js
- exports.multiPolygon = multiPolygon;
- /**
- * Creates a {@link Feature<GeometryCollection>} based on a
- * coordinate array. Properties can be added optionally.
- *
- * @name geometryCollection
- * @param {Array<Geometry>} geometries an array of GeoJSON Geometries
- * @param {Object} [properties={}] an Object of key-value pairs to add as properties
- * @param {Object} [options={}] Optional Parameters
- * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
- * @param {string|number} [options.id] Identifier associated with the Feature
- * @returns {Feature<GeometryCollection>} a GeoJSON GeometryCollection Feature
- * @example
- * var pt = turf.geometry("Point", [100, 0]);
- * var line = turf.geometry("LineString", [[101, 0], [102, 1]]);
- * var collection = turf.geometryCollection([pt, line]);
- *
- * // => collection
- */
+ head.selectAll('#ideditor-streetside-viewerjs').data([0]).enter().append('script').attr('id', 'ideditor-streetside-viewerjs').attr('crossorigin', 'anonymous').attr('src', context.asset(pannellumViewerJS)).on('load.serviceStreetside', loaded).on('error.serviceStreetside', function () {
+ reject();
+ });
+ })["catch"](function () {
+ _loadViewerPromise$2 = null;
+ });
+ return _loadViewerPromise$2;
- function geometryCollection(geometries, properties, options) {
- if (options === void 0) {
- options = {};
- }
+ function step(stepBy) {
+ return function () {
+ var viewer = context.container().select('.photoviewer');
+ var selected = viewer.empty() ? undefined : viewer.datum();
+ if (!selected) return;
+ var nextID = stepBy === 1 ? selected.ne : selected.pr;
- var geom = {
- type: "GeometryCollection",
- geometries: geometries
- };
- return feature(geom, properties, options);
- }
+ var yaw = _pannellumViewer.getYaw();
- exports.geometryCollection = geometryCollection;
- /**
- * Round number to precision
- *
- * @param {number} num Number
- * @param {number} [precision=0] Precision
- * @returns {number} rounded number
- * @example
- * turf.round(120.4321)
- * //=120
- *
- * turf.round(120.4321, 2)
- * //=120.43
- */
+ var ca = selected.ca + yaw;
+ var origin = selected.loc; // construct a search trapezoid pointing out from current bubble
- function round(num, precision) {
- if (precision === void 0) {
- precision = 0;
- }
+ var meters = 35;
+ var p1 = [origin[0] + geoMetersToLon(meters / 5, origin[1]), origin[1]];
+ var p2 = [origin[0] + geoMetersToLon(meters / 2, origin[1]), origin[1] + geoMetersToLat(meters)];
+ var p3 = [origin[0] - geoMetersToLon(meters / 2, origin[1]), origin[1] + geoMetersToLat(meters)];
+ var p4 = [origin[0] - geoMetersToLon(meters / 5, origin[1]), origin[1]];
+ var poly = [p1, p2, p3, p4, p1]; // rotate it to face forward/backward
- if (precision && !(precision >= 0)) {
- throw new Error("precision must be a positive number");
- }
+ var angle = (stepBy === 1 ? ca : ca + 180) * (Math.PI / 180);
+ poly = geoRotate(poly, -angle, origin);
+ var extent = poly.reduce(function (extent, point) {
+ return extent.extend(geoExtent(point));
+ }, geoExtent()); // find nearest other bubble in the search polygon
- var multiplier = Math.pow(10, precision || 0);
- return Math.round(num * multiplier) / multiplier;
- }
+ var minDist = Infinity;
- exports.round = round;
- /**
- * Convert a distance measurement (assuming a spherical Earth) from radians to a more friendly unit.
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @name radiansToLength
- * @param {number} radians in radians across the sphere
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} distance
- */
+ _ssCache.bubbles.rtree.search(extent.bbox()).forEach(function (d) {
+ if (d.data.key === selected.key) return;
+ if (!geoPointInPolygon(d.data.loc, poly)) return;
+ var dist = geoVecLength(d.data.loc, selected.loc);
+ var theta = selected.ca - d.data.ca;
+ var minTheta = Math.min(Math.abs(theta), 360 - Math.abs(theta));
- function radiansToLength(radians, units) {
- if (units === void 0) {
- units = "kilometers";
- }
+ if (minTheta > 20) {
+ dist += 5; // penalize distance if camera angles don't match
+ }
- var factor = exports.factors[units];
+ if (dist < minDist) {
+ nextID = d.data.key;
+ minDist = dist;
+ }
+ });
- if (!factor) {
- throw new Error(units + " units is invalid");
+ var nextBubble = nextID && that.cachedImage(nextID);
+ if (!nextBubble) return;
+ context.map().centerEase(nextBubble.loc);
+ that.selectImage(context, nextBubble.key).yaw(yaw).showViewer(context);
+ };
}
+ },
+ yaw: function yaw(_yaw) {
+ if (typeof _yaw !== 'number') return _yaw;
+ _sceneOptions.yaw = _yaw;
+ return this;
+ },
- return radians * factor;
- }
-
- exports.radiansToLength = radiansToLength;
/**
- * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into radians
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @name lengthToRadians
- * @param {number} distance in real units
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} radians
+ * showViewer()
*/
+ showViewer: function showViewer(context) {
+ var wrap = context.container().select('.photoviewer').classed('hide', false);
+ var isHidden = wrap.selectAll('.photo-wrapper.ms-wrapper.hide').size();
- function lengthToRadians(distance, units) {
- if (units === void 0) {
- units = "kilometers";
- }
-
- var factor = exports.factors[units];
-
- if (!factor) {
- throw new Error(units + " units is invalid");
+ if (isHidden) {
+ wrap.selectAll('.photo-wrapper:not(.ms-wrapper)').classed('hide', true);
+ wrap.selectAll('.photo-wrapper.ms-wrapper').classed('hide', false);
}
- return distance / factor;
- }
+ return this;
+ },
- exports.lengthToRadians = lengthToRadians;
/**
- * Convert a distance measurement (assuming a spherical Earth) from a real-world unit into degrees
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, centimeters, kilometres, feet
- *
- * @name lengthToDegrees
- * @param {number} distance in real units
- * @param {string} [units="kilometers"] can be degrees, radians, miles, or kilometers inches, yards, metres,
- * meters, kilometres, kilometers.
- * @returns {number} degrees
+ * hideViewer()
*/
+ hideViewer: function hideViewer(context) {
+ var viewer = context.container().select('.photoviewer');
+ if (!viewer.empty()) viewer.datum(null);
+ viewer.classed('hide', true).selectAll('.photo-wrapper').classed('hide', true);
+ context.container().selectAll('.viewfield-group, .sequence, .icon-sign').classed('currentView', false);
+ this.updateUrlImage(null);
+ return this.setStyles(context, null, true);
+ },
- function lengthToDegrees(distance, units) {
- return radiansToDegrees(lengthToRadians(distance, units));
- }
-
- exports.lengthToDegrees = lengthToDegrees;
/**
- * Converts any bearing angle from the north line direction (positive clockwise)
- * and returns an angle between 0-360 degrees (positive clockwise), 0 being the north line
- *
- * @name bearingToAzimuth
- * @param {number} bearing angle, between -180 and +180 degrees
- * @returns {number} angle between 0 and 360 degrees
+ * selectImage().
*/
+ selectImage: function selectImage(context, key) {
+ var that = this;
+ var d = this.cachedImage(key);
+ var viewer = context.container().select('.photoviewer');
+ if (!viewer.empty()) viewer.datum(d);
+ this.setStyles(context, null, true);
+ var wrap = context.container().select('.photoviewer .ms-wrapper');
+ var attribution = wrap.selectAll('.photo-attribution').html('');
+ wrap.selectAll('.pnlm-load-box') // display "loading.."
+ .style('display', 'block');
+ if (!d) return this;
+ this.updateUrlImage(key);
+ _sceneOptions.northOffset = d.ca;
+ var line1 = attribution.append('div').attr('class', 'attribution-row');
+ var hiresDomId = utilUniqueDomId('streetside-hires'); // Add hires checkbox
- function bearingToAzimuth(bearing) {
- var angle = bearing % 360;
+ var label = line1.append('label').attr('for', hiresDomId).attr('class', 'streetside-hires');
+ label.append('input').attr('type', 'checkbox').attr('id', hiresDomId).property('checked', _hires).on('click', function (d3_event) {
+ d3_event.stopPropagation();
+ _hires = !_hires;
+ _resolution = _hires ? 1024 : 512;
+ wrap.call(setupCanvas, true);
+ var viewstate = {
+ yaw: _pannellumViewer.getYaw(),
+ pitch: _pannellumViewer.getPitch(),
+ hfov: _pannellumViewer.getHfov()
+ };
+ _sceneOptions = Object.assign(_sceneOptions, viewstate);
+ that.selectImage(context, d.key).showViewer(context);
+ });
+ label.append('span').html(_t.html('streetside.hires'));
+ var captureInfo = line1.append('div').attr('class', 'attribution-capture-info'); // Add capture date
- if (angle < 0) {
- angle += 360;
+ if (d.captured_by) {
+ var yyyy = new Date().getFullYear();
+ captureInfo.append('a').attr('class', 'captured_by').attr('target', '_blank').attr('href', 'https://www.microsoft.com/en-us/maps/streetside').html('©' + yyyy + ' Microsoft');
+ captureInfo.append('span').html('|');
}
- return angle;
- }
-
- exports.bearingToAzimuth = bearingToAzimuth;
- /**
- * Converts an angle in radians to degrees
- *
- * @name radiansToDegrees
- * @param {number} radians angle in radians
- * @returns {number} degrees between 0 and 360 degrees
- */
+ if (d.captured_at) {
+ captureInfo.append('span').attr('class', 'captured_at').html(localeTimestamp(d.captured_at));
+ } // Add image links
- function radiansToDegrees(radians) {
- var degrees = radians % (2 * Math.PI);
- return degrees * 180 / Math.PI;
- }
- exports.radiansToDegrees = radiansToDegrees;
- /**
- * Converts an angle in degrees to radians
- *
- * @name degreesToRadians
- * @param {number} degrees angle between 0 and 360 degrees
- * @returns {number} angle in radians
- */
+ var line2 = attribution.append('div').attr('class', 'attribution-row');
+ line2.append('a').attr('class', 'image-view-link').attr('target', '_blank').attr('href', 'https://www.bing.com/maps?cp=' + d.loc[1] + '~' + d.loc[0] + '&lvl=17&dir=' + d.ca + '&style=x&v=2&sV=1').html(_t.html('streetside.view_on_bing'));
+ line2.append('a').attr('class', 'image-report-link').attr('target', '_blank').attr('href', 'https://www.bing.com/maps/privacyreport/streetsideprivacyreport?bubbleid=' + encodeURIComponent(d.key) + '&focus=photo&lat=' + d.loc[1] + '&lng=' + d.loc[0] + '&z=17').html(_t.html('streetside.report'));
+ var bubbleIdQuadKey = d.key.toString(4);
+ var paddingNeeded = 16 - bubbleIdQuadKey.length;
- function degreesToRadians(degrees) {
- var radians = degrees % 360;
- return radians * Math.PI / 180;
- }
+ for (var i = 0; i < paddingNeeded; i++) {
+ bubbleIdQuadKey = '0' + bubbleIdQuadKey;
+ }
- exports.degreesToRadians = degreesToRadians;
- /**
- * Converts a length to the requested unit.
- * Valid units: miles, nauticalmiles, inches, yards, meters, metres, kilometers, centimeters, feet
- *
- * @param {number} length to be converted
- * @param {Units} [originalUnit="kilometers"] of the length
- * @param {Units} [finalUnit="kilometers"] returned unit
- * @returns {number} the converted length
- */
+ var imgUrlPrefix = streetsideImagesApi + 'hs' + bubbleIdQuadKey;
+ var imgUrlSuffix = '.jpg?g=6338&n=z'; // Cubemap face code order matters here: front=01, right=02, back=03, left=10, up=11, down=12
- function convertLength(length, originalUnit, finalUnit) {
- if (originalUnit === void 0) {
- originalUnit = "kilometers";
- }
+ var faceKeys = ['01', '02', '03', '10', '11', '12']; // Map images to cube faces
- if (finalUnit === void 0) {
- finalUnit = "kilometers";
- }
+ var quadKeys = getQuadKeys();
+ var faces = faceKeys.map(function (faceKey) {
+ return quadKeys.map(function (quadKey) {
+ var xy = qkToXY(quadKey);
+ return {
+ face: faceKey,
+ url: imgUrlPrefix + faceKey + quadKey + imgUrlSuffix,
+ x: xy[0],
+ y: xy[1]
+ };
+ });
+ });
+ loadFaces(faces).then(function () {
+ if (!_pannellumViewer) {
+ that.initViewer();
+ } else {
+ // make a new scene
+ _currScene += 1;
- if (!(length >= 0)) {
- throw new Error("length must be a positive number");
- }
+ var sceneID = _currScene.toString();
- return radiansToLength(lengthToRadians(length, originalUnit), finalUnit);
- }
+ _pannellumViewer.addScene(sceneID, _sceneOptions).loadScene(sceneID); // remove previous scene
- exports.convertLength = convertLength;
- /**
- * Converts a area to the requested unit.
- * Valid units: kilometers, kilometres, meters, metres, centimetres, millimeters, acres, miles, yards, feet, inches
- * @param {number} area to be converted
- * @param {Units} [originalUnit="meters"] of the distance
- * @param {Units} [finalUnit="kilometers"] returned unit
- * @returns {number} the converted distance
- */
- function convertArea(area, originalUnit, finalUnit) {
- if (originalUnit === void 0) {
- originalUnit = "meters";
- }
+ if (_currScene > 2) {
+ sceneID = (_currScene - 1).toString();
- if (finalUnit === void 0) {
- finalUnit = "kilometers";
+ _pannellumViewer.removeScene(sceneID);
+ }
+ }
+ });
+ return this;
+ },
+ getSequenceKeyForBubble: function getSequenceKeyForBubble(d) {
+ return d && d.sequenceKey;
+ },
+ // Updates the currently highlighted sequence and selected bubble.
+ // Reset is only necessary when interacting with the viewport because
+ // this implicitly changes the currently selected bubble/sequence
+ setStyles: function setStyles(context, hovered, reset) {
+ if (reset) {
+ // reset all layers
+ context.container().selectAll('.viewfield-group').classed('highlighted', false).classed('hovered', false).classed('currentView', false);
+ context.container().selectAll('.sequence').classed('highlighted', false).classed('currentView', false);
}
- if (!(area >= 0)) {
- throw new Error("area must be a positive number");
- }
+ var hoveredBubbleKey = hovered && hovered.key;
+ var hoveredSequenceKey = this.getSequenceKeyForBubble(hovered);
+ var hoveredSequence = hoveredSequenceKey && _ssCache.sequences[hoveredSequenceKey];
+ var hoveredBubbleKeys = hoveredSequence && hoveredSequence.bubbles.map(function (d) {
+ return d.key;
+ }) || [];
+ var viewer = context.container().select('.photoviewer');
+ var selected = viewer.empty() ? undefined : viewer.datum();
+ var selectedBubbleKey = selected && selected.key;
+ var selectedSequenceKey = this.getSequenceKeyForBubble(selected);
+ var selectedSequence = selectedSequenceKey && _ssCache.sequences[selectedSequenceKey];
+ var selectedBubbleKeys = selectedSequence && selectedSequence.bubbles.map(function (d) {
+ return d.key;
+ }) || []; // highlight sibling viewfields on either the selected or the hovered sequences
- var startFactor = exports.areaFactors[originalUnit];
+ var highlightedBubbleKeys = utilArrayUnion(hoveredBubbleKeys, selectedBubbleKeys);
+ context.container().selectAll('.layer-streetside-images .viewfield-group').classed('highlighted', function (d) {
+ return highlightedBubbleKeys.indexOf(d.key) !== -1;
+ }).classed('hovered', function (d) {
+ return d.key === hoveredBubbleKey;
+ }).classed('currentView', function (d) {
+ return d.key === selectedBubbleKey;
+ });
+ context.container().selectAll('.layer-streetside-images .sequence').classed('highlighted', function (d) {
+ return d.properties.key === hoveredSequenceKey;
+ }).classed('currentView', function (d) {
+ return d.properties.key === selectedSequenceKey;
+ }); // update viewfields if needed
- if (!startFactor) {
- throw new Error("invalid original units");
- }
+ context.container().selectAll('.viewfield-group .viewfield').attr('d', viewfieldPath);
- var finalFactor = exports.areaFactors[finalUnit];
+ function viewfieldPath() {
+ var d = this.parentNode.__data__;
- if (!finalFactor) {
- throw new Error("invalid final units");
+ if (d.pano && d.key !== selectedBubbleKey) {
+ return 'M 8,13 m -10,0 a 10,10 0 1,0 20,0 a 10,10 0 1,0 -20,0';
+ } else {
+ return 'M 6,9 C 8,8.4 8,8.4 10,9 L 16,-2 C 12,-5 4,-5 0,-2 z';
+ }
}
- return area / startFactor * finalFactor;
- }
+ return this;
+ },
+ updateUrlImage: function updateUrlImage(imageKey) {
+ if (!window.mocha) {
+ var hash = utilStringQs(window.location.hash);
- exports.convertArea = convertArea;
- /**
- * isNumber
- *
- * @param {*} num Number to validate
- * @returns {boolean} true/false
- * @example
- * turf.isNumber(123)
- * //=true
- * turf.isNumber('foo')
- * //=false
- */
+ if (imageKey) {
+ hash.photo = 'streetside/' + imageKey;
+ } else {
+ delete hash.photo;
+ }
- function isNumber(num) {
- return !isNaN(num) && num !== null && !Array.isArray(num) && !/^\s*$/.test(num);
- }
+ window.location.replace('#' + utilQsString(hash, true));
+ }
+ },
- exports.isNumber = isNumber;
/**
- * isObject
- *
- * @param {*} input variable to validate
- * @returns {boolean} true/false
- * @example
- * turf.isObject({elevation: 10})
- * //=true
- * turf.isObject('foo')
- * //=false
+ * cache().
*/
-
- function isObject(input) {
- return !!input && input.constructor === Object;
+ cache: function cache() {
+ return _ssCache;
}
+ };
- exports.isObject = isObject;
- /**
- * Validate BBox
- *
- * @private
- * @param {Array<number>} bbox BBox to validate
- * @returns {void}
- * @throws Error if BBox is not valid
- * @example
- * validateBBox([-180, -40, 110, 50])
- * //=OK
- * validateBBox([-180, -40])
- * //=Error
- * validateBBox('Foo')
- * //=Error
- * validateBBox(5)
- * //=Error
- * validateBBox(null)
- * //=Error
- * validateBBox(undefined)
- * //=Error
- */
+ var _apibase$1 = 'https://taginfo.openstreetmap.org/api/4/';
+ var _inflight$2 = {};
+ var _popularKeys = {};
+ var _taginfoCache = {};
+ var tag_sorts = {
+ point: 'count_nodes',
+ vertex: 'count_nodes',
+ area: 'count_ways',
+ line: 'count_ways'
+ };
+ var tag_sort_members = {
+ point: 'count_node_members',
+ vertex: 'count_node_members',
+ area: 'count_way_members',
+ line: 'count_way_members',
+ relation: 'count_relation_members'
+ };
+ var tag_filters = {
+ point: 'nodes',
+ vertex: 'nodes',
+ area: 'ways',
+ line: 'ways'
+ };
+ var tag_members_fractions = {
+ point: 'count_node_members_fraction',
+ vertex: 'count_node_members_fraction',
+ area: 'count_way_members_fraction',
+ line: 'count_way_members_fraction',
+ relation: 'count_relation_members_fraction'
+ };
- function validateBBox(bbox) {
- if (!bbox) {
- throw new Error("bbox is required");
- }
+ function sets(params, n, o) {
+ if (params.geometry && o[params.geometry]) {
+ params[n] = o[params.geometry];
+ }
- if (!Array.isArray(bbox)) {
- throw new Error("bbox must be an Array");
- }
+ return params;
+ }
- if (bbox.length !== 4 && bbox.length !== 6) {
- throw new Error("bbox must be an Array of 4 or 6 numbers");
- }
+ function setFilter(params) {
+ return sets(params, 'filter', tag_filters);
+ }
- bbox.forEach(function (num) {
- if (!isNumber(num)) {
- throw new Error("bbox must only contain numbers");
- }
- });
- }
+ function setSort(params) {
+ return sets(params, 'sortname', tag_sorts);
+ }
- exports.validateBBox = validateBBox;
- /**
- * Validate Id
- *
- * @private
- * @param {string|number} id Id to validate
- * @returns {void}
- * @throws Error if Id is not valid
- * @example
- * validateId([-180, -40, 110, 50])
- * //=Error
- * validateId([-180, -40])
- * //=Error
- * validateId('Foo')
- * //=OK
- * validateId(5)
- * //=OK
- * validateId(null)
- * //=Error
- * validateId(undefined)
- * //=Error
- */
+ function setSortMembers(params) {
+ return sets(params, 'sortname', tag_sort_members);
+ }
- function validateId(id) {
- if (!id) {
- throw new Error("id is required");
- }
+ function clean(params) {
+ return utilObjectOmit(params, ['geometry', 'debounce']);
+ }
- if (["string", "number"].indexOf(_typeof(id)) === -1) {
- throw new Error("id must be a number or a string");
- }
- }
+ function filterKeys(type) {
+ var count_type = type ? 'count_' + type : 'count_all';
+ return function (d) {
+ return parseFloat(d[count_type]) > 2500 || d.in_wiki;
+ };
+ }
- exports.validateId = validateId; // Deprecated methods
+ function filterMultikeys(prefix) {
+ return function (d) {
+ // d.key begins with prefix, and d.key contains no additional ':'s
+ var re = new RegExp('^' + prefix + '(.*)$');
+ var matches = d.key.match(re) || [];
+ return matches.length === 2 && matches[1].indexOf(':') === -1;
+ };
+ }
- function radians2degrees() {
- throw new Error("method has been renamed to `radiansToDegrees`");
- }
+ function filterValues(allowUpperCase) {
+ return function (d) {
+ if (d.value.match(/[;,]/) !== null) return false; // exclude some punctuation
- exports.radians2degrees = radians2degrees;
+ if (!allowUpperCase && d.value.match(/[A-Z*]/) !== null) return false; // exclude uppercase letters
- function degrees2radians() {
- throw new Error("method has been renamed to `degreesToRadians`");
- }
+ return parseFloat(d.fraction) > 0.0;
+ };
+ }
- exports.degrees2radians = degrees2radians;
+ function filterRoles(geometry) {
+ return function (d) {
+ if (d.role === '') return false; // exclude empty role
- function distanceToDegrees() {
- throw new Error("method has been renamed to `lengthToDegrees`");
- }
+ if (d.role.match(/[A-Z*;,]/) !== null) return false; // exclude uppercase letters and some punctuation
- exports.distanceToDegrees = distanceToDegrees;
+ return parseFloat(d[tag_members_fractions[geometry]]) > 0.0;
+ };
+ }
- function distanceToRadians() {
- throw new Error("method has been renamed to `lengthToRadians`");
- }
+ function valKey(d) {
+ return {
+ value: d.key,
+ title: d.key
+ };
+ }
- exports.distanceToRadians = distanceToRadians;
+ function valKeyDescription(d) {
+ var obj = {
+ value: d.value,
+ title: d.description || d.value
+ };
- function radiansToDistance() {
- throw new Error("method has been renamed to `radiansToLength`");
+ if (d.count) {
+ obj.count = d.count;
}
- exports.radiansToDistance = radiansToDistance;
+ return obj;
+ }
- function bearingToAngle() {
- throw new Error("method has been renamed to `bearingToAzimuth`");
- }
+ function roleKey(d) {
+ return {
+ value: d.role,
+ title: d.role
+ };
+ } // sort keys with ':' lower than keys without ':'
- exports.bearingToAngle = bearingToAngle;
- function convertDistance() {
- throw new Error("method has been renamed to `convertLength`");
- }
+ function sortKeys(a, b) {
+ return a.key.indexOf(':') === -1 && b.key.indexOf(':') !== -1 ? -1 : a.key.indexOf(':') !== -1 && b.key.indexOf(':') === -1 ? 1 : 0;
+ }
- exports.convertDistance = convertDistance;
+ var debouncedRequest$1 = debounce(request$1, 300, {
+ leading: false
});
- var invariant = createCommonjsModule(function (module, exports) {
-
- Object.defineProperty(exports, "__esModule", {
- value: true
+ function request$1(url, params, exactMatch, callback, loaded) {
+ if (_inflight$2[url]) return;
+ if (checkCache(url, params, exactMatch, callback)) return;
+ var controller = new AbortController();
+ _inflight$2[url] = controller;
+ d3_json(url, {
+ signal: controller.signal
+ }).then(function (result) {
+ delete _inflight$2[url];
+ if (loaded) loaded(null, result);
+ })["catch"](function (err) {
+ delete _inflight$2[url];
+ if (err.name === 'AbortError') return;
+ if (loaded) loaded(err.message);
});
- /**
- * Unwrap a coordinate from a Point Feature, Geometry or a single coordinate.
- *
- * @name getCoord
- * @param {Array<number>|Geometry<Point>|Feature<Point>} coord GeoJSON Point or an Array of numbers
- * @returns {Array<number>} coordinates
- * @example
- * var pt = turf.point([10, 10]);
- *
- * var coord = turf.getCoord(pt);
- * //= [10, 10]
- */
+ }
- function getCoord(coord) {
- if (!coord) {
- throw new Error("coord is required");
- }
+ function checkCache(url, params, exactMatch, callback) {
+ var rp = params.rp || 25;
+ var testQuery = params.query || '';
+ var testUrl = url;
- if (!Array.isArray(coord)) {
- if (coord.type === "Feature" && coord.geometry !== null && coord.geometry.type === "Point") {
- return coord.geometry.coordinates;
- }
+ do {
+ var hit = _taginfoCache[testUrl]; // exact match, or shorter match yielding fewer than max results (rp)
- if (coord.type === "Point") {
- return coord.coordinates;
- }
- }
+ if (hit && (url === testUrl || hit.length < rp)) {
+ callback(null, hit);
+ return true;
+ } // don't try to shorten the query
- if (Array.isArray(coord) && coord.length >= 2 && !Array.isArray(coord[0]) && !Array.isArray(coord[1])) {
- return coord;
- }
- throw new Error("coord must be GeoJSON Point or an Array of numbers");
- }
+ if (exactMatch || !testQuery.length) return false; // do shorten the query to see if we already have a cached result
+ // that has returned fewer than max results (rp)
- exports.getCoord = getCoord;
- /**
- * Unwrap coordinates from a Feature, Geometry Object or an Array
- *
- * @name getCoords
- * @param {Array<any>|Geometry|Feature} coords Feature, Geometry Object or an Array
- * @returns {Array<any>} coordinates
- * @example
- * var poly = turf.polygon([[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]);
- *
- * var coords = turf.getCoords(poly);
- * //= [[[119.32, -8.7], [119.55, -8.69], [119.51, -8.54], [119.32, -8.7]]]
- */
+ testQuery = testQuery.slice(0, -1);
+ testUrl = url.replace(/&query=(.*?)&/, '&query=' + testQuery + '&');
+ } while (testQuery.length >= 0);
- function getCoords(coords) {
- if (Array.isArray(coords)) {
- return coords;
- } // Feature
+ return false;
+ }
+
+ var serviceTaginfo = {
+ init: function init() {
+ _inflight$2 = {};
+ _taginfoCache = {};
+ _popularKeys = {
+ // manually exclude some keys – #5377, #7485
+ postal_code: true,
+ full_name: true,
+ loc_name: true,
+ reg_name: true,
+ short_name: true,
+ sorting_name: true,
+ artist_name: true,
+ nat_name: true,
+ long_name: true,
+ 'bridge:name': true
+ }; // Fetch popular keys. We'll exclude these from `values`
+ // lookups because they stress taginfo, and they aren't likely
+ // to yield meaningful autocomplete results.. see #3955
+ var params = {
+ rp: 100,
+ sortname: 'values_all',
+ sortorder: 'desc',
+ page: 1,
+ debounce: false,
+ lang: _mainLocalizer.languageCode()
+ };
+ this.keys(params, function (err, data) {
+ if (err) return;
+ data.forEach(function (d) {
+ if (d.value === 'opening_hours') return; // exception
- if (coords.type === "Feature") {
- if (coords.geometry !== null) {
- return coords.geometry.coordinates;
+ _popularKeys[d.value] = true;
+ });
+ });
+ },
+ reset: function reset() {
+ Object.values(_inflight$2).forEach(function (controller) {
+ controller.abort();
+ });
+ _inflight$2 = {};
+ },
+ keys: function keys(params, callback) {
+ var doRequest = params.debounce ? debouncedRequest$1 : request$1;
+ params = clean(setSort(params));
+ params = Object.assign({
+ rp: 10,
+ sortname: 'count_all',
+ sortorder: 'desc',
+ page: 1,
+ lang: _mainLocalizer.languageCode()
+ }, params);
+ var url = _apibase$1 + 'keys/all?' + utilQsString(params);
+ doRequest(url, params, false, callback, function (err, d) {
+ if (err) {
+ callback(err);
+ } else {
+ var f = filterKeys(params.filter);
+ var result = d.data.filter(f).sort(sortKeys).map(valKey);
+ _taginfoCache[url] = result;
+ callback(null, result);
}
- } else {
- // Geometry
- if (coords.coordinates) {
- return coords.coordinates;
+ });
+ },
+ multikeys: function multikeys(params, callback) {
+ var doRequest = params.debounce ? debouncedRequest$1 : request$1;
+ params = clean(setSort(params));
+ params = Object.assign({
+ rp: 25,
+ sortname: 'count_all',
+ sortorder: 'desc',
+ page: 1,
+ lang: _mainLocalizer.languageCode()
+ }, params);
+ var prefix = params.query;
+ var url = _apibase$1 + 'keys/all?' + utilQsString(params);
+ doRequest(url, params, true, callback, function (err, d) {
+ if (err) {
+ callback(err);
+ } else {
+ var f = filterMultikeys(prefix);
+ var result = d.data.filter(f).map(valKey);
+ _taginfoCache[url] = result;
+ callback(null, result);
}
- }
-
- throw new Error("coords must be GeoJSON Feature, Geometry Object or an Array");
- }
-
- exports.getCoords = getCoords;
- /**
- * Checks if coordinates contains a number
- *
- * @name containsNumber
- * @param {Array<any>} coordinates GeoJSON Coordinates
- * @returns {boolean} true if Array contains a number
- */
+ });
+ },
+ values: function values(params, callback) {
+ // Exclude popular keys from values lookups.. see #3955
+ var key = params.key;
- function containsNumber(coordinates) {
- if (coordinates.length > 1 && helpers$1.isNumber(coordinates[0]) && helpers$1.isNumber(coordinates[1])) {
- return true;
+ if (key && _popularKeys[key]) {
+ callback(null, []);
+ return;
}
- if (Array.isArray(coordinates[0]) && coordinates[0].length) {
- return containsNumber(coordinates[0]);
+ var doRequest = params.debounce ? debouncedRequest$1 : request$1;
+ params = clean(setSort(setFilter(params)));
+ params = Object.assign({
+ rp: 25,
+ sortname: 'count_all',
+ sortorder: 'desc',
+ page: 1,
+ lang: _mainLocalizer.languageCode()
+ }, params);
+ var url = _apibase$1 + 'key/values?' + utilQsString(params);
+ doRequest(url, params, false, callback, function (err, d) {
+ if (err) {
+ callback(err);
+ } else {
+ // In most cases we prefer taginfo value results with lowercase letters.
+ // A few OSM keys expect values to contain uppercase values (see #3377).
+ // This is not an exhaustive list (e.g. `name` also has uppercase values)
+ // but these are the fields where taginfo value lookup is most useful.
+ var re = /network|taxon|genus|species|brand|grape_variety|royal_cypher|listed_status|booth|rating|stars|:output|_hours|_times|_ref|manufacturer|country|target|brewery/;
+ var allowUpperCase = re.test(params.key);
+ var f = filterValues(allowUpperCase);
+ var result = d.data.filter(f).map(valKeyDescription);
+ _taginfoCache[url] = result;
+ callback(null, result);
+ }
+ });
+ },
+ roles: function roles(params, callback) {
+ var doRequest = params.debounce ? debouncedRequest$1 : request$1;
+ var geometry = params.geometry;
+ params = clean(setSortMembers(params));
+ params = Object.assign({
+ rp: 25,
+ sortname: 'count_all_members',
+ sortorder: 'desc',
+ page: 1,
+ lang: _mainLocalizer.languageCode()
+ }, params);
+ var url = _apibase$1 + 'relation/roles?' + utilQsString(params);
+ doRequest(url, params, true, callback, function (err, d) {
+ if (err) {
+ callback(err);
+ } else {
+ var f = filterRoles(geometry);
+ var result = d.data.filter(f).map(roleKey);
+ _taginfoCache[url] = result;
+ callback(null, result);
+ }
+ });
+ },
+ docs: function docs(params, callback) {
+ var doRequest = params.debounce ? debouncedRequest$1 : request$1;
+ params = clean(setSort(params));
+ var path = 'key/wiki_pages?';
+
+ if (params.value) {
+ path = 'tag/wiki_pages?';
+ } else if (params.rtype) {
+ path = 'relation/wiki_pages?';
}
- throw new Error("coordinates must only contain numbers");
+ var url = _apibase$1 + path + utilQsString(params);
+ doRequest(url, params, true, callback, function (err, d) {
+ if (err) {
+ callback(err);
+ } else {
+ _taginfoCache[url] = d.data;
+ callback(null, d.data);
+ }
+ });
+ },
+ apibase: function apibase(_) {
+ if (!arguments.length) return _apibase$1;
+ _apibase$1 = _;
+ return this;
}
+ };
- exports.containsNumber = containsNumber;
- /**
- * Enforce expectations about types of GeoJSON objects for Turf.
- *
- * @name geojsonType
- * @param {GeoJSON} value any GeoJSON object
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} if value is not the expected type.
- */
-
- function geojsonType(value, type, name) {
- if (!type || !name) {
- throw new Error("type and name required");
- }
+ /**
+ * Wraps a GeoJSON {@link Geometry} in a GeoJSON {@link Feature}.
+ *
+ * @name feature
+ * @param {Geometry} geometry input geometry
+ * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+ * @param {Object} [options={}] Optional Parameters
+ * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+ * @param {string|number} [options.id] Identifier associated with the Feature
+ * @returns {Feature} a GeoJSON Feature
+ * @example
+ * var geometry = {
+ * "type": "Point",
+ * "coordinates": [110, 50]
+ * };
+ *
+ * var feature = turf.feature(geometry);
+ *
+ * //=feature
+ */
- if (!value || value.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + value.type);
- }
+ function feature(geom, properties, options) {
+ if (options === void 0) {
+ options = {};
}
- exports.geojsonType = geojsonType;
- /**
- * Enforce expectations about types of {@link Feature} inputs for Turf.
- * Internally this uses {@link geojsonType} to judge geometry types.
- *
- * @name featureOf
- * @param {Feature} feature a feature with an expected geometry type
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} error if value is not the expected type.
- */
+ var feat = {
+ type: "Feature"
+ };
- function featureOf(feature, type, name) {
- if (!feature) {
- throw new Error("No feature passed");
- }
+ if (options.id === 0 || options.id) {
+ feat.id = options.id;
+ }
- if (!name) {
- throw new Error(".featureOf() requires a name");
- }
+ if (options.bbox) {
+ feat.bbox = options.bbox;
+ }
- if (!feature || feature.type !== "Feature" || !feature.geometry) {
- throw new Error("Invalid input to " + name + ", Feature with geometry required");
- }
+ feat.properties = properties || {};
+ feat.geometry = geom;
+ return feat;
+ }
+ /**
+ * Creates a {@link Polygon} {@link Feature} from an Array of LinearRings.
+ *
+ * @name polygon
+ * @param {Array<Array<Array<number>>>} coordinates an array of LinearRings
+ * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+ * @param {Object} [options={}] Optional Parameters
+ * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+ * @param {string|number} [options.id] Identifier associated with the Feature
+ * @returns {Feature<Polygon>} Polygon Feature
+ * @example
+ * var polygon = turf.polygon([[[-5, 52], [-4, 56], [-2, 51], [-7, 54], [-5, 52]]], { name: 'poly1' });
+ *
+ * //=polygon
+ */
- if (!feature.geometry || feature.geometry.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
- }
+ function polygon(coordinates, properties, options) {
+ if (options === void 0) {
+ options = {};
}
- exports.featureOf = featureOf;
- /**
- * Enforce expectations about types of {@link FeatureCollection} inputs for Turf.
- * Internally this uses {@link geojsonType} to judge geometry types.
- *
- * @name collectionOf
- * @param {FeatureCollection} featureCollection a FeatureCollection for which features will be judged
- * @param {string} type expected GeoJSON type
- * @param {string} name name of calling function
- * @throws {Error} if value is not the expected type.
- */
-
- function collectionOf(featureCollection, type, name) {
- if (!featureCollection) {
- throw new Error("No featureCollection passed");
- }
+ for (var _i = 0, coordinates_1 = coordinates; _i < coordinates_1.length; _i++) {
+ var ring = coordinates_1[_i];
- if (!name) {
- throw new Error(".collectionOf() requires a name");
+ if (ring.length < 4) {
+ throw new Error("Each LinearRing of a Polygon must have 4 or more Positions.");
}
- if (!featureCollection || featureCollection.type !== "FeatureCollection") {
- throw new Error("Invalid input to " + name + ", FeatureCollection required");
+ for (var j = 0; j < ring[ring.length - 1].length; j++) {
+ // Check if first point of Polygon contains two numbers
+ if (ring[ring.length - 1][j] !== ring[0][j]) {
+ throw new Error("First and last Position are not equivalent.");
+ }
}
+ }
- for (var _i = 0, _a = featureCollection.features; _i < _a.length; _i++) {
- var feature = _a[_i];
-
- if (!feature || feature.type !== "Feature" || !feature.geometry) {
- throw new Error("Invalid input to " + name + ", Feature with geometry required");
- }
+ var geom = {
+ type: "Polygon",
+ coordinates: coordinates
+ };
+ return feature(geom, properties, options);
+ }
+ /**
+ * Creates a {@link LineString} {@link Feature} from an Array of Positions.
+ *
+ * @name lineString
+ * @param {Array<Array<number>>} coordinates an array of Positions
+ * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+ * @param {Object} [options={}] Optional Parameters
+ * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+ * @param {string|number} [options.id] Identifier associated with the Feature
+ * @returns {Feature<LineString>} LineString Feature
+ * @example
+ * var linestring1 = turf.lineString([[-24, 63], [-23, 60], [-25, 65], [-20, 69]], {name: 'line 1'});
+ * var linestring2 = turf.lineString([[-14, 43], [-13, 40], [-15, 45], [-10, 49]], {name: 'line 2'});
+ *
+ * //=linestring1
+ * //=linestring2
+ */
- if (!feature.geometry || feature.geometry.type !== type) {
- throw new Error("Invalid input to " + name + ": must be a " + type + ", given " + feature.geometry.type);
- }
- }
+ function lineString(coordinates, properties, options) {
+ if (options === void 0) {
+ options = {};
}
- exports.collectionOf = collectionOf;
- /**
- * Get Geometry from Feature or Geometry Object
- *
- * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
- * @returns {Geometry|null} GeoJSON Geometry Object
- * @throws {Error} if geojson is not a Feature or Geometry Object
- * @example
- * var point = {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [110, 40]
- * }
- * }
- * var geom = turf.getGeom(point)
- * //={"type": "Point", "coordinates": [110, 40]}
- */
+ if (coordinates.length < 2) {
+ throw new Error("coordinates must be an array of two or more positions");
+ }
- function getGeom(geojson) {
- if (geojson.type === "Feature") {
- return geojson.geometry;
- }
+ var geom = {
+ type: "LineString",
+ coordinates: coordinates
+ };
+ return feature(geom, properties, options);
+ }
+ /**
+ * Creates a {@link Feature<MultiLineString>} based on a
+ * coordinate array. Properties can be added optionally.
+ *
+ * @name multiLineString
+ * @param {Array<Array<Array<number>>>} coordinates an array of LineStrings
+ * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+ * @param {Object} [options={}] Optional Parameters
+ * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+ * @param {string|number} [options.id] Identifier associated with the Feature
+ * @returns {Feature<MultiLineString>} a MultiLineString feature
+ * @throws {Error} if no coordinates are passed
+ * @example
+ * var multiLine = turf.multiLineString([[[0,0],[10,10]]]);
+ *
+ * //=multiLine
+ */
- return geojson;
+ function multiLineString(coordinates, properties, options) {
+ if (options === void 0) {
+ options = {};
}
- exports.getGeom = getGeom;
- /**
- * Get GeoJSON object's type, Geometry type is prioritize.
- *
- * @param {GeoJSON} geojson GeoJSON object
- * @param {string} [name="geojson"] name of the variable to display in error message
- * @returns {string} GeoJSON type
- * @example
- * var point = {
- * "type": "Feature",
- * "properties": {},
- * "geometry": {
- * "type": "Point",
- * "coordinates": [110, 40]
- * }
- * }
- * var geom = turf.getType(point)
- * //="Point"
- */
+ var geom = {
+ type: "MultiLineString",
+ coordinates: coordinates
+ };
+ return feature(geom, properties, options);
+ }
+ /**
+ * Creates a {@link Feature<MultiPolygon>} based on a
+ * coordinate array. Properties can be added optionally.
+ *
+ * @name multiPolygon
+ * @param {Array<Array<Array<Array<number>>>>} coordinates an array of Polygons
+ * @param {Object} [properties={}] an Object of key-value pairs to add as properties
+ * @param {Object} [options={}] Optional Parameters
+ * @param {Array<number>} [options.bbox] Bounding Box Array [west, south, east, north] associated with the Feature
+ * @param {string|number} [options.id] Identifier associated with the Feature
+ * @returns {Feature<MultiPolygon>} a multipolygon feature
+ * @throws {Error} if no coordinates are passed
+ * @example
+ * var multiPoly = turf.multiPolygon([[[[0,0],[0,10],[10,10],[10,0],[0,0]]]]);
+ *
+ * //=multiPoly
+ *
+ */
- function getType(geojson, name) {
- if (geojson.type === "FeatureCollection") {
- return "FeatureCollection";
- }
+ function multiPolygon(coordinates, properties, options) {
+ if (options === void 0) {
+ options = {};
+ }
- if (geojson.type === "GeometryCollection") {
- return "GeometryCollection";
- }
+ var geom = {
+ type: "MultiPolygon",
+ coordinates: coordinates
+ };
+ return feature(geom, properties, options);
+ }
- if (geojson.type === "Feature" && geojson.geometry !== null) {
- return geojson.geometry.type;
- }
+ /**
+ * Get Geometry from Feature or Geometry Object
+ *
+ * @param {Feature|Geometry} geojson GeoJSON Feature or Geometry Object
+ * @returns {Geometry|null} GeoJSON Geometry Object
+ * @throws {Error} if geojson is not a Feature or Geometry Object
+ * @example
+ * var point = {
+ * "type": "Feature",
+ * "properties": {},
+ * "geometry": {
+ * "type": "Point",
+ * "coordinates": [110, 40]
+ * }
+ * }
+ * var geom = turf.getGeom(point)
+ * //={"type": "Point", "coordinates": [110, 40]}
+ */
- return geojson.type;
+ function getGeom(geojson) {
+ if (geojson.type === "Feature") {
+ return geojson.geometry;
}
- exports.getType = getType;
- });
+ return geojson;
+ }
- var lineclip_1 = lineclip;
- var _default = lineclip;
- lineclip.polyline = lineclip;
- lineclip.polygon = polygonclip; // Cohen-Sutherland line clippign algorithm, adapted to efficiently
+ // Cohen-Sutherland line clippign algorithm, adapted to efficiently
// handle polylines rather than just segments
-
function lineclip(points, bbox, result) {
var len = points.length,
codeA = bitCode(points[0], bbox),
return result;
} // Sutherland-Hodgeman polygon clipping algorithm
-
function polygonclip(points, bbox) {
var result, edge, prev, prevInside, i, p, inside; // clip against each side of the clip rectangle
return result;
} // intersect a segment against one of the 4 lines that make up the bbox
-
function intersect(a, b, edge, bbox) {
- return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] : // top
- edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] : // bottom
- edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] : // right
- edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] : // left
- null;
+ return edge & 8 ? [a[0] + (b[0] - a[0]) * (bbox[3] - a[1]) / (b[1] - a[1]), bbox[3]] // top
+ : edge & 4 ? [a[0] + (b[0] - a[0]) * (bbox[1] - a[1]) / (b[1] - a[1]), bbox[1]] // bottom
+ : edge & 2 ? [bbox[2], a[1] + (b[1] - a[1]) * (bbox[2] - a[0]) / (b[0] - a[0])] // right
+ : edge & 1 ? [bbox[0], a[1] + (b[1] - a[1]) * (bbox[0] - a[0]) / (b[0] - a[0])] // left
+ : null;
} // bit code reflects the point position relative to the bbox:
// left mid right
// top 1001 1000 1010
return code;
}
- lineclip_1["default"] = _default;
-
- var bboxClip_1 = createCommonjsModule(function (module, exports) {
-
- var __importStar = commonjsGlobal && commonjsGlobal.__importStar || function (mod) {
- if (mod && mod.__esModule) return mod;
- var result = {};
- if (mod != null) for (var k in mod) {
- if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
- }
- result["default"] = mod;
- return result;
- };
-
- Object.defineProperty(exports, "__esModule", {
- value: true
- });
-
- var lineclip = __importStar(lineclip_1);
- /**
- * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
- * [lineclip](https://github.com/mapbox/lineclip).
- * May result in degenerate edges when clipping Polygons.
- *
- * @name bboxClip
- * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
- * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
- * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
- * @example
- * var bbox = [0, 0, 10, 10];
- * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
- *
- * var clipped = turf.bboxClip(poly, bbox);
- *
- * //addToMap
- * var addToMap = [bbox, poly, clipped]
- */
+ /**
+ * Takes a {@link Feature} and a bbox and clips the feature to the bbox using
+ * [lineclip](https://github.com/mapbox/lineclip).
+ * May result in degenerate edges when clipping Polygons.
+ *
+ * @name bboxClip
+ * @param {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} feature feature to clip to the bbox
+ * @param {BBox} bbox extent in [minX, minY, maxX, maxY] order
+ * @returns {Feature<LineString|MultiLineString|Polygon|MultiPolygon>} clipped Feature
+ * @example
+ * var bbox = [0, 0, 10, 10];
+ * var poly = turf.polygon([[[2, 2], [8, 4], [12, 8], [3, 7], [2, 2]]]);
+ *
+ * var clipped = turf.bboxClip(poly, bbox);
+ *
+ * //addToMap
+ * var addToMap = [bbox, poly, clipped]
+ */
- function bboxClip(feature, bbox) {
- var geom = invariant.getGeom(feature);
- var type = geom.type;
- var properties = feature.type === "Feature" ? feature.properties : {};
- var coords = geom.coordinates;
+ function bboxClip(feature, bbox) {
+ var geom = getGeom(feature);
+ var type = geom.type;
+ var properties = feature.type === "Feature" ? feature.properties : {};
+ var coords = geom.coordinates;
- switch (type) {
- case "LineString":
- case "MultiLineString":
- var lines_1 = [];
+ switch (type) {
+ case "LineString":
+ case "MultiLineString":
+ var lines_1 = [];
- if (type === "LineString") {
- coords = [coords];
- }
+ if (type === "LineString") {
+ coords = [coords];
+ }
- coords.forEach(function (line) {
- lineclip.polyline(line, bbox, lines_1);
- });
+ coords.forEach(function (line) {
+ lineclip(line, bbox, lines_1);
+ });
- if (lines_1.length === 1) {
- return helpers$1.lineString(lines_1[0], properties);
- }
+ if (lines_1.length === 1) {
+ return lineString(lines_1[0], properties);
+ }
- return helpers$1.multiLineString(lines_1, properties);
+ return multiLineString(lines_1, properties);
- case "Polygon":
- return helpers$1.polygon(clipPolygon(coords, bbox), properties);
+ case "Polygon":
+ return polygon(clipPolygon(coords, bbox), properties);
- case "MultiPolygon":
- return helpers$1.multiPolygon(coords.map(function (poly) {
- return clipPolygon(poly, bbox);
- }), properties);
+ case "MultiPolygon":
+ return multiPolygon(coords.map(function (poly) {
+ return clipPolygon(poly, bbox);
+ }), properties);
- default:
- throw new Error("geometry " + type + " not supported");
- }
+ default:
+ throw new Error("geometry " + type + " not supported");
}
+ }
- exports["default"] = bboxClip;
-
- function clipPolygon(rings, bbox) {
- var outRings = [];
+ function clipPolygon(rings, bbox) {
+ var outRings = [];
- for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
- var ring = rings_1[_i];
- var clipped = lineclip.polygon(ring, bbox);
+ for (var _i = 0, rings_1 = rings; _i < rings_1.length; _i++) {
+ var ring = rings_1[_i];
+ var clipped = polygonclip(ring, bbox);
- if (clipped.length > 0) {
- if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
- clipped.push(clipped[0]);
- }
+ if (clipped.length > 0) {
+ if (clipped[0][0] !== clipped[clipped.length - 1][0] || clipped[0][1] !== clipped[clipped.length - 1][1]) {
+ clipped.push(clipped[0]);
+ }
- if (clipped.length >= 4) {
- outRings.push(clipped);
- }
+ if (clipped.length >= 4) {
+ outRings.push(clipped);
}
}
-
- return outRings;
}
- });
- var turf_bboxClip = /*@__PURE__*/getDefaultExportFromCjs(bboxClip_1);
+
+ return outRings;
+ }
var fastJsonStableStringify = function fastJsonStableStringify(data, opts) {
if (!opts) opts = {};
* @return {Boolean}
*/
+ }, {
+ key: "inResult",
+ get: function get() {
+ return this.resultTransition !== 0;
+ }
}, {
key: "clone",
value: function clone() {
copy.otherInOut = this.otherInOut;
return copy;
}
- }, {
- key: "inResult",
- get: function get() {
- return this.resultTransition !== 0;
- }
}]);
return SweepEvent;
}
var tinyqueue = TinyQueue;
- var _default$1 = TinyQueue;
+ var _default = TinyQueue;
function TinyQueue(data, compare) {
if (!(this instanceof TinyQueue)) return new TinyQueue(data, compare);
data[pos] = item;
}
};
- tinyqueue["default"] = _default$1;
+ tinyqueue["default"] = _default;
var max$5 = Math.max;
- var min$a = Math.min;
+ var min$8 = Math.min;
var contourId = 0;
function processPolygon(contourOrHole, isSubject, depth, Q, bbox, isExteriorRing) {
var x = s1[0],
y = s1[1];
- bbox[0] = min$a(bbox[0], x);
- bbox[1] = min$a(bbox[1], y);
+ bbox[0] = min$8(bbox[0], x);
+ bbox[1] = min$8(bbox[1], y);
bbox[2] = max$5(bbox[2], x);
bbox[3] = max$5(bbox[3], y); // Pushing it so the queue is sorted from left to right,
// with object on the left having the highest priority.
var isClipped = false; // Clip to tile bounds
if (geometry.type === 'MultiPolygon') {
- var featureClip = turf_bboxClip(feature, tile.extent.rectangle());
+ var featureClip = bboxClip(feature, tile.extent.rectangle());
if (!fastDeepEqual(feature.geometry, featureClip.geometry)) {
// feature = featureClip;
var INCORRECT_LENGTH = !!nativeFromCodePoint && nativeFromCodePoint.length != 1;
// `String.fromCodePoint` method
- // https://tc39.github.io/ecma262/#sec-string.fromcodepoint
+ // https://tc39.es/ecma262/#sec-string.fromcodepoint
_export({ target: 'String', stat: true, forced: INCORRECT_LENGTH }, {
- fromCodePoint: function fromCodePoint(x) { // eslint-disable-line no-unused-vars
+ // eslint-disable-next-line no-unused-vars -- required for `.length`
+ fromCodePoint: function fromCodePoint(x) {
var elements = [];
var length = arguments.length;
var i = 0;
});
var rbush_1 = rbush;
- var _default$2 = rbush;
+ var _default$1 = rbush;
function rbush(maxEntries, format) {
if (!(this instanceof rbush)) return new rbush(maxEntries, format); // max entries in a node is 9 by default; min node fill is 40% for best performance
stack.push(left, mid, mid, right);
}
}
- rbush_1["default"] = _default$2;
+ rbush_1["default"] = _default$1;
- var lineclip_1$1 = lineclip$1;
+ var lineclip_1 = lineclip$1;
lineclip$1.polyline = lineclip$1;
lineclip$1.polygon = polygonclip$1; // Cohen-Sutherland line clippign algorithm, adapted to efficiently
// handle polylines rather than just segments
if (insidePolygon(polygon, bboxCenter)) return true;
for (var i = 0; i < polygon.length; i++) {
- if (lineclip_1$1(polygon[i], bbox).length > 0) return true;
+ if (lineclip_1(polygon[i], bbox).length > 0) return true;
}
return false;
return featureForID(query);
}
- function feature(query, opts) {
+ function feature$1(query, opts) {
if (_typeof(query) === 'object') {
return featureForLoc(query, opts);
}
return featureForID(query);
}
function iso1A2Code(query, opts) {
- var match = feature(query, opts);
+ var match = feature$1(query, opts);
if (!match) return null;
return match.properties.iso1A2 || null;
}
});
// `Math.sinh` method
- // https://tc39.github.io/ecma262/#sec-math.sinh
+ // https://tc39.es/ecma262/#sec-math.sinh
// V8 near Chromium 38 has a problem with very small numbers
_export({ target: 'Math', stat: true, forced: FORCED$g }, {
sinh: function sinh(x) {
return featureList;
}
+ var getOwnPropertyDescriptor$4 = objectGetOwnPropertyDescriptor.f;
+
+
+
+
+
+
+ var nativeStartsWith = ''.startsWith;
+ var min$9 = Math.min;
+
+ var CORRECT_IS_REGEXP_LOGIC = correctIsRegexpLogic('startsWith');
+ // https://github.com/zloirock/core-js/pull/702
+ var MDN_POLYFILL_BUG = !CORRECT_IS_REGEXP_LOGIC && !!function () {
+ var descriptor = getOwnPropertyDescriptor$4(String.prototype, 'startsWith');
+ return descriptor && !descriptor.writable;
+ }();
+
+ // `String.prototype.startsWith` method
+ // https://tc39.es/ecma262/#sec-string.prototype.startswith
+ _export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG && !CORRECT_IS_REGEXP_LOGIC }, {
+ startsWith: function startsWith(searchString /* , position = 0 */) {
+ var that = String(requireObjectCoercible(this));
+ notARegexp(searchString);
+ var index = toLength(min$9(arguments.length > 1 ? arguments[1] : undefined, that.length));
+ var search = String(searchString);
+ return nativeStartsWith
+ ? nativeStartsWith.call(that, search, index)
+ : that.slice(index, index + search.length) === search;
+ }
+ });
+
function uiSectionEntityIssues(context) {
var _entityIDs = [];
var _issues = [];
return utilRebind(textarea, dispatch$1, 'on');
}
+ var getOwnPropertyDescriptor$5 = objectGetOwnPropertyDescriptor.f;
+
+
+
+
+
+
+ var nativeEndsWith = ''.endsWith;
+ var min$a = Math.min;
+
+ var CORRECT_IS_REGEXP_LOGIC$1 = correctIsRegexpLogic('endsWith');
+ // https://github.com/zloirock/core-js/pull/702
+ var MDN_POLYFILL_BUG$1 = !CORRECT_IS_REGEXP_LOGIC$1 && !!function () {
+ var descriptor = getOwnPropertyDescriptor$5(String.prototype, 'endsWith');
+ return descriptor && !descriptor.writable;
+ }();
+
+ // `String.prototype.endsWith` method
+ // https://tc39.es/ecma262/#sec-string.prototype.endswith
+ _export({ target: 'String', proto: true, forced: !MDN_POLYFILL_BUG$1 && !CORRECT_IS_REGEXP_LOGIC$1 }, {
+ endsWith: function endsWith(searchString /* , endPosition = @length */) {
+ var that = String(requireObjectCoercible(this));
+ notARegexp(searchString);
+ var endPosition = arguments.length > 1 ? arguments[1] : undefined;
+ var len = toLength(that.length);
+ var end = endPosition === undefined ? len : min$a(toLength(endPosition), len);
+ var search = String(searchString);
+ return nativeEndsWith
+ ? nativeEndsWith.call(that, search, end)
+ : that.slice(end - search.length, end) === search;
+ }
+ });
+
function uiFieldWikidata(field, context) {
var wikidata = services.wikidata;
var dispatch$1 = dispatch('change');
var globalIsFinite = global_1.isFinite;
// `Number.isFinite` method
- // https://tc39.github.io/ecma262/#sec-number.isfinite
+ // https://tc39.es/ecma262/#sec-number.isfinite
var numberIsFinite = Number.isFinite || function isFinite(it) {
return typeof it == 'number' && globalIsFinite(it);
};
// `Number.isFinite` method
- // https://tc39.github.io/ecma262/#sec-number.isfinite
+ // https://tc39.es/ecma262/#sec-number.isfinite
_export({ target: 'Number', stat: true }, { isFinite: numberIsFinite });
var RADIUS = 6378137;
ring: ring
};
- function toRadians(angleInDegrees) {
- return angleInDegrees * Math.PI / 180;
- }
-
- function toDegrees(angleInRadians) {
- return angleInRadians * 180 / Math.PI;
- }
-
- function offset(c1, distance, bearing) {
- var lat1 = toRadians(c1[1]);
- var lon1 = toRadians(c1[0]);
- var dByR = distance / 6378137; // distance divided by 6378137 (radius of the earth) wgs84
-
- var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
- var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
- return [toDegrees(lon), toDegrees(lat)];
- }
-
- function validateCenter(center) {
+ var validateCenter_1 = function validateCenter(center) {
var validCenterLengths = [2, 3];
if (!Array.isArray(center) || !validCenterLengths.includes(center.length)) {
if (lat > 90 || lat < -90) {
throw new Error("ERROR! Latitude has to be between -90 and 90 but was ".concat(lat));
}
- }
+ };
+
+ var validateCenter = {
+ validateCenter: validateCenter_1
+ };
- function validateRadius(radius) {
+ var validateRadius_1 = function validateRadius(radius) {
if (typeof radius !== "number") {
throw new Error("ERROR! Radius has to be a positive number but was: ".concat(_typeof(radius)));
}
if (radius <= 0) {
throw new Error("ERROR! Radius has to be a positive number but was: ".concat(radius));
}
- }
+ };
+
+ var validateRadius = {
+ validateRadius: validateRadius_1
+ };
- function validateNumberOfSegments(numberOfSegments) {
- if (typeof numberOfSegments !== "number" && numberOfSegments !== undefined) {
- throw new Error("ERROR! Number of segments has to be a number but was: ".concat(_typeof(numberOfSegments)));
+ var validateNumberOfEdges_1 = function validateNumberOfEdges(numberOfEdges) {
+ if (typeof numberOfEdges !== "number") {
+ var ARGUMENT_TYPE = Array.isArray(numberOfEdges) ? "array" : _typeof(numberOfEdges);
+ throw new Error("ERROR! Number of edges has to be a number but was: ".concat(ARGUMENT_TYPE));
}
- if (numberOfSegments < 3) {
- throw new Error("ERROR! Number of segments has to be at least 3 but was: ".concat(numberOfSegments));
+ if (numberOfEdges < 3) {
+ throw new Error("ERROR! Number of edges has to be at least 3 but was: ".concat(numberOfEdges));
}
- }
+ };
+
+ var validateNumberOfEdges = {
+ validateNumberOfEdges: validateNumberOfEdges_1
+ };
+
+ var validateEarthRadius_1 = function validateEarthRadius(earthRadius) {
+ if (typeof earthRadius !== "number") {
+ var ARGUMENT_TYPE = Array.isArray(earthRadius) ? "array" : _typeof(earthRadius);
+ throw new Error("ERROR! Earth radius has to be a number but was: ".concat(ARGUMENT_TYPE));
+ }
+
+ if (earthRadius <= 0) {
+ throw new Error("ERROR! Earth radius has to be a positive number but was: ".concat(earthRadius));
+ }
+ };
+
+ var validateEarthRadius = {
+ validateEarthRadius: validateEarthRadius_1
+ };
+
+ var validateBearing_1 = function validateBearing(bearing) {
+ if (typeof bearing !== "number") {
+ var ARGUMENT_TYPE = Array.isArray(bearing) ? "array" : _typeof(bearing);
+ throw new Error("ERROR! Bearing has to be a number but was: ".concat(ARGUMENT_TYPE));
+ }
+ };
+
+ var validateBearing = {
+ validateBearing: validateBearing_1
+ };
+
+ var validateCenter$1 = validateCenter.validateCenter;
+ var validateRadius$1 = validateRadius.validateRadius;
+ var validateNumberOfEdges$1 = validateNumberOfEdges.validateNumberOfEdges;
+ var validateEarthRadius$1 = validateEarthRadius.validateEarthRadius;
+ var validateBearing$1 = validateBearing.validateBearing;
function validateInput(_ref) {
var center = _ref.center,
radius = _ref.radius,
- numberOfSegments = _ref.numberOfSegments;
- validateCenter(center);
- validateRadius(radius);
- validateNumberOfSegments(numberOfSegments);
+ numberOfEdges = _ref.numberOfEdges,
+ earthRadius = _ref.earthRadius,
+ bearing = _ref.bearing;
+ validateCenter$1(center);
+ validateRadius$1(radius);
+ validateNumberOfEdges$1(numberOfEdges);
+ validateEarthRadius$1(earthRadius);
+ validateBearing$1(bearing);
+ }
+
+ var validateCenter_1$1 = validateCenter$1;
+ var validateRadius_1$1 = validateRadius$1;
+ var validateNumberOfEdges_1$1 = validateNumberOfEdges$1;
+ var validateEarthRadius_1$1 = validateEarthRadius$1;
+ var validateBearing_1$1 = validateBearing$1;
+ var validateInput_1 = validateInput;
+ var inputValidation = {
+ validateCenter: validateCenter_1$1,
+ validateRadius: validateRadius_1$1,
+ validateNumberOfEdges: validateNumberOfEdges_1$1,
+ validateEarthRadius: validateEarthRadius_1$1,
+ validateBearing: validateBearing_1$1,
+ validateInput: validateInput_1
+ };
+
+ var validateInput$1 = inputValidation.validateInput;
+ var defaultEarthRadius = 6378137; // equatorial Earth radius
+
+ function toRadians(angleInDegrees) {
+ return angleInDegrees * Math.PI / 180;
+ }
+
+ function toDegrees(angleInRadians) {
+ return angleInRadians * 180 / Math.PI;
+ }
+
+ function offset(c1, distance, earthRadius, bearing) {
+ var lat1 = toRadians(c1[1]);
+ var lon1 = toRadians(c1[0]);
+ var dByR = distance / earthRadius;
+ var lat = Math.asin(Math.sin(lat1) * Math.cos(dByR) + Math.cos(lat1) * Math.sin(dByR) * Math.cos(bearing));
+ var lon = lon1 + Math.atan2(Math.sin(bearing) * Math.sin(dByR) * Math.cos(lat1), Math.cos(dByR) - Math.sin(lat1) * Math.sin(lat));
+ return [toDegrees(lon), toDegrees(lat)];
}
- var circleToPolygon = function circleToPolygon(center, radius, numberOfSegments) {
- var n = numberOfSegments ? numberOfSegments : 32; // validateInput() throws error on invalid input and do nothing on valid input
+ var circleToPolygon = function circleToPolygon(center, radius, options) {
+ var n = getNumberOfEdges(options);
+ var earthRadius = getEarthRadius(options);
+ var bearing = getBearing(options); // validateInput() throws error on invalid input and do nothing on valid input
- validateInput({
+ validateInput$1({
center: center,
radius: radius,
- numberOfSegments: numberOfSegments
+ numberOfEdges: n,
+ earthRadius: earthRadius,
+ bearing: bearing
});
+ var start = toRadians(bearing);
var coordinates = [];
for (var i = 0; i < n; ++i) {
- coordinates.push(offset(center, radius, 2 * Math.PI * -i / n));
+ coordinates.push(offset(center, radius, earthRadius, start + 2 * Math.PI * -i / n));
}
coordinates.push(coordinates[0]);
};
};
+ function getNumberOfEdges(options) {
+ if (options === undefined) {
+ return 32;
+ } else if (isObjectNotArray(options)) {
+ var numberOfEdges = options.numberOfEdges;
+ return numberOfEdges === undefined ? 32 : numberOfEdges;
+ }
+
+ return options;
+ }
+
+ function getEarthRadius(options) {
+ if (options === undefined) {
+ return defaultEarthRadius;
+ } else if (isObjectNotArray(options)) {
+ var earthRadius = options.earthRadius;
+ return earthRadius === undefined ? defaultEarthRadius : earthRadius;
+ }
+
+ return defaultEarthRadius;
+ }
+
+ function getBearing(options) {
+ if (options === undefined) {
+ return 0;
+ } else if (isObjectNotArray(options)) {
+ var bearing = options.bearing;
+ return bearing === undefined ? 0 : bearing;
+ }
+
+ return 0;
+ }
+
+ function isObjectNotArray(argument) {
+ return _typeof(argument) === "object" && !Array.isArray(argument);
+ }
+
// `Number.EPSILON` constant
- // https://tc39.github.io/ecma262/#sec-number.epsilon
+ // https://tc39.es/ecma262/#sec-number.epsilon
_export({ target: 'Number', stat: true }, {
EPSILON: Math.pow(2, -52)
});
/**
- * splaytree v3.0.1
+ * splaytree v3.1.0
* Fast Splay tree for Node and browser
*
* @author Alexander Milevski <info@w8r.name>
* @license MIT
* @preserve
*/
- var Node$1 = function Node(key, data) {
- _classCallCheck(this, Node);
-
- this.next = null;
- this.key = key;
- this.data = data;
- this.left = null;
- this.right = null;
- };
+ var Node$1 =
+ /** @class */
+ function () {
+ function Node(key, data) {
+ this.next = null;
+ this.key = key;
+ this.data = data;
+ this.left = null;
+ this.right = null;
+ }
+
+ return Node;
+ }();
/* follows "An implementation of top-down splaying"
* by D. Sleator <sleator@cs.cmu.edu> March 1992
*/
if (t.right === null) break; //if (i > t.right.key) {
if (comparator(i, t.right.key) > 0) {
- var _y = t.right;
+ var y = t.right;
/* rotate left */
- t.right = _y.left;
- _y.left = t;
- t = _y;
+ t.right = y.left;
+ y.left = t;
+ t = y;
if (t.right === null) break;
}
return t;
}
- function _insert(i, data, t, comparator) {
+ function insert(i, data, t, comparator) {
var node = new Node$1(i, data);
if (t === null) {
return node;
}
- function _split(key, v, comparator) {
+ function split$2(key, v, comparator) {
var left = null;
var right = null;
function printRow(root, prefix, isTail, out, printNode) {
if (root) {
- out("".concat(prefix).concat(isTail ? '└── ' : '├── ').concat(printNode(root), "\n"));
+ out("" + prefix + (isTail ? '└── ' : '├── ') + printNode(root) + "\n");
var indent = prefix + (isTail ? ' ' : '│ ');
if (root.left) printRow(root.left, indent, false, out, printNode);
if (root.right) printRow(root.right, indent, true, out, printNode);
}
}
- var Tree = /*#__PURE__*/function () {
- function Tree() {
- var comparator = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : DEFAULT_COMPARE$1;
-
- _classCallCheck(this, Tree);
+ var Tree =
+ /** @class */
+ function () {
+ function Tree(comparator) {
+ if (comparator === void 0) {
+ comparator = DEFAULT_COMPARE$1;
+ }
this._root = null;
this._size = 0;
*/
- _createClass(Tree, [{
- key: "insert",
- value: function insert(key, data) {
- this._size++;
- return this._root = _insert(key, data, this._root, this._comparator);
- }
- /**
- * Adds a key, if it is not present in the tree
- */
+ Tree.prototype.insert = function (key, data) {
+ this._size++;
+ return this._root = insert(key, data, this._root, this._comparator);
+ };
+ /**
+ * Adds a key, if it is not present in the tree
+ */
- }, {
- key: "add",
- value: function add(key, data) {
- var node = new Node$1(key, data);
- if (this._root === null) {
- node.left = node.right = null;
- this._size++;
- this._root = node;
- }
+ Tree.prototype.add = function (key, data) {
+ var node = new Node$1(key, data);
- var comparator = this._comparator;
- var t = splay(key, this._root, comparator);
- var cmp = comparator(key, t.key);
- if (cmp === 0) this._root = t;else {
- if (cmp < 0) {
- node.left = t.left;
- node.right = t;
- t.left = null;
- } else if (cmp > 0) {
- node.right = t.right;
- node.left = t;
- t.right = null;
- }
+ if (this._root === null) {
+ node.left = node.right = null;
+ this._size++;
+ this._root = node;
+ }
- this._size++;
- this._root = node;
+ var comparator = this._comparator;
+ var t = splay(key, this._root, comparator);
+ var cmp = comparator(key, t.key);
+ if (cmp === 0) this._root = t;else {
+ if (cmp < 0) {
+ node.left = t.left;
+ node.right = t;
+ t.left = null;
+ } else if (cmp > 0) {
+ node.right = t.right;
+ node.left = t;
+ t.right = null;
}
- return this._root;
- }
- /**
- * @param {Key} key
- * @return {Node|null}
- */
- }, {
- key: "remove",
- value: function remove(key) {
- this._root = this._remove(key, this._root, this._comparator);
+ this._size++;
+ this._root = node;
}
- /**
- * Deletes i from the tree if it's there
- */
+ return this._root;
+ };
+ /**
+ * @param {Key} key
+ * @return {Node|null}
+ */
- }, {
- key: "_remove",
- value: function _remove(i, t, comparator) {
- var x;
- if (t === null) return null;
- t = splay(i, t, comparator);
- var cmp = comparator(i, t.key);
-
- if (cmp === 0) {
- /* found it */
- if (t.left === null) {
- x = t.right;
- } else {
- x = splay(i, t.left, comparator);
- x.right = t.right;
- }
- this._size--;
- return x;
+ Tree.prototype.remove = function (key) {
+ this._root = this._remove(key, this._root, this._comparator);
+ };
+ /**
+ * Deletes i from the tree if it's there
+ */
+
+
+ Tree.prototype._remove = function (i, t, comparator) {
+ var x;
+ if (t === null) return null;
+ t = splay(i, t, comparator);
+ var cmp = comparator(i, t.key);
+
+ if (cmp === 0) {
+ /* found it */
+ if (t.left === null) {
+ x = t.right;
+ } else {
+ x = splay(i, t.left, comparator);
+ x.right = t.right;
}
- return t;
- /* It wasn't there */
+ this._size--;
+ return x;
}
- /**
- * Removes and returns the node with smallest key
- */
- }, {
- key: "pop",
- value: function pop() {
- var node = this._root;
+ return t;
+ /* It wasn't there */
+ };
+ /**
+ * Removes and returns the node with smallest key
+ */
- if (node) {
- while (node.left) {
- node = node.left;
- }
- this._root = splay(node.key, this._root, this._comparator);
- this._root = this._remove(node.key, this._root, this._comparator);
- return {
- key: node.key,
- data: node.data
- };
+ Tree.prototype.pop = function () {
+ var node = this._root;
+
+ if (node) {
+ while (node.left) {
+ node = node.left;
}
- return null;
+ this._root = splay(node.key, this._root, this._comparator);
+ this._root = this._remove(node.key, this._root, this._comparator);
+ return {
+ key: node.key,
+ data: node.data
+ };
}
- /**
- * Find without splaying
- */
- }, {
- key: "findStatic",
- value: function findStatic(key) {
- var current = this._root;
- var compare = this._comparator;
+ return null;
+ };
+ /**
+ * Find without splaying
+ */
- while (current) {
- var cmp = compare(key, current.key);
- if (cmp === 0) return current;else if (cmp < 0) current = current.left;else current = current.right;
- }
- return null;
+ Tree.prototype.findStatic = function (key) {
+ var current = this._root;
+ var compare = this._comparator;
+
+ while (current) {
+ var cmp = compare(key, current.key);
+ if (cmp === 0) return current;else if (cmp < 0) current = current.left;else current = current.right;
}
- }, {
- key: "find",
- value: function find(key) {
- if (this._root) {
- this._root = splay(key, this._root, this._comparator);
- if (this._comparator(key, this._root.key) !== 0) return null;
- }
- return this._root;
+ return null;
+ };
+
+ Tree.prototype.find = function (key) {
+ if (this._root) {
+ this._root = splay(key, this._root, this._comparator);
+ if (this._comparator(key, this._root.key) !== 0) return null;
}
- }, {
- key: "contains",
- value: function contains(key) {
- var current = this._root;
- var compare = this._comparator;
- while (current) {
- var cmp = compare(key, current.key);
- if (cmp === 0) return true;else if (cmp < 0) current = current.left;else current = current.right;
- }
+ return this._root;
+ };
- return false;
+ Tree.prototype.contains = function (key) {
+ var current = this._root;
+ var compare = this._comparator;
+
+ while (current) {
+ var cmp = compare(key, current.key);
+ if (cmp === 0) return true;else if (cmp < 0) current = current.left;else current = current.right;
}
- }, {
- key: "forEach",
- value: function forEach(visitor, ctx) {
- var current = this._root;
- var Q = [];
- /* Initialize stack s */
- var done = false;
+ return false;
+ };
- while (!done) {
- if (current !== null) {
- Q.push(current);
- current = current.left;
- } else {
- if (Q.length !== 0) {
- current = Q.pop();
- visitor.call(ctx, current);
- current = current.right;
- } else done = true;
- }
- }
+ Tree.prototype.forEach = function (visitor, ctx) {
+ var current = this._root;
+ var Q = [];
+ /* Initialize stack s */
- return this;
+ var done = false;
+
+ while (!done) {
+ if (current !== null) {
+ Q.push(current);
+ current = current.left;
+ } else {
+ if (Q.length !== 0) {
+ current = Q.pop();
+ visitor.call(ctx, current);
+ current = current.right;
+ } else done = true;
+ }
}
- /**
- * Walk key range from `low` to `high`. Stops if `fn` returns a value.
- */
- }, {
- key: "range",
- value: function range(low, high, fn, ctx) {
- var Q = [];
- var compare = this._comparator;
- var node = this._root;
- var cmp;
+ return this;
+ };
+ /**
+ * Walk key range from `low` to `high`. Stops if `fn` returns a value.
+ */
- while (Q.length !== 0 || node) {
- if (node) {
- Q.push(node);
- node = node.left;
- } else {
- node = Q.pop();
- cmp = compare(node.key, high);
- if (cmp > 0) {
- break;
- } else if (compare(node.key, low) >= 0) {
- if (fn.call(ctx, node)) return this; // stop if smth is returned
- }
+ Tree.prototype.range = function (low, high, fn, ctx) {
+ var Q = [];
+ var compare = this._comparator;
+ var node = this._root;
+ var cmp;
- node = node.right;
+ while (Q.length !== 0 || node) {
+ if (node) {
+ Q.push(node);
+ node = node.left;
+ } else {
+ node = Q.pop();
+ cmp = compare(node.key, high);
+
+ if (cmp > 0) {
+ break;
+ } else if (compare(node.key, low) >= 0) {
+ if (fn.call(ctx, node)) return this; // stop if smth is returned
}
- }
- return this;
+ node = node.right;
+ }
}
- /**
- * Returns array of keys
- */
- }, {
- key: "keys",
- value: function keys() {
- var keys = [];
- this.forEach(function (_ref) {
- var key = _ref.key;
- return keys.push(key);
- });
- return keys;
- }
- /**
- * Returns array of all the data in the nodes
- */
+ return this;
+ };
+ /**
+ * Returns array of keys
+ */
- }, {
- key: "values",
- value: function values() {
- var values = [];
- this.forEach(function (_ref2) {
- var data = _ref2.data;
- return values.push(data);
- });
- return values;
- }
- }, {
- key: "min",
- value: function min() {
- if (this._root) return this.minNode(this._root).key;
- return null;
+
+ Tree.prototype.keys = function () {
+ var keys = [];
+ this.forEach(function (_a) {
+ var key = _a.key;
+ return keys.push(key);
+ });
+ return keys;
+ };
+ /**
+ * Returns array of all the data in the nodes
+ */
+
+
+ Tree.prototype.values = function () {
+ var values = [];
+ this.forEach(function (_a) {
+ var data = _a.data;
+ return values.push(data);
+ });
+ return values;
+ };
+
+ Tree.prototype.min = function () {
+ if (this._root) return this.minNode(this._root).key;
+ return null;
+ };
+
+ Tree.prototype.max = function () {
+ if (this._root) return this.maxNode(this._root).key;
+ return null;
+ };
+
+ Tree.prototype.minNode = function (t) {
+ if (t === void 0) {
+ t = this._root;
}
- }, {
- key: "max",
- value: function max() {
- if (this._root) return this.maxNode(this._root).key;
- return null;
+
+ if (t) while (t.left) {
+ t = t.left;
}
- }, {
- key: "minNode",
- value: function minNode() {
- var t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._root;
- if (t) while (t.left) {
- t = t.left;
- }
- return t;
+ return t;
+ };
+
+ Tree.prototype.maxNode = function (t) {
+ if (t === void 0) {
+ t = this._root;
}
- }, {
- key: "maxNode",
- value: function maxNode() {
- var t = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : this._root;
- if (t) while (t.right) {
- t = t.right;
- }
- return t;
+
+ if (t) while (t.right) {
+ t = t.right;
}
- /**
- * Returns node at given index
- */
+ return t;
+ };
+ /**
+ * Returns node at given index
+ */
- }, {
- key: "at",
- value: function at(index) {
- var current = this._root;
- var done = false;
- var i = 0;
- var Q = [];
- while (!done) {
- if (current) {
- Q.push(current);
- current = current.left;
- } else {
- if (Q.length > 0) {
- current = Q.pop();
- if (i === index) return current;
- i++;
- current = current.right;
- } else done = true;
- }
- }
+ Tree.prototype.at = function (index) {
+ var current = this._root;
+ var done = false;
+ var i = 0;
+ var Q = [];
- return null;
+ while (!done) {
+ if (current) {
+ Q.push(current);
+ current = current.left;
+ } else {
+ if (Q.length > 0) {
+ current = Q.pop();
+ if (i === index) return current;
+ i++;
+ current = current.right;
+ } else done = true;
+ }
}
- }, {
- key: "next",
- value: function next(d) {
- var root = this._root;
- var successor = null;
- if (d.right) {
- successor = d.right;
-
- while (successor.left) {
- successor = successor.left;
- }
+ return null;
+ };
- return successor;
- }
+ Tree.prototype.next = function (d) {
+ var root = this._root;
+ var successor = null;
- var comparator = this._comparator;
+ if (d.right) {
+ successor = d.right;
- while (root) {
- var cmp = comparator(d.key, root.key);
- if (cmp === 0) break;else if (cmp < 0) {
- successor = root;
- root = root.left;
- } else root = root.right;
+ while (successor.left) {
+ successor = successor.left;
}
return successor;
}
- }, {
- key: "prev",
- value: function prev(d) {
- var root = this._root;
- var predecessor = null;
- if (d.left !== null) {
- predecessor = d.left;
+ var comparator = this._comparator;
- while (predecessor.right) {
- predecessor = predecessor.right;
- }
+ while (root) {
+ var cmp = comparator(d.key, root.key);
+ if (cmp === 0) break;else if (cmp < 0) {
+ successor = root;
+ root = root.left;
+ } else root = root.right;
+ }
- return predecessor;
- }
+ return successor;
+ };
- var comparator = this._comparator;
+ Tree.prototype.prev = function (d) {
+ var root = this._root;
+ var predecessor = null;
- while (root) {
- var cmp = comparator(d.key, root.key);
- if (cmp === 0) break;else if (cmp < 0) root = root.left;else {
- predecessor = root;
- root = root.right;
- }
+ if (d.left !== null) {
+ predecessor = d.left;
+
+ while (predecessor.right) {
+ predecessor = predecessor.right;
}
return predecessor;
}
- }, {
- key: "clear",
- value: function clear() {
- this._root = null;
- this._size = 0;
- return this;
- }
- }, {
- key: "toList",
- value: function toList() {
- return _toList(this._root);
+
+ var comparator = this._comparator;
+
+ while (root) {
+ var cmp = comparator(d.key, root.key);
+ if (cmp === 0) break;else if (cmp < 0) root = root.left;else {
+ predecessor = root;
+ root = root.right;
+ }
}
- /**
- * Bulk-load items. Both array have to be same size
- */
- }, {
- key: "load",
- value: function load(keys) {
- var values = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
- var presort = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : false;
- var size = keys.length;
- var comparator = this._comparator; // sort if needed
+ return predecessor;
+ };
- if (presort) sort$1(keys, values, 0, size - 1, comparator);
+ Tree.prototype.clear = function () {
+ this._root = null;
+ this._size = 0;
+ return this;
+ };
- if (this._root === null) {
- // empty tree
- this._root = loadRecursive$1(keys, values, 0, size);
- this._size = size;
- } else {
- // that re-builds the whole tree from two in-order traversals
- var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);
- size = this._size + size;
- this._root = sortedListToBST({
- head: mergedList
- }, 0, size);
- }
+ Tree.prototype.toList = function () {
+ return toList(this._root);
+ };
+ /**
+ * Bulk-load items. Both array have to be same size
+ */
- return this;
- }
- }, {
- key: "isEmpty",
- value: function isEmpty() {
- return this._root === null;
+
+ Tree.prototype.load = function (keys, values, presort) {
+ if (values === void 0) {
+ values = [];
}
- }, {
- key: "toString",
- value: function toString() {
- var printNode = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : function (n) {
- return String(n.key);
- };
- var out = [];
- printRow(this._root, '', true, function (v) {
- return out.push(v);
- }, printNode);
- return out.join('');
+
+ if (presort === void 0) {
+ presort = false;
}
- }, {
- key: "update",
- value: function update(key, newKey, newData) {
- var comparator = this._comparator;
- var _split2 = _split(key, this._root, comparator),
- left = _split2.left,
- right = _split2.right;
+ var size = keys.length;
+ var comparator = this._comparator; // sort if needed
- if (comparator(key, newKey) < 0) {
- right = _insert(newKey, newData, right, comparator);
- } else {
- left = _insert(newKey, newData, left, comparator);
- }
+ if (presort) sort$1(keys, values, 0, size - 1, comparator);
- this._root = merge$4(left, right, comparator);
- }
- }, {
- key: "split",
- value: function split(key) {
- return _split(key, this._root, this._comparator);
+ if (this._root === null) {
+ // empty tree
+ this._root = loadRecursive$1(keys, values, 0, size);
+ this._size = size;
+ } else {
+ // that re-builds the whole tree from two in-order traversals
+ var mergedList = mergeLists(this.toList(), createList(keys, values), comparator);
+ size = this._size + size;
+ this._root = sortedListToBST({
+ head: mergedList
+ }, 0, size);
}
- }, {
- key: "size",
+
+ return this;
+ };
+
+ Tree.prototype.isEmpty = function () {
+ return this._root === null;
+ };
+
+ Object.defineProperty(Tree.prototype, "size", {
get: function get() {
return this._size;
- }
- }, {
- key: "root",
+ },
+ enumerable: true,
+ configurable: true
+ });
+ Object.defineProperty(Tree.prototype, "root", {
get: function get() {
return this._root;
+ },
+ enumerable: true,
+ configurable: true
+ });
+
+ Tree.prototype.toString = function (printNode) {
+ if (printNode === void 0) {
+ printNode = function printNode(n) {
+ return String(n.key);
+ };
}
- }]);
+
+ var out = [];
+ printRow(this._root, '', true, function (v) {
+ return out.push(v);
+ }, printNode);
+ return out.join('');
+ };
+
+ Tree.prototype.update = function (key, newKey, newData) {
+ var comparator = this._comparator;
+
+ var _a = split$2(key, this._root, comparator),
+ left = _a.left,
+ right = _a.right;
+
+ if (comparator(key, newKey) < 0) {
+ right = insert(newKey, newData, right, comparator);
+ } else {
+ left = insert(newKey, newData, left, comparator);
+ }
+
+ this._root = merge$4(left, right, comparator);
+ };
+
+ Tree.prototype.split = function (key) {
+ return split$2(key, this._root, this._comparator);
+ };
return Tree;
}();
return head.next;
}
- function _toList(root) {
+ function toList(root) {
var current = root;
var Q = [];
var done = false;
var jsonStringifyPrettyCompact = stringify;
- var _default$3 = /*#__PURE__*/function () {
+ var _default$2 = /*#__PURE__*/function () {
// constructor
//
// `fc` Optional FeatureCollection of known features
} // Replace CountryCoder world geometry to be a polygon covering the world.
- var world = _cloneDeep(feature('Q2'));
+ var world = _cloneDeep(feature$1('Q2'));
world.geometry = {
type: 'Polygon',
}
} else if (typeof location === 'string' || typeof location === 'number') {
// a country-coder value?
- var feature$1 = feature(location);
+ var feature = feature$1(location);
- if (feature$1) {
+ if (feature) {
// Use wikidata QID as the identifier, since that seems to be the one
// property that everything in CountryCoder is guaranteed to have.
- var _id2 = feature$1.properties.wikidata;
+ var _id2 = feature.properties.wikidata;
return {
type: 'countrycoder',
location: location,
var PRECISION = 3;
var area = Math.PI * RADIUS * RADIUS / 1e6; // m² to km²
- var feature$1 = this._cache[id] = geojsonPrecision({
+ var feature = this._cache[id] = geojsonPrecision({
type: 'Feature',
id: id,
properties: {
geometry: circleToPolygon(location, RADIUS, EDGES)
}, PRECISION);
return Object.assign(valid, {
- feature: feature$1
+ feature: feature
}); // a .geojson filename?
} else if (valid.type === 'geojson') ; else if (valid.type === 'countrycoder') {
- var _feature = _cloneDeep(feature(id));
+ var _feature = _cloneDeep(feature$1(id));
var props = _feature.properties; // -> This block of code is weird and requires some explanation. <-
// CountryCoder includes higher level features which are made up of members.
return Promise.all([data.get('oci_resources'), data.get('oci_features')]).then(function (vals) {
if (_oci) return _oci;
var ociResources = vals[0].resources;
- var loco = new _default$3(vals[1]);
+ var loco = new _default$2(vals[1]);
var ociFeatures = {};
Object.values(ociResources).forEach(function (resource) {
var feature = loco.resolveLocationSet(resource.locationSet).feature;
var _deferred = new Set();
- context.version = '2.19.5';
+ context.version = '2.19.6';
context.privacyVersion = '20200407'; // iD will alter the hash so cache the parameters intended to setup the session
context.initialHashParams = window.location.hash ? utilStringQs(window.location.hash) : {};