diff --git a/package.json b/package.json index b353ff40b..272de73c4 100644 --- a/package.json +++ b/package.json @@ -74,14 +74,15 @@ "@babel/core": "^7.7.2", "@babel/plugin-external-helpers": "^7.2.0", "@babel/plugin-proposal-class-properties": "^7.7.0", + "@babel/plugin-transform-flow-comments": "^7.12.13", "@babel/plugin-transform-modules-commonjs": "^7.7.0", "@babel/plugin-transform-runtime": "^7.6.2", - "@babel/plugin-transform-flow-comments": "^7.12.13", "@babel/polyfill": "^7.7.0", "@babel/preset-env": "^7.7.1", "@babel/preset-flow": "^7.0.0", "@babel/preset-react": "^7.7.0", "@babel/preset-stage-2": "^7.0.0", + "@wojtekmaj/enzyme-adapter-react-17": "^0.6.1", "autoprefixer": "^9.7.1", "babel-eslint": "^10.0.3", "babel-jest": "^24.9.0", @@ -92,6 +93,7 @@ "codemirror": "^5.49.2", "cross-env": "^6.0.3", "css-loader": "^3.2.0", + "enzyme": "^3.11.0", "eslint": "^6.6.0", "eslint-config-fbjs": "^3.1.1", "eslint-config-prettier": "^6.5.0", diff --git a/source/WindowScroller/WindowScroller.jest.js b/source/WindowScroller/WindowScroller.jest.js index e3c54cf93..013206f81 100644 --- a/source/WindowScroller/WindowScroller.jest.js +++ b/source/WindowScroller/WindowScroller.jest.js @@ -1,3 +1,4 @@ +import {mount} from 'enzyme'; import * as React from 'react'; import {findDOMNode} from 'react-dom'; import {render} from '../TestUtils'; @@ -473,4 +474,140 @@ describe('WindowScroller', () => { ); }); }); + + describe('when scrollElement prop changes', () => { + let scrollElementDiv; + let addEventListener; + let removeEventListener; + + const generateWindowScrollerWrapper = scrollElement => { + return mount( + + {params =>
 
} +
, + ); + }; + + beforeEach(() => { + scrollElementDiv = document.createElement('div'); + + // Spy on the add/remove listener on this element so we can determine how and when it is used + addEventListener = jest.spyOn(scrollElementDiv, 'addEventListener'); + removeEventListener = jest.spyOn(scrollElementDiv, 'removeEventListener'); + + // JSDom doesn't implement a working getBoundingClientRect() + // But WindowScroller requires it + mockGetBoundingClientRectForHeader({ + documentOffset: 0, + height: 0, + width: 0, + }); + }); + + it('should re-mount new scroll handlers if the scrollElement changes (single WindowScroller)', async () => { + const windowScroller = generateWindowScrollerWrapper(scrollElementDiv); + + // detectElementResize && unregisterScrollListener + expect(addEventListener).toHaveBeenCalledTimes(2); + + windowScroller.setProps({scrollElement: undefined}); // Change to window + windowScroller.update(); + + // detectElementResize && unregisterScrollListener + expect(removeEventListener).toHaveBeenCalledTimes(2); + + simulateWindowScroll({scrollX: 0, scrollY: 5000}); + + // Allow scrolling timeout to complete so that the component computes state + await new Promise(resolve => setTimeout(resolve, 150)); + + expect(windowScroller.state('scrollTop')).toEqual(5000); + + windowScroller.unmount(); + }); + + it('should do nothing if you change a different prop', () => { + const windowScroller = generateWindowScrollerWrapper(scrollElementDiv); + + // detectElementResize && unregisterScrollListener + expect(addEventListener).toHaveBeenCalledTimes(2); + + windowScroller.setProps({onScroll: jest.fn()}); // Change random prop + windowScroller.update(); + + // detectElementResize && unregisterScrollListener + expect(removeEventListener).toHaveBeenCalledTimes(0); + + windowScroller.unmount(); + }); + + it('should retain existing handlers if they are still used (multiple WindowScrollers on different elements)', async () => { + const windowScrollerOnWindow = generateWindowScrollerWrapper(window); + + const windowScrollerThatChanges = generateWindowScrollerWrapper( + scrollElementDiv, + ); + const windowScrollerOnDivElement = generateWindowScrollerWrapper( + scrollElementDiv, + ); + + // detectElementResize && unregisterScrollListener + expect(addEventListener).toHaveBeenCalledTimes(2); + + // Change from div to window + windowScrollerThatChanges.setProps({ + scrollElement: undefined, + }); + + windowScrollerThatChanges.update(); + windowScrollerOnDivElement.update(); + + // No unmounting because we still have WindowScrollers attached to the div + expect(removeEventListener).toHaveBeenCalledTimes(0); + + simulateWindowScroll({scrollX: 0, scrollY: 5000}); + + // Allow scrolling timeout to complete so that the component computes state + await new Promise(resolve => setTimeout(resolve, 150)); + + expect(windowScrollerOnWindow.state('scrollTop')).toEqual(5000); + expect(windowScrollerThatChanges.state('scrollTop')).toEqual(5000); + expect(windowScrollerOnDivElement.state('scrollTop')).toEqual(0); + + windowScrollerOnWindow.unmount(); + windowScrollerThatChanges.unmount(); + windowScrollerOnDivElement.unmount(); + }); + + it('should remove old scroll handlers if the scrollElement changes (multiple WindowScrollers)', async () => { + const windowScroller1 = generateWindowScrollerWrapper(scrollElementDiv); + const windowScroller2 = generateWindowScrollerWrapper(scrollElementDiv); + const windowScroller3 = generateWindowScrollerWrapper(scrollElementDiv); + + // detectElementResize && unregisterScrollListener added to divElement + expect(addEventListener).toHaveBeenCalledTimes(2); + + windowScroller3.setProps({scrollElement: undefined}); + windowScroller2.setProps({scrollElement: undefined}); + windowScroller1.setProps({scrollElement: undefined}); + + windowScroller1.update(); + windowScroller2.update(); + windowScroller3.update(); + + // detectElementResize && unregisterScrollListener should be unmounted from divElement + expect(removeEventListener).toHaveBeenCalledTimes(2); + + simulateWindowScroll({scrollX: 0, scrollY: 5000}); + + // Allow scrolling timeout to complete so that the component computes state + await new Promise(resolve => setTimeout(resolve, 150)); + + expect(windowScroller1.state('scrollTop')).toEqual(5000); + + windowScroller1.unmount(); + windowScroller2.unmount(); + windowScroller3.unmount(); + }); + }); }); diff --git a/source/WindowScroller/utils/onScroll.js b/source/WindowScroller/utils/onScroll.js index 503c098f2..5a49d80fa 100644 --- a/source/WindowScroller/utils/onScroll.js +++ b/source/WindowScroller/utils/onScroll.js @@ -7,7 +7,13 @@ import { } from '../../utils/requestAnimationTimeout'; import type WindowScroller from '../WindowScroller.js'; -let mountedInstances = []; +// Checking a component's props is unreliable. Instead we store the element used at the time +type MountedInstancesReference = { + component: WindowScroller, + element: Element, +}; + +let mountedInstances: MountedInstancesReference[] = []; let originalBodyPointerEvents = null; let disablePointerEventsTimeoutId = null; @@ -25,7 +31,7 @@ function enablePointerEventsIfDisabled() { function enablePointerEventsAfterDelayCallback() { enablePointerEventsIfDisabled(); - mountedInstances.forEach(instance => instance.__resetIsScrolling()); + mountedInstances.forEach(mi => mi.component.__resetIsScrolling()); } function enablePointerEventsAfterDelay() { @@ -34,10 +40,10 @@ function enablePointerEventsAfterDelay() { } var maximumTimeout = 0; - mountedInstances.forEach(instance => { + mountedInstances.forEach(mi => { maximumTimeout = Math.max( maximumTimeout, - instance.props.scrollingResetTimeInterval, + mi.component.props.scrollingResetTimeInterval, ); }); @@ -58,9 +64,9 @@ function onScrollWindow(event: Event) { document.body.style.pointerEvents = 'none'; } enablePointerEventsAfterDelay(); - mountedInstances.forEach(instance => { - if (instance.props.scrollElement === event.currentTarget) { - instance.__handleWindowScrollEvent(); + mountedInstances.forEach(mi => { + if (mi.component.props.scrollElement === event.currentTarget) { + mi.component.__handleWindowScrollEvent(); } }); } @@ -69,22 +75,24 @@ export function registerScrollListener( component: WindowScroller, element: Element, ) { - if ( - !mountedInstances.some(instance => instance.props.scrollElement === element) - ) { + if (!mountedInstances.some(mi => mi.element === element)) { element.addEventListener('scroll', onScrollWindow); } - mountedInstances.push(component); + + mountedInstances.push({component, element}); } export function unregisterScrollListener( component: WindowScroller, element: Element, ) { - mountedInstances = mountedInstances.filter( - instance => instance !== component, - ); - if (!mountedInstances.length) { + // Remove the given component from our known instances + mountedInstances = mountedInstances.filter(mi => mi.component !== component); + + if ( + !mountedInstances.length || // If current length is 0, remove listener + !mountedInstances.some(mi => mi.element === element) // No current mounted instances have the element + ) { element.removeEventListener('scroll', onScrollWindow); if (disablePointerEventsTimeoutId) { cancelAnimationTimeout(disablePointerEventsTimeoutId); diff --git a/source/jest-setup.js b/source/jest-setup.js index 5549294ee..48aef9c52 100644 --- a/source/jest-setup.js +++ b/source/jest-setup.js @@ -1,3 +1,8 @@ +import {configure} from 'enzyme'; +import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; + +configure({adapter: new Adapter()}); + jest.mock('dom-helpers/scrollbarSize', () => { return function getScrollbarSize() { return 20; diff --git a/source/vendor/detectElementResize.js b/source/vendor/detectElementResize.js index 60f9397e3..779f10113 100644 --- a/source/vendor/detectElementResize.js +++ b/source/vendor/detectElementResize.js @@ -9,6 +9,7 @@ * 3) Avoid unnecessary reflows by not measuring size for scroll events bubbling from children. * 4) Add nonce for style element. * 5) Added support for injecting custom window object + * 6) Fix the addResizeListener/removeResizeListener which fails to unmount the scroll listener if there are multiple instances **/ export default function createDetectElementResize(nonce, hostWindow) { @@ -192,6 +193,8 @@ export default function createDetectElementResize(nonce, hostWindow) { element.appendChild(element.__resizeTriggers__); resetTriggers(element); element.addEventListener('scroll', scrollListener, true); + // Store reference to original instantiated scrollListener so it can be unbound later + element.__scrollListener__ = scrollListener; /* Listen for a css animation to detect element display/re-attach */ if (animationstartevent) { @@ -221,7 +224,14 @@ export default function createDetectElementResize(nonce, hostWindow) { 1, ); if (!element.__resizeListeners__.length) { - element.removeEventListener('scroll', scrollListener, true); + if (element.__scrollListener__) { + element.removeEventListener( + 'scroll', + element.__scrollListener__, + true, + ); + } + if (element.__resizeTriggers__.__animationListener__) { element.__resizeTriggers__.removeEventListener( animationstartevent, diff --git a/yarn.lock b/yarn.lock index 324e3f8e7..cdf34bd6a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1350,6 +1350,31 @@ "@webassemblyjs/wast-parser" "1.8.5" "@xtuc/long" "4.2.2" +"@wojtekmaj/enzyme-adapter-react-17@^0.6.1": + version "0.6.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.6.1.tgz#28caa37118c183e5f13c4dfb68cc32cde828ecbc" + integrity sha1-KMqjcRjBg+XxPE37aMwyzego7Lw= + dependencies: + "@wojtekmaj/enzyme-adapter-utils" "^0.1.0" + enzyme-shallow-equal "^1.0.0" + has "^1.0.0" + object.assign "^4.1.0" + object.values "^1.1.0" + prop-types "^15.7.0" + react-is "^17.0.0" + react-test-renderer "^17.0.0" + +"@wojtekmaj/enzyme-adapter-utils@^0.1.0": + version "0.1.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.1.0.tgz#3a2a3db756111d53357e2f119a1612a969ab8c38" + integrity sha1-Oio9t1YRHVM1fi8RmhYSqWmrjDg= + dependencies: + function.prototype.name "^1.1.0" + has "^1.0.0" + object.assign "^4.1.0" + object.fromentries "^2.0.0" + prop-types "^15.7.0" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -1655,6 +1680,26 @@ array-unique@^0.3.2: resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= +array.prototype.filter@^1.0.0: + version "1.0.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/array.prototype.filter/-/array.prototype.filter-1.0.0.tgz#24d63e38983cdc6bf023a3c574b2f2a3f384c301" + integrity sha1-JNY+OJg83GvwI6PFdLLyo/OEwwE= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0" + es-array-method-boxes-properly "^1.0.0" + is-string "^1.0.5" + +array.prototype.flat@^1.2.3: + version "1.2.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz#6ef638b43312bd401b4c6199fdec7e2dc9e9a123" + integrity sha1-bvY4tDMSvUAbTGGZ/ex+LcnpoSM= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.1" + arrify@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/arrify/-/arrify-2.0.1.tgz#c9655e9331e0abcd588d2a7cad7e9956f66701fa" @@ -1951,7 +1996,7 @@ bonjour@^3.5.0: multicast-dns "^6.0.1" multicast-dns-service-types "^1.1.0" -boolbase@~1.0.0: +boolbase@^1.0.0, boolbase@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= @@ -2177,6 +2222,14 @@ cache-base@^1.0.1: union-value "^1.0.0" unset-value "^1.0.0" +call-bind@^1.0.0, call-bind@^1.0.2: + version "1.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" + integrity sha1-sdTonmiBGcPJqQOtMKuy9qkZvjw= + dependencies: + function-bind "^1.1.1" + get-intrinsic "^1.0.2" + call-me-maybe@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" @@ -2270,6 +2323,30 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +cheerio-select@^1.4.0: + version "1.4.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/cheerio-select/-/cheerio-select-1.4.0.tgz#3a16f21e37a2ef0f211d6d1aa4eff054bb22cdc9" + integrity sha1-OhbyHjei7w8hHW0apO/wVLsizck= + dependencies: + css-select "^4.1.2" + css-what "^5.0.0" + domelementtype "^2.2.0" + domhandler "^4.2.0" + domutils "^2.6.0" + +cheerio@^1.0.0-rc.3: + version "1.0.0-rc.9" + resolved "https://packages.atlassian.com/api/npm/npm-remote/cheerio/-/cheerio-1.0.0-rc.9.tgz#a3ae6b7ce7af80675302ff836f628e7cb786a67f" + integrity sha1-o65rfOevgGdTAv+Db2KOfLeGpn8= + dependencies: + cheerio-select "^1.4.0" + dom-serializer "^1.3.1" + domhandler "^4.2.0" + htmlparser2 "^6.1.0" + parse5 "^6.0.1" + parse5-htmlparser2-tree-adapter "^6.0.1" + tslib "^2.2.0" + chokidar@^2.0.0, chokidar@^2.0.2, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -2487,7 +2564,7 @@ commander@2.12.x, commander@^2.11.0, commander@~2.12.1: resolved "https://registry.yarnpkg.com/commander/-/commander-2.12.2.tgz#0f5946c427ed9ec0d91a46bb9def53e54650e555" integrity sha512-BFnaq5ZOGcDN7FlrtBT4xxkgIToalIIxwjxLWVJ8bGTpe1LroqMiqQXdA7ygc7CRvaYS+9zfPGFnJqFSayx+AA== -commander@^2.18.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.3: +commander@^2.18.0, commander@^2.19.0, commander@^2.20.0, commander@^2.8.1, commander@~2.20.3: version "2.20.3" resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== @@ -2771,11 +2848,27 @@ css-select@^1.1.0: domutils "1.5.1" nth-check "~1.0.1" +css-select@^4.1.2: + version "4.1.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/css-select/-/css-select-4.1.2.tgz#8b52b6714ed3a80d8221ec971c543f3b12653286" + integrity sha1-i1K2cU7TqA2CIeyXHFQ/OxJlMoY= + dependencies: + boolbase "^1.0.0" + css-what "^5.0.0" + domhandler "^4.2.0" + domutils "^2.6.0" + nth-check "^2.0.0" + css-what@2.1: version "2.1.0" resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.0.tgz#9467d032c38cfaefb9f2d79501253062f87fa1bd" integrity sha1-lGfQMsOM+u+58teVASUwYvh/ob0= +css-what@^5.0.0: + version "5.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/css-what/-/css-what-5.0.1.tgz#3efa820131f4669a8ac2408f9c32e7c7de9f4cad" + integrity sha1-PvqCATH0ZpqKwkCPnDLnx96fTK0= + cssesc@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" @@ -3042,6 +3135,11 @@ dir-glob@^3.0.1: dependencies: path-type "^4.0.0" +discontinuous-range@1.0.0: + version "1.0.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/discontinuous-range/-/discontinuous-range-1.0.0.tgz#e38331f0844bba49b9a9cb71c771585aab1bc65a" + integrity sha1-44Mx8IRLukm5qctxx3FYWqsbxlo= + dns-equal@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/dns-equal/-/dns-equal-1.0.0.tgz#b39e7f1da6eb0a75ba9c17324b34753c47e0654d" @@ -3099,6 +3197,15 @@ dom-serializer@0: domelementtype "~1.1.1" entities "~1.1.1" +dom-serializer@^1.0.1, dom-serializer@^1.3.1: + version "1.3.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/dom-serializer/-/dom-serializer-1.3.2.tgz#6206437d32ceefaec7161803230c7a20bc1b4d91" + integrity sha1-YgZDfTLO767HFhgDIwx6ILwbTZE= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.2.0" + entities "^2.0.0" + domain-browser@^1.1.1: version "1.1.7" resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.1.7.tgz#867aa4b093faa05f1de08c06f4d7b21fdf8698bc" @@ -3109,6 +3216,11 @@ domelementtype@1: resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.0.tgz#b17aed82e8ab59e52dd9c19b1756e0fc187204c2" integrity sha1-sXrtguirWeUt2cGbF1bg/BhyBMI= +domelementtype@^2.0.1, domelementtype@^2.2.0: + version "2.2.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/domelementtype/-/domelementtype-2.2.0.tgz#9a0b6c2782ed6a1c7323d42267183df9bd8b1d57" + integrity sha1-mgtsJ4LtahxzI9QiZxg9+b2LHVc= + domelementtype@~1.1.1: version "1.1.3" resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.1.3.tgz#bd28773e2642881aec51544924299c5cd822185b" @@ -3126,6 +3238,13 @@ domhandler@2.1: dependencies: domelementtype "1" +domhandler@^4.0.0, domhandler@^4.2.0: + version "4.2.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/domhandler/-/domhandler-4.2.0.tgz#f9768a5f034be60a89a27c2e4d0f74eba0d8b059" + integrity sha1-+XaKXwNL5gqJonwuTQ9066DYsFk= + dependencies: + domelementtype "^2.2.0" + domutils@1.1: version "1.1.6" resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.1.6.tgz#bddc3de099b9a2efacc51c623f28f416ecc57485" @@ -3141,6 +3260,15 @@ domutils@1.5.1: dom-serializer "0" domelementtype "1" +domutils@^2.5.2, domutils@^2.6.0: + version "2.6.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/domutils/-/domutils-2.6.0.tgz#2e15c04185d43fb16ae7057cb76433c6edb938b7" + integrity sha1-LhXAQYXUP7Fq5wV8t2Qzxu25OLc= + dependencies: + dom-serializer "^1.0.1" + domelementtype "^2.2.0" + domhandler "^4.2.0" + duplexify@^3.4.2, duplexify@^3.6.0: version "3.7.1" resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" @@ -3244,11 +3372,52 @@ enhanced-resolve@^4.1.0: memory-fs "^0.5.0" tapable "^1.0.0" +entities@^2.0.0: + version "2.2.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/entities/-/entities-2.2.0.tgz#098dc90ebb83d8dffa089d55256b351d34c4da55" + integrity sha1-CY3JDruD2N/6CJ1VJWs1HTTE2lU= + entities@~1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.1.tgz#6e5c2d0a5621b5dadaecef80b90edfb5cd7772f0" integrity sha1-blwtClYhtdra7O+AuQ7ftc13cvA= +enzyme-shallow-equal@^1.0.0, enzyme-shallow-equal@^1.0.1: + version "1.0.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.4.tgz#b9256cb25a5f430f9bfe073a84808c1d74fced2e" + integrity sha1-uSVsslpfQw+b/gc6hICMHXT87S4= + dependencies: + has "^1.0.3" + object-is "^1.1.2" + +enzyme@^3.11.0: + version "3.11.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/enzyme/-/enzyme-3.11.0.tgz#71d680c580fe9349f6f5ac6c775bc3e6b7a79c28" + integrity sha1-cdaAxYD+k0n29axsd1vD5rennCg= + dependencies: + array.prototype.flat "^1.2.3" + cheerio "^1.0.0-rc.3" + enzyme-shallow-equal "^1.0.1" + function.prototype.name "^1.1.2" + has "^1.0.3" + html-element-map "^1.2.0" + is-boolean-object "^1.0.1" + is-callable "^1.1.5" + is-number-object "^1.0.4" + is-regex "^1.0.5" + is-string "^1.0.5" + is-subset "^0.1.1" + lodash.escape "^4.0.1" + lodash.isequal "^4.5.0" + object-inspect "^1.7.0" + object-is "^1.0.2" + object.assign "^4.1.0" + object.entries "^1.1.1" + object.values "^1.1.1" + raf "^3.4.1" + rst-selector-parser "^2.2.3" + string.prototype.trim "^1.2.1" + errno@^0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.4.tgz#b896e23a9e5e8ba33871fc996abd3635fc9a1c7d" @@ -3286,6 +3455,28 @@ es-abstract@^1.12.0, es-abstract@^1.15.0: string.prototype.trimleft "^2.1.0" string.prototype.trimright "^2.1.0" +es-abstract@^1.18.0, es-abstract@^1.18.0-next.1, es-abstract@^1.18.0-next.2, es-abstract@^1.18.2: + version "1.18.3" + resolved "https://packages.atlassian.com/api/npm/npm-remote/es-abstract/-/es-abstract-1.18.3.tgz#25c4c3380a27aa203c44b2b685bba94da31b63e0" + integrity sha1-JcTDOAonqiA8RLK2hbupTaMbY+A= + dependencies: + call-bind "^1.0.2" + es-to-primitive "^1.2.1" + function-bind "^1.1.1" + get-intrinsic "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.2" + is-callable "^1.2.3" + is-negative-zero "^2.0.1" + is-regex "^1.1.3" + is-string "^1.0.6" + object-inspect "^1.10.3" + object-keys "^1.1.1" + object.assign "^4.1.2" + string.prototype.trimend "^1.0.4" + string.prototype.trimstart "^1.0.4" + unbox-primitive "^1.0.1" + es-abstract@^1.5.1, es-abstract@^1.7.0: version "1.9.0" resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.9.0.tgz#690829a07cae36b222e7fd9b75c0d0573eb25227" @@ -3297,6 +3488,11 @@ es-abstract@^1.5.1, es-abstract@^1.7.0: is-callable "^1.1.3" is-regex "^1.0.4" +es-array-method-boxes-properly@^1.0.0: + version "1.0.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz#873f3e84418de4ee19c5be752990b2e44718d09e" + integrity sha1-hz8+hEGN5O4Zxb51KZCy5EcY0J4= + es-to-primitive@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.1.1.tgz#45355248a88979034b6792e19bb81f2b7975dd0d" @@ -3306,7 +3502,7 @@ es-to-primitive@^1.1.1: is-date-object "^1.0.1" is-symbol "^1.0.1" -es-to-primitive@^1.2.0: +es-to-primitive@^1.2.0, es-to-primitive@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== @@ -4206,11 +4402,26 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== +function.prototype.name@^1.1.0, function.prototype.name@^1.1.2: + version "1.1.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/function.prototype.name/-/function.prototype.name-1.1.4.tgz#e4ea839b9d3672ae99d0efd9f38d9191c5eaac83" + integrity sha1-5OqDm502cq6Z0O/Z842RkcXqrIM= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + functions-have-names "^1.2.2" + functional-red-black-tree@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= +functions-have-names@^1.2.2: + version "1.2.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/functions-have-names/-/functions-have-names-1.2.2.tgz#98d93991c39da9361f8e50b337c4f6e41f120e21" + integrity sha1-mNk5kcOdqTYfjlCzN8T25B8SDiE= + gauge@~2.7.3: version "2.7.4" resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" @@ -4235,6 +4446,15 @@ get-caller-file@^2.0.1: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-intrinsic@^1.0.2, get-intrinsic@^1.1.1: + version "1.1.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/get-intrinsic/-/get-intrinsic-1.1.1.tgz#15f59f376f855c446963948f0d24cd3637b4abc6" + integrity sha1-FfWfN2+FXERpY5SPDSTNNje0q8Y= + dependencies: + function-bind "^1.1.1" + has "^1.0.3" + has-symbols "^1.0.1" + get-own-enumerable-property-symbols@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.1.tgz#6f7764f88ea11e0b514bd9bd860a132259992ca4" @@ -4494,6 +4714,11 @@ has-ansi@^2.0.0: dependencies: ansi-regex "^2.0.0" +has-bigints@^1.0.1: + version "1.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/has-bigints/-/has-bigints-1.0.1.tgz#64fe6acb020673e3b78db035a5af69aa9d07b113" + integrity sha1-ZP5qywIGc+O3jbA1pa9pqp0HsRM= + has-flag@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" @@ -4504,6 +4729,11 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.0.tgz#ba1a8f1af2a0fc39650f5c850367704122063b44" integrity sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q= +has-symbols@^1.0.1, has-symbols@^1.0.2: + version "1.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/has-symbols/-/has-symbols-1.0.2.tgz#165d3070c00309752a1236a479331e3ac56f1423" + integrity sha1-Fl0wcMADCXUqEjakeTMeOsVvFCM= + has-unicode@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" @@ -4540,6 +4770,13 @@ has-values@^1.0.0: is-number "^3.0.0" kind-of "^4.0.0" +has@^1.0.0, has@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" + integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== + dependencies: + function-bind "^1.1.1" + has@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/has/-/has-1.0.1.tgz#8461733f538b0837c9361e39a9ab9e9704dc2f28" @@ -4547,13 +4784,6 @@ has@^1.0.1: dependencies: function-bind "^1.0.2" -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - hash-base@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-2.0.2.tgz#66ea1d856db4e8a5470cadf6fce23ae5244ef2e1" @@ -4654,6 +4884,14 @@ hpack.js@^2.1.6: readable-stream "^2.0.1" wbuf "^1.1.0" +html-element-map@^1.2.0: + version "1.3.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/html-element-map/-/html-element-map-1.3.1.tgz#44b2cbcfa7be7aa4ff59779e47e51012e1c73c08" + integrity sha1-RLLLz6e+eqT/WXeeR+UQEuHHPAg= + dependencies: + array.prototype.filter "^1.0.0" + call-bind "^1.0.2" + html-encoding-sniffer@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.1.tgz#79bf7a785ea495fe66165e734153f363ff5437da" @@ -4693,6 +4931,16 @@ html-webpack-plugin@^3.2.0: toposort "^1.0.0" util.promisify "1.0.0" +htmlparser2@^6.1.0: + version "6.1.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/htmlparser2/-/htmlparser2-6.1.0.tgz#c4d762b6c3371a05dbe65e94ae43a9f845fb8fb7" + integrity sha1-xNditsM3GgXb5l6UrkOp+EX7j7c= + dependencies: + domelementtype "^2.0.1" + domhandler "^4.0.0" + domutils "^2.5.2" + entities "^2.0.0" + htmlparser2@~3.3.0: version "3.3.0" resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.3.0.tgz#cc70d05a59f6542e43f0e685c982e14c924a9efe" @@ -5065,6 +5313,11 @@ is-arrayish@^0.2.1: resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= +is-bigint@^1.0.1: + version "1.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-bigint/-/is-bigint-1.0.2.tgz#ffb381442503235ad245ea89e45b3dbff040ee5a" + integrity sha1-/7OBRCUDI1rSReqJ5Fs9v/BA7lo= + is-binary-path@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" @@ -5079,6 +5332,13 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" +is-boolean-object@^1.0.1, is-boolean-object@^1.1.0: + version "1.1.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-boolean-object/-/is-boolean-object-1.1.1.tgz#3c0878f035cb821228d350d2e1e36719716a3de8" + integrity sha1-PAh48DXLghIo01DS4eNnGXFqPeg= + dependencies: + call-bind "^1.0.2" + is-buffer@^1.0.2: version "1.1.4" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.4.tgz#cfc86ccd5dc5a52fa80489111c6920c457e2d98b" @@ -5106,6 +5366,11 @@ is-callable@^1.1.4: resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.4.tgz#1e1adf219e1eeb684d691f9d6a05ff0d30a24d75" integrity sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA== +is-callable@^1.1.5, is-callable@^1.2.3: + version "1.2.3" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-callable/-/is-callable-1.2.3.tgz#8b1e0500b73a1d76c70487636f368e519de8db8e" + integrity sha1-ix4FALc6HXbHBIdjbzaOUZ3o244= + is-ci@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-2.0.0.tgz#6bc6334181810e04b5c22b3d589fdca55026404c" @@ -5225,6 +5490,16 @@ is-module@^1.0.0: resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= +is-negative-zero@^2.0.1: + version "2.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" + integrity sha1-PedGwY3aIxkkGlNnWQjY92bxHCQ= + +is-number-object@^1.0.4: + version "1.0.5" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-number-object/-/is-number-object-1.0.5.tgz#6edfaeed7950cff19afedce9fbfca9ee6dd289eb" + integrity sha1-bt+u7XlQz/Ga/tzp+/yp7m3Sies= + is-number@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" @@ -5316,6 +5591,14 @@ is-regex@^1.0.4: dependencies: has "^1.0.1" +is-regex@^1.0.5, is-regex@^1.1.3: + version "1.1.3" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-regex/-/is-regex-1.1.3.tgz#d029f9aff6448b93ebbe3f33dac71511fdcbef9f" + integrity sha1-0Cn5r/ZEi5Prvj8z2scVEf3L758= + dependencies: + call-bind "^1.0.2" + has-symbols "^1.0.2" + is-regexp@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" @@ -5331,6 +5614,16 @@ is-stream@^2.0.0: resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.0.tgz#bde9c32680d6fae04129d6ac9d921ce7815f78e3" integrity sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw== +is-string@^1.0.5, is-string@^1.0.6: + version "1.0.6" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-string/-/is-string-1.0.6.tgz#3fe5d5992fb0d93404f32584d4b0179a71b54a5f" + integrity sha1-P+XVmS+w2TQE8yWE1LAXmnG1Sl8= + +is-subset@^0.1.1: + version "0.1.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-subset/-/is-subset-0.1.1.tgz#8a59117d932de1de00f245fcdd39ce43f1e939a6" + integrity sha1-ilkRfZMt4d4A8kX83TnOQ/HpOaY= + is-symbol@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.1.tgz#3cc59f00025194b6ab2e38dbae6689256b660572" @@ -5343,6 +5636,13 @@ is-symbol@^1.0.2: dependencies: has-symbols "^1.0.0" +is-symbol@^1.0.3: + version "1.0.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" + integrity sha1-ptrJO2NbBjymhyI23oiRClevE5w= + dependencies: + has-symbols "^1.0.2" + is-typedarray@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" @@ -6203,6 +6503,16 @@ lodash.debounce@^4.0.8: resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" integrity sha1-gteb/zCmfEAF/9XiUVMArZyk168= +lodash.escape@^4.0.1: + version "4.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/lodash.escape/-/lodash.escape-4.0.1.tgz#c9044690c21e04294beaa517712fded1fa88de98" + integrity sha1-yQRGkMIeBClL6qUXcS/e0fqI3pg= + +lodash.flattendeep@^4.4.0: + version "4.4.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" + integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= + lodash.isequal@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/lodash.isequal/-/lodash.isequal-4.5.0.tgz#415c4478f2bcc30120c22ce10ed3226f7d3e18e0" @@ -6582,6 +6892,11 @@ mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1: dependencies: minimist "0.0.8" +moo@^0.5.0: + version "0.5.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/moo/-/moo-0.5.1.tgz#7aae7f384b9b09f620b6abf6f74ebbcd1b65dbc4" + integrity sha1-eq5/OEubCfYgtqv29067zRtl28Q= + move-concurrently@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/move-concurrently/-/move-concurrently-1.0.1.tgz#be2c005fda32e0b29af1f05d7c4b33214c701f92" @@ -6678,6 +6993,16 @@ ncname@1.0.x: dependencies: xml-char-classes "^1.0.0" +nearley@^2.7.10: + version "2.20.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/nearley/-/nearley-2.20.1.tgz#246cd33eff0d012faf197ff6774d7ac78acdd474" + integrity sha1-JGzTPv8NAS+vGX/2d016x4rN1HQ= + dependencies: + commander "^2.19.0" + moo "^0.5.0" + railroad-diagrams "^1.0.0" + randexp "0.4.6" + needle@^2.2.1: version "2.4.0" resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" @@ -6897,6 +7222,13 @@ npmlog@^4.0.2: gauge "~2.7.3" set-blocking "~2.0.0" +nth-check@^2.0.0: + version "2.0.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/nth-check/-/nth-check-2.0.0.tgz#1bb4f6dac70072fc313e8c9cd1417b5074c0a125" + integrity sha1-G7T22scAcvwxPoyc0UF7UHTAoSU= + dependencies: + boolbase "^1.0.0" + nth-check@~1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.1.tgz#9929acdf628fc2c41098deab82ac580cf149aae4" @@ -6943,11 +7275,24 @@ object-copy@^0.1.0: define-property "^0.2.5" kind-of "^3.0.3" +object-inspect@^1.10.3, object-inspect@^1.7.0: + version "1.10.3" + resolved "https://packages.atlassian.com/api/npm/npm-remote/object-inspect/-/object-inspect-1.10.3.tgz#c2aa7d2d09f50c99375704f7a0adf24c5782d369" + integrity sha1-wqp9LQn1DJk3VwT3oK3yTFeC02k= + object-inspect@^1.6.0: version "1.7.0" resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== +object-is@^1.0.2, object-is@^1.1.2: + version "1.1.5" + resolved "https://packages.atlassian.com/api/npm/npm-remote/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha1-ud7qpfx/GEag+uzc7sE45XePU6w= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -6975,6 +7320,16 @@ object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" +object.assign@^4.1.2: + version "4.1.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/object.assign/-/object.assign-4.1.2.tgz#0ed54a342eceb37b38ff76eb831a0e788cb63940" + integrity sha1-DtVKNC7Os3s4/3brgxoOeIy2OUA= + dependencies: + call-bind "^1.0.0" + define-properties "^1.1.3" + has-symbols "^1.0.1" + object-keys "^1.1.1" + object.entries@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.0.tgz#2024fc6d6ba246aee38bdb0ffd5cfbcf371b7519" @@ -6985,6 +7340,15 @@ object.entries@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.entries@^1.1.1: + version "1.1.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/object.entries/-/object.entries-1.1.4.tgz#43ccf9a50bc5fd5b649d45ab1a579f24e088cafd" + integrity sha1-Q8z5pQvF/VtknUWrGlefJOCIyv0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + object.fromentries@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.1.tgz#050f077855c7af8ae6649f45c80b16ee2d31e704" @@ -7020,6 +7384,15 @@ object.values@^1.1.0: function-bind "^1.1.1" has "^1.0.3" +object.values@^1.1.1: + version "1.1.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/object.values/-/object.values-1.1.4.tgz#0d273762833e816b693a637d30073e7051535b30" + integrity sha1-DSc3YoM+gWtpOmN9MAc+cFFTWzA= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.2" + obuf@^1.0.0: version "1.1.1" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.1.tgz#104124b6c602c6796881a042541d36db43a5264e" @@ -7265,6 +7638,13 @@ parse-passwd@^1.0.0: resolved "https://registry.yarnpkg.com/parse-passwd/-/parse-passwd-1.0.0.tgz#6d5b934a456993b23d37f40a382d6f1666a8e5c6" integrity sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY= +parse5-htmlparser2-tree-adapter@^6.0.1: + version "6.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz#2cdf9ad823321140370d4dbf5d3e92c7c8ddc6e6" + integrity sha1-LN+a2CMyEUA3DU2/XT6Sx8jdxuY= + dependencies: + parse5 "^6.0.1" + parse5@^3.0.2: version "3.0.3" resolved "https://registry.yarnpkg.com/parse5/-/parse5-3.0.3.tgz#042f792ffdd36851551cf4e9e066b3874ab45b5c" @@ -7272,6 +7652,11 @@ parse5@^3.0.2: dependencies: "@types/node" "*" +parse5@^6.0.1: + version "6.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/parse5/-/parse5-6.0.1.tgz#e1a1c085c569b3dc08321184f19a39cc27f7c30b" + integrity sha1-4aHAhcVps9wIMhGE8Zo5zCf3wws= + parseurl@~1.3.2: version "1.3.2" resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.2.tgz#fc289d4ed8993119460c156253262cdc8de65bf3" @@ -7674,7 +8059,7 @@ prop-types@^15.5.4: loose-envify "^1.3.1" object-assign "^4.1.1" -prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.6.2, prop-types@^15.7.0, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -7814,6 +8199,26 @@ querystringify@^2.1.1: resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.1.1.tgz#60e5a5fd64a7f8bfa4d2ab2ed6fdf4c85bad154e" integrity sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA== +raf@^3.4.1: + version "3.4.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/raf/-/raf-3.4.1.tgz#0742e99a4a6552f445d73e3ee0328af0ff1ede39" + integrity sha1-B0LpmkplUvRF1z4+4DKK8P8e3jk= + dependencies: + performance-now "^2.1.0" + +railroad-diagrams@^1.0.0: + version "1.0.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz#eb7e6267548ddedfb899c1b90e57374559cddb7e" + integrity sha1-635iZ1SN3t+4mcG5Dlc3RVnN234= + +randexp@0.4.6: + version "0.4.6" + resolved "https://packages.atlassian.com/api/npm/npm-remote/randexp/-/randexp-0.4.6.tgz#e986ad5e5e31dae13ddd6f7b3019aa7c87f60ca3" + integrity sha1-6YatXl4x2uE93W97MBmqfIf2DKM= + dependencies: + discontinuous-range "1.0.0" + ret "~0.1.10" + randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: version "2.0.5" resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.0.5.tgz#dc009a246b8d09a177b4b7a0ae77bc570f4b1b79" @@ -7885,6 +8290,11 @@ react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4: resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.11.0.tgz#b85dfecd48ad1ce469ff558a882ca8e8313928fa" integrity sha512-gbBVYR2p8mnriqAwWx9LbuUrShnAuSCNnuPGyc7GJrMVQtPDAh8iLpv7FRuMPFb56KkaVZIYSz1PrjI9q0QPCw== +react-is@^17.0.0, react-is@^17.0.2: + version "17.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0" + integrity sha1-5pHUqOnHiTZWVVOas3J2Kw77VPA= + react-lifecycles-compat@^3.0.4: version "3.0.4" resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362" @@ -7927,6 +8337,16 @@ react-shallow-renderer@^16.13.1: object-assign "^4.1.1" react-is "^16.12.0 || ^17.0.0" +react-test-renderer@^17.0.0: + version "17.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/react-test-renderer/-/react-test-renderer-17.0.2.tgz#4cd4ae5ef1ad5670fc0ef776e8cc7e1231d9866c" + integrity sha1-TNSuXvGtVnD8Dvd26Mx+EjHZhmw= + dependencies: + object-assign "^4.1.1" + react-is "^17.0.2" + react-shallow-renderer "^16.13.1" + scheduler "^0.20.2" + react-test-renderer@^17.0.1: version "17.0.1" resolved "https://registry.yarnpkg.com/react-test-renderer/-/react-test-renderer-17.0.1.tgz#3187e636c3063e6ae498aedf21ecf972721574c7" @@ -8413,6 +8833,14 @@ rollup@^1.26.5: "@types/node" "*" acorn "^7.1.0" +rst-selector-parser@^2.2.3: + version "2.2.3" + resolved "https://packages.atlassian.com/api/npm/npm-remote/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz#81b230ea2fcc6066c89e3472de794285d9b03d91" + integrity sha1-gbIw6i/MYGbInjRy3nlChdmwPZE= + dependencies: + lodash.flattendeep "^4.4.0" + nearley "^2.7.10" + rsvp@^4.8.4: version "4.8.5" resolved "https://registry.yarnpkg.com/rsvp/-/rsvp-4.8.5.tgz#c8f155311d167f68f21e168df71ec5b083113734" @@ -8514,6 +8942,14 @@ scheduler@^0.20.1: loose-envify "^1.1.0" object-assign "^4.1.1" +scheduler@^0.20.2: + version "0.20.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/scheduler/-/scheduler-0.20.2.tgz#4baee39436e34aa93b4874bddcbf0fe8b8b50e91" + integrity sha1-S67jlDbjSqk7SHS93L8P6Li1DpE= + dependencies: + loose-envify "^1.1.0" + object-assign "^4.1.1" + schema-utils@^0.3.0: version "0.3.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-0.3.0.tgz#f5877222ce3e931edae039f17eb3716e7137f8cf" @@ -9053,6 +9489,23 @@ string-width@^4.1.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" +string.prototype.trim@^1.2.1: + version "1.2.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz#6014689baf5efaf106ad031a5fa45157666ed1bd" + integrity sha1-YBRom69e+vEGrQMaX6RRV2Zu0b0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + es-abstract "^1.18.0-next.2" + +string.prototype.trimend@^1.0.4: + version "1.0.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz#e75ae90c2942c63504686c18b287b4a0b1a45f80" + integrity sha1-51rpDClCxjUEaGwYsoe0oLGkX4A= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string.prototype.trimleft@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.0.tgz#6cc47f0d7eb8d62b0f3701611715a3954591d634" @@ -9069,6 +9522,14 @@ string.prototype.trimright@^2.1.0: define-properties "^1.1.3" function-bind "^1.1.1" +string.prototype.trimstart@^1.0.4: + version "1.0.4" + resolved "https://packages.atlassian.com/api/npm/npm-remote/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz#b36399af4ab2999b4c9c648bd7a3fb2bb26feeed" + integrity sha1-s2OZr0qymZtMnGSL16P7K7Jv7u0= + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + string_decoder@^1.0.0, string_decoder@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.0.3.tgz#0fc67d7c141825de94282dd536bec6b9bce860ab" @@ -9442,6 +9903,11 @@ tslib@^1.9.0: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.10.0.tgz#c3c19f95973fb0a62973fb09d90d961ee43e5c8a" integrity sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ== +tslib@^2.2.0: + version "2.2.0" + resolved "https://packages.atlassian.com/api/npm/npm-remote/tslib/-/tslib-2.2.0.tgz#fb2c475977e35e241311ede2693cee1ec6698f5c" + integrity sha1-+yxHWXfjXiQTEe3iaTzuHsZpj1w= + tty-browserify@0.0.0: version "0.0.0" resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.0.tgz#a157ba402da24e9bf957f9aa69d524eed42901a6" @@ -9515,6 +9981,16 @@ uglify-js@^3.4.9: commander "~2.20.3" source-map "~0.6.1" +unbox-primitive@^1.0.1: + version "1.0.1" + resolved "https://packages.atlassian.com/api/npm/npm-remote/unbox-primitive/-/unbox-primitive-1.0.1.tgz#085e215625ec3162574dc8859abee78a59b14471" + integrity sha1-CF4hViXsMWJXTciFmr7nilmxRHE= + dependencies: + function-bind "^1.1.1" + has-bigints "^1.0.1" + has-symbols "^1.0.2" + which-boxed-primitive "^1.0.2" + unicode-canonical-property-names-ecmascript@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" @@ -9943,6 +10419,17 @@ whatwg-url@^6.3.0: tr46 "^1.0.0" webidl-conversions "^4.0.1" +which-boxed-primitive@^1.0.2: + version "1.0.2" + resolved "https://packages.atlassian.com/api/npm/npm-remote/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" + integrity sha1-E3V7yJsgmwSf5dhkMOIc9AqJqOY= + dependencies: + is-bigint "^1.0.1" + is-boolean-object "^1.1.0" + is-number-object "^1.0.4" + is-string "^1.0.5" + is-symbol "^1.0.3" + which-module@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a"