From d3c735b247ff486fdc650eeb087689a6cd70010c Mon Sep 17 00:00:00 2001 From: "Alex.V" Date: Wed, 10 Jun 2020 15:59:59 +0200 Subject: [PATCH] feat: Query builder order by (#685) * feat(cubejs-playground): Query builder order change support, UI controls for order change in the playground --- .eslintrc.js | 1 + .prettierrc | 19 + packages/cubejs-api-gateway/index.js | 5 +- .../dist/cubejs-client-core.umd.js | 384 +- packages/cubejs-client-react/.eslintrc.js | 82 +- .../dist/cubejs-client-react.esm.js | 445 +- .../dist/cubejs-client-react.js | 443 +- .../dist/cubejs-client-react.umd.js | 675 ++- .../cubejs-client-react/src/QueryBuilder.jsx | 305 +- .../cubejs-client-react/src/QueryRenderer.jsx | 2 +- .../cubejs-client-react/src/useCubeQuery.js | 14 +- packages/cubejs-client-react/src/utils.js | 7 + .../dist/cubejs-client-vue.esm.js | 7 +- .../dist/cubejs-client-vue.js | 7 +- .../dist/cubejs-client-vue.umd.js | 4540 +---------------- .../cubejs-client-vue/src/QueryBuilder.js | 6 +- packages/cubejs-playground/package.json | 11 +- .../src/PlaygroundQueryBuilder.js | 278 +- .../src/components/Header.js | 2 +- .../src/components/Order/DraggableItem.js | 42 + .../src/components/Order/OrderGroup.js | 40 + .../src/hooks/deep-compare-memoize.js | 12 + packages/cubejs-playground/yarn.lock | 129 +- .../QueryBuilder/ExploreQueryBuilder.js | 226 +- .../QueryBuilder/Order/DraggableItem.js | 42 + .../QueryBuilder/Order/OrderGroup.js | 40 + yarn.lock | 47 +- 27 files changed, 2292 insertions(+), 5519 deletions(-) create mode 100644 .prettierrc create mode 100644 packages/cubejs-client-react/src/utils.js create mode 100644 packages/cubejs-playground/src/components/Order/DraggableItem.js create mode 100644 packages/cubejs-playground/src/components/Order/OrderGroup.js create mode 100644 packages/cubejs-playground/src/hooks/deep-compare-memoize.js create mode 100644 packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/DraggableItem.js create mode 100644 packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/OrderGroup.js diff --git a/.eslintrc.js b/.eslintrc.js index e243a76952a8a..78628df41b55e 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -28,6 +28,7 @@ module.exports = { ignoreStrings: true, ignoreTemplateLiterals: true, }], + 'no-trailing-spaces': ['error', { skipBlankLines: true }], 'no-unused-vars': ['warn'] } }; diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000000000..56fc5c3e67cbf --- /dev/null +++ b/.prettierrc @@ -0,0 +1,19 @@ +{ + "printWidth": 120, + "tabWidth": 2, + "useTabs": false, + "semi": true, + "singleQuote": true, + "arrowParens": "always", + "trailingComma": "none", + "bracketSpacing": true, + "jsxBracketSameLine": false, + "overrides": [ + { + "files": ["*.css", "*.scss"], + "options": { + "singleQuote": false + } + } + ] +} diff --git a/packages/cubejs-api-gateway/index.js b/packages/cubejs-api-gateway/index.js index 4bb3674f5f0c2..72b8ca8c17ad5 100644 --- a/packages/cubejs-api-gateway/index.js +++ b/packages/cubejs-api-gateway/index.js @@ -370,7 +370,10 @@ class ApiGateway { { includeDebugInfo: process.env.NODE_ENV !== 'production' } ); res({ - sql: sqlQuery + sql: { + ...sqlQuery, + order: Object.fromEntries(sqlQuery.order.map(({ id, desc }) => [id, desc ? 'desc' : 'asc'])) + } }); } catch (e) { this.handleError({ diff --git a/packages/cubejs-client-core/dist/cubejs-client-core.umd.js b/packages/cubejs-client-core/dist/cubejs-client-core.umd.js index 97792917c663a..ca8ad6973419f 100644 --- a/packages/cubejs-client-core/dist/cubejs-client-core.umd.js +++ b/packages/cubejs-client-core/dist/cubejs-client-core.umd.js @@ -1389,231 +1389,29 @@ } }); - var _global = createCommonjsModule(function (module) { - // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 - var global = module.exports = typeof window != 'undefined' && window.Math == Math - ? window : typeof self != 'undefined' && self.Math == Math ? self - // eslint-disable-next-line no-new-func - : Function('return this')(); - if (typeof __g == 'number') __g = global; // eslint-disable-line no-undef - }); - - var _core = createCommonjsModule(function (module) { - var core = module.exports = { version: '2.5.7' }; - if (typeof __e == 'number') __e = core; // eslint-disable-line no-undef - }); - var _core_1 = _core.version; - - var _isObject = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; - }; - - var _anObject = function (it) { - if (!_isObject(it)) throw TypeError(it + ' is not an object!'); - return it; - }; - - var _fails = function (exec) { - try { - return !!exec(); - } catch (e) { - return true; - } - }; - - // Thank's IE8 for his funny defineProperty - var _descriptors = !_fails(function () { - return Object.defineProperty({}, 'a', { get: function () { return 7; } }).a != 7; - }); - - var document$3 = _global.document; - // typeof document.createElement is 'object' in old IE - var is = _isObject(document$3) && _isObject(document$3.createElement); - var _domCreate = function (it) { - return is ? document$3.createElement(it) : {}; - }; - - var _ie8DomDefine = !_descriptors && !_fails(function () { - return Object.defineProperty(_domCreate('div'), 'a', { get: function () { return 7; } }).a != 7; - }); - - // 7.1.1 ToPrimitive(input [, PreferredType]) - - // 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 (it, S) { - if (!_isObject(it)) return it; - var fn, val; - if (S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val; - if (typeof (fn = it.valueOf) == 'function' && !_isObject(val = fn.call(it))) return val; - if (!S && typeof (fn = it.toString) == 'function' && !_isObject(val = fn.call(it))) return val; - throw TypeError("Can't convert object to primitive value"); - }; - - var dP = Object.defineProperty; - - var f$6 = _descriptors ? Object.defineProperty : function defineProperty(O, P, Attributes) { - _anObject(O); - P = _toPrimitive(P, true); - _anObject(Attributes); - if (_ie8DomDefine) try { - return dP(O, P, Attributes); - } catch (e) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported!'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; - }; - - var _objectDp = { - f: f$6 - }; - - var _propertyDesc = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; - }; - - var _hide = _descriptors ? function (object, key, value) { - return _objectDp.f(object, key, _propertyDesc(1, value)); - } : function (object, key, value) { - object[key] = value; - return object; - }; - - var hasOwnProperty$1 = {}.hasOwnProperty; - var _has = function (it, key) { - return hasOwnProperty$1.call(it, key); - }; - - var id$1 = 0; - var px = Math.random(); - var _uid = function (key) { - return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id$1 + px).toString(36)); - }; - - var _redefine = createCommonjsModule(function (module) { - var SRC = _uid('src'); - var TO_STRING = 'toString'; - var $toString = Function[TO_STRING]; - var TPL = ('' + $toString).split(TO_STRING); - - _core.inspectSource = function (it) { - return $toString.call(it); - }; - - (module.exports = function (O, key, val, safe) { - var isFunction = typeof val == 'function'; - if (isFunction) _has(val, 'name') || _hide(val, 'name', key); - if (O[key] === val) return; - if (isFunction) _has(val, SRC) || _hide(val, SRC, O[key] ? '' + O[key] : TPL.join(String(key))); - if (O === _global) { - O[key] = val; - } else if (!safe) { - delete O[key]; - _hide(O, key, val); - } else if (O[key]) { - O[key] = val; - } else { - _hide(O, key, val); - } - // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative - })(Function.prototype, TO_STRING, function toString() { - return typeof this == 'function' && this[SRC] || $toString.call(this); - }); - }); - - var _aFunction = function (it) { - if (typeof it != 'function') throw TypeError(it + ' is not a function!'); - return it; - }; - - // optional / simple context binding - - var _ctx = function (fn, that, length) { - _aFunction(fn); - if (that === undefined) return fn; - switch (length) { - 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 PROTOTYPE = 'prototype'; - - var $export = function (type, name, source) { - var IS_FORCED = type & $export.F; - var IS_GLOBAL = type & $export.G; - var IS_STATIC = type & $export.S; - var IS_PROTO = type & $export.P; - var IS_BIND = type & $export.B; - var target = IS_GLOBAL ? _global : IS_STATIC ? _global[name] || (_global[name] = {}) : (_global[name] || {})[PROTOTYPE]; - var exports = IS_GLOBAL ? _core : _core[name] || (_core[name] = {}); - var expProto = exports[PROTOTYPE] || (exports[PROTOTYPE] = {}); - var key, own, out, exp; - if (IS_GLOBAL) source = name; - for (key in source) { - // contains in native - own = !IS_FORCED && target && target[key] !== undefined; - // export native or passed - out = (own ? target : source)[key]; - // bind timers to global for call from export context - exp = IS_BIND && own ? _ctx(out, _global) : IS_PROTO && typeof out == 'function' ? _ctx(Function.call, out) : out; - // extend global - if (target) _redefine(target, key, out, type & $export.U); - // export - if (exports[key] != out) _hide(exports, key, exp); - if (IS_PROTO && expProto[key] != out) expProto[key] = out; - } - }; - _global.core = _core; - // type bitmap - $export.F = 1; // forced - $export.G = 2; // global - $export.S = 4; // static - $export.P = 8; // proto - $export.B = 16; // bind - $export.W = 32; // wrap - $export.U = 64; // safe - $export.R = 128; // real proto method for `library` - var _export$1 = $export; - - var navigator = _global.navigator; - - var _userAgent = navigator && navigator.userAgent || ''; - - // ie9- setTimeout & setInterval additional parameters fix - - - var slice = [].slice; - var MSIE = /MSIE .\./.test(_userAgent); // <- dirty ie9- check - var wrap = function (set) { - return function (fn, time /* , ...args */) { + var MSIE = /MSIE .\./.test(engineUserAgent); // <- dirty ie9- check + + var wrap = function (scheduler) { + return function (handler, timeout /* , ...arguments */) { var boundArgs = arguments.length > 2; - var args = boundArgs ? slice.call(arguments, 2) : false; - return set(boundArgs ? function () { + var args = boundArgs ? slice.call(arguments, 2) : undefined; + return scheduler(boundArgs ? function () { // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(this, args); - } : fn, time); + (typeof handler == 'function' ? handler : Function(handler)).apply(this, args); + } : handler, timeout); }; }; - _export$1(_export$1.G + _export$1.B + _export$1.F * MSIE, { - setTimeout: wrap(_global.setTimeout), - setInterval: wrap(_global.setInterval) + + // 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(global_1.setTimeout), + // `setInterval` method + // https://html.spec.whatwg.org/multipage/timers-and-user-prompts.html#dom-setinterval + setInterval: wrap(global_1.setInterval) }); // `IsArray` abstract operation @@ -1648,7 +1446,7 @@ var GT = '>'; var LT = '<'; - var PROTOTYPE$1 = 'prototype'; + var PROTOTYPE = 'prototype'; var SCRIPT = 'script'; var IE_PROTO = sharedKey('IE_PROTO'); @@ -1697,7 +1495,7 @@ } catch (error) { /* ignore */ } NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE$1][enumBugKeys[length]]; + while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; return NullProtoObject(); }; @@ -1708,9 +1506,9 @@ var objectCreate = Object.create || function create(O, Properties) { var result; if (O !== null) { - EmptyConstructor[PROTOTYPE$1] = anObject(O); + EmptyConstructor[PROTOTYPE] = anObject(O); result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE$1] = null; + EmptyConstructor[PROTOTYPE] = null; // add "__proto__" for Object.getPrototypeOf polyfill result[IE_PROTO] = O; } else result = NullProtoObject(); @@ -1733,20 +1531,20 @@ }; // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window - var f$7 = function getOwnPropertyNames(it) { + var f$6 = function getOwnPropertyNames(it) { return windowNames && toString$1.call(it) == '[object Window]' ? getWindowNames(it) : nativeGetOwnPropertyNames(toIndexedObject(it)); }; var objectGetOwnPropertyNamesExternal = { - f: f$7 + f: f$6 }; - var f$8 = wellKnownSymbol; + var f$7 = wellKnownSymbol; var wellKnownSymbolWrapped = { - f: f$8 + f: f$7 }; var defineProperty$1 = objectDefineProperty.f; @@ -1839,11 +1637,11 @@ var HIDDEN = sharedKey('hidden'); var SYMBOL = 'Symbol'; - var PROTOTYPE$2 = 'prototype'; + var PROTOTYPE$1 = 'prototype'; var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); var setInternalState$1 = internalState.set; var getInternalState$1 = internalState.getterFor(SYMBOL); - var ObjectPrototype = Object[PROTOTYPE$2]; + var ObjectPrototype = Object[PROTOTYPE$1]; var $Symbol = global_1.Symbol; var $stringify = getBuiltIn('JSON', 'stringify'); var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; @@ -1857,7 +1655,7 @@ var WellKnownSymbolsStore$1 = shared('wks'); var QObject = global_1.QObject; // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 - var USE_SETTER = !QObject || !QObject[PROTOTYPE$2] || !QObject[PROTOTYPE$2].findChild; + var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 var setSymbolDescriptor = descriptors && fails(function () { @@ -1874,7 +1672,7 @@ } : nativeDefineProperty$1; var wrap$1 = function (tag, description) { - var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$2]); + var symbol = AllSymbols[tag] = objectCreate($Symbol[PROTOTYPE$1]); setInternalState$1(symbol, { type: SYMBOL, tag: tag, @@ -1975,7 +1773,7 @@ return wrap$1(tag, description); }; - redefine($Symbol[PROTOTYPE$2], 'toString', function toString() { + redefine($Symbol[PROTOTYPE$1], 'toString', function toString() { return getInternalState$1(this).tag; }); @@ -1995,7 +1793,7 @@ if (descriptors) { // https://github.com/tc39/proposal-Symbol-description - nativeDefineProperty$1($Symbol[PROTOTYPE$2], 'description', { + nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { configurable: true, get: function description() { return getInternalState$1(this).description; @@ -2102,8 +1900,8 @@ // `Symbol.prototype[@@toPrimitive]` method // https://tc39.github.io/ecma262/#sec-symbol.prototype-@@toprimitive - if (!$Symbol[PROTOTYPE$2][TO_PRIMITIVE]) { - createNonEnumerableProperty($Symbol[PROTOTYPE$2], TO_PRIMITIVE, $Symbol[PROTOTYPE$2].valueOf); + 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 @@ -2938,14 +2736,14 @@ throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - var runtime = createCommonjsModule(function (module) { + var runtime_1 = createCommonjsModule(function (module) { /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ - !function (global) { + var runtime = function (exports) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; @@ -2955,23 +2753,6 @@ var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - var runtime = global.regeneratorRuntime; - - if (runtime) { - { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - - - return; - } // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - - - runtime = global.regeneratorRuntime = module.exports; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. @@ -2984,7 +2765,7 @@ return generator; } - runtime.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion + exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we @@ -3057,14 +2838,14 @@ }); } - runtime.isGeneratorFunction = function (genFun) { + exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; - runtime.mark = function (genFun) { + exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { @@ -3083,13 +2864,13 @@ // meant to be awaited. - runtime.awrap = function (arg) { + exports.awrap = function (arg) { return { __await: arg }; }; - function AsyncIterator(generator) { + function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); @@ -3100,14 +2881,14 @@ var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { + return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } - return Promise.resolve(value).then(function (unwrapped) { + return PromiseImpl.resolve(value).then(function (unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. @@ -3125,7 +2906,7 @@ function enqueue(method, arg) { function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { + return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } @@ -3158,13 +2939,14 @@ return this; }; - runtime.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of + exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. + exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); + return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); @@ -3257,6 +3039,7 @@ context.delegate = null; if (context.method === "throw") { + // Note: ["return"] must be used for ES3 parsing compatibility. if (delegate.iterator["return"]) { // If the delegate iterator has a return method, give it a // chance to clean up. @@ -3375,7 +3158,7 @@ this.reset(true); } - runtime.keys = function (object) { + exports.keys = function (object) { var keys = []; for (var key in object) { @@ -3442,7 +3225,7 @@ }; } - runtime.values = values; + exports.values = values; function doneResult() { return { @@ -3633,13 +3416,32 @@ return ContinueSentinel; } - }; - }( // In sloppy mode, unbound `this` refers to the global object, fallback to - // Function constructor if we're in global strict mode. That is sadly a form - // of indirect eval which violates Content Security Policy. - function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")()); + }; // Regardless of whether this script is executing as a CommonJS module + // or not, return the runtime object so that we can declare the variable + // regeneratorRuntime in the outer scope, which allows this module to be + // injected easily by `bin/regenerator --include-runtime script.js`. + + return exports; + }( // If this script is executing as a CommonJS module, use module.exports + // as the regeneratorRuntime namespace. Otherwise create a new empty + // object. Either way, the resulting object will be used to initialize + // the regeneratorRuntime variable at the top of this file. + module.exports); + + try { + regeneratorRuntime = runtime; + } catch (accidentalStrictMode) { + // This module should not be running in strict mode, so the above + // assignment should always work unless something is misconfigured. Just + // in case runtime.js accidentally runs in strict mode, we can escape + // strict mode using a global Function call. This could conceivably fail + // if a Content Security Policy forbids using Function, but in that case + // the proper solution is to fix the accidental strict mode problem. If + // you've misconfigured your bundler to force strict mode and applied a + // CSP to forbid Function, and you're not willing to fix either of those + // problems, please detail your unique predicament in a GitHub issue. + Function("r", "regeneratorRuntime = r")(runtime); + } }); var arrayBufferNative = typeof ArrayBuffer !== 'undefined' && typeof DataView !== 'undefined'; @@ -3766,13 +3568,13 @@ var setInternalState$4 = internalState.set; var ARRAY_BUFFER = 'ArrayBuffer'; var DATA_VIEW = 'DataView'; - var PROTOTYPE$3 = 'prototype'; + 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$3]; + var $DataViewPrototype = $DataView && $DataView[PROTOTYPE$2]; var ObjectPrototype$2 = Object.prototype; var RangeError$1 = global_1.RangeError; @@ -3804,7 +3606,7 @@ }; var addGetter = function (Constructor, key) { - defineProperty$5(Constructor[PROTOTYPE$3], key, { get: function () { return getInternalState$4(this)[key]; } }); + defineProperty$5(Constructor[PROTOTYPE$2], key, { get: function () { return getInternalState$4(this)[key]; } }); }; var get$1 = function (view, count, index, isLittleEndian) { @@ -3865,7 +3667,7 @@ addGetter($DataView, 'byteOffset'); } - redefineAll($DataView[PROTOTYPE$3], { + redefineAll($DataView[PROTOTYPE$2], { getInt8: function getInt8(byteOffset) { return get$1(this, 1, byteOffset)[0] << 24 >> 24; }, @@ -3932,7 +3734,7 @@ anInstance(this, $ArrayBuffer); return new NativeArrayBuffer(toIndex(length)); }; - var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE$3] = NativeArrayBuffer[PROTOTYPE$3]; + var ArrayBufferPrototype = $ArrayBuffer[PROTOTYPE$2] = NativeArrayBuffer[PROTOTYPE$2]; for (var keys$1 = getOwnPropertyNames(NativeArrayBuffer), j = 0, key; keys$1.length > j;) { if (!((key = keys$1[j++]) in $ArrayBuffer)) { createNonEnumerableProperty($ArrayBuffer, key, NativeArrayBuffer[key]); @@ -6532,7 +6334,7 @@ return new XMap(f, xf); }); - function _has$1(prop, obj) { + function _has(prop, obj) { return Object.prototype.hasOwnProperty.call(obj, prop); } @@ -6544,7 +6346,7 @@ return toString$2.call(arguments) === '[object Arguments]' ? function _isArguments(x) { return toString$2.call(x) === '[object Arguments]'; } : function _isArguments(x) { - return _has$1('callee', x); + return _has('callee', x); }; }(); @@ -6612,7 +6414,7 @@ var checkArgsLength = hasArgsEnumBug && _isArguments(obj); for (prop in obj) { - if (_has$1(prop, obj) && (!checkArgsLength || prop !== 'length')) { + if (_has(prop, obj) && (!checkArgsLength || prop !== 'length')) { ks[ks.length] = prop; } } @@ -6623,7 +6425,7 @@ while (nIdx >= 0) { prop = nonEnumerableProps[nIdx]; - if (_has$1(prop, obj) && !contains(ks, prop)) { + if (_has(prop, obj) && !contains(ks, prop)) { ks[ks.length] = prop; } @@ -7940,7 +7742,7 @@ while (idx >= 0) { var key = keysA[idx]; - if (!(_has$1(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) { + if (!(_has(key, b) && _equals(b[key], a[key], extendedStackA, extendedStackB))) { return false; } @@ -8429,7 +8231,7 @@ return result; } - function _isObject$1(x) { + function _isObject(x) { return Object.prototype.toString.call(x) === '[object Object]'; } @@ -8490,7 +8292,7 @@ _curry2( /*#__PURE__*/ _dispatchable(['filter'], _xfilter, function (pred, filterable) { - return _isObject$1(filterable) ? _reduce(function (acc, key) { + return _isObject(filterable) ? _reduce(function (acc, key) { if (pred(filterable[key])) { acc[key] = filterable[key]; } @@ -8685,7 +8487,7 @@ var key; for (key in this.inputs) { - if (_has$1(key, this.inputs)) { + if (_has(key, this.inputs)) { result = this.xf['@@transducer/step'](result, this.inputs[key]); if (result['@@transducer/reduced']) { @@ -8764,7 +8566,7 @@ _dispatchable([], _xreduceBy, function reduceBy(valueFn, valueAcc, keyFn, list) { return _reduce(function (acc, elt) { var key = keyFn(elt); - acc[key] = valueFn(_has$1(key, acc) ? acc[key] : _clone(valueAcc, [], [], false), elt); + acc[key] = valueFn(_has(key, acc) ? acc[key] : _clone(valueAcc, [], [], false), elt); return acc; }, {}, list); })); @@ -10455,7 +10257,7 @@ var pairs = []; for (var prop in obj) { - if (_has$1(prop, obj)) { + if (_has(prop, obj)) { pairs[pairs.length] = [prop, obj[prop]]; } } diff --git a/packages/cubejs-client-react/.eslintrc.js b/packages/cubejs-client-react/.eslintrc.js index bca32c8d74a5f..cb687bee93ef5 100644 --- a/packages/cubejs-client-react/.eslintrc.js +++ b/packages/cubejs-client-react/.eslintrc.js @@ -1,38 +1,50 @@ module.exports = { - "extends": "airbnb", - "plugins": [ - "react", - "jsx-a11y", - "import" - ], - "rules": { - "react/jsx-no-bind": 0, - "react/jsx-first-prop-new-line": 0, - "react/jsx-indent-props": 0, - "react/jsx-filename-extension": 0, - "react/react-in-jsx-scope": 0, // remove when import React is ready - "import/no-unresolved": 0, - "react/jsx-props-no-spreading": 0, - "comma-dangle": 0, - "no-console": 0, - "arrow-parens": 0, - "react/jsx-no-undef": 0, - "react/jsx-tag-spacing": 0, - "react/prefer-stateless-function": 0, - "react/forbid-prop-types": 0, - "import/extensions": 0, - "quotes": 0, - "no-prototype-builtins": 0, - "class-methods-use-this": 0, - "no-param-reassign": 0, - "no-mixed-operators": 0, - "no-else-return": 0, - 'max-len': ['error', 120, 2, { - ignoreUrls: true, - ignoreComments: false, - ignoreRegExpLiterals: true, - ignoreStrings: true, - ignoreTemplateLiterals: true, - }] + extends: 'airbnb', + plugins: ['react', 'jsx-a11y', 'import'], + rules: { + 'react/jsx-no-bind': 0, + 'react/jsx-first-prop-new-line': 0, + 'react/jsx-indent-props': 0, + 'react/jsx-filename-extension': 0, + 'react/react-in-jsx-scope': 0, // remove when import React is ready + 'import/no-unresolved': 0, + 'react/jsx-props-no-spreading': 0, + 'comma-dangle': 0, + 'no-console': 0, + 'no-plusplus': 0, + 'import/prefer-default-export': 0, + 'import/no-named-as-default': 0, + 'import/no-named-as-default-member': 0, + 'arrow-parens': 0, + 'react/jsx-no-undef': 0, + 'react/jsx-tag-spacing': 0, + 'react/prefer-stateless-function': 0, + 'react/forbid-prop-types': 0, + 'import/extensions': 0, + quotes: ['warn', 'single'], + 'no-prototype-builtins': 0, + 'class-methods-use-this': 0, + 'no-param-reassign': 0, + 'no-mixed-operators': 0, + 'no-else-return': 0, + 'max-len': [ + 'error', + 120, + 2, + { + ignoreUrls: true, + ignoreComments: false, + ignoreRegExpLiterals: true, + ignoreStrings: true, + ignoreTemplateLiterals: true + } + ], + 'no-trailing-spaces': ['error', { skipBlankLines: true }], + 'react/sort-comp': [ + 1, + { + order: ['static-methods', 'lifecycle', 'everything-else', 'render'] + } + ] } }; diff --git a/packages/cubejs-client-react/dist/cubejs-client-react.esm.js b/packages/cubejs-client-react/dist/cubejs-client-react.esm.js index 6f18d7c47c5b7..fe93826dd55d9 100644 --- a/packages/cubejs-client-react/dist/cubejs-client-react.esm.js +++ b/packages/cubejs-client-react/dist/cubejs-client-react.esm.js @@ -13,17 +13,25 @@ import _createClass from '@babel/runtime/helpers/createClass'; import _inherits from '@babel/runtime/helpers/inherits'; import React, { createContext, useRef, useState, useContext, useEffect } from 'react'; import { func, object, any, bool } from 'prop-types'; -import { equals, toPairs, fromPairs } from 'ramda'; +import { equals, toPairs, fromPairs, uniqBy, prop, indexBy } from 'ramda'; import _extends from '@babel/runtime/helpers/extends'; import _objectWithoutProperties from '@babel/runtime/helpers/objectWithoutProperties'; import 'core-js/modules/es.array.concat'; import 'core-js/modules/es.array.filter'; +import 'core-js/modules/es.array.for-each'; +import 'core-js/modules/es.array.includes'; import 'core-js/modules/es.array.splice'; import 'core-js/modules/es.function.name'; +import 'core-js/modules/es.object.entries'; +import 'core-js/modules/es.object.from-entries'; +import 'core-js/modules/es.string.includes'; +import 'core-js/modules/web.dom-collections.for-each'; import _defineProperty from '@babel/runtime/helpers/defineProperty'; import _regeneratorRuntime from '@babel/runtime/regenerator'; import 'regenerator-runtime/runtime'; import _asyncToGenerator from '@babel/runtime/helpers/asyncToGenerator'; +import _toConsumableArray from '@babel/runtime/helpers/toConsumableArray'; +import 'core-js/modules/es.object.keys'; var isQueryPresent = (function (query) { return query.measures && query.measures.length || query.dimensions && query.dimensions.length || query.timeDimensions && query.timeDimensions.length; @@ -312,11 +320,105 @@ QueryRendererWithTotals.defaultProps = { loadSql: null }; +function reorder(list, sourceIndex, destinationIndex) { + var result = _toConsumableArray(list); + + var _result$splice = result.splice(sourceIndex, 1), + _result$splice2 = _slicedToArray(_result$splice, 1), + removed = _result$splice2[0]; + + result.splice(destinationIndex, 0, removed); + return result; +} + +var granularities = [{ + name: undefined, + title: 'w/o grouping' +}, { + name: 'hour', + title: 'Hour' +}, { + name: 'day', + title: 'Day' +}, { + name: 'week', + title: 'Week' +}, { + name: 'month', + title: 'Month' +}, { + name: 'year', + title: 'Year' +}]; + var QueryBuilder = /*#__PURE__*/ function (_React$Component) { _inherits(QueryBuilder, _React$Component); + _createClass(QueryBuilder, null, [{ + key: "getDerivedStateFromProps", + value: function getDerivedStateFromProps(props, state) { + var nextState = _objectSpread2({}, state, {}, props.vizState || {}); + + return _objectSpread2({}, nextState, { + query: _objectSpread2({}, nextState.query, {}, props.query || {}) + }); + } + }, { + key: "resolveMember", + value: function resolveMember(type, _ref) { + var meta = _ref.meta, + query = _ref.query; + + if (!meta) { + return []; + } + + if (type === 'timeDimensions') { + return (query.timeDimensions || []).map(function (m, index) { + return _objectSpread2({}, m, { + dimension: _objectSpread2({}, meta.resolveMember(m.dimension, 'dimensions'), { + granularities: granularities + }), + index: index + }); + }); + } + + return (query[type] || []).map(function (m, index) { + return _objectSpread2({ + index: index + }, meta.resolveMember(m, type)); + }); + } + }, { + key: "getOrderMembers", + value: function getOrderMembers(state) { + var query = state.query, + meta = state.meta; + + if (!meta) { + return []; + } + + var toOrderMember = function toOrderMember(member) { + return { + id: member.name, + title: member.title + }; + }; + + return uniqBy(prop('id'), [].concat(_toConsumableArray(QueryBuilder.resolveMember('measures', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('dimensions', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('timeDimensions', state).map(function (td) { + return toOrderMember(td.dimension); + }))).map(function (member) { + return _objectSpread2({}, member, { + order: query.order && query.order[member.id] || 'none' + }); + })); + } + }]); + function QueryBuilder(props) { var _this; @@ -325,8 +427,11 @@ function (_React$Component) { _this = _possibleConstructorReturn(this, _getPrototypeOf(QueryBuilder).call(this, props)); _this.state = _objectSpread2({ query: props.query, - chartType: 'line' + chartType: 'line', + orderMembers: [] }, props.vizState); + _this.shouldApplyHeuristicOrder = false; + _this.requestId = 0; return _this; } @@ -336,21 +441,26 @@ function (_React$Component) { var _componentDidMount = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee() { - var meta; + var query, meta; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - _context.next = 2; + query = this.state.query; + _context.next = 3; return this.cubejsApi().meta(); - case 2: + case 3: meta = _context.sent; this.setState({ - meta: meta + meta: meta, + orderMembers: QueryBuilder.getOrderMembers({ + meta: meta, + query: query + }) }); - case 4: + case 5: case "end": return _context.stop(); } @@ -364,25 +474,6 @@ function (_React$Component) { return componentDidMount; }() - }, { - key: "componentDidUpdate", - value: function componentDidUpdate(prevProps) { - var _this$props = this.props, - query = _this$props.query, - vizState = _this$props.vizState; - - if (!equals(prevProps.query, query)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState({ - query: query - }); - } - - if (!equals(prevProps.vizState, vizState)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState(vizState); - } - } }, { key: "cubejsApi", value: function cubejsApi() { @@ -444,28 +535,11 @@ function (_React$Component) { }; }; - var granularities = [{ - name: undefined, - title: 'w/o grouping' - }, { - name: 'hour', - title: 'Hour' - }, { - name: 'day', - title: 'Day' - }, { - name: 'week', - title: 'Week' - }, { - name: 'month', - title: 'Month' - }, { - name: 'year', - title: 'Year' - }]; var _this$state = this.state, meta = _this$state.meta, query = _this$state.query, + _this$state$orderMemb = _this$state.orderMembers, + orderMembers = _this$state$orderMemb === void 0 ? [] : _this$state$orderMemb, chartType = _this$state.chartType; return _objectSpread2({ meta: meta, @@ -473,29 +547,14 @@ function (_React$Component) { validatedQuery: this.validatedQuery(), isQueryPresent: this.isQueryPresent(), chartType: chartType, - measures: (meta && query.measures || []).map(function (m, i) { - return _objectSpread2({ - index: i - }, meta.resolveMember(m, 'measures')); - }), - dimensions: (meta && query.dimensions || []).map(function (m, i) { - return _objectSpread2({ - index: i - }, meta.resolveMember(m, 'dimensions')); - }), + measures: QueryBuilder.resolveMember('measures', this.state), + dimensions: QueryBuilder.resolveMember('dimensions', this.state), + timeDimensions: QueryBuilder.resolveMember('timeDimensions', this.state), segments: (meta && query.segments || []).map(function (m, i) { return _objectSpread2({ index: i }, meta.resolveMember(m, 'segments')); }), - timeDimensions: (meta && query.timeDimensions || []).map(function (m, i) { - return _objectSpread2({}, m, { - dimension: _objectSpread2({}, meta.resolveMember(m.dimension, 'dimensions'), { - granularities: granularities - }), - index: i - }); - }), filters: (meta && query.filters || []).map(function (m, i) { return _objectSpread2({}, m, { dimension: meta.resolveMember(m.dimension, ['dimensions', 'measures']), @@ -503,6 +562,7 @@ function (_React$Component) { index: i }); }), + orderMembers: orderMembers, availableMeasures: meta && meta.membersForQuery(query, 'measures') || [], availableDimensions: meta && meta.membersForQuery(query, 'dimensions') || [], availableTimeDimensions: (meta && meta.membersForQuery(query, 'dimensions') || []).filter(function (m) { @@ -518,6 +578,33 @@ function (_React$Component) { return _this2.updateVizState({ chartType: newChartType }); + }, + updateOrder: { + set: function set(memberId) { + var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'asc'; + + _this2.updateVizState({ + orderMembers: orderMembers.map(function (orderMember) { + return _objectSpread2({}, orderMember, { + order: orderMember.id === memberId ? order : orderMember.order + }); + }) + }); + }, + update: function update(order) { + _this2.updateQuery({ + order: order + }); + }, + reorder: function reorder$$1(sourceIndex, destinationIndex) { + if (sourceIndex == null || destinationIndex == null) { + return; + } + + _this2.updateVizState({ + orderMembers: reorder(orderMembers, sourceIndex, destinationIndex) + }); + } } }, queryRendererProps); } @@ -531,26 +618,113 @@ function (_React$Component) { } }, { key: "updateVizState", - value: function updateVizState(state) { - var _this$props2 = this.props, - setQuery = _this$props2.setQuery, - setVizState = _this$props2.setVizState; - var finalState = this.applyStateChangeHeuristics(state); - this.setState(finalState); - finalState = _objectSpread2({}, this.state, {}, finalState); - - if (setQuery) { - setQuery(finalState.query); - } + value: function () { + var _updateVizState = _asyncToGenerator( + /*#__PURE__*/ + _regeneratorRuntime.mark(function _callee2(state) { + var _this$props, setQuery, setVizState, stateQuery, finalState, _ref2, _, query, currentRequestId, _ref3, sqlQuery, updatedOrderMembers, currentOrderMemberIds, currentOrderMembers, nextOrder, _finalState, _meta, toSet; - if (setVizState) { - var _finalState = finalState, - meta = _finalState.meta, - toSet = _objectWithoutProperties(_finalState, ["meta"]); + return _regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _this$props = this.props, setQuery = _this$props.setQuery, setVizState = _this$props.setVizState; + stateQuery = this.state.query; + finalState = this.applyStateChangeHeuristics(state); + _ref2 = finalState.query || {}, _ = _ref2.order, query = _objectWithoutProperties(_ref2, ["order"]); + + if (!(this.shouldApplyHeuristicOrder && QueryRenderer.isQueryPresent(query))) { + _context2.next = 19; + break; + } + + this.shouldApplyHeuristicOrder = false; + _context2.prev = 6; + currentRequestId = ++this.requestId; + _context2.next = 10; + return this.cubejsApi().sql(query); + + case 10: + _ref3 = _context2.sent; + sqlQuery = _ref3.sqlQuery; + + if (!(this.requestId !== currentRequestId)) { + _context2.next = 14; + break; + } + + return _context2.abrupt("return"); + + case 14: + finalState = _objectSpread2({}, finalState, { + query: _objectSpread2({}, finalState.query, { + order: sqlQuery.sql.order + }) + }); // eslint-disable-next-line + + _context2.next = 19; + break; + + case 17: + _context2.prev = 17; + _context2.t0 = _context2["catch"](6); + + case 19: + updatedOrderMembers = indexBy(prop('id'), QueryBuilder.getOrderMembers(_objectSpread2({}, this.state, {}, finalState))); + currentOrderMemberIds = (finalState.orderMembers || []).map(function (_ref4) { + var id = _ref4.id; + return id; + }); + currentOrderMembers = (finalState.orderMembers || []).filter(function (_ref5) { + var id = _ref5.id; + return Boolean(updatedOrderMembers[id]); + }); + Object.entries(updatedOrderMembers).forEach(function (_ref6) { + var _ref7 = _slicedToArray(_ref6, 2), + id = _ref7[0], + orderMember = _ref7[1]; - setVizState(toSet); + if (!currentOrderMemberIds.includes(id)) { + currentOrderMembers.push(orderMember); + } + }); + nextOrder = Object.fromEntries(currentOrderMembers.map(function (_ref8) { + var id = _ref8.id, + order = _ref8.order; + return order !== 'none' ? [id, order] : false; + }).filter(Boolean)); + finalState = _objectSpread2({}, finalState, { + query: _objectSpread2({}, stateQuery, {}, query, { + order: nextOrder + }), + orderMembers: currentOrderMembers + }); + this.setState(finalState); + finalState = _objectSpread2({}, this.state, {}, finalState); + + if (setQuery) { + setQuery(finalState.query); + } + + if (setVizState) { + _finalState = finalState, _meta = _finalState.meta, toSet = _objectWithoutProperties(_finalState, ["meta"]); + setVizState(toSet); + } + + case 29: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[6, 17]]); + })); + + function updateVizState(_x) { + return _updateVizState.apply(this, arguments); } - } + + return updateVizState; + }() }, { key: "validatedQuery", value: function validatedQuery() { @@ -572,7 +746,7 @@ function (_React$Component) { if (newState.query) { var oldQuery = query; var newQuery = newState.query; - var meta = this.state.meta; + var _meta2 = this.state.meta; if ((oldQuery.timeDimensions || []).length === 1 && (newQuery.timeDimensions || []).length === 1 && newQuery.timeDimensions[0].granularity && oldQuery.timeDimensions[0].granularity !== newQuery.timeDimensions[0].granularity) { newState = _objectSpread2({}, newState, { @@ -581,13 +755,15 @@ function (_React$Component) { } if ((oldQuery.measures || []).length === 0 && (newQuery.measures || []).length > 0 || (oldQuery.measures || []).length === 1 && (newQuery.measures || []).length === 1 && oldQuery.measures[0] !== newQuery.measures[0]) { - var defaultTimeDimension = meta.defaultTimeDimensionNameFor(newQuery.measures[0]); + var defaultTimeDimension = _meta2.defaultTimeDimensionNameFor(newQuery.measures[0]); + newQuery = _objectSpread2({}, newQuery, { timeDimensions: defaultTimeDimension ? [{ dimension: defaultTimeDimension, granularity: defaultGranularity }] : [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: defaultTimeDimension ? 'line' : 'number' @@ -602,6 +778,7 @@ function (_React$Component) { }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: 'table' @@ -616,6 +793,7 @@ function (_React$Component) { }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: (newQuery.timeDimensions || []).length ? 'line' : 'number' @@ -627,6 +805,7 @@ function (_React$Component) { timeDimensions: [], filters: [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, sessionGranularity: null @@ -671,9 +850,9 @@ function (_React$Component) { }, { key: "applyStateChangeHeuristics", value: function applyStateChangeHeuristics(newState) { - var _this$props3 = this.props, - stateChangeHeuristics = _this$props3.stateChangeHeuristics, - disableHeuristics = _this$props3.disableHeuristics; + var _this$props2 = this.props, + stateChangeHeuristics = _this$props2.stateChangeHeuristics, + disableHeuristics = _this$props2.disableHeuristics; if (disableHeuristics) { return newState; @@ -686,10 +865,10 @@ function (_React$Component) { value: function render() { var _this3 = this; - var _this$props4 = this.props, - cubejsApi = _this$props4.cubejsApi, - _render = _this$props4.render, - wrapWithQueryRenderer = _this$props4.wrapWithQueryRenderer; + var _this$props3 = this.props, + cubejsApi = _this$props3.cubejsApi, + _render = _this$props3.render, + wrapWithQueryRenderer = _this$props3.wrapWithQueryRenderer; if (wrapWithQueryRenderer) { return React.createElement(QueryRenderer, { @@ -766,35 +945,35 @@ function useDeepCompareMemoize(value) { var useCubeQuery = (function (query) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var mutexRef = useRef({}); - var _useState = useState({}), - _useState2 = _slicedToArray(_useState, 1), - mutexObj = _useState2[0]; + var _useState = useState(null), + _useState2 = _slicedToArray(_useState, 2), + currentQuery = _useState2[0], + setCurrentQuery = _useState2[1]; - var _useState3 = useState(null), + var _useState3 = useState(false), _useState4 = _slicedToArray(_useState3, 2), - currentQuery = _useState4[0], - setCurrentQuery = _useState4[1]; + isLoading = _useState4[0], + setLoading = _useState4[1]; - var _useState5 = useState(false), + var _useState5 = useState(null), _useState6 = _slicedToArray(_useState5, 2), - isLoading = _useState6[0], - setLoading = _useState6[1]; + resultSet = _useState6[0], + setResultSet = _useState6[1]; var _useState7 = useState(null), _useState8 = _slicedToArray(_useState7, 2), - resultSet = _useState8[0], - setResultSet = _useState8[1]; - - var _useState9 = useState(null), - _useState10 = _slicedToArray(_useState9, 2), - error = _useState10[0], - setError = _useState10[1]; + error = _useState8[0], + setError = _useState8[1]; var context = useContext(CubeContext); - var resetResultSetOnChange = options.resetResultSetOnChange; var subscribeRequest = null; useEffect(function () { + var _options$skip = options.skip, + skip = _options$skip === void 0 ? false : _options$skip, + resetResultSetOnChange = options.resetResultSetOnChange; + function loadQuery() { return _loadQuery.apply(this, arguments); } @@ -803,17 +982,19 @@ var useCubeQuery = (function (query) { _loadQuery = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee() { - var cubejsApi; + var hasOrderChanged, cubejsApi; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - if (!(query && isQueryPresent(query))) { - _context.next = 25; + if (!(!skip && query && isQueryPresent(query))) { + _context.next = 26; break; } - if (!equals(currentQuery, query)) { + hasOrderChanged = !equals(Object.keys(currentQuery && currentQuery.order || {}), Object.keys(query.order || {})); + + if (hasOrderChanged || !equals(currentQuery, query)) { if (resetResultSetOnChange == null || resetResultSetOnChange) { setResultSet(null); } @@ -823,71 +1004,71 @@ var useCubeQuery = (function (query) { } setLoading(true); - _context.prev = 3; + _context.prev = 4; if (!subscribeRequest) { - _context.next = 8; + _context.next = 9; break; } - _context.next = 7; + _context.next = 8; return subscribeRequest.unsubscribe(); - case 7: + case 8: subscribeRequest = null; - case 8: + case 9: cubejsApi = options.cubejsApi || context && context.cubejsApi; if (!options.subscribe) { - _context.next = 13; + _context.next = 14; break; } subscribeRequest = cubejsApi.subscribe(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }, function (e, result) { - setLoading(false); - if (e) { setError(e); } else { setResultSet(result); } + + setLoading(false); }); - _context.next = 19; + _context.next = 20; break; - case 13: + case 14: _context.t0 = setResultSet; - _context.next = 16; + _context.next = 17; return cubejsApi.load(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }); - case 16: + case 17: _context.t1 = _context.sent; (0, _context.t0)(_context.t1); setLoading(false); - case 19: - _context.next = 25; + case 20: + _context.next = 26; break; - case 21: - _context.prev = 21; - _context.t2 = _context["catch"](3); + case 22: + _context.prev = 22; + _context.t2 = _context["catch"](4); setError(_context.t2); setLoading(false); - case 25: + case 26: case "end": return _context.stop(); } } - }, _callee, null, [[3, 21]]); + }, _callee, null, [[4, 22]]); })); return _loadQuery.apply(this, arguments); } @@ -899,7 +1080,7 @@ var useCubeQuery = (function (query) { subscribeRequest = null; } }; - }, useDeepCompareMemoize([query, options, context])); + }, useDeepCompareMemoize([query, Object.keys(query && query.order || {}), options, context])); return { isLoading: isLoading, resultSet: resultSet, diff --git a/packages/cubejs-client-react/dist/cubejs-client-react.js b/packages/cubejs-client-react/dist/cubejs-client-react.js index d2d848c792d08..c6dcdc54269f0 100644 --- a/packages/cubejs-client-react/dist/cubejs-client-react.js +++ b/packages/cubejs-client-react/dist/cubejs-client-react.js @@ -25,12 +25,20 @@ var _extends = _interopDefault(require('@babel/runtime/helpers/extends')); var _objectWithoutProperties = _interopDefault(require('@babel/runtime/helpers/objectWithoutProperties')); require('core-js/modules/es.array.concat'); require('core-js/modules/es.array.filter'); +require('core-js/modules/es.array.for-each'); +require('core-js/modules/es.array.includes'); require('core-js/modules/es.array.splice'); require('core-js/modules/es.function.name'); +require('core-js/modules/es.object.entries'); +require('core-js/modules/es.object.from-entries'); +require('core-js/modules/es.string.includes'); +require('core-js/modules/web.dom-collections.for-each'); var _defineProperty = _interopDefault(require('@babel/runtime/helpers/defineProperty')); var _regeneratorRuntime = _interopDefault(require('@babel/runtime/regenerator')); require('regenerator-runtime/runtime'); var _asyncToGenerator = _interopDefault(require('@babel/runtime/helpers/asyncToGenerator')); +var _toConsumableArray = _interopDefault(require('@babel/runtime/helpers/toConsumableArray')); +require('core-js/modules/es.object.keys'); var isQueryPresent = (function (query) { return query.measures && query.measures.length || query.dimensions && query.dimensions.length || query.timeDimensions && query.timeDimensions.length; @@ -319,11 +327,105 @@ QueryRendererWithTotals.defaultProps = { loadSql: null }; +function reorder(list, sourceIndex, destinationIndex) { + var result = _toConsumableArray(list); + + var _result$splice = result.splice(sourceIndex, 1), + _result$splice2 = _slicedToArray(_result$splice, 1), + removed = _result$splice2[0]; + + result.splice(destinationIndex, 0, removed); + return result; +} + +var granularities = [{ + name: undefined, + title: 'w/o grouping' +}, { + name: 'hour', + title: 'Hour' +}, { + name: 'day', + title: 'Day' +}, { + name: 'week', + title: 'Week' +}, { + name: 'month', + title: 'Month' +}, { + name: 'year', + title: 'Year' +}]; + var QueryBuilder = /*#__PURE__*/ function (_React$Component) { _inherits(QueryBuilder, _React$Component); + _createClass(QueryBuilder, null, [{ + key: "getDerivedStateFromProps", + value: function getDerivedStateFromProps(props, state) { + var nextState = _objectSpread2({}, state, {}, props.vizState || {}); + + return _objectSpread2({}, nextState, { + query: _objectSpread2({}, nextState.query, {}, props.query || {}) + }); + } + }, { + key: "resolveMember", + value: function resolveMember(type, _ref) { + var meta = _ref.meta, + query = _ref.query; + + if (!meta) { + return []; + } + + if (type === 'timeDimensions') { + return (query.timeDimensions || []).map(function (m, index) { + return _objectSpread2({}, m, { + dimension: _objectSpread2({}, meta.resolveMember(m.dimension, 'dimensions'), { + granularities: granularities + }), + index: index + }); + }); + } + + return (query[type] || []).map(function (m, index) { + return _objectSpread2({ + index: index + }, meta.resolveMember(m, type)); + }); + } + }, { + key: "getOrderMembers", + value: function getOrderMembers(state) { + var query = state.query, + meta = state.meta; + + if (!meta) { + return []; + } + + var toOrderMember = function toOrderMember(member) { + return { + id: member.name, + title: member.title + }; + }; + + return ramda.uniqBy(ramda.prop('id'), [].concat(_toConsumableArray(QueryBuilder.resolveMember('measures', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('dimensions', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('timeDimensions', state).map(function (td) { + return toOrderMember(td.dimension); + }))).map(function (member) { + return _objectSpread2({}, member, { + order: query.order && query.order[member.id] || 'none' + }); + })); + } + }]); + function QueryBuilder(props) { var _this; @@ -332,8 +434,11 @@ function (_React$Component) { _this = _possibleConstructorReturn(this, _getPrototypeOf(QueryBuilder).call(this, props)); _this.state = _objectSpread2({ query: props.query, - chartType: 'line' + chartType: 'line', + orderMembers: [] }, props.vizState); + _this.shouldApplyHeuristicOrder = false; + _this.requestId = 0; return _this; } @@ -343,21 +448,26 @@ function (_React$Component) { var _componentDidMount = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee() { - var meta; + var query, meta; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - _context.next = 2; + query = this.state.query; + _context.next = 3; return this.cubejsApi().meta(); - case 2: + case 3: meta = _context.sent; this.setState({ - meta: meta + meta: meta, + orderMembers: QueryBuilder.getOrderMembers({ + meta: meta, + query: query + }) }); - case 4: + case 5: case "end": return _context.stop(); } @@ -371,25 +481,6 @@ function (_React$Component) { return componentDidMount; }() - }, { - key: "componentDidUpdate", - value: function componentDidUpdate(prevProps) { - var _this$props = this.props, - query = _this$props.query, - vizState = _this$props.vizState; - - if (!ramda.equals(prevProps.query, query)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState({ - query: query - }); - } - - if (!ramda.equals(prevProps.vizState, vizState)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState(vizState); - } - } }, { key: "cubejsApi", value: function cubejsApi() { @@ -451,28 +542,11 @@ function (_React$Component) { }; }; - var granularities = [{ - name: undefined, - title: 'w/o grouping' - }, { - name: 'hour', - title: 'Hour' - }, { - name: 'day', - title: 'Day' - }, { - name: 'week', - title: 'Week' - }, { - name: 'month', - title: 'Month' - }, { - name: 'year', - title: 'Year' - }]; var _this$state = this.state, meta = _this$state.meta, query = _this$state.query, + _this$state$orderMemb = _this$state.orderMembers, + orderMembers = _this$state$orderMemb === void 0 ? [] : _this$state$orderMemb, chartType = _this$state.chartType; return _objectSpread2({ meta: meta, @@ -480,29 +554,14 @@ function (_React$Component) { validatedQuery: this.validatedQuery(), isQueryPresent: this.isQueryPresent(), chartType: chartType, - measures: (meta && query.measures || []).map(function (m, i) { - return _objectSpread2({ - index: i - }, meta.resolveMember(m, 'measures')); - }), - dimensions: (meta && query.dimensions || []).map(function (m, i) { - return _objectSpread2({ - index: i - }, meta.resolveMember(m, 'dimensions')); - }), + measures: QueryBuilder.resolveMember('measures', this.state), + dimensions: QueryBuilder.resolveMember('dimensions', this.state), + timeDimensions: QueryBuilder.resolveMember('timeDimensions', this.state), segments: (meta && query.segments || []).map(function (m, i) { return _objectSpread2({ index: i }, meta.resolveMember(m, 'segments')); }), - timeDimensions: (meta && query.timeDimensions || []).map(function (m, i) { - return _objectSpread2({}, m, { - dimension: _objectSpread2({}, meta.resolveMember(m.dimension, 'dimensions'), { - granularities: granularities - }), - index: i - }); - }), filters: (meta && query.filters || []).map(function (m, i) { return _objectSpread2({}, m, { dimension: meta.resolveMember(m.dimension, ['dimensions', 'measures']), @@ -510,6 +569,7 @@ function (_React$Component) { index: i }); }), + orderMembers: orderMembers, availableMeasures: meta && meta.membersForQuery(query, 'measures') || [], availableDimensions: meta && meta.membersForQuery(query, 'dimensions') || [], availableTimeDimensions: (meta && meta.membersForQuery(query, 'dimensions') || []).filter(function (m) { @@ -525,6 +585,33 @@ function (_React$Component) { return _this2.updateVizState({ chartType: newChartType }); + }, + updateOrder: { + set: function set(memberId) { + var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'asc'; + + _this2.updateVizState({ + orderMembers: orderMembers.map(function (orderMember) { + return _objectSpread2({}, orderMember, { + order: orderMember.id === memberId ? order : orderMember.order + }); + }) + }); + }, + update: function update(order) { + _this2.updateQuery({ + order: order + }); + }, + reorder: function reorder$$1(sourceIndex, destinationIndex) { + if (sourceIndex == null || destinationIndex == null) { + return; + } + + _this2.updateVizState({ + orderMembers: reorder(orderMembers, sourceIndex, destinationIndex) + }); + } } }, queryRendererProps); } @@ -538,26 +625,113 @@ function (_React$Component) { } }, { key: "updateVizState", - value: function updateVizState(state) { - var _this$props2 = this.props, - setQuery = _this$props2.setQuery, - setVizState = _this$props2.setVizState; - var finalState = this.applyStateChangeHeuristics(state); - this.setState(finalState); - finalState = _objectSpread2({}, this.state, {}, finalState); - - if (setQuery) { - setQuery(finalState.query); - } + value: function () { + var _updateVizState = _asyncToGenerator( + /*#__PURE__*/ + _regeneratorRuntime.mark(function _callee2(state) { + var _this$props, setQuery, setVizState, stateQuery, finalState, _ref2, _, query, currentRequestId, _ref3, sqlQuery, updatedOrderMembers, currentOrderMemberIds, currentOrderMembers, nextOrder, _finalState, _meta, toSet; - if (setVizState) { - var _finalState = finalState, - meta = _finalState.meta, - toSet = _objectWithoutProperties(_finalState, ["meta"]); + return _regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _this$props = this.props, setQuery = _this$props.setQuery, setVizState = _this$props.setVizState; + stateQuery = this.state.query; + finalState = this.applyStateChangeHeuristics(state); + _ref2 = finalState.query || {}, _ = _ref2.order, query = _objectWithoutProperties(_ref2, ["order"]); + + if (!(this.shouldApplyHeuristicOrder && QueryRenderer.isQueryPresent(query))) { + _context2.next = 19; + break; + } + + this.shouldApplyHeuristicOrder = false; + _context2.prev = 6; + currentRequestId = ++this.requestId; + _context2.next = 10; + return this.cubejsApi().sql(query); + + case 10: + _ref3 = _context2.sent; + sqlQuery = _ref3.sqlQuery; + + if (!(this.requestId !== currentRequestId)) { + _context2.next = 14; + break; + } + + return _context2.abrupt("return"); + + case 14: + finalState = _objectSpread2({}, finalState, { + query: _objectSpread2({}, finalState.query, { + order: sqlQuery.sql.order + }) + }); // eslint-disable-next-line + + _context2.next = 19; + break; + + case 17: + _context2.prev = 17; + _context2.t0 = _context2["catch"](6); + + case 19: + updatedOrderMembers = ramda.indexBy(ramda.prop('id'), QueryBuilder.getOrderMembers(_objectSpread2({}, this.state, {}, finalState))); + currentOrderMemberIds = (finalState.orderMembers || []).map(function (_ref4) { + var id = _ref4.id; + return id; + }); + currentOrderMembers = (finalState.orderMembers || []).filter(function (_ref5) { + var id = _ref5.id; + return Boolean(updatedOrderMembers[id]); + }); + Object.entries(updatedOrderMembers).forEach(function (_ref6) { + var _ref7 = _slicedToArray(_ref6, 2), + id = _ref7[0], + orderMember = _ref7[1]; - setVizState(toSet); + if (!currentOrderMemberIds.includes(id)) { + currentOrderMembers.push(orderMember); + } + }); + nextOrder = Object.fromEntries(currentOrderMembers.map(function (_ref8) { + var id = _ref8.id, + order = _ref8.order; + return order !== 'none' ? [id, order] : false; + }).filter(Boolean)); + finalState = _objectSpread2({}, finalState, { + query: _objectSpread2({}, stateQuery, {}, query, { + order: nextOrder + }), + orderMembers: currentOrderMembers + }); + this.setState(finalState); + finalState = _objectSpread2({}, this.state, {}, finalState); + + if (setQuery) { + setQuery(finalState.query); + } + + if (setVizState) { + _finalState = finalState, _meta = _finalState.meta, toSet = _objectWithoutProperties(_finalState, ["meta"]); + setVizState(toSet); + } + + case 29: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[6, 17]]); + })); + + function updateVizState(_x) { + return _updateVizState.apply(this, arguments); } - } + + return updateVizState; + }() }, { key: "validatedQuery", value: function validatedQuery() { @@ -579,7 +753,7 @@ function (_React$Component) { if (newState.query) { var oldQuery = query; var newQuery = newState.query; - var meta = this.state.meta; + var _meta2 = this.state.meta; if ((oldQuery.timeDimensions || []).length === 1 && (newQuery.timeDimensions || []).length === 1 && newQuery.timeDimensions[0].granularity && oldQuery.timeDimensions[0].granularity !== newQuery.timeDimensions[0].granularity) { newState = _objectSpread2({}, newState, { @@ -588,13 +762,15 @@ function (_React$Component) { } if ((oldQuery.measures || []).length === 0 && (newQuery.measures || []).length > 0 || (oldQuery.measures || []).length === 1 && (newQuery.measures || []).length === 1 && oldQuery.measures[0] !== newQuery.measures[0]) { - var defaultTimeDimension = meta.defaultTimeDimensionNameFor(newQuery.measures[0]); + var defaultTimeDimension = _meta2.defaultTimeDimensionNameFor(newQuery.measures[0]); + newQuery = _objectSpread2({}, newQuery, { timeDimensions: defaultTimeDimension ? [{ dimension: defaultTimeDimension, granularity: defaultGranularity }] : [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: defaultTimeDimension ? 'line' : 'number' @@ -609,6 +785,7 @@ function (_React$Component) { }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: 'table' @@ -623,6 +800,7 @@ function (_React$Component) { }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, chartType: (newQuery.timeDimensions || []).length ? 'line' : 'number' @@ -634,6 +812,7 @@ function (_React$Component) { timeDimensions: [], filters: [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread2({}, newState, { query: newQuery, sessionGranularity: null @@ -678,9 +857,9 @@ function (_React$Component) { }, { key: "applyStateChangeHeuristics", value: function applyStateChangeHeuristics(newState) { - var _this$props3 = this.props, - stateChangeHeuristics = _this$props3.stateChangeHeuristics, - disableHeuristics = _this$props3.disableHeuristics; + var _this$props2 = this.props, + stateChangeHeuristics = _this$props2.stateChangeHeuristics, + disableHeuristics = _this$props2.disableHeuristics; if (disableHeuristics) { return newState; @@ -693,10 +872,10 @@ function (_React$Component) { value: function render() { var _this3 = this; - var _this$props4 = this.props, - cubejsApi = _this$props4.cubejsApi, - _render = _this$props4.render, - wrapWithQueryRenderer = _this$props4.wrapWithQueryRenderer; + var _this$props3 = this.props, + cubejsApi = _this$props3.cubejsApi, + _render = _this$props3.render, + wrapWithQueryRenderer = _this$props3.wrapWithQueryRenderer; if (wrapWithQueryRenderer) { return React__default.createElement(QueryRenderer, { @@ -773,35 +952,35 @@ function useDeepCompareMemoize(value) { var useCubeQuery = (function (query) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var mutexRef = React.useRef({}); - var _useState = React.useState({}), - _useState2 = _slicedToArray(_useState, 1), - mutexObj = _useState2[0]; + var _useState = React.useState(null), + _useState2 = _slicedToArray(_useState, 2), + currentQuery = _useState2[0], + setCurrentQuery = _useState2[1]; - var _useState3 = React.useState(null), + var _useState3 = React.useState(false), _useState4 = _slicedToArray(_useState3, 2), - currentQuery = _useState4[0], - setCurrentQuery = _useState4[1]; + isLoading = _useState4[0], + setLoading = _useState4[1]; - var _useState5 = React.useState(false), + var _useState5 = React.useState(null), _useState6 = _slicedToArray(_useState5, 2), - isLoading = _useState6[0], - setLoading = _useState6[1]; + resultSet = _useState6[0], + setResultSet = _useState6[1]; var _useState7 = React.useState(null), _useState8 = _slicedToArray(_useState7, 2), - resultSet = _useState8[0], - setResultSet = _useState8[1]; - - var _useState9 = React.useState(null), - _useState10 = _slicedToArray(_useState9, 2), - error = _useState10[0], - setError = _useState10[1]; + error = _useState8[0], + setError = _useState8[1]; var context = React.useContext(CubeContext); - var resetResultSetOnChange = options.resetResultSetOnChange; var subscribeRequest = null; React.useEffect(function () { + var _options$skip = options.skip, + skip = _options$skip === void 0 ? false : _options$skip, + resetResultSetOnChange = options.resetResultSetOnChange; + function loadQuery() { return _loadQuery.apply(this, arguments); } @@ -810,17 +989,19 @@ var useCubeQuery = (function (query) { _loadQuery = _asyncToGenerator( /*#__PURE__*/ _regeneratorRuntime.mark(function _callee() { - var cubejsApi; + var hasOrderChanged, cubejsApi; return _regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - if (!(query && isQueryPresent(query))) { - _context.next = 25; + if (!(!skip && query && isQueryPresent(query))) { + _context.next = 26; break; } - if (!ramda.equals(currentQuery, query)) { + hasOrderChanged = !ramda.equals(Object.keys(currentQuery && currentQuery.order || {}), Object.keys(query.order || {})); + + if (hasOrderChanged || !ramda.equals(currentQuery, query)) { if (resetResultSetOnChange == null || resetResultSetOnChange) { setResultSet(null); } @@ -830,71 +1011,71 @@ var useCubeQuery = (function (query) { } setLoading(true); - _context.prev = 3; + _context.prev = 4; if (!subscribeRequest) { - _context.next = 8; + _context.next = 9; break; } - _context.next = 7; + _context.next = 8; return subscribeRequest.unsubscribe(); - case 7: + case 8: subscribeRequest = null; - case 8: + case 9: cubejsApi = options.cubejsApi || context && context.cubejsApi; if (!options.subscribe) { - _context.next = 13; + _context.next = 14; break; } subscribeRequest = cubejsApi.subscribe(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }, function (e, result) { - setLoading(false); - if (e) { setError(e); } else { setResultSet(result); } + + setLoading(false); }); - _context.next = 19; + _context.next = 20; break; - case 13: + case 14: _context.t0 = setResultSet; - _context.next = 16; + _context.next = 17; return cubejsApi.load(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }); - case 16: + case 17: _context.t1 = _context.sent; (0, _context.t0)(_context.t1); setLoading(false); - case 19: - _context.next = 25; + case 20: + _context.next = 26; break; - case 21: - _context.prev = 21; - _context.t2 = _context["catch"](3); + case 22: + _context.prev = 22; + _context.t2 = _context["catch"](4); setError(_context.t2); setLoading(false); - case 25: + case 26: case "end": return _context.stop(); } } - }, _callee, null, [[3, 21]]); + }, _callee, null, [[4, 22]]); })); return _loadQuery.apply(this, arguments); } @@ -906,7 +1087,7 @@ var useCubeQuery = (function (query) { subscribeRequest = null; } }; - }, useDeepCompareMemoize([query, options, context])); + }, useDeepCompareMemoize([query, Object.keys(query && query.order || {}), options, context])); return { isLoading: isLoading, resultSet: resultSet, diff --git a/packages/cubejs-client-react/dist/cubejs-client-react.umd.js b/packages/cubejs-client-react/dist/cubejs-client-react.umd.js index 3633e7621ba73..bfa8442c97756 100644 --- a/packages/cubejs-client-react/dist/cubejs-client-react.umd.js +++ b/packages/cubejs-client-react/dist/cubejs-client-react.umd.js @@ -2182,10 +2182,26 @@ return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); } + function _toConsumableArray(arr) { + return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); + } + + function _arrayWithoutHoles(arr) { + if (Array.isArray(arr)) { + for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) arr2[i] = arr[i]; + + return arr2; + } + } + function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } + function _iterableToArray(iter) { + if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); + } + function _iterableToArrayLimit(arr, i) { var _arr = []; var _n = true; @@ -2212,6 +2228,10 @@ return _arr; } + function _nonIterableSpread() { + throw new TypeError("Invalid attempt to spread non-iterable instance"); + } + function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } @@ -8370,14 +8390,6 @@ } }); - // `Symbol.asyncIterator` well-known symbol - // https://tc39.github.io/ecma262/#sec-symbol.asynciterator - defineWellKnownSymbol('asyncIterator'); - - // `Symbol.toStringTag` well-known symbol - // https://tc39.github.io/ecma262/#sec-symbol.tostringtag - defineWellKnownSymbol('toStringTag'); - var $forEach$1 = arrayIteration.forEach; @@ -8397,6 +8409,123 @@ forEach: arrayForEach }); + var $includes = arrayIncludes.includes; + + + + var USES_TO_LENGTH$8 = 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$8 }, { + includes: function includes(el /* , fromIndex = 0 */) { + return $includes(this, el, arguments.length > 1 ? arguments[1] : undefined); + } + }); + + // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables + addToUnscopables('includes'); + + var propertyIsEnumerable = objectPropertyIsEnumerable.f; + + // `Object.{ entries, values }` methods implementation + var createMethod$6 = function (TO_ENTRIES) { + return function (it) { + var O = toIndexedObject(it); + var keys = objectKeys(O); + var length = keys.length; + var i = 0; + var result = []; + var key; + while (length > i) { + key = keys[i++]; + if (!descriptors || propertyIsEnumerable.call(O, key)) { + result.push(TO_ENTRIES ? [key, O[key]] : O[key]); + } + } + return result; + }; + }; + + var objectToArray = { + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + entries: createMethod$6(true), + // `Object.values` method + // https://tc39.github.io/ecma262/#sec-object.values + values: createMethod$6(false) + }; + + var $entries = objectToArray.entries; + + // `Object.entries` method + // https://tc39.github.io/ecma262/#sec-object.entries + _export({ target: 'Object', stat: true }, { + entries: function entries(O) { + return $entries(O); + } + }); + + // `Object.fromEntries` method + // https://github.com/tc39/proposal-object-from-entries + _export({ target: 'Object', stat: true }, { + fromEntries: function fromEntries(iterable) { + var obj = {}; + iterate_1(iterable, function (k, v) { + createProperty(obj, k, v); + }, undefined, true); + return obj; + } + }); + + var notARegexp = function (it) { + if (isRegexp(it)) { + throw TypeError("The method doesn't accept regular expressions"); + } return it; + }; + + var MATCH$2 = wellKnownSymbol('match'); + + var correctIsRegexpLogic = function (METHOD_NAME) { + var regexp = /./; + try { + '/./'[METHOD_NAME](regexp); + } catch (e) { + try { + regexp[MATCH$2] = false; + return '/./'[METHOD_NAME](regexp); + } catch (f) { /* empty */ } + } return false; + }; + + // `String.prototype.includes` method + // https://tc39.github.io/ecma262/#sec-string.prototype.includes + _export({ target: 'String', proto: true, forced: !correctIsRegexpLogic('includes') }, { + includes: function includes(searchString /* , position = 0 */) { + return !!~String(requireObjectCoercible(this)) + .indexOf(notARegexp(searchString), arguments.length > 1 ? arguments[1] : undefined); + } + }); + + 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; + } + } + + // `Symbol.asyncIterator` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.asynciterator + defineWellKnownSymbol('asyncIterator'); + + // `Symbol.toStringTag` well-known symbol + // https://tc39.github.io/ecma262/#sec-symbol.tostringtag + defineWellKnownSymbol('toStringTag'); + // JSON[@@toStringTag] property // https://tc39.github.io/ecma262/#sec-json-@@tostringtag setToStringTag(global_1.JSON, 'JSON', true); @@ -8427,25 +8556,14 @@ setPrototypeOf: objectSetPrototypeOf }); - 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; - } - } - - var runtime = createCommonjsModule(function (module) { + var runtime_1 = createCommonjsModule(function (module) { /** * Copyright (c) 2014-present, Facebook, Inc. * * This source code is licensed under the MIT license found in the * LICENSE file in the root directory of this source tree. */ - !function (global) { + var runtime = function (exports) { var Op = Object.prototype; var hasOwn = Op.hasOwnProperty; @@ -8455,23 +8573,6 @@ var iteratorSymbol = $Symbol.iterator || "@@iterator"; var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator"; var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag"; - var runtime = global.regeneratorRuntime; - - if (runtime) { - { - // If regeneratorRuntime is defined globally and we're in a module, - // make the exports object identical to regeneratorRuntime. - module.exports = runtime; - } // Don't bother evaluating the rest of this file if the runtime was - // already defined globally. - - - return; - } // Define the runtime globally (as expected by generated code) as either - // module.exports (if we're in a module) or a new, empty object. - - - runtime = global.regeneratorRuntime = module.exports; function wrap(innerFn, outerFn, self, tryLocsList) { // If outerFn provided and outerFn.prototype is a Generator, then outerFn.prototype instanceof Generator. @@ -8484,7 +8585,7 @@ return generator; } - runtime.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion + exports.wrap = wrap; // Try/catch helper to minimize deoptimizations. Returns a completion // record like context.tryEntries[i].completion. This interface could // have been (and was previously) designed to take a closure to be // invoked without arguments, but in all the cases we care about we @@ -8557,14 +8658,14 @@ }); } - runtime.isGeneratorFunction = function (genFun) { + exports.isGeneratorFunction = function (genFun) { var ctor = typeof genFun === "function" && genFun.constructor; return ctor ? ctor === GeneratorFunction || // For the native GeneratorFunction constructor, the best we can // do is to check its .name property. (ctor.displayName || ctor.name) === "GeneratorFunction" : false; }; - runtime.mark = function (genFun) { + exports.mark = function (genFun) { if (Object.setPrototypeOf) { Object.setPrototypeOf(genFun, GeneratorFunctionPrototype); } else { @@ -8583,13 +8684,13 @@ // meant to be awaited. - runtime.awrap = function (arg) { + exports.awrap = function (arg) { return { __await: arg }; }; - function AsyncIterator(generator) { + function AsyncIterator(generator, PromiseImpl) { function invoke(method, arg, resolve, reject) { var record = tryCatch(generator[method], generator, arg); @@ -8600,14 +8701,14 @@ var value = result.value; if (value && _typeof(value) === "object" && hasOwn.call(value, "__await")) { - return Promise.resolve(value.__await).then(function (value) { + return PromiseImpl.resolve(value.__await).then(function (value) { invoke("next", value, resolve, reject); }, function (err) { invoke("throw", err, resolve, reject); }); } - return Promise.resolve(value).then(function (unwrapped) { + return PromiseImpl.resolve(value).then(function (unwrapped) { // When a yielded Promise is resolved, its final value becomes // the .value of the Promise<{value,done}> result for the // current iteration. @@ -8625,7 +8726,7 @@ function enqueue(method, arg) { function callInvokeWithMethodAndArg() { - return new Promise(function (resolve, reject) { + return new PromiseImpl(function (resolve, reject) { invoke(method, arg, resolve, reject); }); } @@ -8658,13 +8759,14 @@ return this; }; - runtime.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of + exports.AsyncIterator = AsyncIterator; // Note that simple async functions are implemented on top of // AsyncIterator objects; they just return a Promise for the value of // the final result produced by the iterator. - runtime.async = function (innerFn, outerFn, self, tryLocsList) { - var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList)); - return runtime.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. + exports.async = function (innerFn, outerFn, self, tryLocsList, PromiseImpl) { + if (PromiseImpl === void 0) PromiseImpl = Promise; + var iter = new AsyncIterator(wrap(innerFn, outerFn, self, tryLocsList), PromiseImpl); + return exports.isGeneratorFunction(outerFn) ? iter // If outerFn is a generator, return the full iterator. : iter.next().then(function (result) { return result.done ? result.value : iter.next(); }); @@ -8757,6 +8859,7 @@ context.delegate = null; if (context.method === "throw") { + // Note: ["return"] must be used for ES3 parsing compatibility. if (delegate.iterator["return"]) { // If the delegate iterator has a return method, give it a // chance to clean up. @@ -8875,7 +8978,7 @@ this.reset(true); } - runtime.keys = function (object) { + exports.keys = function (object) { var keys = []; for (var key in object) { @@ -8942,7 +9045,7 @@ }; } - runtime.values = values; + exports.values = values; function doneResult() { return { @@ -9133,20 +9236,133 @@ return ContinueSentinel; } - }; - }( // In sloppy mode, unbound `this` refers to the global object, fallback to - // Function constructor if we're in global strict mode. That is sadly a form - // of indirect eval which violates Content Security Policy. - function () { - return this || (typeof self === "undefined" ? "undefined" : _typeof(self)) === "object" && self; - }() || Function("return this")()); + }; // Regardless of whether this script is executing as a CommonJS module + // or not, return the runtime object so that we can declare the variable + // regeneratorRuntime in the outer scope, which allows this module to be + // injected easily by `bin/regenerator --include-runtime script.js`. + + return exports; + }( // If this script is executing as a CommonJS module, use module.exports + // as the regeneratorRuntime namespace. Otherwise create a new empty + // object. Either way, the resulting object will be used to initialize + // the regeneratorRuntime variable at the top of this file. + module.exports); + + try { + regeneratorRuntime = runtime; + } catch (accidentalStrictMode) { + // This module should not be running in strict mode, so the above + // assignment should always work unless something is misconfigured. Just + // in case runtime.js accidentally runs in strict mode, we can escape + // strict mode using a global Function call. This could conceivably fail + // if a Content Security Policy forbids using Function, but in that case + // the proper solution is to fix the accidental strict mode problem. If + // you've misconfigured your bundler to force strict mode and applied a + // CSP to forbid Function, and you're not willing to fix either of those + // problems, please detail your unique predicament in a GitHub issue. + Function("r", "regeneratorRuntime = r")(runtime); + } }); + function reorder(list, sourceIndex, destinationIndex) { + var result = _toConsumableArray(list); + + var _result$splice = result.splice(sourceIndex, 1), + _result$splice2 = _slicedToArray(_result$splice, 1), + removed = _result$splice2[0]; + + result.splice(destinationIndex, 0, removed); + return result; + } + + var granularities = [{ + name: undefined, + title: 'w/o grouping' + }, { + name: 'hour', + title: 'Hour' + }, { + name: 'day', + title: 'Day' + }, { + name: 'week', + title: 'Week' + }, { + name: 'month', + title: 'Month' + }, { + name: 'year', + title: 'Year' + }]; + var QueryBuilder = /*#__PURE__*/ function (_React$Component) { _inherits(QueryBuilder, _React$Component); + _createClass(QueryBuilder, null, [{ + key: "getDerivedStateFromProps", + value: function getDerivedStateFromProps(props$$1, state) { + var nextState = _objectSpread({}, state, {}, props$$1.vizState || {}); + + return _objectSpread({}, nextState, { + query: _objectSpread({}, nextState.query, {}, props$$1.query || {}) + }); + } + }, { + key: "resolveMember", + value: function resolveMember(type$$1, _ref) { + var meta = _ref.meta, + query = _ref.query; + + if (!meta) { + return []; + } + + if (type$$1 === 'timeDimensions') { + return (query.timeDimensions || []).map(function (m, index) { + return _objectSpread({}, m, { + dimension: _objectSpread({}, meta.resolveMember(m.dimension, 'dimensions'), { + granularities: granularities + }), + index: index + }); + }); + } + + return (query[type$$1] || []).map(function (m, index) { + return _objectSpread({ + index: index + }, meta.resolveMember(m, type$$1)); + }); + } + }, { + key: "getOrderMembers", + value: function getOrderMembers(state) { + var query = state.query, + meta = state.meta; + + if (!meta) { + return []; + } + + var toOrderMember = function toOrderMember(member) { + return { + id: member.name, + title: member.title + }; + }; + + return uniqBy(prop('id'), [].concat(_toConsumableArray(QueryBuilder.resolveMember('measures', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('dimensions', state).map(toOrderMember)), _toConsumableArray(QueryBuilder.resolveMember('timeDimensions', state).map(function (td) { + return toOrderMember(td.dimension); + }))).map(function (member) { + return _objectSpread({}, member, { + order: query.order && query.order[member.id] || 'none' + }); + })); + } + }]); + function QueryBuilder(props$$1) { var _this; @@ -9155,8 +9371,11 @@ _this = _possibleConstructorReturn(this, _getPrototypeOf(QueryBuilder).call(this, props$$1)); _this.state = _objectSpread({ query: props$$1.query, - chartType: 'line' + chartType: 'line', + orderMembers: [] }, props$$1.vizState); + _this.shouldApplyHeuristicOrder = false; + _this.requestId = 0; return _this; } @@ -9166,21 +9385,26 @@ var _componentDidMount = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee() { - var meta; + var query, meta; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - _context.next = 2; + query = this.state.query; + _context.next = 3; return this.cubejsApi().meta(); - case 2: + case 3: meta = _context.sent; this.setState({ - meta: meta + meta: meta, + orderMembers: QueryBuilder.getOrderMembers({ + meta: meta, + query: query + }) }); - case 4: + case 5: case "end": return _context.stop(); } @@ -9194,25 +9418,6 @@ return componentDidMount; }() - }, { - key: "componentDidUpdate", - value: function componentDidUpdate(prevProps) { - var _this$props = this.props, - query = _this$props.query, - vizState = _this$props.vizState; - - if (!equals(prevProps.query, query)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState({ - query: query - }); - } - - if (!equals(prevProps.vizState, vizState)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState(vizState); - } - } }, { key: "cubejsApi", value: function cubejsApi() { @@ -9274,28 +9479,11 @@ }; }; - var granularities = [{ - name: undefined, - title: 'w/o grouping' - }, { - name: 'hour', - title: 'Hour' - }, { - name: 'day', - title: 'Day' - }, { - name: 'week', - title: 'Week' - }, { - name: 'month', - title: 'Month' - }, { - name: 'year', - title: 'Year' - }]; var _this$state = this.state, meta = _this$state.meta, query = _this$state.query, + _this$state$orderMemb = _this$state.orderMembers, + orderMembers = _this$state$orderMemb === void 0 ? [] : _this$state$orderMemb, chartType = _this$state.chartType; return _objectSpread({ meta: meta, @@ -9303,29 +9491,14 @@ validatedQuery: this.validatedQuery(), isQueryPresent: this.isQueryPresent(), chartType: chartType, - measures: (meta && query.measures || []).map(function (m, i) { - return _objectSpread({ - index: i - }, meta.resolveMember(m, 'measures')); - }), - dimensions: (meta && query.dimensions || []).map(function (m, i) { - return _objectSpread({ - index: i - }, meta.resolveMember(m, 'dimensions')); - }), + measures: QueryBuilder.resolveMember('measures', this.state), + dimensions: QueryBuilder.resolveMember('dimensions', this.state), + timeDimensions: QueryBuilder.resolveMember('timeDimensions', this.state), segments: (meta && query.segments || []).map(function (m, i) { return _objectSpread({ index: i }, meta.resolveMember(m, 'segments')); }), - timeDimensions: (meta && query.timeDimensions || []).map(function (m, i) { - return _objectSpread({}, m, { - dimension: _objectSpread({}, meta.resolveMember(m.dimension, 'dimensions'), { - granularities: granularities - }), - index: i - }); - }), filters: (meta && query.filters || []).map(function (m, i) { return _objectSpread({}, m, { dimension: meta.resolveMember(m.dimension, ['dimensions', 'measures']), @@ -9333,6 +9506,7 @@ index: i }); }), + orderMembers: orderMembers, availableMeasures: meta && meta.membersForQuery(query, 'measures') || [], availableDimensions: meta && meta.membersForQuery(query, 'dimensions') || [], availableTimeDimensions: (meta && meta.membersForQuery(query, 'dimensions') || []).filter(function (m) { @@ -9348,6 +9522,33 @@ return _this2.updateVizState({ chartType: newChartType }); + }, + updateOrder: { + set: function set(memberId) { + var order = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 'asc'; + + _this2.updateVizState({ + orderMembers: orderMembers.map(function (orderMember) { + return _objectSpread({}, orderMember, { + order: orderMember.id === memberId ? order : orderMember.order + }); + }) + }); + }, + update: function update$$1(order) { + _this2.updateQuery({ + order: order + }); + }, + reorder: function reorder$$1(sourceIndex, destinationIndex) { + if (sourceIndex == null || destinationIndex == null) { + return; + } + + _this2.updateVizState({ + orderMembers: reorder(orderMembers, sourceIndex, destinationIndex) + }); + } } }, queryRendererProps); } @@ -9361,26 +9562,113 @@ } }, { key: "updateVizState", - value: function updateVizState(state) { - var _this$props2 = this.props, - setQuery = _this$props2.setQuery, - setVizState = _this$props2.setVizState; - var finalState = this.applyStateChangeHeuristics(state); - this.setState(finalState); - finalState = _objectSpread({}, this.state, {}, finalState); - - if (setQuery) { - setQuery(finalState.query); - } + value: function () { + var _updateVizState = _asyncToGenerator( + /*#__PURE__*/ + regeneratorRuntime.mark(function _callee2(state) { + var _this$props, setQuery, setVizState, stateQuery, finalState, _ref2, _, query, currentRequestId, _ref3, sqlQuery, updatedOrderMembers, currentOrderMemberIds, currentOrderMembers, nextOrder, _finalState, _meta, toSet; + + return regeneratorRuntime.wrap(function _callee2$(_context2) { + while (1) { + switch (_context2.prev = _context2.next) { + case 0: + _this$props = this.props, setQuery = _this$props.setQuery, setVizState = _this$props.setVizState; + stateQuery = this.state.query; + finalState = this.applyStateChangeHeuristics(state); + _ref2 = finalState.query || {}, _ = _ref2.order, query = _objectWithoutProperties(_ref2, ["order"]); + + if (!(this.shouldApplyHeuristicOrder && QueryRenderer.isQueryPresent(query))) { + _context2.next = 19; + break; + } + + this.shouldApplyHeuristicOrder = false; + _context2.prev = 6; + currentRequestId = ++this.requestId; + _context2.next = 10; + return this.cubejsApi().sql(query); + + case 10: + _ref3 = _context2.sent; + sqlQuery = _ref3.sqlQuery; + + if (!(this.requestId !== currentRequestId)) { + _context2.next = 14; + break; + } + + return _context2.abrupt("return"); + + case 14: + finalState = _objectSpread({}, finalState, { + query: _objectSpread({}, finalState.query, { + order: sqlQuery.sql.order + }) + }); // eslint-disable-next-line + + _context2.next = 19; + break; + + case 17: + _context2.prev = 17; + _context2.t0 = _context2["catch"](6); + + case 19: + updatedOrderMembers = indexBy(prop('id'), QueryBuilder.getOrderMembers(_objectSpread({}, this.state, {}, finalState))); + currentOrderMemberIds = (finalState.orderMembers || []).map(function (_ref4) { + var id = _ref4.id; + return id; + }); + currentOrderMembers = (finalState.orderMembers || []).filter(function (_ref5) { + var id = _ref5.id; + return Boolean(updatedOrderMembers[id]); + }); + Object.entries(updatedOrderMembers).forEach(function (_ref6) { + var _ref7 = _slicedToArray(_ref6, 2), + id = _ref7[0], + orderMember = _ref7[1]; + + if (!currentOrderMemberIds.includes(id)) { + currentOrderMembers.push(orderMember); + } + }); + nextOrder = Object.fromEntries(currentOrderMembers.map(function (_ref8) { + var id = _ref8.id, + order = _ref8.order; + return order !== 'none' ? [id, order] : false; + }).filter(Boolean)); + finalState = _objectSpread({}, finalState, { + query: _objectSpread({}, stateQuery, {}, query, { + order: nextOrder + }), + orderMembers: currentOrderMembers + }); + this.setState(finalState); + finalState = _objectSpread({}, this.state, {}, finalState); + + if (setQuery) { + setQuery(finalState.query); + } + + if (setVizState) { + _finalState = finalState, _meta = _finalState.meta, toSet = _objectWithoutProperties(_finalState, ["meta"]); + setVizState(toSet); + } - if (setVizState) { - var _finalState = finalState, - meta = _finalState.meta, - toSet = _objectWithoutProperties(_finalState, ["meta"]); + case 29: + case "end": + return _context2.stop(); + } + } + }, _callee2, this, [[6, 17]]); + })); - setVizState(toSet); + function updateVizState(_x) { + return _updateVizState.apply(this, arguments); } - } + + return updateVizState; + }() }, { key: "validatedQuery", value: function validatedQuery() { @@ -9402,7 +9690,7 @@ if (newState.query) { var oldQuery = query; var newQuery = newState.query; - var meta = this.state.meta; + var _meta2 = this.state.meta; if ((oldQuery.timeDimensions || []).length === 1 && (newQuery.timeDimensions || []).length === 1 && newQuery.timeDimensions[0].granularity && oldQuery.timeDimensions[0].granularity !== newQuery.timeDimensions[0].granularity) { newState = _objectSpread({}, newState, { @@ -9411,13 +9699,15 @@ } if ((oldQuery.measures || []).length === 0 && (newQuery.measures || []).length > 0 || (oldQuery.measures || []).length === 1 && (newQuery.measures || []).length === 1 && oldQuery.measures[0] !== newQuery.measures[0]) { - var defaultTimeDimension = meta.defaultTimeDimensionNameFor(newQuery.measures[0]); + var defaultTimeDimension = _meta2.defaultTimeDimensionNameFor(newQuery.measures[0]); + newQuery = _objectSpread({}, newQuery, { timeDimensions: defaultTimeDimension ? [{ dimension: defaultTimeDimension, granularity: defaultGranularity }] : [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread({}, newState, { query: newQuery, chartType: defaultTimeDimension ? 'line' : 'number' @@ -9432,6 +9722,7 @@ }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread({}, newState, { query: newQuery, chartType: 'table' @@ -9446,6 +9737,7 @@ }); }) }); + this.shouldApplyHeuristicOrder = true; return _objectSpread({}, newState, { query: newQuery, chartType: (newQuery.timeDimensions || []).length ? 'line' : 'number' @@ -9457,6 +9749,7 @@ timeDimensions: [], filters: [] }); + this.shouldApplyHeuristicOrder = true; return _objectSpread({}, newState, { query: newQuery, sessionGranularity: null @@ -9501,9 +9794,9 @@ }, { key: "applyStateChangeHeuristics", value: function applyStateChangeHeuristics(newState) { - var _this$props3 = this.props, - stateChangeHeuristics = _this$props3.stateChangeHeuristics, - disableHeuristics = _this$props3.disableHeuristics; + var _this$props2 = this.props, + stateChangeHeuristics = _this$props2.stateChangeHeuristics, + disableHeuristics = _this$props2.disableHeuristics; if (disableHeuristics) { return newState; @@ -9516,10 +9809,10 @@ value: function render() { var _this3 = this; - var _this$props4 = this.props, - cubejsApi = _this$props4.cubejsApi, - _render = _this$props4.render, - wrapWithQueryRenderer = _this$props4.wrapWithQueryRenderer; + var _this$props3 = this.props, + cubejsApi = _this$props3.cubejsApi, + _render = _this$props3.render, + wrapWithQueryRenderer = _this$props3.wrapWithQueryRenderer; if (wrapWithQueryRenderer) { return React__default.createElement(QueryRenderer, { @@ -9596,35 +9889,35 @@ var useCubeQuery = (function (query) { var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var mutexRef = React.useRef({}); - var _useState = React.useState({}), - _useState2 = _slicedToArray(_useState, 1), - mutexObj = _useState2[0]; + var _useState = React.useState(null), + _useState2 = _slicedToArray(_useState, 2), + currentQuery = _useState2[0], + setCurrentQuery = _useState2[1]; - var _useState3 = React.useState(null), + var _useState3 = React.useState(false), _useState4 = _slicedToArray(_useState3, 2), - currentQuery = _useState4[0], - setCurrentQuery = _useState4[1]; + isLoading = _useState4[0], + setLoading = _useState4[1]; - var _useState5 = React.useState(false), + var _useState5 = React.useState(null), _useState6 = _slicedToArray(_useState5, 2), - isLoading = _useState6[0], - setLoading = _useState6[1]; + resultSet = _useState6[0], + setResultSet = _useState6[1]; var _useState7 = React.useState(null), _useState8 = _slicedToArray(_useState7, 2), - resultSet = _useState8[0], - setResultSet = _useState8[1]; - - var _useState9 = React.useState(null), - _useState10 = _slicedToArray(_useState9, 2), - error = _useState10[0], - setError = _useState10[1]; + error = _useState8[0], + setError = _useState8[1]; var context = React.useContext(CubeContext); - var resetResultSetOnChange = options.resetResultSetOnChange; var subscribeRequest = null; React.useEffect(function () { + var _options$skip = options.skip, + skip = _options$skip === void 0 ? false : _options$skip, + resetResultSetOnChange = options.resetResultSetOnChange; + function loadQuery() { return _loadQuery.apply(this, arguments); } @@ -9633,17 +9926,19 @@ _loadQuery = _asyncToGenerator( /*#__PURE__*/ regeneratorRuntime.mark(function _callee() { - var cubejsApi; + var hasOrderChanged, cubejsApi; return regeneratorRuntime.wrap(function _callee$(_context) { while (1) { switch (_context.prev = _context.next) { case 0: - if (!(query && isQueryPresent(query))) { - _context.next = 25; + if (!(!skip && query && isQueryPresent(query))) { + _context.next = 26; break; } - if (!equals(currentQuery, query)) { + hasOrderChanged = !equals(Object.keys(currentQuery && currentQuery.order || {}), Object.keys(query.order || {})); + + if (hasOrderChanged || !equals(currentQuery, query)) { if (resetResultSetOnChange == null || resetResultSetOnChange) { setResultSet(null); } @@ -9653,71 +9948,71 @@ } setLoading(true); - _context.prev = 3; + _context.prev = 4; if (!subscribeRequest) { - _context.next = 8; + _context.next = 9; break; } - _context.next = 7; + _context.next = 8; return subscribeRequest.unsubscribe(); - case 7: + case 8: subscribeRequest = null; - case 8: + case 9: cubejsApi = options.cubejsApi || context && context.cubejsApi; if (!options.subscribe) { - _context.next = 13; + _context.next = 14; break; } subscribeRequest = cubejsApi.subscribe(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }, function (e, result) { - setLoading(false); - if (e) { setError(e); } else { setResultSet(result); } + + setLoading(false); }); - _context.next = 19; + _context.next = 20; break; - case 13: + case 14: _context.t0 = setResultSet; - _context.next = 16; + _context.next = 17; return cubejsApi.load(query, { - mutexObj: mutexObj, + mutexObj: mutexRef.current, mutexKey: 'query' }); - case 16: + case 17: _context.t1 = _context.sent; (0, _context.t0)(_context.t1); setLoading(false); - case 19: - _context.next = 25; + case 20: + _context.next = 26; break; - case 21: - _context.prev = 21; - _context.t2 = _context["catch"](3); + case 22: + _context.prev = 22; + _context.t2 = _context["catch"](4); setError(_context.t2); setLoading(false); - case 25: + case 26: case "end": return _context.stop(); } } - }, _callee, null, [[3, 21]]); + }, _callee, null, [[4, 22]]); })); return _loadQuery.apply(this, arguments); } @@ -9729,7 +10024,7 @@ subscribeRequest = null; } }; - }, useDeepCompareMemoize([query, options, context])); + }, useDeepCompareMemoize([query, Object.keys(query && query.order || {}), options, context])); return { isLoading: isLoading, resultSet: resultSet, diff --git a/packages/cubejs-client-react/src/QueryBuilder.jsx b/packages/cubejs-client-react/src/QueryBuilder.jsx index 96be2b9777ab8..0ef4523bc501e 100644 --- a/packages/cubejs-client-react/src/QueryBuilder.jsx +++ b/packages/cubejs-client-react/src/QueryBuilder.jsx @@ -1,40 +1,112 @@ import React from 'react'; import * as PropTypes from 'prop-types'; -import { equals } from 'ramda'; +import { + prop, uniqBy, indexBy +} from 'ramda'; import QueryRenderer from './QueryRenderer.jsx'; import CubeContext from './CubeContext'; +import { reorder } from './utils'; + +const granularities = [ + { name: undefined, title: 'w/o grouping' }, + { name: 'hour', title: 'Hour' }, + { name: 'day', title: 'Day' }, + { name: 'week', title: 'Week' }, + { name: 'month', title: 'Month' }, + { name: 'year', title: 'Year' } +]; export default class QueryBuilder extends React.Component { + static getDerivedStateFromProps(props, state) { + const nextState = { + ...state, + ...(props.vizState || {}), + }; + + return { + ...nextState, + query: { + ...nextState.query, + ...(props.query || {}) + } + }; + } + + static resolveMember(type, { meta, query }) { + if (!meta) { + return []; + } + + if (type === 'timeDimensions') { + return (query.timeDimensions || []).map((m, index) => ({ + ...m, + dimension: { + ...meta.resolveMember(m.dimension, 'dimensions'), + granularities + }, + index + })); + } + + return (query[type] || []).map((m, index) => ({ + index, + ...meta.resolveMember(m, type) + })); + } + + static getOrderMembers(state) { + const { query, meta } = state; + + if (!meta) { + return []; + } + + const toOrderMember = (member) => ({ + id: member.name, + title: member.title + }); + + return uniqBy( + prop('id'), + [ + ...QueryBuilder.resolveMember('measures', state).map(toOrderMember), + ...QueryBuilder.resolveMember('dimensions', state).map(toOrderMember), + ...QueryBuilder.resolveMember('timeDimensions', state).map((td) => toOrderMember(td.dimension)) + ].map((member) => ({ + ...member, + order: (query.order && query.order[member.id]) || 'none' + })) + ); + } + constructor(props) { super(props); + this.state = { query: props.query, chartType: 'line', + orderMembers: [], ...props.vizState }; + + this.shouldApplyHeuristicOrder = false; + this.requestId = 0; } async componentDidMount() { + const { query } = this.state; const meta = await this.cubejsApi().meta(); - this.setState({ meta }); - } - - componentDidUpdate(prevProps) { - const { query, vizState } = this.props; - if (!equals(prevProps.query, query)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState({ query }); - } - if (!equals(prevProps.vizState, vizState)) { - // eslint-disable-next-line react/no-did-update-set-state - this.setState(vizState); - } + + this.setState({ + meta, + orderMembers: QueryBuilder.getOrderMembers({ meta, query }) + }); } cubejsApi() { const { cubejsApi } = this.props; // eslint-disable-next-line react/destructuring-assignment - return cubejsApi || this.context && this.context.cubejsApi; + return cubejsApi || (this.context && this.context.cubejsApi); } isQueryPresent() { @@ -43,17 +115,18 @@ export default class QueryBuilder extends React.Component { } prepareRenderProps(queryRendererProps) { - const getName = member => member.name; - const toTimeDimension = member => ({ + const getName = (member) => member.name; + const toTimeDimension = (member) => ({ dimension: member.dimension.name, granularity: member.granularity, dateRange: member.dateRange }); - const toFilter = member => ({ + const toFilter = (member) => ({ dimension: member.dimension.name, operator: member.operator, values: member.values }); + const updateMethods = (memberType, toQuery = getName) => ({ add: (member) => { const { query } = this.state; @@ -78,17 +151,10 @@ export default class QueryBuilder extends React.Component { }); } }); - - const granularities = [ - { name: undefined, title: 'w/o grouping' }, - { name: 'hour', title: 'Hour' }, - { name: 'day', title: 'Day' }, - { name: 'week', title: 'Week' }, - { name: 'month', title: 'Month' }, - { name: 'year', title: 'Year' } - ]; - - const { meta, query, chartType } = this.state; + + const { + meta, query, orderMembers = [], chartType + } = this.state; return { meta, @@ -96,31 +162,23 @@ export default class QueryBuilder extends React.Component { validatedQuery: this.validatedQuery(), isQueryPresent: this.isQueryPresent(), chartType, - measures: (meta && query.measures || []) - .map((m, i) => ({ index: i, ...meta.resolveMember(m, 'measures') })), - dimensions: (meta && query.dimensions || []) - .map((m, i) => ({ index: i, ...meta.resolveMember(m, 'dimensions') })), - segments: (meta && query.segments || []) - .map((m, i) => ({ index: i, ...meta.resolveMember(m, 'segments') })), - timeDimensions: (meta && query.timeDimensions || []) - .map((m, i) => ({ - ...m, - dimension: { ...meta.resolveMember(m.dimension, 'dimensions'), granularities }, - index: i - })), - filters: (meta && query.filters || []) - .map((m, i) => ({ - ...m, - dimension: meta.resolveMember(m.dimension, ['dimensions', 'measures']), - operators: meta.filterOperatorsForMember(m.dimension, ['dimensions', 'measures']), - index: i - })), - availableMeasures: meta && meta.membersForQuery(query, 'measures') || [], - availableDimensions: meta && meta.membersForQuery(query, 'dimensions') || [], - availableTimeDimensions: ( - meta && meta.membersForQuery(query, 'dimensions') || [] - ).filter(m => m.type === 'time'), - availableSegments: meta && meta.membersForQuery(query, 'segments') || [], + measures: QueryBuilder.resolveMember('measures', this.state), + dimensions: QueryBuilder.resolveMember('dimensions', this.state), + timeDimensions: QueryBuilder.resolveMember('timeDimensions', this.state), + segments: ((meta && query.segments) || []).map((m, i) => ({ index: i, ...meta.resolveMember(m, 'segments') })), + filters: ((meta && query.filters) || []).map((m, i) => ({ + ...m, + dimension: meta.resolveMember(m.dimension, ['dimensions', 'measures']), + operators: meta.filterOperatorsForMember(m.dimension, ['dimensions', 'measures']), + index: i + })), + orderMembers, + availableMeasures: (meta && meta.membersForQuery(query, 'measures')) || [], + availableDimensions: (meta && meta.membersForQuery(query, 'dimensions')) || [], + availableTimeDimensions: ((meta && meta.membersForQuery(query, 'dimensions')) || []).filter( + (m) => m.type === 'time' + ), + availableSegments: (meta && meta.membersForQuery(query, 'segments')) || [], updateMeasures: updateMethods('measures'), updateDimensions: updateMethods('dimensions'), @@ -128,12 +186,37 @@ export default class QueryBuilder extends React.Component { updateTimeDimensions: updateMethods('timeDimensions', toTimeDimension), updateFilters: updateMethods('filters', toFilter), updateChartType: (newChartType) => this.updateVizState({ chartType: newChartType }), + updateOrder: { + set: (memberId, order = 'asc') => { + this.updateVizState({ + orderMembers: orderMembers.map((orderMember) => ({ + ...orderMember, + order: orderMember.id === memberId ? order : orderMember.order + })) + }); + }, + update: (order) => { + this.updateQuery({ + order + }); + }, + reorder: (sourceIndex, destinationIndex) => { + if (sourceIndex == null || destinationIndex == null) { + return; + } + + this.updateVizState({ + orderMembers: reorder(orderMembers, sourceIndex, destinationIndex) + }); + } + }, ...queryRendererProps }; } updateQuery(queryUpdate) { const { query } = this.state; + this.updateVizState({ query: { ...query, @@ -142,9 +225,59 @@ export default class QueryBuilder extends React.Component { }); } - updateVizState(state) { + async updateVizState(state) { const { setQuery, setVizState } = this.props; + const { query: stateQuery } = this.state; let finalState = this.applyStateChangeHeuristics(state); + const { order: _, ...query } = finalState.query || {}; + + if (this.shouldApplyHeuristicOrder && QueryRenderer.isQueryPresent(query)) { + this.shouldApplyHeuristicOrder = false; + + try { + const currentRequestId = ++this.requestId; + const { sqlQuery } = await this.cubejsApi().sql(query); + + if (this.requestId !== currentRequestId) { + return; + } + + finalState = { + ...finalState, + query: { + ...finalState.query, + order: sqlQuery.sql.order + } + }; + // eslint-disable-next-line + } catch (e) {} + } + + const updatedOrderMembers = indexBy(prop('id'), QueryBuilder.getOrderMembers({ + ...this.state, ...finalState + })); + const currentOrderMemberIds = (finalState.orderMembers || []).map(({ id }) => id); + + const currentOrderMembers = (finalState.orderMembers || []).filter(({ id }) => Boolean(updatedOrderMembers[id])); + + Object.entries(updatedOrderMembers).forEach(([id, orderMember]) => { + if (!currentOrderMemberIds.includes(id)) { + currentOrderMembers.push(orderMember); + } + }); + + const nextOrder = Object.fromEntries(currentOrderMembers.map(({ id, order }) => (order !== 'none' ? [id, order] : false)).filter(Boolean)); + + finalState = { + ...finalState, + query: { + ...stateQuery, + ...query, + order: nextOrder + }, + orderMembers: currentOrderMembers + }; + this.setState(finalState); finalState = { ...this.state, ...finalState }; if (setQuery) { @@ -160,13 +293,14 @@ export default class QueryBuilder extends React.Component { const { query } = this.state; return { ...query, - filters: (query.filters || []).filter(f => f.operator) + filters: (query.filters || []).filter((f) => f.operator) }; } defaultHeuristics(newState) { const { query, sessionGranularity } = this.state; const defaultGranularity = sessionGranularity || 'day'; + if (newState.query) { const oldQuery = query; let newQuery = newState.query; @@ -186,21 +320,26 @@ export default class QueryBuilder extends React.Component { } if ( - (oldQuery.measures || []).length === 0 && (newQuery.measures || []).length > 0 - || ( - (oldQuery.measures || []).length === 1 + ((oldQuery.measures || []).length === 0 && (newQuery.measures || []).length > 0) + || ((oldQuery.measures || []).length === 1 && (newQuery.measures || []).length === 1 - && oldQuery.measures[0] !== newQuery.measures[0] - ) + && oldQuery.measures[0] !== newQuery.measures[0]) ) { const defaultTimeDimension = meta.defaultTimeDimensionNameFor(newQuery.measures[0]); newQuery = { ...newQuery, - timeDimensions: defaultTimeDimension ? [{ - dimension: defaultTimeDimension, - granularity: defaultGranularity - }] : [], + timeDimensions: defaultTimeDimension + ? [ + { + dimension: defaultTimeDimension, + granularity: defaultGranularity + } + ] + : [] }; + + this.shouldApplyHeuristicOrder = true; + return { ...newState, query: newQuery, @@ -208,14 +347,14 @@ export default class QueryBuilder extends React.Component { }; } - if ( - (oldQuery.dimensions || []).length === 0 - && (newQuery.dimensions || []).length > 0 - ) { + if ((oldQuery.dimensions || []).length === 0 && (newQuery.dimensions || []).length > 0) { newQuery = { ...newQuery, - timeDimensions: (newQuery.timeDimensions || []).map(td => ({ ...td, granularity: undefined })), + timeDimensions: (newQuery.timeDimensions || []).map((td) => ({ ...td, granularity: undefined })) }; + + this.shouldApplyHeuristicOrder = true; + return { ...newState, query: newQuery, @@ -223,16 +362,17 @@ export default class QueryBuilder extends React.Component { }; } - if ( - (oldQuery.dimensions || []).length > 0 - && (newQuery.dimensions || []).length === 0 - ) { + if ((oldQuery.dimensions || []).length > 0 && (newQuery.dimensions || []).length === 0) { newQuery = { ...newQuery, - timeDimensions: (newQuery.timeDimensions || []).map(td => ({ - ...td, granularity: td.granularity || defaultGranularity - })), + timeDimensions: (newQuery.timeDimensions || []).map((td) => ({ + ...td, + granularity: td.granularity || defaultGranularity + })) }; + + this.shouldApplyHeuristicOrder = true; + return { ...newState, query: newQuery, @@ -241,10 +381,7 @@ export default class QueryBuilder extends React.Component { } if ( - ( - (oldQuery.dimensions || []).length > 0 - || (oldQuery.measures || []).length > 0 - ) + ((oldQuery.dimensions || []).length > 0 || (oldQuery.measures || []).length > 0) && (newQuery.dimensions || []).length === 0 && (newQuery.measures || []).length === 0 ) { @@ -253,6 +390,9 @@ export default class QueryBuilder extends React.Component { timeDimensions: [], filters: [] }; + + this.shouldApplyHeuristicOrder = true; + return { ...newState, query: newQuery, @@ -303,8 +443,7 @@ export default class QueryBuilder extends React.Component { if (disableHeuristics) { return newState; } - return stateChangeHeuristics && stateChangeHeuristics(this.state, newState) - || this.defaultHeuristics(newState); + return (stateChangeHeuristics && stateChangeHeuristics(this.state, newState)) || this.defaultHeuristics(newState); } render() { diff --git a/packages/cubejs-client-react/src/QueryRenderer.jsx b/packages/cubejs-client-react/src/QueryRenderer.jsx index 7c15c6c98485d..670caca8497e7 100644 --- a/packages/cubejs-client-react/src/QueryRenderer.jsx +++ b/packages/cubejs-client-react/src/QueryRenderer.jsx @@ -2,7 +2,7 @@ import React from 'react'; import * as PropTypes from 'prop-types'; import { equals, toPairs, fromPairs } from 'ramda'; import isQueryPresent from './isQueryPresent'; -import CubeContext from "./CubeContext"; +import CubeContext from './CubeContext'; export default class QueryRenderer extends React.Component { static isQueryPresent(query) { diff --git a/packages/cubejs-client-react/src/useCubeQuery.js b/packages/cubejs-client-react/src/useCubeQuery.js index a81078d40612c..f7e4da2caba93 100644 --- a/packages/cubejs-client-react/src/useCubeQuery.js +++ b/packages/cubejs-client-react/src/useCubeQuery.js @@ -21,7 +21,12 @@ export default (query, options = {}) => { async function loadQuery() { if (!skip && query && isQueryPresent(query)) { - if (!equals(currentQuery, query)) { + const hasOrderChanged = !equals( + Object.keys(currentQuery && currentQuery.order || {}), + Object.keys(query.order || {}) + ); + + if (hasOrderChanged || !equals(currentQuery, query)) { if (resetResultSetOnChange == null || resetResultSetOnChange) { setResultSet(null); } @@ -68,7 +73,12 @@ export default (query, options = {}) => { subscribeRequest = null; } }; - }, useDeepCompareMemoize([query, options, context])); + }, useDeepCompareMemoize([ + query, + Object.keys(query && query.order || {}), + options, + context + ])); return { isLoading, resultSet, error }; }; diff --git a/packages/cubejs-client-react/src/utils.js b/packages/cubejs-client-react/src/utils.js new file mode 100644 index 0000000000000..ac23b7dc046d8 --- /dev/null +++ b/packages/cubejs-client-react/src/utils.js @@ -0,0 +1,7 @@ +export function reorder(list, sourceIndex, destinationIndex) { + const result = [...list]; + const [removed] = result.splice(sourceIndex, 1); + result.splice(destinationIndex, 0, removed); + + return result; +} diff --git a/packages/cubejs-client-vue/dist/cubejs-client-vue.esm.js b/packages/cubejs-client-vue/dist/cubejs-client-vue.esm.js index 9b1229ac1c9d6..f80a6d792780e 100644 --- a/packages/cubejs-client-vue/dist/cubejs-client-vue.esm.js +++ b/packages/cubejs-client-vue/dist/cubejs-client-vue.esm.js @@ -401,7 +401,8 @@ var QueryBuilder = { setOffset: setOffset, removeOffset: removeOffset, renewQuery: renewQuery, - order: order + order: order, + setOrder: this.setOrder }; QUERY_ELEMENTS.forEach(function (e) { var name = e.charAt(0).toUpperCase() + e.slice(1); @@ -760,6 +761,10 @@ var QueryBuilder = { }, updateChart: function updateChart(chartType) { this.chartType = chartType; + }, + setOrder: function setOrder() { + var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.order = order; } }, watch: { diff --git a/packages/cubejs-client-vue/dist/cubejs-client-vue.js b/packages/cubejs-client-vue/dist/cubejs-client-vue.js index 26e390a56f844..2c21eca195975 100644 --- a/packages/cubejs-client-vue/dist/cubejs-client-vue.js +++ b/packages/cubejs-client-vue/dist/cubejs-client-vue.js @@ -407,7 +407,8 @@ var QueryBuilder = { setOffset: setOffset, removeOffset: removeOffset, renewQuery: renewQuery, - order: order + order: order, + setOrder: this.setOrder }; QUERY_ELEMENTS.forEach(function (e) { var name = e.charAt(0).toUpperCase() + e.slice(1); @@ -766,6 +767,10 @@ var QueryBuilder = { }, updateChart: function updateChart(chartType) { this.chartType = chartType; + }, + setOrder: function setOrder() { + var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.order = order; } }, watch: { diff --git a/packages/cubejs-client-vue/dist/cubejs-client-vue.umd.js b/packages/cubejs-client-vue/dist/cubejs-client-vue.umd.js index 6e08b86c0b254..d87141e65b60b 100644 --- a/packages/cubejs-client-vue/dist/cubejs-client-vue.umd.js +++ b/packages/cubejs-client-vue/dist/cubejs-client-vue.umd.js @@ -1,2034 +1,9 @@ (function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : + typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('core-js/modules/es.array.iterator'), require('core-js/modules/es.array.map'), require('core-js/modules/es.object.assign'), require('core-js/modules/es.object.keys'), require('core-js/modules/es.object.to-string'), require('core-js/modules/es.promise'), require('core-js/modules/es.string.iterator'), require('core-js/modules/web.dom-collections.iterator'), require('core-js/modules/es.symbol'), require('core-js/modules/es.symbol.description'), require('core-js/modules/es.symbol.async-iterator'), require('core-js/modules/es.symbol.iterator'), require('core-js/modules/es.symbol.to-string-tag'), require('core-js/modules/es.array.for-each'), require('core-js/modules/es.array.reverse'), require('core-js/modules/es.array.slice'), require('core-js/modules/es.date.to-string'), require('core-js/modules/es.function.name'), require('core-js/modules/es.json.to-string-tag'), require('core-js/modules/es.math.to-string-tag'), require('core-js/modules/es.object.create'), require('core-js/modules/es.object.get-prototype-of'), require('core-js/modules/es.object.set-prototype-of'), require('core-js/modules/es.regexp.to-string'), require('core-js/modules/web.dom-collections.for-each'), require('core-js/modules/es.array.filter'), require('core-js/modules/es.array.find'), require('core-js/modules/es.array.find-index'), require('core-js/modules/es.array.splice')) : + typeof define === 'function' && define.amd ? define(['exports', 'core-js/modules/es.array.iterator', 'core-js/modules/es.array.map', 'core-js/modules/es.object.assign', 'core-js/modules/es.object.keys', 'core-js/modules/es.object.to-string', 'core-js/modules/es.promise', 'core-js/modules/es.string.iterator', 'core-js/modules/web.dom-collections.iterator', 'core-js/modules/es.symbol', 'core-js/modules/es.symbol.description', 'core-js/modules/es.symbol.async-iterator', 'core-js/modules/es.symbol.iterator', 'core-js/modules/es.symbol.to-string-tag', 'core-js/modules/es.array.for-each', 'core-js/modules/es.array.reverse', 'core-js/modules/es.array.slice', 'core-js/modules/es.date.to-string', 'core-js/modules/es.function.name', 'core-js/modules/es.json.to-string-tag', 'core-js/modules/es.math.to-string-tag', 'core-js/modules/es.object.create', 'core-js/modules/es.object.get-prototype-of', 'core-js/modules/es.object.set-prototype-of', 'core-js/modules/es.regexp.to-string', 'core-js/modules/web.dom-collections.for-each', 'core-js/modules/es.array.filter', 'core-js/modules/es.array.find', 'core-js/modules/es.array.find-index', 'core-js/modules/es.array.splice'], factory) : (global = global || self, factory(global.cubejsVue = {})); }(this, function (exports) { 'use strict'; - var fails = function (exec) { - try { - return !!exec(); - } catch (error) { - return true; - } - }; - - var toString = {}.toString; - - var classofRaw = function (it) { - return toString.call(it).slice(8, -1); - }; - - var split = ''.split; - - // 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 - 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 - var requireObjectCoercible = function (it) { - if (it == undefined) throw TypeError("Can't call method on " + it); - return it; - }; - - // toObject with fallback for non-array-like ES3 strings - - - - var toIndexedObject = function (it) { - return indexedObject(requireObjectCoercible(it)); - }; - - var commonjsGlobal = typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {}; - - function createCommonjsModule(fn, module) { - return module = { exports: {} }, fn(module, module.exports), module.exports; - } - - var check = function (it) { - return it && it.Math == Math && it; - }; - - // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 - var global_1 = - // eslint-disable-next-line no-undef - 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 - Function('return this')(); - - var isPure = false; - - // Thank's IE8 for his funny defineProperty - var descriptors = !fails(function () { - return Object.defineProperty({}, 1, { get: function () { return 7; } })[1] != 7; - }); - - var isObject = function (it) { - return typeof it === 'object' ? it !== null : typeof it === 'function'; - }; - - var document$1 = global_1.document; - // typeof document.createElement is 'object' in old IE - var EXISTS = isObject(document$1) && isObject(document$1.createElement); - - var documentCreateElement = function (it) { - return EXISTS ? document$1.createElement(it) : {}; - }; - - // Thank's IE8 for his funny defineProperty - var ie8DomDefine = !descriptors && !fails(function () { - return Object.defineProperty(documentCreateElement('div'), 'a', { - get: function () { return 7; } - }).a != 7; - }); - - var anObject = function (it) { - if (!isObject(it)) { - throw TypeError(String(it) + ' is not an object'); - } return it; - }; - - // `ToPrimitive` abstract operation - // https://tc39.github.io/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) { - if (!isObject(input)) return input; - var fn, val; - if (PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - if (typeof (fn = input.valueOf) == 'function' && !isObject(val = fn.call(input))) return val; - if (!PREFERRED_STRING && typeof (fn = input.toString) == 'function' && !isObject(val = fn.call(input))) return val; - throw TypeError("Can't convert object to primitive value"); - }; - - var nativeDefineProperty = Object.defineProperty; - - // `Object.defineProperty` method - // https://tc39.github.io/ecma262/#sec-object.defineproperty - var f = descriptors ? nativeDefineProperty : function defineProperty(O, P, Attributes) { - anObject(O); - P = toPrimitive(P, true); - anObject(Attributes); - if (ie8DomDefine) try { - return nativeDefineProperty(O, P, Attributes); - } catch (error) { /* empty */ } - if ('get' in Attributes || 'set' in Attributes) throw TypeError('Accessors not supported'); - if ('value' in Attributes) O[P] = Attributes.value; - return O; - }; - - var objectDefineProperty = { - f: f - }; - - var createPropertyDescriptor = function (bitmap, value) { - return { - enumerable: !(bitmap & 1), - configurable: !(bitmap & 2), - writable: !(bitmap & 4), - value: value - }; - }; - - var createNonEnumerableProperty = descriptors ? function (object, key, value) { - return objectDefineProperty.f(object, key, createPropertyDescriptor(1, value)); - } : function (object, key, value) { - object[key] = value; - return object; - }; - - var setGlobal = function (key, value) { - try { - createNonEnumerableProperty(global_1, key, value); - } catch (error) { - global_1[key] = value; - } return value; - }; - - var SHARED = '__core-js_shared__'; - var store = global_1[SHARED] || setGlobal(SHARED, {}); - - var sharedStore = store; - - var shared = createCommonjsModule(function (module) { - (module.exports = function (key, value) { - return sharedStore[key] || (sharedStore[key] = value !== undefined ? value : {}); - })('versions', []).push({ - version: '3.6.5', - mode: 'global', - copyright: '© 2020 Denis Pushkarev (zloirock.ru)' - }); - }); - - var hasOwnProperty = {}.hasOwnProperty; - - var has = function (it, key) { - return hasOwnProperty.call(it, key); - }; - - var id = 0; - var postfix = Math.random(); - - var uid = function (key) { - return 'Symbol(' + String(key === undefined ? '' : key) + ')_' + (++id + postfix).toString(36); - }; - - var nativeSymbol = !!Object.getOwnPropertySymbols && !fails(function () { - // Chrome 38 Symbol has incorrect toString conversion - // eslint-disable-next-line no-undef - return !String(Symbol()); - }); - - var useSymbolAsUid = nativeSymbol - // eslint-disable-next-line no-undef - && !Symbol.sham - // eslint-disable-next-line no-undef - && typeof Symbol.iterator == 'symbol'; - - 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)) { - if (nativeSymbol && has(Symbol$1, name)) WellKnownSymbolsStore[name] = Symbol$1[name]; - else WellKnownSymbolsStore[name] = createWellKnownSymbol('Symbol.' + name); - } return WellKnownSymbolsStore[name]; - }; - - var ceil = Math.ceil; - var floor = Math.floor; - - // `ToInteger` abstract operation - // https://tc39.github.io/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 - var toLength = function (argument) { - return argument > 0 ? min(toInteger(argument), 0x1FFFFFFFFFFFFF) : 0; // 2 ** 53 - 1 == 9007199254740991 - }; - - var max = Math.max; - var min$1 = Math.min; - - // Helper for a popular repeating case of the spec: - // Let integer be ? ToInteger(index). - // If integer < 0, let result be max((length + integer), 0); else let result be min(integer, length). - var toAbsoluteIndex = function (index, length) { - var integer = toInteger(index); - return integer < 0 ? max(integer + length, 0) : min$1(integer, length); - }; - - // `Array.prototype.{ indexOf, includes }` methods implementation - var createMethod = function (IS_INCLUDES) { - return function ($this, el, fromIndex) { - var O = toIndexedObject($this); - var length = toLength(O.length); - var index = toAbsoluteIndex(fromIndex, length); - var value; - // Array#includes uses SameValueZero equality algorithm - // eslint-disable-next-line no-self-compare - if (IS_INCLUDES && el != el) while (length > index) { - value = O[index++]; - // eslint-disable-next-line no-self-compare - if (value != value) return true; - // Array#indexOf ignores holes, Array#includes - not - } else for (;length > index; index++) { - if ((IS_INCLUDES || index in O) && O[index] === el) return IS_INCLUDES || index || 0; - } return !IS_INCLUDES && -1; - }; - }; - - var arrayIncludes = { - // `Array.prototype.includes` method - // https://tc39.github.io/ecma262/#sec-array.prototype.includes - includes: createMethod(true), - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - indexOf: createMethod(false) - }; - - var hiddenKeys = {}; - - var indexOf = arrayIncludes.indexOf; - - - var objectKeysInternal = function (object, names) { - var O = toIndexedObject(object); - var i = 0; - var result = []; - var key; - for (key in O) !has(hiddenKeys, key) && has(O, key) && result.push(key); - // Don't enum bug & hidden keys - while (names.length > i) if (has(O, key = names[i++])) { - ~indexOf(result, key) || result.push(key); - } - return result; - }; - - // IE8- don't enum bug keys - var enumBugKeys = [ - 'constructor', - 'hasOwnProperty', - 'isPrototypeOf', - 'propertyIsEnumerable', - 'toLocaleString', - 'toString', - 'valueOf' - ]; - - // `Object.keys` method - // https://tc39.github.io/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 - var objectDefineProperties = descriptors ? Object.defineProperties : function defineProperties(O, Properties) { - anObject(O); - var keys = objectKeys(Properties); - var length = keys.length; - var index = 0; - var key; - while (length > index) objectDefineProperty.f(O, key = keys[index++], Properties[key]); - return O; - }; - - var path = global_1; - - var aFunction = function (variable) { - return typeof variable == 'function' ? variable : undefined; - }; - - var getBuiltIn = function (namespace, method) { - return arguments.length < 2 ? aFunction(path[namespace]) || aFunction(global_1[namespace]) - : path[namespace] && path[namespace][method] || global_1[namespace] && global_1[namespace][method]; - }; - - var html = getBuiltIn('document', 'documentElement'); - - var keys = shared('keys'); - - var sharedKey = function (key) { - return keys[key] || (keys[key] = uid(key)); - }; - - var GT = '>'; - var LT = '<'; - var PROTOTYPE = 'prototype'; - var SCRIPT = 'script'; - var IE_PROTO = sharedKey('IE_PROTO'); - - var EmptyConstructor = function () { /* empty */ }; - - var scriptTag = function (content) { - return LT + SCRIPT + GT + content + LT + '/' + SCRIPT + GT; - }; - - // Create object with fake `null` prototype: use ActiveX Object with cleared prototype - var NullProtoObjectViaActiveX = function (activeXDocument) { - activeXDocument.write(scriptTag('')); - activeXDocument.close(); - var temp = activeXDocument.parentWindow.Object; - activeXDocument = null; // avoid memory leak - return temp; - }; - - // Create object with fake `null` prototype: use iframe Object with cleared prototype - var NullProtoObjectViaIFrame = function () { - // Thrash, waste and sodomy: IE GC bug - var iframe = documentCreateElement('iframe'); - var JS = 'java' + SCRIPT + ':'; - var iframeDocument; - iframe.style.display = 'none'; - html.appendChild(iframe); - // https://github.com/zloirock/core-js/issues/475 - iframe.src = String(JS); - iframeDocument = iframe.contentWindow.document; - iframeDocument.open(); - iframeDocument.write(scriptTag('document.F=Object')); - iframeDocument.close(); - return iframeDocument.F; - }; - - // Check for document.domain and active x support - // No need to use active x approach when document.domain is not set - // see https://github.com/es-shims/es5-shim/issues/150 - // variation of https://github.com/kitcambridge/es5-shim/commit/4f738ac066346 - // avoid IE GC bug - var activeXDocument; - var NullProtoObject = function () { - try { - /* global ActiveXObject */ - activeXDocument = document.domain && new ActiveXObject('htmlfile'); - } catch (error) { /* ignore */ } - NullProtoObject = activeXDocument ? NullProtoObjectViaActiveX(activeXDocument) : NullProtoObjectViaIFrame(); - var length = enumBugKeys.length; - while (length--) delete NullProtoObject[PROTOTYPE][enumBugKeys[length]]; - return NullProtoObject(); - }; - - hiddenKeys[IE_PROTO] = true; - - // `Object.create` method - // https://tc39.github.io/ecma262/#sec-object.create - var objectCreate = Object.create || function create(O, Properties) { - var result; - if (O !== null) { - EmptyConstructor[PROTOTYPE] = anObject(O); - result = new EmptyConstructor(); - EmptyConstructor[PROTOTYPE] = null; - // add "__proto__" for Object.getPrototypeOf polyfill - result[IE_PROTO] = O; - } else result = NullProtoObject(); - return Properties === undefined ? result : objectDefineProperties(result, Properties); - }; - - 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; - }; - - var iterators = {}; - - var functionToString = Function.toString; - - // this helper broken in `3.4.1-3.4.4`, so we can't use `shared` helper - if (typeof sharedStore.inspectSource != 'function') { - sharedStore.inspectSource = function (it) { - return functionToString.call(it); - }; - } - - var inspectSource = sharedStore.inspectSource; - - var WeakMap = global_1.WeakMap; - - var nativeWeakMap = typeof WeakMap === 'function' && /native code/.test(inspectSource(WeakMap)); - - var WeakMap$1 = global_1.WeakMap; - var set, get, has$1; - - var enforce = function (it) { - return has$1(it) ? get(it) : set(it, {}); - }; - - var getterFor = function (TYPE) { - return function (it) { - var state; - if (!isObject(it) || (state = get(it)).type !== TYPE) { - throw TypeError('Incompatible receiver, ' + TYPE + ' required'); - } return state; - }; - }; - - if (nativeWeakMap) { - var store$1 = new WeakMap$1(); - var wmget = store$1.get; - var wmhas = store$1.has; - var wmset = store$1.set; - set = function (it, metadata) { - wmset.call(store$1, it, metadata); - return metadata; - }; - get = function (it) { - return wmget.call(store$1, it) || {}; - }; - has$1 = function (it) { - return wmhas.call(store$1, it); - }; - } else { - var STATE = sharedKey('state'); - hiddenKeys[STATE] = true; - set = function (it, metadata) { - createNonEnumerableProperty(it, STATE, metadata); - return metadata; - }; - get = function (it) { - return has(it, STATE) ? it[STATE] : {}; - }; - has$1 = function (it) { - return has(it, STATE); - }; - } - - var internalState = { - set: set, - get: get, - has: has$1, - enforce: enforce, - getterFor: getterFor - }; - - var nativePropertyIsEnumerable = {}.propertyIsEnumerable; - var getOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - - // Nashorn ~ JDK8 bug - var NASHORN_BUG = getOwnPropertyDescriptor && !nativePropertyIsEnumerable.call({ 1: 2 }, 1); - - // `Object.prototype.propertyIsEnumerable` method implementation - // https://tc39.github.io/ecma262/#sec-object.prototype.propertyisenumerable - var f$1 = NASHORN_BUG ? function propertyIsEnumerable(V) { - var descriptor = getOwnPropertyDescriptor(this, V); - return !!descriptor && descriptor.enumerable; - } : nativePropertyIsEnumerable; - - var objectPropertyIsEnumerable = { - f: f$1 - }; - - var nativeGetOwnPropertyDescriptor = Object.getOwnPropertyDescriptor; - - // `Object.getOwnPropertyDescriptor` method - // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptor - var f$2 = descriptors ? nativeGetOwnPropertyDescriptor : function getOwnPropertyDescriptor(O, P) { - O = toIndexedObject(O); - P = toPrimitive(P, true); - if (ie8DomDefine) try { - return nativeGetOwnPropertyDescriptor(O, P); - } catch (error) { /* empty */ } - if (has(O, P)) return createPropertyDescriptor(!objectPropertyIsEnumerable.f.call(O, P), O[P]); - }; - - var objectGetOwnPropertyDescriptor = { - f: f$2 - }; - - var redefine = createCommonjsModule(function (module) { - var getInternalState = internalState.get; - var enforceInternalState = internalState.enforce; - var TEMPLATE = String(String).split('String'); - - (module.exports = function (O, key, value, options) { - var unsafe = options ? !!options.unsafe : false; - var simple = options ? !!options.enumerable : false; - var noTargetGet = options ? !!options.noTargetGet : false; - if (typeof value == 'function') { - if (typeof key == 'string' && !has(value, 'name')) createNonEnumerableProperty(value, 'name', key); - enforceInternalState(value).source = TEMPLATE.join(typeof key == 'string' ? key : ''); - } - if (O === global_1) { - if (simple) O[key] = value; - else setGlobal(key, value); - return; - } else if (!unsafe) { - delete O[key]; - } else if (!noTargetGet && O[key]) { - simple = true; - } - if (simple) O[key] = value; - else createNonEnumerableProperty(O, key, value); - // add fake Function#toString for correct work wrapped methods / constructors with methods like LoDash isNative - })(Function.prototype, 'toString', function toString() { - return typeof this == 'function' && getInternalState(this).source || inspectSource(this); - }); - }); - - var hiddenKeys$1 = enumBugKeys.concat('length', 'prototype'); - - // `Object.getOwnPropertyNames` method - // https://tc39.github.io/ecma262/#sec-object.getownpropertynames - var f$3 = Object.getOwnPropertyNames || function getOwnPropertyNames(O) { - return objectKeysInternal(O, hiddenKeys$1); - }; - - var objectGetOwnPropertyNames = { - f: f$3 - }; - - var f$4 = Object.getOwnPropertySymbols; - - var objectGetOwnPropertySymbols = { - f: f$4 - }; - - // all object keys, includes non-enumerable and symbols - var ownKeys = getBuiltIn('Reflect', 'ownKeys') || function ownKeys(it) { - var keys = objectGetOwnPropertyNames.f(anObject(it)); - var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; - return getOwnPropertySymbols ? keys.concat(getOwnPropertySymbols(it)) : keys; - }; - - var copyConstructorProperties = function (target, source) { - var keys = ownKeys(source); - var defineProperty = objectDefineProperty.f; - var getOwnPropertyDescriptor = objectGetOwnPropertyDescriptor.f; - for (var i = 0; i < keys.length; i++) { - var key = keys[i]; - if (!has(target, key)) defineProperty(target, key, getOwnPropertyDescriptor(source, key)); - } - }; - - var replacement = /#|\.prototype\./; - - var isForced = function (feature, detection) { - var value = data[normalize(feature)]; - return value == POLYFILL ? true - : value == NATIVE ? false - : typeof detection == 'function' ? fails(detection) - : !!detection; - }; - - var normalize = isForced.normalize = function (string) { - return String(string).replace(replacement, '.').toLowerCase(); - }; - - var data = isForced.data = {}; - var NATIVE = isForced.NATIVE = 'N'; - var POLYFILL = isForced.POLYFILL = 'P'; - - var isForced_1 = isForced; - - var getOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; - - - - - - - /* - options.target - name of the target object - options.global - target is the global object - options.stat - export as static methods of target - options.proto - export as prototype methods of target - options.real - real prototype method for the `pure` version - options.forced - export even if the native feature is available - options.bind - bind methods to the target, required for the `pure` version - options.wrap - wrap constructors to preventing global pollution, required for the `pure` version - options.unsafe - use the simple assignment of property instead of delete + defineProperty - options.sham - add a flag to not completely full polyfills - options.enumerable - export as enumerable property - options.noTargetGet - prevent calling a getter on target - */ - var _export = function (options, source) { - var TARGET = options.target; - var GLOBAL = options.global; - var STATIC = options.stat; - var FORCED, target, key, targetProperty, sourceProperty, descriptor; - if (GLOBAL) { - target = global_1; - } else if (STATIC) { - target = global_1[TARGET] || setGlobal(TARGET, {}); - } else { - target = (global_1[TARGET] || {}).prototype; - } - if (target) for (key in source) { - sourceProperty = source[key]; - if (options.noTargetGet) { - descriptor = getOwnPropertyDescriptor$1(target, key); - targetProperty = descriptor && descriptor.value; - } else targetProperty = target[key]; - FORCED = isForced_1(GLOBAL ? key : TARGET + (STATIC ? '.' : '#') + key, options.forced); - // contained in target - if (!FORCED && targetProperty !== undefined) { - if (typeof sourceProperty === typeof targetProperty) continue; - copyConstructorProperties(sourceProperty, targetProperty); - } - // add a flag to not completely full polyfills - if (options.sham || (targetProperty && targetProperty.sham)) { - createNonEnumerableProperty(sourceProperty, 'sham', true); - } - // extend global - redefine(target, key, sourceProperty, options); - } - }; - - // `ToObject` abstract operation - // https://tc39.github.io/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$1 = sharedKey('IE_PROTO'); - var ObjectPrototype = Object.prototype; - - // `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 : null; - }; - - var ITERATOR = wellKnownSymbol('iterator'); - var BUGGY_SAFARI_ITERATORS = false; - - 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 = {}; - - // 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 - }; - - var defineProperty = objectDefineProperty.f; - - - - var TO_STRING_TAG = wellKnownSymbol('toStringTag'); - - var setToStringTag = function (it, TAG, STATIC) { - if (it && !has(it = STATIC ? it : it.prototype, TO_STRING_TAG)) { - defineProperty(it, TO_STRING_TAG, { configurable: true, value: TAG }); - } - }; - - 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, true); - iterators[TO_STRING_TAG] = returnThis$1; - return IteratorConstructor; - }; - - var aPossiblePrototype = function (it) { - if (!isObject(it) && it !== null) { - throw TypeError("Can't set " + String(it) + ' as a prototype'); - } return it; - }; - - // `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; - }; - }() : 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; }; - - 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, 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 = internalState.set; - var getInternalState = 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(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(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 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); - }; - }; - - // `IsArray` abstract operation - // https://tc39.github.io/ecma262/#sec-isarray - var isArray = Array.isArray || function isArray(arg) { - return classofRaw(arg) == 'Array'; - }; - - var SPECIES = wellKnownSymbol('species'); - - // `ArraySpeciesCreate` abstract operation - // https://tc39.github.io/ecma262/#sec-arrayspeciescreate - var arraySpeciesCreate = function (originalArray, length) { - var C; - if (isArray(originalArray)) { - C = originalArray.constructor; - // cross-realm fallback - if (typeof C == 'function' && (C === Array || isArray(C.prototype))) C = undefined; - else if (isObject(C)) { - C = C[SPECIES]; - if (C === null) C = undefined; - } - } return new (C === undefined ? Array : C)(length === 0 ? 0 : length); - }; - - var push = [].push; - - // `Array.prototype.{ forEach, map, filter, some, every, find, findIndex }` methods implementation - var createMethod$1 = 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 NO_HOLES = TYPE == 5 || IS_FIND_INDEX; - return function ($this, callbackfn, that, specificCreate) { - var O = toObject($this); - var self = indexedObject(O); - var boundFunction = functionBindContext(callbackfn, that, 3); - 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 value, result; - for (;length > index; index++) if (NO_HOLES || index in self) { - value = self[index]; - result = boundFunction(value, index, O); - if (TYPE) { - if (IS_MAP) target[index] = result; // map - else if (result) switch (TYPE) { - case 3: return true; // some - case 5: return value; // find - case 6: return index; // findIndex - case 2: push.call(target, value); // filter - } else if (IS_EVERY) return false; // every - } - } - 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), - // `Array.prototype.map` method - // https://tc39.github.io/ecma262/#sec-array.prototype.map - map: createMethod$1(1), - // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter - filter: createMethod$1(2), - // `Array.prototype.some` method - // https://tc39.github.io/ecma262/#sec-array.prototype.some - some: createMethod$1(3), - // `Array.prototype.every` method - // https://tc39.github.io/ecma262/#sec-array.prototype.every - every: createMethod$1(4), - // `Array.prototype.find` method - // https://tc39.github.io/ecma262/#sec-array.prototype.find - find: createMethod$1(5), - // `Array.prototype.findIndex` method - // https://tc39.github.io/ecma262/#sec-array.prototype.findIndex - findIndex: createMethod$1(6) - }; - - var engineUserAgent = getBuiltIn('navigator', 'userAgent') || ''; - - var process = global_1.process; - var versions = process && process.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 defineProperty$1 = 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$1(O, 1, { enumerable: true, get: thrower }); - else O[1] = 1; - - method.call(O, argument0, argument1); - }); - }; - - var $map = arrayIteration.map; - - - - var HAS_SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('map'); - // FF49- issue - var USES_TO_LENGTH = 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 }, { - map: function map(callbackfn /* , thisArg */) { - return $map(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - var nativeAssign = Object.assign; - var defineProperty$2 = Object.defineProperty; - - // `Object.assign` method - // https://tc39.github.io/ecma262/#sec-object.assign - var objectAssign = !nativeAssign || fails(function () { - // should have correct order of operations (Edge bug) - if (descriptors && nativeAssign({ b: 1 }, nativeAssign(defineProperty$2({}, 'a', { - enumerable: true, - get: function () { - defineProperty$2(this, 'b', { - value: 3, - enumerable: false - }); - } - }), { b: 2 })).b !== 1) return true; - // should work with symbols and should have deterministic property order (V8 bug) - var A = {}; - var B = {}; - // eslint-disable-next-line no-undef - 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 - var T = toObject(target); - var argumentsLength = arguments.length; - var index = 1; - var getOwnPropertySymbols = objectGetOwnPropertySymbols.f; - var propertyIsEnumerable = objectPropertyIsEnumerable.f; - while (argumentsLength > index) { - var S = indexedObject(arguments[index++]); - var keys = getOwnPropertySymbols ? objectKeys(S).concat(getOwnPropertySymbols(S)) : objectKeys(S); - var length = keys.length; - var j = 0; - var key; - while (length > j) { - key = keys[j++]; - if (!descriptors || propertyIsEnumerable.call(S, key)) T[key] = S[key]; - } - } return T; - } : nativeAssign; - - // `Object.assign` method - // https://tc39.github.io/ecma262/#sec-object.assign - _export({ target: 'Object', stat: true, forced: Object.assign !== objectAssign }, { - assign: objectAssign - }); - - var FAILS_ON_PRIMITIVES = fails(function () { objectKeys(1); }); - - // `Object.keys` method - // https://tc39.github.io/ecma262/#sec-object.keys - _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES }, { - keys: function keys(it) { - return objectKeys(toObject(it)); - } - }); - - 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; - }; - - // `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 redefineAll = function (target, src, options) { - for (var key in src) redefine(target, key, src[key], options); - return target; - }; - - var SPECIES$2 = wellKnownSymbol('species'); - - 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 anInstance = function (it, Constructor, name) { - if (!(it instanceof Constructor)) { - throw TypeError('Incorrect ' + (name ? name + ' ' : '') + 'invocation'); - } return it; - }; - - var ITERATOR$2 = 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); - }; - - var ITERATOR$3 = wellKnownSymbol('iterator'); - - var getIteratorMethod = function (it) { - if (it != undefined) return it[ITERATOR$3] - || it['@@iterator'] - || iterators[classof(it)]; - }; - - // call something on iterator step with safe closing on error - var callWithSafeIterationClosing = function (iterator, fn, value, ENTRIES) { - try { - return ENTRIES ? fn(anObject(value)[0], value[1]) : fn(value); - // 7.4.6 IteratorClose(iterator, completion) - } catch (error) { - var returnMethod = iterator['return']; - if (returnMethod !== undefined) anObject(returnMethod.call(iterator)); - throw error; - } - }; - - var iterate_1 = createCommonjsModule(function (module) { - var Result = function (stopped, result) { - this.stopped = stopped; - this.result = result; - }; - - var iterate = module.exports = function (iterable, fn, that, AS_ENTRIES, IS_ITERATOR) { - var boundFunction = functionBindContext(fn, that, AS_ENTRIES ? 2 : 1); - var iterator, iterFn, index, length, result, next, step; - - if (IS_ITERATOR) { - iterator = iterable; - } else { - iterFn = getIteratorMethod(iterable); - if (typeof iterFn != 'function') throw TypeError('Target is not iterable'); - // optimisation for array iterators - if (isArrayIteratorMethod(iterFn)) { - for (index = 0, length = toLength(iterable.length); length > index; index++) { - result = AS_ENTRIES - ? boundFunction(anObject(step = iterable[index])[0], step[1]) - : boundFunction(iterable[index]); - if (result && result instanceof Result) return result; - } return new Result(false); - } - iterator = iterFn.call(iterable); - } - - next = iterator.next; - while (!(step = next.call(iterator)).done) { - result = callWithSafeIterationClosing(iterator, boundFunction, step.value, AS_ENTRIES); - if (typeof result == 'object' && result && result instanceof Result) return result; - } return new Result(false); - }; - - iterate.stop = function (result) { - return new Result(true, result); - }; - }); - - var ITERATOR$4 = wellKnownSymbol('iterator'); - var SAFE_CLOSING = false; - - try { - var called = 0; - var iteratorWithReturn = { - next: function () { - return { done: !!called++ }; - }, - 'return': function () { - SAFE_CLOSING = true; - } - }; - iteratorWithReturn[ITERATOR$4] = function () { - return this; - }; - } catch (error) { /* empty */ } - - var checkCorrectnessOfIteration = function (exec, SKIP_CLOSING) { - if (!SKIP_CLOSING && !SAFE_CLOSING) return false; - var ITERATION_SUPPORT = false; - try { - var object = {}; - object[ITERATOR$4] = function () { - return { - next: function () { - return { done: ITERATION_SUPPORT = true }; - } - }; - }; - exec(object); - } catch (error) { /* empty */ } - return ITERATION_SUPPORT; - }; - - var SPECIES$3 = 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$3]) == undefined ? defaultConstructor : aFunction$1(S); - }; - - var engineIsIos = /(iphone|ipod|ipad).*applewebkit/i.test(engineUserAgent); - - var location = global_1.location; - var set$1 = global_1.setImmediate; - var clear = global_1.clearImmediate; - var process$1 = global_1.process; - var MessageChannel = global_1.MessageChannel; - var Dispatch = global_1.Dispatch; - var counter = 0; - var queue = {}; - var ONREADYSTATECHANGE = 'onreadystatechange'; - var defer, channel, port; - - var run = function (id) { - // eslint-disable-next-line no-prototype-builtins - if (queue.hasOwnProperty(id)) { - var fn = queue[id]; - delete queue[id]; - fn(); - } - }; - - var runner = function (id) { - return function () { - run(id); - }; - }; - - var listener = function (event) { - run(event.data); - }; - - var post = function (id) { - // old engines have not location.origin - global_1.postMessage(id + '', location.protocol + '//' + location.host); - }; - - // Node.js 0.9+ & IE10+ has setImmediate, otherwise: - if (!set$1 || !clear) { - set$1 = function setImmediate(fn) { - var args = []; - var i = 1; - while (arguments.length > i) args.push(arguments[i++]); - queue[++counter] = function () { - // eslint-disable-next-line no-new-func - (typeof fn == 'function' ? fn : Function(fn)).apply(undefined, args); - }; - defer(counter); - return counter; - }; - clear = function clearImmediate(id) { - delete queue[id]; - }; - // Node.js 0.8- - if (classofRaw(process$1) == 'process') { - defer = function (id) { - process$1.nextTick(runner(id)); - }; - // Sphere (JS game engine) Dispatch API - } else if (Dispatch && Dispatch.now) { - defer = function (id) { - Dispatch.now(runner(id)); - }; - // Browsers with MessageChannel, includes WebWorkers - // except iOS - https://github.com/zloirock/core-js/issues/624 - } else if (MessageChannel && !engineIsIos) { - channel = new MessageChannel(); - port = channel.port2; - channel.port1.onmessage = listener; - defer = functionBindContext(port.postMessage, port, 1); - // Browsers with postMessage, skip WebWorkers - // IE8 has postMessage, but it's sync & typeof its postMessage is 'object' - } else if ( - global_1.addEventListener && - typeof postMessage == 'function' && - !global_1.importScripts && - !fails(post) && - location.protocol !== 'file:' - ) { - defer = post; - global_1.addEventListener('message', listener, false); - // IE8- - } else if (ONREADYSTATECHANGE in documentCreateElement('script')) { - defer = function (id) { - html.appendChild(documentCreateElement('script'))[ONREADYSTATECHANGE] = function () { - html.removeChild(this); - run(id); - }; - }; - // Rest old browsers - } else { - defer = function (id) { - setTimeout(runner(id), 0); - }; - } - } - - var task = { - set: set$1, - clear: clear - }; - - var getOwnPropertyDescriptor$2 = objectGetOwnPropertyDescriptor.f; - - var macrotask = task.set; - - - var MutationObserver = global_1.MutationObserver || global_1.WebKitMutationObserver; - var process$2 = global_1.process; - var Promise$1 = global_1.Promise; - var IS_NODE = classofRaw(process$2) == 'process'; - // Node.js 11 shows ExperimentalWarning on getting `queueMicrotask` - var queueMicrotaskDescriptor = getOwnPropertyDescriptor$2(global_1, 'queueMicrotask'); - var queueMicrotask = queueMicrotaskDescriptor && queueMicrotaskDescriptor.value; - - var flush, head, last, notify, toggle, node, promise, then; - - // modern engines have queueMicrotask method - if (!queueMicrotask) { - flush = function () { - var parent, fn; - if (IS_NODE && (parent = process$2.domain)) parent.exit(); - while (head) { - fn = head.fn; - head = head.next; - try { - fn(); - } catch (error) { - if (head) notify(); - else last = undefined; - throw error; - } - } last = undefined; - if (parent) parent.enter(); - }; - - // Node.js - if (IS_NODE) { - notify = function () { - process$2.nextTick(flush); - }; - // browsers with MutationObserver, except iOS - https://github.com/zloirock/core-js/issues/339 - } else if (MutationObserver && !engineIsIos) { - toggle = true; - node = document.createTextNode(''); - new MutationObserver(flush).observe(node, { characterData: true }); - notify = function () { - node.data = toggle = !toggle; - }; - // environments with maybe non-completely correct, but existent Promise - } else if (Promise$1 && Promise$1.resolve) { - // Promise.resolve without an argument throws an error in LG WebOS 2 - promise = Promise$1.resolve(undefined); - then = promise.then; - notify = function () { - then.call(promise, flush); - }; - // for other environments - macrotask based on: - // - setImmediate - // - MessageChannel - // - window.postMessag - // - onreadystatechange - // - setTimeout - } else { - notify = function () { - // strange IE + webpack dev server bug - use .call(global) - macrotask.call(global_1, flush); - }; - } - } - - var microtask = queueMicrotask || function (fn) { - var task$$1 = { fn: fn, next: undefined }; - if (last) last.next = task$$1; - if (!head) { - head = task$$1; - notify(); - } last = task$$1; - }; - - var PromiseCapability = function (C) { - var resolve, reject; - this.promise = new C(function ($$resolve, $$reject) { - if (resolve !== undefined || reject !== undefined) throw TypeError('Bad Promise constructor'); - resolve = $$resolve; - reject = $$reject; - }); - this.resolve = aFunction$1(resolve); - this.reject = aFunction$1(reject); - }; - - // 25.4.1.5 NewPromiseCapability(C) - var f$5 = function (C) { - return new PromiseCapability(C); - }; - - var newPromiseCapability = { - f: f$5 - }; - - var promiseResolve = function (C, x) { - anObject(C); - if (isObject(x) && x.constructor === C) return x; - var promiseCapability = newPromiseCapability.f(C); - var resolve = promiseCapability.resolve; - resolve(x); - return promiseCapability.promise; - }; - - var hostReportErrors = function (a, b) { - var console = global_1.console; - if (console && console.error) { - arguments.length === 1 ? console.error(a) : console.error(a, b); - } - }; - - var perform = function (exec) { - try { - return { error: false, value: exec() }; - } catch (error) { - return { error: true, value: error }; - } - }; - - var task$1 = task.set; - - - - - - - - - - - var SPECIES$4 = wellKnownSymbol('species'); - var PROMISE = 'Promise'; - var getInternalState$1 = internalState.get; - var setInternalState$1 = internalState.set; - var getInternalPromiseState = internalState.getterFor(PROMISE); - var PromiseConstructor = nativePromiseConstructor; - var TypeError$1 = global_1.TypeError; - var document$2 = global_1.document; - var process$3 = global_1.process; - var $fetch = getBuiltIn('fetch'); - var newPromiseCapability$1 = newPromiseCapability.f; - var newGenericPromiseCapability = newPromiseCapability$1; - var IS_NODE$1 = classofRaw(process$3) == 'process'; - var DISPATCH_EVENT = !!(document$2 && document$2.createEvent && global_1.dispatchEvent); - var UNHANDLED_REJECTION = 'unhandledrejection'; - var REJECTION_HANDLED = 'rejectionhandled'; - var PENDING = 0; - var FULFILLED = 1; - var REJECTED = 2; - var HANDLED = 1; - var UNHANDLED = 2; - var Internal, OwnPromiseCapability, PromiseWrapper, nativeThen; - - var FORCED = isForced_1(PROMISE, function () { - var GLOBAL_CORE_JS_PROMISE = inspectSource(PromiseConstructor) !== String(PromiseConstructor); - if (!GLOBAL_CORE_JS_PROMISE) { - // V8 6.6 (Node 10 and Chrome 66) have a bug with resolving custom thenables - // https://bugs.chromium.org/p/chromium/issues/detail?id=830565 - // We can't detect it synchronously, so just check versions - if (engineV8Version === 66) return true; - // Unhandled rejections tracking support, NodeJS Promise without it fails @@species test - if (!IS_NODE$1 && typeof PromiseRejectionEvent != 'function') return true; - } - // We need Promise#finally in the pure version for preventing prototype pollution - if (isPure && !PromiseConstructor.prototype['finally']) return true; - // We can't use @@species feature detection in V8 since it causes - // deoptimization and performance degradation - // https://github.com/zloirock/core-js/issues/679 - if (engineV8Version >= 51 && /native code/.test(PromiseConstructor)) return false; - // Detect correctness of subclassing with @@species support - var promise = PromiseConstructor.resolve(1); - var FakePromise = function (exec) { - exec(function () { /* empty */ }, function () { /* empty */ }); - }; - var constructor = promise.constructor = {}; - constructor[SPECIES$4] = FakePromise; - return !(promise.then(function () { /* empty */ }) instanceof FakePromise); - }); - - var INCORRECT_ITERATION = FORCED || !checkCorrectnessOfIteration(function (iterable) { - PromiseConstructor.all(iterable)['catch'](function () { /* empty */ }); - }); - - // helpers - var isThenable = function (it) { - var then; - return isObject(it) && typeof (then = it.then) == 'function' ? then : false; - }; - - var notify$1 = function (promise, state, isReject) { - if (state.notified) return; - state.notified = true; - var chain = state.reactions; - microtask(function () { - var value = state.value; - var ok = state.state == FULFILLED; - var index = 0; - // variable length - can't use forEach - while (chain.length > index) { - var reaction = chain[index++]; - var handler = ok ? reaction.ok : reaction.fail; - var resolve = reaction.resolve; - var reject = reaction.reject; - var domain = reaction.domain; - var result, then, exited; - try { - if (handler) { - if (!ok) { - if (state.rejection === UNHANDLED) onHandleUnhandled(promise, state); - state.rejection = HANDLED; - } - if (handler === true) result = value; - else { - if (domain) domain.enter(); - result = handler(value); // can throw - if (domain) { - domain.exit(); - exited = true; - } - } - if (result === reaction.promise) { - reject(TypeError$1('Promise-chain cycle')); - } else if (then = isThenable(result)) { - then.call(result, resolve, reject); - } else resolve(result); - } else reject(value); - } catch (error) { - if (domain && !exited) domain.exit(); - reject(error); - } - } - state.reactions = []; - state.notified = false; - if (isReject && !state.rejection) onUnhandled(promise, state); - }); - }; - - var dispatchEvent = function (name, promise, reason) { - var event, handler; - if (DISPATCH_EVENT) { - event = document$2.createEvent('Event'); - event.promise = promise; - event.reason = reason; - event.initEvent(name, false, true); - global_1.dispatchEvent(event); - } else event = { promise: promise, reason: reason }; - if (handler = global_1['on' + name]) handler(event); - else if (name === UNHANDLED_REJECTION) hostReportErrors('Unhandled promise rejection', reason); - }; - - var onUnhandled = function (promise, state) { - task$1.call(global_1, function () { - var value = state.value; - var IS_UNHANDLED = isUnhandled(state); - var result; - if (IS_UNHANDLED) { - result = perform(function () { - if (IS_NODE$1) { - process$3.emit('unhandledRejection', value, promise); - } else dispatchEvent(UNHANDLED_REJECTION, promise, value); - }); - // Browsers should not trigger `rejectionHandled` event if it was handled here, NodeJS - should - state.rejection = IS_NODE$1 || isUnhandled(state) ? UNHANDLED : HANDLED; - if (result.error) throw result.value; - } - }); - }; - - var isUnhandled = function (state) { - return state.rejection !== HANDLED && !state.parent; - }; - - var onHandleUnhandled = function (promise, state) { - task$1.call(global_1, function () { - if (IS_NODE$1) { - process$3.emit('rejectionHandled', promise); - } else dispatchEvent(REJECTION_HANDLED, promise, state.value); - }); - }; - - var bind = function (fn, promise, state, unwrap) { - return function (value) { - fn(promise, state, value, unwrap); - }; - }; - - var internalReject = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - state.value = value; - state.state = REJECTED; - notify$1(promise, state, true); - }; - - var internalResolve = function (promise, state, value, unwrap) { - if (state.done) return; - state.done = true; - if (unwrap) state = unwrap; - try { - if (promise === value) throw TypeError$1("Promise can't be resolved itself"); - var then = isThenable(value); - if (then) { - microtask(function () { - var wrapper = { done: false }; - try { - then.call(value, - bind(internalResolve, promise, wrapper, state), - bind(internalReject, promise, wrapper, state) - ); - } catch (error) { - internalReject(promise, wrapper, error, state); - } - }); - } else { - state.value = value; - state.state = FULFILLED; - notify$1(promise, state, false); - } - } catch (error) { - internalReject(promise, { done: false }, error, state); - } - }; - - // constructor polyfill - if (FORCED) { - // 25.4.3.1 Promise(executor) - PromiseConstructor = function Promise(executor) { - anInstance(this, PromiseConstructor, PROMISE); - aFunction$1(executor); - Internal.call(this); - var state = getInternalState$1(this); - try { - executor(bind(internalResolve, this, state), bind(internalReject, this, state)); - } catch (error) { - internalReject(this, state, error); - } - }; - // eslint-disable-next-line no-unused-vars - Internal = function Promise(executor) { - setInternalState$1(this, { - type: PROMISE, - done: false, - notified: false, - parent: false, - reactions: [], - rejection: false, - state: PENDING, - value: undefined - }); - }; - Internal.prototype = redefineAll(PromiseConstructor.prototype, { - // `Promise.prototype.then` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.then - then: function then(onFulfilled, onRejected) { - var state = getInternalPromiseState(this); - var reaction = newPromiseCapability$1(speciesConstructor(this, PromiseConstructor)); - reaction.ok = typeof onFulfilled == 'function' ? onFulfilled : true; - reaction.fail = typeof onRejected == 'function' && onRejected; - reaction.domain = IS_NODE$1 ? process$3.domain : undefined; - state.parent = true; - state.reactions.push(reaction); - if (state.state != PENDING) notify$1(this, state, false); - return reaction.promise; - }, - // `Promise.prototype.catch` method - // https://tc39.github.io/ecma262/#sec-promise.prototype.catch - 'catch': function (onRejected) { - return this.then(undefined, onRejected); - } - }); - OwnPromiseCapability = function () { - var promise = new Internal(); - var state = getInternalState$1(promise); - this.promise = promise; - this.resolve = bind(internalResolve, promise, state); - this.reject = bind(internalReject, promise, state); - }; - newPromiseCapability.f = newPromiseCapability$1 = function (C) { - return C === PromiseConstructor || C === PromiseWrapper - ? new OwnPromiseCapability(C) - : newGenericPromiseCapability(C); - }; - - if (!isPure && typeof nativePromiseConstructor == 'function') { - nativeThen = nativePromiseConstructor.prototype.then; - - // wrap native Promise#then for native async functions - redefine(nativePromiseConstructor.prototype, 'then', function then(onFulfilled, onRejected) { - var that = this; - return new PromiseConstructor(function (resolve, reject) { - nativeThen.call(that, resolve, reject); - }).then(onFulfilled, onRejected); - // https://github.com/zloirock/core-js/issues/640 - }, { unsafe: true }); - - // wrap fetch result - if (typeof $fetch == 'function') _export({ global: true, enumerable: true, forced: true }, { - // eslint-disable-next-line no-unused-vars - fetch: function fetch(input /* , init */) { - return promiseResolve(PromiseConstructor, $fetch.apply(global_1, arguments)); - } - }); - } - } - - _export({ global: true, wrap: true, forced: FORCED }, { - Promise: PromiseConstructor - }); - - setToStringTag(PromiseConstructor, PROMISE, false, true); - setSpecies(PROMISE); - - PromiseWrapper = getBuiltIn(PROMISE); - - // statics - _export({ target: PROMISE, stat: true, forced: FORCED }, { - // `Promise.reject` method - // https://tc39.github.io/ecma262/#sec-promise.reject - reject: function reject(r) { - var capability = newPromiseCapability$1(this); - capability.reject.call(undefined, r); - return capability.promise; - } - }); - - _export({ target: PROMISE, stat: true, forced: isPure || FORCED }, { - // `Promise.resolve` method - // https://tc39.github.io/ecma262/#sec-promise.resolve - resolve: function resolve(x) { - return promiseResolve(isPure && this === PromiseWrapper ? PromiseConstructor : this, x); - } - }); - - _export({ target: PROMISE, stat: true, forced: INCORRECT_ITERATION }, { - // `Promise.all` method - // https://tc39.github.io/ecma262/#sec-promise.all - all: function all(iterable) { - var C = this; - var capability = newPromiseCapability$1(C); - var resolve = capability.resolve; - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction$1(C.resolve); - var values = []; - var counter = 0; - var remaining = 1; - iterate_1(iterable, function (promise) { - var index = counter++; - var alreadyCalled = false; - values.push(undefined); - remaining++; - $promiseResolve.call(C, promise).then(function (value) { - if (alreadyCalled) return; - alreadyCalled = true; - values[index] = value; - --remaining || resolve(values); - }, reject); - }); - --remaining || resolve(values); - }); - if (result.error) reject(result.value); - return capability.promise; - }, - // `Promise.race` method - // https://tc39.github.io/ecma262/#sec-promise.race - race: function race(iterable) { - var C = this; - var capability = newPromiseCapability$1(C); - var reject = capability.reject; - var result = perform(function () { - var $promiseResolve = aFunction$1(C.resolve); - iterate_1(iterable, function (promise) { - $promiseResolve.call(C, promise).then(capability.resolve, reject); - }); - }); - if (result.error) reject(result.value); - return capability.promise; - } - }); - - // `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$2 = internalState.set; - var getInternalState$2 = internalState.getterFor(STRING_ITERATOR); - - // `String.prototype[@@iterator]` method - // https://tc39.github.io/ecma262/#sec-string.prototype-@@iterator - defineIterator(String, 'String', function (iterated) { - setInternalState$2(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$2(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 }; - }); - - // 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$5 = 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$5] !== ArrayValues) try { - createNonEnumerableProperty(CollectionPrototype, ITERATOR$5, ArrayValues); - } catch (error) { - CollectionPrototype[ITERATOR$5] = 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]; - } - } - } - } - function _typeof(obj) { if (typeof Symbol === "function" && typeof Symbol.iterator === "symbol") { _typeof = function (obj) { @@ -2055,671 +30,104 @@ if (info.done) { resolve(value); } else { - Promise.resolve(value).then(_next, _throw); - } - } - - function _asyncToGenerator(fn) { - return function () { - var self = this, - args = arguments; - return new Promise(function (resolve, reject) { - var gen = fn.apply(self, args); - - function _next(value) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); - } - - function _throw(err) { - asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); - } - - _next(undefined); - }); - }; - } - - 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 _objectSpread(target) { - for (var i = 1; i < arguments.length; i++) { - var source = arguments[i] != null ? arguments[i] : {}; - var ownKeys = Object.keys(source); - - if (typeof Object.getOwnPropertySymbols === 'function') { - ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { - return Object.getOwnPropertyDescriptor(source, sym).enumerable; - })); - } - - ownKeys.forEach(function (key) { - _defineProperty(target, key, source[key]); - }); - } - - return target; - } - - function _slicedToArray(arr, i) { - return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); - } - - function _arrayWithHoles(arr) { - if (Array.isArray(arr)) return arr; - } - - function _iterableToArrayLimit(arr, i) { - 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 _nonIterableRest() { - throw new TypeError("Invalid attempt to destructure non-iterable instance"); - } - - 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 f$7 = wellKnownSymbol; - - var wellKnownSymbolWrapped = { - f: f$7 - }; - - var defineProperty$3 = objectDefineProperty.f; - - var defineWellKnownSymbol = function (NAME) { - var Symbol = path.Symbol || (path.Symbol = {}); - if (!has(Symbol, NAME)) defineProperty$3(Symbol, NAME, { - value: wellKnownSymbolWrapped.f(NAME) - }); - }; - - var $forEach = arrayIteration.forEach; - - var HIDDEN = sharedKey('hidden'); - var SYMBOL = 'Symbol'; - var PROTOTYPE$1 = 'prototype'; - var TO_PRIMITIVE = wellKnownSymbol('toPrimitive'); - var setInternalState$3 = internalState.set; - var getInternalState$3 = internalState.getterFor(SYMBOL); - var ObjectPrototype$1 = Object[PROTOTYPE$1]; - var $Symbol = global_1.Symbol; - var $stringify = getBuiltIn('JSON', 'stringify'); - var nativeGetOwnPropertyDescriptor$1 = objectGetOwnPropertyDescriptor.f; - var nativeDefineProperty$1 = objectDefineProperty.f; - var nativeGetOwnPropertyNames$1 = objectGetOwnPropertyNamesExternal.f; - var nativePropertyIsEnumerable$1 = objectPropertyIsEnumerable.f; - var AllSymbols = shared('symbols'); - var ObjectPrototypeSymbols = shared('op-symbols'); - var StringToSymbolRegistry = shared('string-to-symbol-registry'); - var SymbolToStringRegistry = shared('symbol-to-string-registry'); - var WellKnownSymbolsStore$1 = shared('wks'); - var QObject = global_1.QObject; - // Don't use setters in Qt Script, https://github.com/zloirock/core-js/issues/173 - var USE_SETTER = !QObject || !QObject[PROTOTYPE$1] || !QObject[PROTOTYPE$1].findChild; - - // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 - var setSymbolDescriptor = descriptors && fails(function () { - return objectCreate(nativeDefineProperty$1({}, 'a', { - get: function () { return nativeDefineProperty$1(this, 'a', { value: 7 }).a; } - })).a != 7; - }) ? function (O, P, Attributes) { - var ObjectPrototypeDescriptor = nativeGetOwnPropertyDescriptor$1(ObjectPrototype$1, P); - if (ObjectPrototypeDescriptor) delete ObjectPrototype$1[P]; - nativeDefineProperty$1(O, P, Attributes); - 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$3(symbol, { - type: SYMBOL, - tag: tag, - description: description - }); - if (!descriptors) symbol.description = description; - return symbol; - }; - - var isSymbol = useSymbolAsUid ? function (it) { - return typeof it == 'symbol'; - } : function (it) { - return Object(it) instanceof $Symbol; - }; - - var $defineProperty = function defineProperty(O, P, Attributes) { - if (O === ObjectPrototype$1) $defineProperty(ObjectPrototypeSymbols, P, Attributes); - anObject(O); - var key = toPrimitive(P, true); - anObject(Attributes); - if (has(AllSymbols, key)) { - if (!Attributes.enumerable) { - if (!has(O, HIDDEN)) nativeDefineProperty$1(O, HIDDEN, createPropertyDescriptor(1, {})); - O[HIDDEN][key] = true; - } else { - if (has(O, HIDDEN) && O[HIDDEN][key]) O[HIDDEN][key] = false; - Attributes = objectCreate(Attributes, { enumerable: createPropertyDescriptor(0, false) }); - } return setSymbolDescriptor(O, key, Attributes); - } return nativeDefineProperty$1(O, key, Attributes); - }; - - var $defineProperties = function defineProperties(O, Properties) { - anObject(O); - var properties = toIndexedObject(Properties); - var keys = objectKeys(properties).concat($getOwnPropertySymbols(properties)); - $forEach(keys, function (key) { - if (!descriptors || $propertyIsEnumerable.call(properties, key)) $defineProperty(O, key, properties[key]); - }); - return O; - }; - - var $create = function create(O, Properties) { - return Properties === undefined ? objectCreate(O) : $defineProperties(objectCreate(O), Properties); - }; - - var $propertyIsEnumerable = function propertyIsEnumerable(V) { - var P = toPrimitive(V, true); - var enumerable = nativePropertyIsEnumerable$1.call(this, P); - 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$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; - } - return descriptor; - }; - - var $getOwnPropertyNames = function getOwnPropertyNames(O) { - var names = nativeGetOwnPropertyNames$1(toIndexedObject(O)); - var result = []; - $forEach(names, function (key) { - if (!has(AllSymbols, key) && !has(hiddenKeys, key)) result.push(key); - }); - return result; - }; - - var $getOwnPropertySymbols = function getOwnPropertySymbols(O) { - 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$1, key))) { - result.push(AllSymbols[key]); - } - }); - return result; - }; - - // `Symbol` constructor - // https://tc39.github.io/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$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$1, tag, { configurable: true, set: setter }); - return wrap(tag, description); - }; - - redefine($Symbol[PROTOTYPE$1], 'toString', function toString() { - return getInternalState$3(this).tag; - }); - - redefine($Symbol, 'withoutSetter', function (description) { - return wrap(uid(description), description); - }); - - objectPropertyIsEnumerable.f = $propertyIsEnumerable; - objectDefineProperty.f = $defineProperty; - objectGetOwnPropertyDescriptor.f = $getOwnPropertyDescriptor; - objectGetOwnPropertyNames.f = objectGetOwnPropertyNamesExternal.f = $getOwnPropertyNames; - objectGetOwnPropertySymbols.f = $getOwnPropertySymbols; - - wellKnownSymbolWrapped.f = function (name) { - return wrap(wellKnownSymbol(name), name); - }; - - if (descriptors) { - // https://github.com/tc39/proposal-Symbol-description - nativeDefineProperty$1($Symbol[PROTOTYPE$1], 'description', { - configurable: true, - get: function description() { - return getInternalState$3(this).description; - } - }); - { - redefine(ObjectPrototype$1, 'propertyIsEnumerable', $propertyIsEnumerable, { unsafe: true }); - } - } - } - - _export({ global: true, wrap: true, forced: !nativeSymbol, sham: !nativeSymbol }, { - Symbol: $Symbol - }); - - $forEach(objectKeys(WellKnownSymbolsStore$1), function (name) { - defineWellKnownSymbol(name); - }); - - _export({ target: SYMBOL, stat: true, forced: !nativeSymbol }, { - // `Symbol.for` method - // https://tc39.github.io/ecma262/#sec-symbol.for - 'for': function (key) { - var string = String(key); - if (has(StringToSymbolRegistry, string)) return StringToSymbolRegistry[string]; - var symbol = $Symbol(string); - StringToSymbolRegistry[string] = symbol; - SymbolToStringRegistry[symbol] = string; - return symbol; - }, - // `Symbol.keyFor` method - // https://tc39.github.io/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]; - }, - useSetter: function () { USE_SETTER = true; }, - useSimple: function () { USE_SETTER = false; } - }); - - _export({ target: 'Object', stat: true, forced: !nativeSymbol, sham: !descriptors }, { - // `Object.create` method - // https://tc39.github.io/ecma262/#sec-object.create - create: $create, - // `Object.defineProperty` method - // https://tc39.github.io/ecma262/#sec-object.defineproperty - defineProperty: $defineProperty, - // `Object.defineProperties` method - // https://tc39.github.io/ecma262/#sec-object.defineproperties - defineProperties: $defineProperties, - // `Object.getOwnPropertyDescriptor` method - // https://tc39.github.io/ecma262/#sec-object.getownpropertydescriptors - getOwnPropertyDescriptor: $getOwnPropertyDescriptor - }); - - _export({ target: 'Object', stat: true, forced: !nativeSymbol }, { - // `Object.getOwnPropertyNames` method - // https://tc39.github.io/ecma262/#sec-object.getownpropertynames - getOwnPropertyNames: $getOwnPropertyNames, - // `Object.getOwnPropertySymbols` method - // https://tc39.github.io/ecma262/#sec-object.getownpropertysymbols - getOwnPropertySymbols: $getOwnPropertySymbols - }); - - // Chrome 38 and 39 `Object.getOwnPropertySymbols` fails on primitives - // https://bugs.chromium.org/p/v8/issues/detail?id=3443 - _export({ target: 'Object', stat: true, forced: fails(function () { objectGetOwnPropertySymbols.f(1); }) }, { - getOwnPropertySymbols: function getOwnPropertySymbols(it) { - return objectGetOwnPropertySymbols.f(toObject(it)); - } - }); - - // `JSON.stringify` method behavior with symbols - // https://tc39.github.io/ecma262/#sec-json.stringify - if ($stringify) { - var FORCED_JSON_STRINGIFY = !nativeSymbol || fails(function () { - var symbol = $Symbol(); - // MS Edge converts symbol values to JSON as {} - return $stringify([symbol]) != '[null]' - // WebKit converts symbol values to JSON as null - || $stringify({ a: symbol }) != '{}' - // V8 throws on boxed symbols - || $stringify(Object(symbol)) != '{}'; - }); - - _export({ target: 'JSON', stat: true, forced: FORCED_JSON_STRINGIFY }, { - // eslint-disable-next-line no-unused-vars - stringify: function stringify(it, replacer, space) { - var args = [it]; - var index = 1; - var $replacer; - while (arguments.length > index) args.push(arguments[index++]); - $replacer = replacer; - if (!isObject(replacer) && it === undefined || isSymbol(it)) return; // IE8 returns string on undefined - if (!isArray(replacer)) replacer = function (key, value) { - if (typeof $replacer == 'function') value = $replacer.call(this, key, value); - if (!isSymbol(value)) return value; - }; - args[1] = replacer; - return $stringify.apply(null, args); - } - }); - } - - // `Symbol.prototype[@@toPrimitive]` method - // https://tc39.github.io/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 - setToStringTag($Symbol, SYMBOL); - - hiddenKeys[HIDDEN] = true; - - var defineProperty$4 = objectDefineProperty.f; - - - var NativeSymbol = global_1.Symbol; - - if (descriptors && typeof NativeSymbol == 'function' && (!('description' in NativeSymbol.prototype) || - // Safari 12 bug - NativeSymbol().description !== undefined - )) { - var EmptyStringDescriptionStore = {}; - // wrap Symbol constructor for correct work with undefined description - var SymbolWrapper = function Symbol() { - var description = arguments.length < 1 || arguments[0] === undefined ? undefined : String(arguments[0]); - var result = this instanceof SymbolWrapper - ? new NativeSymbol(description) - // in Edge 13, String(Symbol(undefined)) === 'Symbol(undefined)' - : description === undefined ? NativeSymbol() : NativeSymbol(description); - if (description === '') EmptyStringDescriptionStore[result] = true; - return result; - }; - copyConstructorProperties(SymbolWrapper, NativeSymbol); - var symbolPrototype = SymbolWrapper.prototype = NativeSymbol.prototype; - symbolPrototype.constructor = SymbolWrapper; - - var symbolToString = symbolPrototype.toString; - var native = String(NativeSymbol('test')) == 'Symbol(test)'; - var regexp = /^Symbol\((.*)\)[^)]+$/; - defineProperty$4(symbolPrototype, 'description', { - configurable: true, - get: function description() { - var symbol = isObject(this) ? this.valueOf() : this; - var string = symbolToString.call(symbol); - if (has(EmptyStringDescriptionStore, symbol)) return ''; - var desc = native ? string.slice(7, -1) : string.replace(regexp, '$1'); - return desc === '' ? undefined : desc; - } - }); - - _export({ global: true, forced: true }, { - Symbol: SymbolWrapper - }); - } - - // `Symbol.asyncIterator` well-known symbol - // https://tc39.github.io/ecma262/#sec-symbol.asynciterator - defineWellKnownSymbol('asyncIterator'); - - // `Symbol.iterator` well-known symbol - // https://tc39.github.io/ecma262/#sec-symbol.iterator - defineWellKnownSymbol('iterator'); - - // `Symbol.toStringTag` well-known symbol - // https://tc39.github.io/ecma262/#sec-symbol.tostringtag - defineWellKnownSymbol('toStringTag'); - - 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 $forEach$1 = arrayIteration.forEach; - - - - var STRICT_METHOD = arrayMethodIsStrict('forEach'); - var USES_TO_LENGTH$1 = arrayMethodUsesToLength('forEach'); - - // `Array.prototype.forEach` method implementation - // https://tc39.github.io/ecma262/#sec-array.prototype.foreach - var arrayForEach = (!STRICT_METHOD || !USES_TO_LENGTH$1) ? 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 nativeReverse = [].reverse; - var test$1 = [1, 2]; - - // `Array.prototype.reverse` method - // https://tc39.github.io/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 - if (isArray(this)) this.length = this.length; - return nativeReverse.call(this); + Promise.resolve(value).then(_next, _throw); } - }); + } - 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; - }; + function _asyncToGenerator(fn) { + return function () { + var self = this, + args = arguments; + return new Promise(function (resolve, reject) { + var gen = fn.apply(self, args); - var HAS_SPECIES_SUPPORT$1 = arrayMethodHasSpeciesSupport('slice'); - var USES_TO_LENGTH$2 = arrayMethodUsesToLength('slice', { ACCESSORS: true, 0: 0, 1: 2 }); - - var SPECIES$5 = 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$2 }, { - 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; + function _next(value) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value); } - if (Constructor === Array || Constructor === undefined) { - return nativeSlice.call(O, k, fin); + + function _throw(err) { + asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err); } - } - 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 DatePrototype = Date.prototype; - var INVALID_DATE = 'Invalid Date'; - var TO_STRING = 'toString'; - var nativeDateToString = DatePrototype[TO_STRING]; - var getTime = DatePrototype.getTime; - - // `Date.prototype.toString` method - // https://tc39.github.io/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 - return value === value ? nativeDateToString.call(this) : INVALID_DATE; - }); + _next(undefined); + }); + }; } - var defineProperty$5 = objectDefineProperty.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; + } + + return obj; + } - var FunctionPrototype = Function.prototype; - var FunctionPrototypeToString = FunctionPrototype.toString; - var nameRE = /^\s*function ([^ (]*)/; - var NAME = 'name'; + function _objectSpread(target) { + for (var i = 1; i < arguments.length; i++) { + var source = arguments[i] != null ? arguments[i] : {}; + var ownKeys = Object.keys(source); - // Function instances `.name` property - // https://tc39.github.io/ecma262/#sec-function-instances-name - if (descriptors && !(NAME in FunctionPrototype)) { - defineProperty$5(FunctionPrototype, NAME, { - configurable: true, - get: function () { - try { - return FunctionPrototypeToString.call(this).match(nameRE)[1]; - } catch (error) { - return ''; - } + if (typeof Object.getOwnPropertySymbols === 'function') { + ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function (sym) { + return Object.getOwnPropertyDescriptor(source, sym).enumerable; + })); } - }); + + ownKeys.forEach(function (key) { + _defineProperty(target, key, source[key]); + }); + } + + return target; } - // JSON[@@toStringTag] property - // https://tc39.github.io/ecma262/#sec-json-@@tostringtag - setToStringTag(global_1.JSON, 'JSON', true); + function _slicedToArray(arr, i) { + return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _nonIterableRest(); + } - // Math[@@toStringTag] property - // https://tc39.github.io/ecma262/#sec-math-@@tostringtag - setToStringTag(Math, 'Math', true); + function _arrayWithHoles(arr) { + if (Array.isArray(arr)) return arr; + } - // `Object.create` method - // https://tc39.github.io/ecma262/#sec-object.create - _export({ target: 'Object', stat: true, sham: !descriptors }, { - create: objectCreate - }); + function _iterableToArrayLimit(arr, i) { + var _arr = []; + var _n = true; + var _d = false; + var _e = undefined; - var FAILS_ON_PRIMITIVES$1 = fails(function () { objectGetPrototypeOf(1); }); + try { + for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { + _arr.push(_s.value); - // `Object.getPrototypeOf` method - // https://tc39.github.io/ecma262/#sec-object.getprototypeof - _export({ target: 'Object', stat: true, forced: FAILS_ON_PRIMITIVES$1, sham: !correctPrototypeGetter }, { - getPrototypeOf: function getPrototypeOf(it) { - return objectGetPrototypeOf(toObject(it)); + 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; + } } - }); - - // `Object.setPrototypeOf` method - // https://tc39.github.io/ecma262/#sec-object.setprototypeof - _export({ target: 'Object', stat: true }, { - setPrototypeOf: objectSetPrototypeOf - }); - // `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; - }; + return _arr; + } - 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 }); + function _nonIterableRest() { + throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - 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; - } + function createCommonjsModule(fn, module) { + return module = { exports: {} }, fn(module, module.exports), module.exports; } var runtime_1 = createCommonjsModule(function (module) { @@ -3489,121 +897,8 @@ * greet('Alice'); //=> 'Hello, Alice!' */ - // 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; - }; - - // 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 whitespace = '[' + whitespaces + ']'; - var ltrim = RegExp('^' + whitespace + whitespace + '*'); - var rtrim = RegExp(whitespace + whitespace + '*$'); - - // `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; - }; - }; - - 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 getOwnPropertyNames = objectGetOwnPropertyNames.f; - var getOwnPropertyDescriptor$3 = objectGetOwnPropertyDescriptor.f; - var defineProperty$6 = objectDefineProperty.f; - var trim = stringTrim.trim; - - var NUMBER = 'Number'; - var NativeNumber = global_1[NUMBER]; - var NumberPrototype = NativeNumber.prototype; - - // Opera ~12 has broken Object#toString - var BROKEN_CLASSOF = classofRaw(objectCreate(NumberPrototype)) == NUMBER; - - // `ToNumber` abstract operation - // https://tc39.github.io/ecma262/#sec-tonumber - var toNumber = function (argument) { - var it = toPrimitive(argument, false); - var first, third, radix, maxCode, digits, length, index, code; - if (typeof it == 'string' && it.length > 2) { - it = trim(it); - first = it.charCodeAt(0); - if (first === 43 || first === 45) { - third = it.charCodeAt(2); - if (third === 88 || third === 120) return NaN; // Number('+0x1') should be NaN, old V8 fix - } else if (first === 48) { - switch (it.charCodeAt(1)) { - case 66: case 98: radix = 2; maxCode = 49; break; // fast equal of /^0b[01]+$/i - case 79: case 111: radix = 8; maxCode = 55; break; // fast equal of /^0o[0-7]+$/i - default: return +it; - } - digits = it.slice(2); - length = digits.length; - for (index = 0; index < length; index++) { - code = digits.charCodeAt(index); - // parseInt parses a string to a first unavailable symbol - // but ToNumber should return NaN if a string contains unavailable symbols - if (code < 48 || code > maxCode) return NaN; - } return parseInt(digits, radix); - } - } return +it; - }; - - // `Number` constructor - // https://tc39.github.io/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; - var dummy = this; - return dummy instanceof NumberWrapper - // check on 1..constructor(foo) case - && (BROKEN_CLASSOF ? fails(function () { NumberPrototype.valueOf.call(dummy); }) : classofRaw(dummy) != NUMBER) - ? inheritIfRequired(new NativeNumber(toNumber(it)), dummy, NumberWrapper) : toNumber(it); - }; - for (var keys$1 = descriptors ? getOwnPropertyNames(NativeNumber) : ( - // ES3: - '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' - ).split(','), j = 0, key; keys$1.length > j; j++) { - if (has(NativeNumber, key = keys$1[j]) && !has(NumberWrapper, key)) { - defineProperty$6(NumberWrapper, key, getOwnPropertyDescriptor$3(NativeNumber, key)); - } - } - NumberWrapper.prototype = NumberPrototype; - NumberPrototype.constructor = NumberWrapper; - redefine(global_1, NUMBER, NumberWrapper); - } - function _isPlaceholder(a) { - return a != null && _typeof(a) === 'object' && a['@@functional/placeholder'] === true; + return a != null && typeof a === 'object' && a['@@functional/placeholder'] === true; } /** @@ -3918,12 +1213,6 @@ }; } - // `Array.isArray` method - // https://tc39.github.io/ecma262/#sec-array.isarray - _export({ target: 'Array', stat: true }, { - isArray: isArray - }); - /** * Tests whether or not an object is an array. * @@ -3990,11 +1279,11 @@ } var _xfBase = { - init: function init() { + init: function () { return this.xf['@@transducer/init'](); }, - result: function result(_result) { - return this.xf['@@transducer/result'](_result); + result: function (result) { + return this.xf['@@transducer/result'](result); } }; @@ -4016,7 +1305,7 @@ * R.max('a', 'b'); //=> 'b' */ - var max$2 = + var max = /*#__PURE__*/ _curry2(function max(a, b) { return b > a ? b : a; @@ -4035,57 +1324,6 @@ return result; } - // `Array.prototype.{ reduce, reduceRight }` methods implementation - var createMethod$4 = function (IS_RIGHT) { - return function (that, callbackfn, argumentsLength, memo) { - aFunction$1(callbackfn); - var O = toObject(that); - var self = indexedObject(O); - var length = toLength(O.length); - var index = IS_RIGHT ? length - 1 : 0; - var i = IS_RIGHT ? -1 : 1; - if (argumentsLength < 2) while (true) { - if (index in self) { - memo = self[index]; - index += i; - break; - } - index += i; - if (IS_RIGHT ? index < 0 : length <= index) { - throw TypeError('Reduce of empty array with no initial value'); - } - } - for (;IS_RIGHT ? index >= 0 : length > index; index += i) if (index in self) { - memo = callbackfn(memo, self[index], index, O); - } - return memo; - }; - }; - - var arrayReduce = { - // `Array.prototype.reduce` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - left: createMethod$4(false), - // `Array.prototype.reduceRight` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduceright - right: createMethod$4(true) - }; - - var $reduce = arrayReduce.left; - - - - var STRICT_METHOD$1 = arrayMethodIsStrict('reduce'); - var USES_TO_LENGTH$3 = arrayMethodUsesToLength('reduce', { 1: 0 }); - - // `Array.prototype.reduce` method - // https://tc39.github.io/ecma262/#sec-array.prototype.reduce - _export({ target: 'Array', proto: true, forced: !STRICT_METHOD$1 || !USES_TO_LENGTH$3 }, { - reduce: function reduce(callbackfn /* , initialValue */) { - return $reduce(this, callbackfn, arguments.length, arguments.length > 1 ? arguments[1] : undefined); - } - }); - function _isString(x) { return Object.prototype.toString.call(x) === '[object String]'; } @@ -4119,7 +1357,7 @@ return false; } - if (_typeof(x) !== 'object') { + if (typeof x !== 'object') { return false; } @@ -4191,7 +1429,7 @@ * @symb R.bind(f, o)(a, b) = f.call(o, a, b) */ - var bind$1 = + var bind = /*#__PURE__*/ _curry2(function bind(fn, thisObj) { return _arity(fn.length, function () { @@ -4235,7 +1473,7 @@ } function _methodReduce(xf, acc, obj, methodName) { - return xf['@@transducer/result'](obj[methodName](bind$1(xf['@@transducer/step'], xf), acc)); + return xf['@@transducer/result'](obj[methodName](bind(xf['@@transducer/step'], xf), acc)); } var symIterator = typeof Symbol !== 'undefined' ? Symbol.iterator : '@@iterator'; @@ -4295,13 +1533,13 @@ return Object.prototype.hasOwnProperty.call(obj, prop); } - var toString$2 = Object.prototype.toString; + var toString = Object.prototype.toString; var _isArguments = /*#__PURE__*/ function () { - return toString$2.call(arguments) === '[object Arguments]' ? function _isArguments(x) { - return toString$2.call(x) === '[object Arguments]'; + return toString.call(arguments) === '[object Arguments]' ? function _isArguments(x) { + return toString.call(x) === '[object Arguments]'; } : function _isArguments(x) { return _has('callee', x); }; @@ -4354,7 +1592,7 @@ */ - var keys$2 = typeof Object.keys === 'function' && !hasArgsEnumBug ? + var keys = typeof Object.keys === 'function' && !hasArgsEnumBug ? /*#__PURE__*/ _curry1(function keys(obj) { return Object(obj) !== obj ? [] : Object.keys(obj); @@ -4444,27 +1682,13 @@ return _reduce(function (acc, key) { acc[key] = fn(functor[key]); return acc; - }, {}, keys$2(functor)); + }, {}, keys(functor)); default: return _map(fn, functor); } })); - var floor$1 = Math.floor; - - // `Number.isInteger` method implementation - // https://tc39.github.io/ecma262/#sec-number.isinteger - var isInteger = function isInteger(it) { - return !isObject(it) && isFinite(it) && floor$1(it) === it; - }; - - // `Number.isInteger` method - // https://tc39.github.io/ecma262/#sec-number.isinteger - _export({ target: 'Number', stat: true }, { - isInteger: isInteger - }); - /** * Determine if the passed argument is an integer. * @@ -4573,7 +1797,7 @@ * R.path(['a', 'b', -2], {a: {b: [1, 2, 3]}}); //=> 2 */ - var path$1 = + var path = /*#__PURE__*/ _curry2(function path(pathAr, obj) { return paths([pathAr], obj)[0]; @@ -4604,7 +1828,7 @@ var prop = /*#__PURE__*/ _curry2(function prop(p, obj) { - return path$1([p], obj); + return path([p], obj); }); /** @@ -4729,54 +1953,6 @@ }, [], applyF); }); - var IS_CONCAT_SPREADABLE = wellKnownSymbol('isConcatSpreadable'); - var MAX_SAFE_INTEGER = 0x1FFFFFFFFFFFFF; - var MAXIMUM_ALLOWED_INDEX_EXCEEDED = 'Maximum allowed index exceeded'; - - // We can't use this feature detection in V8 since it causes - // deoptimization and serious performance degradation - // https://github.com/zloirock/core-js/issues/679 - var IS_CONCAT_SPREADABLE_SUPPORT = engineV8Version >= 51 || !fails(function () { - var array = []; - array[IS_CONCAT_SPREADABLE] = false; - return array.concat()[0] !== array; - }); - - var SPECIES_SUPPORT = arrayMethodHasSpeciesSupport('concat'); - - var isConcatSpreadable = function (O) { - if (!isObject(O)) return false; - var spreadable = O[IS_CONCAT_SPREADABLE]; - return spreadable !== undefined ? !!spreadable : isArray(O); - }; - - var FORCED$1 = !IS_CONCAT_SPREADABLE_SUPPORT || !SPECIES_SUPPORT; - - // `Array.prototype.concat` method - // https://tc39.github.io/ecma262/#sec-array.prototype.concat - // with adding support of @@isConcatSpreadable and @@species - _export({ target: 'Array', proto: true, forced: FORCED$1 }, { - concat: function concat(arg) { // eslint-disable-line no-unused-vars - var O = toObject(this); - var A = arraySpeciesCreate(O, 0); - var n = 0; - var i, k, length, len, E; - for (i = -1, length = arguments.length; i < length; i++) { - E = i === -1 ? O : arguments[i]; - if (isConcatSpreadable(E)) { - len = toLength(E.length); - if (n + len > MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); - for (k = 0; k < len; k++, n++) if (k in E) createProperty(A, n, E[k]); - } else { - if (n >= MAX_SAFE_INTEGER) throw TypeError(MAXIMUM_ALLOWED_INDEX_EXCEEDED); - createProperty(A, n++, E); - } - } - A.length = n; - return A; - } - }); - function _isFunction(x) { var type = Object.prototype.toString.call(x); return type === '[object Function]' || type === '[object AsyncFunction]' || type === '[object GeneratorFunction]' || type === '[object AsyncGeneratorFunction]'; @@ -4967,13 +2143,13 @@ }; } - var preservingReduced = function preservingReduced(xf) { + var preservingReduced = function (xf) { return { '@@transducer/init': _xfBase.init, - '@@transducer/result': function transducerResult(result) { + '@@transducer/result': function (result) { return xf['@@transducer/result'](result); }, - '@@transducer/step': function transducerStep(result, input) { + '@@transducer/step': function (result, input) { var ret = xf['@@transducer/step'](result, input); return ret['@@transducer/reduced'] ? _forceReduced(ret) : ret; } @@ -4984,10 +2160,10 @@ var rxf = preservingReduced(xf); return { '@@transducer/init': _xfBase.init, - '@@transducer/result': function transducerResult(result) { + '@@transducer/result': function (result) { return rxf['@@transducer/result'](result); }, - '@@transducer/step': function transducerStep(result, input) { + '@@transducer/step': function (result, input) { return !_isArrayLike(input) ? _reduce(rxf, result, [input]) : _reduce(rxf, result, input); } }; @@ -5040,209 +2216,6 @@ return _makeFlat(false)(map(fn, monad)); })); - var MATCH = wellKnownSymbol('match'); - - // `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'); - }; - - // 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 regexpStickyHelpers = { - UNSUPPORTED_Y: UNSUPPORTED_Y, - BROKEN_CARET: BROKEN_CARET - }; - - var defineProperty$7 = objectDefineProperty.f; - var getOwnPropertyNames$1 = objectGetOwnPropertyNames.f; - - - - - - var setInternalState$4 = internalState.set; - - - - var MATCH$1 = wellKnownSymbol('match'); - var NativeRegExp = global_1.RegExp; - var RegExpPrototype$1 = NativeRegExp.prototype; - var re1 = /a/g; - var re2 = /a/g; - - // "new" should create a new object, old webkit bug - var CORRECT_NEW = new NativeRegExp(re1) !== re1; - - var UNSUPPORTED_Y$1 = regexpStickyHelpers.UNSUPPORTED_Y; - - var FORCED$2 = descriptors && isForced_1('RegExp', (!CORRECT_NEW || UNSUPPORTED_Y$1 || fails(function () { - re2[MATCH$1] = false; - // RegExp constructor can alter flags and IsRegExp works correct with @@match - return NativeRegExp(re1) != re1 || NativeRegExp(re2) == re2 || NativeRegExp(re1, 'i') != '/a/i'; - }))); - - // `RegExp` constructor - // https://tc39.github.io/ecma262/#sec-regexp-constructor - if (FORCED$2) { - var RegExpWrapper = function RegExp(pattern, flags) { - var thisIsRegExp = this instanceof RegExpWrapper; - var patternIsRegExp = isRegexp(pattern); - var flagsAreUndefined = flags === undefined; - var sticky; - - if (!thisIsRegExp && patternIsRegExp && pattern.constructor === RegExpWrapper && flagsAreUndefined) { - return pattern; - } - - if (CORRECT_NEW) { - if (patternIsRegExp && !flagsAreUndefined) pattern = pattern.source; - } else if (pattern instanceof RegExpWrapper) { - if (flagsAreUndefined) flags = regexpFlags.call(pattern); - pattern = pattern.source; - } - - if (UNSUPPORTED_Y$1) { - sticky = !!flags && flags.indexOf('y') > -1; - if (sticky) flags = flags.replace(/y/g, ''); - } - - var result = inheritIfRequired( - CORRECT_NEW ? new NativeRegExp(pattern, flags) : NativeRegExp(pattern, flags), - thisIsRegExp ? this : RegExpPrototype$1, - RegExpWrapper - ); - - if (UNSUPPORTED_Y$1 && sticky) setInternalState$4(result, { sticky: sticky }); - - return result; - }; - var proxy = function (key) { - key in RegExpWrapper || defineProperty$7(RegExpWrapper, key, { - configurable: true, - get: function () { return NativeRegExp[key]; }, - set: function (it) { NativeRegExp[key] = it; } - }); - }; - var keys$3 = getOwnPropertyNames$1(NativeRegExp); - var index = 0; - while (keys$3.length > index) proxy(keys$3[index++]); - RegExpPrototype$1.constructor = RegExpWrapper; - RegExpWrapper.prototype = RegExpPrototype$1; - redefine(global_1, 'RegExp', RegExpWrapper); - } - - // https://tc39.github.io/ecma262/#sec-get-regexp-@@species - setSpecies('RegExp'); - - 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 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 UNSUPPORTED_Y$2 = regexpStickyHelpers.UNSUPPORTED_Y || regexpStickyHelpers.BROKEN_CARET; - - // nonparticipating capturing group, copied from es5-shim's String#split patch. - var NPCG_INCLUDED = /()??/.exec('')[1] !== undefined; - - var PATCH = UPDATES_LAST_INDEX_WRONG || NPCG_INCLUDED || UNSUPPORTED_Y$2; - - if (PATCH) { - patchedExec = function exec(str) { - var re = this; - var lastIndex, reCopy, match, i; - var sticky = UNSUPPORTED_Y$2 && 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 - }); - function _cloneRegExp(pattern) { return new RegExp(pattern.source, (pattern.global ? 'g' : '') + (pattern.ignoreCase ? 'i' : '') + (pattern.multiline ? 'm' : '') + (pattern.sticky ? 'y' : '') + (pattern.unicode ? 'u' : '')); } @@ -5504,304 +2477,16 @@ * const f = R.pipe(Math.pow, R.negate, R.inc); * * f(3, 4); // -(3^4) + 1 - * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b))) - */ - - function pipe() { - if (arguments.length === 0) { - throw new Error('pipe requires at least one argument'); - } - - return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments))); - } - - 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); - } - }); - - // TODO: Remove from `core-js@4` since it's moved to entry points - - - - - - - - var SPECIES$6 = wellKnownSymbol('species'); - - 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, '$') !== '7'; - }); - - // 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 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; - })(); - - // 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 fixRegexpWellKnownSymbolLogic = function (KEY, length, exec, sham) { - var SYMBOL = wellKnownSymbol(KEY); - - 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/; - - 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]; - } - - re.exec = function () { execCalled = true; return null; }; - - re[SYMBOL](''); - return !execCalled; - }); - - 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); } - ); - } - - if (sham) createNonEnumerableProperty(RegExp.prototype[SYMBOL], 'sham', true); - }; - - var charAt$1 = stringMultibyte.charAt; - - // `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); - }; - - // `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'); - } - return result; - } + * @symb R.pipe(f, g, h)(a, b) = h(g(f(a, b))) + */ - if (classofRaw(R) !== 'RegExp') { - throw TypeError('RegExp#exec called on incompatible receiver'); + function pipe() { + if (arguments.length === 0) { + throw new Error('pipe requires at least one argument'); } - return regexpExec.call(R, S); - }; - - var arrayPush = [].push; - var min$2 = 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' || - '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; - - 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 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$2(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); + return _arity(arguments[0].length, reduce(_pipe, arguments[0], tail(arguments))); + } /** * Returns a new list or string with the elements or characters in reverse @@ -5889,7 +2574,7 @@ * R.head(''); //=> '' */ - var head$1 = + var head = /*#__PURE__*/ nth(0); @@ -5921,53 +2606,6 @@ /*#__PURE__*/ _curry1(_identity); - 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$3 = arrayMethodIsStrict('sort'); - - var FORCED$3 = FAILS_ON_UNDEFINED || !FAILS_ON_NULL || !STRICT_METHOD$3; - - // `Array.prototype.sort` method - // https://tc39.github.io/ecma262/#sec-array.prototype.sort - _export({ target: 'Array', proto: true, forced: FORCED$3 }, { - sort: function sort(comparefn) { - return comparefn === undefined - ? nativeSort.call(toObject(this)) - : nativeSort.call(toObject(this), aFunction$1(comparefn)); - } - }); - - var $indexOf = arrayIncludes.indexOf; - - - - var nativeIndexOf = [].indexOf; - - var NEGATIVE_ZERO = !!nativeIndexOf && 1 / [1].indexOf(1, -0) < 0; - var STRICT_METHOD$4 = arrayMethodIsStrict('indexOf'); - var USES_TO_LENGTH$4 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); - - // `Array.prototype.indexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.indexof - _export({ target: 'Array', proto: true, forced: NEGATIVE_ZERO || !STRICT_METHOD$4 || !USES_TO_LENGTH$4 }, { - 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); - } - }); - function _arrayFromIterator(iter) { var list = []; var next; @@ -5994,62 +2632,12 @@ return false; } - // @@match logic - fixRegexpWellKnownSymbolLogic('match', 1, function (MATCH, nativeMatch, maybeCallNative) { - return [ - // `String.prototype.match` method - // https://tc39.github.io/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 - function (regexp) { - var res = maybeCallNative(nativeMatch, regexp, this); - if (res.done) return res.value; - - var rx = anObject(regexp); - var S = String(this); - - if (!rx.global) return regexpExecAbstract(rx, S); - - var fullUnicode = rx.unicode; - rx.lastIndex = 0; - var A = []; - var n = 0; - var result; - while ((result = regexpExecAbstract(rx, S)) !== null) { - var matchStr = String(result[0]); - A[n] = matchStr; - if (matchStr === '') rx.lastIndex = advanceStringIndex(S, toLength(rx.lastIndex), fullUnicode); - n++; - } - return n === 0 ? null : A; - } - ]; - }); - function _functionName(f) { // String(x => x) evaluates to "x => x", so the pattern may not match. var match = String(f).match(/^function (\w*)/); return match == null ? '' : match[1]; } - // `SameValue` abstract operation - // https://tc39.github.io/ecma262/#sec-samevalue - var sameValue = Object.is || function is(x, y) { - // eslint-disable-next-line no-self-compare - return x === y ? x !== 0 || 1 / x === 1 / y : x != x && y != y; - }; - - // `Object.is` method - // https://tc39.github.io/ecma262/#sec-object.is - _export({ target: 'Object', stat: true }, { - is: sameValue - }); - // Based on https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is function _objectIs(a, b) { // SameValue algorithm @@ -6127,7 +2715,7 @@ case 'Boolean': case 'Number': case 'String': - if (!(_typeof(a) === _typeof(b) && _objectIs$1(a.valueOf(), b.valueOf()))) { + if (!(typeof a === typeof b && _objectIs$1(a.valueOf(), b.valueOf()))) { return false; } @@ -6202,9 +2790,9 @@ return false; } - var keysA = keys$2(a); + var keysA = keys(a); - if (keysA.length !== keys$2(b).length) { + if (keysA.length !== keys(b).length) { return false; } @@ -6261,7 +2849,7 @@ var inf, item; // Array.prototype.indexOf doesn't exist below IE9 if (typeof list.indexOf === 'function') { - switch (_typeof(a)) { + switch (typeof a) { case 'number': if (a === 0) { // manually crawl the list to distinguish between +0 and -0 @@ -6328,347 +2916,12 @@ return _indexOf(list, a, 0) >= 0; } - var max$3 = Math.max; - var min$3 = Math.min; - var floor$2 = Math.floor; - var SUBSTITUTION_SYMBOLS = /\$([$&'`]|\d\d?|<[^>]*>)/g; - var SUBSTITUTION_SYMBOLS_NO_NAMED = /\$([$&'`]|\d\d?)/g; - - 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.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; - } - - 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$3(min$3(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); - } - ]; - - // 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; - }); - } - }); - function _quote(s) { var escaped = s.replace(/\\/g, '\\\\').replace(/[\b]/g, '\\b') // \b matches word boundary; [\b] matches backspace .replace(/\f/g, '\\f').replace(/\n/g, '\\n').replace(/\r/g, '\\r').replace(/\t/g, '\\t').replace(/\v/g, '\\v').replace(/\0/g, '\\0'); return '"' + escaped.replace(/"/g, '\\"') + '"'; } - // `String.prototype.repeat` method implementation - // https://tc39.github.io/ecma262/#sec-string.prototype.repeat - var stringRepeat = ''.repeat || function repeat(count) { - var str = String(requireObjectCoercible(this)); - var result = ''; - var n = toInteger(count); - if (n < 0 || n == Infinity) throw RangeError('Wrong number of repetitions'); - for (;n > 0; (n >>>= 1) && (str += str)) if (n & 1) result += str; - return result; - }; - - // https://github.com/tc39/proposal-string-pad-start-end - - - - - var ceil$1 = Math.ceil; - - // `String.prototype.{ padStart, padEnd }` methods implementation - var createMethod$5 = function (IS_END) { - return function ($this, maxLength, fillString) { - var S = String(requireObjectCoercible($this)); - var stringLength = S.length; - var fillStr = fillString === undefined ? ' ' : String(fillString); - var intMaxLength = toLength(maxLength); - var fillLen, stringFiller; - if (intMaxLength <= stringLength || fillStr == '') return S; - fillLen = intMaxLength - stringLength; - stringFiller = stringRepeat.call(fillStr, ceil$1(fillLen / fillStr.length)); - if (stringFiller.length > fillLen) stringFiller = stringFiller.slice(0, fillLen); - return IS_END ? S + stringFiller : stringFiller + S; - }; - }; - - var stringPad = { - // `String.prototype.padStart` method - // https://tc39.github.io/ecma262/#sec-string.prototype.padstart - start: createMethod$5(false), - // `String.prototype.padEnd` method - // https://tc39.github.io/ecma262/#sec-string.prototype.padend - end: createMethod$5(true) - }; - - var padStart = stringPad.start; - - var abs = Math.abs; - var DatePrototype$1 = Date.prototype; - var getTime$1 = DatePrototype$1.getTime; - var nativeDateToISOString = DatePrototype$1.toISOString; - - // `Date.prototype.toISOString` method implementation - // https://tc39.github.io/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'; - }) || !fails(function () { - nativeDateToISOString.call(new Date(NaN)); - })) ? function toISOString() { - if (!isFinite(getTime$1.call(this))) throw RangeError('Invalid time value'); - var date = this; - var year = date.getUTCFullYear(); - var milliseconds = date.getUTCMilliseconds(); - var sign = year < 0 ? '-' : year > 9999 ? '+' : ''; - return sign + padStart(abs(year), sign ? 6 : 4, 0) + - '-' + padStart(date.getUTCMonth() + 1, 2, 0) + - '-' + padStart(date.getUTCDate(), 2, 0) + - 'T' + padStart(date.getUTCHours(), 2, 0) + - ':' + padStart(date.getUTCMinutes(), 2, 0) + - ':' + padStart(date.getUTCSeconds(), 2, 0) + - '.' + padStart(milliseconds, 3, 0) + - 'Z'; - } : nativeDateToISOString; - - // `Date.prototype.toISOString` method - // https://tc39.github.io/ecma262/#sec-date.prototype.toisostring - // PhantomJS / old WebKit has a broken implementations - _export({ target: 'Date', proto: true, forced: Date.prototype.toISOString !== dateToIsoString }, { - toISOString: dateToIsoString - }); - - // `thisNumberValue` abstract operation - // https://tc39.github.io/ecma262/#sec-thisnumbervalue - var thisNumberValue = function (value) { - if (typeof value != 'number' && classofRaw(value) != 'Number') { - throw TypeError('Incorrect invocation'); - } - return +value; - }; - - var nativeToFixed = 1.0.toFixed; - var floor$3 = Math.floor; - - var pow = function (x, n, acc) { - return n === 0 ? acc : n % 2 === 1 ? pow(x, n - 1, acc * x) : pow(x * x, n / 2, acc); - }; - - var log = function (x) { - var n = 0; - var x2 = x; - while (x2 >= 4096) { - n += 12; - x2 /= 4096; - } - while (x2 >= 2) { - n += 1; - x2 /= 2; - } return n; - }; - - var FORCED$4 = nativeToFixed && ( - 0.00008.toFixed(3) !== '0.000' || - 0.9.toFixed(0) !== '1' || - 1.255.toFixed(2) !== '1.25' || - 1000000000000000128.0.toFixed(0) !== '1000000000000000128' - ) || !fails(function () { - // V8 ~ Android 4.3- - nativeToFixed.call({}); - }); - - // `Number.prototype.toFixed` method - // https://tc39.github.io/ecma262/#sec-number.prototype.tofixed - _export({ target: 'Number', proto: true, forced: FORCED$4 }, { - // eslint-disable-next-line max-statements - toFixed: function toFixed(fractionDigits) { - var number = thisNumberValue(this); - var fractDigits = toInteger(fractionDigits); - var data = [0, 0, 0, 0, 0, 0]; - var sign = ''; - 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$3(c2 / 1e7); - } - }; - - var divide = function (n) { - var index = 6; - var c = 0; - while (--index >= 0) { - c += data[index]; - data[index] = floor$3(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 - if (number != number) return 'NaN'; - if (number <= -1e21 || number >= 1e21) return String(number); - if (number < 0) { - sign = '-'; - number = -number; - } - if (number > 1e-21) { - e = log(number * pow(2, 69, 1)) - 69; - z = e < 0 ? number * pow(2, -e, 1) : number / pow(2, e, 1); - z *= 0x10000000000000; - e = 52 - e; - if (e > 0) { - multiply(0, z); - j = fractDigits; - while (j >= 7) { - multiply(1e7, 0); - j -= 7; - } - multiply(pow(10, j, 1), 0); - j = e - 1; - while (j >= 23) { - divide(1 << 23); - j -= 23; - } - divide(1 << j); - multiply(1, 1); - divide(2); - result = dataToString(); - } else { - multiply(0, z); - multiply(1 << -e, 0); - result = dataToString() + stringRepeat.call('0', fractDigits); - } - } - if (fractDigits > 0) { - k = result.length; - result = sign + (k <= fractDigits - ? '0.' + stringRepeat.call('0', fractDigits - k) + result - : result.slice(0, k - fractDigits) + '.' + result.slice(k - fractDigits)); - } else { - result = sign + result; - } return result; - } - }); - /** * Polyfill from . */ @@ -6771,7 +3024,7 @@ } return acc; - }, {}, keys$2(filterable)) : // else + }, {}, keys(filterable)) : // else _filter(pred, filterable); })); @@ -6813,10 +3066,10 @@ }; // mapPairs :: (Object, [String]) -> [String] - var mapPairs = function mapPairs(obj, keys) { + var mapPairs = function (obj, keys$$1) { return _map(function (k) { return _quote(k) + ': ' + recur(obj[k]); - }, keys.slice().sort()); + }, keys$$1.slice().sort()); }; switch (Object.prototype.toString.call(x)) { @@ -6826,10 +3079,10 @@ case '[object Array]': return '[' + _map(recur, x).concat(mapPairs(x, reject(function (k) { return /^\d+$/.test(k); - }, keys$2(x)))).join(', ') + ']'; + }, keys(x)))).join(', ') + ']'; case '[object Boolean]': - return _typeof(x) === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString(); + return typeof x === 'object' ? 'new Boolean(' + recur(x.valueOf()) + ')' : x.toString(); case '[object Date]': return 'new Date(' + (isNaN(x.valueOf()) ? recur(NaN) : _quote(_toISOString(x))) + ')'; @@ -6838,10 +3091,10 @@ return 'null'; case '[object Number]': - return _typeof(x) === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10); + return typeof x === 'object' ? 'new Number(' + recur(x.valueOf()) + ')' : 1 / x === -Infinity ? '-0' : x.toString(10); case '[object String]': - return _typeof(x) === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x); + return typeof x === 'object' ? 'new String(' + recur(x.valueOf()) + ')' : _quote(x); case '[object Undefined]': return 'undefined'; @@ -6855,7 +3108,7 @@ } } - return '{' + mapPairs(x, keys$2(x)).join(', ') + '}'; + return '{' + mapPairs(x, keys(x)).join(', ') + '}'; } } @@ -6896,7 +3149,7 @@ * R.toString(new Date('2001-02-03T04:05:06Z')); //=> 'new Date("2001-02-03T04:05:06.000Z")' */ - var toString$3 = + var toString$1 = /*#__PURE__*/ _curry1(function toString(val) { return _toString(val, []); @@ -6934,7 +3187,7 @@ var converge = /*#__PURE__*/ _curry2(function converge(after, fns) { - return curryN(reduce(max$2, 0, pluck('length', fns)), function () { + return curryN(reduce(max, 0, pluck('length', fns)), function () { var args = arguments; var context = this; return after.apply(context, _map(function (fn) { @@ -7095,353 +3348,6 @@ /*#__PURE__*/ add(-1); - var freezing = !fails(function () { - return Object.isExtensible(Object.preventExtensions({})); - }); - - var internalMetadata = createCommonjsModule(function (module) { - var defineProperty = objectDefineProperty.f; - - - - var METADATA = uid('meta'); - var id = 0; - - var isExtensible = Object.isExtensible || function () { - return true; - }; - - var setMetadata = function (it) { - defineProperty(it, METADATA, { value: { - objectID: 'O' + ++id, // object ID - weakData: {} // weak collections IDs - } }); - }; - - var fastKey = function (it, create) { - // return a primitive with prefix - if (!isObject(it)) return typeof it == 'symbol' ? it : (typeof it == 'string' ? 'S' : 'P') + it; - if (!has(it, METADATA)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return 'F'; - // not necessary to add metadata - if (!create) return 'E'; - // add missing metadata - setMetadata(it); - // return object ID - } return it[METADATA].objectID; - }; - - var getWeakData = function (it, create) { - if (!has(it, METADATA)) { - // can't set metadata to uncaught frozen object - if (!isExtensible(it)) return true; - // not necessary to add metadata - if (!create) return false; - // add missing metadata - setMetadata(it); - // return the store of weak collections IDs - } return it[METADATA].weakData; - }; - - // add metadata on freeze-family methods calling - var onFreeze = function (it) { - if (freezing && meta.REQUIRED && isExtensible(it) && !has(it, METADATA)) setMetadata(it); - return it; - }; - - var meta = module.exports = { - REQUIRED: false, - fastKey: fastKey, - getWeakData: getWeakData, - onFreeze: onFreeze - }; - - hiddenKeys[METADATA] = true; - }); - var internalMetadata_1 = internalMetadata.REQUIRED; - var internalMetadata_2 = internalMetadata.fastKey; - var internalMetadata_3 = internalMetadata.getWeakData; - var internalMetadata_4 = internalMetadata.onFreeze; - - var collection = function (CONSTRUCTOR_NAME, wrapper, common) { - var IS_MAP = CONSTRUCTOR_NAME.indexOf('Map') !== -1; - var IS_WEAK = CONSTRUCTOR_NAME.indexOf('Weak') !== -1; - var ADDER = IS_MAP ? 'set' : 'add'; - var NativeConstructor = global_1[CONSTRUCTOR_NAME]; - var NativePrototype = NativeConstructor && NativeConstructor.prototype; - var Constructor = NativeConstructor; - var exported = {}; - - var fixMethod = function (KEY) { - var nativeMethod = NativePrototype[KEY]; - redefine(NativePrototype, KEY, - KEY == 'add' ? function add(value) { - nativeMethod.call(this, value === 0 ? 0 : value); - return this; - } : KEY == 'delete' ? function (key) { - return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); - } : KEY == 'get' ? function get(key) { - return IS_WEAK && !isObject(key) ? undefined : nativeMethod.call(this, key === 0 ? 0 : key); - } : KEY == 'has' ? function has(key) { - return IS_WEAK && !isObject(key) ? false : nativeMethod.call(this, key === 0 ? 0 : key); - } : function set(key, value) { - nativeMethod.call(this, key === 0 ? 0 : key, value); - return this; - } - ); - }; - - // eslint-disable-next-line max-len - if (isForced_1(CONSTRUCTOR_NAME, typeof NativeConstructor != 'function' || !(IS_WEAK || NativePrototype.forEach && !fails(function () { - new NativeConstructor().entries().next(); - })))) { - // create collection constructor - Constructor = common.getConstructor(wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER); - internalMetadata.REQUIRED = true; - } else if (isForced_1(CONSTRUCTOR_NAME, true)) { - var instance = new Constructor(); - // early implementations not supports chaining - var HASNT_CHAINING = instance[ADDER](IS_WEAK ? {} : -0, 1) != instance; - // 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 - 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 () { - // V8 ~ Chromium 42- fails only with 5+ elements - var $instance = new NativeConstructor(); - var index = 5; - while (index--) $instance[ADDER](index, index); - return !$instance.has(-0); - }); - - if (!ACCEPT_ITERABLES) { - Constructor = wrapper(function (dummy, iterable) { - anInstance(dummy, Constructor, CONSTRUCTOR_NAME); - var that = inheritIfRequired(new NativeConstructor(), dummy, Constructor); - if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); - return that; - }); - Constructor.prototype = NativePrototype; - NativePrototype.constructor = Constructor; - } - - if (THROWS_ON_PRIMITIVES || BUGGY_ZERO) { - fixMethod('delete'); - fixMethod('has'); - IS_MAP && fixMethod('get'); - } - - if (BUGGY_ZERO || HASNT_CHAINING) fixMethod(ADDER); - - // weak collections should not contains .clear method - if (IS_WEAK && NativePrototype.clear) delete NativePrototype.clear; - } - - exported[CONSTRUCTOR_NAME] = Constructor; - _export({ global: true, forced: Constructor != NativeConstructor }, exported); - - setToStringTag(Constructor, CONSTRUCTOR_NAME); - - if (!IS_WEAK) common.setStrong(Constructor, CONSTRUCTOR_NAME, IS_MAP); - - return Constructor; - }; - - var defineProperty$8 = objectDefineProperty.f; - - - - - - - - - var fastKey = internalMetadata.fastKey; - - - var setInternalState$5 = internalState.set; - var internalStateGetterFor = internalState.getterFor; - - var collectionStrong = { - getConstructor: function (wrapper, CONSTRUCTOR_NAME, IS_MAP, ADDER) { - var C = wrapper(function (that, iterable) { - anInstance(that, C, CONSTRUCTOR_NAME); - setInternalState$5(that, { - type: CONSTRUCTOR_NAME, - index: objectCreate(null), - first: undefined, - last: undefined, - size: 0 - }); - if (!descriptors) that.size = 0; - if (iterable != undefined) iterate_1(iterable, that[ADDER], that, IS_MAP); - }); - - var getInternalState = internalStateGetterFor(CONSTRUCTOR_NAME); - - var define = function (that, key, value) { - var state = getInternalState(that); - var entry = getEntry(that, key); - var previous, index; - // change existing entry - if (entry) { - entry.value = value; - // create new entry - } else { - state.last = entry = { - index: index = fastKey(key, true), - key: key, - value: value, - previous: previous = state.last, - next: undefined, - removed: false - }; - if (!state.first) state.first = entry; - if (previous) previous.next = entry; - if (descriptors) state.size++; - else that.size++; - // add to index - if (index !== 'F') state.index[index] = entry; - } return that; - }; - - var getEntry = function (that, key) { - var state = getInternalState(that); - // fast case - var index = fastKey(key); - var entry; - if (index !== 'F') return state.index[index]; - // frozen object case - for (entry = state.first; entry; entry = entry.next) { - if (entry.key == key) return entry; - } - }; - - redefineAll(C.prototype, { - // 23.1.3.1 Map.prototype.clear() - // 23.2.3.2 Set.prototype.clear() - clear: function clear() { - var that = this; - var state = getInternalState(that); - var data = state.index; - var entry = state.first; - while (entry) { - entry.removed = true; - if (entry.previous) entry.previous = entry.previous.next = undefined; - delete data[entry.index]; - entry = entry.next; - } - state.first = state.last = undefined; - if (descriptors) state.size = 0; - else that.size = 0; - }, - // 23.1.3.3 Map.prototype.delete(key) - // 23.2.3.4 Set.prototype.delete(value) - 'delete': function (key) { - var that = this; - var state = getInternalState(that); - var entry = getEntry(that, key); - if (entry) { - var next = entry.next; - var prev = entry.previous; - delete state.index[entry.index]; - entry.removed = true; - if (prev) prev.next = next; - if (next) next.previous = prev; - if (state.first == entry) state.first = next; - if (state.last == entry) state.last = prev; - if (descriptors) state.size--; - else that.size--; - } return !!entry; - }, - // 23.2.3.6 Set.prototype.forEach(callbackfn, thisArg = undefined) - // 23.1.3.5 Map.prototype.forEach(callbackfn, thisArg = undefined) - forEach: function forEach(callbackfn /* , that = undefined */) { - var state = getInternalState(this); - var boundFunction = functionBindContext(callbackfn, arguments.length > 1 ? arguments[1] : undefined, 3); - var entry; - while (entry = entry ? entry.next : state.first) { - boundFunction(entry.value, entry.key, this); - // revert to the last existing entry - while (entry && entry.removed) entry = entry.previous; - } - }, - // 23.1.3.7 Map.prototype.has(key) - // 23.2.3.7 Set.prototype.has(value) - has: function has(key) { - return !!getEntry(this, key); - } - }); - - redefineAll(C.prototype, IS_MAP ? { - // 23.1.3.6 Map.prototype.get(key) - get: function get(key) { - var entry = getEntry(this, key); - return entry && entry.value; - }, - // 23.1.3.9 Map.prototype.set(key, value) - set: function set(key, value) { - return define(this, key === 0 ? 0 : key, value); - } - } : { - // 23.2.3.1 Set.prototype.add(value) - add: function add(value) { - return define(this, value = value === 0 ? 0 : value, value); - } - }); - if (descriptors) defineProperty$8(C.prototype, 'size', { - get: function () { - return getInternalState(this).size; - } - }); - return C; - }, - setStrong: function (C, CONSTRUCTOR_NAME, IS_MAP) { - var ITERATOR_NAME = CONSTRUCTOR_NAME + ' Iterator'; - var getInternalCollectionState = internalStateGetterFor(CONSTRUCTOR_NAME); - var getInternalIteratorState = internalStateGetterFor(ITERATOR_NAME); - // add .keys, .values, .entries, [@@iterator] - // 23.1.3.4, 23.1.3.8, 23.1.3.11, 23.1.3.12, 23.2.3.5, 23.2.3.8, 23.2.3.10, 23.2.3.11 - defineIterator(C, CONSTRUCTOR_NAME, function (iterated, kind) { - setInternalState$5(this, { - type: ITERATOR_NAME, - target: iterated, - state: getInternalCollectionState(iterated), - kind: kind, - last: undefined - }); - }, function () { - var state = getInternalIteratorState(this); - var kind = state.kind; - var entry = state.last; - // revert to the last existing entry - while (entry && entry.removed) entry = entry.previous; - // get next entry - if (!state.target || !(state.last = entry = entry ? entry.next : state.state.first)) { - // or finish the iteration - state.target = undefined; - return { value: undefined, done: true }; - } - // return step by kind - if (kind == 'keys') return { value: entry.key, done: false }; - if (kind == 'values') return { value: entry.value, done: false }; - return { value: [entry.key, entry.value], done: false }; - }, IS_MAP ? 'entries' : 'values', !IS_MAP, true); - - // add [@@species], 23.1.2.2, 23.2.2.2 - setSpecies(CONSTRUCTOR_NAME); - } - }; - - // `Set` constructor - // https://tc39.github.io/ecma262/#sec-set-objects - var es_set = collection('Set', function (init) { - return function Set() { return init(this, arguments.length ? arguments[0] : undefined); }; - }, collectionStrong); - var _Set = /*#__PURE__*/ function () { @@ -7449,12 +3355,12 @@ /* globals Set */ this._nativeSet = typeof Set === 'function' ? new Set() : null; this._items = {}; - } // until we figure out why jsdoc chokes on this + } + + // until we figure out why jsdoc chokes on this // @param item The item to add to the Set // @returns {boolean} true if the item did not exist prior, otherwise false // - - _Set.prototype.add = function (item) { return !hasOrAdd(item, true, this); }; // @@ -7481,8 +3387,7 @@ }(); function hasOrAdd(item, shouldAdd, set) { - var type = _typeof(item); - + var type = typeof item; var prevSize, newSize; switch (type) { @@ -7640,66 +3545,6 @@ } } // A simple Set type that honours R.equals semantics - var HAS_SPECIES_SUPPORT$2 = arrayMethodHasSpeciesSupport('splice'); - var USES_TO_LENGTH$5 = arrayMethodUsesToLength('splice', { ACCESSORS: true, 0: 0, 1: 2 }); - - var max$4 = Math.max; - var min$4 = Math.min; - var MAX_SAFE_INTEGER$1 = 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$4(max$4(toInteger(deleteCount), 0), len - actualStart); - } - if (len + insertCount - actualDeleteCount > MAX_SAFE_INTEGER$1) { - 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; - } - }); - var XDropRepeatsWith = /*#__PURE__*/ function () { @@ -7756,7 +3601,7 @@ * R.last(''); //=> '' */ - var last$1 = + var last = /*#__PURE__*/ nth(-1); @@ -7795,7 +3640,7 @@ result[0] = list[0]; while (idx < len) { - if (!pred(last$1(result), list[idx])) { + if (!pred(last(result), list[idx])) { result[result.length] = list[idx]; } @@ -8140,7 +3985,7 @@ return target[method].apply(target, Array.prototype.slice.call(arguments, 0, arity)); } - throw new TypeError(toString$3(target) + ' does not have a method named "' + method + '"'); + throw new TypeError(toString$1(target) + ' does not have a method named "' + method + '"'); }); }); @@ -8194,34 +4039,6 @@ }, fns); }); - var min$5 = Math.min; - var nativeLastIndexOf = [].lastIndexOf; - var NEGATIVE_ZERO$1 = !!nativeLastIndexOf && 1 / [1].lastIndexOf(1, -0) < 0; - var STRICT_METHOD$5 = arrayMethodIsStrict('lastIndexOf'); - // For preventing possible almost infinite loop in non-standard implementations, test the forward version of the method - var USES_TO_LENGTH$6 = arrayMethodUsesToLength('indexOf', { ACCESSORS: true, 1: 0 }); - var FORCED$5 = NEGATIVE_ZERO$1 || !STRICT_METHOD$5 || !USES_TO_LENGTH$6; - - // `Array.prototype.lastIndexOf` method implementation - // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof - var arrayLastIndexOf = FORCED$5 ? 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 (index < 0) index = length + index; - for (;index >= 0; index--) if (index in O && O[index] === searchElement) return index || 0; - return -1; - } : nativeLastIndexOf; - - // `Array.prototype.lastIndexOf` method - // https://tc39.github.io/ecma262/#sec-array.prototype.lastindexof - _export({ target: 'Array', proto: true, forced: arrayLastIndexOf !== [].lastIndexOf }, { - lastIndexOf: arrayLastIndexOf - }); - /** * Adds together all the elements of a list. * @@ -8483,7 +4300,7 @@ * R.split('.', 'a.b.c.xyz.d'); //=> ['a', 'b', 'c', 'xyz', 'd'] */ - var split$1 = + var split = /*#__PURE__*/ invoker(1, 'split'); @@ -8614,29 +4431,8 @@ return _reduce(xf(typeof fn === 'function' ? _xwrap(fn) : fn), acc, list); }); - 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.github.io/ecma262/#sec-string.prototype.trim - _export({ target: 'String', proto: true, forced: stringTrimForced('trim') }, { - trim: function trim() { - return $trim(this); - } - }); - - var ws = "\t\n\x0B\f\r \xA0\u1680\u180E\u2000\u2001\u2002\u2003" + "\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028" + "\u2029\uFEFF"; - var zeroWidth = "\u200B"; + var ws = '\x09\x0A\x0B\x0C\x0D\x20\xA0\u1680\u180E\u2000\u2001\u2002\u2003' + '\u2004\u2005\u2006\u2007\u2008\u2009\u200A\u202F\u205F\u3000\u2028' + '\u2029\uFEFF'; + var zeroWidth = '\u200b'; var hasProtoTrim = typeof String.prototype.trim === 'function'; /** * Removes (strips) whitespace from both ends of the string. @@ -8654,7 +4450,7 @@ * R.map(R.trim, R.split(',', 'x, y, z')); //=> ['x', 'y', 'z'] */ - var trim$1 = !hasProtoTrim || + var trim = !hasProtoTrim || /*#__PURE__*/ ws.trim() || ! /*#__PURE__*/ @@ -8995,69 +4791,6 @@ } }; - var $filter = arrayIteration.filter; - - - - var HAS_SPECIES_SUPPORT$3 = arrayMethodHasSpeciesSupport('filter'); - // Edge 14- issue - var USES_TO_LENGTH$7 = arrayMethodUsesToLength('filter'); - - // `Array.prototype.filter` method - // https://tc39.github.io/ecma262/#sec-array.prototype.filter - // with adding support of @@species - _export({ target: 'Array', proto: true, forced: !HAS_SPECIES_SUPPORT$3 || !USES_TO_LENGTH$7 }, { - filter: function filter(callbackfn /* , thisArg */) { - return $filter(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - var $find = arrayIteration.find; - - - - var FIND = 'find'; - var SKIPS_HOLES = true; - - var USES_TO_LENGTH$8 = 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$8 }, { - find: function find(callbackfn /* , that = undefined */) { - return $find(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables - addToUnscopables(FIND); - - var $findIndex = arrayIteration.findIndex; - - - - var FIND_INDEX = 'findIndex'; - var SKIPS_HOLES$1 = true; - - var USES_TO_LENGTH$9 = 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$9 }, { - findIndex: function findIndex(callbackfn /* , that = undefined */) { - return $findIndex(this, callbackfn, arguments.length > 1 ? arguments[1] : undefined); - } - }); - - // https://tc39.github.io/ecma262/#sec-array.prototype-@@unscopables - addToUnscopables(FIND_INDEX); - var QUERY_ELEMENTS = ['measures', 'dimensions', 'segments', 'timeDimensions', 'filters']; var QueryBuilder = { components: { @@ -9159,7 +4892,8 @@ setOffset: setOffset, removeOffset: removeOffset, renewQuery: renewQuery, - order: order + order: order, + setOrder: this.setOrder }; QUERY_ELEMENTS.forEach(function (e) { var name = e.charAt(0).toUpperCase() + e.slice(1); @@ -9518,6 +5252,10 @@ }, updateChart: function updateChart(chartType) { this.chartType = chartType; + }, + setOrder: function setOrder() { + var order = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {}; + this.order = order; } }, watch: { @@ -9534,11 +5272,11 @@ } }; - var index$1 = {}; + var index = {}; exports.QueryRenderer = QueryRenderer; exports.QueryBuilder = QueryBuilder; - exports.default = index$1; + exports.default = index; Object.defineProperty(exports, '__esModule', { value: true }); diff --git a/packages/cubejs-client-vue/src/QueryBuilder.js b/packages/cubejs-client-vue/src/QueryBuilder.js index 9e0bc2bfd2960..79733c3285752 100644 --- a/packages/cubejs-client-vue/src/QueryBuilder.js +++ b/packages/cubejs-client-vue/src/QueryBuilder.js @@ -97,7 +97,8 @@ export default { setOffset, removeOffset, renewQuery, - order + order, + setOrder: this.setOrder }; QUERY_ELEMENTS.forEach((e) => { @@ -384,6 +385,9 @@ export default { updateChart(chartType) { this.chartType = chartType; }, + setOrder(order = {}) { + this.order = order; + } }, watch: { diff --git a/packages/cubejs-playground/package.json b/packages/cubejs-playground/package.json index 760333009c5e5..ee2315b3656d0 100644 --- a/packages/cubejs-playground/package.json +++ b/packages/cubejs-playground/package.json @@ -35,6 +35,7 @@ "ramda": "^0.27.0", "react": "^16.8.3", "react-chartjs-2": "^2.7.4", + "react-beautiful-dnd" : "^13.0.0", "react-dom": "^16.8.3", "react-is": "^16.8.4", "react-responsive": "^8.0.1", @@ -52,7 +53,8 @@ "start": "PORT=3080 react-app-rewired start", "build": "react-app-rewired --max-old-space-size=2048 build && rm -Rf ../cubejs-server-core/playground/** && cp -R build/ ../cubejs-server-core/playground/", "test": "react-app-rewired test", - "eject": "react-scripts eject" + "eject": "react-scripts eject", + "lint": "eslint src/*.js src/*.jsx" }, "eslintConfig": { "extends": "react-app" @@ -72,10 +74,11 @@ "proxy": "http://localhost:4000", "license": "MIT", "devDependencies": { - "eslint-config-airbnb": "^17.1.0", - "eslint-plugin-import": "^2.16.0", + "@types/react": "^16.9.35", + "@types/react-beautiful-dnd": "^13.0.0", + "eslint-config-airbnb": "^18.1.0", "eslint-plugin-jsx-a11y": "^6.2.1", - "eslint-plugin-react": "^7.12.4", + "eslint-plugin-react": "^7.20.0", "fs-extra": "^8.1.0", "react-app-rewired": "^2.1.0", "recursive-readdir": "^2.2.2", diff --git a/packages/cubejs-playground/src/PlaygroundQueryBuilder.js b/packages/cubejs-playground/src/PlaygroundQueryBuilder.js index ea634cf749e19..30209f4b20da8 100644 --- a/packages/cubejs-playground/src/PlaygroundQueryBuilder.js +++ b/packages/cubejs-playground/src/PlaygroundQueryBuilder.js @@ -1,8 +1,7 @@ -import React from 'react'; +import React, { useState } from 'react'; import * as PropTypes from 'prop-types'; -import { - Row, Col, Divider, Card -} from 'antd'; +import { Row, Col, Divider, Card, Button, Popover } from 'antd'; +import { SortAscendingOutlined } from '@ant-design/icons'; import { QueryBuilder } from '@cubejs-client/react'; import { ChartRenderer } from './ChartRenderer'; import { playgroundAction } from './events'; @@ -10,121 +9,178 @@ import MemberGroup from './QueryBuilder/MemberGroup'; import FilterGroup from './QueryBuilder/FilterGroup'; import TimeGroup from './QueryBuilder/TimeGroup'; import SelectChartType from './QueryBuilder/SelectChartType'; +import OrderGroup from './components/Order/OrderGroup'; -const playgroundActionUpdateMethods = (updateMethods, memberName) => ( - Object.keys(updateMethods).map(method => ({ - [method]: (member, values, ...rest) => { - let actionName = `${method.split('').map((c, i) => (i === 0 ? c.toUpperCase() : c)).join('')} Member`; - if (values && values.values) { - actionName = 'Update Filter Values'; +const playgroundActionUpdateMethods = (updateMethods, memberName) => + Object.keys(updateMethods) + .map((method) => ({ + [method]: (member, values, ...rest) => { + let actionName = `${method + .split('') + .map((c, i) => (i === 0 ? c.toUpperCase() : c)) + .join('')} Member`; + if (values && values.values) { + actionName = 'Update Filter Values'; + } + if (values && values.dateRange) { + actionName = 'Update Date Range'; + } + if (values && values.granularity) { + actionName = 'Update Granularity'; + } + playgroundAction(actionName, { memberName }); + return updateMethods[method].apply(null, [member, values, ...rest]); } - if (values && values.dateRange) { - actionName = 'Update Date Range'; - } - if (values && values.granularity) { - actionName = 'Update Granularity'; - } - playgroundAction( - actionName, - { memberName } - ); - return updateMethods[method].apply(null, [member, values, ...rest]); - } - })).reduce((a, b) => ({ ...a, ...b }), {}) -); + })) + .reduce((a, b) => ({ ...a, ...b }), {}); -const PlaygroundQueryBuilder = ({ - query, cubejsApi, apiUrl, cubejsToken, dashboardSource, setQuery -}) => ( - [ - - - - - - - - - - - - - - - +export default function PlaygroundQueryBuilder({ query, cubejsApi, apiUrl, cubejsToken, dashboardSource, setQuery }) { + const [isOrderPopoverVisible, toggleOrderPopover] = useState(false); + + return ( + { + return ( + <> + - + + + + + + + + + + + + + + + + + + + + + + { + playgroundAction('Change Chart Type'); + updateChartType(type); + }} + /> + + + + + } + visible={isOrderPopoverVisible} + placement="bottomLeft" + trigger="click" + onVisibleChange={(visible) => { + if (!visible) { + toggleOrderPopover(false); + } else { + if (orderMembers.length) { + toggleOrderPopover(!isOrderPopoverVisible); + } + } + }} + > + + + + + - + + - { - playgroundAction('Change Chart Type'); - updateChartType(type); - }} - /> + {isQueryPresent ? ( + + ) : ( +

Choose a measure or dimension to get started

+ )}
-
- -
, - - - {isQueryPresent ? ( - - ) :

Choose a measure or dimension to get started

} - -
- ]} - /> -); + + ); + }} + /> + ); +} PlaygroundQueryBuilder.propTypes = { query: PropTypes.object, @@ -143,5 +199,3 @@ PlaygroundQueryBuilder.defaultProps = { apiUrl: '/cubejs-api/v1', cubejsToken: null }; - -export default PlaygroundQueryBuilder; diff --git a/packages/cubejs-playground/src/components/Header.js b/packages/cubejs-playground/src/components/Header.js index 39b4a3e23b91a..f015d512e621f 100644 --- a/packages/cubejs-playground/src/components/Header.js +++ b/packages/cubejs-playground/src/components/Header.js @@ -7,7 +7,7 @@ import styled from 'styled-components'; import { useMediaQuery } from 'react-responsive'; const StyledMenu = styled(Menu)` - background: #EEEEF5; + background: #EEEEF5 !important; border-bottom: 0; ` diff --git a/packages/cubejs-playground/src/components/Order/DraggableItem.js b/packages/cubejs-playground/src/components/Order/DraggableItem.js new file mode 100644 index 0000000000000..361f99acbbfa7 --- /dev/null +++ b/packages/cubejs-playground/src/components/Order/DraggableItem.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Button } from 'antd'; +import { Draggable } from 'react-beautiful-dnd'; +import { DragOutlined } from '@ant-design/icons'; + +const orderOptions = ['asc', 'desc', 'none']; + +export default function DraggableItem({ id, index, order = 'none', children, onOrderChange }) { + const getNextOrder = () => { + const index = orderOptions.indexOf(order) + 1; + return orderOptions[index > 2 ? 0 : index]; + }; + + return ( + + {({ draggableProps, dragHandleProps, innerRef }) => ( +
+ + + {children} + + +
+ )} +
+ ); +} diff --git a/packages/cubejs-playground/src/components/Order/OrderGroup.js b/packages/cubejs-playground/src/components/Order/OrderGroup.js new file mode 100644 index 0000000000000..8a02fe1849de0 --- /dev/null +++ b/packages/cubejs-playground/src/components/Order/OrderGroup.js @@ -0,0 +1,40 @@ +import React from 'react'; +import { DragDropContext, Droppable } from 'react-beautiful-dnd'; +import DraggableItem from './DraggableItem'; + +export default function OrderGroup({ orderMembers, onOrderChange, onReorder }) { + return ( + { + onReorder(source && source.index, destination && destination.index) + }} + > + + {(provided) => ( +
+ {orderMembers.map(({ id, title, order }, index) => ( + + {title} + + ))} + + {provided.placeholder} +
+ )} +
+
+ ); +} diff --git a/packages/cubejs-playground/src/hooks/deep-compare-memoize.js b/packages/cubejs-playground/src/hooks/deep-compare-memoize.js new file mode 100644 index 0000000000000..d97926c517b09 --- /dev/null +++ b/packages/cubejs-playground/src/hooks/deep-compare-memoize.js @@ -0,0 +1,12 @@ +import { useRef } from 'react'; +import { equals } from 'ramda'; + +export default function useDeepCompareMemoize(value) { + const ref = useRef([]); + + if (!equals(value, ref.current)) { + ref.current = value; + } + + return ref.current; +} diff --git a/packages/cubejs-playground/yarn.lock b/packages/cubejs-playground/yarn.lock index f3dd9d53f4bca..f696724aeb088 100644 --- a/packages/cubejs-playground/yarn.lock +++ b/packages/cubejs-playground/yarn.lock @@ -1997,11 +1997,31 @@ resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.0.tgz#2f8bb441434d163b35fb8ffdccd7138927ffb8c0" integrity sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA== +"@types/prop-types@*": + version "15.7.3" + resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.3.tgz#2ab0d5da2e5815f94b0b9d4b95d1e5f243ab2ca7" + integrity sha512-KfRL3PuHmqQLOG+2tGpRO26Ctg+Cq1E01D2DMriKEATHgWLfeNDmq9e29Q9WIky0dQ3NPkd1mzYH8Lm936Z9qw== + "@types/q@^1.5.1": version "1.5.2" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== +"@types/react-beautiful-dnd@^13.0.0": + version "13.0.0" + resolved "https://registry.yarnpkg.com/@types/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#e60d3d965312fcf1516894af92dc3e9249587db4" + integrity sha512-by80tJ8aTTDXT256Gl+RfLRtFjYbUWOnZuEigJgNsJrSEGxvFe5eY6k3g4VIvf0M/6+xoLgfYWoWonlOo6Wqdg== + dependencies: + "@types/react" "*" + +"@types/react@*", "@types/react@^16.9.35": + version "16.9.35" + resolved "https://registry.yarnpkg.com/@types/react/-/react-16.9.35.tgz#a0830d172e8aadd9bd41709ba2281a3124bbd368" + integrity sha512-q0n0SsWcGc8nDqH2GJfWQWUOmZSJhXV64CjVN5SvcNti3TdEaA3AH0D8DwNmMdzjMAC/78tB8nAZIlV8yTz+zQ== + dependencies: + "@types/prop-types" "*" + csstype "^2.2.0" + "@types/stack-utils@^1.0.1": version "1.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-1.0.1.tgz#0a851d3bd96498fa25c33ab7278ed3bd65f06c3e" @@ -3755,7 +3775,7 @@ concat-stream@^1.5.0: readable-stream "^2.2.2" typedarray "^0.0.6" -confusing-browser-globals@^1.0.5, confusing-browser-globals@^1.0.9: +confusing-browser-globals@^1.0.9: version "1.0.9" resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.9.tgz#72bc13b483c0276801681871d4898516f8f54fdd" integrity sha512-KbS1Y0jMtyPgIxjO7ZzMAuUpAKMt1SzCL9fsrKsX6b0zJPTaT0SiSPmewwVZg9UAO83HVIlEhZF84LIjZ0lmAw== @@ -4011,6 +4031,13 @@ css-blank-pseudo@^0.1.4: dependencies: postcss "^7.0.5" +css-box-model@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/css-box-model/-/css-box-model-1.2.1.tgz#59951d3b81fd6b2074a62d49444415b0d2b4d7c1" + integrity sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw== + dependencies: + tiny-invariant "^1.0.6" + css-color-keywords@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/css-color-keywords/-/css-color-keywords-1.0.0.tgz#fea2616dc676b2962686b3af8dbdbe180b244e05" @@ -4239,6 +4266,11 @@ cssstyle@^1.0.0, cssstyle@^1.1.1: dependencies: cssom "0.3.x" +csstype@^2.2.0: + version "2.6.10" + resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.10.tgz#e63af50e66d7c266edb6b32909cfd0aabe03928b" + integrity sha512-D34BqZU4cIlMCY93rZHbrq9pjTAQJ3U8S8rfBqjwHxkGPThWFjzZDQpgMJY0QViLxth6ZKYiwFBo14RdN44U/w== + customize-cra@^0.9.1: version "0.9.1" resolved "https://registry.yarnpkg.com/customize-cra/-/customize-cra-0.9.1.tgz#76b42c4f537c16329eccc09cfefd804d04c81550" @@ -5155,23 +5187,23 @@ escodegen@^1.9.1: optionalDependencies: source-map "~0.6.1" -eslint-config-airbnb-base@^13.2.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-13.2.0.tgz#f6ea81459ff4dec2dda200c35f1d8f7419d57943" - integrity sha512-1mg/7eoB4AUeB0X1c/ho4vb2gYkNH8Trr/EgCT/aGmKhhG+F6vF5s8+iRBlWAzFIAphxIdp3YfEKgEl0f9Xg+w== +eslint-config-airbnb-base@^14.1.0: + version "14.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz#2ba4592dd6843258221d9bff2b6831bd77c874e4" + integrity sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw== dependencies: - confusing-browser-globals "^1.0.5" + confusing-browser-globals "^1.0.9" object.assign "^4.1.0" - object.entries "^1.1.0" + object.entries "^1.1.1" -eslint-config-airbnb@^17.1.0: - version "17.1.1" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-17.1.1.tgz#2272e0b86bb1e2b138cdf88d07a3b6f4cda3d626" - integrity sha512-xCu//8a/aWqagKljt+1/qAM62BYZeNq04HmdevG5yUGWpja0I/xhqd6GdLRch5oetEGFiJAnvtGuTEAese53Qg== +eslint-config-airbnb@^18.1.0: + version "18.1.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb/-/eslint-config-airbnb-18.1.0.tgz#724d7e93dadd2169492ff5363c5aaa779e01257d" + integrity sha512-kZFuQC/MPnH7KJp6v95xsLBf63G/w7YqdPfQ0MUanxQ7zcKUNG8j+sSY860g3NwCBOa62apw16J6pRN+AOgXzw== dependencies: - eslint-config-airbnb-base "^13.2.0" + eslint-config-airbnb-base "^14.1.0" object.assign "^4.1.0" - object.entries "^1.1.0" + object.entries "^1.1.1" eslint-config-react-app@^5.2.1: version "5.2.1" @@ -5214,7 +5246,7 @@ eslint-plugin-flowtype@4.6.0: dependencies: lodash "^4.17.15" -eslint-plugin-import@2.20.1, eslint-plugin-import@^2.16.0: +eslint-plugin-import@2.20.1: version "2.20.1" resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== @@ -5270,10 +5302,10 @@ eslint-plugin-react@7.19.0: string.prototype.matchall "^4.0.2" xregexp "^4.3.0" -eslint-plugin-react@^7.12.4: - version "7.18.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.18.3.tgz#8be671b7f6be095098e79d27ac32f9580f599bc8" - integrity sha512-Bt56LNHAQCoou88s8ViKRjMB2+36XRejCQ1VoLj716KI1MoE99HpTVvIThJ0rvFmG4E4Gsq+UgToEjn+j044Bg== +eslint-plugin-react@^7.20.0: + version "7.20.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.20.0.tgz#f98712f0a5e57dfd3e5542ef0604b8739cd47be3" + integrity sha512-rqe1abd0vxMjmbPngo4NaYxTcR3Y4Hrmc/jg4T+sYz63yqlmJRknpEQfmWY+eDWPuMmix6iUIK+mv0zExjeLgA== dependencies: array-includes "^3.1.1" doctrine "^2.1.0" @@ -5283,8 +5315,9 @@ eslint-plugin-react@^7.12.4: object.fromentries "^2.0.2" object.values "^1.1.1" prop-types "^15.7.2" - resolve "^1.14.2" + resolve "^1.15.1" string.prototype.matchall "^4.0.2" + xregexp "^4.3.0" eslint-scope@^4.0.3: version "4.0.3" @@ -8114,7 +8147,7 @@ mem@^4.0.0: mimic-fn "^2.0.0" p-is-promise "^2.0.0" -memoize-one@^5.0.0: +memoize-one@^5.0.0, memoize-one@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/memoize-one/-/memoize-one-5.1.1.tgz#047b6e3199b508eaec03504de71229b8eb1d75c0" integrity sha512-HKeeBpWvqiVJD57ZUAsJNm71eHTykffzcLZVYWiVfQeI1rJtuEaS7hQiEpWfVVk18donPwJEcFKIkCmPJNOhHA== @@ -10224,6 +10257,11 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +raf-schd@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/raf-schd/-/raf-schd-4.0.2.tgz#bd44c708188f2e84c810bf55fcea9231bcaed8a0" + integrity sha512-VhlMZmGy6A6hrkJWHLNTGl5gtgMUm+xfGza6wbwnE914yeQ5Ybm18vgM734RZhMgfw4tacUrWseGZlpUrrakEQ== + raf@^3.4.0, raf@^3.4.1: version "3.4.1" resolved "https://registry.yarnpkg.com/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" @@ -10667,6 +10705,19 @@ react-app-rewired@^2.1.0: dependencies: semver "^5.6.0" +react-beautiful-dnd@^13.0.0: + version "13.0.0" + resolved "https://registry.yarnpkg.com/react-beautiful-dnd/-/react-beautiful-dnd-13.0.0.tgz#f70cc8ff82b84bc718f8af157c9f95757a6c3b40" + integrity sha512-87It8sN0ineoC3nBW0SbQuTFXM6bUqM62uJGY4BtTf0yzPl8/3+bHMWkgIe0Z6m8e+gJgjWxefGRVfpE3VcdEg== + dependencies: + "@babel/runtime" "^7.8.4" + css-box-model "^1.2.0" + memoize-one "^5.1.1" + raf-schd "^4.0.2" + react-redux "^7.1.1" + redux "^4.0.4" + use-memo-one "^1.1.1" + react-chartjs-2@^2.7.4: version "2.9.0" resolved "https://registry.yarnpkg.com/react-chartjs-2/-/react-chartjs-2-2.9.0.tgz#d054dbdd763fbe9a76296a4ae0752ea549b76d9e" @@ -10725,7 +10776,7 @@ react-fast-compare@^2.0.4: resolved "https://registry.yarnpkg.com/react-fast-compare/-/react-fast-compare-2.0.4.tgz#e84b4d455b0fec113e0402c329352715196f81f9" integrity sha512-suNP+J1VU1MWFKcyt7RtjiSWUjvidmQSlqu+eHslq+342xCbGTYmC0mEhPCOHxlW0CywylOC1u2DFAT+bv4dBw== -react-is@^16.12.0: +react-is@^16.12.0, react-is@^16.9.0: version "16.13.1" resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== @@ -10740,6 +10791,17 @@ react-lifecycles-compat@^3.0.4: resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA== +react-redux@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/react-redux/-/react-redux-7.2.0.tgz#f970f62192b3981642fec46fd0db18a074fe879d" + integrity sha512-EvCAZYGfOLqwV7gh849xy9/pt55rJXPwmYvI4lilPM5rUT/1NxuuN59ipdBksRVSvz0KInbPnp4IfoXJXCqiDA== + dependencies: + "@babel/runtime" "^7.5.5" + hoist-non-react-statics "^3.3.0" + loose-envify "^1.4.0" + prop-types "^15.7.2" + react-is "^16.9.0" + react-resize-detector@^2.3.0: version "2.3.0" resolved "https://registry.yarnpkg.com/react-resize-detector/-/react-resize-detector-2.3.0.tgz#57bad1ae26a28a62a2ddb678ba6ffdf8fa2b599c" @@ -11015,6 +11077,14 @@ reduce-function-call@^1.0.1: dependencies: balanced-match "^1.0.0" +redux@^4.0.4: + version "4.0.5" + resolved "https://registry.yarnpkg.com/redux/-/redux-4.0.5.tgz#4db5de5816e17891de8a80c424232d06f051d93f" + integrity sha512-VSz1uMAH24DM6MF72vcojpYPtrTUu3ByVWfPL1nPfVRb5mZVTve5GnNCUV53QM/BZ66xfWrm0CTWoM+Xlz8V1w== + dependencies: + loose-envify "^1.4.0" + symbol-observable "^1.2.0" + regenerate-unicode-properties@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz#ef51e0f0ea4ad424b77bf7cb41f3e015c70a3f0e" @@ -11329,7 +11399,7 @@ resolve@1.15.0: dependencies: path-parse "^1.0.6" -resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.3.2, resolve@^1.5.0, resolve@^1.8.1: version "1.15.1" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== @@ -12377,6 +12447,11 @@ svgo@^1.0.0, svgo@^1.2.2: unquote "~1.1.1" util.promisify "~1.0.0" +symbol-observable@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.2.0.tgz#c22688aed4eab3cdc2dfeacbb561660560a00804" + integrity sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ== + symbol-tree@^3.2.2: version "3.2.4" resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" @@ -12542,6 +12617,11 @@ tiny-invariant@^1.0.2: resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== +tiny-invariant@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.1.0.tgz#634c5f8efdc27714b7f386c35e6760991d230875" + integrity sha512-ytxQvrb1cPc9WBEI/HSeYYoGD0kWnGEOR8RY6KomWLBVhqz0RgTwVO9dLrGz7dC+nN9llyI7OKAgRq8Vq4ZBSw== + tiny-warning@^1.0.0, tiny-warning@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" @@ -12870,6 +12950,11 @@ url@^0.11.0: punycode "1.3.2" querystring "0.2.0" +use-memo-one@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/use-memo-one/-/use-memo-one-1.1.1.tgz#39e6f08fe27e422a7d7b234b5f9056af313bd22c" + integrity sha512-oFfsyun+bP7RX8X2AskHNTxu+R3QdE/RC5IefMbqptmACAA/gfol1KDD5KRzPsGMa62sWxGZw+Ui43u6x4ddoQ== + use@^3.1.0: version "3.1.1" resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" diff --git a/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/ExploreQueryBuilder.js b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/ExploreQueryBuilder.js index 64267039f01d4..b1d6d7c132bff 100644 --- a/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/ExploreQueryBuilder.js +++ b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/ExploreQueryBuilder.js @@ -1,117 +1,165 @@ -import React from 'react'; +import React, { Fragment, useState } from 'react'; import * as PropTypes from 'prop-types'; -import { - Row, Col, Divider, Card -} from 'antd'; +import { Row, Col, Divider, Card, Popover, Button } from 'antd'; +import { SortAscendingOutlined } from '@ant-design/icons'; import { QueryBuilder } from '@cubejs-client/react'; import ChartRenderer from '../ChartRenderer'; import MemberGroup from './MemberGroup'; import FilterGroup from './FilterGroup'; import TimeGroup from './TimeGroup'; import SelectChartType from './SelectChartType'; +import OrderGroup from './Order/OrderGroup'; -const ExploreQueryBuilder = ({ - vizState, cubejsApi, setVizState, chartExtra -}) => ( - [ - - - - - - - - - - - - - - +export default function ExploreQueryBuilder({ vizState, cubejsApi, setVizState, chartExtra }) { + const [isOrderPopoverVisible, toggleOrderPopover] = useState(false); + + return ( + { + return ( + - + + + + + + + + + + + + + + + + + + + + + + + + + + + } + visible={isOrderPopoverVisible} + placement="bottomLeft" + trigger="click" + onVisibleChange={(visible) => { + if (!visible) { + toggleOrderPopover(false); + } else { + if (orderMembers.length) { + toggleOrderPopover(!isOrderPopoverVisible); + } + } + }} + > + + + + + + - + {isQueryPresent ? ( + + + + ) : ( +

