@hailin-zheng/editor-core 2.0.1 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/index.js CHANGED
@@ -216,8 +216,8 @@ function setNotifyChangedCallback(target, p, cb) {
216
216
  activeFns.pop();
217
217
  }
218
218
  const isDate = (val) => val instanceof Date;
219
- const objectToString = Object.prototype.toString;
220
- const toTypeString = (value) => objectToString.call(value);
219
+ const objectToString$4 = Object.prototype.toString;
220
+ const toTypeString = (value) => objectToString$4.call(value);
221
221
  const toRawType = (value) => {
222
222
  return toTypeString(value).slice(8, -1);
223
223
  };
@@ -19488,12 +19488,437 @@ class DocumentSvg {
19488
19488
  }
19489
19489
  }
19490
19490
 
19491
- var escape = require('lodash.escape');
19492
- var parseSelector = require('parse-sel');
19493
- var VOID_ELEMENTS = require('./elements').VOID;
19494
- var CONTAINER_ELEMENTS = require('./elements').CONTAINER;
19491
+ var commonjsGlobal = typeof globalThis !== 'undefined' ? globalThis : typeof window !== 'undefined' ? window : typeof global !== 'undefined' ? global : typeof self !== 'undefined' ? self : {};
19495
19492
 
19496
- module.exports = function init (modules) {
19493
+ function createCommonjsModule(fn, module) {
19494
+ return module = { exports: {} }, fn(module, module.exports), module.exports;
19495
+ }
19496
+
19497
+ /**
19498
+ * lodash (Custom Build) <https://lodash.com/>
19499
+ * Build: `lodash modularize exports="npm" -o ./`
19500
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
19501
+ * Released under MIT license <https://lodash.com/license>
19502
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
19503
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
19504
+ */
19505
+
19506
+ /** Used as references for various `Number` constants. */
19507
+ var INFINITY$2 = 1 / 0;
19508
+
19509
+ /** `Object#toString` result references. */
19510
+ var symbolTag$1 = '[object Symbol]';
19511
+
19512
+ /** Used to match HTML entities and HTML characters. */
19513
+ var reUnescapedHtml = /[&<>"'`]/g,
19514
+ reHasUnescapedHtml = RegExp(reUnescapedHtml.source);
19515
+
19516
+ /** Used to map characters to HTML entities. */
19517
+ var htmlEscapes = {
19518
+ '&': '&amp;',
19519
+ '<': '&lt;',
19520
+ '>': '&gt;',
19521
+ '"': '&quot;',
19522
+ "'": '&#39;',
19523
+ '`': '&#96;'
19524
+ };
19525
+
19526
+ /** Detect free variable `global` from Node.js. */
19527
+ var freeGlobal$2 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
19528
+
19529
+ /** Detect free variable `self`. */
19530
+ var freeSelf$2 = typeof self == 'object' && self && self.Object === Object && self;
19531
+
19532
+ /** Used as a reference to the global object. */
19533
+ var root$2 = freeGlobal$2 || freeSelf$2 || Function('return this')();
19534
+
19535
+ /**
19536
+ * The base implementation of `_.propertyOf` without support for deep paths.
19537
+ *
19538
+ * @private
19539
+ * @param {Object} object The object to query.
19540
+ * @returns {Function} Returns the new accessor function.
19541
+ */
19542
+ function basePropertyOf$1(object) {
19543
+ return function(key) {
19544
+ return object == null ? undefined : object[key];
19545
+ };
19546
+ }
19547
+
19548
+ /**
19549
+ * Used by `_.escape` to convert characters to HTML entities.
19550
+ *
19551
+ * @private
19552
+ * @param {string} chr The matched character to escape.
19553
+ * @returns {string} Returns the escaped character.
19554
+ */
19555
+ var escapeHtmlChar = basePropertyOf$1(htmlEscapes);
19556
+
19557
+ /** Used for built-in method references. */
19558
+ var objectProto$3 = Object.prototype;
19559
+
19560
+ /**
19561
+ * Used to resolve the
19562
+ * [`toStringTag`](http://ecma-international.org/ecma-262/6.0/#sec-object.prototype.tostring)
19563
+ * of values.
19564
+ */
19565
+ var objectToString$3 = objectProto$3.toString;
19566
+
19567
+ /** Built-in value references. */
19568
+ var Symbol$2 = root$2.Symbol;
19569
+
19570
+ /** Used to convert symbols to primitives and strings. */
19571
+ var symbolProto$1 = Symbol$2 ? Symbol$2.prototype : undefined,
19572
+ symbolToString$1 = symbolProto$1 ? symbolProto$1.toString : undefined;
19573
+
19574
+ /**
19575
+ * The base implementation of `_.toString` which doesn't convert nullish
19576
+ * values to empty strings.
19577
+ *
19578
+ * @private
19579
+ * @param {*} value The value to process.
19580
+ * @returns {string} Returns the string.
19581
+ */
19582
+ function baseToString$1(value) {
19583
+ // Exit early for strings to avoid a performance hit in some environments.
19584
+ if (typeof value == 'string') {
19585
+ return value;
19586
+ }
19587
+ if (isSymbol$1(value)) {
19588
+ return symbolToString$1 ? symbolToString$1.call(value) : '';
19589
+ }
19590
+ var result = (value + '');
19591
+ return (result == '0' && (1 / value) == -INFINITY$2) ? '-0' : result;
19592
+ }
19593
+
19594
+ /**
19595
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
19596
+ * and has a `typeof` result of "object".
19597
+ *
19598
+ * @static
19599
+ * @memberOf _
19600
+ * @since 4.0.0
19601
+ * @category Lang
19602
+ * @param {*} value The value to check.
19603
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
19604
+ * @example
19605
+ *
19606
+ * _.isObjectLike({});
19607
+ * // => true
19608
+ *
19609
+ * _.isObjectLike([1, 2, 3]);
19610
+ * // => true
19611
+ *
19612
+ * _.isObjectLike(_.noop);
19613
+ * // => false
19614
+ *
19615
+ * _.isObjectLike(null);
19616
+ * // => false
19617
+ */
19618
+ function isObjectLike$2(value) {
19619
+ return !!value && typeof value == 'object';
19620
+ }
19621
+
19622
+ /**
19623
+ * Checks if `value` is classified as a `Symbol` primitive or object.
19624
+ *
19625
+ * @static
19626
+ * @memberOf _
19627
+ * @since 4.0.0
19628
+ * @category Lang
19629
+ * @param {*} value The value to check.
19630
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
19631
+ * @example
19632
+ *
19633
+ * _.isSymbol(Symbol.iterator);
19634
+ * // => true
19635
+ *
19636
+ * _.isSymbol('abc');
19637
+ * // => false
19638
+ */
19639
+ function isSymbol$1(value) {
19640
+ return typeof value == 'symbol' ||
19641
+ (isObjectLike$2(value) && objectToString$3.call(value) == symbolTag$1);
19642
+ }
19643
+
19644
+ /**
19645
+ * Converts `value` to a string. An empty string is returned for `null`
19646
+ * and `undefined` values. The sign of `-0` is preserved.
19647
+ *
19648
+ * @static
19649
+ * @memberOf _
19650
+ * @since 4.0.0
19651
+ * @category Lang
19652
+ * @param {*} value The value to process.
19653
+ * @returns {string} Returns the string.
19654
+ * @example
19655
+ *
19656
+ * _.toString(null);
19657
+ * // => ''
19658
+ *
19659
+ * _.toString(-0);
19660
+ * // => '-0'
19661
+ *
19662
+ * _.toString([1, 2, 3]);
19663
+ * // => '1,2,3'
19664
+ */
19665
+ function toString$1(value) {
19666
+ return value == null ? '' : baseToString$1(value);
19667
+ }
19668
+
19669
+ /**
19670
+ * Converts the characters "&", "<", ">", '"', "'", and "\`" in `string` to
19671
+ * their corresponding HTML entities.
19672
+ *
19673
+ * **Note:** No other characters are escaped. To escape additional
19674
+ * characters use a third-party library like [_he_](https://mths.be/he).
19675
+ *
19676
+ * Though the ">" character is escaped for symmetry, characters like
19677
+ * ">" and "/" don't need escaping in HTML and have no special meaning
19678
+ * unless they're part of a tag or unquoted attribute value. See
19679
+ * [Mathias Bynens's article](https://mathiasbynens.be/notes/ambiguous-ampersands)
19680
+ * (under "semi-related fun fact") for more details.
19681
+ *
19682
+ * Backticks are escaped because in IE < 9, they can break out of
19683
+ * attribute values or HTML comments. See [#59](https://html5sec.org/#59),
19684
+ * [#102](https://html5sec.org/#102), [#108](https://html5sec.org/#108), and
19685
+ * [#133](https://html5sec.org/#133) of the
19686
+ * [HTML5 Security Cheatsheet](https://html5sec.org/) for more details.
19687
+ *
19688
+ * When working with HTML you should always
19689
+ * [quote attribute values](http://wonko.com/post/html-escaping) to reduce
19690
+ * XSS vectors.
19691
+ *
19692
+ * @static
19693
+ * @since 0.1.0
19694
+ * @memberOf _
19695
+ * @category String
19696
+ * @param {string} [string=''] The string to escape.
19697
+ * @returns {string} Returns the escaped string.
19698
+ * @example
19699
+ *
19700
+ * _.escape('fred, barney, & pebbles');
19701
+ * // => 'fred, barney, &amp; pebbles'
19702
+ */
19703
+ function escape(string) {
19704
+ string = toString$1(string);
19705
+ return (string && reHasUnescapedHtml.test(string))
19706
+ ? string.replace(reUnescapedHtml, escapeHtmlChar)
19707
+ : string;
19708
+ }
19709
+
19710
+ var lodash_escape = escape;
19711
+
19712
+ /*!
19713
+ * Cross-Browser Split 1.1.1
19714
+ * Copyright 2007-2012 Steven Levithan <stevenlevithan.com>
19715
+ * Available under the MIT License
19716
+ * ECMAScript compliant, uniform cross-browser split method
19717
+ */
19718
+
19719
+ /**
19720
+ * Splits a string into an array of strings using a regex or string separator. Matches of the
19721
+ * separator are not included in the result array. However, if `separator` is a regex that contains
19722
+ * capturing groups, backreferences are spliced into the result each time `separator` is matched.
19723
+ * Fixes browser bugs compared to the native `String.prototype.split` and can be used reliably
19724
+ * cross-browser.
19725
+ * @param {String} str String to split.
19726
+ * @param {RegExp|String} separator Regex or string to use for separating the string.
19727
+ * @param {Number} [limit] Maximum number of items to include in the result array.
19728
+ * @returns {Array} Array of substrings.
19729
+ * @example
19730
+ *
19731
+ * // Basic use
19732
+ * split('a b c d', ' ');
19733
+ * // -> ['a', 'b', 'c', 'd']
19734
+ *
19735
+ * // With limit
19736
+ * split('a b c d', ' ', 2);
19737
+ * // -> ['a', 'b']
19738
+ *
19739
+ * // Backreferences in result array
19740
+ * split('..word1 word2..', /([a-z]+)(\d+)/i);
19741
+ * // -> ['..', 'word', '1', ' ', 'word', '2', '..']
19742
+ */
19743
+ var browserSplit = (function split(undef) {
19744
+
19745
+ var nativeSplit = String.prototype.split,
19746
+ compliantExecNpcg = /()??/.exec("")[1] === undef,
19747
+ // NPCG: nonparticipating capturing group
19748
+ self;
19749
+
19750
+ self = function(str, separator, limit) {
19751
+ // If `separator` is not a regex, use `nativeSplit`
19752
+ if (Object.prototype.toString.call(separator) !== "[object RegExp]") {
19753
+ return nativeSplit.call(str, separator, limit);
19754
+ }
19755
+ var output = [],
19756
+ flags = (separator.ignoreCase ? "i" : "") + (separator.multiline ? "m" : "") + (separator.extended ? "x" : "") + // Proposed for ES6
19757
+ (separator.sticky ? "y" : ""),
19758
+ // Firefox 3+
19759
+ lastLastIndex = 0,
19760
+ // Make `global` and avoid `lastIndex` issues by working with a copy
19761
+ separator = new RegExp(separator.source, flags + "g"),
19762
+ separator2, match, lastIndex, lastLength;
19763
+ str += ""; // Type-convert
19764
+ if (!compliantExecNpcg) {
19765
+ // Doesn't need flags gy, but they don't hurt
19766
+ separator2 = new RegExp("^" + separator.source + "$(?!\\s)", flags);
19767
+ }
19768
+ /* Values for `limit`, per the spec:
19769
+ * If undefined: 4294967295 // Math.pow(2, 32) - 1
19770
+ * If 0, Infinity, or NaN: 0
19771
+ * If positive number: limit = Math.floor(limit); if (limit > 4294967295) limit -= 4294967296;
19772
+ * If negative number: 4294967296 - Math.floor(Math.abs(limit))
19773
+ * If other: Type-convert, then use the above rules
19774
+ */
19775
+ limit = limit === undef ? -1 >>> 0 : // Math.pow(2, 32) - 1
19776
+ limit >>> 0; // ToUint32(limit)
19777
+ while (match = separator.exec(str)) {
19778
+ // `separator.lastIndex` is not reliable cross-browser
19779
+ lastIndex = match.index + match[0].length;
19780
+ if (lastIndex > lastLastIndex) {
19781
+ output.push(str.slice(lastLastIndex, match.index));
19782
+ // Fix browsers whose `exec` methods don't consistently return `undefined` for
19783
+ // nonparticipating capturing groups
19784
+ if (!compliantExecNpcg && match.length > 1) {
19785
+ match[0].replace(separator2, function() {
19786
+ for (var i = 1; i < arguments.length - 2; i++) {
19787
+ if (arguments[i] === undef) {
19788
+ match[i] = undef;
19789
+ }
19790
+ }
19791
+ });
19792
+ }
19793
+ if (match.length > 1 && match.index < str.length) {
19794
+ Array.prototype.push.apply(output, match.slice(1));
19795
+ }
19796
+ lastLength = match[0].length;
19797
+ lastLastIndex = lastIndex;
19798
+ if (output.length >= limit) {
19799
+ break;
19800
+ }
19801
+ }
19802
+ if (separator.lastIndex === match.index) {
19803
+ separator.lastIndex++; // Avoid an infinite loop
19804
+ }
19805
+ }
19806
+ if (lastLastIndex === str.length) {
19807
+ if (lastLength || !separator.test("")) {
19808
+ output.push("");
19809
+ }
19810
+ } else {
19811
+ output.push(str.slice(lastLastIndex));
19812
+ }
19813
+ return output.length > limit ? output.slice(0, limit) : output;
19814
+ };
19815
+
19816
+ return self;
19817
+ })();
19818
+
19819
+ // https://github.com/Matt-Esch/virtual-dom/blob/master/virtual-hyperscript/parse-tag.js
19820
+
19821
+
19822
+
19823
+ var classIdSplit = /([\.#]?[a-zA-Z0-9\u007F-\uFFFF_:-]+)/;
19824
+ var notClassId = /^\.|#/;
19825
+
19826
+ var parseSel = function parseSelector (selector, upper) {
19827
+ selector = selector || '';
19828
+ var tagName;
19829
+ var id = '';
19830
+ var classes = [];
19831
+
19832
+ var tagParts = browserSplit(selector, classIdSplit);
19833
+
19834
+ if (notClassId.test(tagParts[1]) || selector === '') {
19835
+ tagName = 'div';
19836
+ }
19837
+
19838
+ var part, type, i;
19839
+
19840
+ for (i = 0; i < tagParts.length; i++) {
19841
+ part = tagParts[i];
19842
+
19843
+ if (!part) {
19844
+ continue
19845
+ }
19846
+
19847
+ type = part.charAt(0);
19848
+
19849
+ if (!tagName) {
19850
+ tagName = part;
19851
+ } else if (type === '.') {
19852
+ classes.push(part.substring(1, part.length));
19853
+ } else if (type === '#') {
19854
+ id = part.substring(1, part.length);
19855
+ }
19856
+ }
19857
+
19858
+ return {
19859
+ tagName: upper === true ? tagName.toUpperCase() : tagName,
19860
+ id: id,
19861
+ className: classes.join(' ')
19862
+ }
19863
+ };
19864
+
19865
+ // All SVG children elements, not in this list, should self-close
19866
+
19867
+ var CONTAINER = {
19868
+ // http://www.w3.org/TR/SVG/intro.html#TermContainerElement
19869
+ 'a': true,
19870
+ 'defs': true,
19871
+ 'glyph': true,
19872
+ 'g': true,
19873
+ 'marker': true,
19874
+ 'mask': true,
19875
+ 'missing-glyph': true,
19876
+ 'pattern': true,
19877
+ 'svg': true,
19878
+ 'switch': true,
19879
+ 'symbol': true,
19880
+ 'text': true,
19881
+ 'clipPath': true,
19882
+ 'linearGradient': true,
19883
+
19884
+ 'style': true,
19885
+ 'script': true,
19886
+
19887
+ // http://www.w3.org/TR/SVG/intro.html#TermDescriptiveElement
19888
+ 'desc': true,
19889
+ 'metadata': true,
19890
+ 'title': true
19891
+ };
19892
+
19893
+ // http://www.w3.org/html/wg/drafts/html/master/syntax.html#void-elements
19894
+
19895
+ var VOID = {
19896
+ area: true,
19897
+ base: true,
19898
+ br: true,
19899
+ col: true,
19900
+ embed: true,
19901
+ hr: true,
19902
+ img: true,
19903
+ input: true,
19904
+ keygen: true,
19905
+ link: true,
19906
+ meta: true,
19907
+ param: true,
19908
+ source: true,
19909
+ track: true,
19910
+ wbr: true
19911
+ };
19912
+
19913
+ var elements = {
19914
+ CONTAINER: CONTAINER,
19915
+ VOID: VOID
19916
+ };
19917
+
19918
+ var VOID_ELEMENTS = elements.VOID;
19919
+ var CONTAINER_ELEMENTS = elements.CONTAINER;
19920
+
19921
+ var init = function init (modules) {
19497
19922
  function parse (vnode, node) {
19498
19923
  var result = [];
19499
19924
  var attributes = new Map([
@@ -19520,7 +19945,7 @@ module.exports = function init (modules) {
19520
19945
  }
19521
19946
 
19522
19947
  if (!vnode.sel && typeof vnode.text === 'string') {
19523
- return escape(vnode.text)
19948
+ return lodash_escape(vnode.text)
19524
19949
  }
19525
19950
 
19526
19951
  vnode.data = vnode.data || {};
@@ -19532,7 +19957,7 @@ module.exports = function init (modules) {
19532
19957
  vnode.data.hook.init(vnode);
19533
19958
  }
19534
19959
 
19535
- var node = parseSelector(vnode.sel);
19960
+ var node = parseSel(vnode.sel);
19536
19961
  var tagName = node.tagName;
19537
19962
  var attributes = parse(vnode, node);
19538
19963
  var svg = vnode.data.ns === 'http://www.w3.org/2000/svg';
@@ -19558,7 +19983,7 @@ module.exports = function init (modules) {
19558
19983
  if (vnode.data.props && vnode.data.props.innerHTML) {
19559
19984
  tag.push(vnode.data.props.innerHTML);
19560
19985
  } else if (vnode.text) {
19561
- tag.push(escape(vnode.text));
19986
+ tag.push(lodash_escape(vnode.text));
19562
19987
  } else if (vnode.children) {
19563
19988
  vnode.children.forEach(function (child) {
19564
19989
  tag.push(renderToString(child));
@@ -19571,16 +19996,4442 @@ module.exports = function init (modules) {
19571
19996
  }
19572
19997
  };
19573
19998
 
19574
- var init = /*#__PURE__*/Object.freeze({
19575
- __proto__: null
19576
- });
19999
+ /**
20000
+ * lodash (Custom Build) <https://lodash.com/>
20001
+ * Build: `lodash modularize exports="npm" -o ./`
20002
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
20003
+ * Released under MIT license <https://lodash.com/license>
20004
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
20005
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
20006
+ */
20007
+
20008
+ /** Used as references for various `Number` constants. */
20009
+ var MAX_SAFE_INTEGER = 9007199254740991;
20010
+
20011
+ /** `Object#toString` result references. */
20012
+ var argsTag = '[object Arguments]',
20013
+ funcTag$1 = '[object Function]',
20014
+ genTag$1 = '[object GeneratorFunction]';
20015
+
20016
+ /** Used to detect unsigned integer values. */
20017
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
20018
+
20019
+ /**
20020
+ * The base implementation of `_.times` without support for iteratee shorthands
20021
+ * or max array length checks.
20022
+ *
20023
+ * @private
20024
+ * @param {number} n The number of times to invoke `iteratee`.
20025
+ * @param {Function} iteratee The function invoked per iteration.
20026
+ * @returns {Array} Returns the array of results.
20027
+ */
20028
+ function baseTimes(n, iteratee) {
20029
+ var index = -1,
20030
+ result = Array(n);
20031
+
20032
+ while (++index < n) {
20033
+ result[index] = iteratee(index);
20034
+ }
20035
+ return result;
20036
+ }
20037
+
20038
+ /**
20039
+ * Creates a unary function that invokes `func` with its argument transformed.
20040
+ *
20041
+ * @private
20042
+ * @param {Function} func The function to wrap.
20043
+ * @param {Function} transform The argument transform.
20044
+ * @returns {Function} Returns the new function.
20045
+ */
20046
+ function overArg(func, transform) {
20047
+ return function(arg) {
20048
+ return func(transform(arg));
20049
+ };
20050
+ }
20051
+
20052
+ /** Used for built-in method references. */
20053
+ var objectProto$2 = Object.prototype;
20054
+
20055
+ /** Used to check objects for own properties. */
20056
+ var hasOwnProperty$2 = objectProto$2.hasOwnProperty;
20057
+
20058
+ /**
20059
+ * Used to resolve the
20060
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
20061
+ * of values.
20062
+ */
20063
+ var objectToString$2 = objectProto$2.toString;
20064
+
20065
+ /** Built-in value references. */
20066
+ var propertyIsEnumerable = objectProto$2.propertyIsEnumerable;
20067
+
20068
+ /* Built-in method references for those with the same name as other `lodash` methods. */
20069
+ var nativeKeys = overArg(Object.keys, Object);
20070
+
20071
+ /**
20072
+ * Creates an array of the enumerable property names of the array-like `value`.
20073
+ *
20074
+ * @private
20075
+ * @param {*} value The value to query.
20076
+ * @param {boolean} inherited Specify returning inherited property names.
20077
+ * @returns {Array} Returns the array of property names.
20078
+ */
20079
+ function arrayLikeKeys(value, inherited) {
20080
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
20081
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
20082
+ var result = (isArray(value) || isArguments(value))
20083
+ ? baseTimes(value.length, String)
20084
+ : [];
20085
+
20086
+ var length = result.length,
20087
+ skipIndexes = !!length;
20088
+
20089
+ for (var key in value) {
20090
+ if ((inherited || hasOwnProperty$2.call(value, key)) &&
20091
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
20092
+ result.push(key);
20093
+ }
20094
+ }
20095
+ return result;
20096
+ }
20097
+
20098
+ /**
20099
+ * The base implementation of `baseForOwn` which iterates over `object`
20100
+ * properties returned by `keysFunc` and invokes `iteratee` for each property.
20101
+ * Iteratee functions may exit iteration early by explicitly returning `false`.
20102
+ *
20103
+ * @private
20104
+ * @param {Object} object The object to iterate over.
20105
+ * @param {Function} iteratee The function invoked per iteration.
20106
+ * @param {Function} keysFunc The function to get the keys of `object`.
20107
+ * @returns {Object} Returns `object`.
20108
+ */
20109
+ var baseFor = createBaseFor();
20110
+
20111
+ /**
20112
+ * The base implementation of `_.forOwn` without support for iteratee shorthands.
20113
+ *
20114
+ * @private
20115
+ * @param {Object} object The object to iterate over.
20116
+ * @param {Function} iteratee The function invoked per iteration.
20117
+ * @returns {Object} Returns `object`.
20118
+ */
20119
+ function baseForOwn(object, iteratee) {
20120
+ return object && baseFor(object, iteratee, keys);
20121
+ }
20122
+
20123
+ /**
20124
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
20125
+ *
20126
+ * @private
20127
+ * @param {Object} object The object to query.
20128
+ * @returns {Array} Returns the array of property names.
20129
+ */
20130
+ function baseKeys(object) {
20131
+ if (!isPrototype(object)) {
20132
+ return nativeKeys(object);
20133
+ }
20134
+ var result = [];
20135
+ for (var key in Object(object)) {
20136
+ if (hasOwnProperty$2.call(object, key) && key != 'constructor') {
20137
+ result.push(key);
20138
+ }
20139
+ }
20140
+ return result;
20141
+ }
20142
+
20143
+ /**
20144
+ * Creates a base function for methods like `_.forIn` and `_.forOwn`.
20145
+ *
20146
+ * @private
20147
+ * @param {boolean} [fromRight] Specify iterating from right to left.
20148
+ * @returns {Function} Returns the new base function.
20149
+ */
20150
+ function createBaseFor(fromRight) {
20151
+ return function(object, iteratee, keysFunc) {
20152
+ var index = -1,
20153
+ iterable = Object(object),
20154
+ props = keysFunc(object),
20155
+ length = props.length;
20156
+
20157
+ while (length--) {
20158
+ var key = props[fromRight ? length : ++index];
20159
+ if (iteratee(iterable[key], key, iterable) === false) {
20160
+ break;
20161
+ }
20162
+ }
20163
+ return object;
20164
+ };
20165
+ }
20166
+
20167
+ /**
20168
+ * Checks if `value` is a valid array-like index.
20169
+ *
20170
+ * @private
20171
+ * @param {*} value The value to check.
20172
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
20173
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
20174
+ */
20175
+ function isIndex(value, length) {
20176
+ length = length == null ? MAX_SAFE_INTEGER : length;
20177
+ return !!length &&
20178
+ (typeof value == 'number' || reIsUint.test(value)) &&
20179
+ (value > -1 && value % 1 == 0 && value < length);
20180
+ }
20181
+
20182
+ /**
20183
+ * Checks if `value` is likely a prototype object.
20184
+ *
20185
+ * @private
20186
+ * @param {*} value The value to check.
20187
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
20188
+ */
20189
+ function isPrototype(value) {
20190
+ var Ctor = value && value.constructor,
20191
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto$2;
20192
+
20193
+ return value === proto;
20194
+ }
20195
+
20196
+ /**
20197
+ * Checks if `value` is likely an `arguments` object.
20198
+ *
20199
+ * @static
20200
+ * @memberOf _
20201
+ * @since 0.1.0
20202
+ * @category Lang
20203
+ * @param {*} value The value to check.
20204
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
20205
+ * else `false`.
20206
+ * @example
20207
+ *
20208
+ * _.isArguments(function() { return arguments; }());
20209
+ * // => true
20210
+ *
20211
+ * _.isArguments([1, 2, 3]);
20212
+ * // => false
20213
+ */
20214
+ function isArguments(value) {
20215
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
20216
+ return isArrayLikeObject(value) && hasOwnProperty$2.call(value, 'callee') &&
20217
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString$2.call(value) == argsTag);
20218
+ }
20219
+
20220
+ /**
20221
+ * Checks if `value` is classified as an `Array` object.
20222
+ *
20223
+ * @static
20224
+ * @memberOf _
20225
+ * @since 0.1.0
20226
+ * @category Lang
20227
+ * @param {*} value The value to check.
20228
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
20229
+ * @example
20230
+ *
20231
+ * _.isArray([1, 2, 3]);
20232
+ * // => true
20233
+ *
20234
+ * _.isArray(document.body.children);
20235
+ * // => false
20236
+ *
20237
+ * _.isArray('abc');
20238
+ * // => false
20239
+ *
20240
+ * _.isArray(_.noop);
20241
+ * // => false
20242
+ */
20243
+ var isArray = Array.isArray;
20244
+
20245
+ /**
20246
+ * Checks if `value` is array-like. A value is considered array-like if it's
20247
+ * not a function and has a `value.length` that's an integer greater than or
20248
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
20249
+ *
20250
+ * @static
20251
+ * @memberOf _
20252
+ * @since 4.0.0
20253
+ * @category Lang
20254
+ * @param {*} value The value to check.
20255
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
20256
+ * @example
20257
+ *
20258
+ * _.isArrayLike([1, 2, 3]);
20259
+ * // => true
20260
+ *
20261
+ * _.isArrayLike(document.body.children);
20262
+ * // => true
20263
+ *
20264
+ * _.isArrayLike('abc');
20265
+ * // => true
20266
+ *
20267
+ * _.isArrayLike(_.noop);
20268
+ * // => false
20269
+ */
20270
+ function isArrayLike(value) {
20271
+ return value != null && isLength(value.length) && !isFunction$1(value);
20272
+ }
20273
+
20274
+ /**
20275
+ * This method is like `_.isArrayLike` except that it also checks if `value`
20276
+ * is an object.
20277
+ *
20278
+ * @static
20279
+ * @memberOf _
20280
+ * @since 4.0.0
20281
+ * @category Lang
20282
+ * @param {*} value The value to check.
20283
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
20284
+ * else `false`.
20285
+ * @example
20286
+ *
20287
+ * _.isArrayLikeObject([1, 2, 3]);
20288
+ * // => true
20289
+ *
20290
+ * _.isArrayLikeObject(document.body.children);
20291
+ * // => true
20292
+ *
20293
+ * _.isArrayLikeObject('abc');
20294
+ * // => false
20295
+ *
20296
+ * _.isArrayLikeObject(_.noop);
20297
+ * // => false
20298
+ */
20299
+ function isArrayLikeObject(value) {
20300
+ return isObjectLike$1(value) && isArrayLike(value);
20301
+ }
20302
+
20303
+ /**
20304
+ * Checks if `value` is classified as a `Function` object.
20305
+ *
20306
+ * @static
20307
+ * @memberOf _
20308
+ * @since 0.1.0
20309
+ * @category Lang
20310
+ * @param {*} value The value to check.
20311
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
20312
+ * @example
20313
+ *
20314
+ * _.isFunction(_);
20315
+ * // => true
20316
+ *
20317
+ * _.isFunction(/abc/);
20318
+ * // => false
20319
+ */
20320
+ function isFunction$1(value) {
20321
+ // The use of `Object#toString` avoids issues with the `typeof` operator
20322
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
20323
+ var tag = isObject$1(value) ? objectToString$2.call(value) : '';
20324
+ return tag == funcTag$1 || tag == genTag$1;
20325
+ }
20326
+
20327
+ /**
20328
+ * Checks if `value` is a valid array-like length.
20329
+ *
20330
+ * **Note:** This method is loosely based on
20331
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
20332
+ *
20333
+ * @static
20334
+ * @memberOf _
20335
+ * @since 4.0.0
20336
+ * @category Lang
20337
+ * @param {*} value The value to check.
20338
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
20339
+ * @example
20340
+ *
20341
+ * _.isLength(3);
20342
+ * // => true
20343
+ *
20344
+ * _.isLength(Number.MIN_VALUE);
20345
+ * // => false
20346
+ *
20347
+ * _.isLength(Infinity);
20348
+ * // => false
20349
+ *
20350
+ * _.isLength('3');
20351
+ * // => false
20352
+ */
20353
+ function isLength(value) {
20354
+ return typeof value == 'number' &&
20355
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
20356
+ }
20357
+
20358
+ /**
20359
+ * Checks if `value` is the
20360
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
20361
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
20362
+ *
20363
+ * @static
20364
+ * @memberOf _
20365
+ * @since 0.1.0
20366
+ * @category Lang
20367
+ * @param {*} value The value to check.
20368
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
20369
+ * @example
20370
+ *
20371
+ * _.isObject({});
20372
+ * // => true
20373
+ *
20374
+ * _.isObject([1, 2, 3]);
20375
+ * // => true
20376
+ *
20377
+ * _.isObject(_.noop);
20378
+ * // => true
20379
+ *
20380
+ * _.isObject(null);
20381
+ * // => false
20382
+ */
20383
+ function isObject$1(value) {
20384
+ var type = typeof value;
20385
+ return !!value && (type == 'object' || type == 'function');
20386
+ }
20387
+
20388
+ /**
20389
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
20390
+ * and has a `typeof` result of "object".
20391
+ *
20392
+ * @static
20393
+ * @memberOf _
20394
+ * @since 4.0.0
20395
+ * @category Lang
20396
+ * @param {*} value The value to check.
20397
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
20398
+ * @example
20399
+ *
20400
+ * _.isObjectLike({});
20401
+ * // => true
20402
+ *
20403
+ * _.isObjectLike([1, 2, 3]);
20404
+ * // => true
20405
+ *
20406
+ * _.isObjectLike(_.noop);
20407
+ * // => false
20408
+ *
20409
+ * _.isObjectLike(null);
20410
+ * // => false
20411
+ */
20412
+ function isObjectLike$1(value) {
20413
+ return !!value && typeof value == 'object';
20414
+ }
20415
+
20416
+ /**
20417
+ * Iterates over own enumerable string keyed properties of an object and
20418
+ * invokes `iteratee` for each property. The iteratee is invoked with three
20419
+ * arguments: (value, key, object). Iteratee functions may exit iteration
20420
+ * early by explicitly returning `false`.
20421
+ *
20422
+ * @static
20423
+ * @memberOf _
20424
+ * @since 0.3.0
20425
+ * @category Object
20426
+ * @param {Object} object The object to iterate over.
20427
+ * @param {Function} [iteratee=_.identity] The function invoked per iteration.
20428
+ * @returns {Object} Returns `object`.
20429
+ * @see _.forOwnRight
20430
+ * @example
20431
+ *
20432
+ * function Foo() {
20433
+ * this.a = 1;
20434
+ * this.b = 2;
20435
+ * }
20436
+ *
20437
+ * Foo.prototype.c = 3;
20438
+ *
20439
+ * _.forOwn(new Foo, function(value, key) {
20440
+ * console.log(key);
20441
+ * });
20442
+ * // => Logs 'a' then 'b' (iteration order is not guaranteed).
20443
+ */
20444
+ function forOwn(object, iteratee) {
20445
+ return object && baseForOwn(object, typeof iteratee == 'function' ? iteratee : identity);
20446
+ }
20447
+
20448
+ /**
20449
+ * Creates an array of the own enumerable property names of `object`.
20450
+ *
20451
+ * **Note:** Non-object values are coerced to objects. See the
20452
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
20453
+ * for more details.
20454
+ *
20455
+ * @static
20456
+ * @since 0.1.0
20457
+ * @memberOf _
20458
+ * @category Object
20459
+ * @param {Object} object The object to query.
20460
+ * @returns {Array} Returns the array of property names.
20461
+ * @example
20462
+ *
20463
+ * function Foo() {
20464
+ * this.a = 1;
20465
+ * this.b = 2;
20466
+ * }
20467
+ *
20468
+ * Foo.prototype.c = 3;
20469
+ *
20470
+ * _.keys(new Foo);
20471
+ * // => ['a', 'b'] (iteration order is not guaranteed)
20472
+ *
20473
+ * _.keys('hi');
20474
+ * // => ['0', '1']
20475
+ */
20476
+ function keys(object) {
20477
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
20478
+ }
20479
+
20480
+ /**
20481
+ * This method returns the first argument it receives.
20482
+ *
20483
+ * @static
20484
+ * @since 0.1.0
20485
+ * @memberOf _
20486
+ * @category Util
20487
+ * @param {*} value Any value.
20488
+ * @returns {*} Returns `value`.
20489
+ * @example
20490
+ *
20491
+ * var object = { 'a': 1 };
20492
+ *
20493
+ * console.log(_.identity(object) === object);
20494
+ * // => true
20495
+ */
20496
+ function identity(value) {
20497
+ return value;
20498
+ }
20499
+
20500
+ var lodash_forown = forOwn;
20501
+
20502
+ var lodash_remove = createCommonjsModule(function (module, exports) {
20503
+ /**
20504
+ * lodash (Custom Build) <https://lodash.com/>
20505
+ * Build: `lodash modularize exports="npm" -o ./`
20506
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
20507
+ * Released under MIT license <https://lodash.com/license>
20508
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
20509
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
20510
+ */
20511
+
20512
+ /** Used as the size to enable large array optimizations. */
20513
+ var LARGE_ARRAY_SIZE = 200;
20514
+
20515
+ /** Used as the `TypeError` message for "Functions" methods. */
20516
+ var FUNC_ERROR_TEXT = 'Expected a function';
20517
+
20518
+ /** Used to stand-in for `undefined` hash values. */
20519
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
20520
+
20521
+ /** Used to compose bitmasks for comparison styles. */
20522
+ var UNORDERED_COMPARE_FLAG = 1,
20523
+ PARTIAL_COMPARE_FLAG = 2;
20524
+
20525
+ /** Used as references for various `Number` constants. */
20526
+ var INFINITY = 1 / 0,
20527
+ MAX_SAFE_INTEGER = 9007199254740991;
20528
+
20529
+ /** `Object#toString` result references. */
20530
+ var argsTag = '[object Arguments]',
20531
+ arrayTag = '[object Array]',
20532
+ boolTag = '[object Boolean]',
20533
+ dateTag = '[object Date]',
20534
+ errorTag = '[object Error]',
20535
+ funcTag = '[object Function]',
20536
+ genTag = '[object GeneratorFunction]',
20537
+ mapTag = '[object Map]',
20538
+ numberTag = '[object Number]',
20539
+ objectTag = '[object Object]',
20540
+ promiseTag = '[object Promise]',
20541
+ regexpTag = '[object RegExp]',
20542
+ setTag = '[object Set]',
20543
+ stringTag = '[object String]',
20544
+ symbolTag = '[object Symbol]',
20545
+ weakMapTag = '[object WeakMap]';
20546
+
20547
+ var arrayBufferTag = '[object ArrayBuffer]',
20548
+ dataViewTag = '[object DataView]',
20549
+ float32Tag = '[object Float32Array]',
20550
+ float64Tag = '[object Float64Array]',
20551
+ int8Tag = '[object Int8Array]',
20552
+ int16Tag = '[object Int16Array]',
20553
+ int32Tag = '[object Int32Array]',
20554
+ uint8Tag = '[object Uint8Array]',
20555
+ uint8ClampedTag = '[object Uint8ClampedArray]',
20556
+ uint16Tag = '[object Uint16Array]',
20557
+ uint32Tag = '[object Uint32Array]';
20558
+
20559
+ /** Used to match property names within property paths. */
20560
+ var reIsDeepProp = /\.|\[(?:[^[\]]*|(["'])(?:(?!\1)[^\\]|\\.)*?\1)\]/,
20561
+ reIsPlainProp = /^\w*$/,
20562
+ reLeadingDot = /^\./,
20563
+ rePropName = /[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]|(?=(?:\.|\[\])(?:\.|\[\]|$))/g;
20564
+
20565
+ /**
20566
+ * Used to match `RegExp`
20567
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
20568
+ */
20569
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
20570
+
20571
+ /** Used to match backslashes in property paths. */
20572
+ var reEscapeChar = /\\(\\)?/g;
20573
+
20574
+ /** Used to detect host constructors (Safari). */
20575
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
20576
+
20577
+ /** Used to detect unsigned integer values. */
20578
+ var reIsUint = /^(?:0|[1-9]\d*)$/;
20579
+
20580
+ /** Used to identify `toStringTag` values of typed arrays. */
20581
+ var typedArrayTags = {};
20582
+ typedArrayTags[float32Tag] = typedArrayTags[float64Tag] =
20583
+ typedArrayTags[int8Tag] = typedArrayTags[int16Tag] =
20584
+ typedArrayTags[int32Tag] = typedArrayTags[uint8Tag] =
20585
+ typedArrayTags[uint8ClampedTag] = typedArrayTags[uint16Tag] =
20586
+ typedArrayTags[uint32Tag] = true;
20587
+ typedArrayTags[argsTag] = typedArrayTags[arrayTag] =
20588
+ typedArrayTags[arrayBufferTag] = typedArrayTags[boolTag] =
20589
+ typedArrayTags[dataViewTag] = typedArrayTags[dateTag] =
20590
+ typedArrayTags[errorTag] = typedArrayTags[funcTag] =
20591
+ typedArrayTags[mapTag] = typedArrayTags[numberTag] =
20592
+ typedArrayTags[objectTag] = typedArrayTags[regexpTag] =
20593
+ typedArrayTags[setTag] = typedArrayTags[stringTag] =
20594
+ typedArrayTags[weakMapTag] = false;
20595
+
20596
+ /** Detect free variable `global` from Node.js. */
20597
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
20598
+
20599
+ /** Detect free variable `self`. */
20600
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
20601
+
20602
+ /** Used as a reference to the global object. */
20603
+ var root = freeGlobal || freeSelf || Function('return this')();
20604
+
20605
+ /** Detect free variable `exports`. */
20606
+ var freeExports = exports && !exports.nodeType && exports;
20607
+
20608
+ /** Detect free variable `module`. */
20609
+ var freeModule = freeExports && 'object' == 'object' && module && !module.nodeType && module;
20610
+
20611
+ /** Detect the popular CommonJS extension `module.exports`. */
20612
+ var moduleExports = freeModule && freeModule.exports === freeExports;
20613
+
20614
+ /** Detect free variable `process` from Node.js. */
20615
+ var freeProcess = moduleExports && freeGlobal.process;
20616
+
20617
+ /** Used to access faster Node.js helpers. */
20618
+ var nodeUtil = (function() {
20619
+ try {
20620
+ return freeProcess && freeProcess.binding('util');
20621
+ } catch (e) {}
20622
+ }());
20623
+
20624
+ /* Node.js helper references. */
20625
+ var nodeIsTypedArray = nodeUtil && nodeUtil.isTypedArray;
20626
+
20627
+ /**
20628
+ * A specialized version of `_.some` for arrays without support for iteratee
20629
+ * shorthands.
20630
+ *
20631
+ * @private
20632
+ * @param {Array} [array] The array to iterate over.
20633
+ * @param {Function} predicate The function invoked per iteration.
20634
+ * @returns {boolean} Returns `true` if any element passes the predicate check,
20635
+ * else `false`.
20636
+ */
20637
+ function arraySome(array, predicate) {
20638
+ var index = -1,
20639
+ length = array ? array.length : 0;
20640
+
20641
+ while (++index < length) {
20642
+ if (predicate(array[index], index, array)) {
20643
+ return true;
20644
+ }
20645
+ }
20646
+ return false;
20647
+ }
20648
+
20649
+ /**
20650
+ * The base implementation of `_.property` without support for deep paths.
20651
+ *
20652
+ * @private
20653
+ * @param {string} key The key of the property to get.
20654
+ * @returns {Function} Returns the new accessor function.
20655
+ */
20656
+ function baseProperty(key) {
20657
+ return function(object) {
20658
+ return object == null ? undefined : object[key];
20659
+ };
20660
+ }
20661
+
20662
+ /**
20663
+ * The base implementation of `_.times` without support for iteratee shorthands
20664
+ * or max array length checks.
20665
+ *
20666
+ * @private
20667
+ * @param {number} n The number of times to invoke `iteratee`.
20668
+ * @param {Function} iteratee The function invoked per iteration.
20669
+ * @returns {Array} Returns the array of results.
20670
+ */
20671
+ function baseTimes(n, iteratee) {
20672
+ var index = -1,
20673
+ result = Array(n);
20674
+
20675
+ while (++index < n) {
20676
+ result[index] = iteratee(index);
20677
+ }
20678
+ return result;
20679
+ }
20680
+
20681
+ /**
20682
+ * The base implementation of `_.unary` without support for storing metadata.
20683
+ *
20684
+ * @private
20685
+ * @param {Function} func The function to cap arguments for.
20686
+ * @returns {Function} Returns the new capped function.
20687
+ */
20688
+ function baseUnary(func) {
20689
+ return function(value) {
20690
+ return func(value);
20691
+ };
20692
+ }
20693
+
20694
+ /**
20695
+ * Gets the value at `key` of `object`.
20696
+ *
20697
+ * @private
20698
+ * @param {Object} [object] The object to query.
20699
+ * @param {string} key The key of the property to get.
20700
+ * @returns {*} Returns the property value.
20701
+ */
20702
+ function getValue(object, key) {
20703
+ return object == null ? undefined : object[key];
20704
+ }
20705
+
20706
+ /**
20707
+ * Checks if `value` is a host object in IE < 9.
20708
+ *
20709
+ * @private
20710
+ * @param {*} value The value to check.
20711
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
20712
+ */
20713
+ function isHostObject(value) {
20714
+ // Many host objects are `Object` objects that can coerce to strings
20715
+ // despite having improperly defined `toString` methods.
20716
+ var result = false;
20717
+ if (value != null && typeof value.toString != 'function') {
20718
+ try {
20719
+ result = !!(value + '');
20720
+ } catch (e) {}
20721
+ }
20722
+ return result;
20723
+ }
20724
+
20725
+ /**
20726
+ * Converts `map` to its key-value pairs.
20727
+ *
20728
+ * @private
20729
+ * @param {Object} map The map to convert.
20730
+ * @returns {Array} Returns the key-value pairs.
20731
+ */
20732
+ function mapToArray(map) {
20733
+ var index = -1,
20734
+ result = Array(map.size);
20735
+
20736
+ map.forEach(function(value, key) {
20737
+ result[++index] = [key, value];
20738
+ });
20739
+ return result;
20740
+ }
20741
+
20742
+ /**
20743
+ * Creates a unary function that invokes `func` with its argument transformed.
20744
+ *
20745
+ * @private
20746
+ * @param {Function} func The function to wrap.
20747
+ * @param {Function} transform The argument transform.
20748
+ * @returns {Function} Returns the new function.
20749
+ */
20750
+ function overArg(func, transform) {
20751
+ return function(arg) {
20752
+ return func(transform(arg));
20753
+ };
20754
+ }
20755
+
20756
+ /**
20757
+ * Converts `set` to an array of its values.
20758
+ *
20759
+ * @private
20760
+ * @param {Object} set The set to convert.
20761
+ * @returns {Array} Returns the values.
20762
+ */
20763
+ function setToArray(set) {
20764
+ var index = -1,
20765
+ result = Array(set.size);
20766
+
20767
+ set.forEach(function(value) {
20768
+ result[++index] = value;
20769
+ });
20770
+ return result;
20771
+ }
20772
+
20773
+ /** Used for built-in method references. */
20774
+ var arrayProto = Array.prototype,
20775
+ funcProto = Function.prototype,
20776
+ objectProto = Object.prototype;
20777
+
20778
+ /** Used to detect overreaching core-js shims. */
20779
+ var coreJsData = root['__core-js_shared__'];
20780
+
20781
+ /** Used to detect methods masquerading as native. */
20782
+ var maskSrcKey = (function() {
20783
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
20784
+ return uid ? ('Symbol(src)_1.' + uid) : '';
20785
+ }());
20786
+
20787
+ /** Used to resolve the decompiled source of functions. */
20788
+ var funcToString = funcProto.toString;
20789
+
20790
+ /** Used to check objects for own properties. */
20791
+ var hasOwnProperty = objectProto.hasOwnProperty;
20792
+
20793
+ /**
20794
+ * Used to resolve the
20795
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
20796
+ * of values.
20797
+ */
20798
+ var objectToString = objectProto.toString;
20799
+
20800
+ /** Used to detect if a method is native. */
20801
+ var reIsNative = RegExp('^' +
20802
+ funcToString.call(hasOwnProperty).replace(reRegExpChar, '\\$&')
20803
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
20804
+ );
20805
+
20806
+ /** Built-in value references. */
20807
+ var Symbol = root.Symbol,
20808
+ Uint8Array = root.Uint8Array,
20809
+ propertyIsEnumerable = objectProto.propertyIsEnumerable,
20810
+ splice = arrayProto.splice;
20811
+
20812
+ /* Built-in method references for those with the same name as other `lodash` methods. */
20813
+ var nativeKeys = overArg(Object.keys, Object);
20814
+
20815
+ /* Built-in method references that are verified to be native. */
20816
+ var DataView = getNative(root, 'DataView'),
20817
+ Map = getNative(root, 'Map'),
20818
+ Promise = getNative(root, 'Promise'),
20819
+ Set = getNative(root, 'Set'),
20820
+ WeakMap = getNative(root, 'WeakMap'),
20821
+ nativeCreate = getNative(Object, 'create');
20822
+
20823
+ /** Used to detect maps, sets, and weakmaps. */
20824
+ var dataViewCtorString = toSource(DataView),
20825
+ mapCtorString = toSource(Map),
20826
+ promiseCtorString = toSource(Promise),
20827
+ setCtorString = toSource(Set),
20828
+ weakMapCtorString = toSource(WeakMap);
20829
+
20830
+ /** Used to convert symbols to primitives and strings. */
20831
+ var symbolProto = Symbol ? Symbol.prototype : undefined,
20832
+ symbolValueOf = symbolProto ? symbolProto.valueOf : undefined,
20833
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
20834
+
20835
+ /**
20836
+ * Creates a hash object.
20837
+ *
20838
+ * @private
20839
+ * @constructor
20840
+ * @param {Array} [entries] The key-value pairs to cache.
20841
+ */
20842
+ function Hash(entries) {
20843
+ var index = -1,
20844
+ length = entries ? entries.length : 0;
20845
+
20846
+ this.clear();
20847
+ while (++index < length) {
20848
+ var entry = entries[index];
20849
+ this.set(entry[0], entry[1]);
20850
+ }
20851
+ }
20852
+
20853
+ /**
20854
+ * Removes all key-value entries from the hash.
20855
+ *
20856
+ * @private
20857
+ * @name clear
20858
+ * @memberOf Hash
20859
+ */
20860
+ function hashClear() {
20861
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
20862
+ }
20863
+
20864
+ /**
20865
+ * Removes `key` and its value from the hash.
20866
+ *
20867
+ * @private
20868
+ * @name delete
20869
+ * @memberOf Hash
20870
+ * @param {Object} hash The hash to modify.
20871
+ * @param {string} key The key of the value to remove.
20872
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
20873
+ */
20874
+ function hashDelete(key) {
20875
+ return this.has(key) && delete this.__data__[key];
20876
+ }
20877
+
20878
+ /**
20879
+ * Gets the hash value for `key`.
20880
+ *
20881
+ * @private
20882
+ * @name get
20883
+ * @memberOf Hash
20884
+ * @param {string} key The key of the value to get.
20885
+ * @returns {*} Returns the entry value.
20886
+ */
20887
+ function hashGet(key) {
20888
+ var data = this.__data__;
20889
+ if (nativeCreate) {
20890
+ var result = data[key];
20891
+ return result === HASH_UNDEFINED ? undefined : result;
20892
+ }
20893
+ return hasOwnProperty.call(data, key) ? data[key] : undefined;
20894
+ }
20895
+
20896
+ /**
20897
+ * Checks if a hash value for `key` exists.
20898
+ *
20899
+ * @private
20900
+ * @name has
20901
+ * @memberOf Hash
20902
+ * @param {string} key The key of the entry to check.
20903
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
20904
+ */
20905
+ function hashHas(key) {
20906
+ var data = this.__data__;
20907
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty.call(data, key);
20908
+ }
20909
+
20910
+ /**
20911
+ * Sets the hash `key` to `value`.
20912
+ *
20913
+ * @private
20914
+ * @name set
20915
+ * @memberOf Hash
20916
+ * @param {string} key The key of the value to set.
20917
+ * @param {*} value The value to set.
20918
+ * @returns {Object} Returns the hash instance.
20919
+ */
20920
+ function hashSet(key, value) {
20921
+ var data = this.__data__;
20922
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
20923
+ return this;
20924
+ }
20925
+
20926
+ // Add methods to `Hash`.
20927
+ Hash.prototype.clear = hashClear;
20928
+ Hash.prototype['delete'] = hashDelete;
20929
+ Hash.prototype.get = hashGet;
20930
+ Hash.prototype.has = hashHas;
20931
+ Hash.prototype.set = hashSet;
20932
+
20933
+ /**
20934
+ * Creates an list cache object.
20935
+ *
20936
+ * @private
20937
+ * @constructor
20938
+ * @param {Array} [entries] The key-value pairs to cache.
20939
+ */
20940
+ function ListCache(entries) {
20941
+ var index = -1,
20942
+ length = entries ? entries.length : 0;
20943
+
20944
+ this.clear();
20945
+ while (++index < length) {
20946
+ var entry = entries[index];
20947
+ this.set(entry[0], entry[1]);
20948
+ }
20949
+ }
20950
+
20951
+ /**
20952
+ * Removes all key-value entries from the list cache.
20953
+ *
20954
+ * @private
20955
+ * @name clear
20956
+ * @memberOf ListCache
20957
+ */
20958
+ function listCacheClear() {
20959
+ this.__data__ = [];
20960
+ }
20961
+
20962
+ /**
20963
+ * Removes `key` and its value from the list cache.
20964
+ *
20965
+ * @private
20966
+ * @name delete
20967
+ * @memberOf ListCache
20968
+ * @param {string} key The key of the value to remove.
20969
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
20970
+ */
20971
+ function listCacheDelete(key) {
20972
+ var data = this.__data__,
20973
+ index = assocIndexOf(data, key);
20974
+
20975
+ if (index < 0) {
20976
+ return false;
20977
+ }
20978
+ var lastIndex = data.length - 1;
20979
+ if (index == lastIndex) {
20980
+ data.pop();
20981
+ } else {
20982
+ splice.call(data, index, 1);
20983
+ }
20984
+ return true;
20985
+ }
20986
+
20987
+ /**
20988
+ * Gets the list cache value for `key`.
20989
+ *
20990
+ * @private
20991
+ * @name get
20992
+ * @memberOf ListCache
20993
+ * @param {string} key The key of the value to get.
20994
+ * @returns {*} Returns the entry value.
20995
+ */
20996
+ function listCacheGet(key) {
20997
+ var data = this.__data__,
20998
+ index = assocIndexOf(data, key);
20999
+
21000
+ return index < 0 ? undefined : data[index][1];
21001
+ }
21002
+
21003
+ /**
21004
+ * Checks if a list cache value for `key` exists.
21005
+ *
21006
+ * @private
21007
+ * @name has
21008
+ * @memberOf ListCache
21009
+ * @param {string} key The key of the entry to check.
21010
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21011
+ */
21012
+ function listCacheHas(key) {
21013
+ return assocIndexOf(this.__data__, key) > -1;
21014
+ }
21015
+
21016
+ /**
21017
+ * Sets the list cache `key` to `value`.
21018
+ *
21019
+ * @private
21020
+ * @name set
21021
+ * @memberOf ListCache
21022
+ * @param {string} key The key of the value to set.
21023
+ * @param {*} value The value to set.
21024
+ * @returns {Object} Returns the list cache instance.
21025
+ */
21026
+ function listCacheSet(key, value) {
21027
+ var data = this.__data__,
21028
+ index = assocIndexOf(data, key);
21029
+
21030
+ if (index < 0) {
21031
+ data.push([key, value]);
21032
+ } else {
21033
+ data[index][1] = value;
21034
+ }
21035
+ return this;
21036
+ }
21037
+
21038
+ // Add methods to `ListCache`.
21039
+ ListCache.prototype.clear = listCacheClear;
21040
+ ListCache.prototype['delete'] = listCacheDelete;
21041
+ ListCache.prototype.get = listCacheGet;
21042
+ ListCache.prototype.has = listCacheHas;
21043
+ ListCache.prototype.set = listCacheSet;
21044
+
21045
+ /**
21046
+ * Creates a map cache object to store key-value pairs.
21047
+ *
21048
+ * @private
21049
+ * @constructor
21050
+ * @param {Array} [entries] The key-value pairs to cache.
21051
+ */
21052
+ function MapCache(entries) {
21053
+ var index = -1,
21054
+ length = entries ? entries.length : 0;
21055
+
21056
+ this.clear();
21057
+ while (++index < length) {
21058
+ var entry = entries[index];
21059
+ this.set(entry[0], entry[1]);
21060
+ }
21061
+ }
21062
+
21063
+ /**
21064
+ * Removes all key-value entries from the map.
21065
+ *
21066
+ * @private
21067
+ * @name clear
21068
+ * @memberOf MapCache
21069
+ */
21070
+ function mapCacheClear() {
21071
+ this.__data__ = {
21072
+ 'hash': new Hash,
21073
+ 'map': new (Map || ListCache),
21074
+ 'string': new Hash
21075
+ };
21076
+ }
21077
+
21078
+ /**
21079
+ * Removes `key` and its value from the map.
21080
+ *
21081
+ * @private
21082
+ * @name delete
21083
+ * @memberOf MapCache
21084
+ * @param {string} key The key of the value to remove.
21085
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21086
+ */
21087
+ function mapCacheDelete(key) {
21088
+ return getMapData(this, key)['delete'](key);
21089
+ }
21090
+
21091
+ /**
21092
+ * Gets the map value for `key`.
21093
+ *
21094
+ * @private
21095
+ * @name get
21096
+ * @memberOf MapCache
21097
+ * @param {string} key The key of the value to get.
21098
+ * @returns {*} Returns the entry value.
21099
+ */
21100
+ function mapCacheGet(key) {
21101
+ return getMapData(this, key).get(key);
21102
+ }
21103
+
21104
+ /**
21105
+ * Checks if a map value for `key` exists.
21106
+ *
21107
+ * @private
21108
+ * @name has
21109
+ * @memberOf MapCache
21110
+ * @param {string} key The key of the entry to check.
21111
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21112
+ */
21113
+ function mapCacheHas(key) {
21114
+ return getMapData(this, key).has(key);
21115
+ }
21116
+
21117
+ /**
21118
+ * Sets the map `key` to `value`.
21119
+ *
21120
+ * @private
21121
+ * @name set
21122
+ * @memberOf MapCache
21123
+ * @param {string} key The key of the value to set.
21124
+ * @param {*} value The value to set.
21125
+ * @returns {Object} Returns the map cache instance.
21126
+ */
21127
+ function mapCacheSet(key, value) {
21128
+ getMapData(this, key).set(key, value);
21129
+ return this;
21130
+ }
21131
+
21132
+ // Add methods to `MapCache`.
21133
+ MapCache.prototype.clear = mapCacheClear;
21134
+ MapCache.prototype['delete'] = mapCacheDelete;
21135
+ MapCache.prototype.get = mapCacheGet;
21136
+ MapCache.prototype.has = mapCacheHas;
21137
+ MapCache.prototype.set = mapCacheSet;
21138
+
21139
+ /**
21140
+ *
21141
+ * Creates an array cache object to store unique values.
21142
+ *
21143
+ * @private
21144
+ * @constructor
21145
+ * @param {Array} [values] The values to cache.
21146
+ */
21147
+ function SetCache(values) {
21148
+ var index = -1,
21149
+ length = values ? values.length : 0;
21150
+
21151
+ this.__data__ = new MapCache;
21152
+ while (++index < length) {
21153
+ this.add(values[index]);
21154
+ }
21155
+ }
21156
+
21157
+ /**
21158
+ * Adds `value` to the array cache.
21159
+ *
21160
+ * @private
21161
+ * @name add
21162
+ * @memberOf SetCache
21163
+ * @alias push
21164
+ * @param {*} value The value to cache.
21165
+ * @returns {Object} Returns the cache instance.
21166
+ */
21167
+ function setCacheAdd(value) {
21168
+ this.__data__.set(value, HASH_UNDEFINED);
21169
+ return this;
21170
+ }
21171
+
21172
+ /**
21173
+ * Checks if `value` is in the array cache.
21174
+ *
21175
+ * @private
21176
+ * @name has
21177
+ * @memberOf SetCache
21178
+ * @param {*} value The value to search for.
21179
+ * @returns {number} Returns `true` if `value` is found, else `false`.
21180
+ */
21181
+ function setCacheHas(value) {
21182
+ return this.__data__.has(value);
21183
+ }
21184
+
21185
+ // Add methods to `SetCache`.
21186
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
21187
+ SetCache.prototype.has = setCacheHas;
21188
+
21189
+ /**
21190
+ * Creates a stack cache object to store key-value pairs.
21191
+ *
21192
+ * @private
21193
+ * @constructor
21194
+ * @param {Array} [entries] The key-value pairs to cache.
21195
+ */
21196
+ function Stack(entries) {
21197
+ this.__data__ = new ListCache(entries);
21198
+ }
21199
+
21200
+ /**
21201
+ * Removes all key-value entries from the stack.
21202
+ *
21203
+ * @private
21204
+ * @name clear
21205
+ * @memberOf Stack
21206
+ */
21207
+ function stackClear() {
21208
+ this.__data__ = new ListCache;
21209
+ }
21210
+
21211
+ /**
21212
+ * Removes `key` and its value from the stack.
21213
+ *
21214
+ * @private
21215
+ * @name delete
21216
+ * @memberOf Stack
21217
+ * @param {string} key The key of the value to remove.
21218
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
21219
+ */
21220
+ function stackDelete(key) {
21221
+ return this.__data__['delete'](key);
21222
+ }
21223
+
21224
+ /**
21225
+ * Gets the stack value for `key`.
21226
+ *
21227
+ * @private
21228
+ * @name get
21229
+ * @memberOf Stack
21230
+ * @param {string} key The key of the value to get.
21231
+ * @returns {*} Returns the entry value.
21232
+ */
21233
+ function stackGet(key) {
21234
+ return this.__data__.get(key);
21235
+ }
21236
+
21237
+ /**
21238
+ * Checks if a stack value for `key` exists.
21239
+ *
21240
+ * @private
21241
+ * @name has
21242
+ * @memberOf Stack
21243
+ * @param {string} key The key of the entry to check.
21244
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
21245
+ */
21246
+ function stackHas(key) {
21247
+ return this.__data__.has(key);
21248
+ }
21249
+
21250
+ /**
21251
+ * Sets the stack `key` to `value`.
21252
+ *
21253
+ * @private
21254
+ * @name set
21255
+ * @memberOf Stack
21256
+ * @param {string} key The key of the value to set.
21257
+ * @param {*} value The value to set.
21258
+ * @returns {Object} Returns the stack cache instance.
21259
+ */
21260
+ function stackSet(key, value) {
21261
+ var cache = this.__data__;
21262
+ if (cache instanceof ListCache) {
21263
+ var pairs = cache.__data__;
21264
+ if (!Map || (pairs.length < LARGE_ARRAY_SIZE - 1)) {
21265
+ pairs.push([key, value]);
21266
+ return this;
21267
+ }
21268
+ cache = this.__data__ = new MapCache(pairs);
21269
+ }
21270
+ cache.set(key, value);
21271
+ return this;
21272
+ }
21273
+
21274
+ // Add methods to `Stack`.
21275
+ Stack.prototype.clear = stackClear;
21276
+ Stack.prototype['delete'] = stackDelete;
21277
+ Stack.prototype.get = stackGet;
21278
+ Stack.prototype.has = stackHas;
21279
+ Stack.prototype.set = stackSet;
21280
+
21281
+ /**
21282
+ * Creates an array of the enumerable property names of the array-like `value`.
21283
+ *
21284
+ * @private
21285
+ * @param {*} value The value to query.
21286
+ * @param {boolean} inherited Specify returning inherited property names.
21287
+ * @returns {Array} Returns the array of property names.
21288
+ */
21289
+ function arrayLikeKeys(value, inherited) {
21290
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
21291
+ // Safari 9 makes `arguments.length` enumerable in strict mode.
21292
+ var result = (isArray(value) || isArguments(value))
21293
+ ? baseTimes(value.length, String)
21294
+ : [];
21295
+
21296
+ var length = result.length,
21297
+ skipIndexes = !!length;
21298
+
21299
+ for (var key in value) {
21300
+ if ((inherited || hasOwnProperty.call(value, key)) &&
21301
+ !(skipIndexes && (key == 'length' || isIndex(key, length)))) {
21302
+ result.push(key);
21303
+ }
21304
+ }
21305
+ return result;
21306
+ }
21307
+
21308
+ /**
21309
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
21310
+ *
21311
+ * @private
21312
+ * @param {Array} array The array to inspect.
21313
+ * @param {*} key The key to search for.
21314
+ * @returns {number} Returns the index of the matched value, else `-1`.
21315
+ */
21316
+ function assocIndexOf(array, key) {
21317
+ var length = array.length;
21318
+ while (length--) {
21319
+ if (eq(array[length][0], key)) {
21320
+ return length;
21321
+ }
21322
+ }
21323
+ return -1;
21324
+ }
21325
+
21326
+ /**
21327
+ * The base implementation of `_.get` without support for default values.
21328
+ *
21329
+ * @private
21330
+ * @param {Object} object The object to query.
21331
+ * @param {Array|string} path The path of the property to get.
21332
+ * @returns {*} Returns the resolved value.
21333
+ */
21334
+ function baseGet(object, path) {
21335
+ path = isKey(path, object) ? [path] : castPath(path);
21336
+
21337
+ var index = 0,
21338
+ length = path.length;
21339
+
21340
+ while (object != null && index < length) {
21341
+ object = object[toKey(path[index++])];
21342
+ }
21343
+ return (index && index == length) ? object : undefined;
21344
+ }
21345
+
21346
+ /**
21347
+ * The base implementation of `getTag`.
21348
+ *
21349
+ * @private
21350
+ * @param {*} value The value to query.
21351
+ * @returns {string} Returns the `toStringTag`.
21352
+ */
21353
+ function baseGetTag(value) {
21354
+ return objectToString.call(value);
21355
+ }
21356
+
21357
+ /**
21358
+ * The base implementation of `_.hasIn` without support for deep paths.
21359
+ *
21360
+ * @private
21361
+ * @param {Object} [object] The object to query.
21362
+ * @param {Array|string} key The key to check.
21363
+ * @returns {boolean} Returns `true` if `key` exists, else `false`.
21364
+ */
21365
+ function baseHasIn(object, key) {
21366
+ return object != null && key in Object(object);
21367
+ }
21368
+
21369
+ /**
21370
+ * The base implementation of `_.isEqual` which supports partial comparisons
21371
+ * and tracks traversed objects.
21372
+ *
21373
+ * @private
21374
+ * @param {*} value The value to compare.
21375
+ * @param {*} other The other value to compare.
21376
+ * @param {Function} [customizer] The function to customize comparisons.
21377
+ * @param {boolean} [bitmask] The bitmask of comparison flags.
21378
+ * The bitmask may be composed of the following flags:
21379
+ * 1 - Unordered comparison
21380
+ * 2 - Partial comparison
21381
+ * @param {Object} [stack] Tracks traversed `value` and `other` objects.
21382
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
21383
+ */
21384
+ function baseIsEqual(value, other, customizer, bitmask, stack) {
21385
+ if (value === other) {
21386
+ return true;
21387
+ }
21388
+ if (value == null || other == null || (!isObject(value) && !isObjectLike(other))) {
21389
+ return value !== value && other !== other;
21390
+ }
21391
+ return baseIsEqualDeep(value, other, baseIsEqual, customizer, bitmask, stack);
21392
+ }
21393
+
21394
+ /**
21395
+ * A specialized version of `baseIsEqual` for arrays and objects which performs
21396
+ * deep comparisons and tracks traversed objects enabling objects with circular
21397
+ * references to be compared.
21398
+ *
21399
+ * @private
21400
+ * @param {Object} object The object to compare.
21401
+ * @param {Object} other The other object to compare.
21402
+ * @param {Function} equalFunc The function to determine equivalents of values.
21403
+ * @param {Function} [customizer] The function to customize comparisons.
21404
+ * @param {number} [bitmask] The bitmask of comparison flags. See `baseIsEqual`
21405
+ * for more details.
21406
+ * @param {Object} [stack] Tracks traversed `object` and `other` objects.
21407
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
21408
+ */
21409
+ function baseIsEqualDeep(object, other, equalFunc, customizer, bitmask, stack) {
21410
+ var objIsArr = isArray(object),
21411
+ othIsArr = isArray(other),
21412
+ objTag = arrayTag,
21413
+ othTag = arrayTag;
21414
+
21415
+ if (!objIsArr) {
21416
+ objTag = getTag(object);
21417
+ objTag = objTag == argsTag ? objectTag : objTag;
21418
+ }
21419
+ if (!othIsArr) {
21420
+ othTag = getTag(other);
21421
+ othTag = othTag == argsTag ? objectTag : othTag;
21422
+ }
21423
+ var objIsObj = objTag == objectTag && !isHostObject(object),
21424
+ othIsObj = othTag == objectTag && !isHostObject(other),
21425
+ isSameTag = objTag == othTag;
21426
+
21427
+ if (isSameTag && !objIsObj) {
21428
+ stack || (stack = new Stack);
21429
+ return (objIsArr || isTypedArray(object))
21430
+ ? equalArrays(object, other, equalFunc, customizer, bitmask, stack)
21431
+ : equalByTag(object, other, objTag, equalFunc, customizer, bitmask, stack);
21432
+ }
21433
+ if (!(bitmask & PARTIAL_COMPARE_FLAG)) {
21434
+ var objIsWrapped = objIsObj && hasOwnProperty.call(object, '__wrapped__'),
21435
+ othIsWrapped = othIsObj && hasOwnProperty.call(other, '__wrapped__');
21436
+
21437
+ if (objIsWrapped || othIsWrapped) {
21438
+ var objUnwrapped = objIsWrapped ? object.value() : object,
21439
+ othUnwrapped = othIsWrapped ? other.value() : other;
21440
+
21441
+ stack || (stack = new Stack);
21442
+ return equalFunc(objUnwrapped, othUnwrapped, customizer, bitmask, stack);
21443
+ }
21444
+ }
21445
+ if (!isSameTag) {
21446
+ return false;
21447
+ }
21448
+ stack || (stack = new Stack);
21449
+ return equalObjects(object, other, equalFunc, customizer, bitmask, stack);
21450
+ }
21451
+
21452
+ /**
21453
+ * The base implementation of `_.isMatch` without support for iteratee shorthands.
21454
+ *
21455
+ * @private
21456
+ * @param {Object} object The object to inspect.
21457
+ * @param {Object} source The object of property values to match.
21458
+ * @param {Array} matchData The property names, values, and compare flags to match.
21459
+ * @param {Function} [customizer] The function to customize comparisons.
21460
+ * @returns {boolean} Returns `true` if `object` is a match, else `false`.
21461
+ */
21462
+ function baseIsMatch(object, source, matchData, customizer) {
21463
+ var index = matchData.length,
21464
+ length = index,
21465
+ noCustomizer = !customizer;
21466
+
21467
+ if (object == null) {
21468
+ return !length;
21469
+ }
21470
+ object = Object(object);
21471
+ while (index--) {
21472
+ var data = matchData[index];
21473
+ if ((noCustomizer && data[2])
21474
+ ? data[1] !== object[data[0]]
21475
+ : !(data[0] in object)
21476
+ ) {
21477
+ return false;
21478
+ }
21479
+ }
21480
+ while (++index < length) {
21481
+ data = matchData[index];
21482
+ var key = data[0],
21483
+ objValue = object[key],
21484
+ srcValue = data[1];
21485
+
21486
+ if (noCustomizer && data[2]) {
21487
+ if (objValue === undefined && !(key in object)) {
21488
+ return false;
21489
+ }
21490
+ } else {
21491
+ var stack = new Stack;
21492
+ if (customizer) {
21493
+ var result = customizer(objValue, srcValue, key, object, source, stack);
21494
+ }
21495
+ if (!(result === undefined
21496
+ ? baseIsEqual(srcValue, objValue, customizer, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG, stack)
21497
+ : result
21498
+ )) {
21499
+ return false;
21500
+ }
21501
+ }
21502
+ }
21503
+ return true;
21504
+ }
21505
+
21506
+ /**
21507
+ * The base implementation of `_.isNative` without bad shim checks.
21508
+ *
21509
+ * @private
21510
+ * @param {*} value The value to check.
21511
+ * @returns {boolean} Returns `true` if `value` is a native function,
21512
+ * else `false`.
21513
+ */
21514
+ function baseIsNative(value) {
21515
+ if (!isObject(value) || isMasked(value)) {
21516
+ return false;
21517
+ }
21518
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
21519
+ return pattern.test(toSource(value));
21520
+ }
21521
+
21522
+ /**
21523
+ * The base implementation of `_.isTypedArray` without Node.js optimizations.
21524
+ *
21525
+ * @private
21526
+ * @param {*} value The value to check.
21527
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
21528
+ */
21529
+ function baseIsTypedArray(value) {
21530
+ return isObjectLike(value) &&
21531
+ isLength(value.length) && !!typedArrayTags[objectToString.call(value)];
21532
+ }
21533
+
21534
+ /**
21535
+ * The base implementation of `_.iteratee`.
21536
+ *
21537
+ * @private
21538
+ * @param {*} [value=_.identity] The value to convert to an iteratee.
21539
+ * @returns {Function} Returns the iteratee.
21540
+ */
21541
+ function baseIteratee(value) {
21542
+ // Don't store the `typeof` result in a variable to avoid a JIT bug in Safari 9.
21543
+ // See https://bugs.webkit.org/show_bug.cgi?id=156034 for more details.
21544
+ if (typeof value == 'function') {
21545
+ return value;
21546
+ }
21547
+ if (value == null) {
21548
+ return identity;
21549
+ }
21550
+ if (typeof value == 'object') {
21551
+ return isArray(value)
21552
+ ? baseMatchesProperty(value[0], value[1])
21553
+ : baseMatches(value);
21554
+ }
21555
+ return property(value);
21556
+ }
21557
+
21558
+ /**
21559
+ * The base implementation of `_.keys` which doesn't treat sparse arrays as dense.
21560
+ *
21561
+ * @private
21562
+ * @param {Object} object The object to query.
21563
+ * @returns {Array} Returns the array of property names.
21564
+ */
21565
+ function baseKeys(object) {
21566
+ if (!isPrototype(object)) {
21567
+ return nativeKeys(object);
21568
+ }
21569
+ var result = [];
21570
+ for (var key in Object(object)) {
21571
+ if (hasOwnProperty.call(object, key) && key != 'constructor') {
21572
+ result.push(key);
21573
+ }
21574
+ }
21575
+ return result;
21576
+ }
21577
+
21578
+ /**
21579
+ * The base implementation of `_.matches` which doesn't clone `source`.
21580
+ *
21581
+ * @private
21582
+ * @param {Object} source The object of property values to match.
21583
+ * @returns {Function} Returns the new spec function.
21584
+ */
21585
+ function baseMatches(source) {
21586
+ var matchData = getMatchData(source);
21587
+ if (matchData.length == 1 && matchData[0][2]) {
21588
+ return matchesStrictComparable(matchData[0][0], matchData[0][1]);
21589
+ }
21590
+ return function(object) {
21591
+ return object === source || baseIsMatch(object, source, matchData);
21592
+ };
21593
+ }
21594
+
21595
+ /**
21596
+ * The base implementation of `_.matchesProperty` which doesn't clone `srcValue`.
21597
+ *
21598
+ * @private
21599
+ * @param {string} path The path of the property to get.
21600
+ * @param {*} srcValue The value to match.
21601
+ * @returns {Function} Returns the new spec function.
21602
+ */
21603
+ function baseMatchesProperty(path, srcValue) {
21604
+ if (isKey(path) && isStrictComparable(srcValue)) {
21605
+ return matchesStrictComparable(toKey(path), srcValue);
21606
+ }
21607
+ return function(object) {
21608
+ var objValue = get(object, path);
21609
+ return (objValue === undefined && objValue === srcValue)
21610
+ ? hasIn(object, path)
21611
+ : baseIsEqual(srcValue, objValue, undefined, UNORDERED_COMPARE_FLAG | PARTIAL_COMPARE_FLAG);
21612
+ };
21613
+ }
21614
+
21615
+ /**
21616
+ * A specialized version of `baseProperty` which supports deep paths.
21617
+ *
21618
+ * @private
21619
+ * @param {Array|string} path The path of the property to get.
21620
+ * @returns {Function} Returns the new accessor function.
21621
+ */
21622
+ function basePropertyDeep(path) {
21623
+ return function(object) {
21624
+ return baseGet(object, path);
21625
+ };
21626
+ }
21627
+
21628
+ /**
21629
+ * The base implementation of `_.pullAt` without support for individual
21630
+ * indexes or capturing the removed elements.
21631
+ *
21632
+ * @private
21633
+ * @param {Array} array The array to modify.
21634
+ * @param {number[]} indexes The indexes of elements to remove.
21635
+ * @returns {Array} Returns `array`.
21636
+ */
21637
+ function basePullAt(array, indexes) {
21638
+ var length = array ? indexes.length : 0,
21639
+ lastIndex = length - 1;
21640
+
21641
+ while (length--) {
21642
+ var index = indexes[length];
21643
+ if (length == lastIndex || index !== previous) {
21644
+ var previous = index;
21645
+ if (isIndex(index)) {
21646
+ splice.call(array, index, 1);
21647
+ }
21648
+ else if (!isKey(index, array)) {
21649
+ var path = castPath(index),
21650
+ object = parent(array, path);
21651
+
21652
+ if (object != null) {
21653
+ delete object[toKey(last(path))];
21654
+ }
21655
+ }
21656
+ else {
21657
+ delete array[toKey(index)];
21658
+ }
21659
+ }
21660
+ }
21661
+ return array;
21662
+ }
21663
+
21664
+ /**
21665
+ * The base implementation of `_.slice` without an iteratee call guard.
21666
+ *
21667
+ * @private
21668
+ * @param {Array} array The array to slice.
21669
+ * @param {number} [start=0] The start position.
21670
+ * @param {number} [end=array.length] The end position.
21671
+ * @returns {Array} Returns the slice of `array`.
21672
+ */
21673
+ function baseSlice(array, start, end) {
21674
+ var index = -1,
21675
+ length = array.length;
21676
+
21677
+ if (start < 0) {
21678
+ start = -start > length ? 0 : (length + start);
21679
+ }
21680
+ end = end > length ? length : end;
21681
+ if (end < 0) {
21682
+ end += length;
21683
+ }
21684
+ length = start > end ? 0 : ((end - start) >>> 0);
21685
+ start >>>= 0;
21686
+
21687
+ var result = Array(length);
21688
+ while (++index < length) {
21689
+ result[index] = array[index + start];
21690
+ }
21691
+ return result;
21692
+ }
21693
+
21694
+ /**
21695
+ * The base implementation of `_.toString` which doesn't convert nullish
21696
+ * values to empty strings.
21697
+ *
21698
+ * @private
21699
+ * @param {*} value The value to process.
21700
+ * @returns {string} Returns the string.
21701
+ */
21702
+ function baseToString(value) {
21703
+ // Exit early for strings to avoid a performance hit in some environments.
21704
+ if (typeof value == 'string') {
21705
+ return value;
21706
+ }
21707
+ if (isSymbol(value)) {
21708
+ return symbolToString ? symbolToString.call(value) : '';
21709
+ }
21710
+ var result = (value + '');
21711
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
21712
+ }
21713
+
21714
+ /**
21715
+ * Casts `value` to a path array if it's not one.
21716
+ *
21717
+ * @private
21718
+ * @param {*} value The value to inspect.
21719
+ * @returns {Array} Returns the cast property path array.
21720
+ */
21721
+ function castPath(value) {
21722
+ return isArray(value) ? value : stringToPath(value);
21723
+ }
21724
+
21725
+ /**
21726
+ * A specialized version of `baseIsEqualDeep` for arrays with support for
21727
+ * partial deep comparisons.
21728
+ *
21729
+ * @private
21730
+ * @param {Array} array The array to compare.
21731
+ * @param {Array} other The other array to compare.
21732
+ * @param {Function} equalFunc The function to determine equivalents of values.
21733
+ * @param {Function} customizer The function to customize comparisons.
21734
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
21735
+ * for more details.
21736
+ * @param {Object} stack Tracks traversed `array` and `other` objects.
21737
+ * @returns {boolean} Returns `true` if the arrays are equivalent, else `false`.
21738
+ */
21739
+ function equalArrays(array, other, equalFunc, customizer, bitmask, stack) {
21740
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
21741
+ arrLength = array.length,
21742
+ othLength = other.length;
21743
+
21744
+ if (arrLength != othLength && !(isPartial && othLength > arrLength)) {
21745
+ return false;
21746
+ }
21747
+ // Assume cyclic values are equal.
21748
+ var stacked = stack.get(array);
21749
+ if (stacked && stack.get(other)) {
21750
+ return stacked == other;
21751
+ }
21752
+ var index = -1,
21753
+ result = true,
21754
+ seen = (bitmask & UNORDERED_COMPARE_FLAG) ? new SetCache : undefined;
21755
+
21756
+ stack.set(array, other);
21757
+ stack.set(other, array);
21758
+
21759
+ // Ignore non-index properties.
21760
+ while (++index < arrLength) {
21761
+ var arrValue = array[index],
21762
+ othValue = other[index];
21763
+
21764
+ if (customizer) {
21765
+ var compared = isPartial
21766
+ ? customizer(othValue, arrValue, index, other, array, stack)
21767
+ : customizer(arrValue, othValue, index, array, other, stack);
21768
+ }
21769
+ if (compared !== undefined) {
21770
+ if (compared) {
21771
+ continue;
21772
+ }
21773
+ result = false;
21774
+ break;
21775
+ }
21776
+ // Recursively compare arrays (susceptible to call stack limits).
21777
+ if (seen) {
21778
+ if (!arraySome(other, function(othValue, othIndex) {
21779
+ if (!seen.has(othIndex) &&
21780
+ (arrValue === othValue || equalFunc(arrValue, othValue, customizer, bitmask, stack))) {
21781
+ return seen.add(othIndex);
21782
+ }
21783
+ })) {
21784
+ result = false;
21785
+ break;
21786
+ }
21787
+ } else if (!(
21788
+ arrValue === othValue ||
21789
+ equalFunc(arrValue, othValue, customizer, bitmask, stack)
21790
+ )) {
21791
+ result = false;
21792
+ break;
21793
+ }
21794
+ }
21795
+ stack['delete'](array);
21796
+ stack['delete'](other);
21797
+ return result;
21798
+ }
21799
+
21800
+ /**
21801
+ * A specialized version of `baseIsEqualDeep` for comparing objects of
21802
+ * the same `toStringTag`.
21803
+ *
21804
+ * **Note:** This function only supports comparing values with tags of
21805
+ * `Boolean`, `Date`, `Error`, `Number`, `RegExp`, or `String`.
21806
+ *
21807
+ * @private
21808
+ * @param {Object} object The object to compare.
21809
+ * @param {Object} other The other object to compare.
21810
+ * @param {string} tag The `toStringTag` of the objects to compare.
21811
+ * @param {Function} equalFunc The function to determine equivalents of values.
21812
+ * @param {Function} customizer The function to customize comparisons.
21813
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
21814
+ * for more details.
21815
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
21816
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
21817
+ */
21818
+ function equalByTag(object, other, tag, equalFunc, customizer, bitmask, stack) {
21819
+ switch (tag) {
21820
+ case dataViewTag:
21821
+ if ((object.byteLength != other.byteLength) ||
21822
+ (object.byteOffset != other.byteOffset)) {
21823
+ return false;
21824
+ }
21825
+ object = object.buffer;
21826
+ other = other.buffer;
21827
+
21828
+ case arrayBufferTag:
21829
+ if ((object.byteLength != other.byteLength) ||
21830
+ !equalFunc(new Uint8Array(object), new Uint8Array(other))) {
21831
+ return false;
21832
+ }
21833
+ return true;
21834
+
21835
+ case boolTag:
21836
+ case dateTag:
21837
+ case numberTag:
21838
+ // Coerce booleans to `1` or `0` and dates to milliseconds.
21839
+ // Invalid dates are coerced to `NaN`.
21840
+ return eq(+object, +other);
21841
+
21842
+ case errorTag:
21843
+ return object.name == other.name && object.message == other.message;
21844
+
21845
+ case regexpTag:
21846
+ case stringTag:
21847
+ // Coerce regexes to strings and treat strings, primitives and objects,
21848
+ // as equal. See http://www.ecma-international.org/ecma-262/7.0/#sec-regexp.prototype.tostring
21849
+ // for more details.
21850
+ return object == (other + '');
21851
+
21852
+ case mapTag:
21853
+ var convert = mapToArray;
21854
+
21855
+ case setTag:
21856
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG;
21857
+ convert || (convert = setToArray);
21858
+
21859
+ if (object.size != other.size && !isPartial) {
21860
+ return false;
21861
+ }
21862
+ // Assume cyclic values are equal.
21863
+ var stacked = stack.get(object);
21864
+ if (stacked) {
21865
+ return stacked == other;
21866
+ }
21867
+ bitmask |= UNORDERED_COMPARE_FLAG;
21868
+
21869
+ // Recursively compare objects (susceptible to call stack limits).
21870
+ stack.set(object, other);
21871
+ var result = equalArrays(convert(object), convert(other), equalFunc, customizer, bitmask, stack);
21872
+ stack['delete'](object);
21873
+ return result;
21874
+
21875
+ case symbolTag:
21876
+ if (symbolValueOf) {
21877
+ return symbolValueOf.call(object) == symbolValueOf.call(other);
21878
+ }
21879
+ }
21880
+ return false;
21881
+ }
21882
+
21883
+ /**
21884
+ * A specialized version of `baseIsEqualDeep` for objects with support for
21885
+ * partial deep comparisons.
21886
+ *
21887
+ * @private
21888
+ * @param {Object} object The object to compare.
21889
+ * @param {Object} other The other object to compare.
21890
+ * @param {Function} equalFunc The function to determine equivalents of values.
21891
+ * @param {Function} customizer The function to customize comparisons.
21892
+ * @param {number} bitmask The bitmask of comparison flags. See `baseIsEqual`
21893
+ * for more details.
21894
+ * @param {Object} stack Tracks traversed `object` and `other` objects.
21895
+ * @returns {boolean} Returns `true` if the objects are equivalent, else `false`.
21896
+ */
21897
+ function equalObjects(object, other, equalFunc, customizer, bitmask, stack) {
21898
+ var isPartial = bitmask & PARTIAL_COMPARE_FLAG,
21899
+ objProps = keys(object),
21900
+ objLength = objProps.length,
21901
+ othProps = keys(other),
21902
+ othLength = othProps.length;
21903
+
21904
+ if (objLength != othLength && !isPartial) {
21905
+ return false;
21906
+ }
21907
+ var index = objLength;
21908
+ while (index--) {
21909
+ var key = objProps[index];
21910
+ if (!(isPartial ? key in other : hasOwnProperty.call(other, key))) {
21911
+ return false;
21912
+ }
21913
+ }
21914
+ // Assume cyclic values are equal.
21915
+ var stacked = stack.get(object);
21916
+ if (stacked && stack.get(other)) {
21917
+ return stacked == other;
21918
+ }
21919
+ var result = true;
21920
+ stack.set(object, other);
21921
+ stack.set(other, object);
21922
+
21923
+ var skipCtor = isPartial;
21924
+ while (++index < objLength) {
21925
+ key = objProps[index];
21926
+ var objValue = object[key],
21927
+ othValue = other[key];
21928
+
21929
+ if (customizer) {
21930
+ var compared = isPartial
21931
+ ? customizer(othValue, objValue, key, other, object, stack)
21932
+ : customizer(objValue, othValue, key, object, other, stack);
21933
+ }
21934
+ // Recursively compare objects (susceptible to call stack limits).
21935
+ if (!(compared === undefined
21936
+ ? (objValue === othValue || equalFunc(objValue, othValue, customizer, bitmask, stack))
21937
+ : compared
21938
+ )) {
21939
+ result = false;
21940
+ break;
21941
+ }
21942
+ skipCtor || (skipCtor = key == 'constructor');
21943
+ }
21944
+ if (result && !skipCtor) {
21945
+ var objCtor = object.constructor,
21946
+ othCtor = other.constructor;
21947
+
21948
+ // Non `Object` object instances with different constructors are not equal.
21949
+ if (objCtor != othCtor &&
21950
+ ('constructor' in object && 'constructor' in other) &&
21951
+ !(typeof objCtor == 'function' && objCtor instanceof objCtor &&
21952
+ typeof othCtor == 'function' && othCtor instanceof othCtor)) {
21953
+ result = false;
21954
+ }
21955
+ }
21956
+ stack['delete'](object);
21957
+ stack['delete'](other);
21958
+ return result;
21959
+ }
21960
+
21961
+ /**
21962
+ * Gets the data for `map`.
21963
+ *
21964
+ * @private
21965
+ * @param {Object} map The map to query.
21966
+ * @param {string} key The reference key.
21967
+ * @returns {*} Returns the map data.
21968
+ */
21969
+ function getMapData(map, key) {
21970
+ var data = map.__data__;
21971
+ return isKeyable(key)
21972
+ ? data[typeof key == 'string' ? 'string' : 'hash']
21973
+ : data.map;
21974
+ }
21975
+
21976
+ /**
21977
+ * Gets the property names, values, and compare flags of `object`.
21978
+ *
21979
+ * @private
21980
+ * @param {Object} object The object to query.
21981
+ * @returns {Array} Returns the match data of `object`.
21982
+ */
21983
+ function getMatchData(object) {
21984
+ var result = keys(object),
21985
+ length = result.length;
21986
+
21987
+ while (length--) {
21988
+ var key = result[length],
21989
+ value = object[key];
21990
+
21991
+ result[length] = [key, value, isStrictComparable(value)];
21992
+ }
21993
+ return result;
21994
+ }
21995
+
21996
+ /**
21997
+ * Gets the native function at `key` of `object`.
21998
+ *
21999
+ * @private
22000
+ * @param {Object} object The object to query.
22001
+ * @param {string} key The key of the method to get.
22002
+ * @returns {*} Returns the function if it's native, else `undefined`.
22003
+ */
22004
+ function getNative(object, key) {
22005
+ var value = getValue(object, key);
22006
+ return baseIsNative(value) ? value : undefined;
22007
+ }
22008
+
22009
+ /**
22010
+ * Gets the `toStringTag` of `value`.
22011
+ *
22012
+ * @private
22013
+ * @param {*} value The value to query.
22014
+ * @returns {string} Returns the `toStringTag`.
22015
+ */
22016
+ var getTag = baseGetTag;
22017
+
22018
+ // Fallback for data views, maps, sets, and weak maps in IE 11,
22019
+ // for data views in Edge < 14, and promises in Node.js.
22020
+ if ((DataView && getTag(new DataView(new ArrayBuffer(1))) != dataViewTag) ||
22021
+ (Map && getTag(new Map) != mapTag) ||
22022
+ (Promise && getTag(Promise.resolve()) != promiseTag) ||
22023
+ (Set && getTag(new Set) != setTag) ||
22024
+ (WeakMap && getTag(new WeakMap) != weakMapTag)) {
22025
+ getTag = function(value) {
22026
+ var result = objectToString.call(value),
22027
+ Ctor = result == objectTag ? value.constructor : undefined,
22028
+ ctorString = Ctor ? toSource(Ctor) : undefined;
22029
+
22030
+ if (ctorString) {
22031
+ switch (ctorString) {
22032
+ case dataViewCtorString: return dataViewTag;
22033
+ case mapCtorString: return mapTag;
22034
+ case promiseCtorString: return promiseTag;
22035
+ case setCtorString: return setTag;
22036
+ case weakMapCtorString: return weakMapTag;
22037
+ }
22038
+ }
22039
+ return result;
22040
+ };
22041
+ }
22042
+
22043
+ /**
22044
+ * Checks if `path` exists on `object`.
22045
+ *
22046
+ * @private
22047
+ * @param {Object} object The object to query.
22048
+ * @param {Array|string} path The path to check.
22049
+ * @param {Function} hasFunc The function to check properties.
22050
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
22051
+ */
22052
+ function hasPath(object, path, hasFunc) {
22053
+ path = isKey(path, object) ? [path] : castPath(path);
22054
+
22055
+ var result,
22056
+ index = -1,
22057
+ length = path.length;
22058
+
22059
+ while (++index < length) {
22060
+ var key = toKey(path[index]);
22061
+ if (!(result = object != null && hasFunc(object, key))) {
22062
+ break;
22063
+ }
22064
+ object = object[key];
22065
+ }
22066
+ if (result) {
22067
+ return result;
22068
+ }
22069
+ var length = object ? object.length : 0;
22070
+ return !!length && isLength(length) && isIndex(key, length) &&
22071
+ (isArray(object) || isArguments(object));
22072
+ }
22073
+
22074
+ /**
22075
+ * Checks if `value` is a valid array-like index.
22076
+ *
22077
+ * @private
22078
+ * @param {*} value The value to check.
22079
+ * @param {number} [length=MAX_SAFE_INTEGER] The upper bounds of a valid index.
22080
+ * @returns {boolean} Returns `true` if `value` is a valid index, else `false`.
22081
+ */
22082
+ function isIndex(value, length) {
22083
+ length = length == null ? MAX_SAFE_INTEGER : length;
22084
+ return !!length &&
22085
+ (typeof value == 'number' || reIsUint.test(value)) &&
22086
+ (value > -1 && value % 1 == 0 && value < length);
22087
+ }
22088
+
22089
+ /**
22090
+ * Checks if `value` is a property name and not a property path.
22091
+ *
22092
+ * @private
22093
+ * @param {*} value The value to check.
22094
+ * @param {Object} [object] The object to query keys on.
22095
+ * @returns {boolean} Returns `true` if `value` is a property name, else `false`.
22096
+ */
22097
+ function isKey(value, object) {
22098
+ if (isArray(value)) {
22099
+ return false;
22100
+ }
22101
+ var type = typeof value;
22102
+ if (type == 'number' || type == 'symbol' || type == 'boolean' ||
22103
+ value == null || isSymbol(value)) {
22104
+ return true;
22105
+ }
22106
+ return reIsPlainProp.test(value) || !reIsDeepProp.test(value) ||
22107
+ (object != null && value in Object(object));
22108
+ }
22109
+
22110
+ /**
22111
+ * Checks if `value` is suitable for use as unique object key.
22112
+ *
22113
+ * @private
22114
+ * @param {*} value The value to check.
22115
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
22116
+ */
22117
+ function isKeyable(value) {
22118
+ var type = typeof value;
22119
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
22120
+ ? (value !== '__proto__')
22121
+ : (value === null);
22122
+ }
22123
+
22124
+ /**
22125
+ * Checks if `func` has its source masked.
22126
+ *
22127
+ * @private
22128
+ * @param {Function} func The function to check.
22129
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
22130
+ */
22131
+ function isMasked(func) {
22132
+ return !!maskSrcKey && (maskSrcKey in func);
22133
+ }
22134
+
22135
+ /**
22136
+ * Checks if `value` is likely a prototype object.
22137
+ *
22138
+ * @private
22139
+ * @param {*} value The value to check.
22140
+ * @returns {boolean} Returns `true` if `value` is a prototype, else `false`.
22141
+ */
22142
+ function isPrototype(value) {
22143
+ var Ctor = value && value.constructor,
22144
+ proto = (typeof Ctor == 'function' && Ctor.prototype) || objectProto;
22145
+
22146
+ return value === proto;
22147
+ }
22148
+
22149
+ /**
22150
+ * Checks if `value` is suitable for strict equality comparisons, i.e. `===`.
22151
+ *
22152
+ * @private
22153
+ * @param {*} value The value to check.
22154
+ * @returns {boolean} Returns `true` if `value` if suitable for strict
22155
+ * equality comparisons, else `false`.
22156
+ */
22157
+ function isStrictComparable(value) {
22158
+ return value === value && !isObject(value);
22159
+ }
22160
+
22161
+ /**
22162
+ * A specialized version of `matchesProperty` for source values suitable
22163
+ * for strict equality comparisons, i.e. `===`.
22164
+ *
22165
+ * @private
22166
+ * @param {string} key The key of the property to get.
22167
+ * @param {*} srcValue The value to match.
22168
+ * @returns {Function} Returns the new spec function.
22169
+ */
22170
+ function matchesStrictComparable(key, srcValue) {
22171
+ return function(object) {
22172
+ if (object == null) {
22173
+ return false;
22174
+ }
22175
+ return object[key] === srcValue &&
22176
+ (srcValue !== undefined || (key in Object(object)));
22177
+ };
22178
+ }
22179
+
22180
+ /**
22181
+ * Gets the parent value at `path` of `object`.
22182
+ *
22183
+ * @private
22184
+ * @param {Object} object The object to query.
22185
+ * @param {Array} path The path to get the parent value of.
22186
+ * @returns {*} Returns the parent value.
22187
+ */
22188
+ function parent(object, path) {
22189
+ return path.length == 1 ? object : baseGet(object, baseSlice(path, 0, -1));
22190
+ }
22191
+
22192
+ /**
22193
+ * Converts `string` to a property path array.
22194
+ *
22195
+ * @private
22196
+ * @param {string} string The string to convert.
22197
+ * @returns {Array} Returns the property path array.
22198
+ */
22199
+ var stringToPath = memoize(function(string) {
22200
+ string = toString(string);
22201
+
22202
+ var result = [];
22203
+ if (reLeadingDot.test(string)) {
22204
+ result.push('');
22205
+ }
22206
+ string.replace(rePropName, function(match, number, quote, string) {
22207
+ result.push(quote ? string.replace(reEscapeChar, '$1') : (number || match));
22208
+ });
22209
+ return result;
22210
+ });
22211
+
22212
+ /**
22213
+ * Converts `value` to a string key if it's not a string or symbol.
22214
+ *
22215
+ * @private
22216
+ * @param {*} value The value to inspect.
22217
+ * @returns {string|symbol} Returns the key.
22218
+ */
22219
+ function toKey(value) {
22220
+ if (typeof value == 'string' || isSymbol(value)) {
22221
+ return value;
22222
+ }
22223
+ var result = (value + '');
22224
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
22225
+ }
22226
+
22227
+ /**
22228
+ * Converts `func` to its source code.
22229
+ *
22230
+ * @private
22231
+ * @param {Function} func The function to process.
22232
+ * @returns {string} Returns the source code.
22233
+ */
22234
+ function toSource(func) {
22235
+ if (func != null) {
22236
+ try {
22237
+ return funcToString.call(func);
22238
+ } catch (e) {}
22239
+ try {
22240
+ return (func + '');
22241
+ } catch (e) {}
22242
+ }
22243
+ return '';
22244
+ }
22245
+
22246
+ /**
22247
+ * Gets the last element of `array`.
22248
+ *
22249
+ * @static
22250
+ * @memberOf _
22251
+ * @since 0.1.0
22252
+ * @category Array
22253
+ * @param {Array} array The array to query.
22254
+ * @returns {*} Returns the last element of `array`.
22255
+ * @example
22256
+ *
22257
+ * _.last([1, 2, 3]);
22258
+ * // => 3
22259
+ */
22260
+ function last(array) {
22261
+ var length = array ? array.length : 0;
22262
+ return length ? array[length - 1] : undefined;
22263
+ }
22264
+
22265
+ /**
22266
+ * Removes all elements from `array` that `predicate` returns truthy for
22267
+ * and returns an array of the removed elements. The predicate is invoked
22268
+ * with three arguments: (value, index, array).
22269
+ *
22270
+ * **Note:** Unlike `_.filter`, this method mutates `array`. Use `_.pull`
22271
+ * to pull elements from an array by value.
22272
+ *
22273
+ * @static
22274
+ * @memberOf _
22275
+ * @since 2.0.0
22276
+ * @category Array
22277
+ * @param {Array} array The array to modify.
22278
+ * @param {Function} [predicate=_.identity]
22279
+ * The function invoked per iteration.
22280
+ * @returns {Array} Returns the new array of removed elements.
22281
+ * @example
22282
+ *
22283
+ * var array = [1, 2, 3, 4];
22284
+ * var evens = _.remove(array, function(n) {
22285
+ * return n % 2 == 0;
22286
+ * });
22287
+ *
22288
+ * console.log(array);
22289
+ * // => [1, 3]
22290
+ *
22291
+ * console.log(evens);
22292
+ * // => [2, 4]
22293
+ */
22294
+ function remove(array, predicate) {
22295
+ var result = [];
22296
+ if (!(array && array.length)) {
22297
+ return result;
22298
+ }
22299
+ var index = -1,
22300
+ indexes = [],
22301
+ length = array.length;
22302
+
22303
+ predicate = baseIteratee(predicate);
22304
+ while (++index < length) {
22305
+ var value = array[index];
22306
+ if (predicate(value, index, array)) {
22307
+ result.push(value);
22308
+ indexes.push(index);
22309
+ }
22310
+ }
22311
+ basePullAt(array, indexes);
22312
+ return result;
22313
+ }
22314
+
22315
+ /**
22316
+ * Creates a function that memoizes the result of `func`. If `resolver` is
22317
+ * provided, it determines the cache key for storing the result based on the
22318
+ * arguments provided to the memoized function. By default, the first argument
22319
+ * provided to the memoized function is used as the map cache key. The `func`
22320
+ * is invoked with the `this` binding of the memoized function.
22321
+ *
22322
+ * **Note:** The cache is exposed as the `cache` property on the memoized
22323
+ * function. Its creation may be customized by replacing the `_.memoize.Cache`
22324
+ * constructor with one whose instances implement the
22325
+ * [`Map`](http://ecma-international.org/ecma-262/7.0/#sec-properties-of-the-map-prototype-object)
22326
+ * method interface of `delete`, `get`, `has`, and `set`.
22327
+ *
22328
+ * @static
22329
+ * @memberOf _
22330
+ * @since 0.1.0
22331
+ * @category Function
22332
+ * @param {Function} func The function to have its output memoized.
22333
+ * @param {Function} [resolver] The function to resolve the cache key.
22334
+ * @returns {Function} Returns the new memoized function.
22335
+ * @example
22336
+ *
22337
+ * var object = { 'a': 1, 'b': 2 };
22338
+ * var other = { 'c': 3, 'd': 4 };
22339
+ *
22340
+ * var values = _.memoize(_.values);
22341
+ * values(object);
22342
+ * // => [1, 2]
22343
+ *
22344
+ * values(other);
22345
+ * // => [3, 4]
22346
+ *
22347
+ * object.a = 2;
22348
+ * values(object);
22349
+ * // => [1, 2]
22350
+ *
22351
+ * // Modify the result cache.
22352
+ * values.cache.set(object, ['a', 'b']);
22353
+ * values(object);
22354
+ * // => ['a', 'b']
22355
+ *
22356
+ * // Replace `_.memoize.Cache`.
22357
+ * _.memoize.Cache = WeakMap;
22358
+ */
22359
+ function memoize(func, resolver) {
22360
+ if (typeof func != 'function' || (resolver && typeof resolver != 'function')) {
22361
+ throw new TypeError(FUNC_ERROR_TEXT);
22362
+ }
22363
+ var memoized = function() {
22364
+ var args = arguments,
22365
+ key = resolver ? resolver.apply(this, args) : args[0],
22366
+ cache = memoized.cache;
22367
+
22368
+ if (cache.has(key)) {
22369
+ return cache.get(key);
22370
+ }
22371
+ var result = func.apply(this, args);
22372
+ memoized.cache = cache.set(key, result);
22373
+ return result;
22374
+ };
22375
+ memoized.cache = new (memoize.Cache || MapCache);
22376
+ return memoized;
22377
+ }
22378
+
22379
+ // Assign cache to `_.memoize`.
22380
+ memoize.Cache = MapCache;
22381
+
22382
+ /**
22383
+ * Performs a
22384
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
22385
+ * comparison between two values to determine if they are equivalent.
22386
+ *
22387
+ * @static
22388
+ * @memberOf _
22389
+ * @since 4.0.0
22390
+ * @category Lang
22391
+ * @param {*} value The value to compare.
22392
+ * @param {*} other The other value to compare.
22393
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
22394
+ * @example
22395
+ *
22396
+ * var object = { 'a': 1 };
22397
+ * var other = { 'a': 1 };
22398
+ *
22399
+ * _.eq(object, object);
22400
+ * // => true
22401
+ *
22402
+ * _.eq(object, other);
22403
+ * // => false
22404
+ *
22405
+ * _.eq('a', 'a');
22406
+ * // => true
22407
+ *
22408
+ * _.eq('a', Object('a'));
22409
+ * // => false
22410
+ *
22411
+ * _.eq(NaN, NaN);
22412
+ * // => true
22413
+ */
22414
+ function eq(value, other) {
22415
+ return value === other || (value !== value && other !== other);
22416
+ }
22417
+
22418
+ /**
22419
+ * Checks if `value` is likely an `arguments` object.
22420
+ *
22421
+ * @static
22422
+ * @memberOf _
22423
+ * @since 0.1.0
22424
+ * @category Lang
22425
+ * @param {*} value The value to check.
22426
+ * @returns {boolean} Returns `true` if `value` is an `arguments` object,
22427
+ * else `false`.
22428
+ * @example
22429
+ *
22430
+ * _.isArguments(function() { return arguments; }());
22431
+ * // => true
22432
+ *
22433
+ * _.isArguments([1, 2, 3]);
22434
+ * // => false
22435
+ */
22436
+ function isArguments(value) {
22437
+ // Safari 8.1 makes `arguments.callee` enumerable in strict mode.
22438
+ return isArrayLikeObject(value) && hasOwnProperty.call(value, 'callee') &&
22439
+ (!propertyIsEnumerable.call(value, 'callee') || objectToString.call(value) == argsTag);
22440
+ }
22441
+
22442
+ /**
22443
+ * Checks if `value` is classified as an `Array` object.
22444
+ *
22445
+ * @static
22446
+ * @memberOf _
22447
+ * @since 0.1.0
22448
+ * @category Lang
22449
+ * @param {*} value The value to check.
22450
+ * @returns {boolean} Returns `true` if `value` is an array, else `false`.
22451
+ * @example
22452
+ *
22453
+ * _.isArray([1, 2, 3]);
22454
+ * // => true
22455
+ *
22456
+ * _.isArray(document.body.children);
22457
+ * // => false
22458
+ *
22459
+ * _.isArray('abc');
22460
+ * // => false
22461
+ *
22462
+ * _.isArray(_.noop);
22463
+ * // => false
22464
+ */
22465
+ var isArray = Array.isArray;
22466
+
22467
+ /**
22468
+ * Checks if `value` is array-like. A value is considered array-like if it's
22469
+ * not a function and has a `value.length` that's an integer greater than or
22470
+ * equal to `0` and less than or equal to `Number.MAX_SAFE_INTEGER`.
22471
+ *
22472
+ * @static
22473
+ * @memberOf _
22474
+ * @since 4.0.0
22475
+ * @category Lang
22476
+ * @param {*} value The value to check.
22477
+ * @returns {boolean} Returns `true` if `value` is array-like, else `false`.
22478
+ * @example
22479
+ *
22480
+ * _.isArrayLike([1, 2, 3]);
22481
+ * // => true
22482
+ *
22483
+ * _.isArrayLike(document.body.children);
22484
+ * // => true
22485
+ *
22486
+ * _.isArrayLike('abc');
22487
+ * // => true
22488
+ *
22489
+ * _.isArrayLike(_.noop);
22490
+ * // => false
22491
+ */
22492
+ function isArrayLike(value) {
22493
+ return value != null && isLength(value.length) && !isFunction(value);
22494
+ }
22495
+
22496
+ /**
22497
+ * This method is like `_.isArrayLike` except that it also checks if `value`
22498
+ * is an object.
22499
+ *
22500
+ * @static
22501
+ * @memberOf _
22502
+ * @since 4.0.0
22503
+ * @category Lang
22504
+ * @param {*} value The value to check.
22505
+ * @returns {boolean} Returns `true` if `value` is an array-like object,
22506
+ * else `false`.
22507
+ * @example
22508
+ *
22509
+ * _.isArrayLikeObject([1, 2, 3]);
22510
+ * // => true
22511
+ *
22512
+ * _.isArrayLikeObject(document.body.children);
22513
+ * // => true
22514
+ *
22515
+ * _.isArrayLikeObject('abc');
22516
+ * // => false
22517
+ *
22518
+ * _.isArrayLikeObject(_.noop);
22519
+ * // => false
22520
+ */
22521
+ function isArrayLikeObject(value) {
22522
+ return isObjectLike(value) && isArrayLike(value);
22523
+ }
22524
+
22525
+ /**
22526
+ * Checks if `value` is classified as a `Function` object.
22527
+ *
22528
+ * @static
22529
+ * @memberOf _
22530
+ * @since 0.1.0
22531
+ * @category Lang
22532
+ * @param {*} value The value to check.
22533
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
22534
+ * @example
22535
+ *
22536
+ * _.isFunction(_);
22537
+ * // => true
22538
+ *
22539
+ * _.isFunction(/abc/);
22540
+ * // => false
22541
+ */
22542
+ function isFunction(value) {
22543
+ // The use of `Object#toString` avoids issues with the `typeof` operator
22544
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
22545
+ var tag = isObject(value) ? objectToString.call(value) : '';
22546
+ return tag == funcTag || tag == genTag;
22547
+ }
22548
+
22549
+ /**
22550
+ * Checks if `value` is a valid array-like length.
22551
+ *
22552
+ * **Note:** This method is loosely based on
22553
+ * [`ToLength`](http://ecma-international.org/ecma-262/7.0/#sec-tolength).
22554
+ *
22555
+ * @static
22556
+ * @memberOf _
22557
+ * @since 4.0.0
22558
+ * @category Lang
22559
+ * @param {*} value The value to check.
22560
+ * @returns {boolean} Returns `true` if `value` is a valid length, else `false`.
22561
+ * @example
22562
+ *
22563
+ * _.isLength(3);
22564
+ * // => true
22565
+ *
22566
+ * _.isLength(Number.MIN_VALUE);
22567
+ * // => false
22568
+ *
22569
+ * _.isLength(Infinity);
22570
+ * // => false
22571
+ *
22572
+ * _.isLength('3');
22573
+ * // => false
22574
+ */
22575
+ function isLength(value) {
22576
+ return typeof value == 'number' &&
22577
+ value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER;
22578
+ }
22579
+
22580
+ /**
22581
+ * Checks if `value` is the
22582
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
22583
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
22584
+ *
22585
+ * @static
22586
+ * @memberOf _
22587
+ * @since 0.1.0
22588
+ * @category Lang
22589
+ * @param {*} value The value to check.
22590
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
22591
+ * @example
22592
+ *
22593
+ * _.isObject({});
22594
+ * // => true
22595
+ *
22596
+ * _.isObject([1, 2, 3]);
22597
+ * // => true
22598
+ *
22599
+ * _.isObject(_.noop);
22600
+ * // => true
22601
+ *
22602
+ * _.isObject(null);
22603
+ * // => false
22604
+ */
22605
+ function isObject(value) {
22606
+ var type = typeof value;
22607
+ return !!value && (type == 'object' || type == 'function');
22608
+ }
22609
+
22610
+ /**
22611
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
22612
+ * and has a `typeof` result of "object".
22613
+ *
22614
+ * @static
22615
+ * @memberOf _
22616
+ * @since 4.0.0
22617
+ * @category Lang
22618
+ * @param {*} value The value to check.
22619
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
22620
+ * @example
22621
+ *
22622
+ * _.isObjectLike({});
22623
+ * // => true
22624
+ *
22625
+ * _.isObjectLike([1, 2, 3]);
22626
+ * // => true
22627
+ *
22628
+ * _.isObjectLike(_.noop);
22629
+ * // => false
22630
+ *
22631
+ * _.isObjectLike(null);
22632
+ * // => false
22633
+ */
22634
+ function isObjectLike(value) {
22635
+ return !!value && typeof value == 'object';
22636
+ }
22637
+
22638
+ /**
22639
+ * Checks if `value` is classified as a `Symbol` primitive or object.
22640
+ *
22641
+ * @static
22642
+ * @memberOf _
22643
+ * @since 4.0.0
22644
+ * @category Lang
22645
+ * @param {*} value The value to check.
22646
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
22647
+ * @example
22648
+ *
22649
+ * _.isSymbol(Symbol.iterator);
22650
+ * // => true
22651
+ *
22652
+ * _.isSymbol('abc');
22653
+ * // => false
22654
+ */
22655
+ function isSymbol(value) {
22656
+ return typeof value == 'symbol' ||
22657
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
22658
+ }
22659
+
22660
+ /**
22661
+ * Checks if `value` is classified as a typed array.
22662
+ *
22663
+ * @static
22664
+ * @memberOf _
22665
+ * @since 3.0.0
22666
+ * @category Lang
22667
+ * @param {*} value The value to check.
22668
+ * @returns {boolean} Returns `true` if `value` is a typed array, else `false`.
22669
+ * @example
22670
+ *
22671
+ * _.isTypedArray(new Uint8Array);
22672
+ * // => true
22673
+ *
22674
+ * _.isTypedArray([]);
22675
+ * // => false
22676
+ */
22677
+ var isTypedArray = nodeIsTypedArray ? baseUnary(nodeIsTypedArray) : baseIsTypedArray;
22678
+
22679
+ /**
22680
+ * Converts `value` to a string. An empty string is returned for `null`
22681
+ * and `undefined` values. The sign of `-0` is preserved.
22682
+ *
22683
+ * @static
22684
+ * @memberOf _
22685
+ * @since 4.0.0
22686
+ * @category Lang
22687
+ * @param {*} value The value to process.
22688
+ * @returns {string} Returns the string.
22689
+ * @example
22690
+ *
22691
+ * _.toString(null);
22692
+ * // => ''
22693
+ *
22694
+ * _.toString(-0);
22695
+ * // => '-0'
22696
+ *
22697
+ * _.toString([1, 2, 3]);
22698
+ * // => '1,2,3'
22699
+ */
22700
+ function toString(value) {
22701
+ return value == null ? '' : baseToString(value);
22702
+ }
22703
+
22704
+ /**
22705
+ * Gets the value at `path` of `object`. If the resolved value is
22706
+ * `undefined`, the `defaultValue` is returned in its place.
22707
+ *
22708
+ * @static
22709
+ * @memberOf _
22710
+ * @since 3.7.0
22711
+ * @category Object
22712
+ * @param {Object} object The object to query.
22713
+ * @param {Array|string} path The path of the property to get.
22714
+ * @param {*} [defaultValue] The value returned for `undefined` resolved values.
22715
+ * @returns {*} Returns the resolved value.
22716
+ * @example
22717
+ *
22718
+ * var object = { 'a': [{ 'b': { 'c': 3 } }] };
22719
+ *
22720
+ * _.get(object, 'a[0].b.c');
22721
+ * // => 3
22722
+ *
22723
+ * _.get(object, ['a', '0', 'b', 'c']);
22724
+ * // => 3
22725
+ *
22726
+ * _.get(object, 'a.b.c', 'default');
22727
+ * // => 'default'
22728
+ */
22729
+ function get(object, path, defaultValue) {
22730
+ var result = object == null ? undefined : baseGet(object, path);
22731
+ return result === undefined ? defaultValue : result;
22732
+ }
22733
+
22734
+ /**
22735
+ * Checks if `path` is a direct or inherited property of `object`.
22736
+ *
22737
+ * @static
22738
+ * @memberOf _
22739
+ * @since 4.0.0
22740
+ * @category Object
22741
+ * @param {Object} object The object to query.
22742
+ * @param {Array|string} path The path to check.
22743
+ * @returns {boolean} Returns `true` if `path` exists, else `false`.
22744
+ * @example
22745
+ *
22746
+ * var object = _.create({ 'a': _.create({ 'b': 2 }) });
22747
+ *
22748
+ * _.hasIn(object, 'a');
22749
+ * // => true
22750
+ *
22751
+ * _.hasIn(object, 'a.b');
22752
+ * // => true
22753
+ *
22754
+ * _.hasIn(object, ['a', 'b']);
22755
+ * // => true
22756
+ *
22757
+ * _.hasIn(object, 'b');
22758
+ * // => false
22759
+ */
22760
+ function hasIn(object, path) {
22761
+ return object != null && hasPath(object, path, baseHasIn);
22762
+ }
22763
+
22764
+ /**
22765
+ * Creates an array of the own enumerable property names of `object`.
22766
+ *
22767
+ * **Note:** Non-object values are coerced to objects. See the
22768
+ * [ES spec](http://ecma-international.org/ecma-262/7.0/#sec-object.keys)
22769
+ * for more details.
22770
+ *
22771
+ * @static
22772
+ * @since 0.1.0
22773
+ * @memberOf _
22774
+ * @category Object
22775
+ * @param {Object} object The object to query.
22776
+ * @returns {Array} Returns the array of property names.
22777
+ * @example
22778
+ *
22779
+ * function Foo() {
22780
+ * this.a = 1;
22781
+ * this.b = 2;
22782
+ * }
22783
+ *
22784
+ * Foo.prototype.c = 3;
22785
+ *
22786
+ * _.keys(new Foo);
22787
+ * // => ['a', 'b'] (iteration order is not guaranteed)
22788
+ *
22789
+ * _.keys('hi');
22790
+ * // => ['0', '1']
22791
+ */
22792
+ function keys(object) {
22793
+ return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
22794
+ }
22795
+
22796
+ /**
22797
+ * This method returns the first argument it receives.
22798
+ *
22799
+ * @static
22800
+ * @since 0.1.0
22801
+ * @memberOf _
22802
+ * @category Util
22803
+ * @param {*} value Any value.
22804
+ * @returns {*} Returns `value`.
22805
+ * @example
22806
+ *
22807
+ * var object = { 'a': 1 };
22808
+ *
22809
+ * console.log(_.identity(object) === object);
22810
+ * // => true
22811
+ */
22812
+ function identity(value) {
22813
+ return value;
22814
+ }
22815
+
22816
+ /**
22817
+ * Creates a function that returns the value at `path` of a given object.
22818
+ *
22819
+ * @static
22820
+ * @memberOf _
22821
+ * @since 2.4.0
22822
+ * @category Util
22823
+ * @param {Array|string} path The path of the property to get.
22824
+ * @returns {Function} Returns the new accessor function.
22825
+ * @example
22826
+ *
22827
+ * var objects = [
22828
+ * { 'a': { 'b': 2 } },
22829
+ * { 'a': { 'b': 1 } }
22830
+ * ];
22831
+ *
22832
+ * _.map(objects, _.property('a.b'));
22833
+ * // => [2, 1]
22834
+ *
22835
+ * _.map(_.sortBy(objects, _.property(['a', 'b'])), 'a.b');
22836
+ * // => [1, 2]
22837
+ */
22838
+ function property(path) {
22839
+ return isKey(path) ? baseProperty(toKey(path)) : basePropertyDeep(path);
22840
+ }
22841
+
22842
+ module.exports = remove;
22843
+ });
22844
+
22845
+ /**
22846
+ * lodash (Custom Build) <https://lodash.com/>
22847
+ * Build: `lodash modularize exports="npm" -o ./`
22848
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
22849
+ * Released under MIT license <https://lodash.com/license>
22850
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
22851
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
22852
+ */
22853
+
22854
+ /** Used as the size to enable large array optimizations. */
22855
+ var LARGE_ARRAY_SIZE = 200;
22856
+
22857
+ /** Used to stand-in for `undefined` hash values. */
22858
+ var HASH_UNDEFINED = '__lodash_hash_undefined__';
22859
+
22860
+ /** Used as references for various `Number` constants. */
22861
+ var INFINITY$1 = 1 / 0;
22862
+
22863
+ /** `Object#toString` result references. */
22864
+ var funcTag = '[object Function]',
22865
+ genTag = '[object GeneratorFunction]';
22866
+
22867
+ /**
22868
+ * Used to match `RegExp`
22869
+ * [syntax characters](http://ecma-international.org/ecma-262/7.0/#sec-patterns).
22870
+ */
22871
+ var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
22872
+
22873
+ /** Used to detect host constructors (Safari). */
22874
+ var reIsHostCtor = /^\[object .+?Constructor\]$/;
22875
+
22876
+ /** Detect free variable `global` from Node.js. */
22877
+ var freeGlobal$1 = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
22878
+
22879
+ /** Detect free variable `self`. */
22880
+ var freeSelf$1 = typeof self == 'object' && self && self.Object === Object && self;
22881
+
22882
+ /** Used as a reference to the global object. */
22883
+ var root$1 = freeGlobal$1 || freeSelf$1 || Function('return this')();
22884
+
22885
+ /**
22886
+ * A specialized version of `_.includes` for arrays without support for
22887
+ * specifying an index to search from.
22888
+ *
22889
+ * @private
22890
+ * @param {Array} [array] The array to inspect.
22891
+ * @param {*} target The value to search for.
22892
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
22893
+ */
22894
+ function arrayIncludes(array, value) {
22895
+ var length = array ? array.length : 0;
22896
+ return !!length && baseIndexOf(array, value, 0) > -1;
22897
+ }
22898
+
22899
+ /**
22900
+ * This function is like `arrayIncludes` except that it accepts a comparator.
22901
+ *
22902
+ * @private
22903
+ * @param {Array} [array] The array to inspect.
22904
+ * @param {*} target The value to search for.
22905
+ * @param {Function} comparator The comparator invoked per element.
22906
+ * @returns {boolean} Returns `true` if `target` is found, else `false`.
22907
+ */
22908
+ function arrayIncludesWith(array, value, comparator) {
22909
+ var index = -1,
22910
+ length = array ? array.length : 0;
22911
+
22912
+ while (++index < length) {
22913
+ if (comparator(value, array[index])) {
22914
+ return true;
22915
+ }
22916
+ }
22917
+ return false;
22918
+ }
22919
+
22920
+ /**
22921
+ * The base implementation of `_.findIndex` and `_.findLastIndex` without
22922
+ * support for iteratee shorthands.
22923
+ *
22924
+ * @private
22925
+ * @param {Array} array The array to inspect.
22926
+ * @param {Function} predicate The function invoked per iteration.
22927
+ * @param {number} fromIndex The index to search from.
22928
+ * @param {boolean} [fromRight] Specify iterating from right to left.
22929
+ * @returns {number} Returns the index of the matched value, else `-1`.
22930
+ */
22931
+ function baseFindIndex(array, predicate, fromIndex, fromRight) {
22932
+ var length = array.length,
22933
+ index = fromIndex + (fromRight ? 1 : -1);
22934
+
22935
+ while ((fromRight ? index-- : ++index < length)) {
22936
+ if (predicate(array[index], index, array)) {
22937
+ return index;
22938
+ }
22939
+ }
22940
+ return -1;
22941
+ }
22942
+
22943
+ /**
22944
+ * The base implementation of `_.indexOf` without `fromIndex` bounds checks.
22945
+ *
22946
+ * @private
22947
+ * @param {Array} array The array to inspect.
22948
+ * @param {*} value The value to search for.
22949
+ * @param {number} fromIndex The index to search from.
22950
+ * @returns {number} Returns the index of the matched value, else `-1`.
22951
+ */
22952
+ function baseIndexOf(array, value, fromIndex) {
22953
+ if (value !== value) {
22954
+ return baseFindIndex(array, baseIsNaN, fromIndex);
22955
+ }
22956
+ var index = fromIndex - 1,
22957
+ length = array.length;
22958
+
22959
+ while (++index < length) {
22960
+ if (array[index] === value) {
22961
+ return index;
22962
+ }
22963
+ }
22964
+ return -1;
22965
+ }
22966
+
22967
+ /**
22968
+ * The base implementation of `_.isNaN` without support for number objects.
22969
+ *
22970
+ * @private
22971
+ * @param {*} value The value to check.
22972
+ * @returns {boolean} Returns `true` if `value` is `NaN`, else `false`.
22973
+ */
22974
+ function baseIsNaN(value) {
22975
+ return value !== value;
22976
+ }
22977
+
22978
+ /**
22979
+ * Checks if a cache value for `key` exists.
22980
+ *
22981
+ * @private
22982
+ * @param {Object} cache The cache to query.
22983
+ * @param {string} key The key of the entry to check.
22984
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
22985
+ */
22986
+ function cacheHas(cache, key) {
22987
+ return cache.has(key);
22988
+ }
22989
+
22990
+ /**
22991
+ * Gets the value at `key` of `object`.
22992
+ *
22993
+ * @private
22994
+ * @param {Object} [object] The object to query.
22995
+ * @param {string} key The key of the property to get.
22996
+ * @returns {*} Returns the property value.
22997
+ */
22998
+ function getValue(object, key) {
22999
+ return object == null ? undefined : object[key];
23000
+ }
23001
+
23002
+ /**
23003
+ * Checks if `value` is a host object in IE < 9.
23004
+ *
23005
+ * @private
23006
+ * @param {*} value The value to check.
23007
+ * @returns {boolean} Returns `true` if `value` is a host object, else `false`.
23008
+ */
23009
+ function isHostObject(value) {
23010
+ // Many host objects are `Object` objects that can coerce to strings
23011
+ // despite having improperly defined `toString` methods.
23012
+ var result = false;
23013
+ if (value != null && typeof value.toString != 'function') {
23014
+ try {
23015
+ result = !!(value + '');
23016
+ } catch (e) {}
23017
+ }
23018
+ return result;
23019
+ }
23020
+
23021
+ /**
23022
+ * Converts `set` to an array of its values.
23023
+ *
23024
+ * @private
23025
+ * @param {Object} set The set to convert.
23026
+ * @returns {Array} Returns the values.
23027
+ */
23028
+ function setToArray(set) {
23029
+ var index = -1,
23030
+ result = Array(set.size);
23031
+
23032
+ set.forEach(function(value) {
23033
+ result[++index] = value;
23034
+ });
23035
+ return result;
23036
+ }
23037
+
23038
+ /** Used for built-in method references. */
23039
+ var arrayProto = Array.prototype,
23040
+ funcProto = Function.prototype,
23041
+ objectProto$1 = Object.prototype;
23042
+
23043
+ /** Used to detect overreaching core-js shims. */
23044
+ var coreJsData = root$1['__core-js_shared__'];
23045
+
23046
+ /** Used to detect methods masquerading as native. */
23047
+ var maskSrcKey = (function() {
23048
+ var uid = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || '');
23049
+ return uid ? ('Symbol(src)_1.' + uid) : '';
23050
+ }());
23051
+
23052
+ /** Used to resolve the decompiled source of functions. */
23053
+ var funcToString = funcProto.toString;
23054
+
23055
+ /** Used to check objects for own properties. */
23056
+ var hasOwnProperty$1 = objectProto$1.hasOwnProperty;
23057
+
23058
+ /**
23059
+ * Used to resolve the
23060
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
23061
+ * of values.
23062
+ */
23063
+ var objectToString$1 = objectProto$1.toString;
23064
+
23065
+ /** Used to detect if a method is native. */
23066
+ var reIsNative = RegExp('^' +
23067
+ funcToString.call(hasOwnProperty$1).replace(reRegExpChar, '\\$&')
23068
+ .replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') + '$'
23069
+ );
23070
+
23071
+ /** Built-in value references. */
23072
+ var splice = arrayProto.splice;
23073
+
23074
+ /* Built-in method references that are verified to be native. */
23075
+ var Map$1 = getNative(root$1, 'Map'),
23076
+ Set$1 = getNative(root$1, 'Set'),
23077
+ nativeCreate = getNative(Object, 'create');
23078
+
23079
+ /**
23080
+ * Creates a hash object.
23081
+ *
23082
+ * @private
23083
+ * @constructor
23084
+ * @param {Array} [entries] The key-value pairs to cache.
23085
+ */
23086
+ function Hash(entries) {
23087
+ var index = -1,
23088
+ length = entries ? entries.length : 0;
23089
+
23090
+ this.clear();
23091
+ while (++index < length) {
23092
+ var entry = entries[index];
23093
+ this.set(entry[0], entry[1]);
23094
+ }
23095
+ }
23096
+
23097
+ /**
23098
+ * Removes all key-value entries from the hash.
23099
+ *
23100
+ * @private
23101
+ * @name clear
23102
+ * @memberOf Hash
23103
+ */
23104
+ function hashClear() {
23105
+ this.__data__ = nativeCreate ? nativeCreate(null) : {};
23106
+ }
23107
+
23108
+ /**
23109
+ * Removes `key` and its value from the hash.
23110
+ *
23111
+ * @private
23112
+ * @name delete
23113
+ * @memberOf Hash
23114
+ * @param {Object} hash The hash to modify.
23115
+ * @param {string} key The key of the value to remove.
23116
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
23117
+ */
23118
+ function hashDelete(key) {
23119
+ return this.has(key) && delete this.__data__[key];
23120
+ }
23121
+
23122
+ /**
23123
+ * Gets the hash value for `key`.
23124
+ *
23125
+ * @private
23126
+ * @name get
23127
+ * @memberOf Hash
23128
+ * @param {string} key The key of the value to get.
23129
+ * @returns {*} Returns the entry value.
23130
+ */
23131
+ function hashGet(key) {
23132
+ var data = this.__data__;
23133
+ if (nativeCreate) {
23134
+ var result = data[key];
23135
+ return result === HASH_UNDEFINED ? undefined : result;
23136
+ }
23137
+ return hasOwnProperty$1.call(data, key) ? data[key] : undefined;
23138
+ }
23139
+
23140
+ /**
23141
+ * Checks if a hash value for `key` exists.
23142
+ *
23143
+ * @private
23144
+ * @name has
23145
+ * @memberOf Hash
23146
+ * @param {string} key The key of the entry to check.
23147
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
23148
+ */
23149
+ function hashHas(key) {
23150
+ var data = this.__data__;
23151
+ return nativeCreate ? data[key] !== undefined : hasOwnProperty$1.call(data, key);
23152
+ }
23153
+
23154
+ /**
23155
+ * Sets the hash `key` to `value`.
23156
+ *
23157
+ * @private
23158
+ * @name set
23159
+ * @memberOf Hash
23160
+ * @param {string} key The key of the value to set.
23161
+ * @param {*} value The value to set.
23162
+ * @returns {Object} Returns the hash instance.
23163
+ */
23164
+ function hashSet(key, value) {
23165
+ var data = this.__data__;
23166
+ data[key] = (nativeCreate && value === undefined) ? HASH_UNDEFINED : value;
23167
+ return this;
23168
+ }
23169
+
23170
+ // Add methods to `Hash`.
23171
+ Hash.prototype.clear = hashClear;
23172
+ Hash.prototype['delete'] = hashDelete;
23173
+ Hash.prototype.get = hashGet;
23174
+ Hash.prototype.has = hashHas;
23175
+ Hash.prototype.set = hashSet;
23176
+
23177
+ /**
23178
+ * Creates an list cache object.
23179
+ *
23180
+ * @private
23181
+ * @constructor
23182
+ * @param {Array} [entries] The key-value pairs to cache.
23183
+ */
23184
+ function ListCache(entries) {
23185
+ var index = -1,
23186
+ length = entries ? entries.length : 0;
23187
+
23188
+ this.clear();
23189
+ while (++index < length) {
23190
+ var entry = entries[index];
23191
+ this.set(entry[0], entry[1]);
23192
+ }
23193
+ }
23194
+
23195
+ /**
23196
+ * Removes all key-value entries from the list cache.
23197
+ *
23198
+ * @private
23199
+ * @name clear
23200
+ * @memberOf ListCache
23201
+ */
23202
+ function listCacheClear() {
23203
+ this.__data__ = [];
23204
+ }
23205
+
23206
+ /**
23207
+ * Removes `key` and its value from the list cache.
23208
+ *
23209
+ * @private
23210
+ * @name delete
23211
+ * @memberOf ListCache
23212
+ * @param {string} key The key of the value to remove.
23213
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
23214
+ */
23215
+ function listCacheDelete(key) {
23216
+ var data = this.__data__,
23217
+ index = assocIndexOf(data, key);
23218
+
23219
+ if (index < 0) {
23220
+ return false;
23221
+ }
23222
+ var lastIndex = data.length - 1;
23223
+ if (index == lastIndex) {
23224
+ data.pop();
23225
+ } else {
23226
+ splice.call(data, index, 1);
23227
+ }
23228
+ return true;
23229
+ }
23230
+
23231
+ /**
23232
+ * Gets the list cache value for `key`.
23233
+ *
23234
+ * @private
23235
+ * @name get
23236
+ * @memberOf ListCache
23237
+ * @param {string} key The key of the value to get.
23238
+ * @returns {*} Returns the entry value.
23239
+ */
23240
+ function listCacheGet(key) {
23241
+ var data = this.__data__,
23242
+ index = assocIndexOf(data, key);
23243
+
23244
+ return index < 0 ? undefined : data[index][1];
23245
+ }
23246
+
23247
+ /**
23248
+ * Checks if a list cache value for `key` exists.
23249
+ *
23250
+ * @private
23251
+ * @name has
23252
+ * @memberOf ListCache
23253
+ * @param {string} key The key of the entry to check.
23254
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
23255
+ */
23256
+ function listCacheHas(key) {
23257
+ return assocIndexOf(this.__data__, key) > -1;
23258
+ }
23259
+
23260
+ /**
23261
+ * Sets the list cache `key` to `value`.
23262
+ *
23263
+ * @private
23264
+ * @name set
23265
+ * @memberOf ListCache
23266
+ * @param {string} key The key of the value to set.
23267
+ * @param {*} value The value to set.
23268
+ * @returns {Object} Returns the list cache instance.
23269
+ */
23270
+ function listCacheSet(key, value) {
23271
+ var data = this.__data__,
23272
+ index = assocIndexOf(data, key);
23273
+
23274
+ if (index < 0) {
23275
+ data.push([key, value]);
23276
+ } else {
23277
+ data[index][1] = value;
23278
+ }
23279
+ return this;
23280
+ }
23281
+
23282
+ // Add methods to `ListCache`.
23283
+ ListCache.prototype.clear = listCacheClear;
23284
+ ListCache.prototype['delete'] = listCacheDelete;
23285
+ ListCache.prototype.get = listCacheGet;
23286
+ ListCache.prototype.has = listCacheHas;
23287
+ ListCache.prototype.set = listCacheSet;
23288
+
23289
+ /**
23290
+ * Creates a map cache object to store key-value pairs.
23291
+ *
23292
+ * @private
23293
+ * @constructor
23294
+ * @param {Array} [entries] The key-value pairs to cache.
23295
+ */
23296
+ function MapCache(entries) {
23297
+ var index = -1,
23298
+ length = entries ? entries.length : 0;
23299
+
23300
+ this.clear();
23301
+ while (++index < length) {
23302
+ var entry = entries[index];
23303
+ this.set(entry[0], entry[1]);
23304
+ }
23305
+ }
23306
+
23307
+ /**
23308
+ * Removes all key-value entries from the map.
23309
+ *
23310
+ * @private
23311
+ * @name clear
23312
+ * @memberOf MapCache
23313
+ */
23314
+ function mapCacheClear() {
23315
+ this.__data__ = {
23316
+ 'hash': new Hash,
23317
+ 'map': new (Map$1 || ListCache),
23318
+ 'string': new Hash
23319
+ };
23320
+ }
23321
+
23322
+ /**
23323
+ * Removes `key` and its value from the map.
23324
+ *
23325
+ * @private
23326
+ * @name delete
23327
+ * @memberOf MapCache
23328
+ * @param {string} key The key of the value to remove.
23329
+ * @returns {boolean} Returns `true` if the entry was removed, else `false`.
23330
+ */
23331
+ function mapCacheDelete(key) {
23332
+ return getMapData(this, key)['delete'](key);
23333
+ }
23334
+
23335
+ /**
23336
+ * Gets the map value for `key`.
23337
+ *
23338
+ * @private
23339
+ * @name get
23340
+ * @memberOf MapCache
23341
+ * @param {string} key The key of the value to get.
23342
+ * @returns {*} Returns the entry value.
23343
+ */
23344
+ function mapCacheGet(key) {
23345
+ return getMapData(this, key).get(key);
23346
+ }
23347
+
23348
+ /**
23349
+ * Checks if a map value for `key` exists.
23350
+ *
23351
+ * @private
23352
+ * @name has
23353
+ * @memberOf MapCache
23354
+ * @param {string} key The key of the entry to check.
23355
+ * @returns {boolean} Returns `true` if an entry for `key` exists, else `false`.
23356
+ */
23357
+ function mapCacheHas(key) {
23358
+ return getMapData(this, key).has(key);
23359
+ }
23360
+
23361
+ /**
23362
+ * Sets the map `key` to `value`.
23363
+ *
23364
+ * @private
23365
+ * @name set
23366
+ * @memberOf MapCache
23367
+ * @param {string} key The key of the value to set.
23368
+ * @param {*} value The value to set.
23369
+ * @returns {Object} Returns the map cache instance.
23370
+ */
23371
+ function mapCacheSet(key, value) {
23372
+ getMapData(this, key).set(key, value);
23373
+ return this;
23374
+ }
23375
+
23376
+ // Add methods to `MapCache`.
23377
+ MapCache.prototype.clear = mapCacheClear;
23378
+ MapCache.prototype['delete'] = mapCacheDelete;
23379
+ MapCache.prototype.get = mapCacheGet;
23380
+ MapCache.prototype.has = mapCacheHas;
23381
+ MapCache.prototype.set = mapCacheSet;
23382
+
23383
+ /**
23384
+ *
23385
+ * Creates an array cache object to store unique values.
23386
+ *
23387
+ * @private
23388
+ * @constructor
23389
+ * @param {Array} [values] The values to cache.
23390
+ */
23391
+ function SetCache(values) {
23392
+ var index = -1,
23393
+ length = values ? values.length : 0;
23394
+
23395
+ this.__data__ = new MapCache;
23396
+ while (++index < length) {
23397
+ this.add(values[index]);
23398
+ }
23399
+ }
23400
+
23401
+ /**
23402
+ * Adds `value` to the array cache.
23403
+ *
23404
+ * @private
23405
+ * @name add
23406
+ * @memberOf SetCache
23407
+ * @alias push
23408
+ * @param {*} value The value to cache.
23409
+ * @returns {Object} Returns the cache instance.
23410
+ */
23411
+ function setCacheAdd(value) {
23412
+ this.__data__.set(value, HASH_UNDEFINED);
23413
+ return this;
23414
+ }
23415
+
23416
+ /**
23417
+ * Checks if `value` is in the array cache.
23418
+ *
23419
+ * @private
23420
+ * @name has
23421
+ * @memberOf SetCache
23422
+ * @param {*} value The value to search for.
23423
+ * @returns {number} Returns `true` if `value` is found, else `false`.
23424
+ */
23425
+ function setCacheHas(value) {
23426
+ return this.__data__.has(value);
23427
+ }
23428
+
23429
+ // Add methods to `SetCache`.
23430
+ SetCache.prototype.add = SetCache.prototype.push = setCacheAdd;
23431
+ SetCache.prototype.has = setCacheHas;
23432
+
23433
+ /**
23434
+ * Gets the index at which the `key` is found in `array` of key-value pairs.
23435
+ *
23436
+ * @private
23437
+ * @param {Array} array The array to inspect.
23438
+ * @param {*} key The key to search for.
23439
+ * @returns {number} Returns the index of the matched value, else `-1`.
23440
+ */
23441
+ function assocIndexOf(array, key) {
23442
+ var length = array.length;
23443
+ while (length--) {
23444
+ if (eq(array[length][0], key)) {
23445
+ return length;
23446
+ }
23447
+ }
23448
+ return -1;
23449
+ }
23450
+
23451
+ /**
23452
+ * The base implementation of `_.isNative` without bad shim checks.
23453
+ *
23454
+ * @private
23455
+ * @param {*} value The value to check.
23456
+ * @returns {boolean} Returns `true` if `value` is a native function,
23457
+ * else `false`.
23458
+ */
23459
+ function baseIsNative(value) {
23460
+ if (!isObject(value) || isMasked(value)) {
23461
+ return false;
23462
+ }
23463
+ var pattern = (isFunction(value) || isHostObject(value)) ? reIsNative : reIsHostCtor;
23464
+ return pattern.test(toSource(value));
23465
+ }
23466
+
23467
+ /**
23468
+ * The base implementation of `_.uniqBy` without support for iteratee shorthands.
23469
+ *
23470
+ * @private
23471
+ * @param {Array} array The array to inspect.
23472
+ * @param {Function} [iteratee] The iteratee invoked per element.
23473
+ * @param {Function} [comparator] The comparator invoked per element.
23474
+ * @returns {Array} Returns the new duplicate free array.
23475
+ */
23476
+ function baseUniq(array, iteratee, comparator) {
23477
+ var index = -1,
23478
+ includes = arrayIncludes,
23479
+ length = array.length,
23480
+ isCommon = true,
23481
+ result = [],
23482
+ seen = result;
23483
+
23484
+ if (comparator) {
23485
+ isCommon = false;
23486
+ includes = arrayIncludesWith;
23487
+ }
23488
+ else if (length >= LARGE_ARRAY_SIZE) {
23489
+ var set = iteratee ? null : createSet(array);
23490
+ if (set) {
23491
+ return setToArray(set);
23492
+ }
23493
+ isCommon = false;
23494
+ includes = cacheHas;
23495
+ seen = new SetCache;
23496
+ }
23497
+ else {
23498
+ seen = iteratee ? [] : result;
23499
+ }
23500
+ outer:
23501
+ while (++index < length) {
23502
+ var value = array[index],
23503
+ computed = iteratee ? iteratee(value) : value;
23504
+
23505
+ value = (comparator || value !== 0) ? value : 0;
23506
+ if (isCommon && computed === computed) {
23507
+ var seenIndex = seen.length;
23508
+ while (seenIndex--) {
23509
+ if (seen[seenIndex] === computed) {
23510
+ continue outer;
23511
+ }
23512
+ }
23513
+ if (iteratee) {
23514
+ seen.push(computed);
23515
+ }
23516
+ result.push(value);
23517
+ }
23518
+ else if (!includes(seen, computed, comparator)) {
23519
+ if (seen !== result) {
23520
+ seen.push(computed);
23521
+ }
23522
+ result.push(value);
23523
+ }
23524
+ }
23525
+ return result;
23526
+ }
23527
+
23528
+ /**
23529
+ * Creates a set object of `values`.
23530
+ *
23531
+ * @private
23532
+ * @param {Array} values The values to add to the set.
23533
+ * @returns {Object} Returns the new set.
23534
+ */
23535
+ var createSet = !(Set$1 && (1 / setToArray(new Set$1([,-0]))[1]) == INFINITY$1) ? noop : function(values) {
23536
+ return new Set$1(values);
23537
+ };
23538
+
23539
+ /**
23540
+ * Gets the data for `map`.
23541
+ *
23542
+ * @private
23543
+ * @param {Object} map The map to query.
23544
+ * @param {string} key The reference key.
23545
+ * @returns {*} Returns the map data.
23546
+ */
23547
+ function getMapData(map, key) {
23548
+ var data = map.__data__;
23549
+ return isKeyable(key)
23550
+ ? data[typeof key == 'string' ? 'string' : 'hash']
23551
+ : data.map;
23552
+ }
23553
+
23554
+ /**
23555
+ * Gets the native function at `key` of `object`.
23556
+ *
23557
+ * @private
23558
+ * @param {Object} object The object to query.
23559
+ * @param {string} key The key of the method to get.
23560
+ * @returns {*} Returns the function if it's native, else `undefined`.
23561
+ */
23562
+ function getNative(object, key) {
23563
+ var value = getValue(object, key);
23564
+ return baseIsNative(value) ? value : undefined;
23565
+ }
23566
+
23567
+ /**
23568
+ * Checks if `value` is suitable for use as unique object key.
23569
+ *
23570
+ * @private
23571
+ * @param {*} value The value to check.
23572
+ * @returns {boolean} Returns `true` if `value` is suitable, else `false`.
23573
+ */
23574
+ function isKeyable(value) {
23575
+ var type = typeof value;
23576
+ return (type == 'string' || type == 'number' || type == 'symbol' || type == 'boolean')
23577
+ ? (value !== '__proto__')
23578
+ : (value === null);
23579
+ }
23580
+
23581
+ /**
23582
+ * Checks if `func` has its source masked.
23583
+ *
23584
+ * @private
23585
+ * @param {Function} func The function to check.
23586
+ * @returns {boolean} Returns `true` if `func` is masked, else `false`.
23587
+ */
23588
+ function isMasked(func) {
23589
+ return !!maskSrcKey && (maskSrcKey in func);
23590
+ }
23591
+
23592
+ /**
23593
+ * Converts `func` to its source code.
23594
+ *
23595
+ * @private
23596
+ * @param {Function} func The function to process.
23597
+ * @returns {string} Returns the source code.
23598
+ */
23599
+ function toSource(func) {
23600
+ if (func != null) {
23601
+ try {
23602
+ return funcToString.call(func);
23603
+ } catch (e) {}
23604
+ try {
23605
+ return (func + '');
23606
+ } catch (e) {}
23607
+ }
23608
+ return '';
23609
+ }
23610
+
23611
+ /**
23612
+ * Creates a duplicate-free version of an array, using
23613
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
23614
+ * for equality comparisons, in which only the first occurrence of each
23615
+ * element is kept.
23616
+ *
23617
+ * @static
23618
+ * @memberOf _
23619
+ * @since 0.1.0
23620
+ * @category Array
23621
+ * @param {Array} array The array to inspect.
23622
+ * @returns {Array} Returns the new duplicate free array.
23623
+ * @example
23624
+ *
23625
+ * _.uniq([2, 1, 2]);
23626
+ * // => [2, 1]
23627
+ */
23628
+ function uniq(array) {
23629
+ return (array && array.length)
23630
+ ? baseUniq(array)
23631
+ : [];
23632
+ }
23633
+
23634
+ /**
23635
+ * Performs a
23636
+ * [`SameValueZero`](http://ecma-international.org/ecma-262/7.0/#sec-samevaluezero)
23637
+ * comparison between two values to determine if they are equivalent.
23638
+ *
23639
+ * @static
23640
+ * @memberOf _
23641
+ * @since 4.0.0
23642
+ * @category Lang
23643
+ * @param {*} value The value to compare.
23644
+ * @param {*} other The other value to compare.
23645
+ * @returns {boolean} Returns `true` if the values are equivalent, else `false`.
23646
+ * @example
23647
+ *
23648
+ * var object = { 'a': 1 };
23649
+ * var other = { 'a': 1 };
23650
+ *
23651
+ * _.eq(object, object);
23652
+ * // => true
23653
+ *
23654
+ * _.eq(object, other);
23655
+ * // => false
23656
+ *
23657
+ * _.eq('a', 'a');
23658
+ * // => true
23659
+ *
23660
+ * _.eq('a', Object('a'));
23661
+ * // => false
23662
+ *
23663
+ * _.eq(NaN, NaN);
23664
+ * // => true
23665
+ */
23666
+ function eq(value, other) {
23667
+ return value === other || (value !== value && other !== other);
23668
+ }
23669
+
23670
+ /**
23671
+ * Checks if `value` is classified as a `Function` object.
23672
+ *
23673
+ * @static
23674
+ * @memberOf _
23675
+ * @since 0.1.0
23676
+ * @category Lang
23677
+ * @param {*} value The value to check.
23678
+ * @returns {boolean} Returns `true` if `value` is a function, else `false`.
23679
+ * @example
23680
+ *
23681
+ * _.isFunction(_);
23682
+ * // => true
23683
+ *
23684
+ * _.isFunction(/abc/);
23685
+ * // => false
23686
+ */
23687
+ function isFunction(value) {
23688
+ // The use of `Object#toString` avoids issues with the `typeof` operator
23689
+ // in Safari 8-9 which returns 'object' for typed array and other constructors.
23690
+ var tag = isObject(value) ? objectToString$1.call(value) : '';
23691
+ return tag == funcTag || tag == genTag;
23692
+ }
23693
+
23694
+ /**
23695
+ * Checks if `value` is the
23696
+ * [language type](http://www.ecma-international.org/ecma-262/7.0/#sec-ecmascript-language-types)
23697
+ * of `Object`. (e.g. arrays, functions, objects, regexes, `new Number(0)`, and `new String('')`)
23698
+ *
23699
+ * @static
23700
+ * @memberOf _
23701
+ * @since 0.1.0
23702
+ * @category Lang
23703
+ * @param {*} value The value to check.
23704
+ * @returns {boolean} Returns `true` if `value` is an object, else `false`.
23705
+ * @example
23706
+ *
23707
+ * _.isObject({});
23708
+ * // => true
23709
+ *
23710
+ * _.isObject([1, 2, 3]);
23711
+ * // => true
23712
+ *
23713
+ * _.isObject(_.noop);
23714
+ * // => true
23715
+ *
23716
+ * _.isObject(null);
23717
+ * // => false
23718
+ */
23719
+ function isObject(value) {
23720
+ var type = typeof value;
23721
+ return !!value && (type == 'object' || type == 'function');
23722
+ }
23723
+
23724
+ /**
23725
+ * This method returns `undefined`.
23726
+ *
23727
+ * @static
23728
+ * @memberOf _
23729
+ * @since 2.3.0
23730
+ * @category Util
23731
+ * @example
23732
+ *
23733
+ * _.times(2, _.noop);
23734
+ * // => [undefined, undefined]
23735
+ */
23736
+ function noop() {
23737
+ // No operation performed.
23738
+ }
23739
+
23740
+ var lodash_uniq = uniq;
23741
+
23742
+ // data.class
23743
+
23744
+ var _class = function classModule (vnode, attributes) {
23745
+ var values;
23746
+ var _add = [];
23747
+ var _remove = [];
23748
+ var classes = vnode.data.class || {};
23749
+ var existing = attributes.get('class');
23750
+ existing = existing.length > 0 ? existing.split(' ') : [];
23751
+
23752
+ lodash_forown(classes, function (value, key) {
23753
+ if (value) {
23754
+ _add.push(key);
23755
+ } else {
23756
+ _remove.push(key);
23757
+ }
23758
+ });
23759
+
23760
+ values = lodash_remove(lodash_uniq(existing.concat(_add)), function (value) {
23761
+ return _remove.indexOf(value) < 0
23762
+ });
23763
+
23764
+ if (values.length) {
23765
+ attributes.set('class', values.join(' '));
23766
+ }
23767
+ };
23768
+
23769
+ // https://developer.mozilla.org/en-US/docs/Web/API/element
23770
+ var omit = [
23771
+ 'attributes',
23772
+ 'childElementCount',
23773
+ 'children',
23774
+ 'classList',
23775
+ 'clientHeight',
23776
+ 'clientLeft',
23777
+ 'clientTop',
23778
+ 'clientWidth',
23779
+ 'currentStyle',
23780
+ 'firstElementChild',
23781
+ 'innerHTML',
23782
+ 'lastElementChild',
23783
+ 'nextElementSibling',
23784
+ 'ongotpointercapture',
23785
+ 'onlostpointercapture',
23786
+ 'onwheel',
23787
+ 'outerHTML',
23788
+ 'previousElementSibling',
23789
+ 'runtimeStyle',
23790
+ 'scrollHeight',
23791
+ 'scrollLeft',
23792
+ 'scrollLeftMax',
23793
+ 'scrollTop',
23794
+ 'scrollTopMax',
23795
+ 'scrollWidth',
23796
+ 'tabStop',
23797
+ 'tagName'
23798
+ ];
23799
+
23800
+ // https://html.spec.whatwg.org/multipage/common-microsyntaxes.html#boolean-attributes
23801
+ var booleanAttributes = [
23802
+ 'disabled',
23803
+ 'visible',
23804
+ 'checked',
23805
+ 'readonly',
23806
+ 'required',
23807
+ 'allowfullscreen',
23808
+ 'autofocus',
23809
+ 'autoplay',
23810
+ 'compact',
23811
+ 'controls',
23812
+ 'default',
23813
+ 'formnovalidate',
23814
+ 'hidden',
23815
+ 'ismap',
23816
+ 'itemscope',
23817
+ 'loop',
23818
+ 'multiple',
23819
+ 'muted',
23820
+ 'noresize',
23821
+ 'noshade',
23822
+ 'novalidate',
23823
+ 'nowrap',
23824
+ 'open',
23825
+ 'reversed',
23826
+ 'seamless',
23827
+ 'selected',
23828
+ 'sortable',
23829
+ 'truespeed',
23830
+ 'typemustmatch'
23831
+ ];
23832
+
23833
+ // data.props
23834
+
23835
+ var props = function propsModule (vnode, attributes) {
23836
+ var props = vnode.data.props || {};
23837
+
23838
+ lodash_forown(props, function (value, key) {
23839
+ if (omit.indexOf(key) > -1) {
23840
+ return
23841
+ }
23842
+ if (key === 'htmlFor') {
23843
+ key = 'for';
23844
+ }
23845
+ if (key === 'className') {
23846
+ key = 'class';
23847
+ }
23848
+
23849
+ var lkey = key.toLowerCase();
23850
+ if (~booleanAttributes.indexOf(lkey)) {
23851
+ if (value) { // set attr only when truthy
23852
+ attributes.set(lkey, lkey);
23853
+ }
23854
+ } else {
23855
+ attributes.set(lkey, lodash_escape(value));
23856
+ }
23857
+ });
23858
+ };
23859
+
23860
+ // data.attrs
23861
+
23862
+ var attributes = function attrsModule (vnode, attributes) {
23863
+ var attrs = vnode.data.attrs || {};
23864
+
23865
+ lodash_forown(attrs, function (value, key) {
23866
+ attributes.set(key, lodash_escape(value));
23867
+ });
23868
+ };
23869
+
23870
+ /*
23871
+ object-assign
23872
+ (c) Sindre Sorhus
23873
+ @license MIT
23874
+ */
23875
+ /* eslint-disable no-unused-vars */
23876
+ var getOwnPropertySymbols = Object.getOwnPropertySymbols;
23877
+ var hasOwnProperty = Object.prototype.hasOwnProperty;
23878
+ var propIsEnumerable = Object.prototype.propertyIsEnumerable;
23879
+
23880
+ function toObject(val) {
23881
+ if (val === null || val === undefined) {
23882
+ throw new TypeError('Object.assign cannot be called with null or undefined');
23883
+ }
23884
+
23885
+ return Object(val);
23886
+ }
23887
+
23888
+ function shouldUseNative() {
23889
+ try {
23890
+ if (!Object.assign) {
23891
+ return false;
23892
+ }
23893
+
23894
+ // Detect buggy property enumeration order in older V8 versions.
23895
+
23896
+ // https://bugs.chromium.org/p/v8/issues/detail?id=4118
23897
+ var test1 = new String('abc'); // eslint-disable-line no-new-wrappers
23898
+ test1[5] = 'de';
23899
+ if (Object.getOwnPropertyNames(test1)[0] === '5') {
23900
+ return false;
23901
+ }
23902
+
23903
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
23904
+ var test2 = {};
23905
+ for (var i = 0; i < 10; i++) {
23906
+ test2['_' + String.fromCharCode(i)] = i;
23907
+ }
23908
+ var order2 = Object.getOwnPropertyNames(test2).map(function (n) {
23909
+ return test2[n];
23910
+ });
23911
+ if (order2.join('') !== '0123456789') {
23912
+ return false;
23913
+ }
23914
+
23915
+ // https://bugs.chromium.org/p/v8/issues/detail?id=3056
23916
+ var test3 = {};
23917
+ 'abcdefghijklmnopqrst'.split('').forEach(function (letter) {
23918
+ test3[letter] = letter;
23919
+ });
23920
+ if (Object.keys(Object.assign({}, test3)).join('') !==
23921
+ 'abcdefghijklmnopqrst') {
23922
+ return false;
23923
+ }
23924
+
23925
+ return true;
23926
+ } catch (err) {
23927
+ // We don't expect any of the above to throw, but better to be safe.
23928
+ return false;
23929
+ }
23930
+ }
23931
+
23932
+ var objectAssign = shouldUseNative() ? Object.assign : function (target, source) {
23933
+ var from;
23934
+ var to = toObject(target);
23935
+ var symbols;
23936
+
23937
+ for (var s = 1; s < arguments.length; s++) {
23938
+ from = Object(arguments[s]);
23939
+
23940
+ for (var key in from) {
23941
+ if (hasOwnProperty.call(from, key)) {
23942
+ to[key] = from[key];
23943
+ }
23944
+ }
23945
+
23946
+ if (getOwnPropertySymbols) {
23947
+ symbols = getOwnPropertySymbols(from);
23948
+ for (var i = 0; i < symbols.length; i++) {
23949
+ if (propIsEnumerable.call(from, symbols[i])) {
23950
+ to[symbols[i]] = from[symbols[i]];
23951
+ }
23952
+ }
23953
+ }
23954
+ }
23955
+
23956
+ return to;
23957
+ };
23958
+
23959
+ /**
23960
+ * lodash (Custom Build) <https://lodash.com/>
23961
+ * Build: `lodash modularize exports="npm" -o ./`
23962
+ * Copyright jQuery Foundation and other contributors <https://jquery.org/>
23963
+ * Released under MIT license <https://lodash.com/license>
23964
+ * Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
23965
+ * Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
23966
+ */
23967
+
23968
+ /** Used as references for various `Number` constants. */
23969
+ var INFINITY = 1 / 0;
23970
+
23971
+ /** `Object#toString` result references. */
23972
+ var symbolTag = '[object Symbol]';
23973
+
23974
+ /** Used to match words composed of alphanumeric characters. */
23975
+ var reAsciiWord = /[^\x00-\x2f\x3a-\x40\x5b-\x60\x7b-\x7f]+/g;
23976
+
23977
+ /** Used to match Latin Unicode letters (excluding mathematical operators). */
23978
+ var reLatin = /[\xc0-\xd6\xd8-\xf6\xf8-\xff\u0100-\u017f]/g;
23979
+
23980
+ /** Used to compose unicode character classes. */
23981
+ var rsAstralRange = '\\ud800-\\udfff',
23982
+ rsComboMarksRange = '\\u0300-\\u036f\\ufe20-\\ufe23',
23983
+ rsComboSymbolsRange = '\\u20d0-\\u20f0',
23984
+ rsDingbatRange = '\\u2700-\\u27bf',
23985
+ rsLowerRange = 'a-z\\xdf-\\xf6\\xf8-\\xff',
23986
+ rsMathOpRange = '\\xac\\xb1\\xd7\\xf7',
23987
+ rsNonCharRange = '\\x00-\\x2f\\x3a-\\x40\\x5b-\\x60\\x7b-\\xbf',
23988
+ rsPunctuationRange = '\\u2000-\\u206f',
23989
+ rsSpaceRange = ' \\t\\x0b\\f\\xa0\\ufeff\\n\\r\\u2028\\u2029\\u1680\\u180e\\u2000\\u2001\\u2002\\u2003\\u2004\\u2005\\u2006\\u2007\\u2008\\u2009\\u200a\\u202f\\u205f\\u3000',
23990
+ rsUpperRange = 'A-Z\\xc0-\\xd6\\xd8-\\xde',
23991
+ rsVarRange = '\\ufe0e\\ufe0f',
23992
+ rsBreakRange = rsMathOpRange + rsNonCharRange + rsPunctuationRange + rsSpaceRange;
23993
+
23994
+ /** Used to compose unicode capture groups. */
23995
+ var rsApos = "['\u2019]",
23996
+ rsBreak = '[' + rsBreakRange + ']',
23997
+ rsCombo = '[' + rsComboMarksRange + rsComboSymbolsRange + ']',
23998
+ rsDigits = '\\d+',
23999
+ rsDingbat = '[' + rsDingbatRange + ']',
24000
+ rsLower = '[' + rsLowerRange + ']',
24001
+ rsMisc = '[^' + rsAstralRange + rsBreakRange + rsDigits + rsDingbatRange + rsLowerRange + rsUpperRange + ']',
24002
+ rsFitz = '\\ud83c[\\udffb-\\udfff]',
24003
+ rsModifier = '(?:' + rsCombo + '|' + rsFitz + ')',
24004
+ rsNonAstral = '[^' + rsAstralRange + ']',
24005
+ rsRegional = '(?:\\ud83c[\\udde6-\\uddff]){2}',
24006
+ rsSurrPair = '[\\ud800-\\udbff][\\udc00-\\udfff]',
24007
+ rsUpper = '[' + rsUpperRange + ']',
24008
+ rsZWJ = '\\u200d';
24009
+
24010
+ /** Used to compose unicode regexes. */
24011
+ var rsLowerMisc = '(?:' + rsLower + '|' + rsMisc + ')',
24012
+ rsUpperMisc = '(?:' + rsUpper + '|' + rsMisc + ')',
24013
+ rsOptLowerContr = '(?:' + rsApos + '(?:d|ll|m|re|s|t|ve))?',
24014
+ rsOptUpperContr = '(?:' + rsApos + '(?:D|LL|M|RE|S|T|VE))?',
24015
+ reOptMod = rsModifier + '?',
24016
+ rsOptVar = '[' + rsVarRange + ']?',
24017
+ rsOptJoin = '(?:' + rsZWJ + '(?:' + [rsNonAstral, rsRegional, rsSurrPair].join('|') + ')' + rsOptVar + reOptMod + ')*',
24018
+ rsSeq = rsOptVar + reOptMod + rsOptJoin,
24019
+ rsEmoji = '(?:' + [rsDingbat, rsRegional, rsSurrPair].join('|') + ')' + rsSeq;
24020
+
24021
+ /** Used to match apostrophes. */
24022
+ var reApos = RegExp(rsApos, 'g');
24023
+
24024
+ /**
24025
+ * Used to match [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks) and
24026
+ * [combining diacritical marks for symbols](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks_for_Symbols).
24027
+ */
24028
+ var reComboMark = RegExp(rsCombo, 'g');
24029
+
24030
+ /** Used to match complex or compound words. */
24031
+ var reUnicodeWord = RegExp([
24032
+ rsUpper + '?' + rsLower + '+' + rsOptLowerContr + '(?=' + [rsBreak, rsUpper, '$'].join('|') + ')',
24033
+ rsUpperMisc + '+' + rsOptUpperContr + '(?=' + [rsBreak, rsUpper + rsLowerMisc, '$'].join('|') + ')',
24034
+ rsUpper + '?' + rsLowerMisc + '+' + rsOptLowerContr,
24035
+ rsUpper + '+' + rsOptUpperContr,
24036
+ rsDigits,
24037
+ rsEmoji
24038
+ ].join('|'), 'g');
24039
+
24040
+ /** Used to detect strings that need a more robust regexp to match words. */
24041
+ var reHasUnicodeWord = /[a-z][A-Z]|[A-Z]{2,}[a-z]|[0-9][a-zA-Z]|[a-zA-Z][0-9]|[^a-zA-Z0-9 ]/;
24042
+
24043
+ /** Used to map Latin Unicode letters to basic Latin letters. */
24044
+ var deburredLetters = {
24045
+ // Latin-1 Supplement block.
24046
+ '\xc0': 'A', '\xc1': 'A', '\xc2': 'A', '\xc3': 'A', '\xc4': 'A', '\xc5': 'A',
24047
+ '\xe0': 'a', '\xe1': 'a', '\xe2': 'a', '\xe3': 'a', '\xe4': 'a', '\xe5': 'a',
24048
+ '\xc7': 'C', '\xe7': 'c',
24049
+ '\xd0': 'D', '\xf0': 'd',
24050
+ '\xc8': 'E', '\xc9': 'E', '\xca': 'E', '\xcb': 'E',
24051
+ '\xe8': 'e', '\xe9': 'e', '\xea': 'e', '\xeb': 'e',
24052
+ '\xcc': 'I', '\xcd': 'I', '\xce': 'I', '\xcf': 'I',
24053
+ '\xec': 'i', '\xed': 'i', '\xee': 'i', '\xef': 'i',
24054
+ '\xd1': 'N', '\xf1': 'n',
24055
+ '\xd2': 'O', '\xd3': 'O', '\xd4': 'O', '\xd5': 'O', '\xd6': 'O', '\xd8': 'O',
24056
+ '\xf2': 'o', '\xf3': 'o', '\xf4': 'o', '\xf5': 'o', '\xf6': 'o', '\xf8': 'o',
24057
+ '\xd9': 'U', '\xda': 'U', '\xdb': 'U', '\xdc': 'U',
24058
+ '\xf9': 'u', '\xfa': 'u', '\xfb': 'u', '\xfc': 'u',
24059
+ '\xdd': 'Y', '\xfd': 'y', '\xff': 'y',
24060
+ '\xc6': 'Ae', '\xe6': 'ae',
24061
+ '\xde': 'Th', '\xfe': 'th',
24062
+ '\xdf': 'ss',
24063
+ // Latin Extended-A block.
24064
+ '\u0100': 'A', '\u0102': 'A', '\u0104': 'A',
24065
+ '\u0101': 'a', '\u0103': 'a', '\u0105': 'a',
24066
+ '\u0106': 'C', '\u0108': 'C', '\u010a': 'C', '\u010c': 'C',
24067
+ '\u0107': 'c', '\u0109': 'c', '\u010b': 'c', '\u010d': 'c',
24068
+ '\u010e': 'D', '\u0110': 'D', '\u010f': 'd', '\u0111': 'd',
24069
+ '\u0112': 'E', '\u0114': 'E', '\u0116': 'E', '\u0118': 'E', '\u011a': 'E',
24070
+ '\u0113': 'e', '\u0115': 'e', '\u0117': 'e', '\u0119': 'e', '\u011b': 'e',
24071
+ '\u011c': 'G', '\u011e': 'G', '\u0120': 'G', '\u0122': 'G',
24072
+ '\u011d': 'g', '\u011f': 'g', '\u0121': 'g', '\u0123': 'g',
24073
+ '\u0124': 'H', '\u0126': 'H', '\u0125': 'h', '\u0127': 'h',
24074
+ '\u0128': 'I', '\u012a': 'I', '\u012c': 'I', '\u012e': 'I', '\u0130': 'I',
24075
+ '\u0129': 'i', '\u012b': 'i', '\u012d': 'i', '\u012f': 'i', '\u0131': 'i',
24076
+ '\u0134': 'J', '\u0135': 'j',
24077
+ '\u0136': 'K', '\u0137': 'k', '\u0138': 'k',
24078
+ '\u0139': 'L', '\u013b': 'L', '\u013d': 'L', '\u013f': 'L', '\u0141': 'L',
24079
+ '\u013a': 'l', '\u013c': 'l', '\u013e': 'l', '\u0140': 'l', '\u0142': 'l',
24080
+ '\u0143': 'N', '\u0145': 'N', '\u0147': 'N', '\u014a': 'N',
24081
+ '\u0144': 'n', '\u0146': 'n', '\u0148': 'n', '\u014b': 'n',
24082
+ '\u014c': 'O', '\u014e': 'O', '\u0150': 'O',
24083
+ '\u014d': 'o', '\u014f': 'o', '\u0151': 'o',
24084
+ '\u0154': 'R', '\u0156': 'R', '\u0158': 'R',
24085
+ '\u0155': 'r', '\u0157': 'r', '\u0159': 'r',
24086
+ '\u015a': 'S', '\u015c': 'S', '\u015e': 'S', '\u0160': 'S',
24087
+ '\u015b': 's', '\u015d': 's', '\u015f': 's', '\u0161': 's',
24088
+ '\u0162': 'T', '\u0164': 'T', '\u0166': 'T',
24089
+ '\u0163': 't', '\u0165': 't', '\u0167': 't',
24090
+ '\u0168': 'U', '\u016a': 'U', '\u016c': 'U', '\u016e': 'U', '\u0170': 'U', '\u0172': 'U',
24091
+ '\u0169': 'u', '\u016b': 'u', '\u016d': 'u', '\u016f': 'u', '\u0171': 'u', '\u0173': 'u',
24092
+ '\u0174': 'W', '\u0175': 'w',
24093
+ '\u0176': 'Y', '\u0177': 'y', '\u0178': 'Y',
24094
+ '\u0179': 'Z', '\u017b': 'Z', '\u017d': 'Z',
24095
+ '\u017a': 'z', '\u017c': 'z', '\u017e': 'z',
24096
+ '\u0132': 'IJ', '\u0133': 'ij',
24097
+ '\u0152': 'Oe', '\u0153': 'oe',
24098
+ '\u0149': "'n", '\u017f': 'ss'
24099
+ };
24100
+
24101
+ /** Detect free variable `global` from Node.js. */
24102
+ var freeGlobal = typeof commonjsGlobal == 'object' && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
24103
+
24104
+ /** Detect free variable `self`. */
24105
+ var freeSelf = typeof self == 'object' && self && self.Object === Object && self;
24106
+
24107
+ /** Used as a reference to the global object. */
24108
+ var root = freeGlobal || freeSelf || Function('return this')();
24109
+
24110
+ /**
24111
+ * A specialized version of `_.reduce` for arrays without support for
24112
+ * iteratee shorthands.
24113
+ *
24114
+ * @private
24115
+ * @param {Array} [array] The array to iterate over.
24116
+ * @param {Function} iteratee The function invoked per iteration.
24117
+ * @param {*} [accumulator] The initial value.
24118
+ * @param {boolean} [initAccum] Specify using the first element of `array` as
24119
+ * the initial value.
24120
+ * @returns {*} Returns the accumulated value.
24121
+ */
24122
+ function arrayReduce(array, iteratee, accumulator, initAccum) {
24123
+ var index = -1,
24124
+ length = array ? array.length : 0;
24125
+
24126
+ if (initAccum && length) {
24127
+ accumulator = array[++index];
24128
+ }
24129
+ while (++index < length) {
24130
+ accumulator = iteratee(accumulator, array[index], index, array);
24131
+ }
24132
+ return accumulator;
24133
+ }
24134
+
24135
+ /**
24136
+ * Splits an ASCII `string` into an array of its words.
24137
+ *
24138
+ * @private
24139
+ * @param {string} The string to inspect.
24140
+ * @returns {Array} Returns the words of `string`.
24141
+ */
24142
+ function asciiWords(string) {
24143
+ return string.match(reAsciiWord) || [];
24144
+ }
24145
+
24146
+ /**
24147
+ * The base implementation of `_.propertyOf` without support for deep paths.
24148
+ *
24149
+ * @private
24150
+ * @param {Object} object The object to query.
24151
+ * @returns {Function} Returns the new accessor function.
24152
+ */
24153
+ function basePropertyOf(object) {
24154
+ return function(key) {
24155
+ return object == null ? undefined : object[key];
24156
+ };
24157
+ }
24158
+
24159
+ /**
24160
+ * Used by `_.deburr` to convert Latin-1 Supplement and Latin Extended-A
24161
+ * letters to basic Latin letters.
24162
+ *
24163
+ * @private
24164
+ * @param {string} letter The matched letter to deburr.
24165
+ * @returns {string} Returns the deburred letter.
24166
+ */
24167
+ var deburrLetter = basePropertyOf(deburredLetters);
24168
+
24169
+ /**
24170
+ * Checks if `string` contains a word composed of Unicode symbols.
24171
+ *
24172
+ * @private
24173
+ * @param {string} string The string to inspect.
24174
+ * @returns {boolean} Returns `true` if a word is found, else `false`.
24175
+ */
24176
+ function hasUnicodeWord(string) {
24177
+ return reHasUnicodeWord.test(string);
24178
+ }
24179
+
24180
+ /**
24181
+ * Splits a Unicode `string` into an array of its words.
24182
+ *
24183
+ * @private
24184
+ * @param {string} The string to inspect.
24185
+ * @returns {Array} Returns the words of `string`.
24186
+ */
24187
+ function unicodeWords(string) {
24188
+ return string.match(reUnicodeWord) || [];
24189
+ }
24190
+
24191
+ /** Used for built-in method references. */
24192
+ var objectProto = Object.prototype;
24193
+
24194
+ /**
24195
+ * Used to resolve the
24196
+ * [`toStringTag`](http://ecma-international.org/ecma-262/7.0/#sec-object.prototype.tostring)
24197
+ * of values.
24198
+ */
24199
+ var objectToString = objectProto.toString;
24200
+
24201
+ /** Built-in value references. */
24202
+ var Symbol$1 = root.Symbol;
24203
+
24204
+ /** Used to convert symbols to primitives and strings. */
24205
+ var symbolProto = Symbol$1 ? Symbol$1.prototype : undefined,
24206
+ symbolToString = symbolProto ? symbolProto.toString : undefined;
24207
+
24208
+ /**
24209
+ * The base implementation of `_.toString` which doesn't convert nullish
24210
+ * values to empty strings.
24211
+ *
24212
+ * @private
24213
+ * @param {*} value The value to process.
24214
+ * @returns {string} Returns the string.
24215
+ */
24216
+ function baseToString(value) {
24217
+ // Exit early for strings to avoid a performance hit in some environments.
24218
+ if (typeof value == 'string') {
24219
+ return value;
24220
+ }
24221
+ if (isSymbol(value)) {
24222
+ return symbolToString ? symbolToString.call(value) : '';
24223
+ }
24224
+ var result = (value + '');
24225
+ return (result == '0' && (1 / value) == -INFINITY) ? '-0' : result;
24226
+ }
24227
+
24228
+ /**
24229
+ * Creates a function like `_.camelCase`.
24230
+ *
24231
+ * @private
24232
+ * @param {Function} callback The function to combine each word.
24233
+ * @returns {Function} Returns the new compounder function.
24234
+ */
24235
+ function createCompounder(callback) {
24236
+ return function(string) {
24237
+ return arrayReduce(words(deburr(string).replace(reApos, '')), callback, '');
24238
+ };
24239
+ }
24240
+
24241
+ /**
24242
+ * Checks if `value` is object-like. A value is object-like if it's not `null`
24243
+ * and has a `typeof` result of "object".
24244
+ *
24245
+ * @static
24246
+ * @memberOf _
24247
+ * @since 4.0.0
24248
+ * @category Lang
24249
+ * @param {*} value The value to check.
24250
+ * @returns {boolean} Returns `true` if `value` is object-like, else `false`.
24251
+ * @example
24252
+ *
24253
+ * _.isObjectLike({});
24254
+ * // => true
24255
+ *
24256
+ * _.isObjectLike([1, 2, 3]);
24257
+ * // => true
24258
+ *
24259
+ * _.isObjectLike(_.noop);
24260
+ * // => false
24261
+ *
24262
+ * _.isObjectLike(null);
24263
+ * // => false
24264
+ */
24265
+ function isObjectLike(value) {
24266
+ return !!value && typeof value == 'object';
24267
+ }
24268
+
24269
+ /**
24270
+ * Checks if `value` is classified as a `Symbol` primitive or object.
24271
+ *
24272
+ * @static
24273
+ * @memberOf _
24274
+ * @since 4.0.0
24275
+ * @category Lang
24276
+ * @param {*} value The value to check.
24277
+ * @returns {boolean} Returns `true` if `value` is a symbol, else `false`.
24278
+ * @example
24279
+ *
24280
+ * _.isSymbol(Symbol.iterator);
24281
+ * // => true
24282
+ *
24283
+ * _.isSymbol('abc');
24284
+ * // => false
24285
+ */
24286
+ function isSymbol(value) {
24287
+ return typeof value == 'symbol' ||
24288
+ (isObjectLike(value) && objectToString.call(value) == symbolTag);
24289
+ }
24290
+
24291
+ /**
24292
+ * Converts `value` to a string. An empty string is returned for `null`
24293
+ * and `undefined` values. The sign of `-0` is preserved.
24294
+ *
24295
+ * @static
24296
+ * @memberOf _
24297
+ * @since 4.0.0
24298
+ * @category Lang
24299
+ * @param {*} value The value to process.
24300
+ * @returns {string} Returns the string.
24301
+ * @example
24302
+ *
24303
+ * _.toString(null);
24304
+ * // => ''
24305
+ *
24306
+ * _.toString(-0);
24307
+ * // => '-0'
24308
+ *
24309
+ * _.toString([1, 2, 3]);
24310
+ * // => '1,2,3'
24311
+ */
24312
+ function toString(value) {
24313
+ return value == null ? '' : baseToString(value);
24314
+ }
24315
+
24316
+ /**
24317
+ * Deburrs `string` by converting
24318
+ * [Latin-1 Supplement](https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)#Character_table)
24319
+ * and [Latin Extended-A](https://en.wikipedia.org/wiki/Latin_Extended-A)
24320
+ * letters to basic Latin letters and removing
24321
+ * [combining diacritical marks](https://en.wikipedia.org/wiki/Combining_Diacritical_Marks).
24322
+ *
24323
+ * @static
24324
+ * @memberOf _
24325
+ * @since 3.0.0
24326
+ * @category String
24327
+ * @param {string} [string=''] The string to deburr.
24328
+ * @returns {string} Returns the deburred string.
24329
+ * @example
24330
+ *
24331
+ * _.deburr('déjà vu');
24332
+ * // => 'deja vu'
24333
+ */
24334
+ function deburr(string) {
24335
+ string = toString(string);
24336
+ return string && string.replace(reLatin, deburrLetter).replace(reComboMark, '');
24337
+ }
24338
+
24339
+ /**
24340
+ * Converts `string` to
24341
+ * [kebab case](https://en.wikipedia.org/wiki/Letter_case#Special_case_styles).
24342
+ *
24343
+ * @static
24344
+ * @memberOf _
24345
+ * @since 3.0.0
24346
+ * @category String
24347
+ * @param {string} [string=''] The string to convert.
24348
+ * @returns {string} Returns the kebab cased string.
24349
+ * @example
24350
+ *
24351
+ * _.kebabCase('Foo Bar');
24352
+ * // => 'foo-bar'
24353
+ *
24354
+ * _.kebabCase('fooBar');
24355
+ * // => 'foo-bar'
24356
+ *
24357
+ * _.kebabCase('__FOO_BAR__');
24358
+ * // => 'foo-bar'
24359
+ */
24360
+ var kebabCase = createCompounder(function(result, word, index) {
24361
+ return result + (index ? '-' : '') + word.toLowerCase();
24362
+ });
24363
+
24364
+ /**
24365
+ * Splits `string` into an array of its words.
24366
+ *
24367
+ * @static
24368
+ * @memberOf _
24369
+ * @since 3.0.0
24370
+ * @category String
24371
+ * @param {string} [string=''] The string to inspect.
24372
+ * @param {RegExp|string} [pattern] The pattern to match words.
24373
+ * @param- {Object} [guard] Enables use as an iteratee for methods like `_.map`.
24374
+ * @returns {Array} Returns the words of `string`.
24375
+ * @example
24376
+ *
24377
+ * _.words('fred, barney, & pebbles');
24378
+ * // => ['fred', 'barney', 'pebbles']
24379
+ *
24380
+ * _.words('fred, barney, & pebbles', /[^, ]+/g);
24381
+ * // => ['fred', 'barney', '&', 'pebbles']
24382
+ */
24383
+ function words(string, pattern, guard) {
24384
+ string = toString(string);
24385
+ pattern = guard ? undefined : pattern;
24386
+
24387
+ if (pattern === undefined) {
24388
+ return hasUnicodeWord(string) ? unicodeWords(string) : asciiWords(string);
24389
+ }
24390
+ return string.match(pattern) || [];
24391
+ }
24392
+
24393
+ var lodash_kebabcase = kebabCase;
24394
+
24395
+ // data.style
24396
+
24397
+ var style = function styleModule (vnode, attributes) {
24398
+ var values = [];
24399
+ var style = vnode.data.style || {};
24400
+
24401
+ // merge in `delayed` properties
24402
+ if (style.delayed) {
24403
+ objectAssign(style, style.delayed);
24404
+ }
24405
+
24406
+ lodash_forown(style, function (value, key) {
24407
+ // omit hook objects
24408
+ if (typeof value === 'string' || typeof value === 'number') {
24409
+ var kebabKey = lodash_kebabcase(key);
24410
+ values.push((key.match(/^--.*/) ? '--' + kebabKey : kebabKey) + ': ' + lodash_escape(value));
24411
+ }
24412
+ });
24413
+
24414
+ if (values.length) {
24415
+ attributes.set('style', values.join('; '));
24416
+ }
24417
+ };
24418
+
24419
+ // data.dataset
24420
+
24421
+ var dataset = function datasetModule (vnode, attributes) {
24422
+ var dataset = vnode.data.dataset || {};
24423
+
24424
+ lodash_forown(dataset, function (value, key) {
24425
+ attributes.set(`data-${key}`, lodash_escape(value));
24426
+ });
24427
+ };
19577
24428
 
19578
- module.exports = {
19579
- class: require('./class'),
19580
- props: require('./props'),
19581
- attributes: require('./attributes'),
19582
- style: require('./style'),
19583
- dataset: require('./dataset')
24429
+ var modules = {
24430
+ class: _class,
24431
+ props: props,
24432
+ attributes: attributes,
24433
+ style: style,
24434
+ dataset: dataset
19584
24435
  };
19585
24436
 
19586
24437
  /**
@@ -19748,10 +24599,10 @@ class DocumentPrintOffscreenBase {
19748
24599
  children: [...pageSvgVNodes]
19749
24600
  });
19750
24601
  const patch = init([
19751
- undefined,
19752
- undefined,
19753
- undefined,
19754
- undefined
24602
+ modules.class,
24603
+ modules.props,
24604
+ modules.attributes,
24605
+ modules.style
19755
24606
  ]);
19756
24607
  new DOMParser();
19757
24608
  const domNodes = pageSvgVNodes.map(item => patch(item)); //.map(item => docParser.parseFromString(item, 'text/html').firstChild) as Array<HTMLElement>;
@@ -22075,5 +26926,5 @@ function removeDuplicatesEvent(events) {
22075
26926
  return arr;
22076
26927
  }
22077
26928
 
22078
- export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommentsUtil, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, DOMEventSource, DOMSubscription, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentImagesBaseLoader, DocumentImagesLoader, DocumentInput, DocumentPaint, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementPaint, ElementReader, ElementSerialize, ElementUtil, EventMap, EventSourceCore$1 as EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag$1 as ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RunElementFactory, SelectionOverlays, SelectionRange, SelectionState, Subject$1 as Subject, SubjectSubscription$1 as SubjectSubscription, Subscription$1 as Subscription, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, clearChildrenRenderCache, createPrintTemplate, defaultParaHanging, deleteCurrentParagraph, documentPrint, drawDecorator, elementTypeEventHandler, exportDecoratorHTML, falseChar, fontMapFunc, fromEvent, getCalleeName, getFocusTextSegment, invokeTypeHandler, isDate, objectToString, onTableContextmenu, onceTask, parser, printNodes, reactiveMap, runTextLineRender, setChildrenModifyFlag, setDataElementProps, setNotifyChangedCallback, targetMaps, textLineRenderMode, toRawType, toTypeString, trueChar, validateDataEle, validateDataEleRenderObj, validateInlineInputRenderObj, watchChanged };
26929
+ export { BlockContainerElement, BlockContainerRenderObject, BlockContentElement, BlockContentRenderObject, BlockLineRectRenderObject, BodyPartProps, BooleanEnum, BorderProps, BranchElement, BranchRenderObject, BreakElement, BreakFactory, BreakRenderObject, CheckBoxElement, CheckBoxFactory, CheckBoxProps, CheckBoxRenderObject, ColumnPatchUtil, CommContentBaseElement, CommContentBaseRenderObject, CommContentElement, CommContentProps, CommContentRenderObject, CommProps, CommentContentFactory, CommentElement, CommentFactory, CommentRenderObject, CommentsFactory, CommentsUtil, CommonUtil, CommsContainerElement, CommsContainerRenderObject, ContentMenuItem, ContextMenuElementEvent, DOMEventSource, DOMSubscription, DataDecorateElement, DataDecorateProps, DataDecorateRenderObject, DataEleBaseProps, DataEleBaseTextProps, DataEleCheckProps, DataEleDateProps, DataEleImageProps, DataEleListProps, DataEleMHProps, DataElementBarcode, DataElementBarcodeFactory, DataElementBarcodeProps, DataElementBarcodeRenderObject, DataElementBaseFactory, DataElementCheck, DataElementCheckFactory, DataElementCheckRenderObject, DataElementDate, DataElementDateFactory, DataElementDateRenderObject, DataElementGroupElement, DataElementGroupFactory, DataElementGroupProps, DataElementGroupRenderObject, DataElementImage, DataElementImgFactory, DataElementInlineGroup, DataElementLeaf, DataElementList, DataElementListFactory, DataElementListRenderObject, DataElementMH, DataElementMHFactory, DataElementRenderObject, DataElementText, DataElementTextFactory, DataElementTextRenderObject, DataImageRenderObject, DataRenderMH, DocEditor, DocMode, DocumentBodyElement, DocumentBodyFactory, DocumentBodyPartElement, DocumentBodyPartFactory, DocumentBodyPartRenderObject, DocumentBodyRenderObject, DocumentChange, DocumentCombine, DocumentComment, DocumentContainerRender, DocumentContext, DocumentCursor, DocumentElement, DocumentEvalFunc, DocumentEvent, DocumentFactory, DocumentFooterElement, DocumentFooterFactory, DocumentFooterRenderObject, DocumentHeaderElement, DocumentHeaderFactory, DocumentHeaderRenderObject, DocumentImagesBaseLoader, DocumentImagesLoader, DocumentInput, DocumentPaint, DocumentPrintOffscreen, DocumentPrintOffscreenBase, DocumentProps, DocumentRenderObject, DocumentSelection, DocumentTemplate, DropElementEvent, EditMode, EditorContext, Element, ElementEvent, ElementFactory, ElementPaint, ElementReader, ElementSerialize, ElementUtil, EventMap, EventSourceCore$1 as EventSourceCore, FillNullSpaceElement, FillNullSpaceRenderObject, GetTrackTipsEvent, GotCursorEvent, IDispose, INotifyPropertyChanged, InlineBlockContainer, InlineGroupElement, InlineGroupInputElement, InlineGroupRenderObject, InlineMuiltBlockLineRenderObject, InputElementEvent, IsInSideDataElement, IsInSideInlineGroupInputElement, KeyboradElementEvent, LeafElement, LeafRenderObject, LostCursorEvent, MarginProps, ModifyFlag$1 as ModifyFlag, MouseElementEvent, MousedownElementEvent, MuiltBlockLineRenderObject, OnceSubject, PSymbolElement, PSymbolRenderObject, PaddingProps, PageOptions, PaintContent, ParagraphElement, ParagraphFactory, ParagraphLineRectRenderObject, ParagraphNumberType, ParagraphProps, ParagraphRenderObject, PictureElement, PictureFactory, PictureProps, PictureRenderObject, RadioBoxElement, RadioBoxFactory, RadioBoxProps, RadioBoxRenderObject, RangeUtil, Rect, RenderContext, RenderObject, RenderObjectType, ResizeLeafRenderObject, RunElementFactory, SelectionOverlays, SelectionRange, SelectionState, Subject$1 as Subject, SubjectSubscription$1 as SubjectSubscription, Subscription$1 as Subscription, TableCellElement, TableCellFactory, TableCellProps, TableCellRenderObject, TableElement, TableFactory, TableProps, TableRenderObject, TableRowElement, TableRowFactory, TableRowProps, TableRowRenderObject, TableSplitCell, TableUtil, TextGroupElement, TextGroupFactory, TextGroupRenderObject, TextProps, TrackRunElement, TrackRunProps, TrackRunRenderObject, TrackRunTypeEnum, ValidateCondition, ValidateElement, ValidateProps, ValidateRenderObject, ViewOptions, clearChildrenRenderCache, createPrintTemplate, defaultParaHanging, deleteCurrentParagraph, documentPrint, drawDecorator, elementTypeEventHandler, exportDecoratorHTML, falseChar, fontMapFunc, fromEvent, getCalleeName, getFocusTextSegment, invokeTypeHandler, isDate, objectToString$4 as objectToString, onTableContextmenu, onceTask, parser, printNodes, reactiveMap, runTextLineRender, setChildrenModifyFlag, setDataElementProps, setNotifyChangedCallback, targetMaps, textLineRenderMode, toRawType, toTypeString, trueChar, validateDataEle, validateDataEleRenderObj, validateInlineInputRenderObj, watchChanged };
22079
26930
  //# sourceMappingURL=index.js.map