Choose a measure or dimension to get started

+ )}
-
- -
, - - - {isQueryPresent ? ( - - - - ) :

Choose a measure or dimension to get started

} - -
- ]} - /> -); + + ); + }} + /> + ); +} ExploreQueryBuilder.propTypes = { vizState: PropTypes.object, setVizState: PropTypes.func, cubejsApi: PropTypes.object, - chartExtra: PropTypes.array + chartExtra: PropTypes.array, }; ExploreQueryBuilder.defaultProps = { vizState: {}, setVizState: null, cubejsApi: null, - chartExtra: null + chartExtra: null, }; - -export default ExploreQueryBuilder; diff --git a/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/DraggableItem.js b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/DraggableItem.js new file mode 100644 index 0000000000000..361f99acbbfa7 --- /dev/null +++ b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/DraggableItem.js @@ -0,0 +1,42 @@ +import React from 'react'; +import { Button } from 'antd'; +import { Draggable } from 'react-beautiful-dnd'; +import { DragOutlined } from '@ant-design/icons'; + +const orderOptions = ['asc', 'desc', 'none']; + +export default function DraggableItem({ id, index, order = 'none', children, onOrderChange }) { + const getNextOrder = () => { + const index = orderOptions.indexOf(order) + 1; + return orderOptions[index > 2 ? 0 : index]; + }; + + return ( + + {({ draggableProps, dragHandleProps, innerRef }) => ( +
+ + + {children} + + +
+ )} +
+ ); +} diff --git a/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/OrderGroup.js b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/OrderGroup.js new file mode 100644 index 0000000000000..8a02fe1849de0 --- /dev/null +++ b/packages/cubejs-server-core/dev/templates/packages/react-antd-dynamic/scaffolding/src/components/QueryBuilder/Order/OrderGroup.js @@ -0,0 +1,40 @@ +import React from 'react'; +import { DragDropContext, Droppable } from 'react-beautiful-dnd'; +import DraggableItem from './DraggableItem'; + +export default function OrderGroup({ orderMembers, onOrderChange, onReorder }) { + return ( + { + onReorder(source && source.index, destination && destination.index) + }} + > + + {(provided) => ( +
+ {orderMembers.map(({ id, title, order }, index) => ( + + {title} + + ))} + + {provided.placeholder} +
+ )} +
+
+ ); +} diff --git a/yarn.lock b/yarn.lock index 4cd853495f02c..9c444ac0e5d9b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1627,15 +1627,15 @@ abbrev@1: resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== -acorn-jsx@^5.1.0: +acorn-jsx@^5.2.0: version "5.2.0" resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== -acorn@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== +acorn@^7.1.1: + version "7.2.0" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" + integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== agent-base@4, agent-base@^4.3.0: version "4.3.0" @@ -2877,9 +2877,9 @@ eslint-plugin-es@^2.0.0: regexpp "^3.0.0" eslint-plugin-import@^2.18.2: - version "2.20.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== + version "2.20.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.2.tgz#91fc3807ce08be4837141272c8b99073906e588d" + integrity sha512-FObidqpXrR8OnCh4iNsxy+WACztJLXAHBO5hK79T1Hc77PgQZkyDGA5Ag9xAvRpglvLNxhH/zSmZ70/pZ31dHg== dependencies: array-includes "^3.0.3" array.prototype.flat "^1.2.1" @@ -2970,12 +2970,12 @@ eslint@6.8.0: v8-compile-cache "^2.0.3" espree@^6.1.2: - version "6.1.2" - resolved "https://registry.yarnpkg.com/espree/-/espree-6.1.2.tgz#6c272650932b4f91c3714e5e7b5f5e2ecf47262d" - integrity sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA== + version "6.2.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-6.2.1.tgz#77fc72e1fd744a2052c20f38a5b575832e82734a" + integrity sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw== dependencies: - acorn "^7.1.0" - acorn-jsx "^5.1.0" + acorn "^7.1.1" + acorn-jsx "^5.2.0" eslint-visitor-keys "^1.1.0" esprima@^4.0.0: @@ -2984,11 +2984,11 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.0.1.tgz#406c51658b1f5991a5f9b62b1dc25b00e3e5c708" - integrity sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA== + version "1.3.1" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.3.1.tgz#b78b5828aa8e214e29fb74c4d5b752e1c033da57" + integrity sha512-olpvt9QG0vniUBZspVRN6lwB7hOZoTRtT+jzR+tS4ffYx2mzbw+z0XCOk44aaLYKApNX5nMm+E+P6o25ip/DHQ== dependencies: - estraverse "^4.0.0" + estraverse "^5.1.0" esrecurse@^4.1.0: version "4.2.1" @@ -2997,11 +2997,16 @@ esrecurse@^4.1.0: dependencies: estraverse "^4.1.0" -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1: +estraverse@^4.1.0, estraverse@^4.1.1: version "4.3.0" resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== +estraverse@^5.1.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.1.0.tgz#374309d39fd935ae500e7b92e8a6b4c720e59642" + integrity sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw== + estree-walker@^0.5.1: version "0.5.2" resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.5.2.tgz#d3850be7529c9580d815600b53126515e146dd39" @@ -6466,9 +6471,9 @@ strip-indent@^2.0.0: integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= strip-json-comments@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.0.1.tgz#85713975a91fb87bf1b305cca77395e40d2a64a7" - integrity sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw== + version "3.1.0" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.0.tgz#7638d31422129ecf4457440009fba03f9f9ac180" + integrity sha512-e6/d0eBu7gHtdCqFt0xJr642LdToM5/cN4Qb9DbHjVx1CP5RyeM+zH7pbecEmDv/lBqb0QH+6Uqq75rxFPkM0w== strong-log-transformer@^2.0.0: version "2.1.0"